diff --git a/.gitignore b/.gitignore index ab423c8..a938aaa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .project .settings/ .DS_Store +coverage/ diff --git a/test/widgets/GraphicalNavigationWidgetTest.php b/test/widgets/GraphicalNavigationWidgetTest.php index 4627459..c115725 100644 --- a/test/widgets/GraphicalNavigationWidgetTest.php +++ b/test/widgets/GraphicalNavigationWidgetTest.php @@ -10,9 +10,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $this->w = new GraphicalNavigationWidget(); } - /** - * @covers WidgetComicPressGraphicalStorylineNavigation::update - */ function testUpdateWidget() { $result = $this->w->update(array( "next" => "test", @@ -41,7 +38,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { /** * @dataProvider providerTestIsNavLinkVisible - * @covers WidgetComicPressGraphicalStorylineNavigation::_will_display_nav_link */ function testIsNavLinkVisible($which, $current_id, $target_id, $expected_result) { $current = (object)array('ID' => $current_id); @@ -76,7 +72,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { /** * @dataProvider providerTestGroupNavigationButtons - * @covers WidgetComicPressGraphicalStorylineNavigation::_group_navigation_buttons */ function testGroupNavigationButtons($buttons, $expected_grouping) { _set_filter_expectation('comicpress_navigation_grouping_details', array(array( @@ -88,6 +83,14 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $this->assertEquals($expected_grouping, $this->w->_group_navigation_buttons($buttons, array())); } + /** + * @expectedException PHPUnit_Framework_Error + */ + function testGroupNavigationButtonsNoDefaultGroup() { + _set_filter_expectation('comicpress_navigation_grouping_details', array(array())); + $this->w->_group_navigation_buttons(array(), array()); + } + function providerTestSetUpPostNavStoryPrev() { return array( array( @@ -230,6 +233,43 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $css->set_up_post_nav(array()); } + + function providerTestGetLinkNaviClassNames() { + return array( + array( + 'previous', (object)array('guid' => 'previous'), array(), array( + 'link' => 'previous', + 'navi_class_names' => array('navi-previous', 'navi-prev') + ) + ), + array( + 'last', (object)array('guid' => 'last'), array('lastgohome' => 'off'), array( + 'link' => 'last', + 'navi_class_names' => array('navi-last') + ) + ), + array( + 'last', (object)array('guid' => 'last'), array('lastgohome' => 'on'), array( + 'link' => 'home', + 'navi_class_names' => array('navi-last') + ) + ), + array( + 'next', 'next', array(), array( + 'link' => 'next', + 'navi_class_names' => array('navi-next') + ) + ), + ); + } + + /** + * @dataProvider providerTestGetLinkNaviClassNames + */ + function testGetLinkNaviClassNames($which, $target, $instance, $expected_results) { + _set_bloginfo('url', 'home'); + $this->assertEquals($expected_results, $this->w->_get_link_navi_class_names($which, null, $target, $instance)); + } } ?> diff --git a/widgets/GraphicalNavigationWidget.inc b/widgets/GraphicalNavigationWidget.inc index 177ff22..e68e60c 100644 --- a/widgets/GraphicalNavigationWidget.inc +++ b/widgets/GraphicalNavigationWidget.inc @@ -11,6 +11,7 @@ Author URI: http://frumph.net/ require_once(dirname(__FILE__) . '/../classes/ComicPressNavigation.inc'); class GraphicalNavigationWidget extends WP_Widget { + // @codeCoverageIgnoreStart function GraphicalNavigationWidget() { $widget_ops = array('classname' => 'WidgetComicPressGraphicalStorylineNavigation', 'description' => __('Displays Graphical Navigation Buttons. (used in comic sidebars)','comicpress') ); $this->WP_Widget('graphicalstorylinenavigation', __('Comic Navigation','comicpress'), $widget_ops); @@ -23,13 +24,13 @@ class GraphicalNavigationWidget extends WP_Widget { add_filter('comicpress_display_navigation_order', array(&$this, 'comicpress_display_navigation_order')); add_filter('comicpress_display_navigation_link', array(&$this, 'comicpress_display_navigation_link'), 10, 5); add_filter('comicpress_wrap_navigation_buttons', array(&$this, 'comicpress_wrap_navigation_buttons'), 10, 2); - add_filter('comicpress_navigation_grouping_details', array(&$this, 'comicpress_navigation_grouping_details')); + add_filter('comicpress_navigation_grouping_details', array(&$this, 'comicpress_navigation_grouping_details')); - foreach (get_class_methods($this) as $method) { - if (strpos($method, '_comicpress_set_up_post_nav') === 0) { - add_filter('comicpress_set_up_post_nav', array(&$this, $method), 10, 3); - } - } + foreach (get_class_methods($this) as $method) { + if (strpos($method, '_comicpress_set_up_post_nav') === 0) { + add_filter('comicpress_set_up_post_nav', array(&$this, $method), 10, 3); + } + } // these two need to be moved one level up add_filter('comicpress_get_random_link_url', array(&$this, 'comicpress_get_random_link_url')); @@ -58,26 +59,20 @@ class GraphicalNavigationWidget extends WP_Widget { function comicpress_display_navigation_link($which, $current, $target, $instance, $content = '') { global $id; - $css_name_mapping = array( - 'story_prev' => 'prevchap', - 'previous' => 'prev', - 'story_next' => 'nextchap' - ); - $ok = true; switch ($which) { - case 'first': - case 'last': + case 'first': + case 'last': $ok = $this->_will_display_nav_link($which, $current, $target); break; - case 'previous': - case 'next': - case 'story_prev': - case 'story_next': - case 'story_prev_in': - case 'story_next_in': + case 'previous': + case 'next': + case 'story_prev': + case 'story_next': + case 'story_prev_in': + case 'story_next_in': $ok = !empty($target); - break; + break; case 'archives': $ok = !empty($instance['archive_path']); break; @@ -85,57 +80,43 @@ class GraphicalNavigationWidget extends WP_Widget { ob_start(); switch ($which) { - case 'first': - case 'previous': - case 'next': - case 'last': - case 'story_prev': - case 'story_next': - case 'story_prev_in': - case 'story_next_in': - $obj_ok = false; - $navi_class_names = array("navi-${which}"); - $link = false; - if (is_object($target)) { - $obj_ok = true; - if (isset($css_name_mapping[$which])) { $navi_class_names[] = "navi-{$css_name_mapping[$which]}"; } + case 'first': + case 'previous': + case 'next': + case 'last': + case 'story_prev': + case 'story_next': + case 'story_prev_in': + case 'story_next_in': + extract($this->_get_link_navi_class_names($which, $current, $target, $instance)); - $link = get_permalink($target->ID); - if (($which == 'last') && ($instance['lastgohome'] == 'on')) { $link = get_bloginfo('url'); } - } - - if (($filter_link = array_shift(apply_filters('comicpress_display_navigation_link', $link, $which, $current, $target, $instance))) !== false) { - $link = $filter_link; - $obj_ok = true; - } - - if ($ok && $obj_ok) { - ?>" + if ($ok && $link) { + ?>" title=""> navi-void">">ID); ?>ID); ?>ID; - ?> 'prevchap', + 'previous' => 'prev', + 'story_next' => 'nextchap' + ); + + $navi_class_names = array("navi-${which}"); + if (isset($css_name_mapping[$which])) { $navi_class_names[] = "navi-{$css_name_mapping[$which]}"; } + + $link = false; + if (is_object($target)) { + if (($which == 'last') && ($instance['lastgohome'] == 'on')) { + $link = get_bloginfo('url'); + } else { + $link = get_permalink($target); + } + } else { + if (is_string($target)) { + $link = $target; + } + } + + if (($filter_link = apply_filters('comicpress_display_navigation_link', $link, $which, $current, $target, $instance)) !== false) { + $link = $filter_link; + } + + return compact('link', 'navi_class_names'); + } /** * Returns true if the combination of target and current post will show or hide this nav link. @@ -177,52 +189,56 @@ class GraphicalNavigationWidget extends WP_Widget { return apply_filters('comicpress_graphical_navigation_will_display_nav_link', $return, $which, $current, $target); } + // @codeCoverageIgnoreStart /** * Get the order of the buttons to be displayed on-screen. */ function comicpress_display_navigation_order($order = array()) { - return array( + return array( 'first', 'previous', 'story_prev_in', 'story_prev', 'archives', 'random', 'comictitle', 'comments', 'buyprint', 'story_next', 'story_next_in', 'next', 'last' ); } - function comicpress_navigation_grouping_details($details = array()) { - return array( - 'comic_navi_left' => array('first', 'previous', 'story_prev_in', 'story_prev'), - 'comic_navi_center' => true, - 'comic_navi_right' => array('story_next', 'story_next_in', 'next', 'last') - ); - } + function comicpress_navigation_grouping_details($details = array()) { + return array( + 'comic_navi_left' => array('first', 'previous', 'story_prev_in', 'story_prev'), + 'comic_navi_center' => true, + 'comic_navi_right' => array('story_next', 'story_next_in', 'next', 'last') + ); + } + // @codeCoverageIgnoreEnd - function _group_navigation_buttons($buttons = array(), $grouped_buttons = array()) { - $grouping_hash = array(); + function _group_navigation_buttons($buttons = array(), $grouped_buttons = array()) { + $grouping_hash = array(); - $default_group = null; - foreach (apply_filters('comicpress_navigation_grouping_details', array()) as $group => $members) { - if ($members === true) { - $default_group = $group; - } else { - if (is_array($members)) { - foreach ($members as $member) { $grouping_hash[$member] = $group; } - } - } - } + $default_group = null; + foreach (apply_filters('comicpress_navigation_grouping_details', array()) as $group => $members) { + if ($members === true) { + $default_group = $group; + } else { + if (is_array($members)) { + foreach ($members as $member) { $grouping_hash[$member] = $group; } + } + } + } - if (is_null($default_group)) { - trigger_error('No default group defined for filter comicpress_navigation_grouping_details', E_USER_WARNING); - } + if (is_null($default_group)) { + trigger_error('No default group defined for filter comicpress_navigation_grouping_details', E_USER_WARNING); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd - $groups = array(); - foreach ($buttons as $key => $button) { - $group = isset($grouping_hash[$key]) ? $grouping_hash[$key] : $default_group; - if (!empty($group)) { - if (!isset($groups[$group])) { $groups[$group] = array(); } - $groups[$group][$key] = $button; - } - } + $groups = array(); + foreach ($buttons as $key => $button) { + $group = isset($grouping_hash[$key]) ? $grouping_hash[$key] : $default_group; + if (!empty($group)) { + if (!isset($groups[$group])) { $groups[$group] = array(); } + $groups[$group][$key] = $button; + } + } - return $groups; - } + return $groups; + } /** * Wrap navigation buttons in a holder. @@ -231,14 +247,14 @@ class GraphicalNavigationWidget extends WP_Widget { */ function comicpress_wrap_navigation_buttons($buttons = '', $content = '') { $buttons_text = $buttons; - if (is_array($buttons)) { - $output = array(); - foreach ($this->_group_navigation_buttons($buttons) as $group => $grouped_buttons) { - $output[] = '' . implode('', array_values($grouped_buttons)) . ''; - } + if (is_array($buttons)) { + $output = array(); + foreach ($this->_group_navigation_buttons($buttons) as $group => $grouped_buttons) { + $output[] = '' . implode('', array_values($grouped_buttons)) . ''; + } - $buttons_text = implode('', $output); - } + $buttons_text = implode('', $output); + } ob_start(); ?>
@@ -262,8 +278,8 @@ class GraphicalNavigationWidget extends WP_Widget { $storyline_to_nav_mapping = array( 'story_prev' => 'storyline-chapter-previous', 'story_next' => 'storyline-chapter-next', - 'story_prev_in' => 'storyline-previous', - 'story_next_in' => 'storyline-next' + 'story_prev_in' => 'storyline-previous', + 'story_next_in' => 'storyline-next' ); $nav_links = array(); @@ -335,29 +351,29 @@ class GraphicalNavigationWidget extends WP_Widget { return array($post_nav, $post, $instance); } - /** + /** * Update the current widget instance. - * @param array $new_instance The new widget instance data. - * @param array $old_instance The old widget instance data. - */ + * @param array $new_instance The new widget instance data. + * @param array $old_instance The old widget instance data. + */ function update($new_instance, $old_instance) { $instance = array(); - $all_fields = array( - 'first', 'story_prev', 'story_next', 'story_prev_in', - 'story_next_in', 'previous', 'random', 'archives', + $all_fields = array( + 'first', 'story_prev', 'story_next', 'story_prev_in', + 'story_next_in', 'previous', 'random', 'archives', 'comments', 'next', 'last', 'buyprint', 'comictitle', 'lastgohome', 'story_prev_acts_as_prev_in' ); - foreach ($all_fields as $field) { - $instance[$field] = (isset($new_instance[$field])) ? 'on' : 'off'; - if (isset($new_instance["${field}_title"])) { + foreach ($all_fields as $field) { + $instance[$field] = (isset($new_instance[$field])) ? 'on' : 'off'; + if (isset($new_instance["${field}_title"])) { $instance["${field}_title"] = strip_tags($new_instance["${field}_title"]); - } - } + } + } - $instance['archive_path'] = strip_tags($new_instance['archive_path']); + $instance['archive_path'] = strip_tags($new_instance['archive_path']); return $instance; } @@ -366,9 +382,9 @@ class GraphicalNavigationWidget extends WP_Widget { $field_defaults = array( 'first' => 'on', 'story_prev' => 'off', - 'story_prev_in' => 'off', + 'story_prev_in' => 'off', 'story_next' => 'off', - 'story_next_in' => 'off', + 'story_next_in' => 'off', 'previous' => 'on', 'random' => 'off', 'archives' => 'off', @@ -386,8 +402,8 @@ class GraphicalNavigationWidget extends WP_Widget { 'first_title' => __('‹‹ First', 'comicpress'), 'story_prev_title' => __('Chapter', 'comicpress'), 'story_next_title' => __('Chapter', 'comicpress'), - 'story_prev_in_title' => __('In Chapter', 'comicpress'), - 'story_next_in_title' => __('In Chapter', 'comicpress'), + 'story_prev_in_title' => __('In Chapter', 'comicpress'), + 'story_next_in_title' => __('In Chapter', 'comicpress'), 'previous_title' => __('‹ Previous', 'comicpress'), 'random_title' => __('Random', 'comicpress'), 'archives_title' => __('Archives', 'comicpress'), @@ -395,7 +411,7 @@ class GraphicalNavigationWidget extends WP_Widget { 'next_title' => __('Next ›', 'comicpress'), 'last_title' => __('Last ››', 'comicpress'), 'buyprint_title' => __('Buy Print', 'comicpress') - ); + ); $instance = wp_parse_args((array)$instance, array_merge($field_defaults, $title_defaults)); @@ -406,51 +422,51 @@ class GraphicalNavigationWidget extends WP_Widget { 'last' => __('Last ››', 'comicpress'), 'story_prev' => __('Previous Chapter', 'comicpress'), 'story_next' => __('Next Chapter', 'comicpress'), - 'story_prev_in' => __('Previous In Chapter', 'comicpress'), - 'story_next_in' => __('Next In Chapter', 'comicpress'), + 'story_prev_in' => __('Previous In Chapter', 'comicpress'), + 'story_next_in' => __('Next In Chapter', 'comicpress'), 'comictitle' => __('Comic Title', 'comicpress'), 'archives' => __('Archives', 'comicpress'), 'comments' => __('Comments', 'comicpress'), 'random' => __('Random', 'comicpress'), 'buyprint' => __('Buy Print', 'comicpress') ) as $field => $label) { - $title_field = "${field}_title"; ?> + $title_field = "${field}_title"; ?>

+ id="get_field_id('archive_path'); ?>" + name="get_field_name('archive_path'); ?>" + type="text" + value="" />
@@ -458,9 +474,9 @@ class GraphicalNavigationWidget extends WP_Widget { case "story_prev": ?>
-
+