diff --git a/library/Class/TableDescription.php b/library/Class/TableDescription.php index 7f1cba7eed44a7bc5598efd5aceffd62cd826dfe..bc86453b0235046fedd723a42af0a16a04391f3b 100644 --- a/library/Class/TableDescription.php +++ b/library/Class/TableDescription.php @@ -21,12 +21,20 @@ class Class_TableDescription { + use Trait_Translator; + + const + SORT_NONE = 'sortNone', + SORT_CLIENT = 'sortClient', + SORT_SERVER = 'sortServer' + ; protected $_columns, $_id, $_pager = false, - $_sorter = true; + $_sorter = self::SORT_CLIENT, + $_order; public function __construct($id) { @@ -51,14 +59,35 @@ class Class_TableDescription { } + public function setSorterNone() { + return $this->setSorter(static::SORT_NONE); + } + + + public function setSorterServer() { + return $this->setSorter(static::SORT_SERVER); + } + + public function setSorter($sorter) { $this->_sorter = $sorter; return $this; } - public function getSorter() { - return $this->_sorter; + public function isSorterClient() { + return static::SORT_CLIENT == $this->_sorter; + } + + + public function isSorterServer() { + return static::SORT_SERVER == $this->_sorter; + } + + + public function setOrder($order) { + $this->_order = $order; + return $this; } @@ -87,7 +116,8 @@ class Class_TableDescription { $description = array_merge(['attribute' => '', 'callback' => null, - 'options' => ''], + 'options' => '', + 'sort_attribute' => ''], $description); $this ->_columns @@ -100,17 +130,14 @@ class Class_TableDescription { public function newColumn($label, $description) { return $description['callback'] - ? new Class_TableDescription_ColumnForCallback($label, - $description['attribute'], - $description['callback']) - : new Class_TableDescription_ColumnForAttribute($label, - $description['attribute']); + ? new Class_TableDescription_ColumnForCallback($label, $description, $this) + : new Class_TableDescription_ColumnForAttribute($label, $description, $this); } public function getActionColumn() { if (!isset($this->_actions)) { - $this->_actions = (new Class_TableDescription_ColumnForActions()) + $this->_actions = (new Class_TableDescription_ColumnForActions($this->_('Actions'), [], $this)) ->setOptions(['data-sorter' => 'false', 'class' => 'actions', 'style' => 'min-width: 80px']); @@ -127,9 +154,28 @@ class Class_TableDescription { return $this; } + public function numberOfColumns() { return $this->_columns->count(); } + + + public function withOrder($label, $attribute) { + $parts = explode(' ', $this->_order); + $order = $attribute; + if (($attribute == $parts[0]) && (!isset($parts[1]))) + $order .= ' desc'; + + $data_order = ($attribute == $parts[0]) + ? str_replace(' ', '_', 'order_' . $order) + : ''; + + return function($view) use($order, $label, $data_order) { + return $view->tagAnchor(['order' => $order, 'page' => null], + $label, + ['data-order' => $data_order]); + }; + } } @@ -172,11 +218,13 @@ class Class_TableDescription_Columns { abstract class Class_TableDescription_ColumnAbstract { protected $_label, + $_table_description, $_options = []; - public function __construct($label) { + public function __construct($label, $description, $table_description) { $this->_label = $label; + $this->_table_description = $table_description; } @@ -206,52 +254,60 @@ abstract class Class_TableDescription_ColumnAbstract { - -class Class_TableDescription_ColumnForCallback extends Class_TableDescription_ColumnAbstract { +class Class_TableDescription_ColumnForAttribute extends Class_TableDescription_ColumnAbstract { protected - $_callback, - $_attribute; + $_attribute, + $_sort_attribute; - public function __construct($label, $attribute, $callback) { - parent::__construct($label); - $this->_attribute = $attribute; - $this->_callback = $callback; + public function __construct($label, $description, $table_description) { + parent::__construct($label, $description, $table_description); + $this->_attribute = $description['attribute']; + $this->_sort_attribute = $description['sort_attribute'] + ? $description['sort_attribute'] + : $this->_attribute; + } + + + public function getLabel() { + return $this->_table_description->isSorterServer() + ? $this->_table_description->withOrder(parent::getLabel(), $this->_sort_attribute) + : parent::getLabel(); } public function renderModelOn($model, $canvas) { - return $canvas->renderContent(call_user_func($this->_callback, - $model, - $this->_attribute)); + return $canvas->renderContent($model->callGetterByAttributeName($this->_attribute)); } } -class Class_TableDescription_ColumnForAttribute extends Class_TableDescription_ColumnAbstract { - protected $_attribute; +class Class_TableDescription_ColumnForCallback extends Class_TableDescription_ColumnForAttribute { + protected + $_callback; - public function __construct($label, $attribute) { - parent::__construct($label); - $this->_attribute = $attribute; + public function __construct($label, $description, $table_description) { + parent::__construct($label, $description, $table_description); + $this->_callback = $description['callback']; } public function renderModelOn($model, $canvas) { - return $canvas->renderContent($model->callGetterByAttributeName($this->_attribute)); + return $canvas->renderContent(call_user_func($this->_callback, + $model, + $this->_attribute)); } } - class Class_TableDescription_ColumnForActions extends Class_TableDescription_ColumnAbstract { use Trait_Translator; protected $_actions; - public function __construct() { - parent::__construct($this->_('Actions')); + public function __construct($label, $description, $table_description) { + parent::__construct($label, $description, $table_description); $this->_actions = new Storm_Collection(); } diff --git a/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php b/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php index b6f495d42d46ae5550a89762fd96da6066b49622..55eb4afe4aaa34df22514edce4e3122d4acfd480 100644 --- a/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php +++ b/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php @@ -23,6 +23,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen use Trait_Translator; protected + $_view, $_params, $_items_paginator, $_breadcrumb, @@ -32,6 +33,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen public function init() { parent::init(); + $this->_view = $this->getActionController()->view; $this->_form_settings = (new Class_Entity()) ->setPlaceHolder($this->_('titre du document')) ->setSearchText($this->_('Filtrer')) @@ -39,17 +41,81 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function render($view, $callback) { - return $view->tagModelTable($this->getItems(), - $this->getItemsCols($view), - $this->getItemsAttribs(), - [function($model) use ($view) - { - return $view->renderPluginsActions($model); - }], - $this->getItemsId(), - $this->getItemsGroupBy(), - $this->isSearching() ? [$this->getItemsLabelAttrib() => $callback] : [], $this->enabledPager(), $this->enabledSorter()); + public function getCategoriesDescription() { + if ($this->isSearching()) + return; + + $labelWithCount = function($model, $attrib) { + return $this->_renderCategory($model, $attrib); + }; + + $description = (new Class_TableDescription('categories_' . get_class($this->getModel()))); + return $this->_describeCategoriesIn($description) + ->addRowAction(function($model) + { + return $this->_view->renderPluginsActions($model); + }); + } + + + abstract protected function _describeCategoriesIn($description); + + + protected function _renderCategory($model, $attrib) { + $url = $this->_view->url($this->renderCategoryUrlParams($model), null, true); + + $label = Class_Admin_Skin::current()->renderActionIconOn('category', $this->_view) + . $model->$attrib; + + $count = ''; + + if ($this->isCountEnabled()) + $label .= ' (' . ($count = $this->countItemsInTreeFrom($model)) . ')'; + + return $this->_view->tagAnchor($url, $label, ['data-count' => $count]); + } + + + public function getItemsDescription() { + if (!$this->getModel() && !$this->isSearching()) + return; + + $description = new Class_TableDescription(get_class($this->getModel())); + + return $this + ->_describeItemsIn($description) + ->addRowAction(function($model) + { + return $this->_view->renderPluginsActions($model); + }) + ->setOrder($this->getOrder()); + } + + + abstract protected function _describeItemsIn($description); + + + protected function _renderItem($model, $attrib) { + if (!$this->isSearching()) + return $model->$attrib; + + return $this->_view->tag('span', $model->$attrib) + . $this->_view->tag('p', + $this->_getBreadcrumbHtmlFor($this->getBreadcrumbFor($this->getCategoryFor($model))), + ['style' => 'font-size:0.9em;']); + } + + + protected function _getBreadcrumbHtmlFor($breadcrumb) { + $breadcrumb_html = []; + + foreach($breadcrumb as $loc) { + $breadcrumb_html[] = $this->_view->tagAnchor($this->_view->url($loc['url'], null, true), + $loc['label'], + $loc['options']); + } + + return implode(' > ',$breadcrumb_html); } @@ -73,22 +139,22 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getBaseUrl() { + protected function getBaseUrl() { return []; } - public function getSearchUrl() { + protected function getSearchUrl() { return $this->getBaseUrl() + ['title_search' => '']; } - public function getBreadcrumbUrl() { + protected function getBreadcrumbUrl() { return $this->getBaseUrl(); } - public function getParamKey() { + protected function getParamKey() { return 'id'; } @@ -100,7 +166,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getUrlParams($model) { + protected function getUrlParams($model) { return array_merge($this->getStartParams(), $this->getBaseUrl(), [$this->getParamKey() => $model->getId()]); @@ -113,7 +179,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getStartKey() { + protected function getStartKey() { return 'start_cat'; } @@ -133,7 +199,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getItems() { + protected function getItems() { return []; } @@ -159,17 +225,17 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getCountSearchResult() { + protected function getCountSearchResult() { return 0; } - public function getSearchColumns() { + protected function getSearchColumns() { return ['titre']; } - public function getSearchParams() { + protected function getSearchParams() { $search_param = Zend_Db_Table::getDefaultAdapter()->quote('%' . $this->getSearch() . '%'); $columns = $this->getSearchColumns(); @@ -182,7 +248,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getBreadcrumb() { + protected function getBreadcrumb() { return $this->isSearching() ? [] : $this->getBreadcrumbFor($this->getModel(), [], $this->getStartKey()); @@ -195,7 +261,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen * @param $start_key string * @return array */ - public function getBreadcrumbFor($model, $breadcrumb=[], $start_key='') { + protected function getBreadcrumbFor($model, $breadcrumb=[], $start_key='') { if (!$model) return $breadcrumb; @@ -223,17 +289,17 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getStrategyLabel() { + protected function getStrategyLabel() { return ''; } - public function countItemsFor($model) { + protected function countItemsFor($model) { return 0; } - public function countRecursiveItemsFor($model) { + protected function countRecursiveItemsFor($model) { return 0; } @@ -253,27 +319,27 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getItemsId() { + protected function getItemsId() { return ''; } - public function getItemsAttribs() { + protected function getItemsAttribs() { return [$this->getItemsLabelAttrib()]; } - public function getItemsLabelAttrib() { + protected function getItemsLabelAttrib() { return 'titre'; } - public function getItemsGroupBy() { + protected function getItemsGroupBy() { return null; } - public function getCategoryFor($model) { + protected function getCategoryFor($model) { return $model->getCategorie(); } @@ -283,34 +349,34 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getParams() { + protected function getParams() { return $this->_params; } - public function getParam($name, $default = null) { + protected function getParam($name, $default = null) { return (array_key_exists($name, $this->_params) && $this->_params[$name]) ? $this->_params[$name] : $default; } - public function getPage() { + protected function getPage() { return $this->getParam('page'); } - public function getSearch() { + protected function getSearch() { return $this->getSearchValue(); } - public function getModelId() { + protected function getModelId() { return ($model = $this->getModel()) ? $model->getId() : 0; } - public function getSearchValue() { + protected function getSearchValue() { return $this->getParam('search_value'); } @@ -326,7 +392,7 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getRequestParam($key, $default = null) { + protected function getRequestParam($key, $default = null) { return $this->getRequest()->getParam($key, $default); } @@ -356,12 +422,12 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen } - public function getItemsCols($view) { + protected function getItemsCols($view) { return ['']; } - public function getOrder() { + protected function getOrder() { return $this->getParam('order', 'titre'); } @@ -376,22 +442,4 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen 'value' => $this->getSearch()]) ->addUniqDisplayGroup('list_search_group'); } - - - protected function _withOrder($view, $attribute, $label) { - $order = $this->getOrder(); - $order_param = $attribute; - - if((0 === strpos($order, $attribute)) && (false === strpos($order, 'desc'))) - $order_param .= ' desc'; - - $data_order = (false === strpos($order, $attribute)) - ? '' - : str_replace(' ', '_', 'order_' . $order_param); - - $url = ['order' => $order_param, - 'page' => null]; - - return $view->tagAnchor($url, $label, ['data-order' => $data_order]); - } } \ No newline at end of file diff --git a/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php b/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php index a135e409373a18162f864d479cb5db99668a8e23..4837deff627c5659cbd59f75cf103f606ba9daf7 100644 --- a/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php +++ b/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php @@ -62,7 +62,7 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr foreach($actions as $action) $description->addRowAction($action); - $description->setSorter(false); + $description->setSorterNone(); return $view->renderTable($description, (new Class_TableDescription_Models($this->getItems()))->groupBy($this->getItemsGroupBy())); diff --git a/library/ZendAfi/Controller/Action/Helper/ThesauriListViewMode.php b/library/ZendAfi/Controller/Action/Helper/ThesauriListViewMode.php index b86bb6f62535e0fd8deafc38292f9cccac253c2e..b898f27eae242182af277f901b5635a1a529c492 100644 --- a/library/ZendAfi/Controller/Action/Helper/ThesauriListViewMode.php +++ b/library/ZendAfi/Controller/Action/Helper/ThesauriListViewMode.php @@ -21,8 +21,6 @@ class ZendAfi_Controller_Action_Helper_ThesauriListViewMode extends ZendAfi_Controller_Action_Helper_AbstractListViewMode { - - public function thesauriListViewMode($params) { $this->_params = $params; return $this; @@ -34,6 +32,35 @@ class ZendAfi_Controller_Action_Helper_ThesauriListViewMode extends ZendAfi_Cont } + protected function _describeCategoriesIn($description) { + return $description + ->addColumn($this->_('Thesaurus'), ['attribute' => 'libelle', + 'callback' => function($model, $attrib) + { + return $this->_renderCategory($model, $attrib); + }]) + ->addColumn($this->_('Libellé facette'), 'libelle_facette') + ->addColumn($this->_('Code facette'), 'facette_index') + ->addColumn($this->_('Règle'), 'rules_label'); + } + + + protected function _describeItemsIn($description) { + return $description + ->addColumn($this->_('Thesaurus'), ['attribute' => 'libelle', + 'callback' => function($model, $attrib) + { + return $this->_renderItem($model, $attrib); + }]) + ->addColumn($this->_('Libellé facette'), 'libelle_facette') + ->addColumn($this->_('Code facette'), ['attribute' => 'facette_index', + 'sort_attribute' => 'id_thesaurus']) + ->addColumn($this->_('Règle'), 'rules_label') + ->setSorterServer() + ; + } + + protected function enabledSorter() { return false; } @@ -97,6 +124,11 @@ class ZendAfi_Controller_Action_Helper_ThesauriListViewMode extends ZendAfi_Cont } + protected function getCategoryFor($model) { + return $model->getParent(); + } + + public function countItemsFor($model) { return count($model->getChildrenItems()); } @@ -109,53 +141,6 @@ class ZendAfi_Controller_Action_Helper_ThesauriListViewMode extends ZendAfi_Cont } - public function getItemsCols($view) { - $order = $this->getOrder(); - $anchor_wrapper = function($key, $label) use ($view, $order) { - $order_param = $key; - if((0 === strpos($order, $key)) && (false === strpos($order, 'desc'))) - $order_param .= ' desc'; - - $data_order = (false === strpos($order, $key)) - ? '' - : str_replace(' ', '_', 'order_' . $order_param); - - $url = ['order' => $order_param, - 'page' => null]; - - return $view->tagAnchor($url, $label, ['data-order' => $data_order]); - }; - - $cols = [$anchor_wrapper('libelle', $this->_('Thesaurus')), - $anchor_wrapper('libelle_facette', $this->_('Libellé facette')), - $anchor_wrapper('id_thesaurus', $this->_('Code facette')), - $anchor_wrapper('rules_label', $this->_('Règle'))]; - - return $cols; - } - - - public function getCategoriesCols() { - return [$this->_('Thesaurus'), - $this->_('Libellé facette'), - $this->_('Code facette'), - $this->_('Règle')]; - } - - - public function getItemsAttribs() { - return $this->getCategoriesAttribs(); - } - - - public function getCategoriesAttribs() { - return ['libelle', - 'libelle_facette', - 'facette_index', - 'rules_label']; - } - - public function getSearchColumns() { return ['libelle', 'libelle_facette', diff --git a/library/ZendAfi/View/Helper/Admin/ListViewMode.php b/library/ZendAfi/View/Helper/Admin/ListViewMode.php index cb4c0f4e87fabede754ff8cc7faa987a5a57ab9a..4e382830918a6d567da83ec600891d1e42def813 100644 --- a/library/ZendAfi/View/Helper/Admin/ListViewMode.php +++ b/library/ZendAfi/View/Helper/Admin/ListViewMode.php @@ -67,54 +67,18 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel protected function getCategoriesHTML() { - if ($this->_list->isSearching()) + if(!$description = $this->_list->getCategoriesDescription()) return ''; - $labelWithCount = function($model, $attrib) { - return $this->_renderCategory($model, $attrib); - }; - - return $this->view - ->tagModelTable($this->_list->getCategories(), - $this->_list->getCategoriesCols(), - $this->_list->getCategoriesAttribs(), - [function($model) - { - return $this->view->renderPluginsActions($model); - }], - $this->_list->getCategoriesId(), - $this->_list->getCategoriesGroupBy(), - [$this->_list->getCategoriesLabelAttrib() => $labelWithCount]); - } - - - protected function _renderCategory($model, $attrib) { - $url = $this->view->url($this->_list->renderCategoryUrlParams($model), - null, true); - - $label = Class_Admin_Skin::current()->renderActionIconOn('category', $this->view) - . $model->$attrib; - - $count = ''; - if ($this->_list->isCountEnabled()) - $label .= ' (' . ($count = $this->_list->countItemsInTreeFrom($model)) . ')'; - - return $this->view->tagAnchor($url, $label, ['data-count' => $count]); + return $this->view->renderTable($description, $this->_list->getCategories()); } protected function getItemsHTML() { - if (!$this->_list->getModel() && !$this->_list->isSearching()) + if (!$description = $this->_list->getItemsDescription()) return ''; - $labelWithBreadcrumb = function($model, $attrib) { - return $this->_tag('span', $model->$attrib) - . $this->_tag('p', - $this->getBreadcrumbHTMLFor($this->_list->getBreadcrumbFor($this->_list->getCategoryFor($model))), - ['style' => 'font-size:0.9em;']); - }; - - return $this->_list->render($this->view, $labelWithBreadcrumb); + return $this->view->renderTable($description, $this->_list->getItems()); } diff --git a/library/ZendAfi/View/Helper/Admin/SearchUsers.php b/library/ZendAfi/View/Helper/Admin/SearchUsers.php index da4eda01d3a207e06ca3ae3136e1e2dc53d18546..cf82bc4be687f5f72478e7bd8197092ad1da9ca0 100644 --- a/library/ZendAfi/View/Helper/Admin/SearchUsers.php +++ b/library/ZendAfi/View/Helper/Admin/SearchUsers.php @@ -72,7 +72,7 @@ class ZendAfi_View_Helper_Admin_SearchUsers extends ZendAfi_View_Helper_BaseHelp $description = $this ->_addColumnsTo(new Class_TableDescription('users_table')) ->addRowAction($this->actions) - ->setSorter(false); + ->setSorterNone(); return $this->view->renderTable($description, (new Class_TableDescription_Models($this->users))); diff --git a/library/ZendAfi/View/Helper/RenderModelActions.php b/library/ZendAfi/View/Helper/RenderModelActions.php index 747af8e56bbd5a7666c41eb56b00295dd3ece618..424511789e2c345f9f4338bdfc382fa2a66d92a9 100644 --- a/library/ZendAfi/View/Helper/RenderModelActions.php +++ b/library/ZendAfi/View/Helper/RenderModelActions.php @@ -32,4 +32,3 @@ class ZendAfi_View_Helper_RenderModelActions extends ZendAfi_View_Helper_BaseHel return $this->_tag('div', $html, ['class' => 'actions']); } } -?> \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/RenderTable.php b/library/ZendAfi/View/Helper/RenderTable.php index c5c37a5f3b50ae4a506ccb81a12b9f8b8e59c5bb..39310338f06df3a007b1e44313142b2a151f3dbf 100644 --- a/library/ZendAfi/View/Helper/RenderTable.php +++ b/library/ZendAfi/View/Helper/RenderTable.php @@ -41,7 +41,7 @@ class ZendAfi_View_Helper_RenderTable extends ZendAfi_View_Helper_BaseHelper { $classes = 'models'; - if($description->getSorter()) { + if($description->isSorterClient()) { $classes .= ' tablesorter'; Class_ScriptLoader::getInstance()->loadTableSorter($description->getPager()); } @@ -122,8 +122,10 @@ class ZendAfi_View_Helper_RenderTable_Header extends ZendAfi_View_Helper_BaseHel public function _renderColumn($column) { + $label = $column->getLabel(); + return $this->_tag('th', - $column->getLabel(), + is_callable($label) ? $label($this->view) : $label, $column->getOptions() ? $column->getOptions() : null); } } @@ -206,6 +208,4 @@ class ZendAfi_View_Helper_RenderTable_Cell extends ZendAfi_View_Helper_BaseHelpe public function renderModelAction($model, $description) { $this->renderContent($this->view->renderModelAction($model, $description)); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/TagModelTable.php b/library/ZendAfi/View/Helper/TagModelTable.php index 58281612b862b732e9628e51ca2ec87f626f8907..9df85bf6fbdd23b7f574241cb1b93990ed0e6eb2 100644 --- a/library/ZendAfi/View/Helper/TagModelTable.php +++ b/library/ZendAfi/View/Helper/TagModelTable.php @@ -51,12 +51,12 @@ class ZendAfi_View_Helper_TagModelTable extends ZendAfi_View_Helper_BaseHelper { foreach($actions as $action) $description->addRowAction($action); - $description - ->setSorter($sorter) - ->setPager($pager); + $description->setPager($pager); + + if (!$sorter) + $description->setSorterNone(); return $this->view->renderTable($description, (new Class_TableDescription_Models($models))->groupBy($group_by)); } } -?> diff --git a/tests/scenarios/Thesauri/ThesauriTest.php b/tests/scenarios/Thesauri/ThesauriTest.php index 036416c56b3e17ea328082fb353fa9f362fa575c..194b5d0da792009f5736aafe66816a1054f7cbe1 100644 --- a/tests/scenarios/Thesauri/ThesauriTest.php +++ b/tests/scenarios/Thesauri/ThesauriTest.php @@ -21,29 +21,32 @@ abstract class ThesauriTestCase extends Admin_AbstractControllerTestCase { - protected $_storm_default_to_volatile = true; + protected + $_storm_default_to_volatile = true, + $_sifi, + $_docu; public function setUp() { parent::setUp(); Class_AdminVar::set('THESAURI_BROWSER', 1); - $this->fixture('Class_CodifThesaurus', - ['id' => 3, - 'libelle' => 'Document', - 'libelle_facette' => 'Document', - 'id_thesaurus' => 'DOCU', - 'id_origine' => null, - 'code' => 'DOCU', - 'rules' => '{"label":" 99$t "}']); - - $this->fixture('Class_CodifThesaurus', - ['id' => 4, - 'libelle' => 'SIFI', - 'libelle_facette' => 'Science fiction', - 'id_thesaurus' => 'DOCU0001', - 'id_origine' => null, - 'code' => 'DOCU']); + $this->_docu = $this->fixture('Class_CodifThesaurus', + ['id' => 3, + 'libelle' => 'Document', + 'libelle_facette' => 'Document', + 'id_thesaurus' => 'DOCU', + 'id_origine' => null, + 'code' => 'DOCU', + 'rules' => '{"label":" 99$t "}']); + + $this->_sifi = $this->fixture('Class_CodifThesaurus', + ['id' => 4, + 'libelle' => 'SIFI', + 'libelle_facette' => 'Science fiction', + 'id_thesaurus' => 'DOCU0001', + 'id_origine' => null, + 'code' => 'DOCU']); } } @@ -138,19 +141,51 @@ class ThesauriIndexChildrenTest extends ThesauriTestCase { class ThesauriIndexChildrenSearchTest extends ThesauriTestCase { - public function setUp() { parent::setUp(); $_SERVER['HTTP_REFERER'] = 'http://test.org/admin/thesauri/index'; - $this->postDispatch('/admin/thesauri/index', - ['title_search' => 'Docu']); } /** @test */ public function searchShouldRedirect() { + $this->postDispatch('/admin/thesauri/index', + ['title_search' => 'Docu']); $this->assertRedirectTo('/admin/thesauri/index/title_search/Docu/page/1/order/libelle'); } + + + /** @test */ + public function redirectedShouldDisplayResult() { + $this->onLoaderOfModel('Class_CodifThesaurus') + ->whenCalled('root')->answers(new Class_CodifThesaurus()) + + ->whenCalled('findAllBy') + ->with(['where' => "(libelle like '%Docu%') or (libelle_facette like '%Docu%') or (code like '%Docu%') or (id_thesaurus like '%Docu%') or (rules like '%Docu%')", + 'order' => "libelle", + 'limitPage' => ["1", 25]]) + ->answers([$this->_sifi]) + + ->whenCalled('countBy') + ->with(['where' => "(libelle like '%Docu%') or (libelle_facette like '%Docu%') or (code like '%Docu%') or (id_thesaurus like '%Docu%') or (rules like '%Docu%')", + 'order' => "libelle", + ]) + ->answers(1) + + ->whenCalled('findParent')->with('DOCU0001') + ->answers($this->_docu) + + ->whenCalled('findParent')->with('DOCU') + ->answers(null) + + ->beStrict(); + + $this->dispatch('/admin/thesauri/index/title_search/Docu/page/1/order/libelle', true); + + $this->assertXPathContentContains('//span', 'SIFI'); + $this->assertXPathContentContains('//a[contains(@href, "/admin/thesauri/index/parent_id/3")]', + 'Document'); + } }