]> git.mxchange.org Git - mailer.git/blobdiff - inc/extensions-functions.php
Added note for entering alternative prefix
[mailer.git] / inc / extensions-functions.php
index 3a5696cd6b90a77e1472341537133274bb0162fb..08346b041b6902e74af124f24eaa3e73ba26ec6c 100644 (file)
@@ -200,9 +200,9 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate
 
        // When this extension is already in registration/update phase, all is fine
        if ((isExtensionRegistrationRunning($ext_name)) || ((isExtensionUpdateRunning($ext_name)) && ($ignoreUpdates === FALSE))) {
-               // Then abort here with 'true' becaus it is fine
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,taskId=' . $taskId . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates));
-               //* BUG: */ reportBug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId=' . $taskId . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!');
+               // Then abort here with 'true' because it is fine
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates));
+               //* BUG: */ reportBug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!');
                return TRUE;
        } // END - if
 
@@ -216,17 +216,17 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate
        } // END - if
 
        // Is the task id zero? Then we need to auto-fix it here
-       if (((is_null($taskId)) || ($taskId == '0')) && (!isInstallationPhase())) {
+       if ((!isTaskIdValid($taskId)) && (!isInstallationPhase())) {
                // Try to find the task
                $taskId = determineExtensionTaskId(getCurrentExtensionName());
 
                // Still zero and not in dry-run?
-               if (((is_null($taskId)) || ($taskId == '0')) && (!isExtensionDryRun())) {
+               if ((!isTaskIdValid($taskId)) && (!isExtensionDryRun())) {
                        // Now try to create a new task
                        $taskId = createNewExtensionTask(getCurrentExtensionName());
 
                        // Is it still zero?
-                       if ((is_null($taskId)) || ($taskId == '0')) {
+                       if (!isTaskIdValid($taskId)) {
                                // Then request a bug report
                                reportBug(__FUNCTION__, __LINE__, sprintf("%s: task_id is still zero after determineExtensionTaskId/createNewExtensionTask(%s)",
                                        __FUNCTION__,
@@ -356,12 +356,15 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate
                                initSqls();
                                setSqlsArray(getExtensionSqls());
 
-                               // Run installation pre-installation filters
-                               runFilterChain('pre_extension_installed', array('dry_run' => isExtensionDryRun(), 'ext_installing' => TRUE, 'enable_codes' => FALSE));
-
                                // Copy current name to save calls
                                $currentName = getCurrentExtensionName();
 
+                               // Mark it as NOT installed
+                               $GLOBALS['ext_is_installed'][$currentName] = FALSE;
+
+                               // Run installation pre-installation filters
+                               runFilterChain('pre_extension_installed', array('dry_run' => isExtensionDryRun(), 'ext_installing' => TRUE, 'enable_codes' => FALSE));
+
                                // Register extension
                                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'insert=' . $currentName . '/' . getCurrentExtensionVersion() . ' - INSERT!');
                                if (isExtensionInstalledAndNewer('sql_patches', '0.0.6')) {
@@ -389,12 +392,16 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate
                                 * Use the insert id as extension id and "cache" all data for
                                 * this extension for early usage.
                                 */
-                               copyCurrentExtensionDataToCacheArray($ext_name, SQL_INSERTID());
+                               copyExtensionDataToCacheArray($currentName, SQL_INSERTID());
 
                                // Mark it as installed
                                $GLOBALS['ext_is_installed'][$currentName] = TRUE;
 
-                               // Remove cache file(s) if extension is active
+                               /*
+                                * Run filter chain after extension has been "installed" which
+                                * means that the extension has been registered in 'extensions'
+                                * table and marked as "installed".
+                                */
                                runFilterChain('post_extension_installed', array(
                                        'pool'     => 'extension',
                                        'ext_name' => $currentName,
@@ -587,21 +594,20 @@ function isExtensionActive ($ext_name) {
        } elseif (($ext_name == 'cache') || (!isExtensionInstalled('cache'))) {
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'DB! ext_name=' . $ext_name);
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `ext_active` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
+               $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
                        array($ext_name), __FUNCTION__, __LINE__);
 
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
                        // Load entry
                        $data = SQL_FETCHARRAY($result);
+
+                       // Set cache
+                       setExtensionCacheRow($ext_name, $data);
                } // END - if
 
                // Free result
                SQL_FREERESULT($result);
-
-               // Write cache array
-               //* 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!');
@@ -615,6 +621,32 @@ function isExtensionActive ($ext_name) {
        return ($data['ext_active'] == 'Y');
 }
 
+// Sets extension cache row
+function setExtensionCacheRow ($ext_name, &$data) {
+       // Add all
+       foreach ($data as $key => $value) {
+               // Is key=id?
+               if ($key == 'id') {
+                       $data['ext_id'] = $value;
+                       $key == 'ext_id';
+               } // END - if
+
+               // Is key=ext_has_css?
+               if ($key == 'ext_has_css') {
+                       $data['ext_css'] = $value;
+                       $key == 'ext_css';
+               } // END - if
+
+               // Set all entries
+               if ($key == 'ext_name') {
+                       $GLOBALS['cache_array']['extension']['ext_name'][$data['id']] = $value;
+               } else {
+                       // Add ordinary entry
+                       $GLOBALS['cache_array']['extension'][$key][$ext_name] = $value;
+               }
+       } // END - foreach
+}
+
 // Get version from extensions
 function getExtensionVersion ($ext_name, $force = FALSE) {
        // By default no extension is found
@@ -644,7 +676,7 @@ function getExtensionVersion ($ext_name, $force = FALSE) {
                incrementStatsEntry('cache_hits');
        } elseif ((!isCacheInstanceValid()) || (isset($GLOBALS['cache_array']['extension'])) || (!isHtmlOutputMode())) {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `ext_version` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
+               $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
                        array($ext_name), __FUNCTION__, __LINE__);
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ': DB - '.SQL_NUMROWS($result).'');
 
@@ -654,7 +686,7 @@ function getExtensionVersion ($ext_name, $force = FALSE) {
                        $data = SQL_FETCHARRAY($result);
 
                        // Set cache
-                       $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $data['ext_version'];
+                       setExtensionCacheRow($ext_name, $data);
                } elseif (isDebugModeEnabled()) {
                        // Not found, may happen while an extension is uninstalled
                        logDebugMessage(__FUNCTION__, __LINE__, sprintf("Cannot find extension %s in database!", $ext_name));
@@ -897,20 +929,20 @@ function getExtensionId ($ext_name) {
                incrementStatsEntry('cache_hits');
        } else {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `id` AS `ext_id` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1",
+               $result = SQL_QUERY_ESC("SELECT * 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
                        $data = SQL_FETCHARRAY($result);
+
+                       // Set cache
+                       setExtensionCacheRow($ext_name, $data);
                } // END - if
 
                // Free result
                SQL_FREERESULT($result);
-
-               // Cache it
-               $GLOBALS['cache_array']['extension']['ext_id'][$ext_name] = $data['ext_id'];
        }
 
        // Return value
@@ -1035,7 +1067,7 @@ function createNewExtensionTask ($ext_name) {
 
        // Not installed and do we have created a task for the admin?
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId[' . gettype($taskId) . ']=' . $taskId);
-       if (((is_null($taskId)) || ($taskId == '0')) && (!isExtensionInstalled($ext_name))) {
+       if ((!isTaskIdValid($taskId)) && (!isExtensionInstalled($ext_name))) {
                // Set default message if ext-foo is missing
                $message = '{%message,ADMIN_EXTENSION_TEXT_FILE_MISSING=' . $ext_name . '%}';
 
@@ -1073,7 +1105,7 @@ function createExtensionDeactivationTask ($ext_name) {
 
        // Not installed and do we have created a task for the admin?
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId[' . gettype($taskId) . ']=' . $taskId);
-       if (((is_null($taskId)) || ($taskId == '0')) && (isExtensionInstalled($ext_name))) {
+       if ((!isTaskIdValid($taskId)) && (isExtensionInstalled($ext_name))) {
                // Task not created so add it
                $taskId = createNewTask($subject, SQL_ESCAPE(loadTemplate('task_EXTENSION_deactivated', TRUE, $ext_name)), 'EXTENSION_DEACTIVATION');
        } // END - if
@@ -2092,32 +2124,20 @@ function addExtensionDropTableIndexSql ($tableName, $indexName) {
 
 // Add configuration entry if not found for actual extension
 function addConfigAddSql ($columnName, $columnSql) {
-       // Is the column there?
-       if (!ifSqlTableColumnExists('{?_MYSQL_PREFIX?}_config', $columnName)) {
-               // Not found, so add it
-               addExtensionAddTableColumnSql('config', $columnName, $columnSql);
-       } elseif (isDebugModeEnabled()) {
-               // Add debug line
-               logDebugMessage(__FUNCTION__, __LINE__, 'Configuration entry ' . $columnName . ' already created. columnSql=' . $columnSql);
-       }
+       // Call inner function
+       addExtensionAddTableColumnSql('config', $columnName, $columnSql);
 }
 
 // Drop configuration entry if found for actual extension
 function addConfigDropSql ($columnName) {
-       // Is the column there?
-       if (ifSqlTableColumnExists('{?_MYSQL_PREFIX?}_config', $columnName)) {
-               // Found, so add it
-               addExtensionDropTableColumnSql('config', $columnName);
-       } elseif (isDebugModeEnabled()) {
-               // Add debug line, reportBug() would cause some extenion updates fail
-               logDebugMessage(__FUNCTION__, __LINE__, 'Configuration entry ' . $columnName . ' not found.');
-       }
+       // Call inner function
+       addExtensionDropTableColumnSql('config', $columnName);
 }
 
 // Change configuration entry for actual extension
 function addConfigChangeSql ($oldColumnName, $newColumnName, $columnSql) {
        // Add the SQL statement
-       addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_config` CHANGE `' . $oldColumnName . '` `' . $newColumnName . '` ' . $columnSql);
+       addExtensionChangeTableColumnSql('config', $oldColumnName, $newColumnName, $columnSql);
 }
 
 /**
@@ -2254,15 +2274,28 @@ function isExtensionLibraryLoaded ($ext_name) {
 // Copies the given extension's data to cache_array (USE THIS ONLY IN REGISTRATION PHASE!)
 function copyExtensionDataToCacheArray ($ext_name, $ext_id) {
        // Copy all data
-       $GLOBALS['cache_array']['extension']['ext_id'][$currentName]         = $ext_id;
-       $GLOBALS['cache_array']['extension']['ext_name'][$ext_id]            = $currentName;
-       $GLOBALS['cache_array']['extension']['ext_version'][$currentName]    = getCurrentExtensionVersion();
-       $GLOBALS['cache_array']['extension']['ext_active'][$currentName]     = getThisExtensionAlwaysActive();
-       $GLOBALS['cache_array']['extension']['ext_lang'][$currentName]       = convertBooleanToYesNo(isExtensionLanguageFileReadable($currentName));
-       $GLOBALS['cache_array']['extension']['ext_func'][$currentName]       = convertBooleanToYesNo(isExtensionFunctionFileReadable($currentName));
-       $GLOBALS['cache_array']['extension']['ext_menu'][$currentName]       = convertBooleanToYesNo(ifModuleHasMenu($currentName));
-       $GLOBALS['cache_array']['extension']['ext_css'][$currentName]        = convertBooleanToYesNo(getExtensionHasCss());
-       $GLOBALS['cache_array']['extension']['ext_deprecated'][$currentName] = 'N';
+       $GLOBALS['cache_array']['extension']['ext_id'][$ext_name]         = $ext_id;
+       $GLOBALS['cache_array']['extension']['ext_name'][$ext_id]         = $ext_name;
+       $GLOBALS['cache_array']['extension']['ext_version'][$ext_name]    = getCurrentExtensionVersion();
+       $GLOBALS['cache_array']['extension']['ext_active'][$ext_name]     = getThisExtensionAlwaysActive();
+       $GLOBALS['cache_array']['extension']['ext_lang'][$ext_name]       = convertBooleanToYesNo(isExtensionLanguageFileReadable($ext_name));
+       $GLOBALS['cache_array']['extension']['ext_func'][$ext_name]       = convertBooleanToYesNo(isExtensionFunctionFileReadable($ext_name));
+       $GLOBALS['cache_array']['extension']['ext_menu'][$ext_name]       = convertBooleanToYesNo(ifModuleHasMenu($ext_name));
+       $GLOBALS['cache_array']['extension']['ext_css'][$ext_name]        = convertBooleanToYesNo(getExtensionHasCss());
+       $GLOBALS['cache_array']['extension']['ext_deprecated'][$ext_name] = 'N';
+}
+
+// Checks if given task id is valid
+function isTaskIdValid ($taskId) {
+       // Is there cache?
+       if (!isset($GLOBALS[__FUNCTION__][$taskId])) {
+               // Determine it
+               $GLOBALS[__FUNCTION__][$taskId] = ((!is_null($taskId)) && ($taskId > 0));
+       } // END - if
+
+       // Return "cached" value
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'taskId[' . gettype($taskId) . ']=' . intval($taskId) . ',isValid=' . intval($GLOBALS[__FUNCTION__][$taskId]));
+       return $GLOBALS[__FUNCTION__][$taskId];
 }
 
 // [EOF]