From 39172de4ecec2f6ddc597a5ae439e7aef79c75ed Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Thu, 18 Dec 2008 15:55:41 +0000 Subject: [PATCH] Began to rewrite whole script for newly added filters, new extension stub 'network' introduced --- .gitattributes | 2 + inc/autopurge.php | 17 +- inc/check-reset.php | 18 +- inc/databases.php | 2 +- inc/extensions.php | 371 ++++++++++++--------- inc/extensions/ext-admins.php | 20 +- inc/extensions/ext-cache.php | 33 +- inc/extensions/ext-network.php | 87 +++++ inc/extensions/ext-rallye.php | 25 +- inc/extensions/ext-removeip.php | 15 +- inc/extensions/ext-sql_patches.php | 12 +- inc/filters.php | 227 +++++++++++-- inc/functions.php | 14 +- inc/language/de.php | 2 +- inc/language/en.ph | 2 +- inc/libs/admins_functions.php | 14 + inc/libs/cache_functions.php | 15 +- inc/libs/rallye_functions.php | 7 + inc/libs/refback_functions.php | 2 +- inc/libs/removeip_functions.php | 15 + inc/load_cache.php | 10 +- inc/load_extensions.php | 13 +- inc/loader/load_cache-admin.php | 5 +- inc/modules/admin.php | 5 +- inc/modules/admin/admin-inc.php | 19 +- inc/modules/admin/overview-inc.php | 56 +--- inc/modules/admin/what-list_newsletter.php | 2 +- inc/modules/admin/what-list_payouts.php | 4 +- inc/mysql-connect.php | 16 +- inc/mysql-manager.php | 83 +---- inc/pool-update.php | 10 +- templates/de/html/ext/ext_network.tpl | 3 + 32 files changed, 719 insertions(+), 407 deletions(-) create mode 100644 inc/extensions/ext-network.php create mode 100644 templates/de/html/ext/ext_network.tpl diff --git a/.gitattributes b/.gitattributes index 28a5f71f68..c7bc9ac223 100644 --- a/.gitattributes +++ b/.gitattributes @@ -121,6 +121,7 @@ inc/extensions/ext-maintenance.php -text inc/extensions/ext-mediadata.php -text inc/extensions/ext-mods.php -text inc/extensions/ext-mydata.php -text +inc/extensions/ext-network.php -text inc/extensions/ext-newsletter.php -text inc/extensions/ext-nickname.php -text inc/extensions/ext-online.php -text @@ -1225,6 +1226,7 @@ templates/de/html/ext/ext_maintenance.tpl -text templates/de/html/ext/ext_mediadata.tpl -text templates/de/html/ext/ext_mods.tpl -text templates/de/html/ext/ext_mydata.tpl -text +templates/de/html/ext/ext_network.tpl -text templates/de/html/ext/ext_newsletter.tpl -text templates/de/html/ext/ext_nickname.tpl -text templates/de/html/ext/ext_online.tpl -text diff --git a/inc/autopurge.php b/inc/autopurge.php index 15e1832d90..c3a206f0fb 100644 --- a/inc/autopurge.php +++ b/inc/autopurge.php @@ -40,20 +40,11 @@ if (!defined('__SECURITY')) { // Load all includes $INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/autopurge/", "purge-"); -// Include them all -foreach ($INC_POOL as $fqfn) { - // Load them only once - require_once($fqfn); -} // END - foreach +// Run the filter +RUN_FILTER('load_includes'); -// Remove array -unset($INC_POOL); - -if (EXT_IS_ACTIVE("rallye")) { - // Check expired rallyes (hard-coded 3 days limit for displaying expired rallyes!) - require_once(PATH."inc/libs/rallye_functions.php"); - RALLYE_DELETE_EXPIRED_RALLYES(); -} // END - if +// Run filters for extra autopurge +RUN_FILTER('extra_autopurge'); // ?> diff --git a/inc/check-reset.php b/inc/check-reset.php index bef0aef20c..cf6c67c6aa 100644 --- a/inc/check-reset.php +++ b/inc/check-reset.php @@ -46,22 +46,8 @@ if ((date("d", getConfig('last_update')) != date("d", time())) && ((!defined('mx // Add more includes $INC_POOL = RESET_ADD_INCLUDES(); - // Is this not an array? - if (!is_array($INC_POOL)) { - // Log the error - DEBUG_LOG(basename(__FILE__).":INC_POOL is no array!"); - - // Skip further executions - return; - } // END - if - - // Run the full reset scripts - foreach ($INC_POOL as $incFile) { - require_once($incFile); - } // END - foreach - - // Remove array - unset($INC_POOL); + // Run the filter + RUN_FILTER('load_includes'); } // END - if // diff --git a/inc/databases.php b/inc/databases.php index f2398157f1..0f418377e2 100644 --- a/inc/databases.php +++ b/inc/databases.php @@ -114,7 +114,7 @@ define('USAGE_BASE', "usage"); define('SERVER_URL', "http://www.mxchange.org"); // Current SVN revision -define('CURR_SVN_REVISION', "650"); +define('CURR_SVN_REVISION', "651"); // Take a prime number which is long (if you know a longer one please try it out!) define('_PRIME', 591623); diff --git a/inc/extensions.php b/inc/extensions.php index d95384706f..df5e51e9e6 100644 --- a/inc/extensions.php +++ b/inc/extensions.php @@ -38,8 +38,8 @@ if (!defined('__SECURITY')) { } // Load the extension and maybe found language and function files. -function LOAD_EXTENSION ($ext_name, $EXT_LOAD_MODE = "", $EXT_VER = "", $dry_run = false) { - global $EXT_LOADED, $_CONFIG, $CSS, $cacheMode, $SQLs, $EXT_VER_HISTORY; +function LOAD_EXTENSION ($ext_name, $EXT_LOAD_MODE = "", $EXT_VER = "", $dry_run = false, &$SQLs = array()) { + global $EXT_LOADED, $_CONFIG, $CSS, $cacheMode, $EXT_VER_HISTORY; global $INC_POOL, $EXT_UPDATE_DEPENDS, $EXT_DEPRECATED, $UPDATE_NOTES; global $EXT_VERSION, $EXT_ALWAYS_ACTIVE; @@ -123,10 +123,11 @@ function LOAD_EXTENSION ($ext_name, $EXT_LOAD_MODE = "", $EXT_VER = "", $dry_run return true; } -// -function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { +// Registeres an extension and possible update depencies +function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run = false, $logout = true) { global $UPDATE_NOTES, $_CONFIG, $INC_POOL, $cacheInstance; global $EXT_VER_HISTORY, $SQLs, $NOTES, $EXT_ALWAYS_ACTIVE, $EXT_VERSION; + global $EXT_UPDATE_DEPENDS; // This shall never do a non-admin user! if (!IS_ADMIN()) return false; @@ -145,13 +146,13 @@ function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { $EXT_REPORTS_FAILURE = false; // Does this extension exists? - if (LOAD_EXTENSION($ext_name, "register", "", $dry_run)) { + if (LOAD_EXTENSION($ext_name, "register", "", $dry_run, $SQLs)) { // And run possible updates $history = $EXT_VER_HISTORY; foreach ($history as $ver) { //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "ext_name={$ext_name}, ext_ver={$ver}"); // Load extension in update mode - LOAD_EXTENSION($ext_name, "update", $ver, $dry_run); + LOAD_EXTENSION($ext_name, "update", $ver, $dry_run, $SQLs); // Do we have an update? if (((GET_EXT_VERSION("sql_patches") != "") && (getConfig('verbose_sql') == "Y")) || (!EXT_IS_ACTIVE("sql_patches"))) { @@ -175,32 +176,26 @@ function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { $SQLs2 = $SQLs; $SQLs = array(); $test = false; + $ext_update = $EXT_UPDATE_DEPENDS; // Check for required file - if (LOAD_EXTENSION($EXT_UPDATE_DEPENDS, "register", "", $dry_run)) { + if (LOAD_EXTENSION($ext_update, "register", "", $dry_run, $SQLs)) { // If versions mismatch update extension first - $ext_ver = GET_EXT_VERSION($EXT_UPDATE_DEPENDS); + $ext_ver = GET_EXT_VERSION($ext_update); // Extension version set? If empty the extension is not registered if (empty($ext_ver)) { // Extension not registered so far so first load task's ID... - $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_task_system WHERE task_type='EXTENSION' AND subject LIKE '[%s:]%%' LIMIT 1", - array($EXT_UPDATE_DEPENDS), __FILE__, __LINE__); + $task = DETERMINE_EXTENSION_TASK_ID($ext_update); // Entry found? - if (SQL_NUMROWS($result) == 1) { - // Task found so load task's ID and register extension... - list($task) = SQL_FETCHROW($result); - + if ($task > 0) { // Try to register the extension - $test = EXTENSION_REGISTER($EXT_UPDATE_DEPENDS, $task, $dry_run); + $test = EXTENSION_REGISTER($ext_update, $task, $dry_run, false); } // END - if - - // Free result - SQL_FREERESULT($result); } elseif ($ext_ver != $EXT_VERSION) { // Ok, update this extension now - EXTENSION_UPDATE(basename($file), $EXT_UPDATE_DEPENDS, $ext_ver, $dry_run); + EXTENSION_UPDATE($ext_update, $ext_ver, $dry_run); // All okay! $test = true; @@ -231,53 +226,18 @@ function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { if ($test) { // "Dry-run-mode" activated? if (!$dry_run) { - // Run all SQLs - foreach ($SQLs as $sql) { - // Trim spaces away which we don't need - $sql = trim($sql); - - // Is there still an SQL query? - if (!empty($sql)) { - // Do we have an "ALTER TABLE" command? - if (substr(strtolower($sql), 0, 11) == "alter table") { - // Analyse the alteration command - SQL_ALTER_TABLE($sql, __FILE__, __LINE__); - } else { - // Run regular SQL command - $result = SQL_QUERY($sql, __FILE__, __LINE__, false); - } - } // END - if - } // END - foreach - - // Remove cache file(s) if extension is active - RUN_FILTER('post_extension_installed', $ext_name); - - // Check for added include files - if (count($INC_POOL > 0)) { - // Loads every include file - foreach ($INC_POOL as $inc) { - require_once($inc); - } // END - foreach - - // Remove array - unset($INC_POOL); - } // END - if + // Run installation pre-installation filters + RUN_FILTER('pre_extension_installed', false); // Register extension $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_extensions (ext_name, ext_active, ext_version) VALUES ('%s','%s','%s')", array($ext_name, $EXT_ALWAYS_ACTIVE, $EXT_VERSION), __FILE__, __LINE__); - // Update task management - ADMIN_SOLVE_TASK($task_id); - - // @TODO This causes the whole (!) menu cache being purged - CACHE_PURGE_ADMIN_MENU(); + // Remove cache file(s) if extension is active + RUN_FILTER('post_extension_installed', array('ext_name' => $ext_name, 'task_id' => $task_id)); // In normal mode return a true on success $ret = true; - - // Remove SQLs - unset($SQLs); } else { // Rewrite SQL command to keep { and } inside foreach ($SQLs as $key => $sql) { @@ -298,15 +258,21 @@ function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { } elseif (($task_id > 0) && (!empty($ext_name))) { // Remove task from system when id and extension's name is valid $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE id=%s AND status='NEW' LIMIT 1", - array(bigintval($task_id)), __FILE__, __LINE__); + array(bigintval($task_id)), __FILE__, __LINE__); } // Is this the sql_patches? //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":{$ext_name}/{$EXT_LOAD_MODE}"); if (($ext_name == "sql_patches") && (($EXT_LOAD_MODE == "register") || ($EXT_LOAD_MODE == "remove")) && (!$dry_run) && ($test)) { - // Then redirect to logout //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": LOAD!"); - LOAD_URL("modules.php?module=admin&logout=1&".$EXT_LOAD_MODE."=sql_patches"); + if ($logout) { + // Then redirect to logout + LOAD_URL("modules.php?module=admin&logout=1&".$EXT_LOAD_MODE."=sql_patches"); + } else { + // Add temporary filter + REGISTER_FILTER('shutdown', 'REDIRECT_TO_LOGOUT_SQL_PATCHES', true, true); + $GLOBALS['ext_load_mode'] = $EXT_LOAD_MODE; + } } // END - if // Return status code @@ -316,24 +282,24 @@ function EXTENSION_REGISTER ($ext_name, $task_id, $dry_run=false) { // Run SQL queries for given extension id // @TODO Change from ext_id to ext_name (not just even the variable! ;-) ) function EXTENSION_RUN_SQLS ($ext_id, $load_mode) { - global $cacheInstance, $_CONFIG, $SQLs; + global $cacheInstance, $_CONFIG; - // Extensions are never active by default - $EXT_ALWAYS_ACTIVE = "N"; + // This shall never do a non-admin user! + if (!IS_ADMIN()) return false; + + // Init array + $SQLs = array(); // By default no SQL has been executed $sqlRan = false; - // This shall never do a non-admin user! - if (!IS_ADMIN()) return false; - // Get extension's name $ext_name = GET_EXT_NAME($ext_id); if (empty($ext_name)) return false; // Load extension in detected mode //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":ext_name[{$ext_id}]={$ext_name}"); - LOAD_EXTENSION($ext_name, $load_mode); + LOAD_EXTENSION($ext_name, $load_mode, false, $SQLs); //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":SQLs::count=".count($SQLs).""); if ((is_array($SQLs) && (sizeof($SQLs) > 0))) { @@ -371,9 +337,6 @@ function EXTENSION_RUN_SQLS ($ext_id, $load_mode) { if (((EXT_IS_ACTIVE("cache")) || (GET_EXT_VERSION("cache") != "")) && (((SQL_AFFECTEDROWS() == 1)) || ($sqlRan === true) || ($load_mode == "activate") || ($load_mode == "deactivate"))) { // Run filters RUN_FILTER('post_extension_run_sql', $ext_name); - - // @TODO This causes the whole (!) menu cache being purged - CACHE_PURGE_ADMIN_MENU(); } // END - if // Is this the sql_patches? @@ -396,7 +359,7 @@ function EXT_IS_ACTIVE ($ext_name) { $active = "N"; // Check cache - if (!empty($cacheArray['extensions']['ext_active'][$ext_name])) { + if (isset($cacheArray['extensions']['ext_active'][$ext_name])) { // Load from cache //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "CACHE! ext_name={$ext_name}"); $active = $cacheArray['extensions']['ext_active'][$ext_name]; @@ -410,14 +373,11 @@ function EXT_IS_ACTIVE ($ext_name) { array($ext_name), __FILE__, __LINE__); // Entry found? - if (SQL_NUMROWS($result) == 0) { - // Extension was not found! - return false; + if (SQL_NUMROWS($result) == 1) { + // Load entry + list($active) = SQL_FETCHROW($result); } // END - if - // Load entry - list($active) = SQL_FETCHROW($result); - // Free result SQL_FREERESULT($result); @@ -439,40 +399,48 @@ function EXT_IS_ACTIVE ($ext_name) { // Get version from extensions function GET_EXT_VERSION ($ext_name) { global $cacheArray, $_CONFIG, $cacheInstance; - $ret = false; + $ext_ver = false; // Extensions are all inactive during installation if ((!isBooleanConstantAndTrue('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing'))) return ""; //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": ext_name={$ext_name}"); // Is the cache written? - if (!empty($cacheArray['extensions']['ext_version'][$ext_name])) { + if (isset($cacheArray['extensions']['ext_version'][$ext_name])) { // Load data from cache //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": CACHE!"); - $ret = $cacheArray['extensions']['ext_version'][$ext_name]; + $ext_ver = $cacheArray['extensions']['ext_version'][$ext_name]; // Count cache hits if (getConfig('cache_hits') > 0) $_CONFIG['cache_hits']++; else $_CONFIG['cache_hits'] = 1; } elseif (!is_object($cacheInstance)) { // Load from database $result = SQL_QUERY_ESC("SELECT ext_version FROM "._MYSQL_PREFIX."_extensions WHERE ext_name='%s' LIMIT 1", - array($ext_name), __FILE__, __LINE__); - list($ret) = SQL_FETCHROW($result); + array($ext_name), __FILE__, __LINE__); + + // Is the extension there? + if (SQL_NUMROWS($result) == 1) { + // Load entry + list($ext_ver) = SQL_FETCHROW($result); + } // END - if + + // Free result SQL_FREERESULT($result); // Set cache - $cacheArray['extensions']['ext_version'][$ext_name] = $ret; + $cacheArray['extensions']['ext_version'][$ext_name] = $ext_ver; } // Return result - //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": ret={$ret}"); - return $ret; + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": ret={$ext_ver}"); + return $ext_ver; } -// -function EXTENSION_UPDATE ($file, $ext_name, $ext_ver, $dry_run=false) { + +// Updates a given extension with current extension version to latest version +function EXTENSION_UPDATE ($ext_name, $ext_ver, $dry_run = false) { // This shall never do a non-admin user! global $cacheInstance, $_CONFIG, $UPDATE_NOTES, $NOTES, $EXT_VER_HISTORY; - global $EXT_UPDATE_DEPENDS, $EXT_VERSION; + global $EXT_UPDATE_DEPENDS, $EXT_VERSION, $INC_POOL, $SQLs, $cacheArray; // Init arrays $SQLs = array(); $INC_POOL = array(); @@ -480,17 +448,15 @@ function EXTENSION_UPDATE ($file, $ext_name, $ext_ver, $dry_run=false) { // Only admins are allowed to update extensions if ((!IS_ADMIN()) || (empty($ext_name))) return false; - // Load extension in update mode - LOAD_EXTENSION($ext_name, "update". $ext_ver, $dry_run); - - if (!empty($EXT_UPDATE_DEPENDS)) { - // Update another extension first! - $test = EXTENSION_UPDATE(("ext-".$EXT_UPDATE_DEPENDS.".php"), $EXT_UPDATE_DEPENDS, GET_EXT_VERSION($EXT_UPDATE_DEPENDS), $dry_run); - } + // Load extension in test mode + LOAD_EXTENSION($ext_name, "test", $ext_ver, $dry_run, $SQLs); // Save version history $history = $EXT_VER_HISTORY; + // Remove old SQLs array to prevent possible bugs + $SQLs = array(); + // Check if version is updated if ((($EXT_VERSION != $ext_ver) || ($dry_run)) && (is_array($history))) { // Search for starting point @@ -499,74 +465,67 @@ function EXTENSION_UPDATE ($file, $ext_name, $ext_ver, $dry_run=false) { // And load SQL queries in order of version history for ($idx = ($start + 1); $idx < sizeof($history); $idx++) { - // Remove old SQLs array to prevent possible bugs - if (!$dry_run) { unset($SQLs); $SQLs = array(); } - // Set extension version - $ver = $history[$idx]; + $cacheArray['update_ver'][$ext_name] = $history[$idx]; // Load again... - LOAD_EXTENSION($ext_name, "update", $ver, $dry_run); + LOAD_EXTENSION($ext_name, "update", $cacheArray['update_ver'][$ext_name], $dry_run, $SQLs); + + if (!empty($EXT_UPDATE_DEPENDS)) { + // Backup current SQL queries + $cacheArray['update_sqls'][$ext_name] = $SQLs; + + // Is the extension there? + if (GET_EXT_VERSION($EXT_UPDATE_DEPENDS) != "") { + // Update another extension first! + $test = EXTENSION_UPDATE($EXT_UPDATE_DEPENDS, GET_EXT_VERSION($EXT_UPDATE_DEPENDS), $dry_run); + } else { + // Register new extension + $test = EXTENSION_REGISTER($EXT_UPDATE_DEPENDS, 0, $dry_run, false); + } + + // Restore previous SQL queries + $SQLs = $cacheArray['update_sqls'][$ext_name]; + unset($cacheArray['update_sqls'][$ext_name]); + } // END - if // Add notes if (getConfig('verbose_sql') == "Y") { if (!empty($UPDATE_NOTES)) { // Update notes found - $NOTES .= ("
v".$ver.":
".$UPDATE_NOTES."
"); + $NOTES .= ("
v".$cacheArray['update_ver'][$ext_name].":
".$UPDATE_NOTES."
"); $UPDATE_NOTES = ""; - } elseif ($ver == "0.0") { + } elseif ($cacheArray['update_ver'][$ext_name] == "0.0") { // Initial release - $NOTES .= ("
v".$ver.":
".INITIAL_RELEASE."
"); + $NOTES .= ("
v".$cacheArray['update_ver'][$ext_name].":
".INITIAL_RELEASE."
"); } else { - $NOTES .= ("
v".$ver.":
".NO_UPDATE_NOTES."
"); + $NOTES .= ("
v".$cacheArray['update_ver'][$ext_name].":
".NO_UPDATE_NOTES."
"); } } // END - if - - // In real-mode execute any existing includes - if ((!$dry_run) && (count($INC_POOL) > 0)) { - // Include all files - foreach ($INC_POOL as $fqfn) { - require_once($fqfn); - } // END - foreach - } // END - if - - // Run SQLs - if ((is_array($SQLs)) && (!$dry_run)) { - // Run SQL commands - foreach ($SQLs as $sql) - { - $sql = trim($sql); - if (!empty($sql)) - { - // Do we have an "ALTER TABLE" command? - if (substr(strtolower($sql), 0, 11) == "alter table") { - // Analyse the alteration command - SQL_ALTER_TABLE($sql, __FILE__, __LINE__); - } else { - // Run regular SQL command - $result = SQL_QUERY($sql, __FILE__, __LINE__, false); - } - } - } - } elseif (GET_EXT_VERSION("sql_patches") == "") { - // Remove SQLs if extension is not installed - $SQLs = array(); - } } // END - for + // In real-mode execute any existing includes if (!$dry_run) { - // In normal mode insert task and update extension's version... - $ext_subj = "[UPDATE-".$ext_name."-".$EXT_VERSION.":] ".ADMIN_UPDATE_EXT_SUBJ; + $cacheArray['inc_pool'][$ext_name] = $INC_POOL; + RUN_FILTER('load_includes'); + $INC_POOL = $cacheArray['inc_pool'][$ext_name]; + unset($cacheArray['inc_pool'][$ext_name]); + } // END - if + // Run SQLs + RUN_FILTER('run_sqls', $dry_run); + + if (!$dry_run) { // Create task - CREATE_EXTENSION_UPDATE_TASK(GET_CURRENT_ADMIN_ID(), $ext_subj, addslashes($NOTES)); + CREATE_EXTENSION_UPDATE_TASK(GET_CURRENT_ADMIN_ID(), $ext_name, $cacheArray['update_ver'][$ext_name], addslashes($NOTES)); // Update extension's version $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_extensions SET ext_version='%s' WHERE ext_name='%s' LIMIT 1", - array($EXT_VERSION, $ext_name), __FILE__, __LINE__); + array($cacheArray['update_ver'][$ext_name], $ext_name), __FILE__, __LINE__); - // Remove array + // Remove arrays unset($SQLs); + unset($cacheArray['update_ver'][$ext_name]); // Run filters on success extension update RUN_FILTER('extension_update', $ext_name); @@ -643,7 +602,7 @@ function GET_EXT_NAME ($ext_id) { $ret = ""; // Is cache there? - if (!empty($cacheArray['extensions']['ext_name'][$ext_id])) { + if (isset($cacheArray['extensions']['ext_name'][$ext_id])) { // Load from cache $ret = $cacheArray['extensions']['ext_name'][$ext_id]; @@ -729,26 +688,25 @@ function EXT_VERSION_IS_OLDER ($ext_name, $ext_ver) { } // Creates a new task for updated extension -function CREATE_EXTENSION_UPDATE_TASK ($admin_id, $subject, $notes) { - // Check if task is not there - $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_task_system WHERE subject='%s' LIMIT 1", - array($subject), __FILE__, __LINE__); - if (SQL_NUMROWS($result) == 0) { - // Task not created so it's a brand-new extension which we need to register and create a task for! - $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_task_system (assigned_admin, userid, status, task_type, subject, text, task_created) VALUES ('%s','0','NEW','EXTENSION_UPDATE','%s','%s', UNIX_TIMESTAMP())", - array($admin_id, $subject, $notes), __FILE__, __LINE__); +function CREATE_EXTENSION_UPDATE_TASK ($admin_id, $ext_name, $ext_ver, $notes) { + // Create subject line + $subject = "[UPDATE-".$ext_name."-".$ext_ver.":] ".ADMIN_UPDATE_EXT_SUBJ; + + // Is the extension there? + if (GET_EXT_VERSION($ext_name) != "") { + // Check if task is not there + if (DETERMINE_TASK_ID_BY_SUBJECT($subject) == 0) { + // Task not created so it's a brand-new extension which we need to register and create a task for! + SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_task_system (assigned_admin, userid, status, task_type, subject, text, task_created) VALUES ('%s','0','NEW','EXTENSION_UPDATE','%s','%s', UNIX_TIMESTAMP())", + array($admin_id, $subject, $notes), __FILE__, __LINE__); + } // END - if } // END - if - - // Free memory - SQL_FREERESULT($result); } // Creates a new task for newly installed extension function CREATE_NEW_EXTENSION_TASK ($admin_id, $subject, $ext) { // Not installed and do we have created a task for the admin? - $result = SQL_QUERY_ESC("SELECT `id` FROM `"._MYSQL_PREFIX."_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1", - array($subject), __FILE__, __LINE__); - if ((SQL_NUMROWS($result) == 0) && (GET_EXT_VERSION($ext) == "")) { + if ((DETERMINE_TASK_ID_BY_SUBJECT($subject) == 0) && (GET_EXT_VERSION($ext) == "")) { // Template file $tpl = sprintf("%stemplates/%s/html/ext/ext_%s.tpl", PATH, @@ -775,9 +733,6 @@ VALUES (%s,0,'NEW','EXTENSION','%s','%s',UNIX_TIMESTAMP())", ), __FILE__, __LINE__, true, false ); } // END - if - - // Free memory - SQL_FREERESULT($result); } // Creates a task for automatically deactivated (deprecated) extension @@ -786,9 +741,7 @@ function CREATE_EXTENSION_DEACTIVATION_TASK ($ext) { $subject = sprintf("[%s:] %s", $ext, TASK_SUBJ_EXTENSION_DEACTIVATED); // Not installed and do we have created a task for the admin? - $result = SQL_QUERY_ESC("SELECT `id` FROM `"._MYSQL_PREFIX."_task_system` WHERE `subject` = '%s' LIMIT 1", - array($subject), __FILE__, __LINE__); - if ((SQL_NUMROWS($result) == 0) && (GET_EXT_VERSION($ext) != "")) { + if ((DETERMINE_TASK_ID_BY_SUBJECT($subject) == 0) && (GET_EXT_VERSION($ext) != "")) { // Task not created so add it $result_insert = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_task_system (assigned_admin, userid, status, task_type, subject, text, task_created) VALUES (0,0,'NEW','EXTENSION_DEACTIVATION','%s','%s',UNIX_TIMESTAMP())", @@ -803,5 +756,99 @@ VALUES (0,0,'NEW','EXTENSION_DEACTIVATION','%s','%s',UNIX_TIMESTAMP())", SQL_FREERESULT($result); } +// Checks if the module has a menu +function MODULE_HAS_MENU ($mod, $forceDb = false) { + global $cacheArray, $_CONFIG; + + // All is false by default + $ret = false; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."):mod={$mod},cache=".GET_EXT_VERSION("cache")."
\n"; + if (GET_EXT_VERSION("cache") >= "0.1.2") { + // Cache version is okay, so let's check the cache! + if (isset($cacheArray['modules']['has_menu'][$mod])) { + // Check module cache and count hit + $ret = ($cacheArray['modules']['has_menu'][$mod] == "Y"); + if (getConfig('cache_hits') > 0) { $_CONFIG['cache_hits']++; } else { $_CONFIG['cache_hits'] = 1; } + } elseif (isset($cacheArray['extensions']['ext_menu'][$mod])) { + // Check cache and count hit + $ret = ($cacheArray['extensions']['ext_menu'][$mod] == "Y"); + if (getConfig('cache_hits') > 0) { $_CONFIG['cache_hits']++; } else { $_CONFIG['cache_hits'] = 1; } + } elseif ((IS_ADMIN()) && ($mod == "admin")) { + // Admin module has always a menu! + $ret = true; + } + } elseif ((GET_EXT_VERSION("sql_patches") >= "0.3.6") && ((!EXT_IS_ACTIVE("cache")) || ($forceDb === true))) { + // Check database for entry + $result = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", + array($mod), __FILE__, __LINE__); + + // Entry found? + if (SQL_NUMROWS($result) == 1) { + // Load "has_menu" column + list($has_menu) = SQL_FETCHROW($result); + + // Fake cache... ;-) + $cacheArray['extensions']['ext_menu'][$mod] = $has_menu; + + // Does it have a menu? + $ret = ($has_menu == "Y"); + } // END - if + + // Free memory + SQL_FREERESULT($result); + } elseif (GET_EXT_VERSION("sql_patches") == "") { + // No sql_patches installed, so maybe in admin area? + $ret = ((IS_ADMIN()) && ($mod == "admin")); // Then there is a menu! + } + + // Return status + //* DEBUG: */ var_dump($ret); + return $ret; +} + +// Determines the task id for given extension +function DETERMINE_EXTENSION_TASK_ID ($ext_name) { + // Default is not found + $task_id = 0; + + // Search for extension task's id + $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_task_system WHERE task_type='EXTENSION' AND subject='[%s:]' LIMIT 1", + array($ext_name), __FILE__, __LINE__); + + // Entry found? + if (SQL_NUMROWS($result) == 1) { + // Task found so load task's ID and register extension... + list($task_id) = SQL_FETCHROW($result); + } // END - if + + // Free result + SQL_FREERESULT($result); + + // Return it + return $task_id; +} + +// Determines the task id for given subject +function DETERMINE_TASK_ID_BY_SUBJECT ($subject) { + // Default is not found + $task_id = 0; + + // Search for task id + $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_task_system WHERE subject LIKE '%s%%' LIMIT 1", + array($subject), __FILE__, __LINE__); + + // Entry found? + if (SQL_NUMROWS($result) == 1) { + // Task found so load task's ID and register extension... + list($task_id) = SQL_FETCHROW($result); + } // END - if + + // Free result + SQL_FREERESULT($result); + + // Return it + return $task_id; +} + // ?> diff --git a/inc/extensions/ext-admins.php b/inc/extensions/ext-admins.php index 211c57e7e9..d5d1972d33 100644 --- a/inc/extensions/ext-admins.php +++ b/inc/extensions/ext-admins.php @@ -38,13 +38,13 @@ if (!defined('__SECURITY')) { } // Version of this extension -$EXT_VERSION = "0.7.0"; +$EXT_VERSION = "0.7.1"; // Auto-set extension version if (empty($EXT_VER)) $EXT_VER = $EXT_VERSION; // Version history array (add more with , "0.1" and so on) -$EXT_VER_HISTORY = array("0.0", "0.1", "0.2", "0.3", "0.3.1", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0"); +$EXT_VER_HISTORY = array("0.0", "0.1", "0.2", "0.3", "0.3.1", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0", "0.7.1"); switch ($EXT_LOAD_MODE) { @@ -57,10 +57,13 @@ case "register": // Do stuff when installation is running (modules.php?module=ad case "remove": // Do stuff when removing extension // SQL commands to run - $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_admin_menu` WHERE action='admins' LIMIT 5"; + $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_admin_menu` WHERE action='admins' LIMIT 6"; $SQLs[] = "DROP TABLE IF EXISTS "._MYSQL_PREFIX."_admins_acls"; $SQLs[] = "DROP TABLE IF EXISTS "._MYSQL_PREFIX."_admins_mails"; $SQLs[] = "ALTER TABLE "._MYSQL_PREFIX."_admins DROP default_acl"; + + // Remove filters + UNREGISTER_FILTER('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', true, !$dry_run); break; case "activate": // Do stuff when admin activates this extension @@ -282,6 +285,17 @@ PRIMARY KEY (id) // Update notes (these will be set as task text!) $UPDATE_NOTES = "Fehlgeschlagene Login-Versuche werden nun mitgezählt und der letzte vermerkt."; break; + + case "0.7.1": // SQL queries for v0.7.1 + // Update depends on sql_patches + $EXT_UPDATE_DEPENDS = "sql_patches"; + + // Add filters + REGISTER_FILTER('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', false, true, !$dry_run); + + // Update notes (these will be set as task text!) + $UPDATE_NOTES = "Filter hinzugefügt und ist von sql_patches abhängig."; + break; } break; diff --git a/inc/extensions/ext-cache.php b/inc/extensions/ext-cache.php index 41e689a336..de4d83ef15 100644 --- a/inc/extensions/ext-cache.php +++ b/inc/extensions/ext-cache.php @@ -39,13 +39,13 @@ if (!defined('__SECURITY')) { } // Version number -$EXT_VERSION = "0.2.1"; +$EXT_VERSION = "0.2.2"; // Auto-set extension version if (empty($EXT_VER)) $EXT_VER = $EXT_VERSION; // Version history array (add more with , "0.1" and so on) -$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1"); +$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2"); switch ($EXT_LOAD_MODE) { @@ -64,7 +64,9 @@ case "remove": // Do stuff when removing extension // Unregister all filters UNREGISTER_FILTER('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', true, !$dry_run); UNREGISTER_FILTER('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', true, !$dry_run); + UNREGISTER_FILTER('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', true, !$dry_run); UNREGISTER_FILTER('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', true, !$dry_run); + UNREGISTER_FILTER('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', true, !$dry_run); UNREGISTER_FILTER('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, !$dry_run); UNREGISTER_FILTER('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, !$dry_run); UNREGISTER_FILTER('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, !$dry_run); @@ -212,17 +214,26 @@ case "update": // Update an extension case "0.2.1": // SQL queries for v0.2.1 // Register the new filter - REGISTER_FILTER('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true); - REGISTER_FILTER('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true); - REGISTER_FILTER('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true); - REGISTER_FILTER('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true); - REGISTER_FILTER('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true); - REGISTER_FILTER('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true); - REGISTER_FILTER('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true); - REGISTER_FILTER('extension_remove', 'CACHE_DESTROY_ALL', false, true); + REGISTER_FILTER('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, !$dry_run); + REGISTER_FILTER('extension_remove', 'CACHE_DESTROY_ALL', false, true, !$dry_run); // Update notes (these will be set as task text!) - $UPDATE_NOTES = "Filter hinzugefügt für Erweiterungsmanagement."; + $UPDATE_NOTES = "Filter für Erweiterungsmanagement hinzugefügt."; + break; + + case "0.2.2": // SQL queries for v0.2.2 + // Register the new filter + REGISTER_FILTER('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', false, true, !$dry_run); + REGISTER_FILTER('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', false, true, !$dry_run); + + // Update notes (these will be set as task text!) + $UPDATE_NOTES = "Weitere Filter hinzugefügt."; break; } break; diff --git a/inc/extensions/ext-network.php b/inc/extensions/ext-network.php new file mode 100644 index 0000000000..67d04e4787 --- /dev/null +++ b/inc/extensions/ext-network.php @@ -0,0 +1,87 @@ + diff --git a/inc/extensions/ext-rallye.php b/inc/extensions/ext-rallye.php index 2f12e45136..a765bdd1cb 100644 --- a/inc/extensions/ext-rallye.php +++ b/inc/extensions/ext-rallye.php @@ -38,13 +38,13 @@ if (!defined('__SECURITY')) { } // Version number -$EXT_VERSION = "0.3.4"; +$EXT_VERSION = "0.3.5"; // Auto-set extension version if (empty($EXT_VER)) $EXT_VER = $EXT_VERSION; // Version history array (add more with , "0.1" and so on) -$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4"); +$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5"); switch ($EXT_LOAD_MODE) { @@ -86,25 +86,33 @@ KEY (rallye_id), KEY (userid), PRIMARY KEY(id) ) TYPE=MyISAM"; + // Admin menu $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye', NULL, 'Rallye-Management','Richten Sie neue Ref-Rallyes ein, die zeitgesteuert anfangen und aufhöhren. Dabei wird alles weitere automatisch geregelt.','9')"; $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','add_rallye','Neue Rallye hinzufügen','Neue Ref-Rallye hinzufügen.','1')"; $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','config_rallye_prices','Preise einrichten','Richten Sie Preise zu den Rallyes ein.','2')"; $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','list_rallyes','Rallyes verwalten','Alle bestehenden Ref-Rallyes auflisten, bearbeiten, stoppen, löschen usw.','3')"; + // Guest menu $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','rallyes','Ref-Rallyes','Y','Y','9')"; + // Member menu $SQLs[] = "INSERT INTO `"._MYSQL_PREFIX."_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','rallyes','Ref-Rallyes','Y','Y','9')"; break; case "remove": // Do stuff when removing extension - // SQL commands to run + // Drop tables $SQLs[] = "DROP TABLE IF EXISTS "._MYSQL_PREFIX."_rallye_data"; $SQLs[] = "DROP TABLE IF EXISTS "._MYSQL_PREFIX."_rallye_prices"; $SQLs[] = "DROP TABLE IF EXISTS "._MYSQL_PREFIX."_rallye_users"; + + // Remove menus $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_admin_menu` WHERE action='rallye' LIMIT 4"; $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_guest_menu` WHERE what='rallyes' LIMIT 1"; $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_member_menu` WHERE what='rallyes' LIMIT 1"; + + // Unregister filter + UNREGISTER_FILTER('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', true, !$dry_run); break; case "activate": // Do stuff when admin activates this extension @@ -297,6 +305,17 @@ Zudem sollten Sie mindestens folgende Templates (in templates/".GET_LANG // Update notes (these will be set as task text!) $UPDATE_NOTES = "Fehlerhinweis bei deaktivierter Erweiterung verbessert."; break; + + case "0.3.5": // SQL queries for 0.3.5 + // This update depends on sql_patches + $EXT_UPDATE_DEPENDS = "sql_patches"; + + // Register filter + REGISTER_FILTER('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', false, true, !$dry_run); + + // Update notes (these will be set as task text!) + $UPDATE_NOTES = "Filter hinzugefügt und ist von sql_patches abhängig."; + break; } break; diff --git a/inc/extensions/ext-removeip.php b/inc/extensions/ext-removeip.php index f604231464..5e0556ae7f 100644 --- a/inc/extensions/ext-removeip.php +++ b/inc/extensions/ext-removeip.php @@ -38,13 +38,13 @@ if (!defined('__SECURITY')) { } // Version number -$EXT_VERSION = "0.0"; +$EXT_VERSION = "0.0.1"; // Auto-set extension version if (empty($EXT_VER)) $EXT_VER = $EXT_VERSION; // Version history array (add more with , "0.1" and so on) -$EXT_VER_HISTORY = array("0.0"); +$EXT_VER_HISTORY = array("0.0", "0.0.1"); switch ($EXT_LOAD_MODE) { @@ -65,6 +65,9 @@ case "register": // Do stuff when installation is running (modules.php?module=ad case "remove": // Do stuff when removing extension // SQL commands to run $SQLs[] = "DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_admin_menu` WHERE what='config_removeip' LIMIT 1"; + + // Remove filters + UNREGISTER_FILTER('post_youhere_line', 'ADD_ANONYMITY_NOTICE', true, !$dry_run); break; case "activate": // Do stuff when admin activates this extension @@ -79,10 +82,14 @@ case "update": // Update an extension switch ($EXT_VER) { case "0.0.1": // SQL queries for v0.0.1 - $SQLs[] = ""; + // Update depends on sql_patches + $EXT_UPDATE_DEPENDS = "sql_patches"; + + // Add filters + REGISTER_FILTER('post_youhere_line', 'ADD_ANONYMITY_NOTICE', false, true, !$dry_run); // Update notes (these will be set as task text!) - $UPDATE_NOTES = ""; + $UPDATE_NOTES = "Filter hinzugefügt und ist von sql_patches abhängig."; break; } break; diff --git a/inc/extensions/ext-sql_patches.php b/inc/extensions/ext-sql_patches.php index f869145137..1d10934a85 100644 --- a/inc/extensions/ext-sql_patches.php +++ b/inc/extensions/ext-sql_patches.php @@ -38,13 +38,13 @@ if (!defined('__SECURITY')) { } // Version number -$EXT_VERSION = "0.5.9"; +$EXT_VERSION = "0.6.0"; // Auto-set extension version if (!isset($EXT_VER)) $EXT_VER = $EXT_VERSION; // Version history array (add more with , "0.1" and so on) -$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9"); +$EXT_VER_HISTORY = array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0"); switch ($EXT_LOAD_MODE) { @@ -702,6 +702,14 @@ PRIMARY KEY (`filter_id`) // Update notes (these will be set as task text!) $UPDATE_NOTES = "Tabellen für Filter-System hinzugefügt."; break; + + case "0.6.0": // SQL queries for v0.6.0 + $SQLs[] = "ALTER TABLE `"._MYSQL_PREFIX."_filters` ADD `filter_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0"; + $SQLs[] = "ALTER TABLE `"._MYSQL_PREFIX."_config` ADD `update_filter_usage` ENUM('N','Y') NOT NULL DEFAULT 'N'"; + + // Update notes (these will be set as task text!) + $UPDATE_NOTES = "Benutzungsstatistik eingebaut. Das Zählen der Filterverwendungen sollte ausschliesslich zu Debugging-Zwecken eingesetzt werden."; + break; } break; diff --git a/inc/filters.php b/inc/filters.php index efd94b2630..c0b3702d2e 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -39,7 +39,7 @@ if (!defined('__SECURITY')) { // Init "generic filter system" function INIT_FILTER_SYSTEM() { - global $filters, $loadedFilters; + global $filters, $loadedFilters, $counter; // Is the filter already initialized? if ((isset($filters)) && (is_array($filters))) { @@ -58,13 +58,18 @@ function INIT_FILTER_SYSTEM() { 'shutdown' => array() ); - // Init loaded filters + // Init loaded filters and counter $loadedFilters = array(); + $counter = array(); // Load all saved filers if sql_patches is updated if (GET_EXT_VERSION("sql_patches") >= "0.5.9") { + // Init add + $ADD = ""; + if (GET_EXT_VERSION("sql_patches") >= "0.6.0") $ADD = ", `filter_counter`"; + // Load all active filers - $result = SQL_QUERY("SELECT `filter_name`, `filter_function`, `filter_active` + $result = SQL_QUERY("SELECT `filter_name`, `filter_function`, `filter_active`".$ADD." FROM `"._MYSQL_PREFIX."_filters` ORDER BY `filter_id` ASC", __FILE__, __LINE__); @@ -72,11 +77,24 @@ ORDER BY `filter_id` ASC", __FILE__, __LINE__); if (SQL_NUMROWS($result) > 0) { // Load all filters while ($filterArray = SQL_FETCHARRAY($result)) { + // Get filter name and function + $filterName = $filterArray['filter_name']; + $filterFunction = $filterArray['filter_function']; + + // Set counter to default + $counter[$filterName][$filterFunction] = 0; + // Mark this filter as loaded (from database) - $loadedFilters[$filterArray['filter_name']][$filterArray['filter_function']] = true; + $loadedFilters[$filterName][$filterFunction] = true; // Set this filter - $filters[$filterArray['filter_name']][$filterArray['filter_function']] = $filterArray['filter_active']; + $filters[$filterName][$filterFunction] = $filterArray['filter_active']; + + // Is the array element for counter there? + if (isset($filterArray['filter_counter'])) { + // Then use this value! + $counter[$filterName][$filterFunction] = $filterArray['filter_counter']; + } // END - if } // END - while } // END - if @@ -84,16 +102,33 @@ ORDER BY `filter_id` ASC", __FILE__, __LINE__); SQL_FREERESULT($result); } // END - if - // @TODO Find some more init/shutdown filter functions + // Login failtures handler + REGISTER_FILTER('post_youhere_line', 'CALL_HANDLER_LOGIN_FAILTURES'); + + // Filters for pre-extension-registration + REGISTER_FILTER('pre_extension_installed', 'RUN_SQLS'); + + // Filters for post-extension-registration + REGISTER_FILTER('post_extension_installed', 'AUTO_ACTIVATE_EXTENSION'); + REGISTER_FILTER('post_extension_installed', 'SOLVE_TASK'); + REGISTER_FILTER('post_extension_installed', 'LOAD_INCLUDES'); + + // Solving tasks + REGISTER_FILTER('solve_task', 'SOLVE_TASK'); + + // Loading includes in general + REGISTER_FILTER('load_includes', 'LOAD_INCLUDES'); + + // Run SQLs + REGISTER_FILTER('run_sqls', 'RUN_SQLS'); // Register shutdown filters REGISTER_FILTER('shutdown', 'FLUSH_FILTERS'); - REGISTER_FILTER('shutdown', 'SHUTDOWN_DATABASE'); } // "Registers" a new filter function -function REGISTER_FILTER ($filterName, $filterFunction, $silentAbort = true, $force = false) { - global $filters; +function REGISTER_FILTER ($filterName, $filterFunction, $silentAbort = true, $force = false, $add = true) { + global $filters, $counter; // Extend the filter function name $filterFunction = sprintf("FILTER_%s", strtoupper($filterFunction)); @@ -116,13 +151,17 @@ function REGISTER_FILTER ($filterName, $filterFunction, $silentAbort = true, $fo return false; } // END - if - // Simply add it to the array - $filters[$filterName][$filterFunction] = "Y"; + // Shall we add it? + if ($add) { + // Simply add it to the array + $filters[$filterName][$filterFunction] = "Y"; + $counter[$filterName][$filterFunction] = 0; + } // END - if } // "Unregisters" a filter from the given chain function UNREGISTER_FILTER ($filterName, $filterFunction, $force = false, $remove = true) { - global $filters; + global $filters, $counter; // Extend the filter function name $filterFunction = sprintf("FILTER_%s", strtoupper($filterFunction)); @@ -138,12 +177,13 @@ function UNREGISTER_FILTER ($filterName, $filterFunction, $force = false, $remov if ($remove) { // Mark for filter removal $filters[$filterName][$filterFunction] = "R"; + unset($counter[$filterName][$filterFunction]); } // END - if } // "Runs" the given filters, data is optional and can be any type of data function RUN_FILTER ($filterName, $data = null, $silentAbort = true) { - global $filters; + global $filters, $counter; // Is that filter chain there? if (!isset($filters[$filterName])) { @@ -167,8 +207,20 @@ function RUN_FILTER ($filterName, $data = null, $silentAbort = true) { // Is the filter active? if ($active == "Y") { + // Is this filter there? + if (!function_exists($filterFunction)) { + // Unregister it + UNREGISTER_FILTER($filterName, $filterFunction); + + // Skip this entry + continue; + } // END - if + // Call the filter chain $returnValue = call_user_func_array($filterFunction, array($returnValue)); + + // Update usage counter + $counter[$filterName][$filterFunction]++; } // END - if } // END - foreach @@ -182,7 +234,10 @@ function RUN_FILTER ($filterName, $data = null, $silentAbort = true) { // Filter for flushing all new filters to the database function FILTER_FLUSH_FILTERS () { - global $filters, $link, $loadedFilters; + global $filters, $counter, $link, $loadedFilters, $SQLs; + + // Clear all previous SQL queries + $SQLs = array(); // Is a database link here and not in installation mode? if ((!is_resource($link)) && (!isBooleanConstantAndTrue('mxchange_installing'))) { @@ -227,7 +282,7 @@ function FILTER_FLUSH_FILTERS () { $insertSQL = substr($insertSQL, 0, -1); // And run it - SQL_QUERY($insertSQL, __FILE__, __LINE__); + $SQLs[] = $insertSQL; } // END - if // Something has been removed? @@ -236,20 +291,142 @@ function FILTER_FLUSH_FILTERS () { $removeSQL = substr($removeSQL, 0, -2) . "LIMIT ".$removed; // And run it - SQL_QUERY($removeSQL, __FILE__, __LINE__); + $removeSQL; + } // END - if + + // Shall we update usage counters (ONLY FOR DEBUGGING!) + if (getConfig('update_filter_usage') == "Y") { + // Update all counters + foreach ($counter as $filterName => $filterArray) { + // Walk through all filters + foreach ($filterArray as $filterFunction => $cnt) { + // Construct and add the query + $SQLs[] = sprintf("UPDATE `"._MYSQL_PREFIX."_filters` SET `filter_counter`=%s WHERE `filter_name`='%s' AND `filter_function`='%s' LIMIT 1", + bigintval($cnt), + $filterName, + $filterFunction + ); + } // END - foreach + } // END - foreach + } // END - if + + // Run the run_sqls filter in non-dry mode + RUN_FILTER('run_sqls', false); +} + +// Filter for calling the handler for login failtures +function FILTER_CALL_HANDLER_LOGIN_FAILTURES ($data) { + // Init content + $content = $data; + + // Handle failed logins here if not in guest + //* DEBUG: */ print __FUNCTION__."(".__LINE__."):type={$data['type']},action={$GLOBALS['action']},what={$GLOBALS['what']},lvl={$data['access_level']}
\n"; + if ((($data['type'] == "what") || ($data['type'] == "action") && ((!isset($GLOBALS['what'])) || ($GLOBALS['what'] == "overview") || ($GLOBALS['what'] == getConfig('index_home')))) && ($data['access_level'] != "guest") && ((GET_EXT_VERSION("sql_patches") >= "0.4.7") || (GET_EXT_VERSION("admins") >= "0.7.0"))) { + // Handle failture + $content['content'] .= HANDLE_LOGIN_FAILTURES($data['access_level']); } // END - if + + // Return the content + return $content; } -// Filter for shutting down the database link -function FILTER_SHUTDOWN_DATABASE () { - global $link; +// Filter for redirecting to logout if sql_patches has been installed +function FILTER_REDIRECT_TO_LOGOUT_SQL_PATCHES () { + // Remove this filter + UNREGISTER_FILTER('shutdown', __FUNCTION__); - if (is_resource($link)) { - // Close link - SQL_CLOSE($link, __FILE__, __LINE__); - } else { - // No database link - ADD_FATAL(NO_DB_LINK); + // Is the element set? + if (isset($GLOBALS['ext_load_mode'])) { + // Redirect here + LOAD_URL("modules.php?module=admin&logout=1&".$GLOBALS['ext_load_mode']."=sql_patches"); + } // END - if + + // This should not happen! + DEBUG_LOG(__FUNCTION__, __LINE__, "Cannot auto-logout because no extension load-mode has been set."); +} + +// Filter for auto-activation of a extension +function FILTER_AUTO_ACTIVATE_EXTENSION ($data) { + global $EXT_ALWAYS_ACTIVE; + + // Is this extension always activated? + if ($EXT_ALWAYS_ACTIVE == "Y") { + // Then activate the extension + //* DEBUG: */ echo __FUNCTION__."(".__LINE__."): ext_name={$data['ext_name']}
\n"; + ACTIVATE_EXTENSION($data['ext_name']); + } // END - if + + // Return the data + return $data; +} + +// Filter for solving task given task +function FILTER_SOLVE_TASK ($data) { + // Don't solve anything if no admin! + if (!IS_ADMIN()) return $data; + + // Is this a direct task id or array element task_id is found? + if (is_int($data)) { + // Then solve it... + ADMIN_SOLVE_TASK($data); + } elseif ((is_array($data)) && (isset($data['task_id']))) { + // Solve it... + ADMIN_SOLVE_TASK($data['task_id']); + } + + // Return the data + return $data; +} + +// Filter to load include files +function FILTER_LOAD_INCLUDES ($data) { + global $INC_POOL; + + // Is it an array? + if ((!isset($INC_POOL)) || (!is_array($INC_POOL))) { + // Then abort here + DEBUG_LOG(__FILE__, __LINE__, "INC_POOL is no array!"); + return $data; + } // END - if + + // Check for added include files + if (count($INC_POOL) > 0) { + // Loads every include file + foreach ($INC_POOL as $fqfn) { + require_once($fqfn); + } // END - foreach + + // Remove array + unset($INC_POOL); + } // END - if + + // Return $data + return $data; +} + +// Filter for running SQL commands +function FILTER_RUN_SQLS ($dry_run) { + global $SQLs; + + // Is the array there? + if ((is_array($SQLs)) && (!$dry_run)) { + // Run SQL commands + foreach ($SQLs as $sql) { + $sql = trim($sql); + if (!empty($sql)) { + // Do we have an "ALTER TABLE" command? + if (substr(strtolower($sql), 0, 11) == "alter table") { + // Analyse the alteration command + SQL_ALTER_TABLE($sql, __FILE__, __LINE__); + } else { + // Run regular SQL command + $result = SQL_QUERY($sql, __FILE__, __LINE__, false); + } + } // END - if + } // END - foreach + } elseif (GET_EXT_VERSION("sql_patches") == "") { + // Remove SQLs if extension is not installed + $SQLs = array(); } } diff --git a/inc/functions.php b/inc/functions.php index 992c4a7373..999c6e8e64 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -239,6 +239,11 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) { $_CONFIG['num_templates']++; } + // Prepare IP number and User Agent + $REMOTE_ADDR = GET_REMOTE_ADDR(); + if (!defined('REMOTE_ADDR')) define('REMOTE_ADDR', $REMOTE_ADDR); + $HTTP_USER_AGENT = GET_USER_AGENT(); + // Init some data $ret = ""; if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0; @@ -2824,7 +2829,7 @@ function DETERMINE_REFID () { } // Destroys the admin session -function DESTROY_ADMIN_SESSION () { +function DESTROY_ADMIN_SESSION ($destroy = true) { // Kill maybe existing session variables including array elements set_session('admin_login', ""); set_session('admin_md5' , ""); @@ -2832,7 +2837,12 @@ function DESTROY_ADMIN_SESSION () { set_session('admin_to' , ""); // Destroy session and return status - return @session_destroy(); + if ($destroy) { + return @session_destroy(); + } // END - if + + // All fine if we shall not really destroy the session + return true; } // Checks if a given apache module is loaded diff --git a/inc/language/de.php b/inc/language/de.php index 745befbddf..74ecd9dcb7 100644 --- a/inc/language/de.php +++ b/inc/language/de.php @@ -846,7 +846,7 @@ define('SORT_NAVIGATION', "Sortieren"); define('HIGHER', "Höher"); define('LOWER', "Niedriger"); define('MEMBER_SETTINGS_SAVED', "Einstellungen gespeichert."); -define('REMOTE_ADDR_TIMEOUT', "Ein Mitglied ist mit Ihrer IP-Nummer ".GET_REMOTE_ADDR()." bereits registriert! Bitte kontaktieren Sie uns, wenn dies ein Fehler sein sollte!"); +define('REMOTE_ADDR_TIMEOUT', "Ein Mitglied ist mit Ihrer IP-Nummer {!REMOTE_ADDR!} bereits registriert! Bitte kontaktieren Sie uns, wenn dies ein Fehler sein sollte!"); define('IP_TIMEOUT', "IP-Zeitsperre"); define('ADMIN_PAYOUT_NOT_INSTALLED', "payout-Erweiterung nicht installiert!"); define('ADMIN_WERNIS_NOT_INSTALLED', "wernis-Erweiterung nicht installiert!"); diff --git a/inc/language/en.ph b/inc/language/en.ph index ed61142524..0ccb9e1fbe 100644 --- a/inc/language/en.ph +++ b/inc/language/en.ph @@ -537,7 +537,7 @@ define('SORT_NAVIGATION', "Sortieren"); define('HIGHER', "Höher"); define('LOWER', "Niedriger"); define('MEMBER_SETTINGS_SAVED', "Einstellungen gespeichert."); -define('REMOTE_ADDR_TIMEOUT', "Ein Mitglied ist mit Ihrer IP-Nummer ".GET_REMOTE_ADDR()." bereits registriert! Bitte kontaktieren Sie uns, wenn dies ein Fehler sein sollte!"); +define('REMOTE_ADDR_TIMEOUT', "Ein Mitglied ist mit Ihrer IP-Nummer {!REMOTE_ADDR!} bereits registriert! Bitte kontaktieren Sie uns, wenn dies ein Fehler sein sollte!"); define('IP_TIMEOUT', "IP-Zeitsperre"); define('ADMIN_PAYOUT_NOT_INSTALLED', "payout-Erweiterung nicht installiert!"); define('ADMIN_ADD_MAX_VALUE', "Neuen Maximal-Wert hinzufügen"); diff --git a/inc/libs/admins_functions.php b/inc/libs/admins_functions.php index c4e0045a01..05e121443d 100644 --- a/inc/libs/admins_functions.php +++ b/inc/libs/admins_functions.php @@ -395,5 +395,19 @@ function ADMINS_LIST_ADMIN_ACCOUNTS() { LOAD_TEMPLATE("admin_list_admins"); } +// Filter for adding extra data to the query +function FILTER_ADD_EXTRA_SQL_DATA () { + // Init extra data + $ADD = ""; + + // Is the admins extension updated? (should be!) + if (GET_EXT_VERSION("admins") >= "0.3") $ADD .= ", default_acl AS def_acl"; + if (GET_EXT_VERSION("admins") >= "0.6.7") $ADD .= ", la_mode"; + if (GET_EXT_VERSION("admins") >= "0.7.0") $ADD .= ", login_failtures, UNIX_TIMESTAMP(last_failture) AS last_failture"; + + // Return it + return $ADD; +} + // ?> diff --git a/inc/libs/cache_functions.php b/inc/libs/cache_functions.php index 15adc46806..1c083863ec 100644 --- a/inc/libs/cache_functions.php +++ b/inc/libs/cache_functions.php @@ -397,22 +397,25 @@ class CacheSystem { } // Destroy the cache on extension changes -function FILTER_CACHE_DESTROY_ON_EXT_CHANGE () { +function FILTER_CACHE_DESTROY_ON_EXT_CHANGE ($data) { global $cacheInstance; - // Update cache + // Remove cache if (EXT_IS_ACTIVE("cache")) { if ($cacheInstance->loadCacheFile("config")) $cacheInstance->destroyCacheFile(); if ($cacheInstance->loadCacheFile("extensions")) $cacheInstance->destroyCacheFile(); if ($cacheInstance->loadCacheFile("mod_reg")) $cacheInstance->destroyCacheFile(); } // END - if + + // Return it + return $DATA; } // Destroy the cache on changing admin function FILTER_CACHE_DESTROY_ON_ADMIN_CHANGE () { global $cacheInstance; - // Update cache + // Remove cache if (EXT_IS_ACTIVE("cache")) { if ($cacheInstance->loadCacheFile("admins")) $cacheInstance->destroyCacheFile(); } // END - if @@ -434,5 +437,11 @@ function FILTER_CACHE_DESTROY_ALL () { } // END - if } +// Filter for purging entire admin menu cache +function FILTER_CACHE_PURGE_ADMIN_MENU () { + // Just call the function + CACHE_PURGE_ADMIN_MENU(); +} + // ?> diff --git a/inc/libs/rallye_functions.php b/inc/libs/rallye_functions.php index b3da615f01..255bca49bb 100644 --- a/inc/libs/rallye_functions.php +++ b/inc/libs/rallye_functions.php @@ -802,5 +802,12 @@ WHERE s.userid=%s AND s.level=1", array(bigintval($uid)), __FILE__, __LINE__); //* DEBUG: */ echo "*".$uid."/".$old."/".$cnt."*
"; return $cnt; } + +// Filter for extra-autpurge +function FILTER_RALLYE_EXTRA_AUTOPURGE () { + // Check expired rallyes (hard-coded 3 days limit for displaying expired rallyes!) + RALLYE_DELETE_EXPIRED_RALLYES(); +} + // ?> diff --git a/inc/libs/refback_functions.php b/inc/libs/refback_functions.php index c437e29dd2..85722cdad7 100644 --- a/inc/libs/refback_functions.php +++ b/inc/libs/refback_functions.php @@ -192,7 +192,7 @@ function UPDATE_REFBACK_TABLE($uid) { //* DEBUG: */ print __FUNCTION__."(".__LINE__."):uid={$uid},ref={$cacheArray['up_refid'][$cacheArray['back_level']]}
\n"; // Refid set? - if (($cacheArray['up_refid'][$cacheArray['back_level']] > 0) && ($cacheArray['up_refid'][$cacheArray['back_level']] != $uid) && (!empty($cacheArray['up_refid'][$cacheArray['back_level']]))) { + if (($cacheArray['up_refid'][$cacheArray['back_level']] > 0) && ($cacheArray['up_refid'][$cacheArray['back_level']] != $uid) && (isset($cacheArray['up_refid'][$cacheArray['back_level']]))) { // New userid? if ((isset($cacheArray['up_refid'][$cacheArray['back_level']-1])) && (isset($cacheArray['up_userid'][$cacheArray['up_refid'][$cacheArray['back_level']-1]]))) { // New userid! diff --git a/inc/libs/removeip_functions.php b/inc/libs/removeip_functions.php index e3b69e9e8b..bd09d69ee5 100644 --- a/inc/libs/removeip_functions.php +++ b/inc/libs/removeip_functions.php @@ -140,5 +140,20 @@ function REMOVEIP_ADD_INFOS () { return LOAD_TEMPLATE("removeip_level", true, $message); } +// Filter for adding anonymity notice to the output stream +function FILTER_ADD_ANONYMITY_NOTICE ($data) { + // Init content + $content = $data; + + // Extension removeip activated? + if ((EXT_IS_ACTIVE("removeip")) && (getConfig('removeip_'.strtolower($data['access_level']).'_show') == "Y")) { + // Add anoymity/privacy infos + $content['content'] .= REMOVEIP_ADD_INFOS()."
\n"; + } // END - if + + // Return it + return $content; +} + // ?> diff --git a/inc/load_cache.php b/inc/load_cache.php index fad1bdde22..3039a408d1 100644 --- a/inc/load_cache.php +++ b/inc/load_cache.php @@ -40,14 +40,8 @@ if (!defined('__SECURITY')) { // Load more cache includes $INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/loader/", "load_cache-"); -// Include all -foreach ($INC_POOL as $fqfn) { - // Include the file - require_once($fqfn); -} // END - foreach - -// Remove array -unset($INC_POOL); +// Run the filter +RUN_FILTER('load_includes'); // ?> diff --git a/inc/load_extensions.php b/inc/load_extensions.php index 8a8c883826..7ec8ecc44f 100644 --- a/inc/load_extensions.php +++ b/inc/load_extensions.php @@ -262,15 +262,8 @@ if ((SQL_NUMROWS($res_ext_crt) > 0) && ((($cacheMode == "init") && ($CSS != "1") SQL_FREERESULT($res_ext_crt); } // END - if -// Load include files if found -if (!empty($INC_POOL[0])) { - foreach ($INC_POOL as $inc) { - require_once($inc); - } // END - foreach - - // Remove array - unset($INC_POOL); -} // END - if +// Run the filter +RUN_FILTER('load_includes'); // Uninstall extensions that are no longer in our system if (!empty($DEL[0])) { @@ -281,7 +274,7 @@ if (!empty($DEL[0])) { array($del_ext), __FILE__, __LINE__); // Remove (maybe?) found tasks (main task and possible updates - SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE subject LIKE '[%s:]%%' AND (task_type='EXTENSION' OR task_type='EXTENSION_UPDATE')", + SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE subject='[%s:]' AND (task_type='EXTENSION' OR task_type='EXTENSION_UPDATE')", array($del_ext), __FILE__, __LINE__); } // END - foreach diff --git a/inc/loader/load_cache-admin.php b/inc/loader/load_cache-admin.php index d55aa09f1b..9dd80220d7 100644 --- a/inc/loader/load_cache-admin.php +++ b/inc/loader/load_cache-admin.php @@ -86,10 +86,7 @@ if (($cacheInstance->loadCacheFile("admins")) && ($cacheInstance->extensionVersi $cacheInstance->storeExtensionVersion("admins"); // Load every data from DB to cache file - $ADD = ", id, id"; - if (GET_EXT_VERSION("admins") >= "0.3") $ADD = ", default_acl AS def_acl"; - if (GET_EXT_VERSION("admins") >= "0.6.7") $ADD .= ", la_mode"; - if (GET_EXT_VERSION("admins") >= "0.7.0") $ADD .= ", login_failtures, UNIX_TIMESTAMP(last_failture) AS last_failture"; + $ADD = RUN_FILTER('sql_admin_extra_data'); // Query the database about this $result_admins = SQL_QUERY("SELECT id AS aid, login, password, email".$ADD." diff --git a/inc/modules/admin.php b/inc/modules/admin.php index 517219f898..cccd51af5a 100644 --- a/inc/modules/admin.php +++ b/inc/modules/admin.php @@ -57,10 +57,7 @@ if (!isBooleanConstantAndTrue('admin_registered')) { $hashedPass = md5($_POST['pass']); // Kill maybe existing session variables - set_session('admin_login' , ""); - set_session('admin_md5' , ""); - set_session('admin_last' , ""); - set_session('admin_to' , ""); + DESTROY_ADMIN_SESSION(false); // Do registration $ret = REGISTER_ADMIN($_POST['login'], $hashedPass); diff --git a/inc/modules/admin/admin-inc.php b/inc/modules/admin/admin-inc.php index 9ac190ce37..9aa13b1b54 100644 --- a/inc/modules/admin/admin-inc.php +++ b/inc/modules/admin/admin-inc.php @@ -61,15 +61,17 @@ function REGISTER_ADMIN ($user, $md5, $email=WEBMASTER) function CHECK_ADMIN_LOGIN ($admin_login, $password) { global $cacheArray, $_CONFIG, $cacheInstance; - // Init variables + // By default no admin is found $ret = "404"; - $data = array(); // Get admin id $aid = GET_ADMIN_ID($admin_login); + // Init array with admin id by default + $data = array('aid' => $aid); + // Is the cache valid? - if (!empty($cacheArray['admins']['password'][$aid])) { + if (isset($cacheArray['admins']['password'][$aid])) { // Get password from cache $data['password'] = $cacheArray['admins']['password'][$aid]; $ret = "pass"; @@ -82,15 +84,14 @@ function CHECK_ADMIN_LOGIN ($admin_login, $password) { $data['last_failture'] = $cacheArray['admins']['last_failture'][$aid]; } // END - if } elseif (!EXT_IS_ACTIVE("cache")) { - $ADD = ""; - if (GET_EXT_VERSION("admins") >= "0.7.0") { - // Load them here - $ADD = ", login_failtures, UNIX_TIMESTAMP(last_failture) AS last_failture"; - } // END - if + // Add extra data via filter now + $ADD = RUN_FILTER('sql_admin_extra_data'); // Get password from DB $result = SQL_QUERY_ESC("SELECT password".$ADD." FROM "._MYSQL_PREFIX."_admins WHERE id=%s LIMIT 1", - array($aid), __FILE__, __LINE__); + array($aid), __FILE__, __LINE__); + + // Entry found? if (SQL_NUMROWS($result) == 1) { // Login password found $ret = "pass"; diff --git a/inc/modules/admin/overview-inc.php b/inc/modules/admin/overview-inc.php index e8a2b36674..5574b354e4 100644 --- a/inc/modules/admin/overview-inc.php +++ b/inc/modules/admin/overview-inc.php @@ -55,60 +55,40 @@ function OUTPUT_STANDARD_OVERVIEW(&$result_tasks) { if ((substr($file, 0, 4) == "ext-") && (substr($file, -4) == ".php")) { //* DEBUG: */ echo $file."
\n"; // Possible newly installed extension found so we extract extension's name - $ext = strtolower(substr($file, 4, -4)); // Keep always extension names on lower case!!! + $ext_name = strtolower(substr($file, 4, -4)); // Keep always extension names on lower case!!! // Init variables - $ext_ver = ""; $result = false; // Check if extension is installed or not - if ((is_array($cacheArray['extensions']['ext_version'])) && (isset($cacheArray['extensions']['ext_version'][$ext]))) { - // Load version from cache - if (!empty($cacheArray['extensions']['ext_version'][$ext])) { - // Extension is installed so we can get it's version number - $ext_ver = $cacheArray['extensions']['ext_version'][$ext]; - } else { - // Extension is not installed so no version number was found - $ext_ver = ""; - } - } elseif (!EXT_IS_ACTIVE("cache")) { - // Load data from database - $result = SQL_QUERY_ESC("SELECT id, ext_version FROM "._MYSQL_PREFIX."_extensions WHERE ext_name='%s' LIMIT 1", - array($ext), __FILE__, __LINE__); - } + $ext_ver = GET_EXT_VERSION($ext_name); // Is the extension not yet installed? - if ((SQL_NUMROWS($result) == 0) && (empty($ext_ver))) { + if (empty($ext_ver)) { // Generate subject line - $ext_subj = sprintf("[%s:]", $ext); + $ext_subj = sprintf("[%s:]", $ext_name); // We maybe want to install an extension so let's test-drive it... - if (LOAD_EXTENSION($ext, $EXT_LOAD_MODE)) { + if (LOAD_EXTENSION($ext_name, $EXT_LOAD_MODE)) { // Create a task for newly installed extension - CREATE_NEW_EXTENSION_TASK(GET_CURRENT_ADMIN_ID(), $ext_subj, $ext); + CREATE_NEW_EXTENSION_TASK(GET_CURRENT_ADMIN_ID(), $ext_subj, $ext_name); } // END - if } else { - // Maybe we want to update? - if ((empty($cacheArray['extensions']['ext_version'][$ext])) && (SQL_NUMROWS($result) == 1)) { - list($dummy, $ext_ver) = SQL_FETCHROW($result); - SQL_FREERESULT($result); - } // END - if - // Test-drive extension in update mode - include(sprintf("%sinc/extensions/ext-%s.php", PATH, $ext)); - + include(sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name)); + // Update extension if extension is installed and outdated - //* DEBUG: */ print "ext={$ext},ver={$EXT_VERSION}/".GET_EXT_VERSION($ext)."
\n"; - if ($EXT_VERSION > GET_EXT_VERSION($ext)) { + //* DEBUG: */ print "ext={$ext_name},ver={$EXT_VERSION}/".GET_EXT_VERSION($ext_name)."
\n"; + if ($EXT_VERSION > $ext_ver) { // Update the extension - EXTENSION_UPDATE($file, $ext, $ext_ver); + EXTENSION_UPDATE($ext_name, $ext_ver); } // END - if - if (!empty($cacheArray['active_extensions'][$ext])) { + if (isset($cacheArray['active_extensions'][$ext_name])) { // Maybe we want to keept the current extension active? - if (($cacheArray['active_extensions'][$ext] == "Y") && (!EXT_IS_ACTIVE($ext))) { + if (($cacheArray['active_extensions'][$ext_name] == "Y") && (!EXT_IS_ACTIVE($ext_name))) { // Reactivate this extension! - ACTIVATE_EXTENSION($ext); + ACTIVATE_EXTENSION($ext_name); } // END - if } // END - if } @@ -205,7 +185,7 @@ function OUTPUT_SELECTED_TASKS($_POST, $result_tasks) { $ext_ver = substr($ext_ver, 0, strpos($ext_ver, ":")); // Load SQLs from file - $SQLs = EXTENSION_UPDATE("ext-".$ext_name.".php", $ext_name, $ext_ver, true); + $SQLs = EXTENSION_UPDATE($ext_name, $ext_ver, true); // Add notes to text $text .= $NOTES; @@ -226,7 +206,7 @@ function OUTPUT_SELECTED_TASKS($_POST, $result_tasks) { } // END - if } else { // Run SQL commands in dry mode but only return the notes - $SQLs = EXTENSION_UPDATE("ext-".$ext_name.".php", $ext_name, $ext_ver, true); + $SQLs = EXTENSION_UPDATE($ext_name, $ext_ver, true); $text .= $NOTES; } @@ -264,7 +244,7 @@ function OUTPUT_SELECTED_TASKS($_POST, $result_tasks) { // Close task but not already closes or deleted or update tasks if (($status != "CLOSED") && ($status != "DELETED") && ($type != "EXTENSION_UPDATE")) { - ADMIN_SOLVE_TASK($tid); + RUN_FILTER('solve_task', $tid); } // END - if } break; @@ -276,7 +256,7 @@ function OUTPUT_SELECTED_TASKS($_POST, $result_tasks) { // Close task if (($status != "CLOSED") && ($status != "DELETED")) { // Solve the task - ADMIN_SOLVE_TASK($tid); + RUN_FILTER('solve_task', $tid); } // END - if break; diff --git a/inc/modules/admin/what-list_newsletter.php b/inc/modules/admin/what-list_newsletter.php index ef2989fa91..1e7943f742 100644 --- a/inc/modules/admin/what-list_newsletter.php +++ b/inc/modules/admin/what-list_newsletter.php @@ -48,7 +48,7 @@ if ((!empty($_POST['uid'])) && (!empty($_POST['id']))) array(bigintval($_POST['uid'])), __FILE__, __LINE__); // Next the task system... - ADMIN_SOLVE_TASK($_POST['id']); + RUN_FILTER('solve_task', bigintval($_POST['id'])); // Send mail to user $msg = LOAD_EMAIL_TEMPLATE("member_newsletter_done", true, bigintval($_POST['uid'])); diff --git a/inc/modules/admin/what-list_payouts.php b/inc/modules/admin/what-list_payouts.php index de61dd27e9..0c11dd2e44 100644 --- a/inc/modules/admin/what-list_payouts.php +++ b/inc/modules/admin/what-list_payouts.php @@ -122,7 +122,7 @@ if (!empty($_GET['pid'])) { if ($ret[0] == $eok) { // Clear task if ($task > 0) { - ADMIN_SOLVE_TASK($task); + RUN_FILTER('solve_task', $task); } // Clear payout request @@ -161,7 +161,7 @@ if (!empty($_GET['pid'])) { if (isset($_POST['ok'])) { if ($task > 0) { // Clear task - ADMIN_SOLVE_TASK($task); + RUN_FILTER('solve_task', $task); } // Clear payout request diff --git a/inc/mysql-connect.php b/inc/mysql-connect.php index d8de0073a2..fc86b7eb4a 100644 --- a/inc/mysql-connect.php +++ b/inc/mysql-connect.php @@ -83,14 +83,24 @@ function __errorHandler ($errno, $errstr, $errfile, $errline) { // Set error handler set_error_handler('__errorHandler'); -// Call-back function for running shutdown functions -function __RUN_SHUTDOWN_FILTER () { +// Call-back function for running shutdown functions and close database connection +function __SHUTDOWN_HOOK () { + global $link; + // Call the filter chain 'shutdown' RUN_FILTER('shutdown', null, false); + + if (is_resource($link)) { + // Close link + SQL_CLOSE($link, __FILE__, __LINE__); + } else { + // No database link + ADD_FATAL(NO_DB_LINK); + } } // Register shutdown hook -register_shutdown_function('__RUN_SHUTDOWN_FILTER'); +register_shutdown_function('__SHUTDOWN_HOOK'); // Check if the user setups his MySQL stuff... if ((empty($MySQL['login'])) && (!defined('mxchange_installing')) && (!isset($_GET['installing'])) && (isBooleanConstantAndTrue('mxchange_installed'))) { diff --git a/inc/mysql-manager.php b/inc/mysql-manager.php index 6abad5048f..ec8d7ce688 100644 --- a/inc/mysql-manager.php +++ b/inc/mysql-manager.php @@ -267,7 +267,7 @@ function ADD_DESCR($ACC_LVL, $file, $return = false, $output = true) { // Get the title from menu $result = SQL_QUERY_ESC("SELECT title FROM "._MYSQL_PREFIX."_%s_menu WHERE %s='%s' ".$AND." LIMIT 1", - array($ACC_LVL, $type, $search), __FILE__, __LINE__); + array($ACC_LVL, $type, $search), __FILE__, __LINE__); // Menu found? if (SQL_NUMROWS($result) == 1) { @@ -287,24 +287,13 @@ function ADD_DESCR($ACC_LVL, $file, $return = false, $output = true) { //* DEBUG: */ die("
".print_r($_CONFIG, true)."
"); if (($type == "what") || (($type == "action") && ((!isset($GLOBALS['what'])) || ($GLOBALS['what'] == "overview")))) { //* DEBUG: */ echo __LINE__."+".$type."+
\n"; - $OUT .= "\n"; - - // Extension removeip activated? - if ((EXT_IS_ACTIVE("removeip")) && (getConfig('removeip_'.strtolower($ACC_LVL).'_show') == "Y")) { - // Add anoymity/privacy infos - $OUT .= REMOVEIP_ADD_INFOS(); - } // END - if - - // Add line-break tag - $OUT .= "
\n"; + // Add closing div and br-tag + $OUT .= "
\n"; $NAV_DEPTH = "0"; - // Handle failed logins here if not in guest - //* DEBUG: */ print __FUNCTION__."(".__LINE__."):type={$type},action={$GLOBALS['action']},what={$GLOBALS['what']},lvl={$ACC_LVL}
\n"; - if ((($type == "what") || ($type == "action") && ((!isset($GLOBALS['what'])) || ($GLOBALS['what'] == "overview") || ($GLOBALS['what'] == getConfig('index_home')))) && ($ACC_LVL != "guest") && ((GET_EXT_VERSION("sql_patches") >= "0.4.7") || (GET_EXT_VERSION("admins") >= "0.7.0"))) { - // Handle failture - $OUT .= HANDLE_LOGIN_FAILTURES($ACC_LVL); - } // END - if + // Run the filter chain + $ret = RUN_FILTER('post_youhere_line', array('access_level' => $ACC_LVL, 'type' => $type, 'content' => "")); + $OUT .= $ret['content']; } // END - if } } // END - if @@ -1427,7 +1416,7 @@ function SEND_ADMIN_EMAILS ($subj, $msg) { function GET_ADMIN_ID ($login) { global $cacheArray, $_CONFIG; $ret = "-1"; - if (!empty($cacheArray['admins']['aid'][$login])) { + if (isset($cacheArray['admins']['aid'][$login])) { // Check cache $ret = $cacheArray['admins']['aid'][$login]; @@ -1464,7 +1453,7 @@ function GET_ADMIN_HASH ($aid) { global $cacheArray, $_CONFIG; $ret = "-1"; - if (!empty($cacheArray['admins']['password'][$aid])) { + if (isset($cacheArray['admins']['password'][$aid])) { // Check cache $ret = $cacheArray['admins']['password'][$aid]; @@ -1491,7 +1480,7 @@ function GET_ADMIN_HASH ($aid) function GET_ADMIN_LOGIN ($aid) { global $cacheArray, $_CONFIG; $ret = "***"; - if (!empty($cacheArray['admins']['login'][$aid])) { + if (isset($cacheArray['admins']['login'][$aid])) { // Get cache $ret = $cacheArray['admins']['login'][$aid]; @@ -1519,7 +1508,7 @@ function GET_ADMIN_EMAIL ($aid) { global $cacheArray, $_CONFIG; $ret = "***"; - if (!empty($cacheArray['admins']['email'][$aid])) { + if (isset($cacheArray['admins']['email'][$aid])) { // Get cache $ret = $cacheArray['admins']['email'][$aid]; @@ -1549,7 +1538,7 @@ function GET_ADMIN_DEFAULT_ACL ($aid) { global $cacheArray, $_CONFIG; $ret = "***"; - if (!empty($cacheArray['admins']['def_acl'][$aid])) { + if (isset($cacheArray['admins']['def_acl'][$aid])) { // Use cache $ret = $cacheArray['admins']['def_acl'][$aid]; @@ -1805,56 +1794,6 @@ function GET_WHAT($modCheck) { return $wht; } -// Checks if the module has a menu -function MODULE_HAS_MENU ($mod, $forceDb = false) { - global $cacheArray, $_CONFIG; - - // All is false by default - $ret = false; - //* DEBUG: */ print __FUNCTION__."(".__LINE__."):mod={$mod},cache=".GET_EXT_VERSION("cache")."
\n"; - if (GET_EXT_VERSION("cache") >= "0.1.2") { - // Cache version is okay, so let's check the cache! - if (isset($cacheArray['modules']['has_menu'][$mod])) { - // Check module cache and count hit - $ret = ($cacheArray['modules']['has_menu'][$mod] == "Y"); - if (getConfig('cache_hits') > 0) { $_CONFIG['cache_hits']++; } else { $_CONFIG['cache_hits'] = 1; } - } elseif (isset($cacheArray['extensions']['ext_menu'][$mod])) { - // Check cache and count hit - $ret = ($cacheArray['extensions']['ext_menu'][$mod] == "Y"); - if (getConfig('cache_hits') > 0) { $_CONFIG['cache_hits']++; } else { $_CONFIG['cache_hits'] = 1; } - } elseif ((IS_ADMIN()) && ($mod == "admin")) { - // Admin module has always a menu! - $ret = true; - } - } elseif ((GET_EXT_VERSION("sql_patches") >= "0.3.6") && ((!EXT_IS_ACTIVE("cache")) || ($forceDb === true))) { - // Check database for entry - $result = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", - array($mod), __FILE__, __LINE__); - - // Entry found? - if (SQL_NUMROWS($result) == 1) { - // Load "has_menu" column - list($has_menu) = SQL_FETCHROW($result); - - // Fake cache... ;-) - $cacheArray['extensions']['ext_menu'][$mod] = $has_menu; - - // Does it have a menu? - $ret = ($has_menu == "Y"); - } // END - if - - // Free memory - SQL_FREERESULT($result); - } elseif (GET_EXT_VERSION("sql_patches") == "") { - // No sql_patches installed, so maybe in admin area? - $ret = ((IS_ADMIN()) && ($mod == "admin")); // Then there is a menu! - } - - // Return status - //* DEBUG: */ var_dump($ret); - return $ret; -} - // Subtract points from database and mediadata cache function SUB_POINTS ($subject, $uid, $points) { // Add points to used points diff --git a/inc/pool-update.php b/inc/pool-update.php index 628b18a310..f54f84bf4d 100644 --- a/inc/pool-update.php +++ b/inc/pool-update.php @@ -52,14 +52,8 @@ $cnt = 0; $msg = ""; // Load more cache includes $INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/pool/", "pool-"); -// Include all -foreach ($INC_POOL as $fqfn) { - // Include the file - require_once($fqfn); -} // END - foreach - -// Remove array -unset($INC_POOL); +// Run the filter +RUN_FILTER('load_includes'); // Remove message (IMPORTANT!) unset($msg); diff --git a/templates/de/html/ext/ext_network.tpl b/templates/de/html/ext/ext_network.tpl new file mode 100644 index 0000000000..57f4c590c0 --- /dev/null +++ b/templates/de/html/ext/ext_network.tpl @@ -0,0 +1,3 @@ +Diese Erweiterung bietet eine allgemeine Anbindungsmöglichkeit an diverese +Sponsorennetzwerken an, um z.B. deren Mails zu versenden. Später sollen +noch weitere Dinge, wie Textlinks oder Popups folgen. -- 2.39.5