diff options
Diffstat (limited to 'phpBB/phpbb_seo/phpbb_seo_install.php')
-rw-r--r-- | phpBB/phpbb_seo/phpbb_seo_install.php | 776 |
1 files changed, 776 insertions, 0 deletions
diff --git a/phpBB/phpbb_seo/phpbb_seo_install.php b/phpBB/phpbb_seo/phpbb_seo_install.php new file mode 100644 index 0000000000..5654f97b59 --- /dev/null +++ b/phpBB/phpbb_seo/phpbb_seo_install.php @@ -0,0 +1,776 @@ +<?php +/** +* +* @package Ultimate SEO URL phpBB SEO +* @version $Id: phpbb_seo_install.php 222 2010-02-27 13:08:48Z dcz $ +* @copyright (c) 2006 - 2010 www.phpbb-seo.com +* @license http://www.opensource.org/licenses/rpl1.5.txt Reciprocal Public License 1.5 +* +*/ +/* + * Based on the phpBB3 install package / www.phpBB.com + */ +define('IN_PHPBB', true); +define('IN_INSTALL', true); +$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../'; +$phpEx = substr(strrchr(__FILE__, '.'), 1); +// Try to override some limits - maybe it helps some... +@set_time_limit(0); +$mem_limit = @ini_get('memory_limit'); +if (!empty($mem_limit)) { + $unit = strtolower(substr($mem_limit, -1, 1)); + $mem_limit = (int) $mem_limit; + if ($unit == 'k') { + $mem_limit = floor($mem_limit / 1024); + } else if ($unit == 'g') { + $mem_limit *= 1024; + } else if (is_numeric($unit)) { + $mem_limit = floor((int) ($mem_limit . $unit) / 1048576); + } + $mem_limit = max(128, $mem_limit) . 'M'; +} else { + $mem_limit = '128M'; +} +@ini_set('memory_limit', $mem_limit); +include($phpbb_root_path . 'common.' . $phpEx); +// Include essential scripts +require($phpbb_root_path . 'includes/functions_install.' . $phpEx); +// Start session management +$user->session_begin(); +$auth->acl($user->data); +$user->setup('mods/acp_phpbb_seo'); +// Security check +// Circumvent a potential phpbb bug with paths +$redirect = append_sid(generate_board_url() . "/phpbb_seo/phpbb_seo_install.$phpEx"); +if (!$user->data['is_registered']) { + login_box($redirect, $user->lang['SEO_LOGIN'],'', false, false); +} +if (!$auth->acl_get('a_')) { + $user->session_kill(true); + login_box($redirect, $user->lang['SEO_LOGIN_ADMIN'],'', false, false); +} +if ($user->data['user_type'] != USER_FOUNDER) { + login_box($redirect, $user->lang['SEO_LOGIN_FOUNDER'],'', false, false); +} +$user->add_lang(array('acp/common', 'acp/board', 'install', 'posting', 'acp/modules')); +$mode = request_var('mode', 'overview'); +$sub = request_var('sub', ''); +// Set some standard variables we want to force +$config['load_tplcompile'] = '1'; +$template->set_custom_template('../adm/style', '../admin'); +$template->assign_var('T_TEMPLATE_PATH', '../adm/style'); +// the acp template is never stored in the database +$user->theme['template_storedb'] = false; +// Start the installer +$install = new module(); +$install->create('install', "phpbb_seo_install.$phpEx", $mode, $sub); +$install->load(); +// Generate the page +$install->page_header(); +$install->generate_navigation(); +$template->set_filenames(array( + 'body' => $install->get_tpl_name()) +); +$install->page_footer(); +/** +* @package install +*/ +class module { + var $id = 0; + var $type = 'install'; + var $module_ary = array(); + var $filename; + var $module_url = ''; + var $tpl_name = ''; + var $mode; + var $sub; + /** + * Private methods, should not be overwritten + */ + function create($module_type, $module_url, $selected_mod = false, $selected_submod = false) { + global $db, $config, $phpEx, $phpbb_root_path, $user; + $module = array( + array( + 'module_type' => 'install', + 'module_title' => 'OVERVIEW', + 'module_filename' => 'overview_phpbb_seo', + 'module_order' => 0, + 'module_subs' => array('INTRO', 'LICENSE', 'SUPPORT'), + 'module_stages' => '', + 'module_reqs' => '' + ), + array( + 'module_type' => 'install', + 'module_title' => 'INSTALL_PHPBB_SEO', + 'module_filename' => 'install_phpbb_seo', + 'module_order' => 1, + 'module_subs' => '', + 'module_stages' => array('INTRO', 'FINAL'), + 'module_reqs' => '' + ), + array( + 'module_type' => 'uninstall', + 'module_title' => 'UNINSTALL_PHPBB_SEO', + 'module_filename' => 'install_phpbb_seo', + 'module_order' => 2, + 'module_subs' => '', + 'module_stages' => array('INTRO', 'FINAL'), + 'module_reqs' => '' + ), + ); + // Order to use and count further if modules get assigned to the same position or not having an order + $max_module_order = 1000; + foreach ($module as $row) { + // Module order not specified or module already assigned at this position? + if (!isset($row['module_order']) || isset($this->module_ary[$row['module_order']])) { + $row['module_order'] = $max_module_order; + $max_module_order++; + } + $this->module_ary[$row['module_order']]['name'] = $row['module_title']; + $this->module_ary[$row['module_order']]['filename'] = $row['module_filename']; + $this->module_ary[$row['module_order']]['subs'] = $row['module_subs']; + $this->module_ary[$row['module_order']]['stages'] = $row['module_stages']; + if (strtolower($selected_mod) == strtolower($row['module_title'])) { + $this->id = (int) $row['module_order']; + $this->filename = (string) $row['module_filename']; + $this->module_url = (string) $module_url; + $this->mode = (string) $selected_mod; + // Check that the sub-mode specified is valid or set a default if not + if (is_array($row['module_subs'])) { + $this->sub = strtolower((in_array(strtoupper($selected_submod), $row['module_subs'])) ? $selected_submod : $row['module_subs'][0]); + } else if (is_array($row['module_stages'])) { + $this->sub = strtolower((in_array(strtoupper($selected_submod), $row['module_stages'])) ? $selected_submod : $row['module_stages'][0]); + } else { + $this->sub = ''; + } + } + } // END foreach + } // END create + /** + * Load and run the relevant module if applicable + */ + function load($mode = false, $run = true) { + global $phpbb_root_path, $phpEx; + if ($run) { + if (!empty($mode)) { + $this->mode = $mode; + } + $module = $this->filename; + if (!class_exists($module)) { + $this->error('Module "' . htmlspecialchars($module) . '" not accessible.', __LINE__, __FILE__); + } + $this->module = new $module($this); + if (method_exists($this->module, 'main')) { + $this->module->main($this->mode, $this->sub); + } + } + } + /** + * Output the standard page header + */ + function page_header() { + if (defined('HEADER_INC')) { + return; + } + define('HEADER_INC', true); + global $template, $user, $stage, $phpbb_root_path; + $template->assign_vars(array( + 'L_INSTALL_PANEL' => $user->lang['SEO_INSTALL_PANEL'], + 'L_SKIP' => $user->lang['SKIP'], + 'PAGE_TITLE' => $this->get_page_title(), + 'T_IMAGE_PATH' => $phpbb_root_path . 'adm/images/', + 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], + 'S_CONTENT_ENCODING' => 'UTF-8', + 'S_USER_LANG' => $user->lang['USER_LANG'], + ) + ); + header('Content-type: text/html; charset=UTF-8'); + header('Cache-Control: private, no-cache="set-cookie"'); + header('Expires: 0'); + header('Pragma: no-cache'); + return; + } + /** + * Output the standard page footer + */ + function page_footer() { + global $db, $template, $phpbb_seo; + $template->display('body'); + // Close our DB connection. + if (!empty($db) && is_object($db)) { + $db->sql_close(); + } + exit; + } + /** + * Returns desired template name + */ + function get_tpl_name() { + return $this->module->tpl_name . '.html'; + } + /** + * Returns the desired page title + */ + function get_page_title() { + global $user; + if (!isset($this->module->page_title)) { + return ''; + } + return (isset($user->lang[$this->module->page_title])) ? $user->lang[$this->module->page_title] : $this->module->page_title; + } + /** + * Generate an HTTP/1.1 header to redirect the user to another page + * This is used during the installation when we do not have a database available to call the normal redirect function + * @param string $page The page to redirect to relative to the installer root path + */ + function redirect($page) { + $server_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME'); + $server_port = (!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT'); + $secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 1 : 0; + + $script_name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF'); + if (!$script_name) { + $script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI'); + } + // Replace backslashes and doubled slashes (could happen on some proxy setups) + $script_name = str_replace(array('\\', '//'), '/', $script_name); + $script_path = trim(dirname($script_name)); + $url = (($secure) ? 'https://' : 'http://') . $server_name; + if ($server_port && (($secure && $server_port <> 443) || (!$secure && $server_port <> 80))) { + $url .= ':' . $server_port; + } + $url .= $script_path . '/' . $page; + header('Location: ' . $url); + exit; + } + /** + * Generate the navigation tabs + */ + function generate_navigation() { + global $user, $template, $phpEx; + if (is_array($this->module_ary)) { + @ksort($this->module_ary); + foreach ($this->module_ary as $cat_ary) { + $cat = $cat_ary['name']; + $l_cat = (!empty($user->lang['CAT_' . $cat])) ? $user->lang['CAT_' . $cat] : preg_replace('#_#', ' ', $cat); + $cat = strtolower($cat); + $url = $this->module_url . "?mode=$cat"; + if ($this->mode == $cat) { + $template->assign_block_vars('t_block1', array( + 'L_TITLE' => $l_cat, + 'S_SELECTED' => true, + 'U_TITLE' => $url, + )); + if (is_array($this->module_ary[$this->id]['subs'])) { + $subs = $this->module_ary[$this->id]['subs']; + foreach ($subs as $option) { + $l_option = (!empty($user->lang['SUB_' . $option])) ? $user->lang['SUB_' . $option] : preg_replace('#_#', ' ', $option); + $option = strtolower($option); + $url = $this->module_url . '?mode=' . $this->mode . "&sub=$option"; + $template->assign_block_vars('l_block1', array( + 'L_TITLE' => $l_option, + 'S_SELECTED' => ($this->sub == $option), + 'U_TITLE' => $url, + )); + } + } + if (is_array($this->module_ary[$this->id]['stages'])) { + $subs = $this->module_ary[$this->id]['stages']; + $matched = false; + foreach ($subs as $option) { + $l_option = (!empty($user->lang['STAGE_' . $option])) ? $user->lang['STAGE_' . $option] : preg_replace('#_#', ' ', $option); + $option = strtolower($option); + $matched = ($this->sub == $option) ? true : $matched; + + $template->assign_block_vars('l_block2', array( + 'L_TITLE' => $l_option, + 'S_SELECTED' => ($this->sub == $option), + 'S_COMPLETE' => !$matched, + )); + } + } + } else { + $template->assign_block_vars('t_block1', array( + 'L_TITLE' => $l_cat, + 'S_SELECTED' => false, + 'U_TITLE' => $url, + )); + } + } + } + } + /** + * Output an error message + * If skip is true, return and continue execution, else exit + */ + function error($error, $line = '', $file = '', $skip = false, $title = '') { + global $user, $db, $template, $phpbb_seo; + $title = !empty($title) ? $title : $user->lang['INST_ERR_FATAL']; + $file = !empty($file) ? basename($file) . ' [ ' . $line . ' ]' : ''; + if ($skip) { + $template->assign_block_vars('checks', array( + 'S_LEGEND' => true, + 'LEGEND' => $user->lang['INST_ERR'], + )); + $template->assign_block_vars('checks', array( + 'TITLE' => basename($file) . ' [ ' . $line . ' ]', + 'RESULT' => '<b style="color:red">' . $error . '</b>', + )); + return; + } + echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; + echo '<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">'; + echo '<head>'; + echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; + echo '<title>' . $title . '</title>'; + echo '<link href="../adm/style/admin.css" rel="stylesheet" type="text/css" media="screen" />'; + echo '</head>'; + echo '<body id="errorpage">'; + echo '<div id="wrap">'; + echo ' <div id="page-header">'; + echo ' </div>'; + echo ' <div id="page-body">'; + echo ' <div id="acp">'; + echo ' <div class="panel">'; + echo ' <span class="corners-top"><span></span></span>'; + echo ' <div id="content">'; + echo ' <h1>' . $title . '</h1>'; + echo ' <p>' . $file . '</p>' . "\n"; + echo ' <p><b>' . $error . "</b></p>\n"; + echo ' </div>'; + echo ' <span class="corners-bottom"><span></span></span>'; + echo ' </div>'; + echo ' </div>'; + echo ' </div>'; + echo ' <div id="page-footer">'; + echo ' Powered by phpBB © 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>'; + echo $phpbb_seo->seo_end(true); + echo ' </div>'; + echo '</div>'; + echo '</body>'; + echo '</html>'; + if (!empty($db) && is_object($db)) { + $db->sql_close(); + } + exit; + } + /** + * Output an error message for a database related problem + * If skip is true, return and continue execution, else exit + */ + function db_error($error, $sql, $line, $file, $skip = false) { + global $user, $db, $template; + if ($skip) { + $template->assign_block_vars('checks', array( + 'S_LEGEND' => true, + 'LEGEND' => $user->lang['INST_ERR_FATAL'], + )); + $template->assign_block_vars('checks', array( + 'TITLE' => basename($file) . ' [ ' . $line . ' ]', + 'RESULT' => '<b style="color:red">' . $error . '</b><br />» SQL:' . $sql, + )); + return; + } + $template->set_filenames(array( + 'body' => 'install_error.html') + ); + $this->page_header(); + $this->generate_navigation(); + $template->assign_vars(array( + 'MESSAGE_TITLE' => $user->lang['INST_ERR_FATAL_DB'], + 'MESSAGE_TEXT' => '<p>' . basename($file) . ' [ ' . $line . ' ]</p><p>SQL : ' . $sql . '</p><p><b>' . $error . '</b></p>', + )); + // Rollback if in transaction + if ($db->transaction) { + $db->sql_transaction('rollback'); + } + $this->page_footer(); + } +} +/** +* Installation Tabs +*/ +class install_phpbb_seo extends module { + var $errors = array(); + var $uninst_prefix = ''; + var $modrtype_lang = array(); + function install_phpbb_seo(&$p_master) { + global $user, $phpbb_seo, $config; + $this->modrtype_lang = set_phpbb_seo_links(); + $this->p_master = &$p_master; + } + function main($mode, $sub) { + global $user, $template, $phpbb_root_path, $phpbb_seo; + $this->uninst_prefix = $mode == 'install_phpbb_seo' ? '' : 'UN_'; + switch ($sub) { + case 'intro': + $this->page_title = $user->lang['SUB_INTRO']; + $template->assign_vars(array( + 'TITLE' => $user->lang[$this->uninst_prefix . 'SEO_INSTALL_INTRO'], + 'BODY' => sprintf($user->lang[$this->uninst_prefix . 'SEO_INSTALL_INTRO_BODY'], $this->modrtype_lang['ulink'], $phpbb_seo->version), + 'L_SUBMIT' => $user->lang[$this->uninst_prefix . 'SEO_INSTALL'], + 'S_LANG_SELECT' => '', + 'U_ACTION' => $this->p_master->module_url . "?mode=$mode&sub=final", + )); + break; + case 'final': + if ($mode == 'install_phpbb_seo') { + $this->add_modules($mode, $sub); + } else { + $this->remove_modules($mode, $sub); + } + $this->final_stage($mode, $sub); + break; + } + $this->tpl_name = 'install_install'; + } + /** + * Populate the module tables + */ + function add_modules($mode, $sub) { + global $db, $user, $phpbb_root_path, $phpEx; + include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx); + $_module = new acp_modules(); + if ( $this->get_module_id('ACP_MOD_REWRITE') > 0 ) { + $url_mod = !empty($sub) ? '?mode=' . $mode : ''; + $this->p_master->error(sprintf($user->lang['SEO_ERROR_INSTALLED'], $user->lang['ACP_CAT_PHPBB_SEO'] ) . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->p_master->module_url . $url_mod . '">', '</a>'), '', '', false, $user->lang['SEO_ERROR_INFO']); + } + $module_classes = array('acp'); + // Add categories + foreach ($module_classes as $module_class) { + $categories = array(); + // Set the module class + $_module->module_class = $module_class; + foreach ($this->module_categories[$module_class] as $cat_name => $subs) { + $module_data = array( + 'module_basename' => '', + 'module_enabled' => 1, + 'module_display' => 1, + 'parent_id' => 0, + 'module_class' => $module_class, + 'module_langname' => $cat_name, + 'module_mode' => '', + 'module_auth' => '', + ); + if ( $this->get_module_id('ACP_CAT_PHPBB_SEO') < 1 ) { + // Add category + $_module->update_module_data($module_data, true); + } else { + $module_data['module_id'] = $this->check_module_id('ACP_CAT_PHPBB_SEO'); + } + // Check for last sql error happened + if ($db->sql_error_triggered) { + $error = $db->sql_error($db->sql_error_sql); + $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); + } + $categories[$cat_name]['id'] = (int) $module_data['module_id']; + $categories[$cat_name]['parent_id'] = 0; + // Create sub-categories... + if (is_array($subs)) { + foreach ($subs as $level2_name) { + $module_data = array( + 'module_basename' => '', + 'module_enabled' => 1, + 'module_display' => 1, + 'parent_id' => (int) $categories[$cat_name]['id'], + 'module_class' => $module_class, + 'module_langname' => $level2_name, + 'module_mode' => '', + 'module_auth' => '', + ); + $_module->update_module_data($module_data, true); + // Check for last sql error happened + if ($db->sql_error_triggered) { + $error = $db->sql_error($db->sql_error_sql); + $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); + } + $categories[$level2_name]['id'] = (int) $module_data['module_id']; + $categories[$level2_name]['parent_id'] = (int) $categories[$cat_name]['id']; + } + } + } + // Get the modules we want to add... returned sorted by name + $module_info = $_module->get_module_infos('phpbb_seo', $module_class); + foreach ($module_info as $module_basename => $fileinfo) { + foreach ($fileinfo['modes'] as $module_mode => $row) { + foreach ($row['cat'] as $cat_name) { + if (!isset($categories[$cat_name])) { + continue; + } + $module_data = array( + 'module_basename' => $module_basename, + 'module_enabled' => 1, + 'module_display' => (isset($row['display'])) ? (int) $row['display'] : 1, + 'parent_id' => (int) $categories[$cat_name]['id'], + 'module_class' => $module_class, + 'module_langname' => $row['title'], + 'module_mode' => $module_mode, + 'module_auth' => $row['auth'], + ); + $_module->update_module_data($module_data, true); + // Check for last sql error happened + if ($db->sql_error_triggered) { + $error = $db->sql_error($db->sql_error_sql); + $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); + } + } + } + } + $_module->remove_cache_file(); + } + } + /** + * remove_modules + */ + function remove_modules($mode, $sub) { + global $db, $user, $phpbb_root_path, $phpEx; + include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx); + $_module = new acp_modules(); + // Set the module class + $module_classes = array_keys($this->module_categories); + $_module->u_action = "phpbb_seo_install.$phpEx"; + $cat_module_data = array(); + $module_data = array(); + $delete_module_data = array(); + foreach ($module_classes as $module_class) { + $_module->module_class = $module_class; + foreach ($this->module_categories[$module_class] as $cat_name => $subs) { + // If the cat is already uninstalled break for now + if ( $this->get_module_id($cat_name) < 1 ) { + $url_mod = !empty($this->sub) ? '?mode=' . $this->mode : ''; + $this->p_master->error(sprintf($user->lang['SEO_ERROR_UNINSTALLED'], $user->lang[$cat_name] ). '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->p_master->module_url . $url_mod . '">', '</a>'), '', '', false, $user->lang['SEO_ERROR_INFO']); + } + $cat_module_data[$cat_name] = array( + 'module_id' => $this->check_module_id($cat_name, ''), + 'module_basename' => '', + 'module_enabled' => 1, + 'module_display' => 1, + 'parent_id' => 0, + 'module_class' => $module_class, + 'module_langname' => $cat_name, + 'module_mode' => '', + 'module_auth' => '', + ); + if (is_array($subs)) { + foreach ($subs as $sub_cat) { + $sub_cat_module_data[$sub_cat] = array( + 'module_id' => $this->check_module_id($sub_cat), + 'module_basename' => '', + 'module_enabled' => 1, + 'module_display' => 1, + 'parent_id' => (int) $cat_module_data[$cat_name]['module_id'], + 'module_class' => $module_class, + 'module_langname' => $sub_cat, + 'module_mode' => '', + 'module_auth' => '', + ); + $branch = $_module->get_module_branch($sub_cat_module_data[$sub_cat]['module_id'],'children', 'descending', false); + if (sizeof($branch)) { + foreach ($branch as $module) { + $error = $_module->delete_module($module['module_id']); + if (!sizeof($error)) { + $_module->remove_cache_file(); + $delete_module_data[$module['module_id']] = $module['module_langname'] . ' - id : ' . $module['module_id']; + } else { + $this->errors[] = implode(' ', $error); + } + } // End modules + } + if (!sizeof($this->errors)) { + $error = $_module->delete_module($sub_cat_module_data[$sub_cat]['module_id']); + if (!sizeof($error)) { + $_module->remove_cache_file(); + $delete_module_data[$sub_cat_module_data[$sub_cat]['module_id']] = $sub_cat_module_data[$sub_cat]['module_langname'] . ' - id : ' . $sub_cat_module_data[$sub_cat]['module_id']; + } else { + $this->errors[] = implode(' ', $error); + } + } + } + } // End sub categories + if (!sizeof($this->errors)) { + $branch = $_module->get_module_branch($cat_module_data[$cat_name]['module_id'],'children', 'descending', false); + if (empty($branch)) { + $error = $_module->delete_module($cat_module_data[$cat_name]['module_id']); + } + if (!sizeof($error)) { + $_module->remove_cache_file(); + $delete_module_data[$cat_module_data[$cat_name]['module_id']] = $cat_module_data[$cat_name]['module_langname'] . ' - id : ' . $cat_module_data[$cat_name]['module_id']; + } else { + $this->errors[] = implode(' ', $error); + } + } + } // End categories + } // End classes + return; + } + /** + * check_module_id by title + */ + function check_module_id($title) { + global $user; + if ( $module_id = $this->get_module_id($title)) { + return $module_id; + } else { + $url_mod = !empty($this->sub) ? '?mode=' . $this->mode : ''; + $this->p_master->error(sprintf($user->lang['SEO_ERROR_ID'], $title ) . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->p_master->module_url . $url_mod . '">', '</a>'), '', '', false, $user->lang['SEO_ERROR_INFO']); + } + } + /** + * get_module_id by title + */ + function get_module_id($title) { + global $db, $user, $phpEx; + $sql = 'SELECT module_id + FROM ' . MODULES_TABLE . " + WHERE module_langname = '" . $db->sql_escape($title) . "'"; + $result = $db->sql_query_limit($sql, 1); + $row = $db->sql_fetchrow($result); + if ($row['module_id'] > 1) { + return intval($row['module_id']); + } + return 0; + } + /** + * Sends an email to the board administrator with their password and some useful links + */ + function final_stage($mode, $sub) { + global $auth, $config, $db, $user, $template, $user, $phpbb_root_path, $phpEx, $phpbb_seo, $cache; + if (!sizeof($this->errors) ) { + add_log('admin', 'SEO_LOG_' . strtoupper($mode), $phpbb_seo->version ); + } else { + add_log('admin', 'SEO_LOG_' . strtoupper($mode) . '_FAIL', $this->errors); + $cache->purge(); + $this->p_master->error($user->lang['SEO_ERROR_INSTALL'] . '<br/><pre>' . implode('<br/>', $this->errors) . '</pre>', __LINE__, __FILE__); + } + $this->page_title = $user->lang['STAGE_FINAL']; + if (!class_exists('phpbb_db_tools')) { + include($phpbb_root_path . 'includes/db/db_tools.' . $phpEx); + } + $db_tools = new phpbb_db_tools($db); + $indexes = $db_tools->sql_list_index(TOPICS_TABLE); + $drop_index_name = 'topic_last_post_id'; + $add_index_name = 'topic_lpid'; + if ( $mode == 'install_phpbb_seo' ) { + if (!$db_tools->sql_column_exists(TOPICS_TABLE, 'topic_url')) { + $db_tools->sql_column_add(TOPICS_TABLE, 'topic_url', array('VCHAR', '')); + } + if (in_array($drop_index_name, $indexes)) { + $db_tools->sql_index_drop(TOPICS_TABLE, $drop_index_name); + } + if (!in_array($add_index_name, $indexes)) { + $db_tools->sql_create_index(TOPICS_TABLE, $add_index_name, array('topic_last_post_id')); + } + $submit_action = append_sid($phpbb_root_path . 'adm/index.' . $phpEx . '?sid=' . $user->session_id); + $title = $user->lang['SEO_INSTALL_CONGRATS']; + $body = sprintf($user->lang['SEO_INSTALL_CONGRATS_EXPLAIN'], $this->modrtype_lang['ulink'], $phpbb_seo->version); + } else { + $purge_topic_table = false; + if ($purge_topic_table) { + if ($db_tools->sql_column_exists(TOPICS_TABLE, 'topic_url')) { + $db_tools->sql_column_remove(TOPICS_TABLE, 'topic_url'); + } + } + if (in_array($drop_index_name, $indexes)) { + $db_tools->sql_index_drop(TOPICS_TABLE, $drop_index_name); + } + if (in_array($add_index_name, $indexes)) { + $db_tools->sql_index_drop(TOPICS_TABLE, $add_index_name); + } + $submit_action = append_sid($phpbb_root_path . 'index.' . $phpEx); + $title = $user->lang['UN_SEO_INSTALL_CONGRATS']; + $body = sprintf($user->lang['UN_SEO_INSTALL_CONGRATS_EXPLAIN'], $this->modrtype_lang['ulink'], $phpbb_seo->version); + } + $cache->purge(); + $template->assign_vars(array( + 'TITLE' => $title, + 'BODY' => $body, + 'L_SUBMIT' => $user->lang['SEO_FINAL_' . strtoupper($mode)], + 'U_ACTION' => $submit_action, + )); + } + var $module_categories = array( + 'acp' => array( + 'ACP_CAT_PHPBB_SEO' => array( + 'ACP_MOD_REWRITE', + ), + ), + ); +} +function set_phpbb_seo_links() { + global $user, $phpbb_seo, $config; + $modrtype_lang = array(); + $phpbb_seo->version = htmlspecialchars($phpbb_seo->version); + $phpbb_seo->modrtype = intval($phpbb_seo->modrtype); + if ($phpbb_seo->modrtype < 1 || $phpbb_seo->modrtype > 3) { + $phpbb_seo->modrtype = 1; + } + $modrtype_lang['titles'] = array( 1 => $user->lang['ACP_SEO_SIMPLE'], 2 => $user->lang['ACP_SEO_MIXED'], 3 => $user->lang['ACP_SEO_ADVANCED'], 'u' => $user->lang['ACP_ULTIMATE_SEO_URL']); + $modrtype_lang['title'] = $modrtype_lang['titles'][$phpbb_seo->modrtype]; + $modrtype_lang['utitle'] = $modrtype_lang['titles']['u']; + $modrtype_lang['types'] = array( 1 => 'SIMPLE', 2 => 'MIXED', 1 => 'SIMPLE', 3 => 'ADVANCED'); + $modrtype_lang['type'] = $modrtype_lang['types'][$phpbb_seo->modrtype]; + $modrtype_lang['modrlinks_en'] = array( 1 => 'http://www.phpbb-seo.com/en/simple-seo-url/simple-phpbb-seo-url-t1566.html', 2 => 'http://www.phpbb-seo.com/en/mixed-seo-url/mixed-phpbb-seo-url-t1565.html', 3 => 'http://www.phpbb-seo.com/en/advanced-seo-url/advanced-phpbb-seo-url-t1219.html', 'u' => 'http://www.phpbb-seo.com/en/phpbb-mod-rewrite/ultimate-seo-url-t4608.html' ); + $modrtype_lang['modrlinks_fr'] = array( 1 => 'http://www.phpbb-seo.com/fr/reecriture-url-simple/seo-url-phpbb-simple-t1945.html', 2 => 'http://www.phpbb-seo.com/fr/reecriture-url-intermediaire/seo-url-intermediaire-t1946.html', 3 => 'http://www.phpbb-seo.com/fr/reecriture-url-avancee/seo-url-phpbb-avance-t1501.html', 'u' => 'http://www.phpbb-seo.com/fr/mod-rewrite-phpbb/ultimate-seo-url-t4489.html' ); + $modrtype_lang['modrforumlinks_en'] = array( 1 => 'http://www.phpbb-seo.com/en/simple-seo-url/', 2 => 'http://www.phpbb-seo.com/en/mixed-seo-url/', 3 => 'http://www.phpbb-seo.com/en/advanced-seo-url/', 'u' => 'http://www.phpbb-seo.com/en/phpbb-mod-rewrite/' ); + $modrtype_lang['modrforumlinks_fr'] = array( 1 => 'http://www.phpbb-seo.com/fr/reecriture-url-simple/', 2 => 'http://www.phpbb-seo.com/fr/reecriture-url-intermediaire/', 3 => 'http://www.phpbb-seo.com/fr/reecriture-url-avancee/', 'u' => 'http://www.phpbb-seo.com/fr/mod-rewrite-phpbb/' ); + if (strpos($config['default_lang'], 'fr') !== false ) { + $modrtype_lang['linkurl'] = $modrtype_lang['modrlinks_fr'][$phpbb_seo->modrtype]; + $modrtype_lang['forumlinkurl'] = $modrtype_lang['modrforumlinks_fr'][$phpbb_seo->modrtype]; + $modrtype_lang['ulinkurl'] = $modrtype_lang['modrlinks_fr']['u']; + $modrtype_lang['uforumlinkurl'] = $modrtype_lang['modrforumlinks_fr']['u']; + } else { + $modrtype_lang['linkurl'] = $modrtype_lang['modrlinks_en'][$phpbb_seo->modrtype]; + $modrtype_lang['forumlinkurl'] = $modrtype_lang['modrforumlinks_en'][$phpbb_seo->modrtype]; + $modrtype_lang['ulinkurl'] = $modrtype_lang['modrlinks_en']['u']; + $modrtype_lang['uforumlinkurl'] = $modrtype_lang['modrforumlinks_en']['u']; + } + $modrtype_lang['link'] = '<a href="' . $modrtype_lang['linkurl'] . '" title="' . $user->lang['ACP_PHPBB_SEO_VERSION'] . ' ' . $modrtype_lang['title'] . '" onclick="window.open(this.href); return false;"><b>' . $modrtype_lang['title'] . '</b></a>'; + $modrtype_lang['forumlink'] = '<a href="' . $modrtype_lang['forumlinkurl'] . '" title="' . $user->lang['ACP_SEO_SUPPORT_FORUM'] . '" onclick="window.open(this.href); return false;"><b>' . $user->lang['ACP_SEO_SUPPORT_FORUM'] . '</b></a>'; + $modrtype_lang['ulink'] = '<a href="' . $modrtype_lang['ulinkurl'] . '" title="' . $user->lang['ACP_PHPBB_SEO_VERSION'] . ' ' . $modrtype_lang['utitle'] . '" onclick="window.open(this.href); return false;"><b>' . $modrtype_lang['utitle'] . '</b></a>'; + $modrtype_lang['uforumlink'] = '<a href="' . $modrtype_lang['uforumlinkurl'] . '" title="' . $user->lang['ACP_SEO_SUPPORT_FORUM'] . '" onclick="window.open(this.href); return false;"><b>' . $user->lang['ACP_SEO_SUPPORT_FORUM'] . '</b></a>'; + return $modrtype_lang; +} +/** +* Main Tab - Overview +*/ +class overview_phpbb_seo extends module { + var $modrtype_lang = array(); + function overview_phpbb_seo(&$p_master) { + $this->modrtype_lang = set_phpbb_seo_links(); + $this->p_master = &$p_master; + } + function main($mode, $sub) { + global $lang, $template, $language, $user, $phpbb_seo; + switch ($sub) { + case 'intro' : + $title = $user->lang['SEO_OVERVIEW_TITLE']; + $body = sprintf($user->lang['SEO_OVERVIEW_BODY'], $this->modrtype_lang['ulink'], $phpbb_seo->version, $this->modrtype_lang['ulinkurl']); + break; + case 'license' : + $title = $user->lang['SEO_LICENCE_TITLE']; + $body = '<p>' . $user->lang['SEO_LICENCE_BODY'] . '</p><br/><hr/>' . implode("<br/>\n", file('./docs/COPYING')); + break; + case 'support' : + $title = $user->lang['SEO_SUPPORT_TITLE']; + $body = sprintf($user->lang['SEO_SUPPORT_BODY'],$this->modrtype_lang['uforumlinkurl'], $this->modrtype_lang['utitle'], $this->modrtype_lang['ulinkurl'] ); + break; + } + $this->tpl_name = 'install_main'; + $this->page_title = $title; + $template->assign_vars(array( + 'TITLE' => $title, + 'BODY' => $body, + + 'S_LANG_SELECT' => '', + )); + } +} +/** +* Quick fix for using the module class outside ACP. +*/ +function adm_back_link($u_action) { + global $user, $install; + $url_mod = !empty($install->sub) ? '?mode=' . $install->mode : ''; + return '<br /><br /><a href="' . $install->module_url . $url_mod . '">« ' . $user->lang['BACK_TO_PREV'] . '</a>'; +} +?>
\ No newline at end of file |