From ba0d8160a34e76c8f7af4e69804effd00327ce67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20P=C4=99szor?= Date: Sat, 15 Jan 2011 11:42:11 +0100 Subject: [PATCH] Add: useTranslator support for Zend_Navigation container --- library/Zend/Navigation/Container.php | 30 +++++++ library/Zend/Navigation/Page.php | 1 + .../Zend/View/Helper/Navigation/Breadcrumbs.php | 2 +- .../Zend/View/Helper/Navigation/HelperAbstract.php | 2 +- library/Zend/View/Helper/Navigation/Menu.php | 2 +- tests/Zend/Navigation/ContainerTest.php | 15 ++++ tests/Zend/Navigation/PageTest.php | 29 +++++++ .../View/Helper/Navigation/BreadcrumbsTest.php | 60 +++++++++++++ tests/Zend/View/Helper/Navigation/MenuTest.php | 13 +++ .../Zend/View/Helper/Navigation/NavigationTest.php | 88 ++++++++++++++++++++ .../translated_one_page_without_translator.html | 81 ++++++++++++++++++ 11 files changed, 320 insertions(+), 3 deletions(-) create mode 100644 tests/Zend/View/Helper/Navigation/_files/expected/menu/translated_one_page_without_translator.html diff --git a/library/Zend/Navigation/Container.php b/library/Zend/Navigation/Container.php index e7e4ebe..5024539 100644 --- a/library/Zend/Navigation/Container.php +++ b/library/Zend/Navigation/Container.php @@ -52,7 +52,37 @@ abstract class Zend_Navigation_Container implements RecursiveIterator, Countable */ protected $_dirtyIndex = false; + /** + * Whether to translate label and title (when translator is available) + * + * @var bool + */ + protected $_useTranslator = true; + // Internal methods: + + /** + * Whether to translate label and title (when translator is available) + * + * @return bool + */ + public function getUseTranslator() + { + return (bool)$this->_useTranslator; + } + + /** + * Whether to translate label and title (when translator is available) + * + * @param bool $flag + * @return Zend_Navigation_Container + */ + public function setUseTranslator($flag) + { + $this->_useTranslator = (bool)$flag; + + return $this; + } /** * Sorts the page index according to page order diff --git a/library/Zend/Navigation/Page.php b/library/Zend/Navigation/Page.php index dd89efc..8470e46 100644 --- a/library/Zend/Navigation/Page.php +++ b/library/Zend/Navigation/Page.php @@ -1102,6 +1102,7 @@ abstract class Zend_Navigation_Page extends Zend_Navigation_Container 'privilege' => $this->getPrivilege(), 'active' => $this->isActive(), 'visible' => $this->isVisible(), + 'useTranslator' => $this->getUseTranslator(), 'type' => get_class($this), 'pages' => parent::toArray() )); diff --git a/library/Zend/View/Helper/Navigation/Breadcrumbs.php b/library/Zend/View/Helper/Navigation/Breadcrumbs.php index ca3b571..326835b 100644 --- a/library/Zend/View/Helper/Navigation/Breadcrumbs.php +++ b/library/Zend/View/Helper/Navigation/Breadcrumbs.php @@ -198,7 +198,7 @@ class Zend_View_Helper_Navigation_Breadcrumbs $html = $this->htmlify($active); } else { $html = $active->getLabel(); - if ($this->getUseTranslator() && $t = $this->getTranslator()) { + if ($active->getUseTranslator() && $this->getUseTranslator() && $t = $this->getTranslator()) { $html = $t->translate($html); } $html = $this->view->escape($html); diff --git a/library/Zend/View/Helper/Navigation/HelperAbstract.php b/library/Zend/View/Helper/Navigation/HelperAbstract.php index 90839c4..8319cd0 100644 --- a/library/Zend/View/Helper/Navigation/HelperAbstract.php +++ b/library/Zend/View/Helper/Navigation/HelperAbstract.php @@ -659,7 +659,7 @@ abstract class Zend_View_Helper_Navigation_HelperAbstract $label = $page->getLabel(); $title = $page->getTitle(); - if ($this->getUseTranslator() && $t = $this->getTranslator()) { + if ($page->getUseTranslator() && $this->getUseTranslator() && $t = $this->getTranslator()) { if (is_string($label) && !empty($label)) { $label = $t->translate($label); } diff --git a/library/Zend/View/Helper/Navigation/Menu.php b/library/Zend/View/Helper/Navigation/Menu.php index 9b58c12..030083d 100644 --- a/library/Zend/View/Helper/Navigation/Menu.php +++ b/library/Zend/View/Helper/Navigation/Menu.php @@ -213,7 +213,7 @@ class Zend_View_Helper_Navigation_Menu $title = $page->getTitle(); // translate label and title? - if ($this->getUseTranslator() && $t = $this->getTranslator()) { + if ($page->getUseTranslator() && $this->getUseTranslator() && $t = $this->getTranslator()) { if (is_string($label) && !empty($label)) { $label = $t->translate($label); } diff --git a/tests/Zend/Navigation/ContainerTest.php b/tests/Zend/Navigation/ContainerTest.php index 3ffba65..cc99e2e 100644 --- a/tests/Zend/Navigation/ContainerTest.php +++ b/tests/Zend/Navigation/ContainerTest.php @@ -1037,4 +1037,19 @@ class Zend_Navigation_ContainerTest extends PHPUnit_Framework_TestCase $this->assertEquals(null, $container->getChildren()); } + + public function testSetUseTranslatorTrueByDefault() + { + $container = new Zend_Navigation(); + + $this->assertTrue($container->getUseTranslator()); + } + + public function testSetUseTranslator() + { + $container = new Zend_Navigation(); + $container->setUseTranslator(false); + + $this->assertFalse($container->getUseTranslator()); + } } diff --git a/tests/Zend/Navigation/PageTest.php b/tests/Zend/Navigation/PageTest.php index 435894b..b10ccd3 100644 --- a/tests/Zend/Navigation/PageTest.php +++ b/tests/Zend/Navigation/PageTest.php @@ -1128,6 +1128,7 @@ class Zend_Navigation_PageTest extends PHPUnit_Framework_TestCase // tweak options to what we expect toArray() to contain $options['type'] = 'Zend_Navigation_Page_Uri'; + $options['useTranslator'] = true; // calculate diff between toArray() and $options $diff = array_diff_assoc($toArray, $options); @@ -1162,4 +1163,32 @@ class Zend_Navigation_PageTest extends PHPUnit_Framework_TestCase $subPageTwoDiff = array_diff_assoc($toArray['pages'][1], $options); $this->assertEquals(array(), $subPageTwoDiff); } + + public function testSetUseTranslator() + { + $page = Zend_Navigation_Page::factory(array( + 'type' => 'uri', + 'useTranslator' => false + )); + + $this->assertFalse($page->getUseTranslator()); + } + + public function testSetUseTranslatorViaSetter() + { + $page = Zend_Navigation_Page::factory(array( + 'type' => 'uri' + )); + $page->setUseTranslator(false); + $this->assertFalse($page->getUseTranslator()); + } + + public function testSetUseTranslatorTrueByDefault() + { + $page = Zend_Navigation_Page::factory(array( + 'type' => 'uri' + )); + + $this->assertTrue($page->getUseTranslator()); + } } diff --git a/tests/Zend/View/Helper/Navigation/BreadcrumbsTest.php b/tests/Zend/View/Helper/Navigation/BreadcrumbsTest.php index eb95059..9b35038 100644 --- a/tests/Zend/View/Helper/Navigation/BreadcrumbsTest.php +++ b/tests/Zend/View/Helper/Navigation/BreadcrumbsTest.php @@ -251,4 +251,64 @@ class Zend_View_Helper_Navigation_BreadcrumbsTest $this->assertEquals($expected, $actual); } + + public function testTranslationForPageEnabledByDefault() + { + $container = $this->_nav1; + $this->_helper->setTranslator($this->_getTranslator()); + + $actual = $this->_helper->setMinDepth(0)->render($container); + + $isTranslated = (bool) strpos($actual, '>Side 2.3<'); + $isUnTranslated = (bool) strpos($actual, '>Page 2.3<'); + + $this->assertTrue($isTranslated); + $this->assertFalse($isUnTranslated); + } + + public function testDisableTranslationForPage() + { + $this->_helper->setTranslator($this->_getTranslator()); + $container = $this->_nav1; + $page = $container->findByLabel('Page 2.3'); + $page->setUseTranslator(false); + + $actual = $this->_helper->breadcrumbs()->setMinDepth(0)->render($container); + + $isTranslated = (bool) strpos($actual, '>Side 2.3<'); + $isUnTranslated = (bool) strpos($actual, '>Page 2.3<'); + + $this->assertFalse($isTranslated); + $this->assertTrue($isUnTranslated); + } + + public function testEnableTranslationForPage() + { + $this->_helper->setTranslator($this->_getTranslator()); + $container = $this->_nav1; + $page = $container->findByLabel('Page 2.3'); + $page->setUseTranslator(true); + + $actual = $this->_helper->setMinDepth(0)->render($container); + + $isTranslated = (bool) strpos($actual, '>Side 2.3<'); + $isUnTranslated = (bool) strpos($actual, '>Page 2.3<'); + + $this->assertTrue($isTranslated); + $this->assertFalse($isUnTranslated); + } + + public function testDisableTranslationForLastPage() + { + $this->_helper->setTranslator($this->_getTranslator()); + $container = $this->_nav1; + $page = $container->findByLabel('Page 2.3.3.1'); + $page->setUseTranslator(false); + + $actual = $this->_helper->breadcrumbs()->setMinDepth(0)->render($container); + + $isTranslated = (bool) strpos($actual, 'Side 2.3.3.1'); + + $this->assertFalse($isTranslated); + } } diff --git a/tests/Zend/View/Helper/Navigation/MenuTest.php b/tests/Zend/View/Helper/Navigation/MenuTest.php index 01f8020..f1b6e52 100644 --- a/tests/Zend/View/Helper/Navigation/MenuTest.php +++ b/tests/Zend/View/Helper/Navigation/MenuTest.php @@ -526,4 +526,17 @@ class Zend_View_Helper_Navigation_MenuTest $this->assertEquals($expected, $actual); } + + public function testDisableTranslationForOnePage() + { + $translator = $this->_getTranslator(); + $this->_helper->setTranslator($translator); + $page = $this->_helper->getContainer()->findBy('label', 'Page 1'); + $page->setUseTranslator(false); + + $expected = $this->_getExpected('menu/translated_one_page_without_translator.html'); + + $actual = $this->_helper->renderMenu(null); + $this->assertEquals($expected, $actual); + } } diff --git a/tests/Zend/View/Helper/Navigation/NavigationTest.php b/tests/Zend/View/Helper/Navigation/NavigationTest.php index c5725ff..a9957cc 100644 --- a/tests/Zend/View/Helper/Navigation/NavigationTest.php +++ b/tests/Zend/View/Helper/Navigation/NavigationTest.php @@ -409,4 +409,92 @@ class Zend_View_Helper_Navigation_NavigationTest $this->assertTrue(strpos($render, 'p2') !== false); } + + public function testEnableTranslationForPage() + { + + $container = new Zend_Navigation(array( + array( + 'label' => 'Page 1', + 'title' => 'Page 1', + 'id' => 'p1', + 'uri' => 'p1', + 'useTranslator' => true + ), + )); + + $this->_helper->setTranslator($this->_getTranslator()); + $render = $this->_helper->menu()->render($container); + + $isTranslated = (bool)strpos($render, 'Side 1'); + + $this->assertTrue($isTranslated); + } + + public function testDisableTranslationForPage() + { + $page = new Zend_Navigation_Page_Uri( + array( + 'label' => 'Page 1', + 'title' => 'Page 1', + 'id' => 'p1', + 'uri' => 'p1', + 'useTranslator' => false + ) + ); + $container = new Zend_Navigation(array( + $page + ) + ); + + $this->_helper->setTranslator($this->_getTranslator()); + $render = $this->_helper->menu()->render($container); + + $isTranslated = (bool)strpos($render, 'Side 1'); + + $this->assertFalse($isTranslated); + } + + public function testDisableTranslationForPageViaSetter() + { + $page = new Zend_Navigation_Page_Uri( + array( + 'label' => 'Page 1', + 'title' => 'Page 1', + 'id' => 'p1', + 'uri' => 'p1', + ) + ); + $page->setUseTranslator(false); + + $container = new Zend_Navigation(); + $container->addPage($page); + + $this->_helper->setTranslator($this->_getTranslator()); + $render = $this->_helper->menu()->render($container); + + $isTranslated = (bool)strpos($render, 'Side 1'); + + $this->assertFalse($isTranslated); + } + + + public function testDisableTranslationForPageWithNoExplicitSettings() + { + $container = new Zend_Navigation(array( + array( + 'label' => 'Page 1', + 'title' => 'Page 1', + 'id' => 'p1', + 'uri' => 'p1' + ), + )); + + $this->_helper->setTranslator($this->_getTranslator()); + $render = $this->_helper->menu()->render($container); + + $isTranslated = (bool)strpos($render, 'Side 1'); + + $this->assertTrue($isTranslated); + } } diff --git a/tests/Zend/View/Helper/Navigation/_files/expected/menu/translated_one_page_without_translator.html b/tests/Zend/View/Helper/Navigation/_files/expected/menu/translated_one_page_without_translator.html new file mode 100644 index 0000000..8091112 --- /dev/null +++ b/tests/Zend/View/Helper/Navigation/_files/expected/menu/translated_one_page_without_translator.html @@ -0,0 +1,81 @@ + \ No newline at end of file -- 1.7.1