-<?php\r
-\r
-/***************************************************************************\r
- * xs_edit.php\r
- * -----------\r
- * copyright : (C) 2003 - 2005 CyberAlien\r
- * support : http://www.phpbbstyles.com\r
- *\r
- * version : 2.3.1\r
- *\r
- * file revision : 72\r
- * project revision : 78\r
- * last modified : 05 Dec 2005 13:54:54\r
- *\r
- ***************************************************************************/\r
-\r
-/***************************************************************************\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- ***************************************************************************/\r
-\r
-define('IN_PHPBB', 1);\r
-$phpbb_root_path = "./../";\r
-$no_page_header = true;\r
-require($phpbb_root_path . 'extension.inc');\r
-require('./pagestart.' . $phpEx);\r
-\r
-// check if mod is installed\r
-if(empty($template->xs_version) || $template->xs_version !== 8)\r
-{\r
- message_die(GENERAL_ERROR, isset($lang['xs_error_not_installed']) ? $lang['xs_error_not_installed'] : 'eXtreme Styles mod is not installed. You forgot to upload includes/template.php');\r
-}\r
-\r
-define('IN_XS', true);\r
-include_once('xs_include.' . $phpEx);\r
-\r
-\r
-// check filter\r
-$filter = isset($HTTP_GET_VARS['filter']) ? stripslashes($HTTP_GET_VARS['filter']) : (isset($HTTP_POST_VARS['filter']) ? stripslashes($HTTP_POST_VARS['filter']) : '');\r
-if(isset($HTTP_POST_VARS['filter_update']))\r
-{\r
- $filter_data = array(\r
- 'ext' => trim(stripslashes($HTTP_POST_VARS['filter_ext'])),\r
- 'data' => trim(stripslashes($HTTP_POST_VARS['filter_data']))\r
- );\r
- $filter = serialize($filter_data);\r
-}\r
-else\r
-{\r
- $filter_data = @unserialize($filter);\r
- if(empty($filter_data['ext']))\r
- {\r
- $filter_data['ext'] = '';\r
- }\r
- if(empty($filter_data['data']))\r
- {\r
- $filter_data['data'] = '';\r
- }\r
-}\r
-$filter_str = '?filter=' . urlencode($filter);\r
-\r
-\r
-$template->assign_block_vars('nav_left',array('ITEM' => '» <a href="' . append_sid('xs_edit.'.$phpEx.$filter_str) . '">' . $lang['xs_edit_templates'] . '</a>'));\r
-\r
-$editable = array('.htm', '.html', '.tpl', '.css', '.txt', '.cfg', '.xml', '.php', '.htaccess');\r
-\r
-// get current directory\r
-$current_dir = isset($HTTP_GET_VARS['dir']) ? stripslashes($HTTP_GET_VARS['dir']) : (isset($HTTP_POST_VARS['dir']) ? stripslashes($HTTP_POST_VARS['dir']) : 'templates');\r
-$current_dir = xs_fix_dir($current_dir);\r
-if(defined('DEMO_MODE') && substr($current_dir, 0, 9) !== 'templates')\r
-{ // limit access to "templates" in demo mode\r
- $current_dir = 'templates';\r
-}\r
-$dirs = explode('/', $current_dir);\r
-for($i=0; $i<count($dirs); $i++)\r
-{\r
- if(!$dirs[$i] || $dirs[$i] === '.')\r
- {\r
- unset($dirs[$i]);\r
- }\r
-}\r
-$current_dir = implode('/', $dirs);\r
-$current_dir_full = $current_dir; //'templates' . ($current_dir ? '/' . $current_dir : '');\r
-$current_dir_root = $current_dir ? $current_dir . '/' : '';\r
-\r
-$return_dir = str_replace('{URL}', append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir)), $lang['xs_edittpl_back_dir']);\r
-$return_url = $return_dir;\r
-$return_url_root = str_replace('{URL}', append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='), $lang['xs_edittpl_back_dir']);\r
-\r
-\r
-$template->assign_vars(array(\r
- 'FILTER_EXT' => htmlspecialchars($filter_data['ext']),\r
- 'FILTER_DATA' => htmlspecialchars($filter_data['data']),\r
- 'FILTER_URL' => append_sid('xs_edit.'.$phpEx),\r
- 'FILTER_DIR' => htmlspecialchars($current_dir),\r
- 'S_FILTER' => '<input type="hidden" name="filter" value="' . htmlspecialchars($filter) . '" />'\r
- ));\r
-\r
-\r
-/*\r
-* show edit form\r
-*/\r
-if(isset($HTTP_GET_VARS['edit']) && !empty($HTTP_GET_VARS['restore']))\r
-{\r
- $file = stripslashes($HTTP_GET_VARS['edit']);\r
- $file = xs_fix_dir($file);\r
- $fullfile = $current_dir_root . $file;\r
- $localfile = '../' . $fullfile;\r
- $hash = md5($localfile);\r
- $backup_name = XS_TEMP_DIR . XS_BACKUP_PREFIX . $hash . '.' . intval($HTTP_GET_VARS['restore']) . XS_BACKUP_EXT;\r
- if(@file_exists($backup_name))\r
- {\r
- // restore file\r
- $HTTP_POST_VARS['edit'] = $HTTP_GET_VARS['edit'];\r
- $HTTP_POST_VARS['content'] = addslashes(implode('', @file($backup_name)));\r
- unset($HTTP_GET_VARS['edit']);\r
- $return_file = str_replace('{URL}', append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file)), $lang['xs_edittpl_back_edit']);\r
- $return_url = $return_file . '<br /><br />' . $return_dir;\r
- }\r
-}\r
-\r
-\r
-/*\r
-* save modified file\r
-*/\r
-if(isset($HTTP_POST_VARS['edit']) && !defined('DEMO_MODE'))\r
-{\r
- $file = stripslashes($HTTP_POST_VARS['edit']);\r
- $content = stripslashes($HTTP_POST_VARS['content']);\r
- $fullfile = $current_dir_root . $file;\r
- $localfile = '../' . $fullfile;\r
- if(!empty($HTTP_POST_VARS['trim']))\r
- {\r
- $content = trim($content);\r
- }\r
- if(!empty($HTTP_POST_FILES['upload']['tmp_name']) && @file_exists($HTTP_POST_FILES['upload']['tmp_name']))\r
- {\r
- $content = @implode('', @file($HTTP_POST_FILES['upload']['tmp_name']));\r
- }\r
- $params = array(\r
- 'edit' => $file,\r
- 'dir' => $current_dir,\r
- 'content' => $content,\r
- 'filter' => $filter,\r
- );\r
- $return_file = str_replace('{URL}', append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file)), $lang['xs_edittpl_back_edit']);\r
- $return_url = $return_file . '<br /><br />' . $return_dir;\r
- // get ftp configuration\r
- $write_local = false;\r
- if(!get_ftp_config(append_sid('xs_edit.'.$phpEx), $params, true))\r
- {\r
- xs_exit();\r
- }\r
- xs_ftp_connect(append_sid('xs_edit.'.$phpEx), $params, true);\r
- if($ftp === XS_FTP_LOCAL)\r
- {\r
- $write_local = true;\r
- $local_filename = $localfile;\r
- }\r
- else\r
- {\r
- $local_filename = XS_TEMP_DIR . 'edit_' . time() . '.tmp';\r
- }\r
- $f = @fopen($local_filename, 'wb');\r
- if(!$f)\r
- {\r
- xs_error($lang['xs_error_cannot_open'] . '<br /><br />' . $return_url);\r
- }\r
- fwrite($f, $content);\r
- fclose($f);\r
- if($write_local)\r
- {\r
- xs_message($lang['Information'], $lang['xs_edit_file_saved'] . '<br /><br />' . $return_url);\r
- }\r
- // generate ftp actions\r
- $actions = array();\r
- // chdir to template directory\r
- for($i=0; $i<count($dirs); $i++)\r
- {\r
- $actions[] = array(\r
- 'command' => 'chdir',\r
- 'dir' => $dirs[$i]\r
- );\r
- }\r
- $actions[] = array(\r
- 'command' => 'upload',\r
- 'local' => $local_filename,\r
- 'remote' => $fullfile\r
- );\r
- $ftp_log = array();\r
- $ftp_error = '';\r
- $res = ftp_myexec($actions);\r
- echo "<!--\n\n";\r
- echo "\$actions dump:\n\n";\r
- print_r($actions);\r
- echo "\n\n\$ftp_log dump:\n\n";\r
- print_r($ftp_log);\r
- echo "\n\n -->";\r
- @unlink($local_filename);\r
- if($res)\r
- {\r
- xs_message($lang['Information'], $lang['xs_edit_file_saved'] . '<br /><br />' . $return_url);\r
- }\r
- xs_error($ftp_error . '<br /><br />' . $return_url);\r
-}\r
-\r
-\r
-/*\r
-* show edit form\r
-*/\r
-if(isset($HTTP_GET_VARS['edit']))\r
-{\r
- $file = stripslashes($HTTP_GET_VARS['edit']);\r
- $file = xs_fix_dir($file);\r
- $fullfile = $current_dir_root . $file;\r
- $localfile = '../' . $fullfile;\r
- $hash = md5($localfile);\r
- if(!@file_exists($localfile))\r
- {\r
- xs_error($lang['xs_edit_not_found'] . '<br /><br />' . $return_url);\r
- }\r
- $content = @file($localfile);\r
- if(!is_array($content))\r
- {\r
- xs_error($lang['xs_edit_not_found'] . '<br /><br />' . $return_url);\r
- }\r
- $content = implode('', $content);\r
- if(isset($HTTP_GET_VARS['download']) && !defined('DEMO_MODE'))\r
- {\r
- xs_download_file($file, $content);\r
- xs_exit();\r
- }\r
- if(isset($HTTP_GET_VARS['downloadbackup']) && !defined('DEMO_MODE'))\r
- {\r
- $backup_name = XS_TEMP_DIR . XS_BACKUP_PREFIX . $hash . '.' . intval($HTTP_GET_VARS['downloadbackup']) . XS_BACKUP_EXT;\r
- xs_download_file($file, implode('', @file($backup_name)));\r
- xs_exit();\r
- }\r
- $return_file = str_replace('{URL}', append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file)), $lang['xs_edittpl_back_edit']);\r
- $return_url = $return_file . '<br /><br />' . $return_dir;\r
- $template->assign_vars(array(\r
- 'U_ACTION' => append_sid('xs_edit.'.$phpEx),\r
- 'U_BROWSE' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir)),\r
- 'U_EDIT' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file)),\r
- 'U_BACKUP' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dobackup=1&dir='.urlencode($current_dir).'&edit='.urlencode($file)),\r
- 'U_DOWNLOAD' => append_sid('xs_edit.'.$phpEx.$filter_str.'&download=1&dir='.urlencode($current_dir).'&edit='.urlencode($file)),\r
- 'CURRENT_DIR' => htmlspecialchars($current_dir_full),\r
- 'DIR' => htmlspecialchars($current_dir),\r
- 'FILE' => htmlspecialchars($file),\r
- 'FULLFILE' => htmlspecialchars($fullfile),\r
- 'CONTENT' => defined('DEMO_MODE') ? $lang['xs_error_demo_edit'] : htmlspecialchars($content),\r
- )\r
- );\r
- if($current_dir_full)\r
- {\r
- $template->assign_block_vars('nav_left',array('ITEM' => '» <a href="' . append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.$current_dir) . '">' . htmlspecialchars($current_dir_full) . '</a>'));\r
- }\r
-\r
- // show tree\r
- $arr = array();\r
- $template->assign_block_vars('tree', array(\r
- 'ITEM' => 'phpBB',\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='),\r
- 'SEPARATOR' => '',\r
- ));\r
- $back_dir = '';\r
- for($i=0; $i<count($dirs); $i++)\r
- {\r
- $arr[] = $dirs[$i];\r
- $str = implode('/', $arr);\r
- if(count($dirs) > ($i + 1))\r
- {\r
- $back_dir = $str;\r
- }\r
- $template->assign_block_vars('tree', array(\r
- 'ITEM' => htmlspecialchars($dirs[$i]),\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($str)),\r
- 'SEPARATOR' => '/',\r
- ));\r
- }\r
-\r
- // view backup\r
- if(!empty($HTTP_GET_VARS['viewbackup']) && !defined('DEMO_MODE'))\r
- {\r
- $backup_name = XS_TEMP_DIR . XS_BACKUP_PREFIX . $hash . '.' . intval($HTTP_GET_VARS['viewbackup']) . XS_BACKUP_EXT;\r
- $template->assign_vars(array(\r
- 'CONTENT' => implode('', @file($backup_name))\r
- )\r
- );\r
- }\r
-\r
- // save backup\r
- if(isset($HTTP_GET_VARS['dobackup']) && !defined('DEMO_MODE'))\r
- {\r
- $backup_name = XS_TEMP_DIR . XS_BACKUP_PREFIX . $hash . '.' . time() . XS_BACKUP_EXT;\r
- $f = @fopen($backup_name, 'wb');\r
- if(!$f)\r
- {\r
- xs_error(str_replace('{FILE}', $backup_name, $lang['xs_error_cannot_create_tmp']) . '<br /><br />' . $return_url);\r
- }\r
- fwrite($f, $content);\r
- fclose($f);\r
- @chmod($backup_name, 0777);\r
- }\r
-\r
- // delete backup\r
- if(isset($HTTP_GET_VARS['delbackup']) && !defined('DEMO_MODE'))\r
- {\r
- $backup_name = XS_TEMP_DIR . XS_BACKUP_PREFIX . $hash . '.' . intval($HTTP_GET_VARS['delbackup']) . XS_BACKUP_EXT;\r
- @unlink($backup_name);\r
- }\r
-\r
- // show backups\r
- $backups = array();\r
- $res = opendir(XS_TEMP_DIR);\r
- $match = XS_BACKUP_PREFIX . $hash . '.';\r
- $match_len = strlen($match);\r
- while(($f = readdir($res)) !== false)\r
- {\r
- if(substr($f, 0, $match_len) === $match)\r
- {\r
- $str = substr($f, $match_len, strlen($f) - $match_len - strlen(XS_BACKUP_EXT));\r
- if(intval($str))\r
- {\r
- $backups[] = intval($str);\r
- }\r
- }\r
- }\r
- closedir($res);\r
- sort($backups);\r
- for($i=0; $i<count($backups); $i++)\r
- {\r
- $template->assign_block_vars('backup', array(\r
- 'TIME' => create_date($board_config['default_dateformat'], $backups[$i], $board_config['board_timezone']),\r
- 'U_RESTORE' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file).'&restore='.$backups[$i]),\r
- 'U_DELETE' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file).'&delbackup='.$backups[$i]),\r
- 'U_DOWNLOAD' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file).'&downloadbackup='.$backups[$i]),\r
- 'U_VIEW' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file).'&viewbackup='.$backups[$i]),\r
- )\r
- );\r
- }\r
-\r
- // show template\r
- $template->set_filenames(array('body' => XS_TPL_PATH . 'edit_file.tpl'));\r
- $template->pparse('body');\r
- xs_exit();\r
-}\r
-\r
-\r
-/*\r
-* show file browser\r
-*/\r
-\r
-// show tree\r
-$arr = array();\r
-$template->assign_block_vars('tree', array(\r
- 'ITEM' => 'phpBB',\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='),\r
- 'SEPARATOR' => '',\r
- ));\r
-$back_dir = '';\r
-for($i=0; $i<count($dirs); $i++)\r
-{\r
- $arr[] = $dirs[$i];\r
- $str = implode('/', $arr);\r
- if(count($dirs) > ($i + 1))\r
- {\r
- $back_dir = $str;\r
- }\r
- $template->assign_block_vars('tree', array(\r
- 'ITEM' => htmlspecialchars($dirs[$i]),\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($str)),\r
- 'SEPARATOR' => '/',\r
- ));\r
-}\r
-\r
-// get list of files/directories\r
-$list_files = array(); // non-editable files\r
-$list_files_editable = array(); // editable files\r
-$list_dirs = array(); // directories\r
-$res = @opendir('../' . $current_dir_full);\r
-if(!$res)\r
-{\r
- xs_error(str_replace('{DIR}', $current_dir_full, $lang['xs_export_no_open_dir']) . '<br /><br />' . $return_url_root);\r
-}\r
-while(($file = readdir($res)) !== false)\r
-{\r
- if($file !== '.' && $file !== '..')\r
- {\r
- $filename = '../' . ($current_dir_full ? $current_dir_full . '/' : '') . $file;\r
- if(is_dir($filename))\r
- {\r
- $list_dirs[] = $file;\r
- }\r
- else\r
- {\r
- $pos = strrpos($file, '.');\r
- if($pos !== false)\r
- {\r
- $ext = strtolower(substr($file, $pos));\r
- $ext1 = substr($ext, 1);\r
- if((!$filter_data['ext'] && xs_in_array($ext, $editable)) || $ext1 === $filter_data['ext'])\r
- {\r
- // check filter\r
- if($filter_data['data'])\r
- {\r
- $content = @implode('', @file($filename));\r
- if(strpos($content, $filter_data['data']) !== false)\r
- {\r
- $list_files_editable[] = $file;\r
- }\r
- }\r
- else\r
- {\r
- $list_files_editable[] = $file;\r
- }\r
- }\r
- else\r
- {\r
- $list_files[] = $file;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-closedir($res);\r
-\r
-$list_dirs_count = count($list_dirs);\r
-$list_files_count = count($list_files) + count($list_files_editable);\r
-\r
-if($current_dir || count($list_dirs))\r
-{\r
- $template->assign_block_vars('begin_dirs', array(\r
- 'COUNT' => count($list_dirs),\r
- 'L_COUNT' => str_replace('{COUNT}', count($list_dirs), $lang['xs_fileman_dircount'])\r
- ));\r
-}\r
-else\r
-{\r
- $template->assign_block_vars('begin_nodirs', array());\r
-}\r
-if($current_dir)\r
-{\r
- $template->assign_block_vars('begin_dirs.dir', array(\r
- 'NAME' => '..',\r
- 'FULLNAME' => htmlspecialchars($back_dir ? $back_dir . '/' : ''),\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($back_dir)),\r
- )\r
- );\r
-}\r
-\r
-// show subdirectories\r
-sort($list_dirs);\r
-for($i=0; $i<count($list_dirs); $i++)\r
-{\r
- $dir = $list_dirs[$i];\r
- $str = $current_dir_root . $dir;\r
- $template->assign_block_vars('begin_dirs.dir', array(\r
- 'NAME' => htmlspecialchars($dir),\r
- 'FULLNAME' => htmlspecialchars($current_dir_root . $dir),\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($str)),\r
- )\r
- );\r
-}\r
-\r
-// show editable files\r
-if(count($list_files_editable))\r
-{\r
- $template->assign_block_vars('begin_files', array('COUNT' => count($list_files_editable)));\r
-}\r
-else\r
-{\r
- $template->assign_block_vars('begin_nofiles', array('COUNT' => count($list_files_editable)));\r
-}\r
-sort($list_files_editable);\r
-// get today start\r
-$today = floor((time() + 3600 * $board_config['board_timezone']) / 86400) * 86400 - (3600 * $board_config['board_timezone']);\r
-for($i=0; $i<count($list_files_editable); $i++)\r
-{\r
- $file = $list_files_editable[$i];\r
- $fullfile = $current_dir_root . $file;\r
- $localfile = '../' . $fullfile;\r
- $row_class = $xs_row_class[$i % 2];\r
- $t = @filemtime($localfile);\r
- $filetime = $t ? create_date($board_config['default_dateformat'], $t, $board_config['board_timezone']) : ' ';\r
- $template->assign_block_vars('begin_files.file', array(\r
- 'ROW_CLASS' => $row_class,\r
- 'NAME' => htmlspecialchars($file),\r
- 'FULLNAME' => htmlspecialchars($fullfile),\r
- 'SIZE' => @filesize($localfile),\r
- 'TIME' => $filetime,\r
- 'URL' => append_sid('xs_edit.'.$phpEx.$filter_str.'&dir='.urlencode($current_dir).'&edit='.urlencode($file))\r
- )\r
- );\r
- if($t < $today)\r
- {\r
- $template->assign_block_vars('begin_files.file.old', array());\r
- }\r
- else\r
- {\r
- $template->assign_block_vars('begin_files.file.today', array());\r
- }\r
-}\r
-\r
-$template->set_filenames(array('body' => XS_TPL_PATH . 'edit.tpl'));\r
-$template->pparse('body');\r
-xs_exit();\r
-\r
-?>
\ No newline at end of file