From cc609bc79f04100c0856ed651725b1eb0b8a81ba Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 12 Nov 2009 20:25:46 -0500 Subject: [PATCH] save complex image options --- classes/ComicPressAdmin.inc | 58 +++++++++++---------- classes/ComicPressBackend.inc | 4 +- test/ComicPressAdminTest.php | 94 ++++++++++++++++++++--------------- 3 files changed, 90 insertions(+), 66 deletions(-) diff --git a/classes/ComicPressAdmin.inc b/classes/ComicPressAdmin.inc index 993e426..4cbaa77 100644 --- a/classes/ComicPressAdmin.inc +++ b/classes/ComicPressAdmin.inc @@ -234,36 +234,44 @@ class ComicPressAdmin { * Update ComicPress options. */ function handle_update_comicpress_options($info) { - foreach (array('helpers', 'options') as $type) { + foreach (array('helpers') as $type) { $this->comicpress->comicpress_options[$type] = array(); } foreach ($this->comicpress->comicpress_options as $option => $value) { if (isset($info[$option])) { switch ($option) { - case 'comic_dimensions': - case 'rss_dimensions': - case 'archive_dimensions': - case 'mini_dimensions': - if (is_array($info[$option])) { - $dim_parts = array(); - $is_valid = true; - foreach (array('width', 'height') as $field) { - $requested_dim = trim($info[$option][$field]); - if ($requested_dim == "") { - $dim_parts[] = $requested_dim; - } else { - if ((int)$requested_dim == $requested_dim) { - $dim_parts[] = $requested_dim; - } else { - $is_valid = false; break; - } - } - } - - if ($is_valid) { - $this->comicpress->comicpress_options[$option] = implode("x", $dim_parts); - } - } + case 'image_types': + if (is_array($info['image_types'])) { + $this->comicpress->comicpress_options['image_types'] = array(); + $defined_default = null; + foreach ($info['image_types'] as $type => $image_info) { + if (is_array($image_info)) { + foreach ($image_info as $field => $field_value) { + $new_value = array(); + switch ($field) { + case "default": $defined_default = $type; break; + case "dimensions": + if (is_array($field_value)) { + if (count(array_intersect(array('width', 'height'), array_keys($field_value))) == 2) { + $new_value['dimensions'] = "{$field_value['width']}x{$field_value['height']}"; + } + } + break; + } + $this->comicpress->comicpress_options['image_types'][$type] = $new_value; + } + } + } + } + if (is_null($defined_default)) { + $defined_default = array_keys($this->comicpress->comicpress_options['image_types']); + if (!empty($defined_default)) { $defined_default = reset($defined_default); } + } + if (!is_null($defined_default)) { + if (isset($this->comicpress->comicpress_options['image_types'][$defined_default])) { + $this->comicpress->comicpress_options['image_types'][$defined_default]['default'] = true; + } + } break; // @codeCoverageIgnoreStart case 'helpers': diff --git a/classes/ComicPressBackend.inc b/classes/ComicPressBackend.inc index 79e68db..202c2a1 100644 --- a/classes/ComicPressBackend.inc +++ b/classes/ComicPressBackend.inc @@ -22,11 +22,11 @@ class ComicPressBackend { function generate_from_id($id) { $comicpress = ComicPress::get_instance(); foreach ($comicpress->backends as $backend) { - $result = $backend->generate_from_id($id); + $result = call_user_func(array($backend, 'generate_from_id'), $id); if ($result !== false) { return $result; } } return false; } -} \ No newline at end of file +} diff --git a/test/ComicPressAdminTest.php b/test/ComicPressAdminTest.php index cd9edd9..c60b5e9 100644 --- a/test/ComicPressAdminTest.php +++ b/test/ComicPressAdminTest.php @@ -26,33 +26,60 @@ class ComicPressAdminTest extends PHPUnit_Framework_TestCase { function providerTestHandleUpdateComicPressOptions() { return array( - array( - array('comic_dimensions' => '150x150'), - array('cp' => array( - 'comic_dimensions' => 'test' - )), - array('comic_dimensions' => '150x150') - ), - array( - array('comic_dimensions' => '150x150'), - array('cp' => array( - 'comic_dimensions' => array( - 'width' => '150', - 'height' => '' - ) - )), - array('comic_dimensions' => '150x') - ), - array( - array('comic_dimensions' => '150x150'), - array('cp' => array( - 'comic_dimensions' => array( - 'width' => '150.1', - 'height' => '' - ) - )), - array('comic_dimensions' => '150x150') - ), + array( + array( + 'image_types' => array( + 'comic' => array('default' => true, 'dimensions' => '500x50') + ) + ), + array( + 'image_types' => array( + 'comic' => array('default' => 'yes', 'dimensions' => array('width' => '100', 'height' => '100')) + ) + ), + array( + 'image_types' => array( + 'comic' => array('default' => true, 'dimensions' => '100x100') + ) + ) + ), + array( + array( + 'image_types' => array( + 'comic' => array('default' => true, 'dimensions' => '500x50') + ) + ), + array( + 'image_types' => array( + 'comic' => array('dimensions' => array('width' => '500', 'height' => '50')), + 'archive' => array('default' => 'yes', 'dimensions' => array('width' => '100', 'height' => '100')), + ) + ), + array( + 'image_types' => array( + 'comic' => array('dimensions' => '500x50'), + 'archive' => array('default' => true, 'dimensions' => '100x100'), + ) + ) + ), + array( + array( + 'image_types' => array( + 'comic' => array('default' => true, 'dimensions' => '500x50'), + 'archive' => array('dimensions' => '100x100'), + ) + ), + array( + 'image_types' => array( + 'archive' => array('default' => 'yes', 'dimensions' => array('width' => '100', 'height' => '100')), + ) + ), + array( + 'image_types' => array( + 'archive' => array('default' => true, 'dimensions' => '100x100'), + ) + ) + ), ); } @@ -61,20 +88,9 @@ class ComicPressAdminTest extends PHPUnit_Framework_TestCase { */ function testHandleUpdateComicPressOptions($original, $change, $new) { $this->admin->comicpress = $this->getMock('ComicPress', array('save', 'init')); - $this->admin->comicpress->comicpress_options = array( - 'comic_dimensions' => '760x', - 'rss_dimensions' => '350x', - 'archive_dimensions' => '125x' - ); $this->admin->comicpress->comicpress_options = array_merge($this->admin->comicpress->comicpress_options, $original); - add_category(2, (object)array('name' => 'test')); - - $_POST = $change; - - if (isset($_POST['cp'])) { - $this->admin->handle_update_comicpress_options($_POST['cp']); - } + $this->admin->handle_update_comicpress_options($change); foreach ($new as $key => $value) { $this->assertEquals($value, $this->admin->comicpress->comicpress_options[$key]);