Fix for 'No resource given' message
authorRoland Häder <roland@mxchange.org>
Wed, 7 Apr 2010 01:25:30 +0000 (01:25 +0000)
committerRoland Häder <roland@mxchange.org>
Wed, 7 Apr 2010 01:25:30 +0000 (01:25 +0000)
13 files changed:
inc/classes/cachesystem.class.php
inc/extensions-functions.php
inc/extensions/ext-sql_patches.php
inc/filter-functions.php
inc/filters.php
inc/functions.php
inc/gen_sql_patches.php
inc/libs/cache_functions.php
inc/modules/admin/what-edit_user.php
inc/modules/admin/what-extensions.php
inc/modules/index.php
inc/mysql-manager.php
templates/de/html/admin/admin_login_form.tpl

index ae127dc..1c3950b 100644 (file)
@@ -438,6 +438,9 @@ class CacheSystem {
        function extensionVersionMatches ($ext_name) {
                // Check cache
                if (!isset($GLOBALS[__METHOD__][$ext_name])) {
+                       // Does never match by default
+                       $GLOBALS[__METHOD__][$ext_name] = false;
+
                        // Compare only if installed
                        if (isExtensionInstalled($ext_name)) {
                                // Get extension version
index 23c4d68..14c1e82 100644 (file)
@@ -44,29 +44,51 @@ if (!defined('__SECURITY')) {
 
 // Load the extension and maybe found language and function files.
 function loadExtension ($ext_name, $ext_mode = 'init', $ext_ver = '', $dry_run = false) {
-       // Set current extension name
-       setCurrentExtensionName($ext_name);
+       // If this happens twice, we need the bug report from you, except for updates/tests
+       if ((isset($GLOBALS['loaded_extension'][$ext_name][$ext_mode])) && (!in_array($ext_mode, array('update', 'test')))) {
+               debug_report_bug(__FUNCTION__ . '() is called twice: ext_name=' . $ext_name . ', ext_mode='. $ext_mode . ',ext_sqls=' . print_r(getExtensionSqls(), true) . ', ext_register_running=' . print_r($GLOBALS['ext_register_running'], true) . ', ext_running_updates=' . print_r($GLOBALS['ext_running_updates'], true));
+       } // END - if
 
-       // Set current extension version
-       setCurrentExtensionVersion($ext_ver);
+       // Make sure this situation can only happen once
+       $GLOBALS['loaded_extension'][$ext_name][$ext_mode] = true;
 
        // Set extension mode
        setExtensionMode($ext_mode);
 
+       // Set current extension name
+       setCurrentExtensionName($ext_name);
+
+       if (!empty($ext_ver)) {
+               // Set current extension version
+               setCurrentExtensionVersion($ext_ver);
+       } else {
+               // Set it to 0.0
+               setCurrentExtensionVersion('0.0');
+
+               // In all but test-mode we need these messages to debug! Please report all (together, e.g.)
+               if ($ext_mode != 'test') {
+                       // Log empty versions not in test-mode, but maybe it is fine...
+                       logDebugMessage(__FUNCTION__, __LINE__, 'Extension version is empty, setting to 0.0. ext_name=' . $ext_name . ', ext_mode=' . $ext_mode . ', dry_run=' . intval($dry_run));
+               } // END - if
+       }
+
        // Set dry-run
        enableExtensionDryRun($dry_run);
 
        // Init array
        initIncludePool('extension');
 
-       // Init EXT_UPDATE_DEPENDS
-       initExtensionUpdateDependencies();
+       // Init EXT_UPDATE_DEPENDS if not yet done
+       if (!isExtensionUpdateDependenciesInitialized()) {
+               // Init here...
+               initExtensionUpdateDependencies();
+       } // END - if
 
        // Init current extension name list
        initExtensionSqls();
 
        // Is the extension already loaded?
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "Loading extension {$ext_name}, mode=".getExtensionMode().", ver=".getCurrentExtensionVersion()."");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Loading extension ' . $ext_name . ', mode=' . getExtensionMode() . ', ver=' . getCurrentExtensionVersion());
        if ((isset($GLOBALS['ext_loaded']['ext'][$ext_name])) && (getExtensionMode() == 'init')) {
                // Debug message
                logDebugMessage(__FUNCTION__, __LINE__, sprintf("Extension %s already loaded.", $ext_name));
@@ -118,10 +140,10 @@ function loadExtension ($ext_name, $ext_mode = 'init', $ext_ver = '', $dry_run =
        setExtensionAlwaysActive('N');
 
        // Extension update notes
-       setExtensionUpdateNotes('');
+       // @TODO Do we still need this? setExtensionUpdateNotes('');
 
        // Include the extension file
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "Extension loaded.");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Extension loaded.');
        loadExtensionInclude();
 
        // Is this extension deprecated?
@@ -146,6 +168,7 @@ function loadExtension ($ext_name, $ext_mode = 'init', $ext_ver = '', $dry_run =
 // Registeres an extension and possible update depencies
 function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = true) {
        // Set current extension name
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',task_id=' . $task_id . ',dry_run=' . intval($dry_run) . ',logout=' . intval($logout) . ' - ENTERED!');
        setCurrentExtensionName($ext_name);
 
        // Enable dry-run
@@ -154,24 +177,27 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
        // 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))) {
+               // Abort here with 'false'
                return false;
        } // END - if
 
-       // When this extension is already in install/update phase, all is fine
-       if (isExtensionRegisterRunning($ext_name)) {
-               // Then abort here which is fine
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()." - ALREADY!");
+       // When this extension is already in registration/update phase, all is fine
+       if ((isExtensionRegistrationRunning($ext_name)) || (isExtensionUpdateRunning($ext_name))) {
+               // Then abort here with 'true' becaus it is fine
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ' - ALREADY!');
                return true;
        } // END - if
 
        // This registration is running
        addExtensionRunningRegistration($ext_name);
 
-       // Init EXT_UPDATE_DEPENDS
-       initExtensionUpdateDependencies();
+       // Init EXT_UPDATE_DEPENDS if not yet done
+       if (!isExtensionUpdateDependenciesInitialized()) {
+               // Init here...
+               initExtensionUpdateDependencies();
+       } // END - if
 
        // Is the task id zero? Then we need to auto-fix it here
        if ($task_id == '0') {
@@ -201,16 +227,16 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
        setExtensionReportsFailure(false);
 
        // Does this extension exists?
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()."");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
        if (loadExtension(getCurrentExtensionName(), 'register', '', getExtensionDryRun())) {
                // Set current extension name again
                setCurrentExtensionName($ext_name);
 
                // And run possible updates
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "".getCurrentExtensionName());
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName());
                $history = getExtensionVersionHistory();
                foreach ($history as $ver) {
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".getCurrentExtensionName().", ext_ver={$ver}");
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ', ext_ver=' . $ver);
                        // Load extension in update mode
                        loadExtension(getCurrentExtensionName(), 'update', $ver, getExtensionDryRun());
 
@@ -226,8 +252,9 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                        // Increment here to avoid endless loop
                        incrementExtensionUpdateIterator();
 
-                       // Check for required file
-                       if ((!isExtensionInstalled($ext_update)) && (loadExtension($ext_update, 'register', '', getExtensionDryRun()))) {
+                       // Check if extension is not installed and not already in registration procedure and if loading it wents finally fine...
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isExtensionRegistrationRunning(' . $ext_update . ')=' . intval(isExtensionRegistrationRunning($ext_update)));
+                       if ((!isExtensionInstalled($ext_update)) && (!isExtensionRegistrationRunning($ext_update)) && (loadExtension($ext_update, 'test', '', getExtensionDryRun()))) {
                                // Set current extension name again
                                setCurrentExtensionName($ext_name);
 
@@ -246,16 +273,17 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                        // Entry found?
                                        if ($task > 0) {
                                                // Try to register the extension
-                                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName().":ext_update=".$ext_update.",taskId=".$task."");
+                                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ':ext_update=' . $ext_update . ',taskId=' . $task);
                                                $test = registerExtension($ext_update, $task, getExtensionDryRun(), false);
 
                                                // Reset extension name
                                                setCurrentExtensionName($ext_name);
-                                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); print getCurrentExtensionName().':<pre>'.print_r($test);
+                                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
+                                               //* DEBUG: */ print getCurrentExtensionName().':<pre>' . print_r($test, true) . '</pre>';
                                        } // END - if
                                } elseif ($ext_ver != getCurrentExtensionVersion()) {
                                        // Ok, update this extension now
-                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName='.getCurrentExtensionName().',currVer='.getCurrentExtensionVersion().'');
+                                       //* 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());
@@ -263,7 +291,7 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                        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().'');
+                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',currVer=' . getCurrentExtensionVersion());
 
                                        // All okay!
                                        $test = true;
@@ -291,15 +319,17 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                setExtensionMode('register');
 
                // Remains true if extension registration reports no failures
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); print getCurrentExtensionName().':<pre>'.print_r($test, true).'</pre>';
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
+               //* DEBUG: */ print getCurrentExtensionName().':<pre>' . print_r($test, true) . '</pre>';
                $test = (($test === true) && (getExtensionReportsFailure() === false));
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); print getCurrentExtensionName().':<pre>'.print_r($test, true).'</pre>';
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
+               //* DEBUG: */ print getCurrentExtensionName().':<pre>' . print_r($test, true) . '</pre>';
 
                // Does everthing before wents ok?
                if ($test === true) {
                        // "Dry-run-mode" activated?
                        if ((getExtensionDryRun() === false) && (!isExtensionOnRemovalList())) {
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name=".getCurrentExtensionName());
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName());
                                // Init SQLs and transfer ext->generic
                                initSqls();
                                setSqlsArray(getExtensionSqls());
@@ -308,15 +338,26 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                runFilterChain('pre_extension_installed', array('dry_run' => getExtensionDryRun()));
 
                                // Register extension
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "insert=".getCurrentExtensionName().'/'.getCurrentExtensionVersion()." - INSERT!");
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'insert=' . getCurrentExtensionName() . '/' . getCurrentExtensionVersion() . ' - INSERT!');
                                if (isExtensionInstalledAndNewer('sql_patches', '0.0.6')) {
+                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion() . 'ext_css=' . getExtensionHasCss());
                                        // New way, with CSS
                                        SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`,`ext_has_css`) VALUES ('%s','%s','%s','%s')",
-                                               array(getCurrentExtensionName(), getExtensionAlwaysActive(), getCurrentExtensionVersion(), getExtensionHasCss()), __FUNCTION__, __LINE__);
+                                               array(
+                                                       getCurrentExtensionName(),
+                                                       getExtensionAlwaysActive(),
+                                                       getCurrentExtensionVersion(),
+                                                       getExtensionHasCss()
+                                               ), __FUNCTION__, __LINE__);
                                } else {
+                                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion());
                                        // Old way, no CSS
                                        SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`) VALUES ('%s','%s','%s')",
-                                               array(getCurrentExtensionName(), getExtensionAlwaysActive(), getCurrentExtensionVersion()), __FUNCTION__, __LINE__);
+                                               array(
+                                                       getCurrentExtensionName(),
+                                                       getExtensionAlwaysActive(),
+                                                       getCurrentExtensionVersion()
+                                               ), __FUNCTION__, __LINE__);
                                }
 
                                // Remove cache file(s) if extension is active
@@ -326,8 +367,9 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                        'task_id'  => $task_id
                                ));
 
-                               // Remove all SQL commands
-                               unsetSqls();
+                               // Re-init queries and notes
+                               initExtensionSqls(true);
+                               initExtensionNotes();
 
                                // Mark it as installed
                                $GLOBALS['ext_is_installed'][getCurrentExtensionName()] = true;
@@ -338,28 +380,29 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
                                // In  "dry-run" mode return array with all SQL commands
                                $ret = getExtensionSqls();
 
-                               // Remove all SQL commands
-                               unsetSqls();
+                               // Re-init queries and notes
+                               initExtensionSqls(true);
+                               initExtensionNotes();
                        } else {
                                // Extension has been removed for updates, so all is fine!
                                $ret = true;
                        }
                } else {
                        // No, an error occurs while registering extension :-(
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "".getCurrentExtensionName());
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName());
                        $ret = false;
                }
        } elseif (($task_id > 0) && (getCurrentExtensionName() != '')) {
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()."");
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
                // 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: */ logDebugMessage(__FUNCTION__, __LINE__, ':'.getCurrentExtensionName()."/".getExtensionMode()."");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . '/' . getExtensionMode());
        if ((getCurrentExtensionName() == 'sql_patches') && ((getExtensionMode() == 'register') || (getExtensionMode() == 'remove')) && (!getExtensionDryRun()) && ($test)) {
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ": LOAD!");
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ': LOAD!');
                if ($logout === true) {
                        // Then redirect to logout
                        redirectToUrl('modules.php?module=admin&amp;logout=1&amp;' . getExtensionMode() . '=sql_patches');
@@ -371,7 +414,7 @@ function registerExtension ($ext_name, $task_id, $dry_run = false, $logout = tru
        } // END - if
 
        // Return status code
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()." - LEFT!");
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ' - EXIT!');
        //* DEBUG: */ print getCurrentExtensionName().':<pre>'.print_r($ret, true).'</pre>';
        return $ret;
 }
@@ -389,7 +432,10 @@ function doExtensionSqls ($ext_id, $load_mode) {
        setCurrentExtensionName($ext_name);
 
        // Init EXT_UPDATE_DEPENDS
-       initExtensionUpdateDependencies();
+       if (!isExtensionUpdateDependenciesInitialized()) {
+               // Init here...
+               initExtensionUpdateDependencies();
+       } // END - if
 
        // Init array
        initExtensionSqls();
@@ -641,6 +687,9 @@ function updateExtension ($ext_name, $ext_ver, $dry_run = false) {
                                        } // END - if
                                } // END - foreach
 
+                               // Set extension version here
+                               setCurrentExtensionVersion($ext_ver);
+
                                // Set name back
                                setCurrentExtensionName($ext_name);
                        } // END - if
@@ -1048,7 +1097,7 @@ function addExtensionNotes ($ver) {
        // Is do we have verbose output enabled?
        if ((!isExtensionActive('sql_patches')) || (getConfig('verbose_sql') == 'Y')) {
                // Update notes found?
-               if (getExtensionUpdateNotes($ver) != '') {
+               if (isExtensionUpdateNoteSet($ver)) {
                        // Update notes found
                        $content = array(
                                'ver'   => $ver,
@@ -1122,6 +1171,11 @@ function getExtensionAlwaysActive () {
        return $GLOBALS['ext_always_active'][getCurrentExtensionName()];
 }
 
+// Checks wether the current extension is always active
+function isExtensionAlwaysActive () {
+       return (getExtensionAlwaysActive() == 'Y');
+}
+
 // Setter for EXT_VERSION flag
 function setThisExtensionVersion ($version) {
        $GLOBALS['ext_version'][getCurrentExtensionName()] = (string) $version;
@@ -1144,57 +1198,113 @@ function isExtensionDeprecated () {
 
 // Setter for EXT_UPDATE_DEPENDS flag
 function addExtensionUpdateDependency ($updateDepends) {
+       //* DEBUG */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . '/' . $updateDepends . ' - ENTERED!');
        // 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 empty: currentExtension=' . getCurrentExtensionName());
        } // END - if
 
        // Is it not yet added?
-       if (!in_array($updateDepends, $GLOBALS['ext_running_updates'])) {
-               //* DEBUG */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName().'/'.$updateDepends);
-               // Add it to the list of extension update depencies map
-               $GLOBALS['ext_update_depends'][getCurrentExtensionName()][] = (string) $updateDepends;
-
-               // Remember it in the list of running updates
-               $GLOBALS['ext_running_updates'][] = $updateDepends;
+       /* DEBUG:
+       if ((isset($updateDepends, $GLOBALS['ext_running_updates'][getCurrentExtensionName()])) && (in_array($updateDepends, getExtensionUpdatesRunning()))) {
+               // Double-adding isn't fine, too
+               debug_report_bug(__FUNCTION__ . '() called twice: updateDepends=' . $updateDepends . ',currentExtension=' . getCurrentExtensionName());
        } // END - if
+       */
+
+       // Add it to the list of extension update depencies map
+       $GLOBALS['ext_update_depends'][getCurrentExtensionName()][] = (string) $updateDepends;
+
+       // Remember it in the list of running updates
+       $GLOBALS['ext_running_updates'][getCurrentExtensionName()][] = $updateDepends;
+       //* DEBUG */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . '/' . $updateDepends . ' - EXIT!');
+}
+
+// Getter for running updates
+function getExtensionUpdatesRunning () {
+       return $GLOBALS['ext_running_updates'][getCurrentExtensionName()];
 }
 
 // Checks wether the given extension registration is in progress
-function isExtensionRegisterRunning ($ext_name) {
-       return ((isset($GLOBALS['ext_register_running'])) && (in_array($ext_name, $GLOBALS['ext_register_running'])));
+function isExtensionRegistrationRunning ($ext_name) {
+       // Simply check it
+       $isRunning = ((isset($GLOBALS['ext_register_running'])) && (in_array($ext_name, $GLOBALS['ext_register_running'])));
+
+       // Return it
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ', isRunning=' . intval($isRunning));
+       return $isRunning;
 }
 
 // Init EXT_UPDATE_DEPENDS flag
 function initExtensionUpdateDependencies () {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName());
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ' - ENTERED!');
 
        // Init update depency map automatically if not found
-       if (!isExtensionUpdateDependenciesInitialized()) {
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()." - INIT!");
-               $GLOBALS['ext_update_depends'][getCurrentExtensionName()] = array();
+       if (isExtensionUpdateDependenciesInitialized()) {
+               // We need these bug reports as well...
+               debug_report_bug(__FUNCTION__ . '() is called twice: currName=' . getCurrentExtensionName());
        } // END - if
 
+       $GLOBALS['ext_update_depends'][getCurrentExtensionName()] = array();
+
        // Init running updates array
        initExtensionRuningUpdates();
+
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ' - EXIT!');
 }
 
 // Adds an extension as "registration in progress"
 function addExtensionRunningRegistration ($ext_name) {
        // Is it running?
-       if (!isExtensionRegisterRunning($ext_name)) {
-               // Then add it!
-               $GLOBALS['ext_register_running'][] = $ext_name;
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Registration in progress: ext_name=' . $ext_name . ' - ENTERED!');
+       if (isExtensionRegistrationRunning($ext_name)) {
+               // This is really bad and should not be quietly ignored
+               debug_report_bug(__FUNCTION__ . '() already called! ext_name=' . $ext_name);
        } // END - if
+
+       // Then add it!
+       $GLOBALS['ext_register_running'][] = $ext_name;
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Registration in progress: ext_name=' . $ext_name . ' - EXIT!');
 }
 
 // Checks wether EXT_UPDATE_DEPENDS is initialized
 function isExtensionUpdateDependenciesInitialized () {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName());
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
        return (isset($GLOBALS['ext_update_depends'][getCurrentExtensionName()]));
 }
 
+// Checks wether an update is already running for given extension
+function isExtensionUpdateRunning ($ext_name) {
+       // Current and given extensions means whole array
+       if ($ext_name == getCurrentExtensionName()) {
+               // Default is not found
+               $isRunning = false;
+
+               // Walk through whole array
+               foreach ($GLOBALS['ext_running_updates'] as $ext1=>$depends) {
+                       // Is it found?
+                       if (($ext1 == $ext_name) || ($isRunning === true)) {
+                               // Found!
+                               logDebugMessage(__FUNCTION__, __LINE__, 'ext1=' . $ext1 . ',ext_name=' . $ext_name . ',isRunning=' . intval($isRunning));
+                               $isRunning = true;
+                               break;
+                       } // END - if
+               } // END - foreach
+
+               // Return result
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning));
+               return $isRunning;
+       } // END - if
+
+       // Simply check it
+       $isRunning = ((isExtensionUpdateDependenciesInitialized()) && (in_array($ext_name, getExtensionRunningUpdates())));
+
+       // Return it
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning));
+       return $isRunning;
+}
+
 // Initializes the list of running updates
 function initExtensionRuningUpdates () {
        // Auto-init ext_running_updates
@@ -1281,7 +1391,8 @@ function getExtensionVersionHistory () {
 
 // Setter for EXT_UPDATE_NOTES
 function setExtensionUpdateNotes ($updateNotes, $ver='') {
-       //* DEBUG: */ print __FUNCTION__.':'.getCurrentExtensionName().'/'.getCurrentExtensionVersion().'/'.$ver.'='.$updateNotes.'<br />';
+       // . '/' . getCurrentExtensionVersion()
+       //* DEBUG: */ debug_report_bug(__FUNCTION__.':' . getCurrentExtensionName() . '/' . getExtensionMode() . '/' . $ver . '=' . $updateNotes);
        if (empty($ver)) {
                $GLOBALS['ext_update_notes'][getCurrentExtensionName()][getCurrentExtensionVersion()] = (string) $updateNotes;
        } else {
@@ -1294,6 +1405,11 @@ function getExtensionUpdateNotes ($ver) {
        return $GLOBALS['ext_update_notes'][getCurrentExtensionName()][$ver];
 }
 
+// Checks if ext_update_notes is set
+function isExtensionUpdateNoteSet ($ver) {
+       return isset($GLOBALS['ext_update_notes'][getCurrentExtensionName()][$ver]);
+}
+
 // Init extension notice
 function initExtensionNotes () {
        $GLOBALS['ext_notes'][getCurrentExtensionName()] = '';
@@ -1325,10 +1441,14 @@ function getCurrentExtensionName () {
 }
 
 // Init SQLs array for current extension
-function initExtensionSqls () {
-       // Auto-init the array now...
-       if (!isset($GLOBALS['ext_sqls'][getCurrentExtensionName()])) {
+function initExtensionSqls ($force = false) {
+       // Auto-init the array or if forced
+       if ((!isset($GLOBALS['ext_sqls'][getCurrentExtensionName()])) || ($force === true)) {
+               // Set the array
                $GLOBALS['ext_sqls'][getCurrentExtensionName()] = array();
+
+               // Initialize the generic array
+               initSqls();
        } // END - if
 }
 
@@ -1406,7 +1526,7 @@ function FILTER_INIT_EXTENSIONS () {
                foreach ($GLOBALS['cache_array']['extension']['ext_name'] as $key => $ext_name) {
                        // Load it
                        //* DEBUG */ print __FUNCTION__.': '.$ext_name.' - START<br />';
-                       loadExtension($ext_name, 'init');
+                       loadExtension($ext_name, 'init', getExtensionVersion($ext_name));
                        //* DEBUG */ print __FUNCTION__.': '.$ext_name.' - END<br />';
                } // END - foreach
                //* DEBUG */ print __FUNCTION__.': CACHE - END!<br />';
@@ -1437,18 +1557,21 @@ function getExtensionDryRun () {
 
 // Setter for current extension version
 function setCurrentExtensionVersion ($ext_ver) {
-       if (empty($ext_ver)) {
-               // 0.0 is okay here
-               $GLOBALS['ext_current_version'] = '0.0';
-       } else {
-               // Add version
-               $GLOBALS['ext_current_version'] = (string) $ext_ver;
-       }
+       // ext_ver should never be empty in other modes than 'test'
+       if ((empty($ext_ver)) && (getExtensionMode() != 'test')) {
+               // Please report all these messages
+               debug_report_bug('ext_ver is empty. Current extension name: ' . getCurrentExtensionName() . ', mode=' . getExtensionMode());
+       } // END - if
+
+       // Add version
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ', ext_ver[' . gettype($ext_ver) . ']=' . $ext_ver);
+       $GLOBALS['ext_current_version'][getCurrentExtensionName()] = (string) $ext_ver;
 }
 
 // Getter for current extension version
 function getCurrentExtensionVersion () {
-       return $GLOBALS['ext_current_version'];
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ', ext_ver=' . $GLOBALS['ext_current_version'][getCurrentExtensionName()]);
+       return $GLOBALS['ext_current_version'][getCurrentExtensionName()];
 }
 
 // Remove the extension from cache array
index f68de3c..54a7bc8 100644 (file)
@@ -53,8 +53,8 @@ setExtensionAlwaysActive('Y');
 
 switch (getExtensionMode()) {
        case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
-               // SQL commands to run
-               addExtensionSql('');
+               // This depends on 'cache' now
+               addExtensionUpdateDependency('cache');
                break;
 
        case 'remove': // Do stuff when removing extension
@@ -92,36 +92,6 @@ switch (getExtensionMode()) {
 `action`='rals' OR
 `action`='account'");
 
-               // Drop indexes
-               /* @TODO SQL_ALTER_TABLE() should work now properly
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_extensions` DROP UNIQUE KEY `ext_name`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP UNIQUE KEY `login`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_refbanner` DROP INDEX `visible`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_refdepths` DROP UNIQUE KEY `level`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_refsystem` DROP INDEX `level`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_pool` DROP INDEX `data_type`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_mod_reg` DROP UNIQUE KEY `module`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admin_menu` DROP INDEX `action`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admin_menu` DROP INDEX `what`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_task_system` DROP INDEX `task_type`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_task_system` DROP INDEX `status`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_task_system` DROP INDEX `task_created`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_task_system` DROP FULLTEXT `subject`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_task_system` DROP INDEX `subject`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_extensions` DROP INDEX `ext_active`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_guest_menu` DROP INDEX `action`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_guest_menu` DROP INDEX `what`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_guest_menu` DROP INDEX `sort`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_guest_menu` DROP INDEX `visible`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_guest_menu` DROP INDEX `locked`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_member_menu` DROP INDEX `what`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_member_menu` DROP INDEX `sort`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_member_menu` DROP INDEX `visible`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_member_menu` DROP INDEX `locked`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_cats` DROP INDEX `visible`");
-               addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_cats` DROP INDEX `sort`");
-               */
-
                // Unregister filter
                unregisterFilter('member_login_check', 'RESET_USER_LOGIN_FAILURE', true, getExtensionDryRun());
                break;
@@ -777,7 +747,7 @@ INDEX (`ip`)
                setConfigEntry('secret_key', '');
 
                // Read key from secret file
-               if ((getConfig('file_hash') == '') || (getConfig('master_salt') == '') || (getConfig('pass_scramble') == '')) {
+               if ((isExtensionInstalledAndNewer('sql_patches', '0.3.6')) && ((getConfig('file_hash') == '') || (getConfig('master_salt') == '') || (getConfig('pass_scramble') == ''))) {
                        // Cache instance
                        // Maybe need setup of secret key!
                        loadIncludeOnce('inc/gen_sql_patches.php');
@@ -792,7 +762,7 @@ INDEX (`ip`)
                } // END - if
 
                // Test again
-               if ((getConfig('file_hash') != '') && (getConfig('master_salt') != '') && (getConfig('pass_scramble') != '')) {
+               if ((isExtensionInstalledAndNewer('sql_patches', '0.3.6')) && (getConfig('file_hash') != '') && (getConfig('master_salt') != '') && (getConfig('pass_scramble') != '')) {
                        // File hash fas generated so we can also file the secret file... hopefully.
                        $hashFile = sprintf("%sinc/.secret/.%s", getConfig('PATH'), getConfig('file_hash'));
                        if (isFileReadable($hashFile)) {
@@ -807,8 +777,10 @@ INDEX (`ip`)
                        }
                } // END - if
 
-               // Transfer words/numbers to constants
-               setConfigEntry('POINTS', getConfig('points_word'));
+               // Transfer words/numbers to constants if config entry is found
+               if (isExtensionInstalledAndNewer('sql_patches', '0.0.3')) {
+                       setConfigEntry('POINTS', getConfig('points_word'));
+               } // END - if
                break;
 
        default: // Unknown extension mode
index 40b6734..39b7558 100644 (file)
@@ -185,7 +185,7 @@ ORDER BY
 
 // "Registers" a new filter function
 function registerFilter ($filterName, $filterFunction, $silentAbort = true, $force = false, $dry_run = false) {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction);
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - ENTERED!');
 
        // Extend the filter function name
        $filterFunction = sprintf("FILTER_%s", strtoupper($filterFunction));
@@ -216,11 +216,13 @@ function registerFilter ($filterName, $filterFunction, $silentAbort = true, $for
                $GLOBALS['cache_array']['filter']['chains'][$filterName][$filterFunction] = 'A';
                $GLOBALS['cache_array']['filter']['counter'][$filterName][$filterFunction] = '0';
        } // END - if
+
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - EXIT!');
 }
 
 // "Unregisters" a filter from the given chain
 function unregisterFilter ($filterName, $filterFunction, $force = false, $dry_run = false) {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry=' . intval($dry_run));
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry=' . intval($dry_run) . ' - ENTERED!');
 
        // Extend the filter function name only if not loaded from database
        if (!isset($GLOBALS['cache_array']['filter']['loaded'][$filterName][$filterFunction])) {
@@ -240,10 +242,14 @@ function unregisterFilter ($filterName, $filterFunction, $force = false, $dry_ru
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'REMOVE: filterName=' . $filterName . ',filterFunction=' . $filterFunction);
                $GLOBALS['cache_array']['filter']['chains'][$filterName][$filterFunction] = 'R';
        } // END - if
+
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry=' . intval($dry_run) . ' - EXIT!');
 }
 
 // "Runs" the given filters, data is optional and can be any type of data
 function runFilterChain ($filterName, $data = null) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',data[]=' . gettype($data) . ' - ENTERED!');
+
        // Is that filter chain there?
        if (!isset($GLOBALS['cache_array']['filter']['chains'][$filterName])) {
                // Log not found filters in debug-mode
@@ -288,6 +294,7 @@ function runFilterChain ($filterName, $data = null) {
        } // END - foreach
 
        // Return the filtered content
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',data[]=' . gettype($data) . ',returnValue[]=' . gettype($returnValue) . ' - EXIT!');
        return $returnValue;
 }
 
index 20b7fee..198067b 100644 (file)
@@ -107,7 +107,7 @@ function FILTER_FLUSH_FILTERS () {
        } // END - if
 
        // Shall we update usage counters (ONLY FOR DEBUGGING!)
-       if (getConfig('update_filter_usage') == 'Y') {
+       if ((isExtensionInstalledAndNewer('sql_patches', '0.6.0')) && (getConfig('update_filter_usage') == 'Y')) {
                // Update all counters
                foreach ($GLOBALS['cache_array']['filter']['counter'] as $filterName => $filterArray) {
                        // Walk through all filters
@@ -166,7 +166,7 @@ function FILTER_REDIRECT_TO_LOGOUT_SQL_PATCHES () {
 // Filter for auto-activation of a extension
 function FILTER_AUTO_ACTIVATE_EXTENSION ($data) {
        // Is this extension always activated?
-       if (getExtensionAlwaysActive() == 'Y') {
+       if (isExtensionAlwaysActive()) {
                // Then activate the extension
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name={$data['ext_name']}<br />");
                doActivateExtension($data['ext_name']);
index 66b0c63..e0bee7f 100644 (file)
@@ -3875,10 +3875,10 @@ function addPageHeaderFooter () {
 
 // Generates meta description for current module and 'what' value
 function generateMetaDescriptionCode () {
-       // Only include from guest area
-       if (getModule() == 'index') {
+       // Only include from guest area and if sql_patches has correct version
+       if ((getModule() == 'index') && (isExtensionInstalledAndNewer('sql_patches', '0.1.6'))) {
                // Construct dynamic description
-               $DESCR = '{?MAIN_TITLE?} '.trim(getConfig('title_middle')) . ' ' . getTitleFromMenu('guest', getWhat());
+               $DESCR = '{?MAIN_TITLE?} ' . trim(getConfig('title_middle')) . ' ' . getTitleFromMenu('guest', getWhat());
 
                // Output it directly
                $GLOBALS['page_header'] .= '<meta name="description" content="' . $DESCR . '" />';
index 594f984..d853f1c 100644 (file)
 // Some security stuff...
 if (!defined('__SECURITY')) {
        die();
-}
-
-// Check for version of sql_patches
-if (isExtensionInstalledAndNewer('sql_patches', '0.3.6')) return false;
+} // END - if
 
 // Check if there is no scrambling string
 if (getConfig('pass_scramble') == '') {
index 2d40fdd..902f21d 100644 (file)
@@ -48,7 +48,7 @@ function FILTER_CACHE_DESTROY_ON_EXT_CHANGE ($data) {
        if (!isCacheInstanceValid()) return $data;
 
        // Remove cache
-       foreach (array('config','extension','modules') as $cache) {
+       foreach (array('config','extension','filter','modules') as $cache) {
                if ($GLOBALS['cache_instance']->loadCacheFile($cache)) $GLOBALS['cache_instance']->removeCacheFile();
        } // END - foreach
 
index aa140d1..c3125cb 100644 (file)
@@ -66,7 +66,7 @@ LIMIT 1",
                ), __FILE__, __LINE__);
 } // END - if
 
-if ((SQL_NUMROWS($result_main) == 1) || (!isGetRequestParameterSet('userid'))) {
+if ((!isGetRequestParameterSet('userid')) || (SQL_NUMROWS($result_main) == 1)) {
        // User found
        if (!isGetRequestParameterSet('userid')) {
                // Output selection form with all confirmed user accounts listed
index 4e9b057..58965f1 100644 (file)
@@ -352,6 +352,7 @@ ORDER BY `ext_name` ASC", __FILE__, __LINE__);
                                                        // Remove cache file (will be auto-created again!)
                                                        if ($GLOBALS['cache_instance']->loadCacheFile('config'))    $GLOBALS['cache_instance']->removeCacheFile();
                                                        if ($GLOBALS['cache_instance']->loadCacheFile('extension')) $GLOBALS['cache_instance']->removeCacheFile();
+                                                       if ($GLOBALS['cache_instance']->loadCacheFile('filter'))    $GLOBALS['cache_instance']->removeCacheFile();
                                                        if ($GLOBALS['cache_instance']->loadCacheFile('modules'))   $GLOBALS['cache_instance']->removeCacheFile();
                                                } // END - if
                                        } elseif (isExtensionInstalled($ext_name)) {
index 1c72555..c9be645 100644 (file)
 // Some security stuff...
 if (!defined('__SECURITY')) {
        die();
-} // END - if
+} elseif (!isExtensionInstalled('sql_patches')) {
+       // Redirect to admin area
+       redirectToUrl('admin.php');
+}
 
 // Generate a tableset for the menu title and content
 loadTemplate('guest_header', false, array('date_time' => generateDateTime(time(), 1)));
index bbdcca0..3ec60ca 100644 (file)
@@ -703,7 +703,7 @@ function fetchUserData ($userid, $column = 'userid') {
 // This patched function will reduce many SELECT queries for the specified or current admin login
 function isAdmin ($adminLogin = '') {
        // No admin in installation phase!
-       if (isInstallationPhase()) {
+       if ((isInstallationPhase()) || (!isAdminRegistered())) {
                return false;
        } // END - if
 
index 5ce89bb..4b128ef 100644 (file)
@@ -14,7 +14,7 @@
        <tr>
                <td align="right">{--ENTER_ADMIN_LOGIN--}:</td>
                <td>
-                       <input type="text" name="login" size="20" maxlength="100" class="admin_normal" value="$content[login]" />
+                       <input type="text" name="login" tabindex="1" size="20" maxlength="100" class="admin_normal" value="$content[login]" />
                </td>
        </tr>
        $content[login_message]
@@ -26,7 +26,7 @@
                        </div>
                </td>
                <td>
-                       <input type="password" name="pass" size="20" maxlength="100" class="admin_normal" />
+                       <input type="password" name="pass" tabindex="2" size="20" maxlength="100" class="admin_normal" />
                </td>
        </tr>
        $content[pass_message]
@@ -37,7 +37,7 @@
                <td class="bottom" align="right">{--SELECT_TIMEOUT--}:</td>
                @TODO Try to move the select box to our generic functions
                <td class="bottom">
-                       <select name="timeout" size="1" class="admin_select">
+                       <select name="timeout" size="1" class="admin_select" tabindex="3">
                                <option value="86400">{--TIMEOUT_ONE_DAY--}</option>
                                <option value="172800">{--TIMEOUT_TWO_DAYS--}</option>
                                <option value="259200">{--TIMEOUT_THREE_DAYS--}</option>