X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fextensions.php;h=84506151e18d3cfb4ccb897df18e80c8048d8cc1;hb=e6e3183f794b385f5acc38b371c220cc35cdac38;hp=c7d794ada47167ae081470ed02337af3dd84d39d;hpb=41e2891fb998d13b22b8d7984358f258cc85267d;p=mailer.git diff --git a/inc/extensions.php b/inc/extensions.php index c7d794ada4..84506151e1 100644 --- a/inc/extensions.php +++ b/inc/extensions.php @@ -32,11 +32,11 @@ ************************************************************************/ // Some security stuff... -if (ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) -{ +if (!defined('__SECURITY')) { $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php"; require($INC); } + // function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false) { @@ -55,51 +55,48 @@ function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false) $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name); // Does this extension exists? - if (FILE_READABLE($file)) - { + if (FILE_READABLE($file)) { // Extension was found so we can load it in registration mode require($file); // And run possible updates $EXT_LOAD_MODE = "update"; $EXT_UPDATE_DEPENDS = ""; - foreach ($EXT_VER_HISTORY as $EXT_VER) - { + foreach ($EXT_VER_HISTORY as $EXT_VER) { + // Load extension in update mode require($file); - if (((GET_EXT_VERSION("sql_patches") != '') && ($_CONFIG['verbose_sql'] == "Y")) || (!EXT_IS_ACTIVE("sql_patches"))) - { - if (!empty($UPDATE_NOTES)) - { + + // Do we have an update? + if (((GET_EXT_VERSION("sql_patches") != "") && ($_CONFIG['verbose_sql'] == "Y")) || (!EXT_IS_ACTIVE("sql_patches"))) { + if (!empty($UPDATE_NOTES)) { // Update notes found $NOTES .= "v".$EXT_VER.":
".$UPDATE_NOTES."

\n"; $UPDATE_NOTES = ""; - } - elseif (($EXT_VER == "0.0") || ($EXT_VER == "0.0.0")) - { + } elseif (($EXT_VER == "0.0") || ($EXT_VER == "0.0.0")) { // Initial release $NOTES .= "v".$EXT_VER.":
".INITIAL_RELEASE."

\n"; - } - else - { + } else { + // No update notes found! $NOTES .= "v".$EXT_VER.":
".NO_UPDATE_NOTES."

\n"; } - } - } + } // END - if + } // END - foreach // Does this extension depends on an outstanding update of another update? - if (!empty($EXT_UPDATE_DEPENDS)) - { + if (!empty($EXT_UPDATE_DEPENDS)) { // Backup SQL commands and clear current - $SQLs2 = $SQLs; $SQLs = array(); $test = false; + $SQLs2 = $SQLs; + $SQLs = array(); + $test = false; // Backup language as well - $LANG_BCK = $EXT_LANG_PREFIX; $EXT_ALWAYS_ACTIVE = "N"; + $LANG_BCK = $EXT_LANG_PREFIX; + $EXT_ALWAYS_ACTIVE = "N"; // Load required extension also in update mode $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $EXT_UPDATE_DEPENDS); // Check for required file - if (FILE_READABLE($file)) - { + if (FILE_READABLE($file)) { // File exists so let's load it $VER_BACKUP = $EXT_VERSION; require($file); @@ -107,35 +104,35 @@ function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false) // If versions mismatch update extension first $ext_ver = GET_EXT_VERSION($EXT_UPDATE_DEPENDS); - if (empty($ext_ver)) - { + + // Extension version set? + 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__); - if (SQL_NUMROWS($result) == 1) - { + + // Entry found? + if (SQL_NUMROWS($result) == 1) { // Task found so load task's ID and register extension... list($task) = SQL_FETCHROW($result); - SQL_FREERESULT($result); + + // Try to register the extension $test = EXTENSION_REGISTER($EXT_UPDATE_DEPENDS, $task, $dry_run); - } - } - elseif ($ext_ver != $EXT_VERSION) - { + } // 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); // All okay! $test = true; - } - else - { + } else { // Nothing to register / update before... $test = true; } - } - else - { + } else { // Required file for update does not exists! $test = true; // But this is fine for the first time... @@ -144,9 +141,7 @@ function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false) // Finally restore previous SQLs $SQLs = $SQLs2; unset($SQLs2); $EXT_LANG_PREFIX = $LANG_BCK; - } - else - { + } else { // Does not depend on an other extension $test = true; } @@ -200,6 +195,9 @@ function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false) // Update task management ADMIN_SOLVE_TASK($id); + // @TODO This causes the whole (!) menu cache being purged + CACHE_PURGE_ADMIN_MENU(); + // In normal mode return a true on success $ret = true; @@ -260,7 +258,7 @@ function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE) { if (FILE_READABLE($file)) { // Load the include require($file); - } + } // END - if //* DEBUG: */ echo __FUNCTION__.":SQLs::count=".count($SQLs)."
\n"; if ((is_array($SQLs) && (sizeof($SQLs) > 0))) { @@ -302,6 +300,9 @@ function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE) { if ($cacheInstance->cache_file("extensions", true)) $cacheInstance->cache_destroy(); if ($cacheInstance->cache_file("mod_reg", true)) $cacheInstance->cache_destroy(); if ($cacheInstance->cache_file("config", true)) $cacheInstance->cache_destroy(); + + // @TODO This causes the whole (!) menu cache being purged + CACHE_PURGE_ADMIN_MENU(); } // END - if // Is this the sql_patches? @@ -314,22 +315,17 @@ function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE) { } // END - if } // Check if given extension is active -function EXT_IS_ACTIVE ($ext_name, $ignore_admin = false, $ignore_cache = false) { +function EXT_IS_ACTIVE ($ext_name) { global $cacheArray, $_CONFIG; // Extensions are all inactive during installation - if ((!isBooleanConstantAndTrue('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing')) || (empty($ext_name))) return false; - - // Extension's file name will also be checked - $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name); - if (!FILE_READABLE($file)) return false; - //* DEBUG: */ echo "*".$ext_name."(".count($cacheArray).")
"; + if ((!defined('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing')) || (empty($ext_name))) return false; // Not active is the default $active = "N"; // Check cache - if ((!empty($cacheArray['extensions']['ext_active'][$ext_name])) && (!$ignore_cache)) { + if (!empty($cacheArray['extensions']['ext_active'][$ext_name])) { // Load from cache //* DEBUG: */ echo "CACHE! ext_name={$ext_name}
\n"; $active = $cacheArray['extensions']['ext_active'][$ext_name]; @@ -364,13 +360,7 @@ function EXT_IS_ACTIVE ($ext_name, $ignore_admin = false, $ignore_cache = false) //DEBUG_LOG(__FUNCTION__.": ext_name={$ext_name},active={$active}"); // Is this extension activated? (For admins we always have active extensions...) - return ( - ( - $active == "Y" - ) && ( - FILE_READABLE($inc) - ) - ); + return ($active == "Y"); } // Get version from extensions function GET_EXT_VERSION ($ext_name) { @@ -378,7 +368,7 @@ function GET_EXT_VERSION ($ext_name) { $ret = false; // Extensions are all inactive during installation - if ((!isBooleanConstantAndTrue('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing'))) return ""; + if ((!defined('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing'))) return ""; //* DEBUG: */ echo __FUNCTION__.": ext_name={$ext_name}
\n"; // Is the cache written? @@ -413,9 +403,11 @@ function EXTENSION_UPDATE($file, $ext, $EXT_VER, $dry_run=false) // Load extension in update mode $EXT_LOAD_MODE = "update"; $EXT_UPDATE_DEPENDS = ""; $NOTES = ""; - include(PATH."inc/extensions/".$file); - if (!empty($EXT_UPDATE_DEPENDS)) - { + + // Load extension file + include(sprintf("%sinc/extensions/%s", PATH, $file)); + + 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); } @@ -518,7 +510,7 @@ function EXTENSION_VERBOSE_TABLE($SQLs, $title = ADMIN_SQLS_EXECUTED_ON_REMOVAL, $S = false; $SW = 2; $i = 1; $OUT = ""; - if ((is_array($SQLs)) && (GET_EXT_VERSION("sql_patches")) && ($_CONFIG['verbose_sql'] == "Y")) { + if ((is_array($SQLs)) && (GET_EXT_VERSION("sql_patches") >= "0.0.7") && ($_CONFIG['verbose_sql'] == "Y")) { $OUT = "
@@ -542,7 +534,7 @@ function EXTENSION_VERBOSE_TABLE($SQLs, $title = ADMIN_SQLS_EXECUTED_ON_REMOVAL, } } - if ((!$S) && (GET_EXT_VERSION("sql_patches")) && ($_CONFIG['verbose_sql'] == "Y")) { + if ((!$S) && (GET_EXT_VERSION("sql_patches") >= "0.0.7") && ($_CONFIG['verbose_sql'] == "Y")) { // No addional SQL commands to run $OUT .= "
@@ -600,5 +592,29 @@ function GET_EXT_ID($name) { // Return value return $ret; } +// Activate given extension +function ACTIVATE_EXTENSION($ext_name) { + // Activate the extension + $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_extensions SET ext_active='Y' WHERE ext_name='%s' LIMIT 1", + array($ext_name), __FILE__, __LINE__); + + // Extension has been activated? + if (SQL_AFFECTEDROWS() == 1) { + // Then run all queries + EXTENSION_RUN_SQLS(GET_EXT_ID($ext_name), "activate"); + } // END - if +} +// Checks wether the extension is older than given +function EXT_VERSION_IS_OLDER ($ext_name, $ext_ver) { + // Get current extension version + $currVersion = GET_EXT_VERSION($ext_name); + + // Remove all dots from both versions + $currVersion = str_replace(".", "", $currVersion); + $ext_ver = str_replace(".", "", $ext_ver); + + // Now compare both and return the result + return ($currVersion < $ext_ver); +} // ?>