<?php // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based picture gallery | // +-----------------------------------------------------------------------+ // | Copyright(C) 2008-2010 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ // | This program is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation | // | | // | This program is distributed in the hope that it will be useful, but | // | WITHOUT ANY WARRANTY; without even the implied warranty of | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | // | General Public License for more details. | // | | // | You should have received a copy of the GNU General Public License | // | along with this program; if not, write to the Free Software | // | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | // | USA. | // +-----------------------------------------------------------------------+ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php'); include_once(LOCALEDIT_PATH.'functions.inc.php'); load_language('plugin.lang', LOCALEDIT_PATH); $my_base_url = get_admin_plugin_menu_link(__FILE__); // +-----------------------------------------------------------------------+ // | Tabssheet // +-----------------------------------------------------------------------+ if (!isset($_GET['tab'])) $page['tab'] = 'localconf'; else $page['tab'] = $_GET['tab']; $tabsheet = new tabsheet(); $tabsheet->add('localconf', l10n('locfiledit_onglet_localconf'), $my_base_url.'&tab=localconf'); $tabsheet->add('css', l10n('locfiledit_onglet_css'), $my_base_url.'&tab=css'); $tabsheet->add('tpl', l10n('locfiledit_onglet_tpl'), $my_base_url.'&tab=tpl'); $tabsheet->add('lang', l10n('locfiledit_onglet_lang'), $my_base_url.'&tab=lang'); $tabsheet->add('plug', l10n('locfiledit_onglet_plug'), $my_base_url.'&tab=plug'); $tabsheet->select($page['tab']); $tabsheet->assign(); // +-----------------------------------------------------------------------+ // | Variables init // +-----------------------------------------------------------------------+ $edited_file = isset($_POST['edited_file']) ? $_POST['edited_file'] : ''; $content_file = ''; $new_file['localconf'] = "<?php\n\n/* ".l10n('locfiledit_newfile')." */\n\n\n\n\n?>"; $new_file['css'] = "/* " . l10n('locfiledit_newfile') . " */\n\n"; $new_file['tpl'] = "{* " . l10n('locfiledit_newfile') . " *}\n\n"; $new_file['lang'] = $new_file['localconf']; $new_file['plug'] = "<?php\n/* Plugin Name: " . l10n('locfiledit_onglet_plug') . " Version: 1.0 Description: " . l10n('locfiledit_onglet_plug') . " Plugin URI: http://piwigo.org Author: Author URI: */\n\n\n\n\n?>"; $newfile_page = isset($_GET['newfile']) ? true : false; // Editarea options $editarea_options = array( 'language' => substr($user['language'], 0, 2), 'start_highlight' => true, 'allow_toggle' => false, 'toolbar' => 'search,fullscreen, |,select_font, |, undo, redo, change_smooth_selection, highlight, reset_highlight, |, help'); // Edit selected file for CSS, template and language if ((isset($_POST['edit'])) and !is_numeric($_POST['file_to_edit'])) { $edited_file = $_POST['file_to_edit']; $content_file = file_exists($edited_file) ? file_get_contents($edited_file) : $new_file[$page['tab']]; } // Edit new tpl file if (isset($_POST['create_tpl'])) { $filename = $_POST['tpl_name']; if (empty($filename)) { array_push($page['errors'], l10n('locfiledit_empty_filename')); } if (get_extension($filename) != 'tpl') { $filename .= '.tpl'; } if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $filename)) { array_push($page['errors'], l10n('locfiledit_filename_error')); } if (is_numeric($_POST['tpl_model']) and $_POST['tpl_model'] != '0') { array_push($page['errors'], l10n('locfiledit_model_error')); } if (file_exists($_POST['tpl_parent'] . '/' . $filename)) { array_push($page['errors'], l10n('locfiledit_file_already_exists')); } if (!empty($page['errors'])) { $newfile_page = true; } else { $edited_file = $_POST['tpl_parent'] . '/' . $filename; $content_file = ($_POST['tpl_model'] == '0') ? $new_file['tpl'] : file_get_contents($_POST['tpl_model']); } } // +-----------------------------------------------------------------------+ // | Process tabsheet // +-----------------------------------------------------------------------+ switch ($page['tab']) { case 'localconf': $edited_file = PHPWG_ROOT_PATH . "local/config/config.inc.php"; $content_file = file_exists($edited_file) ? file_get_contents($edited_file) : $new_file['localconf']; $template->assign('show_default' , array( array('SHOW_DEFAULT' => LOCALEDIT_PATH . 'show_default.php?file=include/config_default.inc.php', 'FILE' => 'config_default.inc.php'))); $editarea_options['syntax'] = 'php'; break; case 'css': $selected = 0; $options[] = l10n('locfiledit_choose_file'); $options[] = '----------------------'; $value = PHPWG_ROOT_PATH . "local/css/rules.css"; $options[$value] = 'local / css / rules.css'; if ($edited_file == $value) $selected = $value; $options[] = '----------------------'; foreach (get_dirs($conf['themes_dir']) as $theme_id) { $value = PHPWG_ROOT_PATH . 'local/css/'.$theme_id.'-rules.css'; $options[$value] = 'local / css / '.$theme_id.'-rules.css'; if ($edited_file == $value) $selected = $value; } $template->assign('css_lang_tpl', array( 'OPTIONS' => $options, 'SELECTED' => $selected)); $editarea_options['syntax'] = 'css'; break; case 'tpl': // New file form creation if ($newfile_page and !is_adviser()) { $filename = isset($_POST['tpl_name']) ? $_POST['tpl_name'] : ''; $selected['model'] = isset($_POST['tpl_model']) ? $_POST['tpl_model'] : '0'; $selected['parent'] = isset($_POST['tpl_parent']) ? $_POST['tpl_parent'] : PHPWG_ROOT_PATH . 'template-extension'; // Parent directories list $options['parent'] = array(PHPWG_ROOT_PATH . 'template-extension' => 'template-extension'); $options['parent'] = array_merge($options['parent'], get_rec_dirs(PHPWG_ROOT_PATH . 'template-extension')); $options['model'][] = l10n('locfiledit_empty_page'); $options['model'][] = '----------------------'; $i = 0; foreach (get_extents() as $pwg_template) { $value = PHPWG_ROOT_PATH . 'template-extension/' . $pwg_template; $options['model'][$value] = 'template-extension / ' . str_replace('/', ' / ', $pwg_template); $i++; } foreach (get_dirs($conf['themes_dir']) as $theme_id) { if ($i) { $options['model'][] = '----------------------'; $i = 0; } $dir = $conf['themes_dir'] . '/' . $theme_id . '/template/'; if (is_dir($dir) and $content = opendir($dir)) { while ($node = readdir($content)) { if (is_file($dir.$node) and get_extension($node) == 'tpl') { $value = $dir . $node; $options['model'][$value] = $theme_id . ' / ' . $node; $i++; } } } } if (end($options['model']) == '----------------------') { array_pop($options['model']); } // Assign variables to template $template->assign('create_tpl', array( 'NEW_FILE_NAME' => $filename, 'MODEL_OPTIONS' => $options['model'], 'MODEL_SELECTED' => $selected['model'], 'PARENT_OPTIONS' => $options['parent'], 'PARENT_SELECTED' => $selected['parent'])); break; } // List existing template extensions $selected = 0; $options[] = l10n('locfiledit_choose_file'); $options[] = '----------------------'; foreach (get_extents() as $pwg_template) { $value = './template-extension/' . $pwg_template; $options[$value] = str_replace('/', ' / ', $pwg_template); if ($edited_file == $value) $selected = $value; } if ($selected == 0 and !empty($edited_file)) { $options[$edited_file] = str_replace(array('./template-extension/', '/'), array('', ' / '), $edited_file); $selected = $edited_file; } $template->assign('css_lang_tpl', array( 'OPTIONS' => $options, 'SELECTED' => $selected, 'NEW_FILE_URL' => $my_base_url.'&tab=tpl&newfile', 'NEW_FILE_CLASS' => empty($edited_file) ? '' : 'top_right')); $editarea_options['syntax'] = 'html'; break; case 'lang': $selected = 0; $options[] = l10n('locfiledit_choose_file'); $options[] = '----------------------'; foreach (get_languages() as $language_code => $language_name) { $value = PHPWG_ROOT_PATH.'local/language/'.$language_code.'.lang.php'; if ($edited_file == $value) { $selected = $value; $template->assign('show_default', array( array('SHOW_DEFAULT' => LOCALEDIT_PATH . 'show_default.php?file=' . 'language/'.$language_code.'/common.lang.php', 'FILE' => 'common.lang.php'), array('SHOW_DEFAULT' => LOCALEDIT_PATH . 'show_default.php?file=' . 'language/'.$language_code.'/admin.lang.php', 'FILE' => 'admin.lang.php'))); } $options[$value] = $language_name; } $template->assign('css_lang_tpl', array( 'OPTIONS' => $options, 'SELECTED' => $selected)); $editarea_options['syntax'] = 'php'; break; case 'plug': $edited_file = PHPWG_PLUGINS_PATH . "PersonalPlugin/main.inc.php"; $content_file = file_exists($edited_file) ? file_get_contents($edited_file) : $new_file['plug']; $editarea_options['syntax'] = 'php'; break; } // +-----------------------------------------------------------------------+ // | Load backup file // +-----------------------------------------------------------------------+ if (isset($_POST['restore']) and !is_adviser()) { $edited_file = $_POST['edited_file']; $content_file = file_get_contents(get_bak_file($edited_file)); array_push($page['infos'], l10n('locfiledit_bak_loaded1'), l10n('locfiledit_bak_loaded2')); } // +-----------------------------------------------------------------------+ // | Save file // +-----------------------------------------------------------------------+ if (isset($_POST['submit']) and !is_adviser()) { if (!is_webmaster()) { array_push($page['errors'], l10n('locfiledit_webmaster_only')); } else { $edited_file = $_POST['edited_file']; $content_file = stripslashes($_POST['text']); if (get_extension($edited_file) == 'php') { $content_file = eval_syntax($content_file); } if ($content_file === false) { array_push($page['errors'], l10n('locfiledit_syntax_error')); } else { if ($page['tab'] == 'plug' and !is_dir(PHPWG_PLUGINS_PATH . 'PersonalPlugin')) { @mkdir(PHPWG_PLUGINS_PATH . "PersonalPlugin"); } if (file_exists($edited_file)) { @copy($edited_file, get_bak_file($edited_file)); array_push($page['infos'], sprintf(l10n('locfiledit_saved_bak'), substr(get_bak_file($edited_file), 2))); } if ($file = @fopen($edited_file , "w")) { @fwrite($file , $content_file); @fclose($file); array_unshift($page['infos'], l10n('locfiledit_save_config')); $template->delete_compiled_templates(); } else { array_push($page['errors'], l10n('locfiledit_cant_save')); } } } } // +-----------------------------------------------------------------------+ // | template initialization // +-----------------------------------------------------------------------+ $template->set_filenames(array( 'plugin_admin_content' => dirname(__FILE__) . '/admin.tpl')); if (!empty($edited_file)) { if (!empty($page['errors'])) { $content_file = stripslashes($_POST['text']); } $template->assign('zone_edit', array('EDITED_FILE' => $edited_file, 'CONTENT_FILE' => htmlspecialchars($content_file), 'FILE_NAME' => trim($edited_file, './\\'))); if (file_exists(get_bak_file($edited_file))) { $template->assign('restore', true); } if (file_exists($edited_file)) { $template->assign('restore_infos', true); } } $template->assign(array( 'F_ACTION' => PHPWG_ROOT_PATH.'admin.php?page=plugin&section=LocalFilesEditor%2Fadmin.php&tab=' . $page['tab'], 'LOCALEDIT_PATH' => LOCALEDIT_PATH, 'LOAD_EDITAREA' => isset($conf['LocalFilesEditor']) ? $conf['LocalFilesEditor'] : 'off', 'EDITAREA_OPTIONS' => $editarea_options)); $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content'); ?>