Final fixes for password reset behavior on sql_patches removal :)
[mailer.git] / inc / extensions.php
index f4a8f7fbd579e84002d2c9d73cd50077ad33ec4c..6232456238c12dd25fda975e9615064d0daa98b3 100644 (file)
@@ -38,9 +38,9 @@ if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))
        require($INC);
 }
 //
-function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
+function EXTENSION_REGISTER ($ext_name, $id, $dry_run=false)
 {
-       global $NOTES, $_CONFIG, $INC_POOL;
+       global $NOTES, $_CONFIG, $INC_POOL, $cacheInstance;
        // We want to register an extension and registration status is by default "failed" (= false)
        $EXT_LOAD_MODE = "register"; $ret = false; $SQLs = array();
        $INC_POOL = array();
@@ -52,7 +52,7 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
        if (EXT_IS_ACTIVE($ext_name)) return false;
 
        // Generate file name
-       $file = sprintf(PATH."inc/extensions/ext-%s.php", $ext_name);
+       $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name);
 
        // Does this extension exists?
        if (file_exists($file) && is_readable($file))
@@ -65,7 +65,7 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
                foreach ($EXT_VER_HISTORY as $EXT_VER)
                {
                        require($file);
-                       if (((GET_EXT_VERSION("sql_patches") != "") && ($_CONFIG['verbose_sql'] == 'Y')) || (!EXT_IS_ACTIVE("sql_patches")))
+                       if (((GET_EXT_VERSION("sql_patches") != '') && ($_CONFIG['verbose_sql'] == "Y")) || (!EXT_IS_ACTIVE("sql_patches")))
                        {
                                if (!empty($UPDATE_NOTES))
                                {
@@ -92,10 +92,10 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
                        $SQLs2 = $SQLs;  $SQLs = array(); $test = false;
 
                        // Backup language as well
-                       $LANG_BCK = $EXT_LANG_PREFIX;
+                       $LANG_BCK = $EXT_LANG_PREFIX; $EXT_ALWAYS_ACTIVE = "N";
 
                        // Load required extension also in update mode
-                       $file = sprintf(PATH."inc/extensions/ext-%s.php", $EXT_UPDATE_DEPENDS);
+                       $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $EXT_UPDATE_DEPENDS);
 
                        // Check for required file
                        if (file_exists($file) && is_readable($file))
@@ -124,6 +124,8 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
                                {
                                        // Ok, update this extension now
                                        EXTENSION_UPDATE(basename($file), $EXT_UPDATE_DEPENDS, $ext_ver, $dry_run);
+
+                                       // All okay!
                                        $test = true;
                                }
                                 else
@@ -149,40 +151,45 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
                        $test = true;
                }
 
+               // Switch back to register mode
+               $EXT_LOAD_MODE = "register";
+
                // Does everthing before wents ok?
-               if ($test)
-               {
+               if ($test) {
                        // "Dry-run-mode" activated?
-                       if (!$dry_run)
-                       {
-                               // Are there any SQL commands to run?
-                               if (count($SQLs) > 0)
-                               {
-                                       foreach ($SQLs as $sql)
-                                       {
-                                               $sql = trim($sql);
+                       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)) {
                                                // Run SQL command
-                                               if (!empty($sql))
-                                               {
-                                                       // Run SQLs without compiling them...
-                                                       $result = SQL_QUERY($sql, __FILE__, __LINE__, false);
-                                               }
-                                       }
-                               }
+                                               $result = SQL_QUERY($sql, __FILE__, __LINE__, false);
+                                       } // END - if
+                               } // END - foreach
+
+                               // Remove cache file(s) if extension is active
+                               if ((EXT_IS_ACTIVE("cache")) || (GET_EXT_VERSION("cache") != "")) {
+                                       //* DEBUG: */ echo __LINE__.": DESTROY!<br />\n";
+                                       // Remove cache files
+                                       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();
+                               } // END - if
 
                                // Check for added include files
-                               if (count($INC_POOL > 0))
-                               {
+                               if (count($INC_POOL > 0)) {
                                        // Loads every include file
-                                       foreach ($INC_POOL as $inc)
-                                       {
+                                       foreach ($INC_POOL as $inc) {
                                                require_once($inc);
-                                       }
+                                       } // END - foreach
                                }
 
                                // Register extension
-                               $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_extensions (ext_name, ext_lang_file, ext_active, ext_version) VALUES ('%s', '%s', 'N', '%s')",
-                                array($ext_name, $EXT_LANG_PREFIX, $EXT_VERSION), __FILE__, __LINE__);
+                               $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_extensions (ext_name, ext_lang_file, ext_active, ext_version) VALUES ('%s', '%s', '%s', '%s')",
+                                array($ext_name, $EXT_LANG_PREFIX, $EXT_ALWAYS_ACTIVE, $EXT_VERSION), __FILE__, __LINE__);
 
                                // Update task management
                                $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_task_system SET status='SOLVED' WHERE id=%d LIMIT 1",
@@ -190,15 +197,12 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
 
                                // In normal mode return a true on success
                                $ret = true; unset($SQLs);
-                       }
-                        else
-                       {
+                       } else {
                                // Rewrite SQL command to keep { and } inside
-                               foreach ($SQLs as $key=>$sql)
-                               {
+                               foreach ($SQLs as $key => $sql) {
                                        $sql = str_replace('{', "&#123;", str_replace('}', "&#125;", $sql));
                                        $SQLs[$key] = $sql;
-                               }
+                               } // END - foreach
 
                                // In  "dry-run" mode return array with all SQL commands
                                $ret = $SQLs;
@@ -206,41 +210,44 @@ function EXTENSION_REGISTER($ext_name, $id, $dry_run=false)
                                // Remove all SQL commands
                                unset($SQLs);
                        }
-               }
-                else
-               {
+               } else {
                        // No, an error occurs while registering extension :-(
                        $ret = false;
                }
-       }
-        elseif (($id > 0) && (!empty($ext_name)))
-       {
+       } elseif (($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=%d AND status='NEW' LIMIT 1",
                 array(bigintval($id)), __FILE__, __LINE__);
        }
+
+       // Is this the sql_patches?
+       //* DEBUG: */ echo __LINE__.":{$ext_name}/{$EXT_LOAD_MODE}<br />\n";
+       if (($ext_name == "sql_patches") && (($EXT_LOAD_MODE == "register") || ($EXT_LOAD_MODE == "remove")) && (!$dry_run) && ($test)) {
+               // Then redirect to logout
+               //* DEBUG: */ echo __LINE__.": LOAD!<br />\n";
+               LOAD_URL("modules.php?module=admin&logout=1&".$EXT_LOAD_MODE."=sql_patches");
+       } // END - if
+
        // Return status code
        return $ret;
 }
 //
-function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE)
-{
-       global $CACHE;
+function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE) {
+       global $cacheInstance;
+       $SQLs = array();
+
        // This shall never do a non-admin user!
        if (!IS_ADMIN()) return false;
 
        // Get extension's name
-       $result = SQL_QUERY_ESC("SELECT ext_name FROM "._MYSQL_PREFIX."_extensions WHERE id=%d LIMIT 1",
-        array(bigintval($id)), __FILE__, __LINE__);
-       list($ext_name) = SQL_FETCHROW($result);
-       SQL_FREERESULT($result);
+       $ext_name = GET_EXT_NAME($id);
        if (empty($ext_name)) return false;
 
        // Load extension in detected mode
-       $file = sprintf(PATH."inc/extensions/ext-%s.php", $ext_name); $SQLs = array();
+       $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name);
        if (file_exists($file) && is_readable($file)) require($file);
-       if ((is_array($SQLs) && (sizeof($SQLs) > 0)))
-       {
+
+       if ((is_array($SQLs) && (sizeof($SQLs) > 0))) {
                // Run SQL commands...
                foreach ($SQLs as $sql) {
                        // Trim spaces away which we don't need
@@ -250,37 +257,52 @@ function EXTENSION_RUN_SQLS($id, $EXT_LOAD_MODE)
                        if (!empty($sql)) {
                                // Run SQL command
                                $result = SQL_QUERY($sql, __FILE__, __LINE__, false);
-                       }
-               }
+                       } // END - if
+               } // END - foreach
+
+               // Removal mode?
+               if ($EXT_LOAD_MODE == "remove") {
+                       // Delete this extension (remember to remove it from your server *before* you click on welcome!
+                       $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_extensions WHERE id=%d LIMIT 1",
+                        array($id), __FILE__, __LINE__);
+               } // END - if
 
                // Remove cache file(s) if extension is active
-               if (EXT_IS_ACTIVE("cache")) {
-                       // Remove cache filer
-                       if ($CACHE->cache_file("extensions", true)) $CACHE->cache_destroy();
-                       if ($CACHE->cache_file("mod_reg", true))    $CACHE->cache_destroy();
-                       if ($CACHE->cache_file("config", true))     $CACHE->cache_destroy();
-               }
-       }
+               if ((EXT_IS_ACTIVE("cache")) || (GET_EXT_VERSION("cache") != "")) {
+                       //* DEBUG: */ echo __LINE__.": DESTROY!<br />\n";
+                       // Remove cache files
+                       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();
+               } // END - if
+
+               // Is this the sql_patches?
+               //* DEBUG: */ echo __LINE__.": {$id}/{$ext_name}/{$EXT_LOAD_MODE}<br />\n";
+               if (($ext_name == "sql_patches") && (($EXT_LOAD_MODE == "register") || ($EXT_LOAD_MODE == "remove"))) {
+                       // Then redirect to logout
+                       //* DEBUG: */ echo __LINE__.": LOAD!<br />\n";
+                       LOAD_URL("modules.php?module=admin&logout=1&".$EXT_LOAD_MODE."=sql_patches");
+               } // END - if
+       } // END - if
 }
-//
-function EXT_IS_ACTIVE ($ext_name, $ignore_admin=false, $ignore_cache=false)
-{
-       global $EXTENSIONS, $_CONFIG;
+// Check if given extension is active
+function EXT_IS_ACTIVE ($ext_name, $ignore_admin = false, $ignore_cache = false) {
+       global $cacheArray, $_CONFIG;
 
        // Extensions are all inactive during installation
-       if ((!mxchange_installed) || (mxchange_installing) || (empty($ext_name))) return false;
+       if ((!isBooleanConstantAndTrue('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing')) || (empty($ext_name))) return false;
 
        // Extension's file name will also be checked
-       $file = PATH."inc/extensions/ext-".$ext_name.".php";
+       $file = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name);
        if ((!file_exists($file)) && (!is_readable($file))) return false;
        //* DEBUG: */ echo "*".$ext_name."*<br />";
 
        // Failed is the default
        $ret = false;
-       if ((!empty($EXTENSIONS['ext_active'][$ext_name])) && (!$ignore_cache))
+       if ((!empty($cacheArray['extensions']['ext_active'][$ext_name])) && (!$ignore_cache))
        {
                // Load from cache
-               $active = $EXTENSIONS['ext_active'][$ext_name];
+               $active = $cacheArray['extensions']['ext_active'][$ext_name];
 
                // Count cache hits
                if (isset($_CONFIG['cache_hits'])) $_CONFIG['cache_hits']++;
@@ -299,15 +321,15 @@ function EXT_IS_ACTIVE ($ext_name, $ignore_admin=false, $ignore_cache=false)
                SQL_FREERESULT($result);
 
                // Write cache array
-               $EXTENSIONS['ext_active'][$ext_name] = $active;
+               $cacheArray['extensions']['ext_active'][$ext_name] = $active;
        }
 
        // Is this extension activated? (For admins we always have active extensions...)
-       $inc = sprintf(PATH."inc/extensions/ext-%s.php", $ext_name);
+       $inc = sprintf("%sinc/extensions/ext-%s.php", PATH, $ext_name);
        // Shorter way
        return (
                (
-                       ($active == 'Y') || (
+                       ($active == "Y") || (
                                (IS_ADMIN()) &&
                                (!$ignore_admin) &&
                                (!empty($active))
@@ -321,20 +343,20 @@ function EXT_IS_ACTIVE ($ext_name, $ignore_admin=false, $ignore_cache=false)
 }
 // Get version from extensions
 function GET_EXT_VERSION ($ext_name) {
-       global $EXTENSIONS, $_CONFIG, $CACHE;
+       global $cacheArray, $_CONFIG, $cacheInstance;
        $ret = false;
 
        // Extensions are all inactive during installation
-       if ((!mxchange_installed) || (mxchange_installing)) return "";
+       if ((!isBooleanConstantAndTrue('mxchange_installed')) || (isBooleanConstantAndTrue('mxchange_installing'))) return "";
 
        // Is the cache written?
-       if (!empty($EXTENSIONS['ext_version'][$ext_name])) {
+       if (!empty($cacheArray['extensions']['ext_version'][$ext_name])) {
                // Load data from cache
-               $ret = $EXTENSIONS['ext_version'][$ext_name];
+               $ret = $cacheArray['extensions']['ext_version'][$ext_name];
 
                // Count cache hits
                if (isset($_CONFIG['cache_hits'])) $_CONFIG['cache_hits']++; else $_CONFIG['cache_hits'] = 1;
-       } elseif (!is_object($CACHE)) {
+       } 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__);
@@ -342,7 +364,7 @@ function GET_EXT_VERSION ($ext_name) {
                SQL_FREERESULT($result);
 
                // Set cache
-               $EXTENSIONS['ext_version'][$ext_name] = $ret;
+               $cacheArray['extensions']['ext_version'][$ext_name] = $ret;
        }
        return $ret;
 }
@@ -350,7 +372,7 @@ function GET_EXT_VERSION ($ext_name) {
 function EXTENSION_UPDATE($file, $ext, $EXT_VER, $dry_run=false)
 {
        // This shall never do a non-admin user!
-       global $CACHE, $_CONFIG, $NOTES; $SQLs = array();
+       global $cacheInstance, $_CONFIG, $NOTES; $SQLs = array();
        if ((!IS_ADMIN()) || (empty($ext))) return false;
 
        // Load extension in update mode
@@ -382,7 +404,7 @@ function EXTENSION_UPDATE($file, $ext, $EXT_VER, $dry_run=false)
                        include(PATH."inc/extensions/".$file);
 
                        // Add notes
-                       if ($_CONFIG['verbose_sql'] == 'Y')
+                       if ($_CONFIG['verbose_sql'] == "Y")
                        {
                                $EXT_VER = $EXT_VER_HISTORY[$idx];
                                if (!empty($UPDATE_NOTES))
@@ -433,7 +455,7 @@ function EXTENSION_UPDATE($file, $ext, $EXT_VER, $dry_run=false)
                        {
                                // 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(GET_ADMIN_ID(SQL_ESCAPE($_SESSION['admin_login'])), $ext_subj, addslashes($NOTES)), __FILE__, __LINE__);
+                                array(GET_ADMIN_ID(SQL_ESCAPE(get_session('admin_login'))), $ext_subj, addslashes($NOTES)), __FILE__, __LINE__);
                        }
 
                        // Free memory
@@ -446,9 +468,9 @@ function EXTENSION_UPDATE($file, $ext, $EXT_VER, $dry_run=false)
                        // Update cache
                        if (EXT_IS_ACTIVE("cache"))
                        {
-                               if ($CACHE->cache_file("extensions", true) == true) $CACHE->cache_destroy();
-                               if ($CACHE->cache_file("config", true) == true)     $CACHE->cache_destroy();
-                               if ($CACHE->cache_file("mod_reg", true) == true)    $CACHE->cache_destroy();
+                               if ($cacheInstance->cache_file("extensions", true) == true) $cacheInstance->cache_destroy();
+                               if ($cacheInstance->cache_file("config", true) == true)     $cacheInstance->cache_destroy();
+                               if ($cacheInstance->cache_file("mod_reg", true) == true)    $cacheInstance->cache_destroy();
                        }
 
                        // Remove array
@@ -468,7 +490,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")) && ($_CONFIG['verbose_sql'] == "Y"))
        {
                $OUT  = "<DIV align=\"center\">
 <TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"".$WIDTH."\" align=\"center\"".$dashed.">
@@ -495,7 +517,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")) && ($_CONFIG['verbose_sql'] == "Y"))
        {
                // No addional SQL commands to run
                $OUT .= "<TR>
@@ -516,11 +538,11 @@ function EXTENSION_VERBOSE_TABLE($SQLs, $title=ADMIN_SQLS_EXECUTED_ON_REMOVAL, $
 function GET_EXT_NAME($id)
 {
        $ret = "";
-       global $EXTENSIONS, $_CONFIG;
-       if (!empty($EXTENSIONS['ext_id'][$id]))
+       global $cacheArray, $_CONFIG;
+       if (!empty($cacheArray['extensions']['ext_id'][$id]))
        {
                // Load from cache
-               $ret = $EXTENSIONS['ext_id'][$id];
+               $ret = $cacheArray['extensions']['ext_id'][$id];
 
                // Count cache hits
                $_CONFIG['cache_hits']++;
@@ -539,11 +561,11 @@ function GET_EXT_NAME($id)
 function GET_EXT_ID($name)
 {
        $ret = "0";
-       global $EXTENSIONS, $_CONFIG;
-       if ((isset($EXTENSIONS['ext_id'])) && (is_array($EXTENSIONS['ext_id'])))
+       global $cacheArray, $_CONFIG;
+       if ((isset($cacheArray['extensions']['ext_id'])) && (is_array($cacheArray['extensions']['ext_id'])))
        {
                // Load from cache
-               $ret = array_search($name, $EXTENSIONS['ext_id']);
+               $ret = array_search($name, $cacheArray['extensions']['ext_id']);
 
                // Count cache hits
                $_CONFIG['cache_hits']++;