Final fixes for password reset behavior on sql_patches removal :)
[mailer.git] / inc / extensions.php
index 21113440614d7ec8ac88cd55cf838b82c0e7d78d..6232456238c12dd25fda975e9615064d0daa98b3 100644 (file)
@@ -40,7 +40,7 @@ if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))
 //
 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)
-{
+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,28 +257,43 @@ 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 ((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)
-{
+// 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 ((!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 />";
 
@@ -303,11 +325,11 @@ function EXT_IS_ACTIVE ($ext_name, $ignore_admin=false, $ignore_cache=false)
        }
 
        // 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))
@@ -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))
@@ -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>