X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fextensions-functions.php;h=4dec81d05fcdf2edb805f58df47f5254fa8c7807;hb=93ccd79d1a3fcb1ee5a101cb6bb670901f154555;hp=9c270f2ff06c669d74a2ee122a4213af8e42f714;hpb=8e1b16ef11efcfd85b52c61f8886bc44e3caa98e;p=mailer.git diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index 9c270f2ff0..4dec81d05f 100644 --- a/inc/extensions-functions.php +++ b/inc/extensions-functions.php @@ -17,7 +17,7 @@ * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * * Copyright (c) 2009 - 2011 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -42,11 +42,12 @@ if (!defined('__SECURITY')) { // Load the extension and maybe found language and function files. function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0.0', $dry_run = false) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_mode=' . $ext_mode . ',ext_ver=' . $ext_ver . ',dry_run=' . intval($dry_run)); // 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)); + debug_report_bug(__FUNCTION__, __LINE__, __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 // Make sure this situation can only happen once @@ -151,19 +152,16 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0.0', $dry_run = fal // Extensions are not always active by default setExtensionAlwaysActive('N'); - // Extension update notes - // @TODO Do we still need this? setExtensionUpdateNotes(''); - // Include the extension file loadCurrentExtensionInclude(); // Is this extension deprecated? - if (isExtensionDeprecated()) { + if ((isExtensionDeprecated()) && (!in_array(getExtensionMode(), array('test', 'update', 'deactivate'))) && (isExtensionActive($ext_name))) { // Deactivate the extension doDeactivateExtension($ext_name); // Abort here - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Extension load aborted, ext_name=' . $ext_name); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Extension load aborted, ext_name=' . $ext_name . ' - Extension is deprecated.'); return false; } // END - if @@ -178,10 +176,10 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0.0', $dry_run = fal 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!'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',task_id=' . $taskId . ',dry_run=' . intval($dry_run) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - ENTERED!'); setCurrentExtensionName($ext_name); // Enable dry-run @@ -197,9 +195,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.'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,taskId=' . $taskId . ',dry_run=' . intval($dry_run) . ',ignoreUpdates=' . intval($ignoreUpdates)); + ///* BUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId=' . $taskId . ',dry_run=' . intval($dry_run) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!'); return true; } // END - if @@ -239,11 +238,11 @@ 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()); @@ -287,17 +286,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 +311,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 +329,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 @@ -358,7 +357,7 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { if (isExtensionInstalledAndNewer('sql_patches', '0.0.6')) { // New way, with CSS //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getThisExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion() . 'ext_css=' . getExtensionHasCss()); - SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`,`ext_has_css`) VALUES ('%s','%s','%s','%s')", + SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`,`ext_active`,`ext_version`,`ext_has_css`) VALUES ('%s','%s','%s','%s')", array( getCurrentExtensionName(), getThisExtensionAlwaysActive(), @@ -368,7 +367,7 @@ function registerExtension ($ext_name, $taskId, $dry_run = false) { } else { // Old way, no CSS //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getThisExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion()); - SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`) VALUES ('%s','%s','%s')", + SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`,`ext_active`,`ext_version`) VALUES ('%s','%s','%s')", array( getCurrentExtensionName(), getThisExtensionAlwaysActive(), @@ -409,14 +408,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 +423,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); @@ -482,6 +483,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 +495,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 +528,7 @@ function isExtensionInstalled ($ext_name) { } // Return status + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isInstalled=' . intval($isInstalled) . ' - EXIT!'); return $isInstalled; } @@ -605,7 +611,7 @@ function getExtensionVersion ($ext_name, $force = false) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - Checking cache ...'); if (isset($GLOBALS['cache_array']['extension']['ext_version'][$ext_name])) { // Load data from cache - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ': CACHE!'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - CACHE!'); $data['ext_version'] = $GLOBALS['cache_array']['extension']['ext_version'][$ext_name]; // Count cache hits @@ -620,16 +626,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 @@ -644,15 +650,25 @@ 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) { +function updateExtension ($ext_name, $ext_ver, $dry_run = false, $ignoreDependencies = 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) . ',ignoreDependencies=' . intval($ignoreDependencies) . ' - 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, $ignoreDependencies)) && ($dry_run === false)) { + // This is fine but needs logging ATM + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in update phase, all fine.'); + ///* BUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in update phase, please investigate!'); + return true; + } // END - if + // Init arrays initExtensionSqls(); initExtensionNotes(); @@ -668,7 +684,7 @@ 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 (-1 for making 0.0 -> 0.0.0 switch work) $start = -1; @@ -702,19 +718,19 @@ 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(), true); } else { // Register new extension - $test = registerExtension($ext_depend, 0, isExtensionDryRun(), false); + $processResult = registerExtension($ext_depend, 0, isExtensionDryRun()); } } // END - if } // END - foreach - // Set extension version here - setCurrentExtensionVersion($ext_ver); - // Set name back setCurrentExtensionName($ext_name); + + // Set extension version here + setCurrentExtensionVersion($ext_ver); } // END - if // Add notes @@ -741,10 +757,12 @@ 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) . ',ignoreDependencies=' . intval($ignoreDependencies) . ' - EXIT!'); } // Output verbose SQL table for extension -function addExtensionVerboseSqlTable ($title = '{--ADMIN_SQLS_EXECUTED_ON_REMOVAL--}', $dashed = '', $switch = false, $width = '100%') { +function addExtensionVerboseSqlTable ($title = '{--ADMIN_SQLS_EXECUTED_ON_REMOVAL--}') { // Empty title? if (empty($title)) { // Then abort here @@ -786,8 +804,6 @@ function addExtensionVerboseSqlTable ($title = '{--ADMIN_SQLS_EXECUTED_ON_REMOVA // Prepare content for template $content = array( - 'width' => $width, - 'dashed' => $dashed, 'title' => $title, 'rows' => $OUT ); @@ -855,7 +871,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? @@ -932,7 +948,7 @@ 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); + debug_report_bug(__FUNCTION__, __LINE__, 'Tried to deactivate non-installed extension ' . $ext_name . ',getExtensionMode()=' . getExtensionMode()); } // END - if // Activate the extension @@ -945,6 +961,9 @@ function doDeactivateExtension ($ext_name) { // Create new task (we ignore the task id here) createExtensionDeactivationTask($ext_name); + // Rebuild cache + rebuildCache('extension', 'extension'); + // Notify the admin sendAdminNotification( '{--ADMIN_EXTENSION_DEACTIVATED_SUBJECT--}', @@ -1001,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", @@ -1218,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 @@ -1287,25 +1306,27 @@ function isExtensionUpdateDependenciesInitialized () { } // Checks wether an update is already running for given extension -function isExtensionUpdateRunning ($ext_name) { +function isExtensionUpdateRunning ($ext_name, $ignoreDependencies = false) { // Current and given extensions means whole array + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName() . ',ext_name=' . $ext_name . ',ignoreDependencies=' . intval($ignoreDependencies) . ' - ENTERED!'); if ($ext_name == getCurrentExtensionName()) { // Default is not found $isRunning = false; // Walk through whole array - foreach ($GLOBALS['ext_running_updates'] as $ext1=>$depends) { + 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)) && ($ignoreDependencies === false))) { // 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=true - FOUND!'); 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 . ',ignoreDependencies=' . intval($ignoreDependencies) . ', isRunning=' . intval($isRunning) . ' - ALT-EXIT!'); return $isRunning; } // END - if @@ -1313,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 . ',ignoreDependencies=' . intval($ignoreDependencies) . ', isRunning=' . intval($isRunning) . ' - EXIT!'); return $isRunning; } @@ -1328,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()]); } @@ -1361,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'; } @@ -1371,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']; } @@ -1403,8 +1424,8 @@ function getExtensionVersionHistory () { // Setter for EXT_UPDATE_NOTES function setExtensionUpdateNotes ($updateNotes, $ext_ver = '') { - // . '/' . getCurrentExtensionVersion() - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getCurrentExtensionName()=' . getCurrentExtensionName() . ',getExtensionMode()=' . getExtensionMode() . ',ext_ver=' . $ext_ver . ',updateNotes()=' . strlen($updateNotes)); + // + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getCurrentExtensionName()=' . getCurrentExtensionName() . ',getExtensionMode()=' . getExtensionMode() . ',ext_ver=' . $ext_ver . '/' . getCurrentExtensionVersion() . ',updateNotes()=' . strlen($updateNotes)); if (empty($ext_ver)) { $GLOBALS['ext_update_notes'][getCurrentExtensionName()][getCurrentExtensionVersion()] = (string) $updateNotes; } else { @@ -1634,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 @@ -1665,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 @@ -1731,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 @@ -1748,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.'); @@ -1779,7 +1792,7 @@ function addAdminMenuSql ($action, $what, $title, $descr, $sort) { // 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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('%s',NULL,'%s','%s',%s)", $action, $title, $descr, @@ -1787,7 +1800,7 @@ function addAdminMenuSql ($action, $what, $title, $descr, $sort) { ); } else { // Add sub menu - $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES('%s','%s','%s','%s',%s)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('%s','%s','%s','%s',%s)", $action, $what, $title, @@ -1805,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) ); } @@ -1834,32 +1843,28 @@ 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,title=%s,locked=%s,visible=%s detected.", $action, $what, $title, $locked, $visible)); + logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double guest menu action=%s,what=%s,title=%s detected.", $action, $what, $title)); } } // 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) ); } @@ -1868,7 +1873,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,title=%s,visivle=%s,locked=%s detected.", $action, $what, $title, $visible, $locked)); + logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double member menu action=%s,what=%s,title=%s detected.", $action, $what, $title)); } } @@ -1879,7 +1884,7 @@ function addSponsorMenuSql ($action, $what, $title, $active, $sort) { // 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)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('%s',NULL,'%s','%s',%s)", $action, $title, $active, @@ -1887,7 +1892,7 @@ function addSponsorMenuSql ($action, $what, $title, $active, $sort) { ); } else { // Add sub menu - $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES('%s','%s','%s','%s',%s)", + $sql = sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('%s','%s','%s','%s',%s)", $action, $what, $title, @@ -1939,7 +1944,7 @@ function addConfigChangeSql ($oldColumnName, $newColumnName, $columnSql) { // @TODO This should be rewrittten to allow, more development states, e.g. 'planing','alpha','beta','beta2','stable' function enableExtensionProductive ($isProductive = true) { // Log debug message - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ext_name=%s,isProductive=%d", getCurrentExtensionName(), intval($isProductive))); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',isProductive=', intval($isProductive)); // Set it $GLOBALS['ext_productive'][getCurrentExtensionName()] = (bool) $isProductive; @@ -1953,6 +1958,7 @@ function isExtensionProductive ($ext_name = '') { // Get current extension name $ext_name = getCurrentExtensionName(); } // END - if + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - ENTERED!'); // Do we have cache? if (!isset($GLOBALS[__FUNCTION__][$ext_name])) { @@ -1966,10 +1972,8 @@ function isExtensionProductive ($ext_name = '') { $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[__FUNCTION__][$ext_name]))); - // Return result + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isProductive=', intval($GLOBALS[__FUNCTION__][$ext_name]) . ' - EXIT!'); return $GLOBALS[__FUNCTION__][$ext_name]; } @@ -1982,7 +1986,7 @@ function markExtensionAsLoaded ($ext_name) { } // END - if // Mark it - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ext_name=%s,ext_loaded=true", $ext_name)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_loaded=true'); $GLOBALS['ext_loaded']['ext_name'][$ext_name] = true; }