diff --git a/classes/WhatDidTheySayAdmin.php b/classes/WhatDidTheySayAdmin.php index 7a06fbf..662d773 100644 --- a/classes/WhatDidTheySayAdmin.php +++ b/classes/WhatDidTheySayAdmin.php @@ -44,17 +44,29 @@ class WhatDidTheySayAdmin { } function handle_update_languages($language_info) { - - - $languages = array(); - foreach ($language_info as $code => $info) { - if (isset($this->all_languages[$code])) { - $language = $code; - if (isset($info['default'])) { $language = array('code' => $code, 'default' => true); } - $languages[] = $language; - } + $options = get_option('what-did-they-say-options'); + switch ($language_info['action']) { + case "delete": + unset($options['languages'][$language_info['code']]); + break; + case "add": + if (isset($this->all_languages[$language_info['code']])) { + $options['languages'][$language_info['code']] = array('name' => $this->all_languages[$language_info['code']]); + } + break; + case "default": + if (isset($options['languages'][$language_info['code']])) { + foreach ($options['languages'] as $code => $info) { + if ($code == $language_info['code']) { + $options['languages'][$code]['default'] = true; + } else { + unset($options['languages'][$code]['default']); + } + } + } + break; } - $this->_update_options('languages', $languages); + update_option('what-did-they-say-options', $options); } function handle_update_allowed_users($users) { diff --git a/test/WhatDidTheySayAdminTest.php b/test/WhatDidTheySayAdminTest.php index 502b9f2..34060cb 100644 --- a/test/WhatDidTheySayAdminTest.php +++ b/test/WhatDidTheySayAdminTest.php @@ -18,12 +18,20 @@ class WhatDidTheySayAdminTest extends PHPUnit_Framework_TestCase { function providerTestHandleUpdateLanguages() { return array( array( - array( - array('en' => array('name' => 'English'), 'de' => array('name' => 'German')), - array('code' => 'en', 'action' => 'delete'), - array('de' => array('name' => 'German')) - ) - ) + array('en' => array('name' => 'English'), 'de' => array('name' => 'German')), + array('code' => 'en', 'action' => 'delete'), + array('de' => array('name' => 'German')) + ), + array( + array('de' => array('name' => 'German')), + array('code' => 'en', 'action' => 'add'), + array('en' => array('name' => 'English'), 'de' => array('name' => 'German')), + ), + array( + array('en' => array('name' => 'English', 'default' => true), 'de' => array('name' => 'German')), + array('code' => 'de', 'action' => 'default'), + array('en' => array('name' => 'English'), 'de' => array('name' => 'German', 'default' => true)), + ), ); } @@ -38,7 +46,7 @@ class WhatDidTheySayAdminTest extends PHPUnit_Framework_TestCase { 'fr' => 'French' ); - update_option('what-did-they-say-options', array('languages', $original_options)); + update_option('what-did-they-say-options', array('languages' => $original_options)); $admin->handle_update_languages($form_submission);