X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fextensions-functions.php;h=dc7660b24cd40c10b207bc8dad6b3398158821d0;hp=3581bf02270367d59ea3334339f4dd818243b75f;hb=c4d567be2948e4e4baba5977ce12a4320ca54d3d;hpb=c4823d28fd0bd22250b16d73f2034f36fc54abda diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index 3581bf0227..dc7660b24c 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,22 +355,22 @@ 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=' . 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')", array( getCurrentExtensionName(), - getExtensionAlwaysActive(), + getThisExtensionAlwaysActive(), getCurrentExtensionVersion(), 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=' . getThisExtensionAlwaysActive() . ', ext_ver=' . getCurrentExtensionVersion()); SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_extensions` (`ext_name`, `ext_active`, `ext_version`) VALUES ('%s','%s','%s')", array( getCurrentExtensionName(), - getExtensionAlwaysActive(), + getThisExtensionAlwaysActive(), getCurrentExtensionVersion() ), __FUNCTION__, __LINE__); } @@ -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); @@ -1170,13 +1175,13 @@ function setExtensionAlwaysActive ($active) { } // Getter for EXT_ALWAYS_ACTIVE flag -function getExtensionAlwaysActive () { +function getThisExtensionAlwaysActive () { return $GLOBALS['ext_always_active'][getCurrentExtensionName()]; } // Checks wether the current extension is always active -function isExtensionAlwaysActive () { - return (getExtensionAlwaysActive() == 'Y'); +function isThisExtensionAlwaysActive () { + return (getThisExtensionAlwaysActive() == 'Y'); } // Setter for EXT_VERSION flag @@ -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 @@ -1868,6 +1883,18 @@ function addSponsorMenuSql ($action, $what, $title, $active, $sort) { } } +// Add configuration entry if not found for actual extension +function addConfigAddSql ($columnName, $columnSql) { + // Is the column there? + if (!isSqlTableColumnFound('{?_MYSQL_PREFIX?}_config', $columnName)) { + // Not found, so add it + addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `' . $columnName . '` ' . $columnSql); + } else { + // Add debug line + logDebugMessage(__FUNCTION__, __LINE__, 'Configuration entry ' . $columnName . ' already created. columnSql=' . $columnSql); + } +} + // Enables/disables productive mode for current extension (used only while // registration). function enableExtensionProductive ($isProductive = true) { @@ -1906,5 +1933,41 @@ 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] ?>