Please make sure IN_MYBB is defined."); } $languages = $lang->get_languages(); $page->add_breadcrumb_item($lang->languages, "index.php?module=config-languages"); $plugins->run_hooks("admin_config_languages_begin"); if($mybb->input['action'] == "edit_properties") { $plugins->run_hooks("admin_config_languages_edit_properties"); $editlang = basename($mybb->input['lang']); $file = MYBB_ROOT."inc/languages/".$editlang.".php"; if(!file_exists($file)) { flash_message($lang->error_invalid_file, 'error'); admin_redirect("index.php?module=config-languages"); } if($mybb->request_method == "post") { if(!is_writable($file)) { flash_message($lang->error_cannot_write_to_file, 'error'); admin_redirect("index.php?module=config-languages"); } foreach($mybb->input['info'] as $key => $info) { $info = str_replace("\\", "\\\\", $info); $info = str_replace('$', '\$', $info); $newlanginfo[$key] = str_replace("\"", '\"', $info); } // Get contents of existing file require $file; // Make the contents of the new file $newfile = " on all pages \$langinfo['htmllang'] = \"{$newlanginfo['htmllang']}\"; // Sets the character set, blank uses the default. \$langinfo['charset'] = \"{$newlanginfo['charset']}\";\n". "?".">"; // Put it in! if($file = fopen($file, "w")) { fwrite($file, $newfile); fclose($file); $plugins->run_hooks("admin_config_languages_edit_properties_commit"); // Log admin action log_admin_action($editlang); flash_message($lang->success_langprops_updated, 'success'); admin_redirect("index.php?module=config-languages&action=edit&lang={$editlang}&editwith={$editwith}"); } else { $errors[] = $lang->error_cannot_write_to_file; } } $page->add_breadcrumb_item($languages[$editlang], "index.php?module=config-languages&action=edit&lang={$editlang}"); $page->add_breadcrumb_item($lang->nav_editing_set); $page->output_header($lang->languages); $sub_tabs['edit_properties'] = array( "title" => $lang->edit_properties, "link" => "index.php?module=config-languages", "description" => $lang->edit_properties_desc ); $page->output_nav_tabs($sub_tabs, "edit_properties"); // Get language info require $file; $form = new Form("index.php?module=config-languages&action=edit_properties", "post", "editset"); echo $form->generate_hidden_field("lang", $editlang); echo $form->generate_hidden_field("info[author]", $langinfo['author']); echo $form->generate_hidden_field("info[website]", $langinfo['website']); echo $form->generate_hidden_field("info[version]", $langinfo['version']); if($errors) { $page->output_inline_error($errors); } else { if($langinfo['admin']) { $mybb->input['info']['admin'] = 1; } else { $mybb->input['info']['admin'] = 0; } if($langinfo['rtl']) { $mybb->input['info']['rtl'] = 1; } else { $mybb->input['info']['rtl'] = 0; } $mybb->input['info']['name'] = $langinfo['name']; $mybb->input['info']['htmllang'] = $langinfo['htmllang']; $mybb->input['info']['charset'] = $langinfo['charset']; } $form_container = new FormContainer($lang->edit_properties); $form_container->output_row($lang->friendly_name." *", "", $form->generate_text_box('info[name]', $mybb->input['info']['name'], array('id' => 'name')), 'name'); $form_container->output_row($lang->language_in_html." *", "", $form->generate_text_box('info[htmllang]', $mybb->input['info']['htmllang'], array('id' => 'htmllang')), 'htmllang'); $form_container->output_row($lang->charset." *", "", $form->generate_text_box('info[charset]', $mybb->input['info']['charset'], array('id' => 'charset')), 'charset'); $form_container->output_row($lang->rtl." *", "", $form->generate_yes_no_radio('info[rtl]', $mybb->input['info']['rtl'], array('id' => 'rtl')), 'rtl'); $form_container->output_row($lang->admin." *", "", $form->generate_yes_no_radio('info[admin]', $mybb->input['info']['admin'], array('id' => 'admin')), 'admin'); // Check if file is writable, before allowing submission if(!is_writable($file)) { $no_write = 1; $page->output_alert($lang->alert_note_cannot_write); } $form_container->end(); $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } if($mybb->input['action'] == "quick_phrases") { $plugins->run_hooks("admin_config_languages_quick_phrases"); // Validate input $editlang = basename($mybb->input['lang']); $folder = MYBB_ROOT."inc/languages/".$editlang."/"; $page->add_breadcrumb_item($languages[$editlang], "index.php?module=config-languages&action=quick_edit&lang={$editlang}"); if(!file_exists($folder) || ($editwithfolder && !file_exists($editwithfolder))) { flash_message($lang->error_invalid_set, 'error'); admin_redirect("index.php?module=config-languages"); } $quick_phrases = array( 'member.lang.php' => array( 'agreement' => $lang->quickphrases_agreement, 'agreement_1' => $lang->quickphrases_agreement_1, 'agreement_2' => $lang->quickphrases_agreement_2, 'agreement_3' => $lang->quickphrases_agreement_3, 'agreement_4' => $lang->quickphrases_agreement_4, 'agreement_5' => $lang->quickphrases_agreement_5 ), 'messages.lang.php' => array( 'error_nopermission_guest_1' => $lang->quickphrases_error_nopermission_guest_1, 'error_nopermission_guest_2' => $lang->quickphrases_error_nopermission_guest_2, 'error_nopermission_guest_3' => $lang->quickphrases_error_nopermission_guest_3, 'error_nopermission_guest_4' => $lang->quickphrases_error_nopermission_guest_4 ) ); if($mybb->request_method == 'post') { if($mybb->request_method == 'post') { foreach($quick_phrases as $file => $phrases) { $lines = file($folder.$file); $fp = fopen($folder.$file, 'w'); fwrite($fp, 'input['edit'][$phrase]) { $new_line = '$l[\''.$phrase.'\'] = "'.str_replace('"', '\"', $mybb->input['edit'][$phrase]).'";'.PHP_EOL; fwrite($fp, $new_line); } else { fwrite($fp, $lines[$i]); } } fclose($fp); } // Log admin action log_admin_action($editlang); flash_message($lang->success_quickphrases_updated, 'success'); admin_redirect('index.php?module=config-languages&action=edit&lang='.$editlang); } } $page->output_header($lang->languages); $sub_tabs['language_files'] = array( 'title' => $lang->language_files, 'link' => "index.php?module=config-languages&action=edit&lang=".$editlang, 'description' => $lang->language_files_desc ); $sub_tabs['quick_phrases'] = array( 'title' => $lang->quick_phrases, 'link' => "index.php?module=config-languages&action=quick_phrases&lang=".$editlang, 'description' => $lang->quick_phrases_desc ); $page->output_nav_tabs($sub_tabs, 'quick_phrases'); $form = new Form('index.php?module=config-languages&action=quick_phrases&lang='.$editlang, 'post', 'quick_phrases'); if($errors) { $page->output_inline_error($errors); } $table = new Table; // Check if file is writable, before allowing submission $no_write = null; foreach($quick_phrases as $file => $phrases) { if(!is_writable($folder.$file)) { $no_write = 1; } } if($no_write) { $page->output_alert($lang->alert_note_cannot_write); } $form_container = new FormContainer($lang->quick_phrases); foreach($quick_phrases as $file => $phrases) { require $folder.$file; foreach($phrases as $phrase => $description) { $value = $l[$phrase]; if(my_strtolower($langinfo['charset']) == "utf-8") { $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $value); } else { $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $value); } $form_container->output_row($description, $phrase, $form->generate_text_area("edit[$phrase]", $value, array('id' => 'lang_'.$phrase, 'rows' => 2, 'style' => "width: 98%; padding: 4px;")), 'lang_'.$phrase, array('width' => '50%')); } } $form_container->end(); $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); $form->output_submit_wrapper($buttons); $form->end(); $page->output_footer(); } if($mybb->input['action'] == "edit") { $plugins->run_hooks("admin_config_languages_edit"); // Validate input $editlang = basename($mybb->input['lang']); $folder = MYBB_ROOT."inc/languages/".$editlang."/"; $page->add_breadcrumb_item($languages[$editlang], "index.php?module=config-languages&action=edit&lang={$editlang}"); $editwith = basename($mybb->input['editwith']); $editwithfolder = ''; if($editwith) { $editwithfolder = MYBB_ROOT."inc/languages/".$editwith."/"; } if(!file_exists($folder) || ($editwithfolder && !file_exists($editwithfolder))) { flash_message($lang->error_invalid_set, 'error'); admin_redirect("index.php?module=config-languages"); } if(isset($mybb->input['file'])) { // Validate input $file = basename($mybb->input['file']); if($mybb->input['inadmin'] == 1) { $file = 'admin/'.$file; } $page->add_breadcrumb_item($file); $editfile = $folder.$file; $withfile = ''; $editwithfile = ''; if($editwithfolder) { $editwithfile = $editwithfolder.$file; } if(!file_exists($editfile) || ($editwithfile && !file_exists($editwithfile)) || $file == '.' || $file == '..') { flash_message($lang->error_invalid_file, 'error'); admin_redirect("index.php?module=config-languages"); } if($mybb->request_method == "post") { // Make the contents of the new file // Load the old file $contents = implode('', file($editfile)); // Loop through and change entries foreach($mybb->input['edit'] as $key => $phrase) { // Sanitize (but it doesn't work well) $phrase = str_replace('$', '\$', $phrase); $phrase = str_replace("\\", "\\\\", $phrase); $phrase = str_replace("\"", '\"', $phrase); $key = str_replace("\\", '', $key); $key = str_replace('$', '', $key); $key = str_replace("'", '', $key); // Ugly regexp to find a variable and replace it. $contents = preg_replace('@\n\$l\[\''.$key.'\']([\s]*)=([\s]*)("(.*?)"|\'(.*?)\');([\s]*)\n@si', "\n\$l['{$key}'] = \"{$phrase}\";\n", $contents); } // Put it back! if($fp = @fopen($editfile, "w")) { fwrite($fp, $contents); fclose($fp); $plugins->run_hooks("admin_config_languages_edit_commit"); // Log admin action log_admin_action($editlang, $editfile, $mybb->input['inadmin']); flash_message($lang->success_langfile_updated, 'success'); admin_redirect("index.php?module=config-languages&action=edit&lang={$editlang}&editwith={$editwith}"); } else { $errors[] = $lang->error_cannot_write_to_file; } } // Get file being edited in an array require $editfile; if(count($l) > 0) { $editvars = $l; } else { $editvars = array(); } unset($l); $withvars = array(); // Get edit with file in an array if($editwithfile) { require $editwithfile; $withvars = $l; unset($l); } // Start output $page->output_header($lang->languages); $sub_tabs['edit_language_variables'] = array( "title" => $lang->edit_language_variables, "link" => "index.php?module=config-languages", "description" => $lang->edit_language_variables_desc ); $page->output_nav_tabs($sub_tabs, "edit_language_variables"); $form = new Form("index.php?module=config-languages&action=edit", "post", "edit"); echo $form->generate_hidden_field("file", $file); echo $form->generate_hidden_field("lang", $editlang); echo $form->generate_hidden_field("editwith", $editwith); echo $form->generate_hidden_field("inadmin", intval($mybb->input['inadmin'])); if($errors) { $page->output_inline_error($errors); } // Check if file is writable, before allowing submission $no_write = null; if(!is_writable($editfile)) { $no_write = 1; $page->output_alert($lang->alert_note_cannot_write); } $form_container = new FormContainer($file); if($editwithfile) { // Editing with another file $form_container->output_row_header($languages[$editwith]); $form_container->output_row_header($languages[$editlang]); // Make each editing row foreach($editvars as $key => $value) { if(my_strtolower($langinfo['charset']) == "utf-8") { $withvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $withvars[$key]); $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $value); } else { $withvars[$key] = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $withvars[$key]); $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $value); } $form_container->output_row($key, "", $form->generate_text_area("", $withvars[$key], array('disabled' => true, 'rows' => 2, 'style' => "width: 98%; padding: 4px;")), "", array('width' => '50%', 'skip_construct' => true)); $form_container->output_row($key, "", $form->generate_text_area("edit[$key]", $value, array('id' => 'lang_'.$key, 'rows' => 2, 'style' => "width: 98%; padding: 4px;")), 'lang_'.$key, array('width' => '50%')); } } else { // Editing individually $form_container->output_row_header($languages[$editlang]); // Make each editing row foreach($editvars as $key => $value) { if(my_strtolower($langinfo['charset']) == "utf-8") { $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return dec_to_utf8(hexdec($matches[1]));'), $value); } else { $value = preg_replace_callback("#%u([0-9A-F]{1,4})#i", create_function('$matches', 'return "&#".hexdec($matches[1]).";";'), $value); } $form_container->output_row($key, "", $form->generate_text_area("edit[$key]", $value, array('id' => 'lang_'.$key, 'rows' => 2, 'style' => "width: 98%; padding: 4px;")), 'lang_'.$key, array('width' => '50%')); } } $form_container->end(); $buttons[] = $form->generate_submit_button($lang->save_language_file, array('disabled' => $no_write)); $form->output_submit_wrapper($buttons); $form->end(); } else { $page->output_header($lang->languages); $sub_tabs['language_files'] = array( 'title' => $lang->language_files, 'link' => "index.php?module=config-languages&action=edit&lang=".$editlang, 'description' => $lang->language_files_desc ); $sub_tabs['quick_phrases'] = array( 'title' => $lang->quick_phrases, 'link' => "index.php?module=config-languages&action=quick_phrases&lang=".$editlang, 'description' => $lang->quick_phrases_desc ); $page->output_nav_tabs($sub_tabs, 'language_files'); require MYBB_ROOT."inc/languages/".$editlang.".php"; $table = new Table; $table->construct_header($lang->file); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); // Get files in main folder $filenames = array(); if($handle = opendir($folder)) { while(false !== ($file = readdir($handle))) { if(preg_match("#\.lang\.php$#", $file)) { $filenames[] = $file; } } closedir($handle); sort($filenames); } foreach($filenames as $key => $file) { $table->construct_cell("{$file}"); $table->construct_cell("{$lang->edit}", array("class" => "align_center")); $table->construct_row(); } if($table->num_rows() == 0) { $table->construct_cell($lang->no_language_files_front_end, array('colspan' => 3)); $table->construct_row(); } $table->output($lang->front_end); if($langinfo['admin'] != 0) { // Get files in admin folder $adminfilenames = array(); if($handle = opendir($folder."admin")) { while(false !== ($file = readdir($handle))) { if(preg_match("#\.lang\.php$#", $file)) { $adminfilenames[] = $file; } } closedir($handle); sort($adminfilenames); } $table = new Table; $table->construct_header($lang->file); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 100)); foreach($adminfilenames as $key => $file) { $table->construct_cell("{$file}"); $table->construct_cell("{$lang->edit}", array("class" => "align_center")); $table->construct_row(); } if($table->num_rows() == 0) { $table->construct_cell($lang->no_language_files_admin_cp, array('colspan' => 3)); $table->construct_row(); } $table->output($lang->admin_cp); } } $page->output_footer(); } if(!$mybb->input['action']) { $plugins->run_hooks("admin_config_languages_start"); $page->output_header($lang->languages); $sub_tabs['languages'] = array( 'title' => $lang->languages, 'link' => "index.php?module=config-languages", 'description' => $lang->languages_desc ); $sub_tabs['find_language'] = array( 'title' => $lang->find_language_packs, 'link' => "http://mybb.com/downloads/translations", 'target' => "_blank" ); $page->output_nav_tabs($sub_tabs, 'languages'); $table = new Table; $table->construct_header($lang->languagevar); $table->construct_header($lang->version, array("class" => "align_center", "width" => 100)); $table->construct_header($lang->controls, array("class" => "align_center", "width" => 155)); asort($languages); foreach($languages as $key1 => $langname1) { $langselectlangs[$key1] = $lang->sprintf($lang->edit_with, $langname1); } foreach($languages as $key => $langname) { include MYBB_ROOT."inc/languages/".$key.".php"; if(!empty($langinfo['website'])) { $author = "{$langinfo['author']}"; } else { $author = $langinfo['author']; } $table->construct_cell("{$langinfo['name']}
{$author}"); $table->construct_cell($langinfo['version'], array("class" => "align_center")); $popup = new PopupMenu("laguage_{$key}", $lang->options); $popup->add_item($lang->edit_language_variables, "index.php?module=config-languages&action=edit&lang={$key}"); foreach($langselectlangs as $key1 => $langname1) { $popup->add_item($langname1, "index.php?module=config-languages&action=edit&lang={$key}&editwith={$key1}"); } $popup->add_item($lang->edit_properties, "index.php?module=config-languages&action=edit_properties&lang={$key}"); $table->construct_cell($popup->fetch(), array("class" => "align_center")); $table->construct_row(); } if($table->num_rows() == 0) { $table->construct_cell($lang->no_language, array('colspan' => 3)); $table->construct_row(); } $table->output($lang->installed_language_packs); $page->output_footer(); } ?>