]> git.mxchange.org Git - mailer.git/blobdiff - inc/extensions-functions.php
Comments fixed, ext-network continued, fix for mod stats:
[mailer.git] / inc / extensions-functions.php
index 1d9027656f76f07ea216801e24c0a75d484c4b62..e1ccca57d11507a857823d0397eb97f0cadd86bb 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                         *
@@ -92,7 +92,7 @@ function loadExtension ($ext_name, $ext_mode = 'init', $ext_ver = '', $dry_run =
        // Do we have cache?
        if (isExtensionFunctionFileReadable($ext_name)) {
                // Not yet loaded?
-               if (($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y') && (!isset($GLOBALS['ext_loaded']['funcs'][$ext_name]))) {
+               if ((($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y') || (!isset($GLOBALS['cache_array']['extension']['ext_func'][$ext_name]))) && (!isset($GLOBALS['ext_loaded']['funcs'][$ext_name]))) {
                        // Construct FQFN for functions file
                        $funcsInclude = sprintf("inc/libs/%s_functions.php", $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__,
@@ -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?
@@ -275,7 +278,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 +325,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 +437,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 +450,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
@@ -512,9 +520,9 @@ function isExtensionActive ($ext_name) {
 }
 
 // Get version from extensions
-function getExtensionVersion ($ext_name) {
+function getExtensionVersion ($ext_name, $force = false) {
        // By default no extension is found
-       $ext_ver = 'invalid';
+       $ext_ver = 'false';
 
        // Empty extension name should be fixed!
        if (empty($ext_name)) {
@@ -534,7 +542,7 @@ function getExtensionVersion ($ext_name) {
 
                // Count cache hits
                incrementStatsEntry('cache_hits');
-       } elseif ((!isCacheInstanceValid()) || (isset($GLOBALS['cache_array']['extension'])) || (getOutputMode() != '0')) {
+       } elseif ((!isCacheInstanceValid()) || (isset($GLOBALS['cache_array']['extension'])) || (getOutputMode() != 0)) {
                // 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__);
@@ -557,7 +565,7 @@ function getExtensionVersion ($ext_name) {
        }
 
        // Extension version should not be invalid
-       if ($ext_ver == 'invalid') {
+       if (($ext_ver == 'false') && ($force === false)) {
                // Please report this trouble
                debug_report_bug(sprintf("Extension <strong>%s</strong> has empty version!", $ext_name));
        } // END - if
@@ -676,9 +684,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);
 
@@ -757,17 +765,18 @@ function getExtensionName ($ext_id) {
 }
 
 // Get extension id from name
-function getExtensionId ($ext_name, $forceDb = false) {
-       // Init ID number
-       $ret = 0;
+function getExtensionId ($ext_name) {
+       // Init id number
+       $ret = '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];
 
                // 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",
                        array($ext_name), __FUNCTION__, __LINE__);
@@ -776,19 +785,14 @@ function getExtensionId ($ext_name, $forceDb = false) {
                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;
                } // 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] = $ret;
+       }
 
        // Return value
        return $ret;
@@ -887,7 +891,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,7 +904,7 @@ 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);
 
@@ -931,7 +935,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
@@ -989,7 +993,7 @@ function ifModuleHasMenu ($mod, $forceDb = false) {
 // Determines the task id for given extension
 function determineExtensionTaskId ($ext_name) {
        // Default is not found
-       $task_id = 0;
+       $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",
@@ -997,7 +1001,7 @@ function determineExtensionTaskId ($ext_name) {
 
        // Entry found?
        if (SQL_NUMROWS($result) == 1) {
-               // Task found so load task's ID and register extension...
+               // Task found so load task's id and register extension...
                list($task_id) = SQL_FETCHROW($result);
        } // END - if
 
@@ -1011,7 +1015,7 @@ function determineExtensionTaskId ($ext_name) {
 // Determines the task id for given subject
 function determineTaskIdBySubject ($subject) {
        // Default is not found
-       $task_id = 0;
+       $task_id = '0';
 
        // Search for task id
        $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1",
@@ -1019,7 +1023,7 @@ function determineTaskIdBySubject ($subject) {
 
        // Entry found?
        if (SQL_NUMROWS($result) == 1) {
-               // Task found so load task's ID and register extension...
+               // Task found so load task's id and register extension...
                list($task_id) = SQL_FETCHROW($result);
        } // END - if
 
@@ -1036,7 +1040,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 +1141,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 +1234,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 +1395,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 +1451,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
@@ -1576,5 +1580,149 @@ function isExtensionFunctionFileReadable ($ext_name) {
        return ($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y');
 }
 
+// Adds an admin menu to the SQL queue of the menu entry is not found
+function addAdminMenuSql ($action, $what, $title, $descr, $sort) {
+       // Now check if this menu is there
+       if (!isMenuActionValid('admin', $action, $what)) {
+               // Is what null?
+               if (is_null($what)) {
+                       // Add main menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES('%s',NULL,'%s','%s',%s)",
+                               $action,
+                               $title,
+                               $descr,
+                               bigintval($sort)
+                       );
+               } else {
+                       // Add sub menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES('%s','%s','%s','%s',%s)",
+                               $action,
+                               $what,
+                               $title,
+                               $descr,
+                               bigintval($sort)
+                       );
+               }
+
+               // Add it to the queue
+               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));
+       }
+}
+
+// Adds a guest menu to the SQL queue if the menu entry is not found
+function addGuestMenuSql ($action, $what, $title, $visible, $locked, $sort) {
+       // Now check if this menu is there
+       if (!isMenuActionValid('guest', $action, $what)) {
+               // Is what null?
+               if (is_null($what)) {
+                       // Add main menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s',NULL,'%s','%s','%s',%s)",
+                               $action,
+                               $title,
+                               $visible,
+                               $locked,
+                               bigintval($sort)
+                       );
+               } else {
+                       // Add sub menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','%s','%s',%s)",
+                               $action,
+                               $what,
+                               $title,
+                               $visible,
+                               $locked,
+                               bigintval($sort)
+                       );
+               }
+
+               // Add it to the queue
+               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));
+       }
+}
+
+// Adds a member menu to the SQL queue if the menu entry is not found
+function addMemberMenuSql ($action, $what, $title, $visible, $locked, $sort) {
+       // Now check if this menu is there
+       if (!isMenuActionValid('member', $action, $what)) {
+               // Is what null?
+               if (is_null($what)) {
+                       // Add main menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s',NULL,'%s','%s','%s',%s)",
+                               $action,
+                               $title,
+                               $visible,
+                               $locked,
+                               bigintval($sort)
+                       );
+               } else {
+                       // Add sub menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','%s','%s',%s)",
+                               $action,
+                               $what,
+                               $title,
+                               $visible,
+                               $locked,
+                               bigintval($sort)
+                       );
+               }
+
+               // Add it to the queue
+               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));
+       }
+}
+
+// Adds a sponsor menu to the SQL queue if the menu entry is not found
+function addSponsorMenuSql ($action, $what, $title, $active, $sort) {
+       // Now check if this menu is there, if no ext-sponsor is installed all is not yet added
+       if ((!isExtensionInstalled('sponsor')) || (!isMenuActionValid('sponsor', $action, $what))) {
+               // Is what null?
+               if (is_null($what)) {
+                       // Add main menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES('%s',NULL,'%s','%s',%s)",
+                               $action,
+                               $title,
+                               $active,
+                               bigintval($sort)
+                       );
+               } else {
+                       // Add sub menu
+                       $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES('%s','%s','%s','%s',%s)",
+                               $action,
+                               $what,
+                               $title,
+                               $active,
+                               bigintval($sort)
+                       );
+               }
+
+               // Add it to the queue
+               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));
+       }
+}
+
+// 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]
 ?>