diff --git a/application/modules/admin/controllers/UrlManagerController.php b/application/modules/admin/controllers/UrlManagerController.php index 0923cc5bbbed5e45b763d46d2673a22e4446c63b..2c128f71708e3d59be861996215ab390df2d8b71 100644 --- a/application/modules/admin/controllers/UrlManagerController.php +++ b/application/modules/admin/controllers/UrlManagerController.php @@ -21,38 +21,20 @@ class Admin_UrlManagerController extends ZendAfi_Controller_Action { + + public function indexAction() { if ($this->_request->isPost()) - return $this->_redirect(Class_Url::absolute(array_filter(array_merge(['module' => 'admin', - 'controller' => 'url-manager', - 'action' => 'index'], - $this->_request->getPost())))); + return $this->_redirect(Class_Url::absolute(array_merge(['module' => 'admin', + 'controller' => 'url-manager', + 'action' => 'index'], + $this->_request->getPost()))); $this->view->titre = $this->_('Contrôle des URL'); $this->view->urls = (new Class_UrlManager)->findAll(['protocol' => $this->_getParam('protocol', 'no'), 'term' => $this->_getParam('term'), - 'domain' => $this->_getParam('domain')]); + 'group_by' => $this->_getParam('group_by')]); $this->view->searchform = $this->_searchForm(); - return; - - if ($this->_request->isPost() - && ($new_text=$this->_getParam('new_text')) - && ($old_text = $this->_getParam('old_text'))) - (new Class_ContentTextReplacement())->replaceText($old_text,$new_text); - - $this->view->search = $this->_getParam('term'); - $this->view->form = $this->_textChangeForm(); - $this->view->searchform = $this->_searchForm(); - - $protocol = $this->_getParam('protocol', 'no'); - - $this->view->urltype = ($protocol = ('no' == $protocol) - ? 'http[s]*' - : $protocol); - - $this->view->preg = ($this->view->only_baseurls = $this->_getParam('domain', 0)) - ? '@(' . $protocol . '://[\w\.\-\%\+]+)[\b\s]?@i' - : '@(' . $protocol . '://[\w\/\.\-\%\+]+)[\b\s]?@i'; } @@ -101,11 +83,11 @@ class Admin_UrlManagerController extends ZendAfi_Controller_Action { 'value' => $this->_getParam('protocol', 'no')]) ->addElement('radio', - 'domain', - ['label' => $this->_('Regrouper par domaine'), - 'multioptions' => ['1' => $this->_('Oui'), - '0' => $this->_('Non')], - 'value' => $this->_getParam('base', 0)]) + 'group_by', + ['label' => $this->_('Regrouper par'), + 'multioptions' => ['domain' => $this->_('Domaine'), + 'no' => $this->_('Aucun')], + 'value' => $this->_getParam('group_by', 'no')]) ->addUniqDisplayGroup('search', ['legend' => $this->_('Filtrer les URL')]); diff --git a/library/Class/UrlManager.php b/library/Class/UrlManager.php index 57a5b373722835d83da13a5838fcfd432470f187..808d05a7855cae25047d4db9aa36d4d3d41c8582 100644 --- a/library/Class/UrlManager.php +++ b/library/Class/UrlManager.php @@ -30,19 +30,32 @@ class Class_UrlManager extends Class_Entity { ? 'http' : $params['protocol']; - $term = $params['term']; - $preg = $params['domain'] - ? '@(' . $protocol . '://[\w\.\-\%\+]+)[\b\s]?@i' - : '@(' . $protocol . '://[\w\/\.\-\%\+]+)[\b\s]?@i'; + $search_pattern = ('domain' == $params['group_by']) + ? '[\w\.\-\%\+]' + : '[\w\/\.\-\%\+]'; + + $preg = '@(' . $protocol . '://'.$search_pattern.'+)[\b\s]?@i'; + + if ($term = rtrim($params['term'])) { + $sql_protocol .= '%' . $term; + $preg = '@(' . $protocol . '://'.$search_pattern . '*' . $term . $search_pattern . '*)[\b\s]?@i'; + } $this - ->setSqlProtocol($sql_protocol) ->setProtocol($protocol) + ->setSqlProtocol($sql_protocol) ->setPreg($preg); $urls = $this->_collectUrlInArticles([]); $urls = $this->_collectUrlInNewsletters($urls); - return $this->_collectUrlInDomains($urls); + $urls = $this->_collectUrlInDomains($urls); + + uasort($urls, function($instances_a, $instances_b) + { + return count($instances_a) < count($instances_b); + }); + + return $urls; } @@ -81,10 +94,11 @@ class Class_UrlManager extends Class_Entity { if (!isset($match)) continue; - if (!trim($match)) + if (!rtrim($match)) continue; - $url = trim($match); + $url = rtrim($match); + $instance = clone $instance; $instance ->setId(md5($url)) @@ -97,11 +111,6 @@ class Class_UrlManager extends Class_Entity { $urls[$url][] = $instance; } - usort($urls, function($instances_a, $instances_b) - { - return count($instances_a) > count($instances_b); - }); - return $urls; } } \ No newline at end of file diff --git a/library/Class/UrlManager/Description.php b/library/Class/UrlManager/Description.php index 59157e392e0537380f873bbd4165d334583d98ce..44fb473bc39113ff6c41de7e5289541e207de36f 100644 --- a/library/Class/UrlManager/Description.php +++ b/library/Class/UrlManager/Description.php @@ -44,8 +44,7 @@ class Class_UrlManager_Description { return $view->tag('div', '' , ['data-url' => urlencode($instance->getUrl()), 'data-id' => $instance->getId(), - 'data-protocol' => 'http', - 'id' => 'id' . $instance->getId()]); + 'data-protocol' => 'http']); }) ->addColumn($this->_('Url https Ok'), @@ -55,8 +54,7 @@ class Class_UrlManager_Description { return $view->tag('div', '' , ['data-url' => urlencode($instance->getUrl()), 'data-id' => $instance->getId(), - 'data-protocol' => 'http', - 'id' => 'idhttps' . $instance->getId()]); + 'data-protocol' => 'https']); }) ->addColumn($this->_('occurences'), diff --git a/public/admin/js/url-manager/url-manager.js b/public/admin/js/url-manager/url-manager.js index e35a09addb00d05003096475c575baa59a4c9d88..359889b08bdef46aaefe184b2cb8ad68d28629b3 100644 --- a/public/admin/js/url-manager/url-manager.js +++ b/public/admin/js/url-manager/url-manager.js @@ -42,7 +42,7 @@ data : "url=" + url, dataType : "html", success : function(code_html, statut) { - return $('#id' + id).append(code_html); + return $('[data-protocol="' + protocol + '"][data-id="'+ id + '"]').append(code_html); }}); });} }; diff --git a/tests/application/modules/admin/controllers/UrlManagerControllerTest.php b/tests/application/modules/admin/controllers/UrlManagerControllerTest.php index be2cd85663ab039c325c366dc48faeb68af86758..c1584cd0b7470c6f253bc955e87936a83d1654fd 100644 --- a/tests/application/modules/admin/controllers/UrlManagerControllerTest.php +++ b/tests/application/modules/admin/controllers/UrlManagerControllerTest.php @@ -51,8 +51,6 @@ class UrlManagerControllerIndexDispatchTest extends Admin_AbstractControllerTest - - class UrlManagerControllerIndexPostDispatchTest extends Admin_AbstractControllerTestCase { protected $_storm_default_to_volatile = true; @@ -64,11 +62,11 @@ class UrlManagerControllerIndexPostDispatchTest extends Admin_AbstractController /** @test */ - public function shouldRedirectToUrlManagerIndexTermDomainBaseZero() { - $this->postDispatch('/admin/url-manager/index', ['term' => 'domain', - 'base' => 0]); + public function shouldRedirectToUrlManagerIndexTermMonSiteDomainOne() { + $this->postDispatch('/admin/url-manager/index', ['term' => 'mon-site', + 'domain' => 'yes']); - $this->assertRedirectContains('/admin/url-manager/index/term/domain/base/0'); + $this->assertRedirectContains('/admin/url-manager/index/term/mon-site/domain/yes'); } } @@ -81,7 +79,7 @@ class UrlManagerControllerIndexDispatchWithURLFilteredTest extends Admin_Abstrac public function setUp() { parent::setUp(); - $this->fixture('Class_Article', + $this->fixture('Class_Article', ['id' => 78, 'titre' => 'Chien et chat', 'description' => 'test de description : http://mon-domain.org', @@ -137,8 +135,8 @@ class UrlManagerControllerPostTest extends Admin_AbstractControllerTestCase { 'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN])); $this->postDispatch('/admin/url-manager/list/term/http', ['old_text' => 'http://www.biblioteca.fr', - 'new_text' => 'http://www.ma-biblioteca.fr' - ]); + 'new_text' => 'http://www.ma-biblioteca.fr' + ]); } @@ -166,7 +164,7 @@ class UrlManagerControllerForceHttpsPostTest extends Admin_AbstractControllerTes 'password' => 123, 'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN])); - $this->fixture('Class_Notice', + $this->fixture('Class_Notice', ['id' => 123910, 'alpha_titre' => 'LANGUE NON SPECIFIEE', 'type_doc' => Class_TypeDoc::ARTICLE]);