diff --git a/lib/Froxlor/Settings/Store.php b/lib/Froxlor/Settings/Store.php index d9e33144..5a506e87 100644 --- a/lib/Froxlor/Settings/Store.php +++ b/lib/Froxlor/Settings/Store.php @@ -115,20 +115,20 @@ class Store $returnvalue = self::storeSettingField($fieldname, $fielddata, $newfieldvalue); if ($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'panel' && isset($fielddata['varname']) && $fielddata['varname'] == 'default_theme') { - // now, if changing themes is disabled we recursivly set + // now, if changing themes is disabled we manually set // the new theme (customers and admin, depending on settings) if (Settings::Get('panel.allow_theme_change_customer') == '0') { $upd_stmt = Database::prepare(" - UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `theme` = :theme - "); + UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `theme` = :theme + "); Database::pexecute($upd_stmt, array( 'theme' => $newfieldvalue )); } if (Settings::Get('panel.allow_theme_change_admin') == '0') { $upd_stmt = Database::prepare(" - UPDATE `" . TABLE_PANEL_ADMINS . "` SET `theme` = :theme - "); + UPDATE `" . TABLE_PANEL_ADMINS . "` SET `theme` = :theme + "); Database::pexecute($upd_stmt, array( 'theme' => $newfieldvalue )); @@ -171,17 +171,13 @@ class Store public static function storeSettingFieldInsertBindTask($fieldname, $fielddata, $newfieldvalue) { - if (is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] != '' && isset($fielddata['varname']) && $fielddata['varname'] != '') { - if (Settings::Set($fielddata['settinggroup'] . '.' . $fielddata['varname'], $newfieldvalue) !== false) { - return array( - $fielddata['settinggroup'] . '.' . $fielddata['varname'] => $newfieldvalue - ); - } else { - return false; - } - } else { - return false; + // first save the setting itself + $returnvalue = self::storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if ($returnvalue !== false) { + \Froxlor\System\Cronjob::inserttask('4'); } + return false; } public static function storeSettingHostname($fieldname, $fielddata, $newfieldvalue) @@ -297,25 +293,9 @@ class Store $returnvalue = self::storeSettingField($fieldname, $fielddata, $newfieldvalue); if ($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'catchall' && isset($fielddata['varname']) && $fielddata['varname'] == 'catchall_enabled' && $newfieldvalue == '0') { - - $result_stmt = Database::query(" - SELECT `id`, `email`, `email_full`, `iscatchall` FROM `" . TABLE_MAIL_VIRTUAL . "` - WHERE `iscatchall` = '1' + Database::query(" + UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `iscatchall` = '0' WHERE `iscatchall` = '1' "); - - if (Database::num_rows() > 0) { - - $upd_stmt = Database::prepare(" - UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `email` = :email, `iscatchall` = '0' WHERE `id` = :id - "); - - while ($result_row = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { - Database::pexecute($upd_stmt, array( - 'email' => $result_row['email_full'], - 'id' => $result_row['id'] - )); - } - } } return $returnvalue; diff --git a/tests/Froxlor/StoreTest.php b/tests/Froxlor/StoreTest.php index f5a46f18..1316d3b4 100644 --- a/tests/Froxlor/StoreTest.php +++ b/tests/Froxlor/StoreTest.php @@ -94,4 +94,61 @@ class StoreTest extends TestCase // we assume there are entries $this->assertTrue(count($current_result) > 0); } + + public function testStoreSettingDefaultTheme() + { + $current_theme = Settings::Get('panel.default_theme'); + // allow theme changing for admins/customers so a new default won't overwrite + Settings::Set('panel.allow_theme_change_customer', 1); + Settings::Set('panel.allow_theme_change_admin', 1); + $fielddata = array( + 'label' => 'panel_default_theme', + 'settinggroup' => 'panel', + 'varname' => 'default_theme' + ); + Store::storeSettingDefaultTheme('panel_default_theme', $fielddata, "newTheme"); + $this->assertTrue($current_theme != Settings::Get('panel.default_theme')); + $this->assertEquals("newTheme", Settings::Get('panel.default_theme')); + // validate admin/customer field did not change + $sel_stmt = Database::prepare(" + SELECT * FROM `" . TABLE_PANEL_ADMINS . "` + WHERE `theme` = :newtheme + "); + Database::pexecute($sel_stmt, array('newtheme' => "newTheme")); + $current_result = $sel_stmt->fetchAll(\PDO::FETCH_ASSOC); + // we assume there are entries + $this->assertTrue(count($current_result) == 0); + $sel_stmt = Database::prepare(" + SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` + WHERE `theme` = :newtheme + "); + Database::pexecute($sel_stmt, array('newtheme' => "newTheme")); + $current_result = $sel_stmt->fetchAll(\PDO::FETCH_ASSOC); + // we assume there are entries + $this->assertTrue(count($current_result) == 0); + // now do not allow changing of themes so the theme should get updated for all admins/customers + // allow theme changing for admins/customers so a new default won't overwrite + Settings::Set('panel.allow_theme_change_customer', 0); + Settings::Set('panel.allow_theme_change_admin', 0); + Store::storeSettingDefaultTheme('panel_default_theme', $fielddata, "newTheme"); + // validate admin/customer field did change + $sel_stmt = Database::prepare(" + SELECT * FROM `" . TABLE_PANEL_ADMINS . "` + WHERE `theme` = :newtheme + "); + Database::pexecute($sel_stmt, array('newtheme' => "newTheme")); + $current_result = $sel_stmt->fetchAll(\PDO::FETCH_ASSOC); + // we assume there are entries + $this->assertTrue(count($current_result) > 0); + $sel_stmt = Database::prepare(" + SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` + WHERE `theme` = :newtheme + "); + Database::pexecute($sel_stmt, array('newtheme' => "newTheme")); + $current_result = $sel_stmt->fetchAll(\PDO::FETCH_ASSOC); + // we assume there are entries + $this->assertTrue(count($current_result) > 0); + // set back to default + Store::storeSettingDefaultTheme('panel_default_theme', $fielddata, $current_theme); + } }