Rewrites of debug lines, possible fix for extension installation bug
[mailer.git] / inc / extensions.php
index 609af2b..2ef4bb8 100644 (file)
@@ -44,12 +44,12 @@ 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) {
-       // Init array
-       INIT_INC_POOL();
-
        // Set current extension name
        EXT_SET_CURR_NAME($ext_name);
 
+       // Init array
+       INIT_INC_POOL();
+
        // Init EXT_UPDATE_DEPENDS
        EXT_INIT_UPDATE_DEPENDS();
 
@@ -133,15 +133,25 @@ function LOAD_EXTENSION ($ext_name, $EXT_LOAD_MODE = "", $EXT_VER = "", $dry_run
 
 // Registeres an extension and possible update depencies
 function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = true) {
-       // This shall never do a non-admin user!
-       if (!IS_ADMIN()) return false;
-
-       // Is this extension already installed?
-       if (EXT_IS_ACTIVE($ext_name)) return false;
-
        // Set current extension name
        EXT_SET_CURR_NAME($ext_name);
 
+       //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME()." - ENTERED!<br />\n";
+       // This shall never do a non-admin user or if the extension is active (already installed)
+       if ((!IS_ADMIN()) || (EXT_IS_ACTIVE($ext_name))) {
+               return false;
+       } // END - if
+
+       // When this extension is already in install/update phase, all is fine
+       if (EXT_IS_REGISTER_RUNNING($ext_name)) {
+               // Then abort here which is fine
+               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME()." - ALREADY!<br />\n";
+               return true;
+       } // END - if
+
+       // This registration is running
+       EXT_ADD_RUNNING_REGISTRATION($ext_name);
+
        // Init EXT_UPDATE_DEPENDS
        EXT_INIT_UPDATE_DEPENDS();
 
@@ -173,13 +183,16 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
        EXT_SET_REPORTS_FAILURE(false);
 
        // Does this extension exists?
-       //* DEBUG: */ print __LINE__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME()."");
        if (LOAD_EXTENSION(EXT_GET_CURR_NAME(), "register", "", $dry_run)) {
+               // Set current extension name again
+               EXT_SET_CURR_NAME($ext_name);
+
                // And run possible updates
-               //* DEBUG: */ print __LINE__.":".EXT_GET_CURR_NAME()."<br />\n";
+               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "".EXT_GET_CURR_NAME());
                $history = EXT_GET_VER_HISTORY();
                foreach ($history as $ver) {
-                       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "ext_name={EXT_GET_CURR_NAME()}, ext_ver={$ver}");
+                       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "ext_name=".EXT_GET_CURR_NAME().", ext_ver={$ver}");
                        // Load extension in update mode
                        LOAD_EXTENSION(EXT_GET_CURR_NAME(), "update", $ver, $dry_run);
 
@@ -197,6 +210,9 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
 
                        // Check for required file
                        if (LOAD_EXTENSION($ext_update, "register", "", $dry_run)) {
+                               // Set current extension name again
+                               EXT_SET_CURR_NAME($ext_name);
+
                                // If versions mismatch update extension first
                                $ext_ver = GET_EXT_VERSION($ext_update);
 
@@ -208,9 +224,9 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
                                        // Entry found?
                                        if ($task > 0) {
                                                // Try to register the extension
-                                               //* DEBUG: */ print __LINE__.sprintf(":ext_update=%s,task=%s<br />\n", $ext_update, $task);
+                                               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME().":ext_update=".$ext_update.",taskId=".$task."<br />\n";
                                                $test = REGISTER_EXTENSION($ext_update, $task, $dry_run, false);
-                                               //* DEBUG: */ var_dump($test);
+                                               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME().":"; var_dump($test);
                                        } // END - if
                                } elseif ($ext_ver != EXT_GET_VERSION()) {
                                        // Ok, update this extension now
@@ -242,16 +258,15 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
                $EXT_LOAD_MODE = "register";
 
                // Remains true if extension registration reports no failures
-               //* DEBUG: */ print __LINE__.":".EXT_GET_CURR_NAME();
-               //* DEBUG: */ var_dump($test);
+               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME().":"; var_dump($test);
                $test = (($test === true) && (EXT_GET_REPORTS_FAILURE() === false));
-               //* DEBUG: */ var_dump($test);
+               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME().":"; var_dump($test);
 
                // Does everthing before wents ok?
                if ($test === true) {
                        // "Dry-run-mode" activated?
                        if ((!$dry_run) && (!EXT_IS_ON_REMOVAL_LIST())) {
-                               //* DEBUG: */ print __LINE__.": ext_name=".EXT_GET_CURR_NAME()."<br />\n";
+                               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, " ext_name=".EXT_GET_CURR_NAME());
                                // Init SQLs and transfer ext->generic
                                INIT_SQLS();
                                SET_SQLS(GET_EXT_SQLS());
@@ -293,17 +308,18 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
                        }
                } else {
                        // No, an error occurs while registering extension :-(
-                       //* DEBUG: */ print __LINE__.":".EXT_GET_CURR_NAME()."<br />\n";
+                       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "".EXT_GET_CURR_NAME());
                        $ret = false;
                }
        } elseif (($task_id > 0) && (EXT_GET_CURR_NAME() != "")) {
+               //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME()."<br />\n";
                // Remove task from system when id and extension's name is valid
                SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_task_system` WHERE id=%s AND `status`='NEW' LIMIT 1",
                        array(bigintval($task_id)), __FUNCTION__, __LINE__);
        }
 
        // Is this the sql_patches?
-       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":{EXT_GET_CURR_NAME()}/{$EXT_LOAD_MODE}");
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":".EXT_GET_CURR_NAME()."/{$EXT_LOAD_MODE}");
        if ((EXT_GET_CURR_NAME() == "sql_patches") && (($EXT_LOAD_MODE == "register") || ($EXT_LOAD_MODE == "remove")) && (!$dry_run) && ($test)) {
                //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": LOAD!");
                if ($logout === true) {
@@ -317,6 +333,8 @@ function REGISTER_EXTENSION ($ext_name, $task_id, $dry_run = false, $logout = tr
        } // END - if
 
        // Return status code
+       //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME()." - LEFT!<br />\n";
+       //* DEBUG: */ var_dump($ret);
        return $ret;
 }
 
@@ -345,7 +363,7 @@ function EXTENSION_RUN_SQLS ($ext_id, $load_mode) {
        $sqlRan = false;
 
        // Load extension in detected mode
-       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":ext_name[{$ext_id}]={EXT_GET_CURR_NAME()}");
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ":ext_name[{$ext_id}]=".EXT_GET_CURR_NAME()."");
        LOAD_EXTENSION(EXT_GET_CURR_NAME(), $load_mode, "", false);
 
        // Init these SQLs
@@ -372,7 +390,7 @@ function EXTENSION_RUN_SQLS ($ext_id, $load_mode) {
        } // END - if
 
        // Is this the sql_patches?
-       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": {$ext_id}/{EXT_GET_CURR_NAME()}/{$load_mode}");
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": id=".$ext_id.",currName=".EXT_GET_CURR_NAME().",loadMode=".$load_mode);
        if ((EXT_GET_CURR_NAME() == "sql_patches") && (($load_mode == "register") || ($load_mode == "remove"))) {
                // Then redirect to logout
                //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, ": LOAD!");
@@ -415,11 +433,11 @@ function EXT_IS_ACTIVE ($ext_name) {
                SQL_FREERESULT($result);
 
                // Write cache array
-               //* DEBUG: */ echo $ext_name."[DB]: {$active}<br />\n";
+               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "ext_name=".$ext_name."[DB]: {$active}");
                $GLOBALS['cache_array']['extensions']['ext_active'][$ext_name] = $active;
        } else {
                // Extension not active!
-               //* DEBUG: */ echo $ext_name.": Not active!<br />\n";
+               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "ext_name=".$ext_name.": Not active!");
                $GLOBALS['cache_array']['extensions']['ext_active'][$ext_name] = "N";
        }
 
@@ -787,7 +805,7 @@ function MODULE_HAS_MENU ($mod, $forceDb = false) {
        // All is false by default
        $ret = false;
 
-       //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):mod={$mod},cache=".GET_EXT_VERSION("cache")."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "mod={$mod},cache=".GET_EXT_VERSION("cache"));
        if (GET_EXT_VERSION("cache") >= "0.1.2") {
                // Cache version is okay, so let's check the cache!
                if (isset($GLOBALS['cache_array']['modules']['has_menu'][$mod])) {
@@ -827,7 +845,7 @@ function MODULE_HAS_MENU ($mod, $forceDb = false) {
        }
 
        // Return status
-       //* DEBUG: */ var_dump($ret);
+       //* DEBUG: */ print __FUNCTION__."[".__LINE__."]:currName=".EXT_GET_CURR_NAME().":"; var_dump($ret);
        return $ret;
 }
 
@@ -988,7 +1006,7 @@ function EXT_ADD_UPDATE_DEPENDS ($updateDepends) {
 
        // Is it not yet added?
        if (!in_array($updateDepends, $GLOBALS['ext_running_updates'])) {
-               //* DEBUG */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."/".$updateDepends."<br />\n";
+               //* DEBUG */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME()."/".$updateDepends);
                // Add it to the list of extension update depencies map
                $GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()][] = (string) $updateDepends;
 
@@ -997,40 +1015,64 @@ function EXT_ADD_UPDATE_DEPENDS ($updateDepends) {
        } // END - if
 }
 
+// Checks wether the given extension registration is in progress
+function EXT_IS_REGISTER_RUNNING ($ext_name) {
+       return ((isset($GLOBALS['ext_register_running'])) && (in_array($ext_name, $GLOBALS['ext_register_running'])));
+}
+
 // Init EXT_UPDATE_DEPENDS flag
 function EXT_INIT_UPDATE_DEPENDS () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
 
-       // Init update depency map
-       $GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()] = array();
+       // Init update depency map automatically if not found
+       if (!EXT_IS_UPDATE_DEPENDS_INIT()) {
+               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME()." - INIT!");
+               $GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()] = array();
+       } // END - if
 
        // Init running updates array
        EXT_INIT_RUNNING_UPDATES();
 }
 
+// Adds an extension as "registration in progress"
+function EXT_ADD_RUNNING_REGISTRATION ($ext_name) {
+       // Is it running?
+       if (!EXT_IS_REGISTER_RUNNING($ext_name)) {
+               // Then add it!
+               $GLOBALS['ext_register_running'][] = $ext_name;
+       } // END - if
+}
+
+// Checks wether EXT_UPDATE_DEPENDS is initialized
+function EXT_IS_UPDATE_DEPENDS_INIT () {
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
+       return (isset($GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()]));
+}
+
 // Initializes the list of running updates
 function EXT_INIT_RUNNING_UPDATES () {
        // Auto-init ext_running_updates
        if (!isset($GLOBALS['ext_running_updates'])) {
                $GLOBALS['ext_running_updates'] = array();
+               $GLOBALS['ext_register_running'] = array();
        } // END - if
 }
 
 // Getter for EXT_UPDATE_DEPENDS flag
 function EXT_GET_UPDATE_DEPENDS () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
        return $GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()];
 }
 
 // Getter for next iterator depency
 function EXT_GET_ITERATOR_UPDATE_DEPENDS () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
        return ($GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()][EXT_GET_UPDATE_ITERATOR()]);
 }
 
 // Counter for extension update depencies
 function EXT_COUNT_UPDATE_DEPENDS () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
        return count($GLOBALS['ext_update_depends'][EXT_GET_CURR_NAME()]);
 }
 
@@ -1051,7 +1093,7 @@ function EXT_REMOVE_UPDATE_DEPENDS ($ext_name) {
 
 // Init iterator for update depencies
 function EXT_INIT_UPDATE_ITERATOR () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
        $GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()] = 0;
 }
 
@@ -1061,13 +1103,13 @@ function EXT_GET_UPDATE_ITERATOR () {
        if (!isset($GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()])) EXT_INIT_UPDATE_ITERATOR();
 
        // Return it
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."/".$GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()]."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME()."/".$GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()]);
        return $GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()];
 }
 
 // Increments the update iterator
 function EXT_INCREMENT_UPDATE_INTERATOR () {
-       //* DEBUG: */ print __FUNCTION__.":".EXT_GET_CURR_NAME()."<br />\n";
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "currName=".EXT_GET_CURR_NAME());
        $GLOBALS['ext_depend_iterator'][EXT_GET_CURR_NAME()]++;
 }