More fixes for installation and extension registration
[mailer.git] / inc / extensions-functions.php
index 59e2e95ded0f601a09d53dabb77eed19b259741c..c73a57fe4c3bc0d2adbbc45b50623c868a5f61d3 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /************************************************************************
- * MXChange v0.2.1                                    Start: 10/25/2009 *
- * ===============                              Last change: 10/25/2009 *
+ * Mailer v0.2.1-FINAL                                Start: 10/25/2009 *
+ * ===================                          Last change: 10/25/2009 *
  *                                                                      *
  * -------------------------------------------------------------------- *
  * File              : extensions-functions.php                         *
@@ -102,7 +102,7 @@ function loadExtension ($ext_name, $ext_mode = 'init', $ext_ver = '', $dry_run =
                        // Download functions file
                        loadIncludeOnce($funcsInclude);
                } // END - if
-       } elseif ((!isset($GLOBALS['cache_array']['extension']['ext_func'][$ext_name])) && (isDebugModeEnabled()) && (getOutputMode() == 0) && ($ext_name != 'sql_patches') && (substr($ext_name, 0, 10) != 'admintheme') && (getExtensionMode() == 'test')) {
+       } elseif ((!isset($GLOBALS['cache_array']['extension']['ext_func'][$ext_name])) && (isDebugModeEnabled()) && (getOutputMode() == '0') && ($ext_name != 'sql_patches') && (substr($ext_name, 0, 10) != 'admintheme') && (getExtensionMode() == 'test')) {
                // No functions file is not so good...
                logDebugMessage(__FUNCTION__, __LINE__, sprintf("NOTICE: Extension %s has no own functions file or we cannot read from it. mode=%s",
                        $ext_name,
@@ -150,6 +150,9 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
        // Enable dry-run
        enableExtensionDryRun($dry_run);
 
+       // By default all extensions are in productive phase
+       enableExtensionProductive();
+
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()." - ENTERED!");
        // This shall never do a non-admin user or if the extension is active (already installed)
        if ((!isAdmin()) || (isExtensionInstalled($ext_name))) {
@@ -170,12 +173,12 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
        initExtensionUpdateDependencies();
 
        // Is the task id zero? Then we need to auto-fix it here
-       if ($task_id == 0) {
+       if ($task_id == '0') {
                // Try to find the task
                $task_id = determineExtensionTaskId(getCurrentExtensionName());
 
                // Still zero and not in dry-run?
-               if (($task_id == 0) && (!getExtensionDryRun())) {
+               if (($task_id == '0') && (!getExtensionDryRun())) {
                        // Then request a bug report
                        debug_report_bug(sprintf("%s: task_id is still zero after determineExtensionTaskId(%s)",
                                __FUNCTION__,
@@ -223,7 +226,7 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                        incrementExtensionUpdateIterator();
 
                        // Check for required file
-                       if (loadExtension($ext_update, 'register', '', getExtensionDryRun())) {
+                       if ((!isExtensionInstalled($ext_update)) && (loadExtension($ext_update, 'register', '', getExtensionDryRun()))) {
                                // Set current extension name again
                                setCurrentExtensionName($ext_name);
 
@@ -236,7 +239,7 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
 
                                // 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...
+                                       // Extension not registered so far so first load task's id...
                                        $task = determineExtensionTaskId($ext_update);
 
                                        // Entry found?
@@ -251,12 +254,15 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                        } // END - if
                                } elseif ($ext_ver != getCurrentExtensionVersion()) {
                                        // Ok, update this extension now
-                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName().",ext_update=".$ext_update.",ext_ver=".$ext_ver."/".getCurrentExtensionVersion()."");
-                                       $GLOBALS['ext_backup'][$ext_update][$ext_ver] = getCurrentExtensionName();
+                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName='.getCurrentExtensionName().',currVer='.getCurrentExtensionVersion().'');
+                                       $GLOBALS['ext_backup_name'][$ext_update][$ext_ver] = getCurrentExtensionName();
+                                       $GLOBALS['ext_backup_ver'][$ext_update][$ext_ver] = getCurrentExtensionVersion();
                                        updateExtension($ext_update, $ext_ver, getExtensionDryRun());
-                                       setCurrentExtensionName($GLOBALS['ext_backup'][$ext_update][$ext_ver]);
-                                       unset($GLOBALS['ext_backup'][$ext_update][$ext_ver]);
-                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()."");
+                                       setCurrentExtensionName($GLOBALS['ext_backup_name'][$ext_update][$ext_ver]);
+                                       setCurrentExtensionVersion($GLOBALS['ext_backup_ver'][$ext_update][$ext_ver]);
+                                       unset($GLOBALS['ext_backup_name'][$ext_update][$ext_ver]);
+                                       unset($GLOBALS['ext_backup_ver'][$ext_update][$ext_ver]);
+                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName='.getCurrentExtensionName().',currVer='.getCurrentExtensionVersion().'');
 
                                        // All okay!
                                        $test = true;
@@ -275,7 +281,7 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                } // END - for
 
                // Is there no update?
-               if (countExtensionUpdateDependencies(getCurrentExtensionName()) == 0) {
+               if (countExtensionUpdateDependencies(getCurrentExtensionName()) == '0') {
                        // Then test is passed!
                        $test = true;
                } // END - if
@@ -322,6 +328,9 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                // Remove all SQL commands
                                unsetSqls();
 
+                               // Mark it as installed
+                               $GLOBALS['ext_is_installed'][getCurrentExtensionName()] = true;
+
                                // In normal mode return a true on success
                                $ret = true;
                        } elseif (getExtensionDryRun() === true) {
@@ -431,7 +440,10 @@ function isExtensionInstalled ($ext_name) {
        $isInstalled = false;
 
        // Check if there is a cache entry
-       if (isset($GLOBALS['cache_array']['extension']['ext_id'][$ext_name])) {
+       if (isset($GLOBALS['ext_is_installed'][$ext_name])) {
+               // Use cache built from below queries
+               $isInstalled = $GLOBALS['ext_is_installed'][$ext_name];
+       } elseif (isset($GLOBALS['cache_array']['extension']['ext_id'][$ext_name])) {
                // Found!
                $isInstalled = true;
 
@@ -441,20 +453,19 @@ function isExtensionInstalled ($ext_name) {
                // Extensions are all inactive/not installed during installation
        } else {
                // Look in database
-               $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
-                       array($ext_name), __FILE__, __LINE__);
+               $ext_id = getExtensionId($ext_name);
 
                // Do we have a record?
-               $isInstalled = (SQL_NUMROWS($result) == 1);
+               $isInstalled = ($ext_id > 0);
 
                // Is it installed, then cache the entry
                if ($isInstalled === true) {
-                       // Dummy call
+                       // Dummy call (get is okay here)
                        getExtensionId($ext_name, true);
                } // END - if
 
-               // Free result
-               SQL_FREERESULT($result);
+               // Remember the status
+               $GLOBALS['ext_is_installed'][$ext_name] = $isInstalled;
        }
 
        // Return status
@@ -467,19 +478,19 @@ function isExtensionActive ($ext_name) {
        if ((isInstallationPhase()) || (empty($ext_name))) return false;
 
        // Not active is the default
-       $active = 'N';
+       $data['ext_active'] = 'N';
 
        // Check cache
        if (isset($GLOBALS['cache_array']['extension']['ext_active'][$ext_name])) {
                // Load from cache
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "CACHE! ext_name={$ext_name}");
-               $active = $GLOBALS['cache_array']['extension']['ext_active'][$ext_name];
+               $data['ext_active'] = $GLOBALS['cache_array']['extension']['ext_active'][$ext_name];
 
                // Count cache hits
                incrementStatsEntry('cache_hits');
        } elseif (isset($GLOBALS['ext_loaded'][$ext_name])) {
                // @TODO Extension is loaded, what next?
-               app_die(__FUNCTION__, __LINE__, "LOADED:$ext_name");
+               app_die(__FUNCTION__, __LINE__, 'LOADED:' . $ext_name);
        } elseif (($ext_name == 'cache') || (!isExtensionInstalled('cache'))) {
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "DB! ext_name={$ext_name}");
                // Load from database
@@ -489,15 +500,15 @@ function isExtensionActive ($ext_name) {
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
                        // Load entry
-                       list($active) = SQL_FETCHROW($result);
+                       $data = SQL_FETCHARRAY($result);
                } // END - if
 
                // Free result
                SQL_FREERESULT($result);
 
                // Write cache array
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".$ext_name."[DB]: {$active}");
-               $GLOBALS['cache_array']['extension']['ext_active'][$ext_name] = $active;
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".$ext_name."[DB]: ".$data['ext_active']."");
+               $GLOBALS['cache_array']['extension']['ext_active'][$ext_name] = $data['ext_active'];
        } else {
                // Extension not active!
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".$ext_name.": Not active!");
@@ -505,16 +516,16 @@ function isExtensionActive ($ext_name) {
        }
 
        // Debug message
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name={$ext_name},active={$active}");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".$ext_name.",active=".$data['ext_active']."");
 
        // Is this extension activated? (For admins we always have active extensions...)
-       return ($active == 'Y');
+       return ($data['ext_active'] == 'Y');
 }
 
 // Get version from extensions
-function getExtensionVersion ($ext_name) {
+function getExtensionVersion ($ext_name, $force = false) {
        // By default no extension is found
-       $ext_ver = 'invalid';
+       $data['ext_version'] = 'false';
 
        // Empty extension name should be fixed!
        if (empty($ext_name)) {
@@ -524,13 +535,13 @@ function getExtensionVersion ($ext_name) {
 
        // Extensions are all inactive during installation
        if (isInstallationPhase()) return '';
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": ext_name={$ext_name}");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": ext_name=".$ext_name."");
 
        // Is the cache written?
        if (isset($GLOBALS['cache_array']['extension']['ext_version'][$ext_name])) {
                // Load data from cache
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": CACHE!");
-               $ext_ver = $GLOBALS['cache_array']['extension']['ext_version'][$ext_name];
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $ext_name . ': CACHE!');
+               $data['ext_version'] = $GLOBALS['cache_array']['extension']['ext_version'][$ext_name];
 
                // Count cache hits
                incrementStatsEntry('cache_hits');
@@ -538,33 +549,33 @@ function getExtensionVersion ($ext_name) {
                // Load from database
                $result = SQL_QUERY_ESC("SELECT `ext_version` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
                        array($ext_name), __FUNCTION__, __LINE__);
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": DB - ".SQL_NUMROWS($result)."");
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $ext_name . ': DB - '.SQL_NUMROWS($result).'');
 
                // Is the extension there?
                if (SQL_NUMROWS($result) == 1) {
                        // Load entry
-                       list($ext_ver) = SQL_FETCHROW($result);
+                       $data = SQL_FETCHARRAY($result);
                } elseif (isDebugModeEnabled()) {
-                       // Not found!
-                       logDebugMessage(__FUNCTION__, __LINE__, sprintf(": Cannot find extension %s in database!", $ext_name));
+                       // Not found, please report all
+                       debug_report_bug(sprintf(": Cannot find extension %s in database!", $ext_name));
                }
 
                // Free result
                SQL_FREERESULT($result);
 
                // Set cache
-               $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $ext_ver;
+               $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $data['ext_version'];
        }
 
        // Extension version should not be invalid
-       if ($ext_ver == 'invalid') {
+       if (($data['ext_version'] == 'false') && ($force === false)) {
                // Please report this trouble
                debug_report_bug(sprintf("Extension <strong>%s</strong> has empty version!", $ext_name));
        } // END - if
 
        // Return result
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": ret={$ext_ver}");
-       return $ext_ver;
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": ret={$data['ext_version']}");
+       return $data['ext_version'];
 }
 
 // Updates a given extension with current extension version to latest version
@@ -676,9 +687,9 @@ function addExtensionVerboseSqlTable ($title = '', $dashed = '', $switch = false
                $SW = 2;
 
                // Get all SQLs
-               foreach (getExtensionSqls() as $idx => $sqls) {
+               foreach (getExtensionSqls() as $sqls) {
                        // New array format is recursive
-                       foreach ($sqls as $sql) {
+                       foreach ($sqls as $idx => $sql) {
                                // Trim out spaces
                                $sql = trim($sql);
 
@@ -722,12 +733,12 @@ function addExtensionVerboseSqlTable ($title = '', $dashed = '', $switch = false
 // Get extension name from id
 function getExtensionName ($ext_id) {
        // Init extension name
-       $ret = '';
+       $data['ext_name'] = '';
 
        // Is cache there?
        if (isset($GLOBALS['cache_array']['extension']['ext_name'][$ext_id])) {
                // Load from cache
-               $ret = $GLOBALS['cache_array']['extension']['ext_name'][$ext_id];
+               $data['ext_name'] = $GLOBALS['cache_array']['extension']['ext_name'][$ext_id];
 
                // Count cache hits
                incrementStatsEntry('cache_hits');
@@ -739,7 +750,7 @@ function getExtensionName ($ext_id) {
                // Is the entry there?
                if (SQL_NUMROWS($result) == 1) {
                        // Get the extension's name from database
-                       list($ret) = SQL_FETCHROW($result);
+                       $data = SQL_FETCHARRAY($result);
                } // END - if
 
                // Free result
@@ -747,51 +758,47 @@ function getExtensionName ($ext_id) {
        }
 
        // Did we find some extension?
-       if (empty($ret)) {
+       if (empty($data['ext_name'])) {
                // We should fix these all!
                debug_report_bug(__FUNCTION__ . ': ext_name is empty. ext_id=' . $ext_id);
        } // END - if
 
        // Return the extension name
-       return $ret;
+       return $data['ext_name'];
 }
 
 // Get extension id from name
-function getExtensionId ($ext_name, $forceDb = false) {
-       // Init ID number
-       $ret = 0;
+function getExtensionId ($ext_name) {
+       // Init id number
+       $data['ext_id'] = '0';
 
+       // Do we have cache?
        if (isset($GLOBALS['cache_array']['extension']['ext_id'][$ext_name])) {
                // Load from cache
-               $ret = $GLOBALS['cache_array']['extension']['ext_id'][$ext_name];
+               $data['ext_id'] = $GLOBALS['cache_array']['extension']['ext_id'][$ext_name];
 
                // Count cache hits
                incrementStatsEntry('cache_hits');
-       } elseif (($forceDb === true) || (!isExtensionActive('cache'))) {
+       } else {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
+               $result = SQL_QUERY_ESC("SELECT `id` AS ext_id FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
                        array($ext_name), __FUNCTION__, __LINE__);
 
                // Is the entry there?
                if (SQL_NUMROWS($result) == 1) {
                        // Get the extension's id from database
-                       list($ret) = SQL_FETCHROW($result);
-
-                       // Cache it
-                       $GLOBALS['cache_array']['extension']['ext_id'][$ext_name] = $ret;
+                       $data = SQL_FETCHARRAY($result);
                } // END - if
 
                // Free result
                SQL_FREERESULT($result);
-       }
 
-       if ($ret == 0) {
-               // We should fix these all!
-               debug_report_bug(__FUNCTION__ . ': Invalid extension name found. ext_name=' . $ext_name);
-       } // END - if
+               // Cache it
+               $GLOBALS['cache_array']['extension']['ext_id'][$ext_name] = $data['ext_id'];
+       }
 
        // Return value
-       return $ret;
+       return $data['ext_id'];
 }
 
 // Determines wether the given extension name is valid
@@ -887,7 +894,7 @@ function createExtensionUpdateTask ($adminId, $ext_name, $ext_ver, $notes) {
        // Is the extension there?
        if (isExtensionInstalled($ext_name)) {
                // Check if task is not there
-               if (determineTaskIdBySubject($subject) == 0) {
+               if (determineTaskIdBySubject($subject) == '0') {
                        // Create extension update-task
                        createNewTask($subject, $notes, 'EXTENSION_UPDATE', 0, $adminId);
                } // END - if
@@ -900,9 +907,9 @@ function createExtensionUpdateTask ($adminId, $ext_name, $ext_ver, $notes) {
 // Creates a new task for newly installed extension
 function createNewExtensionTask ($adminId, $subject, $ext) {
        // Not installed and do we have created a task for the admin?
-       if ((determineTaskIdBySubject($subject) == 0) && (!isExtensionInstalled($ext))) {
+       if ((determineTaskIdBySubject($subject) == '0') && (!isExtensionInstalled($ext))) {
                // Set default message if ext-foo is missing
-               $message = sprintf(getMessage('ADMIN_EXT_TEXT_FILE_MISSING'), $ext);
+               $message = getMaskedMessage('ADMIN_EXT_TEXT_FILE_MISSING', $ext);
 
                // Template file
                $tpl = sprintf("%stemplates/%s/html/ext/ext_%s.tpl",
@@ -931,7 +938,7 @@ function createExtensionDeactivationTask ($ext) {
        $subject = sprintf("[%s:] %s", $ext, getMessage('TASK_SUBJ_EXTENSION_DEACTIVATED'));
 
        // Not installed and do we have created a task for the admin?
-       if ((determineTaskIdBySubject($subject) == 0) && (getExtensionVersion($ext) != '')) {
+       if ((determineTaskIdBySubject($subject) == '0') && (getExtensionVersion($ext) != '')) {
                // Task not created so add it
                createNewTask($subject, SQL_ESCAPE(loadTemplate('task_ext_deactivated', true, $ext)), 'EXTENSION_DEACTIVATION');
        } // END - if
@@ -942,7 +949,7 @@ function ifModuleHasMenu ($mod, $forceDb = false) {
        // All is false by default
        $ret = false;
 
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "mod={$mod},cache=".getExtensionVersion('cache'));
+       // Extension installed and newer than or has version 0.1.2?
        if (isExtensionInstalledAndNewer('cache', '0.1.2')) {
                // Cache version is okay, so let's check the cache!
                if (isset($GLOBALS['cache_array']['modules']['has_menu'][$mod])) {
@@ -965,13 +972,13 @@ function ifModuleHasMenu ($mod, $forceDb = false) {
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
                        // Load "has_menu" column
-                       list($has_menu) = SQL_FETCHROW($result);
+                       $data = SQL_FETCHARRAY($result);
 
                        // Fake cache... ;-)
-                       $GLOBALS['cache_array']['extension']['ext_menu'][$mod] = $has_menu;
+                       $GLOBALS['cache_array']['extension']['ext_menu'][$mod] = $data['has_menu'];
 
                        // Does it have a menu?
-                       $ret = ($has_menu == 'Y');
+                       $ret = ($data['has_menu'] == 'Y');
                } // END  - if
 
                // Free memory
@@ -982,52 +989,51 @@ function ifModuleHasMenu ($mod, $forceDb = false) {
        }
 
        // Return status
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName().intval($ret));
        return $ret;
 }
 
 // Determines the task id for given extension
 function determineExtensionTaskId ($ext_name) {
        // Default is not found
-       $task_id = 0;
+       $data['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",
+       $result = SQL_QUERY_ESC("SELECT `id` AS task_id FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `task_type`='EXTENSION' AND `subject`='[%s:]' LIMIT 1",
                array($ext_name), __FUNCTION__, __LINE__);
 
        // Entry found?
        if (SQL_NUMROWS($result) == 1) {
-               // Task found so load task's ID and register extension...
-               list($task_id) = SQL_FETCHROW($result);
+               // Task found so load task's id and register extension...
+               $data = SQL_FETCHARRAY($result);
        } // END - if
 
        // Free result
        SQL_FREERESULT($result);
 
        // Return it
-       return $task_id;
+       return $data['task_id'];
 }
 
 // Determines the task id for given subject
 function determineTaskIdBySubject ($subject) {
        // Default is not found
-       $task_id = 0;
+       $data['task_id'] = '0';
 
        // Search for task id
-       $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1",
+       $result = SQL_QUERY_ESC("SELECT `id` AS task_id FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1",
                array($subject), __FUNCTION__, __LINE__);
 
        // Entry found?
        if (SQL_NUMROWS($result) == 1) {
-               // Task found so load task's ID and register extension...
-               list($task_id) = SQL_FETCHROW($result);
+               // Task found so load task's id and register extension...
+               $data = SQL_FETCHARRAY($result);
        } // END - if
 
        // Free result
        SQL_FREERESULT($result);
 
        // Return it
-       return $task_id;
+       return $data['task_id'];
 }
 
 // Add updates notes for given version
@@ -1036,7 +1042,7 @@ function addExtensionNotes ($ver) {
        $out = ''; $content = array();
 
        // Is do we have verbose output enabled?
-       if ((getConfig('verbose_sql') == 'Y') || (!isExtensionActive('sql_patches'))) {
+       if ((!isExtensionActive('sql_patches')) || (getConfig('verbose_sql') == 'Y')) {
                // Update notes found?
                if (getExtensionUpdateNotes($ver) != '') {
                        // Update notes found
@@ -1137,7 +1143,7 @@ function addExtensionUpdateDependency ($updateDepends) {
        // Is the update depency empty? (NEED TO BE FIXED!)
        if (empty($updateDepends)) {
                // Please report this bug!
-               debug_report_bug("updateDepends is left empty!");
+               debug_report_bug('updateDepends is left empty!');
        } // END - if
 
        // Is it not yet added?
@@ -1230,7 +1236,7 @@ function removeExtensionUpdateDependency ($ext_name) {
 // Init iterator for update depencies
 function initExtensionUpdateIterator () {
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName());
-       $GLOBALS['ext_depend_iterator'][getCurrentExtensionName()] = 0;
+       $GLOBALS['ext_depend_iterator'][getCurrentExtensionName()] = '0';
 }
 
 // Getter for depency iterator
@@ -1391,9 +1397,9 @@ function FILTER_INIT_EXTENSIONS () {
        // Do we have some entries?
        //* DEBUG */ print __FUNCTION__.': ENTRY!<br />';
        if (isset($GLOBALS['cache_array']['extension']['ext_name'])) {
-               //* DEBUG */ print __FUNCTION__.': CACHE - START!<br />';
                // Load all found extensions if found
-               foreach ($GLOBALS['cache_array']['extension']['ext_name'] as $key=>$ext_name) {
+               //* DEBUG */ print __FUNCTION__.': CACHE - START!<br />';
+               foreach ($GLOBALS['cache_array']['extension']['ext_name'] as $key => $ext_name) {
                        // Load it
                        //* DEBUG */ print __FUNCTION__.': '.$ext_name.' - START<br />';
                        loadExtension($ext_name, 'init');
@@ -1447,7 +1453,7 @@ function removeExtensionFromArray () {
        $ext_name = getCurrentExtensionName();
 
        // Now loop through the whole cache
-       foreach ($GLOBALS['cache_array']['extension'] as $cacheName=>$cacheArray) {
+       foreach ($GLOBALS['cache_array']['extension'] as $cacheName => $cacheArray) {
                // Is it an element?
                if (isset($cacheArray[$ext_name])) {
                        // Array element
@@ -1549,7 +1555,7 @@ function isExtensionIncludeReadable ($ext_name = '') {
        } // END - if
 
        // Return result
-       //* DEBUG: */ print __FUNCTION__.': '.$ext_name.'='.intval($GLOBALS['ext_inc_readable'][$ext_name]).'<br />';
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',realable='.intval($GLOBALS['ext_inc_readable'][$ext_name]));
        return $GLOBALS['ext_inc_readable'][$ext_name];
 }
 
@@ -1708,5 +1714,17 @@ function addSponsorMenuSql ($action, $what, $title, $active, $sort) {
        }
 }
 
+// Enables/disables productive mode for current extension (used only while
+// registration).
+function enableExtensionProductive ($isProductive = true) {
+       $GLOBALS['ext_productive'][getCurrentExtensionName()] = (bool) $isProductive;
+}
+
+// Checks wether the extension is in productive phase. If not set, development
+// phase (=false) is assumed.
+function isExtensionProductive () {
+       return ((isset($GLOBALS['ext_productive'][getCurrentExtensionName()])) && ($GLOBALS['ext_productive'][getCurrentExtensionName()] === true));
+}
+
 // [EOF]
 ?>