X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fextensions-functions.php;h=10a4dfc36cb353aff7fe84d14dc617f85d718c00;hb=3360f076d2251f554b2dfb420c18367af363ce2a;hp=59d0d5296cb2909d122b41b811fc7a8cbb784cd9;hpb=f61f2c11ec3d2a68a6663d1dda4f5d1f2ca3383b;p=mailer.git diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index 59d0d5296c..10a4dfc36c 100644 --- a/inc/extensions-functions.php +++ b/inc/extensions-functions.php @@ -73,7 +73,7 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0.0', $isDryRun = FA setCurrentExtensionVersion('0.0.0'); // Is the extension installed? - if ((isExtensionInstalled($ext_name)) && ($ext_mode != 'register')) { + if ((isExtensionInstalled($ext_name)) && ($ext_mode != 'setup')) { // Get extension's version setCurrentExtensionVersion(getExtensionVersion($ext_name)); } // END - if @@ -158,6 +158,9 @@ function loadExtension ($ext_name, $ext_mode, $ext_ver = '0.0.0', $isDryRun = FA // Include the extension file loadCurrentExtensionInclude(); + // Load extra mode files + loadCurrentExtensionModeInclude(); + // Is this extension deprecated? if ((isExtensionDeprecated()) && (!in_array(getExtensionMode(), array('test', 'update', 'deactivate'))) && (isExtensionActive($ext_name))) { // Deactivate the extension @@ -201,7 +204,7 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate // When this extension is already in registration/update phase, all is fine if ((isExtensionRegistrationRunning($ext_name)) || ((isExtensionUpdateRunning($ext_name)) && ($ignoreUpdates === FALSE))) { // Then abort here with 'true' because it is fine - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates)); + /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates)); //* BUG: */ reportBug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!'); return TRUE; } // END - if @@ -216,17 +219,17 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate } // END - if // Is the task id zero? Then we need to auto-fix it here - if ((!isTaskIdValid($taskId)) && (!isInstallationPhase())) { + if ((!isValidId($taskId)) && (!isInstallationPhase())) { // Try to find the task $taskId = determineExtensionTaskId(getCurrentExtensionName()); // Still zero and not in dry-run? - if ((!isTaskIdValid($taskId)) && (!isExtensionDryRun())) { + if ((!isValidId($taskId)) && (!isExtensionDryRun())) { // Now try to create a new task $taskId = createNewExtensionTask(getCurrentExtensionName()); // Is it still zero? - if (!isTaskIdValid($taskId)) { + if (!isValidId($taskId)) { // Then request a bug report reportBug(__FUNCTION__, __LINE__, sprintf("%s: task_id is still zero after determineExtensionTaskId/createNewExtensionTask(%s)", __FUNCTION__, @@ -245,12 +248,12 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate $processResult = FALSE; initIncludePool('extension'); - // By default we have no failures + // By default there is no failure enableExtensionReportingFailure(); // Does this extension exists? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ' - CALLING loadExtension() ...'); - if (loadExtension(getCurrentExtensionName(), 'register', '0.0.0', isExtensionDryRun(), $previousExtension)) { + if (loadExtension(getCurrentExtensionName(), 'setup', '0.0.0', isExtensionDryRun(), $previousExtension)) { // Set current extension name again setCurrentExtensionName($ext_name); @@ -295,7 +298,7 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate // Entry found? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'updateTaskId=' . $updateTaskId . ',isInstallationPhase()=' . intval(isInstallationPhase()) . ',currName=' . getCurrentExtensionName() . ',ext_update=' . $ext_update . ' - CHECKING!'); - if (($updateTaskId > 0) || (isInstallationPhase())) { + if ((isValidId($updateTaskId)) || (isInstallationPhase())) { // Try to register the extension //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',ext_update=' . $ext_update . ',updateTaskId=' . $updateTaskId . ',isExtensionDryRun()=' . intval(isExtensionDryRun())); $processResult = registerExtension($ext_update, $updateTaskId, isExtensionDryRun(), TRUE, $ext_name); @@ -340,7 +343,7 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate } // END - if // Switch back to register mode - setExtensionMode('register'); + setExtensionMode('setup'); // Remains true if extension registration reports no failures //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currName=' . getCurrentExtensionName() . ',processResult=' . intval($processResult)); @@ -392,7 +395,7 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate * Use the insert id as extension id and "cache" all data for * this extension for early usage. */ - copyExtensionDataToCacheArray($currentName, SQL_INSERTID()); + copyExtensionDataToCacheArray($currentName, SQL_INSERT_ID()); // Mark it as installed $GLOBALS['ext_is_installed'][$currentName] = TRUE; @@ -426,7 +429,7 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'currentExtension=' . getCurrentExtensionName()); $ret = FALSE; } - } elseif (($taskId > 0) && (getCurrentExtensionName() != '')) { + } elseif ((isValidId($taskId)) && (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", @@ -503,7 +506,7 @@ function doExtensionSqls ($ext_id, $load_mode) { // Is this the sql_patches? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $ext_id . ',currName=' . getCurrentExtensionName() . ',loadMode=' . $load_mode); - if ((getCurrentExtensionName() == 'sql_patches') && (($load_mode == 'register') || ($load_mode == 'remove'))) { + if ((getCurrentExtensionName() == 'sql_patches') && (($load_mode == 'setup') || ($load_mode == 'remove'))) { // Then redirect to logout //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, ': LOAD!'); redirectToUrl('modules.php?module=admin&logout=1&' . $load_mode . '=sql_patches'); @@ -542,7 +545,7 @@ function isExtensionInstalled ($ext_name) { $ext_id = getExtensionId($ext_name); // Is there a record? - $isInstalled = ($ext_id > 0); + $isInstalled = isValidId($ext_id); // Log debug message //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',ext_id=' . $ext_id . ',isInstalled=' . intval($isInstalled)); @@ -594,21 +597,20 @@ function isExtensionActive ($ext_name) { } elseif (($ext_name == 'cache') || (!isExtensionInstalled('cache'))) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'DB! ext_name=' . $ext_name); // Load from database - $result = SQL_QUERY_ESC("SELECT `ext_active` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", + $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", array($ext_name), __FUNCTION__, __LINE__); // Entry found? if (SQL_NUMROWS($result) == 1) { // Load entry $data = SQL_FETCHARRAY($result); + + // Set cache + setExtensionCacheRow($ext_name, $data); } // END - if // Free result SQL_FREERESULT($result); - - // Write cache array - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . '[DB]: ' . $data['ext_active']); - $GLOBALS['cache_array']['extension']['ext_active'][$ext_name] = $data['ext_active']; } else { // Extension not active! //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ': Not active!'); @@ -622,6 +624,32 @@ function isExtensionActive ($ext_name) { return ($data['ext_active'] == 'Y'); } +// Sets extension cache row +function setExtensionCacheRow ($ext_name, &$data) { + // Add all + foreach ($data as $key => $value) { + // Is key=id? + if ($key == 'id') { + $data['ext_id'] = $value; + $key == 'ext_id'; + } // END - if + + // Is key=ext_has_css? + if ($key == 'ext_has_css') { + $data['ext_css'] = $value; + $key == 'ext_css'; + } // END - if + + // Set all entries + if ($key == 'ext_name') { + $GLOBALS['cache_array']['extension']['ext_name'][$data['id']] = $value; + } else { + // Add ordinary entry + $GLOBALS['cache_array']['extension'][$key][$ext_name] = $value; + } + } // END - foreach +} + // Get version from extensions function getExtensionVersion ($ext_name, $force = FALSE) { // By default no extension is found @@ -651,7 +679,7 @@ function getExtensionVersion ($ext_name, $force = FALSE) { incrementStatsEntry('cache_hits'); } elseif ((!isCacheInstanceValid()) || (isset($GLOBALS['cache_array']['extension'])) || (!isHtmlOutputMode())) { // Load from database - $result = SQL_QUERY_ESC("SELECT `ext_version` FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", + $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", array($ext_name), __FUNCTION__, __LINE__); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ': DB - '.SQL_NUMROWS($result).''); @@ -661,7 +689,7 @@ function getExtensionVersion ($ext_name, $force = FALSE) { $data = SQL_FETCHARRAY($result); // Set cache - $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = $data['ext_version']; + setExtensionCacheRow($ext_name, $data); } elseif (isDebugModeEnabled()) { // Not found, may happen while an extension is uninstalled logDebugMessage(__FUNCTION__, __LINE__, sprintf("Cannot find extension %s in database!", $ext_name)); @@ -904,20 +932,20 @@ 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 * FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", array($ext_name), __FUNCTION__, __LINE__); // Is the entry there? if (SQL_NUMROWS($result) == 1) { // Get the extension's id from database $data = SQL_FETCHARRAY($result); + + // Set cache + setExtensionCacheRow($ext_name, $data); } // END - if // Free result SQL_FREERESULT($result); - - // Cache it - $GLOBALS['cache_array']['extension']['ext_id'][$ext_name] = $data['ext_id']; } // Return value @@ -1019,7 +1047,7 @@ function createExtensionUpdateTask ($adminId, $ext_name, $ext_ver, $notes) { // Is the extension there? if (isExtensionInstalled($ext_name)) { // Check if task is not there - if ($taskId == '0') { + if (!isValidId($taskId)) { // Create extension update-task $taskId = createNewTask($subject, $notes, 'EXTENSION_UPDATE', 0, $adminId); } // END - if @@ -1042,7 +1070,7 @@ function createNewExtensionTask ($ext_name) { // Not installed and do we have created a task for the admin? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId[' . gettype($taskId) . ']=' . $taskId); - if ((!isTaskIdValid($taskId)) && (!isExtensionInstalled($ext_name))) { + if ((!isValidId($taskId)) && (!isExtensionInstalled($ext_name))) { // Set default message if ext-foo is missing $message = '{%message,ADMIN_EXTENSION_TEXT_FILE_MISSING=' . $ext_name . '%}'; @@ -1056,7 +1084,7 @@ function createNewExtensionTask ($ext_name) { // Load text for task if found if (isFileReadable($FQFN)) { // Load extension's description template (but do not compile the code) - $message = loadTemplate('ext_' . $ext_name, TRUE, array(), FALSE); + $message = '{OPEN_TEMPLATE}template,LoadTemplate=ext_' . $ext_name . '{CLOSE_TEMPLATE}'; } else { // Write this in debug.log as well logDebugMessage(__FUNCTION__, __LINE__, $message); @@ -1080,7 +1108,7 @@ function createExtensionDeactivationTask ($ext_name) { // Not installed and do we have created a task for the admin? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId[' . gettype($taskId) . ']=' . $taskId); - if ((!isTaskIdValid($taskId)) && (isExtensionInstalled($ext_name))) { + if ((!isValidId($taskId)) && (isExtensionInstalled($ext_name))) { // Task not created so add it $taskId = createNewTask($subject, SQL_ESCAPE(loadTemplate('task_EXTENSION_deactivated', TRUE, $ext_name)), 'EXTENSION_DEACTIVATION'); } // END - if @@ -1101,7 +1129,7 @@ function determineExtensionTaskId ($ext_name) { $data['task_id'] = NULL; // Search for extension task's id - $result = SQL_QUERY_ESC("SELECT `id` AS task_id FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `task_type`='EXTENSION' AND `subject`='[%s:]' LIMIT 1", + $result = SQL_QUERY_ESC("SELECT `id` AS `task_id` FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `task_type`='EXTENSION' AND `subject`='[%s:]' LIMIT 1", array($ext_name), __FUNCTION__, __LINE__); // Entry found? @@ -1123,7 +1151,7 @@ function determineTaskIdBySubject ($subject) { $data['task_id'] = '0'; // Search for task id - $result = SQL_QUERY_ESC("SELECT `id` AS task_id FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1", + $result = SQL_QUERY_ESC("SELECT `id` AS `task_id` FROM `{?_MYSQL_PREFIX?}_task_system` WHERE `subject` LIKE '%s%%' LIMIT 1", array($subject), __FUNCTION__, __LINE__); // Entry found? @@ -1353,6 +1381,12 @@ function isExtensionUpdateDependenciesInitialized () { // Checks whether an update is already running for given extension function isExtensionUpdateRunning ($ext_name, $ignoreDependencies = FALSE) { + // 'ext_running_updates' must be there + if ((!isset($GLOBALS['ext_running_updates'])) || (!is_array($GLOBALS['ext_running_updates']))) { + // Is not there + reportBug(__FUNCTION__, __LINE__, 'Required array ext_running_updates not found. ext_name=' . $ext_name . ',ignoreDependencies=' . intval($ignoreDependencies)); + } // END - if + // 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()) { @@ -1796,6 +1830,18 @@ function loadCurrentExtensionInclude () { loadInclude($INC); } +// Load current extension's mode include file +function loadCurrentExtensionModeInclude () { + // Generate INC name + $INC = sprintf("inc/extensions/%s/mode-%s.php", getCurrentExtensionName(), getExtensionMode()); + + // Is the include readable? + if (isIncludeReadable($INC)) { + // Load it as it is optional + loadInclude($INC); + } // END - if +} + // Checks whether an extension is readable function isExtensionIncludeReadable ($ext_name = '') { // If empty, use current @@ -2124,27 +2170,40 @@ function registerExtensionPointsData ($subject, $columnName, $lockedMode, $payme $add = ''; // Is the extension equal or newer 0.8.9? - if (((isInstallationPhase()) && ((getExtensionMode() == 'register') || (getExtensionMode() == 'update'))) || (isExtensionInstalledAndNewer('sql_patches', '0.8.9'))) { + if (((isInstallationPhase()) && ((getExtensionMode() == 'setup') || (getExtensionMode() == 'update'))) || (isExtensionInstalledAndNewer('sql_patches', '0.8.9'))) { // Then add provider $add = " AND `account_provider`='EXTENSION'"; } // END - if // Is the 'subject' there? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ifSqlTableExists(points_data)=' . ifSqlTableExists('points_data') . ',getExtensionMode()=' . getExtensionMode() . ',add=' . $add); - if (((!ifSqlTableExists('points_data')) && ((getExtensionMode() == 'register') || (getExtensionMode() == 'update'))) || (countSumTotalData($subject, 'points_data', 'id', 'subject', TRUE, $add) == 0)) { + if (((!ifSqlTableExists('points_data')) && ((getExtensionMode() == 'setup') || (getExtensionMode() == 'update'))) || (countSumTotalData($subject, 'points_data', 'id', 'subject', TRUE, $add) == 0)) { // Not found so: - if ((isset($GLOBALS['previous_extension'][getCurrentExtensionName()])) && (!ifSqlTableExists('points_data'))) { + if ((!isInstallationPhase()) && (isset($GLOBALS['previous_extension'][getCurrentExtensionName()])) && (!ifSqlTableExists('points_data'))) { + // This may happen (but when?) + // @TODO Is this really neccessary? $dummy = $GLOBALS['previous_extension'][getCurrentExtensionName()]; reportBug(__FUNCTION__, __LINE__, 'previous_extension[' . gettype($dummy) . ']=' . $dummy . ',getCurrentExtensionName()=' . getCurrentExtensionName() . ' - Under development, please report this!'); } // END - if - // ... add an SQL query - addExtensionSql(sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_points_data` (`subject`, `column_name`, `locked_mode`, `payment_method`) VALUES ('%s','%s','%s','%s')", - $subject, - $columnName, - $lockedMode, - $paymentMethod - )); + // With or without account_provider? + if (((isInstallationPhase()) && ((getExtensionMode() == 'setup') || (getExtensionMode() == 'update'))) || (isExtensionInstalledAndNewer('sql_patches', '0.8.9'))) { + // Add account_provider + addExtensionSql(sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_points_data` (`subject`, `column_name`, `locked_mode`, `payment_method`, `account_provider`) VALUES ('%s','%s','%s','%s','EXTENSION')", + $subject, + $columnName, + $lockedMode, + $paymentMethod + )); + } else { + // ... add an SQL query + addExtensionSql(sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_points_data` (`subject`, `column_name`, `locked_mode`, `payment_method`) VALUES ('%s','%s','%s','%s')", + $subject, + $columnName, + $lockedMode, + $paymentMethod + )); + } } // END - if } @@ -2255,22 +2314,27 @@ function copyExtensionDataToCacheArray ($ext_name, $ext_id) { $GLOBALS['cache_array']['extension']['ext_active'][$ext_name] = getThisExtensionAlwaysActive(); $GLOBALS['cache_array']['extension']['ext_lang'][$ext_name] = convertBooleanToYesNo(isExtensionLanguageFileReadable($ext_name)); $GLOBALS['cache_array']['extension']['ext_func'][$ext_name] = convertBooleanToYesNo(isExtensionFunctionFileReadable($ext_name)); - $GLOBALS['cache_array']['extension']['ext_menu'][$ext_name] = convertBooleanToYesNo(ifModuleHasMenu($ext_name)); + $GLOBALS['cache_array']['extension']['ext_menu'][$ext_name] = convertBooleanToYesNo(ifModuleHasMenu($ext_name, isInstallationPhase())); $GLOBALS['cache_array']['extension']['ext_css'][$ext_name] = convertBooleanToYesNo(getExtensionHasCss()); $GLOBALS['cache_array']['extension']['ext_deprecated'][$ext_name] = 'N'; } -// Checks if given task id is valid -function isTaskIdValid ($taskId) { - // Is there cache? - if (!isset($GLOBALS[__FUNCTION__][$taskId])) { - // Determine it - $GLOBALS[__FUNCTION__][$taskId] = ((!is_null($taskId)) && ($taskId > 0)); +// "Getter" for "checked="checked" from given session data +function getExtensionSelectedFromSession ($ext_name, $sessionName, $separator = ':') { + // Get the data and explode it + $selections = explode($separator, getSession($sessionName)); + + // Default is not checked + $checked = ''; + + // Is it there? + if (in_array($ext_name, $selections)) { + // It is, so mark it + $checked = ' checked="checked"'; } // END - if - // Return "cached" value - /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'taskId[' . gettype($taskId) . ']=' . intval($taskId) . ',isValid=' . intval($GLOBALS[__FUNCTION__][$taskId])); - return $GLOBALS[__FUNCTION__][$taskId]; + // Return result + return $checked; } // [EOF]