]> git.mxchange.org Git - mailer.git/blobdiff - inc/extensions-functions.php
Installer content encapsulated in inc/install-functions.php
[mailer.git] / inc / extensions-functions.php
index 9abe929fef108e1fa1aa0f1dfcda87d1347488a0..6948e9b74a1369d1817c532b338aa409343a044a 100644 (file)
@@ -43,9 +43,11 @@ if (!defined('__SECURITY')) {
 } // END - if
 
 // Load the extension and maybe found language and function files.
-function loadExtension ($ext_name, $ext_mode, $ext_ver = '', $dry_run = false) {
-       // If this happens twice, we need the bug report from you, except for updates/tests
+function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false) {
+       // Loading an extension in same mode, but not test/update, twice is not
+       // good, so is the extension $ext_name already loaded in mode $ext_mode?
        if ((isset($GLOBALS['loaded_extension'][$ext_name][$ext_mode])) && (!in_array($ext_mode, array('update', 'test')))) {
+               // If this happens twice, we need the bug report from you, except for updates/tests
                debug_report_bug(__FUNCTION__, __LINE__, '() 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
 
@@ -65,13 +67,19 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '', $dry_run = false) {
                // Set current extension version
                setCurrentExtensionVersion($ext_ver);
        } else {
-               // Set it to 0.0
+               // Set it to 0.0 by default
                setCurrentExtensionVersion('0.0');
 
+               // Is the extension installed?
+               if ((isExtensionInstalled($ext_name)) && ($ext_mode != 'register')) {
+                       // Get extension's version
+                       setCurrentExtensionVersion(getExtensionVersion($ext_name));
+               } // END - if
+
                // 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));
+               if (($ext_mode != 'test') && (getCurrentExtensionVersion() == '0.0')) {
+                       // Abort here, this must now always be set!
+                       debug_report_bug(__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
        }
 
@@ -237,7 +245,7 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true
 
        // Does this extension exists?
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName());
-       if (loadExtension(getCurrentExtensionName(), 'register', '', isExtensionDryRun())) {
+       if (loadExtension(getCurrentExtensionName(), 'register', '0.0', isExtensionDryRun())) {
                // Set current extension name again
                setCurrentExtensionName($ext_name);
 
@@ -368,6 +376,10 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true
 
                                // Use the insert id as extension id and cache it for early usage
                                $GLOBALS['cache_array']['extension']['ext_id'][getCurrentExtensionName()] = SQL_INSERTID();
+                               $GLOBALS['cache_array']['extension']['ext_name'][SQL_INSERTID()] = getCurrentExtensionName();
+
+                               // Mark it as installed
+                               $GLOBALS['ext_is_installed'][getCurrentExtensionName()] = true;
 
                                // Remove cache file(s) if extension is active
                                runFilterChain('post_extension_installed', array(
@@ -380,9 +392,6 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true
                                initExtensionSqls(true);
                                initExtensionNotes(true);
 
-                               // Mark it as installed
-                               $GLOBALS['ext_is_installed'][getCurrentExtensionName()] = true;
-
                                // In normal mode return a true on success
                                $ret = true;
                        } elseif (isExtensionDryRun() === true) {
@@ -442,20 +451,23 @@ function doExtensionSqls ($ext_id, $load_mode) {
        } // END - if
 
        // Init array
-       initExtensionSqls();
+       initExtensionSqls(true);
 
        // By default no SQL has been executed
        $sqlRan = false;
 
        // Load extension in detected mode
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name[' . $ext_id . ']=' . getCurrentExtensionName());
-       loadExtension(getCurrentExtensionName(), $load_mode, '', false);
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name[' . $ext_id . ']=' . getCurrentExtensionName() . ',load_mode=' . $load_mode);
+       loadExtension(getCurrentExtensionName(), $load_mode, '0.0', false);
 
        // Init these SQLs
        initSqls();
        setSqlsArray(getExtensionSqls());
 
+       // Debug message
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'SQLs::count=' . countSqls());
+
+       // Do we have entries?
        if (isSqlsValid()) {
                // Run SQL commands...
                runFilterChain('run_sqls');
@@ -506,6 +518,9 @@ function isExtensionInstalled ($ext_name) {
                // Look in database
                $ext_id = getExtensionId($ext_name);
 
+               // Log debug message
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Extension ' . $ext_name . ' has ext_id=' . $ext_id);
+
                // Do we have a record?
                $isInstalled = ($ext_id > 0);
 
@@ -902,38 +917,44 @@ function isExtensionIdValid ($ext_id) {
 
 // Activate given extension
 function doActivateExtension ($ext_name) {
+       // Is the extension installed?
+       if (!isExtensionInstalled($ext_name)) {
+               // Non-installed extensions cannot be activated
+               debug_report_bug(__FUNCTION__, __LINE__, 'Tried to activate non-installed extension ' . $ext_name);
+       } // END - if
+
        // Activate the extension
        SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_extensions` SET `ext_active`='Y' WHERE `ext_name`='%s' LIMIT 1",
                array($ext_name), __FUNCTION__, __LINE__);
 
-       // Extension has been activated?
-       if (SQL_AFFECTEDROWS() == 1) {
-               // Then run all queries
-               doExtensionSqls(getExtensionId($ext_name), 'activate');
-       } // END - if
+       // Then run all queries
+       doExtensionSqls(getExtensionId($ext_name), 'activate');
 }
 
 // Deactivate given extension
-function doDeactivateExtension($ext_name) {
+function doDeactivateExtension ($ext_name) {
+       // Is the extension installed?
+       if (!isExtensionInstalled($ext_name)) {
+               // Non-installed extensions cannot be activated
+               debug_report_bug(__FUNCTION__, __LINE__, 'Tried to deactivate non-installed extension ' . $ext_name);
+       } // END - if
+
        // Activate the extension
        SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_extensions` SET `ext_active`='N' WHERE `ext_name`='%s' LIMIT 1",
                array($ext_name), __FUNCTION__, __LINE__);
 
-       // Extension has been activated?
-       if (SQL_AFFECTEDROWS() == 1) {
-               // Then run all queries
-               doExtensionSqls(getExtensionId($ext_name), 'deactivate');
+       // Then run all queries
+       doExtensionSqls(getExtensionId($ext_name), 'deactivate');
 
-               // Create new task (we ignore the task id here)
-               createExtensionDeactivationTask($ext_name);
+       // Create new task (we ignore the task id here)
+       createExtensionDeactivationTask($ext_name);
 
-               // Notify the admin
-               sendAdminNotification(
-                       '{--ADMIN_EXTENSION_DEACTIVATED_SUBJECT--}',
-                       'admin_extension_deactivated',
-                       array('ext_name' => $ext_name)
-               );
-       } // END - if
+       // Notify the admin
+       sendAdminNotification(
+               '{--ADMIN_EXTENSION_DEACTIVATED_SUBJECT--}',
+               'admin_extension_deactivated',
+               array('ext_name' => $ext_name)
+       );
 }
 
 // Checks wether the extension is older than given
@@ -1448,6 +1469,7 @@ function initExtensionSqls ($force = false) {
 // Adds SQLs to the SQLs array but "assigns" it with current extension name
 function addExtensionSql ($sql) {
        // Add it
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',ext_version=' . getCurrentExtensionVersion() . ',sql=' . $sql);
        $GLOBALS['ext_sqls'][getCurrentExtensionName()][getCurrentExtensionVersion()][] = $sql;
 }
 
@@ -1750,7 +1772,7 @@ function addAdminMenuSql ($action, $what, $title, $descr, $sort) {
                addExtensionSql($sql);
        } elseif (isDebugModeEnabled()) {
                // Double menus should be located and fixed!
-               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double admin menu action=%s, what=%s detected.", $action, $what));
+               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double admin menu action=%s,what=%s,title=%s detected.", $action, $what, $title));
        }
 }
 
@@ -1784,7 +1806,7 @@ function addGuestMenuSql ($action, $what, $title, $visible, $locked, $sort) {
                addExtensionSql($sql);
        } elseif (isDebugModeEnabled()) {
                // Double menus should be located and fixed!
-               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double guest menu action=%s, what=%s detected.", $action, $what));
+               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double guest menu action=%s,what=%s,title=%s,active=%s detected.", $action, $what, $title, $active));
        }
 }
 
@@ -1818,7 +1840,7 @@ function addMemberMenuSql ($action, $what, $title, $visible, $locked, $sort) {
                addExtensionSql($sql);
        } elseif (isDebugModeEnabled()) {
                // Double menus should be located and fixed!
-               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double member menu action=%s, what=%s detected.", $action, $what));
+               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double member menu action=%s,what=%s,title=%s,visivle=%s,locked=%s detected.", $action, $what, $title, $visible, $locked));
        }
 }
 
@@ -1850,7 +1872,7 @@ function addSponsorMenuSql ($action, $what, $title, $active, $sort) {
                addExtensionSql($sql);
        } elseif (isDebugModeEnabled()) {
                // Double menus should be located and fixed!
-               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double sponsor menu action=%s, what=%s detected.", $action, $what));
+               logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double sponsor menu action=%s,what=%s,title=%s,active=%s detected.", $action, $what, $title, $active));
        }
 }
 
@@ -1874,7 +1896,7 @@ function isExtensionProductive ($ext_name = '') {
        } // END - if
 
        // Do we have cache?
-       if (!isset($GLOBALS['ext_is_productive'][$ext_name])) {
+       if (!isset($GLOBALS[__FUNCTION__][$ext_name])) {
                // Load extension only if not yet loaded
                if (!isset($GLOBALS['ext_productive'][$ext_name])) {
                        // Load extension in test mode
@@ -1882,14 +1904,14 @@ function isExtensionProductive ($ext_name = '') {
                } // END - if
 
                // Determine it
-               $GLOBALS['ext_is_productive'][$ext_name] = ((isset($GLOBALS['ext_productive'][$ext_name])) && ($GLOBALS['ext_productive'][$ext_name] === true));
+               $GLOBALS[__FUNCTION__][$ext_name] = ((isset($GLOBALS['ext_productive'][$ext_name])) && ($GLOBALS['ext_productive'][$ext_name] === true));
        } // END - if
 
        // Log debug message
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ext_name=%s,isProductive=%s", $ext_name, intval($GLOBALS['ext_is_productive'][$ext_name])));
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ext_name=%s,isProductive=%s", $ext_name, intval($GLOBALS[__FUNCTION__][$ext_name])));
 
        // Return result
-       return $GLOBALS['ext_is_productive'][$ext_name];
+       return $GLOBALS[__FUNCTION__][$ext_name];
 }
 
 // [EOF]