'fixp_menu_button',))); // Let's use the default theme $ssi_theme = 1; $forum_version = 'Fix Packages 0.1'; // If SSI.php is in the same place as this file, this is being run standalone. if (file_exists(dirname(__FILE__) . '/SSI.php')) require_once(dirname(__FILE__) . '/SSI.php'); elseif (file_exists('./SSI.php')) require_once('./SSI.php'); // Hmm... no SSI.php? else die('Error: Cannot find SSI - please verify you put this in the same place as SMF\'s index.php.'); /** * Change false to true if you want to avoid the admin check. */ $context['override_security'] = false; /** * * Do you want to add a new language? * Copy the following function, * change 'english' to the language you want * and tranlsate it. ;D * */ function fixp_english () { global $txt; $txt['fixp'] = 'Fix Pack'; $txt['log_packages_title_installed'] = 'Installed packages'; $txt['log_packages_title_removed'] = 'Uninstalled packages'; $txt['pack_button_remove'] = 'Mark uninstalled selected'; $txt['pack_button_install'] = 'Mark installed selected'; $txt['remove_hooks'] = 'Remove all hooks'; $txt['uninstall'] = 'Show uninstalled'; $txt['install'] = 'Show installed'; $txt['mod_installed'] = 'Install date'; $txt['mod_removed'] = 'Uninstall date'; } // Do not change anything below this line // ------------------------------------------------------------------------------------------------ // Let's start the main job fixp_main(); // and then let's throw out the template! :P obExit(null, null, true); function fixp_menu_button (&$buttons) { global $boardurl, $txt, $context; fixp_loadLanguage(); $context['current_action'] = 'fixp'; $buttons['fixp'] = array( 'title' => $txt['fixp'], 'show' => allowedTo('admin_forum'), 'href' => $boardurl . '/fix_packages.php', 'active_button' => true, 'sub_buttons' => array( ), ); } function fixp_loadLanguage () { global $user_info; fixp_english(); $flang = 'fixp_' . (!empty($user_info['language']) ? $user_info['language'] : ''); if (function_exists($flang) && $flang != 'fixp_english') return $flang(); } function fixp_main () { global $txt, $sourcedir, $boarddir, $boardurl, $context, $user_info, $smcFunc; loadLanguage('Admin'); loadLanguage('Packages'); loadTemplate('Admin'); fixp_loadLanguage(); // Sorry, only logged in admins...unless you want so. if(empty($context['override_security'])) isAllowedTo('admin_forum'); $context['install'] = isset($_GET['uninstall']) ? 0 : 1; if (!empty($_POST['remove']) && is_array($_POST['remove'])) { checkSession(); foreach ($_POST['remove'] as $id) if (isset($id) && is_numeric($id)) { if (!empty($context['install'])) $smcFunc['db_query']('', ' UPDATE {db_prefix}log_packages SET id_member_removed = {int:id_member}, member_removed = {string:member_name}, time_removed = {int:time_removed}, install_state = 0 WHERE id_install = {int:inst_package_id}', array( 'id_member' => $user_info['id'], 'member_name' => $user_info['name'], 'time_removed' => time(), 'inst_package_id' => $id, )); else $smcFunc['db_query']('', ' UPDATE {db_prefix}log_packages SET id_member_removed = 0, member_removed = 0, time_removed = 0, install_state = 1 WHERE id_install = {int:inst_package_id}', array( 'inst_package_id' => $id, )); } require_once($sourcedir . '/Subs-Package.php'); package_put_contents($boarddir . '/Packages/installed.list', time()); } if (isset($_POST['remove_hooks'])) remove_hooks(); $context['sub_template'] = 'admin'; $context['page_title'] = $txt['log_packages_title_' . (!empty($context['install']) ? 'installed' : 'removed')]; // Making a list is not hard with this beauty. require_once($sourcedir . '/Subs-List.php'); // Use the standard templates for showing this. $listOptions = array( 'id' => 'log_packages', 'title' => $context['page_title'], 'get_items' => array( 'function' => 'list_getPacks', ), 'get_count' => array( 'function' => 'list_getNumPacks', ), 'columns' => array( 'name' => array( 'header' => array( 'value' => $txt['mod_name'], ), 'data' => array( 'db' => 'name', ), ), 'version' => array( 'header' => array( 'value' => $txt['mod_version'], ), 'data' => array( 'db' => 'version', ), ), 'install_date' => array( 'header' => array( 'value' => $txt['mod_' . (!empty($context['install']) ? 'installed' : 'removed')], ), 'data' => array( 'function' => create_function('&$data', ' return timeformat($data[\'time_' . (!empty($context['install']) ? 'installed' : 'removed') . '\']); '), ), ), 'check' => array( 'header' => array( 'value' => '', ), 'data' => array( 'function' => create_function('$data', ' return \'\'; '), 'class' => 'centertext', ), ), ), 'form' => array( 'href' => $boardurl . '/fix_packages.php?' . $context['session_var'] . '=' . $context['session_id'] . (!empty($context['install']) ? '' : ';uninstall'), ), 'additional_rows' => array( array( 'position' => 'below_table_data', 'value' => ' [ ' . (!empty($context['install']) ? $txt['uninstall'] : $txt['install']) . ' ] ', 'class' => 'righttext', ), ), ); $context['sub_template'] = 'show_list'; $context['default_list'] = 'log_packages'; // Create the request list. createList($listOptions); } function list_getPacks () { global $smcFunc, $context; $request = $smcFunc['db_query']('', ' SELECT id_install, name, version, time_installed, time_removed FROM {db_prefix}log_packages WHERE install_state = {int:inst_state} ORDER BY id_install', array( 'inst_state' => $context['install'], )); $installed = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) $installed[] = $row; $smcFunc['db_free_result']($request); return $installed; } function list_getNumPacks () { global $smcFunc, $context; $request = $smcFunc['db_query']('', ' SELECT COUNT(*) FROM {db_prefix}log_packages WHERE install_state = {int:inst_state}', array( 'inst_state' => $context['install'], )); list ($numPacks) = $smcFunc['db_fetch_row']($request); $smcFunc['db_free_result']($request); return $numPacks; } function remove_hooks() { global $smcFunc; $smcFunc['db_query']('', ' DELETE FROM {db_prefix}settings WHERE variable LIKE {string:variable}', array( 'variable' => 'integrate_%' ) ); // Now fixing the cache... cache_put_data('modsettings', null, 0); }