X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fextensions-functions.php;h=d1c46faf4268dd058cbff96565b9b3b3cff96954;hp=463bf53ec7be4718e665008d37841cbef4663805;hb=98e44adab9035e30efe78181b76d78c6e13ba574;hpb=3e285b5aa39afe4f71664090909185a4c71fb625 diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index 463bf53ec7..d1c46faf42 100644 --- a/inc/extensions-functions.php +++ b/inc/extensions-functions.php @@ -41,7 +41,7 @@ if (!defined('__SECURITY')) { } // END - if // Load the extension and maybe found language and function files. -function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false) { +function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.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')))) { @@ -66,7 +66,7 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false setCurrentExtensionVersion($ext_ver); } else { // Set it to 0.0 by default - setCurrentExtensionVersion('0.0'); + setCurrentExtensionVersion('0.0.0'); // Is the extension installed? if ((isExtensionInstalled($ext_name)) && ($ext_mode != 'register')) { @@ -75,7 +75,7 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false } // END - if // In all but test-mode we need these messages to debug! Please report all (together, e.g.) - if (($ext_mode != 'test') && (getCurrentExtensionVersion() == '0.0')) { + if (($ext_mode != 'test') && (getCurrentExtensionVersion() == '0.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 @@ -178,8 +178,8 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false return true; } -// Registeres an extension and possible update depencies -function registerExtension ($ext_name, $taskId, $dry_run = false) { +// Registers an extension and possible update dependencies +function registerExtension ($ext_name, $taskId, $dry_run = false, $ignoreUpdates = false) { // Set current extension name //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',task_id=' . $taskId . ',dry_run=' . intval($dry_run) . ' - ENTERED!'); setCurrentExtensionName($ext_name); @@ -197,9 +197,10 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { } // END - if // When this extension is already in registration/update phase, all is fine - if ((isExtensionRegistrationRunning($ext_name)) || (isExtensionUpdateRunning($ext_name))) { + 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.'); + ///* BUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId=' . $taskId . ',dry_run=' . intval($dry_run) . ' - Please investigate!'); return true; } // END - if @@ -239,15 +240,15 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { // Init variables $ret = false; - $test = false; + $processResult = false; initIncludePool('extension'); // By default we have no failures - setExtensionReportsFailure(false); + enableExtensionReportingFailure(); // Does this extension exists? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); - if (loadExtension(getCurrentExtensionName(), 'register', '0.0', isExtensionDryRun())) { + if (loadExtension(getCurrentExtensionName(), 'register', '0.0.0', isExtensionDryRun())) { // Set current extension name again setCurrentExtensionName($ext_name); @@ -287,17 +288,17 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { // 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... - $task = determineExtensionTaskId($ext_update); + $taskId = determineExtensionTaskId($ext_update); // Entry found? - if ($task > 0) { + if ($taskId > 0) { // Try to register the extension - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ':ext_update=' . $ext_update . ',taskId=' . $task); - $test = registerExtension($ext_update, $task, isExtensionDryRun(), false); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_update=' . $ext_update . ',taskId=' . $taskId . ',isExtensionDryRun()=' . isExtensionDryRun()); + $processResult = registerExtension($ext_update, $taskId, isExtensionDryRun(), true); // Reset extension name setCurrentExtensionName($ext_name); - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',test=' . intval($test)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_update=' . $ext_update . ',processResult=' . intval($processResult)); } // END - if } elseif ($ext_ver != getCurrentExtensionVersion()) { // Ok, update this extension now @@ -312,14 +313,14 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',currVer=' . getCurrentExtensionVersion()); // All okay! - $test = true; + $processResult = true; } else { // Nothing to register / update before... - $test = true; + $processResult = true; } } else { // Required file for update does not exists! - $test = true; + $processResult = true; // But this is fine for the first time... } @@ -330,19 +331,19 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { // Is there no update? if (countExtensionUpdateDependencies(getCurrentExtensionName()) == 0) { // Then test is passed! - $test = true; + $processResult = true; } // END - if // Switch back to register mode setExtensionMode('register'); // Remains true if extension registration reports no failures - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',test=' . intval($test)); - $test = (($test === true) && (getExtensionReportsFailure() === false)); - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',test=' . intval($test)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',processResult=' . intval($processResult)); + $processResult = (($processResult === true) && (isExtensionReportingFailure() === false)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',processResult=' . intval($processResult)); // Does everthing before wents ok? - if ($test === true) { + if ($processResult === true) { // "Dry-run-mode" activated? if ((isExtensionDryRun() === false) && (!isExtensionOnRemovalList())) { // Init SQLs and transfer ext->generic @@ -409,14 +410,14 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { $ret = false; } } elseif (($taskId > 0) && (getCurrentExtensionName() != '')) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); // Remove task from system when id and extension's name is valid + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `id`=%s AND `status`='NEW' LIMIT 1", array(bigintval($taskId)), __FUNCTION__, __LINE__); } // Return status code - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ',test=' . intval($test) . ' - EXIT!'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ',processResult=' . intval($processResult) . ' - EXIT!'); return $ret; } @@ -424,7 +425,9 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { // @TODO Change from ext_id to ext_name (not just even the variable! ;-) ) function doExtensionSqls ($ext_id, $load_mode) { // This shall never do a non-admin user! - if (!isAdmin()) return false; + if (!isAdmin()) { + return false; + } // END - if // Get extension's name $ext_name = getExtensionName($ext_id); @@ -446,7 +449,7 @@ function doExtensionSqls ($ext_id, $load_mode) { // Load extension in detected mode //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name[' . $ext_id . ']=' . getCurrentExtensionName() . ',load_mode=' . $load_mode); - loadExtension(getCurrentExtensionName(), $load_mode, '0.0', false); + loadExtension(getCurrentExtensionName(), $load_mode, '0.0.0', false); // Init these SQLs initSqls(); @@ -482,6 +485,7 @@ function doExtensionSqls ($ext_id, $load_mode) { // Check wether the given extension is installed function isExtensionInstalled ($ext_name) { // We don't like empty extension names here + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - ENTERED!'); if (empty($ext_name)) { // Please fix them all debug_report_bug(__FUNCTION__, __LINE__, 'ext_name is empty.'); @@ -493,25 +497,28 @@ function isExtensionInstalled ($ext_name) { // Check if there is a cache entry if (isset($GLOBALS['ext_is_installed'][$ext_name])) { // Use cache built from below queries + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - CACHE!'); $isInstalled = $GLOBALS['ext_is_installed'][$ext_name]; } elseif (isset($GLOBALS['cache_array']['extension']['ext_id'][$ext_name])) { // Found! + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - FOUND!'); $isInstalled = true; // Count cache hits incrementStatsEntry('cache_hits'); } elseif ((isInstallationPhase())) { // Extensions are all inactive/not installed during installation + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - installion phase'); } else { // 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); + // Log debug message + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_id=' . $ext_id . ',isInstalled=' . intval($isInstalled)); + // Is it installed, then cache the entry if ($isInstalled === true) { // Dummy call (get is okay here) @@ -523,6 +530,7 @@ function isExtensionInstalled ($ext_name) { } // Return status + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isInstalled=' . intval($isInstalled) . ' - EXIT!'); return $isInstalled; } @@ -620,16 +628,16 @@ function getExtensionVersion ($ext_name, $force = false) { if (SQL_NUMROWS($result) == 1) { // Load entry $data = SQL_FETCHARRAY($result); + + // Set cache + $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $data['ext_version']; } elseif (isDebugModeEnabled()) { - // Not found, please report all - debug_report_bug(__FUNCTION__, __LINE__, sprintf(": Cannot find extension %s in database!", $ext_name)); + // Not found, may happen while an extension is uninstalled + logDebugMessage(__FUNCTION__, __LINE__, sprintf("Cannot find extension %s in database!", $ext_name)); } // Free result SQL_FREERESULT($result); - - // Set cache - $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $data['ext_version']; } // Extension version should not be invalid @@ -646,13 +654,22 @@ function getExtensionVersion ($ext_name, $force = false) { // Updates a given extension with current extension version to latest version function updateExtension ($ext_name, $ext_ver, $dry_run = false) { // Only admins are allowed to update extensions + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_ver=' . $ext_ver . ',dry_run=' . intval($dry_run) . ' - ENTERED!'); if ((!isAdmin()) || (empty($ext_name))) { - return false; + // Called as non-admin or empty extension + debug_report_bug(__FUNCTION__, __LINE__, 'Called as non-admin (isAdmin()=' . intval(isAdmin()) . '), or empty extension name. ext_name=' . $ext_name); } // END - if // Set current SQL name setCurrentExtensionName($ext_name); + // Is this extension update already running? + if (isExtensionUpdateRunning($ext_name)) { + // This is fine but needs logging ATM + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in update phase, all fine.'); + return true; + } // END - if + // Init arrays initExtensionSqls(); initExtensionNotes(); @@ -668,10 +685,13 @@ function updateExtension ($ext_name, $ext_ver, $dry_run = false) { initExtensionSqls(); // Check if version is updated - //* DEBUG: */ debugOutput(getCurrentExtensionName() . '/' . $ext_name . ':' . getThisExtensionVersion() . '/' . $ext_ver . '/' . intval(is_array($history))); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, getCurrentExtensionName() . '/' . $ext_name . ':' . getThisExtensionVersion() . '/' . $ext_ver . '/' . intval(is_array($history))); if (((getThisExtensionVersion() != $ext_ver) || (isExtensionDryRun())) && (is_array($history))) { - // Search for starting point - $start = array_search($ext_ver, $history); + // Search for starting point (-1 for making 0.0 -> 0.0.0 switch work) + $start = -1; + if ($ext_ver != '0.0') { + $start = array_search($ext_ver, $history); + } // END - if // And load SQL queries in order of version history for ($idx = ($start + 1); $idx < count($history); $idx++) { @@ -699,10 +719,10 @@ function updateExtension ($ext_name, $ext_ver, $dry_run = false) { // Is the extension there? if (isExtensionInstalled($ext_depend)) { // Update another extension first! - $test = updateExtension($ext_depend, getExtensionVersion($ext_depend), isExtensionDryRun()); + $processResult = updateExtension($ext_depend, getExtensionVersion($ext_depend), isExtensionDryRun()); } else { // Register new extension - $test = registerExtension($ext_depend, 0, isExtensionDryRun(), false); + $processResult = registerExtension($ext_depend, 0, isExtensionDryRun()); } } // END - if } // END - foreach @@ -738,14 +758,16 @@ function updateExtension ($ext_name, $ext_ver, $dry_run = false) { runFilterChain('extension_update', getCurrentExtensionName()); } // END - if } // END - if + + //* DEBUG: */logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_ver=' . $ext_ver . ',dry_run=' . intval($dry_run) . ' - EXIT!'); } // Output verbose SQL table for extension -function addExtensionVerboseSqlTable ($title = '', $dashed = '', $switch = false, $width = '100%') { +function addExtensionVerboseSqlTable ($title = '{--ADMIN_SQLS_EXECUTED_ON_REMOVAL--}', $dashed = '', $switch = false, $width = '100%') { // Empty title? if (empty($title)) { - // Then fix it to default - $title = '{--ADMIN_SQLS_EXECUTED_ON_REMOVAL--}'; + // Then abort here + debug_report_bug(__FUNCTION__, __LINE__, 'title is empty.'); } // END - if // Init variables @@ -852,7 +874,7 @@ 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 `id` AS `ext_id` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", array($ext_name), __FUNCTION__, __LINE__); // Is the entry there? @@ -998,7 +1020,7 @@ function createNewExtensionTask ($ext_name) { // Not installed and do we have created a task for the admin? if (($taskId == '0') && (!isExtensionInstalled($ext_name))) { // Set default message if ext-foo is missing - $message = getMaskedMessage('ADMIN_EXTENSION_TEXT_FILE_MISSING', $ext_name); + $message = '{%message,ADMIN_EXTENSION_TEXT_FILE_MISSING=' . $ext_name . '%}'; // Template file $FQFN = sprintf("%stemplates/%s/html/ext/ext_%s.tpl", @@ -1095,7 +1117,7 @@ function addExtensionNotes ($ext_ver) { // Is do we have verbose output enabled? if ((!isExtensionActive('sql_patches')) || (isVerboseSqlEnabled())) { // Update notes found? - if (isExtensionUpdateNoteSet($ext_ver)) { + if ((isExtensionUpdateNoteSet($ext_ver)) && ($ext_ver != '0.0.0')) { // Update notes found $content = array( 'ver' => $ext_ver, @@ -1104,7 +1126,7 @@ function addExtensionNotes ($ext_ver) { // Reset them setExtensionUpdateNotes('', $ext_ver); - } elseif (in_array($ext_ver, array('0.0', '0.0.0'))) { + } elseif ($ext_ver == '0.0.0') { // Is the extension productive? if (isExtensionProductive(getCurrentExtensionName())) { // Initial release @@ -1215,11 +1237,11 @@ function addExtensionDependency ($updateDepends) { // Is it not yet added? if ((isset($updateDepends, $GLOBALS['ext_running_updates'][getCurrentExtensionName()])) && (in_array($updateDepends, getExtensionUpdatesRunning()))) { /* - * Double-adding isn't fine, too. This may mean that - * addExtensionDependency() was called outside the switch() command in - * the extension's file which requires fixing. + * Double-adding happens when the extension and an update of the same + * extension requires the same other extension again. */ - debug_report_bug(__FUNCTION__, __LINE__, 'updateDepends=' . $updateDepends . ',extensionMode=' . getExtensionMode() . ',currentExtension=' . getCurrentExtensionName() . ' - CALLED TWICE!'); + logDebugMessage(__FUNCTION__, __LINE__, 'updateDepends=' . $updateDepends . ',extensionMode=' . getExtensionMode() . ',currentExtension=' . getCurrentExtensionName() . ' - called twice.'); + return; } // END - if // Add it to the list of extension update depencies map @@ -1286,6 +1308,7 @@ function isExtensionUpdateDependenciesInitialized () { // Checks wether an update is already running for given extension function isExtensionUpdateRunning ($ext_name) { // Current and given extensions means whole array + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ' - ENTERED!'); if ($ext_name == getCurrentExtensionName()) { // Default is not found $isRunning = false; @@ -1293,16 +1316,17 @@ function isExtensionUpdateRunning ($ext_name) { // Walk through whole array foreach ($GLOBALS['ext_running_updates'] as $ext1=>$depends) { // Is it found? - if (($ext1 == $ext_name) || ($isRunning === true)) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext1=' . $ext1 . ',ext_name=' . $ext_name . ',depends=' . print_r($depends, true)); + if (($ext1 == $ext_name) || (in_array($ext_name, $depends))) { // Found $isRunning = true; - logDebugMessage(__FUNCTION__, __LINE__, 'ext1=' . $ext1 . ',ext_name=' . $ext_name . ',isRunning=' . intval($isRunning)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext1=' . $ext1 . ',ext_name=' . $ext_name . ',isRunning=' . intval($isRunning) . ' - ADDED!'); break; } // END - if } // END - foreach // Return result - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning) . ' - EXIT!'); return $isRunning; } // END - if @@ -1310,7 +1334,7 @@ function isExtensionUpdateRunning ($ext_name) { $isRunning = ((isExtensionUpdateDependenciesInitialized()) && (in_array($ext_name, getExtensionRunningUpdates()))); // Return it - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ', isRunning=' . intval($isRunning) . ' - EXIT!'); return $isRunning; } @@ -1325,19 +1349,19 @@ function initExtensionRuningUpdates () { // Getter for EXT_UPDATE_DEPENDS flag function getExtensionUpdateDependencies () { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); return $GLOBALS['ext_update_depends'][getCurrentExtensionName()]; } // Getter for next iterator depency function getExtensionUpdateDependenciesIterator () { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); return ($GLOBALS['ext_update_depends'][getCurrentExtensionName()][getExtensionUpdateIterator()]); } // Counter for extension update depencies function countExtensionUpdateDependencies () { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); return count($GLOBALS['ext_update_depends'][getCurrentExtensionName()]); } @@ -1358,7 +1382,7 @@ function removeExtensionDependency ($ext_name) { // Init iterator for update depencies function initExtensionUpdateIterator () { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); $GLOBALS['ext_depend_iterator'][getCurrentExtensionName()] = '0'; } @@ -1368,23 +1392,23 @@ function getExtensionUpdateIterator () { if (!isset($GLOBALS['ext_depend_iterator'][getCurrentExtensionName()])) initExtensionUpdateIterator(); // Return it - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName().'/'.$GLOBALS['ext_depend_iterator'][getCurrentExtensionName()]); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName().'/'.$GLOBALS['ext_depend_iterator'][getCurrentExtensionName()]); return $GLOBALS['ext_depend_iterator'][getCurrentExtensionName()]; } // Increments the update iterator function incrementExtensionUpdateIterator () { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "currName=".getCurrentExtensionName()); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName()); $GLOBALS['ext_depend_iterator'][getCurrentExtensionName()]++; } // Setter for EXT_REPORTS_FAILURE flag -function setExtensionReportsFailure ($reportsFailure) { +function enableExtensionReportingFailure ($reportsFailure = false) { $GLOBALS['ext_reports_failure'] = (bool) $reportsFailure; } // Getter for EXT_REPORTS_FAILURE flag -function getExtensionReportsFailure () { +function isExtensionReportingFailure () { return $GLOBALS['ext_reports_failure']; } @@ -1631,28 +1655,29 @@ function removeExtensionFromArray () { } // END - if } } // END - foreach + + // Remove from other caches as well + unset($GLOBALS['ext_is_installed'][$ext_name]); + unset($GLOBALS['loaded_extension'][$ext_name]); } // "Getter" for 'extension has a CSS file' (with same name, of course) function getExtensionHasCss () { - // Default is no CSS - $hasCss = 'N'; - - // Construct FQFN for check - $FQFN = sprintf("%stheme/%s/css/%s.css", - getPath(), - getCurrentTheme(), - getCurrentExtensionName() - ); + // Do we have cache? + if (!isset($GLOBALS[__FUNCTION__][getCurrentExtensionName()][getCurrentTheme()])) { + // Construct FQFN for check + $FQFN = sprintf("%stheme/%s/css/%s.css", + getPath(), + getCurrentTheme(), + getCurrentExtensionName() + ); - // Is it there? - if (isFileReadable($FQFN)) { - // Readable, so it is there... - $hasCss = 'Y'; + // Is it there? + $GLOBALS[__FUNCTION__][getCurrentExtensionName()][getCurrentTheme()] = convertBooleanToYesNo(isFileReadable($FQFN)); } // END - if // Return it - return $hasCss; + return $GLOBALS[__FUNCTION__][getCurrentExtensionName()][getCurrentTheme()]; } // Checks wether the given extension has a language file @@ -1662,17 +1687,8 @@ function ifExtensionHasLanguageFile ($ext_name) { // Count cache hits incrementStatsEntry('cache_hits'); } else { - // Not readable is default - $readable = 'N'; - - // Is the language file readable for this extension? - if (isLanguageIncludeReadable($ext_name)) { - // Readable - $readable = 'Y'; - } // END - if - - // Put it in cache - $GLOBALS['cache_array']['extension']['ext_lang'][$ext_name] = $readable; + // Determine it and put it in cache + $GLOBALS['cache_array']['extension']['ext_lang'][$ext_name] = convertBooleanToYesNo(isLanguageIncludeReadable($ext_name)); } // Return result @@ -1728,15 +1744,10 @@ function isExtensionFunctionFileReadable ($ext_name) { $funcsInclude = sprintf("inc/libs/%s_functions.php", $ext_name); // Is this include there? - if ((isFileReadable($funcsInclude)) && (!isExtensionLibraryLoaded($ext_name)) && (getExtensionMode() == 'test')) { - // Cache it! - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_func=Y - FOUND!'); - $GLOBALS['cache_array']['extension']['ext_func'][$ext_name] = 'Y'; - } else { - // Cache it! - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_func=N - NOT FOUND!'); - $GLOBALS['cache_array']['extension']['ext_func'][$ext_name] = 'N'; - } + $isIncludeFound = ((isFileReadable($funcsInclude)) && (!isExtensionLibraryLoaded($ext_name)) && (getExtensionMode() == 'test')); + + // And put in cache, converted + $GLOBALS['cache_array']['extension']['ext_func'][$ext_name] = convertBooleanToYesNo($isIncludeFound); } // Return result @@ -1745,11 +1756,16 @@ function isExtensionFunctionFileReadable ($ext_name) { } // Adds a CREATE TABLE statement if the requested table is not there -function addCreateTableSql ($tableName, $sql) { +function addCreateTableSql ($tableName, $sql, $comment) { // Is the table not there? if (!isSqlTableCreated($tableName)) { // Is not found, so add it - addExtensionSql('CREATE TABLE `{?_MYSQL_PREFIX?}_' . $tableName . '` ' . $sql); + addExtensionSql('CREATE TABLE + `{?_MYSQL_PREFIX?}_' . $tableName . '` (' . $sql . ') +ENGINE = {?_TABLE_TYPE?} +CHARACTER SET utf8 +COLLATE utf8_general_ci +COMMENT ' . "'" . $comment . "'"); } else { // Is already there, which should not happen debug_report_bug(__FUNCTION__, __LINE__, 'The table ' . $tableName . ' is already created which should not happen.'); @@ -1802,27 +1818,23 @@ function addAdminMenuSql ($action, $what, $title, $descr, $sort) { } // Adds a guest menu to the SQL queue if the menu entry is not found -function addGuestMenuSql ($action, $what, $title, $visible, $locked, $sort) { +function addGuestMenuSql ($action, $what, $title, $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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s',NULL,'%s','N','Y',%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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','N','Y',%s)", $action, $what, $title, - $visible, - $locked, bigintval($sort) ); } @@ -1836,27 +1848,23 @@ function addGuestMenuSql ($action, $what, $title, $visible, $locked, $sort) { } // Adds a member menu to the SQL queue if the menu entry is not found -function addMemberMenuSql ($action, $what, $title, $visible, $locked, $sort) { +function addMemberMenuSql ($action, $what, $title, $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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s',NULL,'%s','N','Y',%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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','N','Y',%s)", $action, $what, $title, - $visible, - $locked, bigintval($sort) ); }