From f61f2c11ec3d2a68a6663d1dda4f5d1f2ca3383b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Wed, 28 Nov 2012 16:32:34 +0000 Subject: [PATCH] New function introduced, fixes for extension installation: - Function isTaskIdValid() introduced which checks whether the given task id is valid - Fixed installation of extensions - Wrapper functions for config table updates now don't check again (as the "inner" functions are already doing it) --- inc/extensions-functions.php | 86 ++++++++++++++++++++---------------- inc/extensions/ext-beg.php | 8 ++-- inc/libs/grade_functions.php | 4 +- inc/mysql-connect.php | 2 +- 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php index 3a5696cd6b..59d0d5296c 100644 --- a/inc/extensions-functions.php +++ b/inc/extensions-functions.php @@ -200,9 +200,9 @@ 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' becaus it is fine - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - already in registration/update phase, all fine,taskId=' . $taskId . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates)); - //* BUG: */ reportBug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',taskId=' . $taskId . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!'); + // 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)); + //* BUG: */ reportBug(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ',isDryRun=' . intval($isDryRun) . ',ignoreUpdates=' . intval($ignoreUpdates) . ' - Please investigate!'); return TRUE; } // END - if @@ -216,17 +216,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 (((is_null($taskId)) || ($taskId == '0')) && (!isInstallationPhase())) { + if ((!isTaskIdValid($taskId)) && (!isInstallationPhase())) { // Try to find the task $taskId = determineExtensionTaskId(getCurrentExtensionName()); // Still zero and not in dry-run? - if (((is_null($taskId)) || ($taskId == '0')) && (!isExtensionDryRun())) { + if ((!isTaskIdValid($taskId)) && (!isExtensionDryRun())) { // Now try to create a new task $taskId = createNewExtensionTask(getCurrentExtensionName()); // Is it still zero? - if ((is_null($taskId)) || ($taskId == '0')) { + if (!isTaskIdValid($taskId)) { // Then request a bug report reportBug(__FUNCTION__, __LINE__, sprintf("%s: task_id is still zero after determineExtensionTaskId/createNewExtensionTask(%s)", __FUNCTION__, @@ -356,12 +356,15 @@ function registerExtension ($ext_name, $taskId, $isDryRun = FALSE, $ignoreUpdate initSqls(); setSqlsArray(getExtensionSqls()); - // Run installation pre-installation filters - runFilterChain('pre_extension_installed', array('dry_run' => isExtensionDryRun(), 'ext_installing' => TRUE, 'enable_codes' => FALSE)); - // Copy current name to save calls $currentName = getCurrentExtensionName(); + // Mark it as NOT installed + $GLOBALS['ext_is_installed'][$currentName] = FALSE; + + // Run installation pre-installation filters + runFilterChain('pre_extension_installed', array('dry_run' => isExtensionDryRun(), 'ext_installing' => TRUE, 'enable_codes' => FALSE)); + // Register extension //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'insert=' . $currentName . '/' . getCurrentExtensionVersion() . ' - INSERT!'); if (isExtensionInstalledAndNewer('sql_patches', '0.0.6')) { @@ -389,12 +392,16 @@ 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. */ - copyCurrentExtensionDataToCacheArray($ext_name, SQL_INSERTID()); + copyExtensionDataToCacheArray($currentName, SQL_INSERTID()); // Mark it as installed $GLOBALS['ext_is_installed'][$currentName] = TRUE; - // Remove cache file(s) if extension is active + /* + * Run filter chain after extension has been "installed" which + * means that the extension has been registered in 'extensions' + * table and marked as "installed". + */ runFilterChain('post_extension_installed', array( 'pool' => 'extension', 'ext_name' => $currentName, @@ -1035,7 +1042,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 (((is_null($taskId)) || ($taskId == '0')) && (!isExtensionInstalled($ext_name))) { + if ((!isTaskIdValid($taskId)) && (!isExtensionInstalled($ext_name))) { // Set default message if ext-foo is missing $message = '{%message,ADMIN_EXTENSION_TEXT_FILE_MISSING=' . $ext_name . '%}'; @@ -1073,7 +1080,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 (((is_null($taskId)) || ($taskId == '0')) && (isExtensionInstalled($ext_name))) { + if ((!isTaskIdValid($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 @@ -2092,32 +2099,20 @@ function addExtensionDropTableIndexSql ($tableName, $indexName) { // Add configuration entry if not found for actual extension function addConfigAddSql ($columnName, $columnSql) { - // Is the column there? - if (!ifSqlTableColumnExists('{?_MYSQL_PREFIX?}_config', $columnName)) { - // Not found, so add it - addExtensionAddTableColumnSql('config', $columnName, $columnSql); - } elseif (isDebugModeEnabled()) { - // Add debug line - logDebugMessage(__FUNCTION__, __LINE__, 'Configuration entry ' . $columnName . ' already created. columnSql=' . $columnSql); - } + // Call inner function + addExtensionAddTableColumnSql('config', $columnName, $columnSql); } // Drop configuration entry if found for actual extension function addConfigDropSql ($columnName) { - // Is the column there? - if (ifSqlTableColumnExists('{?_MYSQL_PREFIX?}_config', $columnName)) { - // Found, so add it - addExtensionDropTableColumnSql('config', $columnName); - } elseif (isDebugModeEnabled()) { - // Add debug line, reportBug() would cause some extenion updates fail - logDebugMessage(__FUNCTION__, __LINE__, 'Configuration entry ' . $columnName . ' not found.'); - } + // Call inner function + addExtensionDropTableColumnSql('config', $columnName); } // Change configuration entry for actual extension function addConfigChangeSql ($oldColumnName, $newColumnName, $columnSql) { // Add the SQL statement - addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_config` CHANGE `' . $oldColumnName . '` `' . $newColumnName . '` ' . $columnSql); + addExtensionChangeTableColumnSql('config', $oldColumnName, $newColumnName, $columnSql); } /** @@ -2254,15 +2249,28 @@ function isExtensionLibraryLoaded ($ext_name) { // Copies the given extension's data to cache_array (USE THIS ONLY IN REGISTRATION PHASE!) function copyExtensionDataToCacheArray ($ext_name, $ext_id) { // Copy all data - $GLOBALS['cache_array']['extension']['ext_id'][$currentName] = $ext_id; - $GLOBALS['cache_array']['extension']['ext_name'][$ext_id] = $currentName; - $GLOBALS['cache_array']['extension']['ext_version'][$currentName] = getCurrentExtensionVersion(); - $GLOBALS['cache_array']['extension']['ext_active'][$currentName] = getThisExtensionAlwaysActive(); - $GLOBALS['cache_array']['extension']['ext_lang'][$currentName] = convertBooleanToYesNo(isExtensionLanguageFileReadable($currentName)); - $GLOBALS['cache_array']['extension']['ext_func'][$currentName] = convertBooleanToYesNo(isExtensionFunctionFileReadable($currentName)); - $GLOBALS['cache_array']['extension']['ext_menu'][$currentName] = convertBooleanToYesNo(ifModuleHasMenu($currentName)); - $GLOBALS['cache_array']['extension']['ext_css'][$currentName] = convertBooleanToYesNo(getExtensionHasCss()); - $GLOBALS['cache_array']['extension']['ext_deprecated'][$currentName] = 'N'; + $GLOBALS['cache_array']['extension']['ext_id'][$ext_name] = $ext_id; + $GLOBALS['cache_array']['extension']['ext_name'][$ext_id] = $ext_name; + $GLOBALS['cache_array']['extension']['ext_version'][$ext_name] = getCurrentExtensionVersion(); + $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_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)); + } // END - if + + // Return "cached" value + /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'taskId[' . gettype($taskId) . ']=' . intval($taskId) . ',isValid=' . intval($GLOBALS[__FUNCTION__][$taskId])); + return $GLOBALS[__FUNCTION__][$taskId]; } // [EOF] diff --git a/inc/extensions/ext-beg.php b/inc/extensions/ext-beg.php index 46d92eb28a..8d6f332cd6 100644 --- a/inc/extensions/ext-beg.php +++ b/inc/extensions/ext-beg.php @@ -204,14 +204,14 @@ INDEX (`userid`)", break; case '0.1.7': // SQL queries for v0.1.7 - addConfigAddSql('beg_ral_en_notify', "ENUM('Y','N') NOT NULL DEFAULT 'N'"); - addConfigAddSql('beg_ral_di_notify', "ENUM('Y','N') NOT NULL DEFAULT 'N'"); + addConfigAddSql('beg_rallye_enable_notify', "ENUM('Y','N') NOT NULL DEFAULT 'N'"); + addConfigAddSql('beg_rallye_disable_notify', "ENUM('Y','N') NOT NULL DEFAULT 'N'"); addConfigAddSql('beg_new_mem_notify', "ENUM('Y','N') NOT NULL DEFAULT 'N'"); addConfigAddSql('beg_notify_bonus', 'FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000'); addConfigAddSql('beg_notify_wait', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 30'); addExtensionAddTableColumnSql('user_data', 'beg_ral_notify', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0'); - addExtensionAddTableColumnSql('user_data', 'beg_ral_en_notify', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0'); - addExtensionAddTableColumnSql('user_data', 'beg_ral_di_notify', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0'); + addExtensionAddTableColumnSql('user_data', 'beg_rallye_enable_notify', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0'); + addExtensionAddTableColumnSql('user_data', 'beg_rallye_disable_notify', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0'); // Update notes (these will be set as task text!) setExtensionUpdateNotes("Die Mitglieder können nun optional automatisch über eine aktivierte und/oder deaktivierte Bettel-Rallye informiert werden. Beide Benachrichtigungen können Sie unter Einstellungen --> Bettel-Link/-rallye seperat ein- und ausschalten! Zudem ist eine Sperre gegen eingeloggte Mitglieder eingebaut, die das Klicken auf den eigenen Bettel-Link etwas erschweren soll."); diff --git a/inc/libs/grade_functions.php b/inc/libs/grade_functions.php index 9b8fc2b4c7..ed7bb7f30f 100644 --- a/inc/libs/grade_functions.php +++ b/inc/libs/grade_functions.php @@ -72,8 +72,8 @@ ORDER BY // Load all entries while ($grade = SQL_FETCHARRAY($result)) { // Add it to arrays - $gradeKeys[] = $grade['grade_id']; - $gradeValues[] = $grade['grade_name']; + array_push($gradeKeys , $grade['grade_id']); + array_push($gradeValues, $grade['grade_name']); } // END - while } // END - if diff --git a/inc/mysql-connect.php b/inc/mysql-connect.php index f94fdb8b40..e25d40dfc7 100644 --- a/inc/mysql-connect.php +++ b/inc/mysql-connect.php @@ -61,7 +61,7 @@ foreach ( array( 'extensions') as $lib) { // Add it - $__functions[] = $lib . '-functions'; + array_push($__functions, $lib . '-functions'); } // END - foreach // Load more function libraries or includes -- 2.39.5