X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fextensions-functions.php;h=d918bc5fd96efb9590aaed0e0a800ccab98075be;hp=ed9ead0d9f8e0117ffcc188d579a595a97183c19;hb=6dce4b977517c9a343937c8c63ffd7fd6695a26a;hpb=c3b4eaf29946349ff058691db2dcb615a5379bb2 diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index ed9ead0d9f..d918bc5fd9 100644 --- a/inc/extensions-functions.php +++ b/inc/extensions-functions.php @@ -98,7 +98,7 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false // Is the extension already loaded? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Loading extension ' . $ext_name . ', mode=' . getExtensionMode() . ', ver=' . getCurrentExtensionVersion()); - if ((isset($GLOBALS['ext_loaded']['ext'][$ext_name])) && (getExtensionMode() == 'init')) { + if ((isExtensionLoaded($ext_name)) && (getExtensionMode() == 'init')) { // Debug message logDebugMessage(__FUNCTION__, __LINE__, sprintf("Extension %s already loaded.", $ext_name)); @@ -124,12 +124,12 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false // Do we have cache? if (isExtensionFunctionFileReadable($ext_name)) { // Not yet loaded? - 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]))) { + if ((($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y') || (!isset($GLOBALS['cache_array']['extension']['ext_func'][$ext_name]))) && (!isExtensionLibraryLoaded($ext_name))) { // Construct IFN for functions file $funcsInclude = sprintf("inc/libs/%s_functions.php", $ext_name); // Mark it as loaded - $GLOBALS['ext_loaded']['funcs'][$ext_name] = true; + markExtensionLibraryAsLoaded($ext_name); // Download functions file loadIncludeOnce($funcsInclude); @@ -142,6 +142,9 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false )); } + // Load extension's filter library if present + loadExtensionFilters($ext_name); + // Extensions are not deprecated by default setExtensionDeprecated('N'); @@ -167,7 +170,7 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0', $dry_run = false // Mark it as loaded in normal mode if (getExtensionMode() == '') { // Mark it now... - $GLOBALS['ext_loaded']['ext'][$ext_name] = true; + markExtensionAsLoaded($ext_name); } // END - if // All fine! @@ -341,8 +344,8 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true if ($test === true) { // "Dry-run-mode" activated? if ((isExtensionDryRun() === false) && (!isExtensionOnRemovalList())) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName()); // Init SQLs and transfer ext->generic + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName()); initSqls(); setSqlsArray(getExtensionSqls()); @@ -352,8 +355,8 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true // Register extension //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'insert=' . getCurrentExtensionName() . '/' . getCurrentExtensionVersion() . ' - INSERT!'); if (isExtensionInstalledAndNewer('sql_patches', '0.0.6')) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion() . 'ext_css=' . getExtensionHasCss()); // New way, with CSS + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', 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')", array( getCurrentExtensionName(), @@ -362,8 +365,8 @@ function registerExtension ($ext_name, $taskId, $dry_run = false, $logout = true getExtensionHasCss() ), __FUNCTION__, __LINE__); } else { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion()); // Old way, no CSS + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . getCurrentExtensionName() . ',always_active=' . getExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion()); SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`) VALUES ('%s','%s','%s')", array( getCurrentExtensionName(), @@ -560,7 +563,7 @@ function isExtensionActive ($ext_name) { // Count cache hits incrementStatsEntry('cache_hits'); - } elseif (isset($GLOBALS['ext_loaded'][$ext_name])) { + } elseif (isExtensionLoaded($ext_name)) { // @TODO Extension is loaded, what next? debug_report_bug(__FUNCTION__, __LINE__, 'LOADED:' . $ext_name); } elseif (($ext_name == 'cache') || (!isExtensionInstalled('cache'))) { @@ -653,7 +656,9 @@ 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 - if ((!isAdmin()) || (empty($ext_name))) return false; + if ((!isAdmin()) || (empty($ext_name))) { + return false; + } // END - if // Set current SQL name setCurrentExtensionName($ext_name); @@ -673,7 +678,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: */ debugOutput(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); @@ -798,7 +803,7 @@ function addExtensionVerboseSqlTable ($title = '', $dashed = '', $switch = false $OUT = loadTemplate('admin_extension_sql_table', true, $content); } else { // No addional SQL commands to run - $OUT = loadTemplate('admin_settings_saved', true, '{--ADMIN_NO_ADDITIONAL_SQLS--}'); + $OUT = displayMessage('{--ADMIN_NO_ADDITIONAL_SQLS--}', true); } } // END - if @@ -1006,16 +1011,16 @@ function createNewExtensionTask ($ext_name) { $message = getMaskedMessage('ADMIN_EXTENSION_TEXT_FILE_MISSING', $ext_name); // Template file - $tpl = sprintf("%stemplates/%s/html/ext/ext_%s.tpl", + $FQFN = sprintf("%stemplates/%s/html/ext/ext_%s.tpl", getPath(), getLanguage(), $ext_name ); // Load text for task if found - if (isFileReadable($tpl)) { - // Load extension's own text template (HTML!) - $message = loadTemplate('ext_' . $ext_name, true); + if (isFileReadable($FQFN)) { + // Load extension's description template (but do not compile the code) + $message = loadTemplate('ext_' . $ext_name, true, array(), false); } else { // Write this in debug.log as well logDebugMessage(__FUNCTION__, __LINE__, $message); @@ -1116,7 +1121,7 @@ function addExtensionNotes ($ext_ver) { 'notes' => '{--INITIAL_RELEASE--}' ); } else { - // No update notes found! + // No update notes found $content = array( 'ver' => $ext_ver, 'notes' => '{--NO_UPDATE_NOTES--}' @@ -1288,7 +1293,7 @@ function isExtensionUpdateRunning ($ext_name) { foreach ($GLOBALS['ext_running_updates'] as $ext1=>$depends) { // Is it found? if (($ext1 == $ext_name) || ($isRunning === true)) { - // Found! + // found logDebugMessage(__FUNCTION__, __LINE__, 'ext1=' . $ext1 . ',ext_name=' . $ext_name . ',isRunning=' . intval($isRunning)); $isRunning = true; break; @@ -1720,7 +1725,7 @@ function isExtensionFunctionFileReadable ($ext_name) { $funcsInclude = sprintf("inc/libs/%s_functions.php", $ext_name); // Is this include there? - if ((isFileReadable($funcsInclude)) && (!isset($GLOBALS['ext_loaded']['funcs'][$ext_name])) && (getExtensionMode() == 'test')) { + 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'; @@ -1736,6 +1741,16 @@ function isExtensionFunctionFileReadable ($ext_name) { return ($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y'); } +// Adds a DROP TABLE statement if the requested tabled is there +function addDropTableSql ($table) { + // Is the table there? + if (isSqlTableCreated($table)) { + // Then add it, non-existing tables can be ignored because it will + // happen with every newly installed extension. + addExtensionSql('DROP TABLE `{?_MYSQL_PREFIX?}_' . $table . '`'); + } // END - if +} + // 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 @@ -1906,5 +1921,40 @@ function isExtensionProductive ($ext_name = '') { return $GLOBALS[__FUNCTION__][$ext_name]; } +// Mark extension file as loaded +function markExtensionAsLoaded ($ext_name) { + // Is it already loaded? + if (isExtensionLoaded($ext_name)) { + // Then abort here + debug_report_bug(__FUNCTION__, __LINE__, 'Extension ' . $ext_name . ' is already marked as loaded!'); + } // END - if + + // Mark it + $GLOBALS['ext_loaded']['ext_name'][$ext_name] = true; +} + +// Determine wether the given extension is already loaded +function isExtensionLoaded ($ext_name) { + // Is it there? + return ((isset($GLOBALS['ext_loaded']['ext_name'][$ext_name])) && ($GLOBALS['ext_loaded']['ext_name'][$ext_name] === true)); +} + +// Mark extension's library file as loaded +function markExtensionLibraryAsLoaded ($ext_name) { + // Is it already loaded? + if (isExtensionLibraryLoaded($ext_name)) { + // Then abort here + debug_report_bug(__FUNCTION__, __LINE__, 'Extension library ' . $ext_name . ' is already marked as loaded!'); + } // END - if + + // Mark it + $GLOBALS['ext_loaded']['library'][$ext_name] = true; +} + +// Determine wether the given extension's library is already loaded +function isExtensionLibraryLoaded ($ext_name) { + // Is it there? + return ((isset($GLOBALS['ext_loaded']['library'][$ext_name])) && ($GLOBALS['ext_loaded']['library'][$ext_name] === true)); +} // [EOF] ?>