diff --git a/VERSIONS_WIP/39494 b/VERSIONS_WIP/39494
new file mode 100644
index 0000000000000000000000000000000000000000..49e4d6b107a902fd1dd5cee10ac54286522af9f7
--- /dev/null
+++ b/VERSIONS_WIP/39494
@@ -0,0 +1,2 @@
+ - ticket #39494 : Administration : ajout des filtres de workflow dans la liste d'articles paginés
+ 
\ No newline at end of file
diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index 6a38330bce8ae6abb0f3e16ac01d027abd0592a9..a51f343b084f7f386866124e159eaf3786ccd253 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -59,6 +59,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
                      }, $bibs);
 
     $search = $this->_getParam('title_search', '');
+    $status = $this->_getParam('status', '');
 
     $id_bib = $this->_getParam('id_bib',
                                $this->identity->isRoleLibraryLimited()
@@ -68,11 +69,12 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
     $params = ['page' => $this->_getParam('page', 0),
                'search_value' => $search,
+               'status' => $status,
                'bib' => $this->_bib,
                'id_bib' => $id_bib,
                'id_cat' => $id_cat];
 
-    if (($id_bib && in_array($id_bib, $ids)) || $id_cat || ($id_bib == '0') || ($search)) {
+    if (($id_bib && in_array($id_bib, $ids)) || $id_cat || ($id_bib == '0') || $search || $status) {
       $params['model'] = Class_ArticleCategorie::find($id_cat);
       $this->view->list = $this->_helper->articleListViewMode($params);
 
@@ -90,9 +92,9 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
   public function indexAction() {
     $this->view->titre = $this->view->_('Articles');
 
-    if($this->_request->isPost() && ($search=$this->_getParam('title_search'))) {
-      return $this->_redirectToRefererWithNewParams(['title_search' => $search]);
-    }
+    if($this->_request->isPost())
+      return $this->_redirectToRefererWithNewParams(['title_search' => $this->_getParam('title_search'),
+                                                     'status' => $this->_getParam('status')]);
 
     if (Class_AdminVar::isArticlesListMode())
       return $this->_renderList();
diff --git a/library/ZendAfi/Controller/Action.php b/library/ZendAfi/Controller/Action.php
index b02fb2f8d26820b92ad1e4110655212eb2d8f020..1e0b96d3176d65af177d156830b2cb4b48ab4b8e 100644
--- a/library/ZendAfi/Controller/Action.php
+++ b/library/ZendAfi/Controller/Action.php
@@ -221,7 +221,7 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action {
       ->route( new ZendAfi_Controller_Request_Http(Zend_Uri_Http::fromString($this->_getReferer())))
       ->getUrlParams();
     $token_params = array_merge($referer_params, $params);
-    $this->_redirect($router->getCurrentRoute()->assemble($token_params));
+    return $this->_redirect($router->getCurrentRoute()->assemble($token_params));
   }
 
 
diff --git a/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php b/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php
index 31bb7e988aad0b055d0d855eb059efb3058241b8..1c81fb68e2c78fa32295a1d282a019a54f1d9a71 100644
--- a/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php
+++ b/library/ZendAfi/Controller/Action/Helper/AbstractListViewMode.php
@@ -20,11 +20,23 @@
  */
 
 abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zend_Controller_Action_Helper_Abstract {
+  use Trait_Translator;
+
   protected
     $_params,
     $_items_paginator,
     $_breadcrumb,
-    $_items_by_page = 25;
+    $_items_by_page = 25,
+    $_form_settings;
+
+
+  public function init() {
+    parent::init();
+    $this->_form_settings = (new Class_Entity())
+      ->setPlaceHolder($this->_('titre du document'))
+      ->setSearchText($this->_('Filtrer'))
+      ->setSearchTitle($this->_('Lancer la recherche'));
+  }
 
 
   public function isSearchEnabled() {
@@ -100,10 +112,15 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen
   }
 
 
+  public function isSearching() {
+    return '' != $this->getSearchValue();
+  }
+
+
   protected function getItemsParams() {
     $default_params = ['limitPage' => [$this->getPage(),  $this->_items_by_page]];
 
-    $params = $this->getSearchValue()
+    $params = $this->isSearching()
       ? $this->getSearchParams()
       : [$this->getParamKey() => $this->getModelId()];
 
@@ -116,16 +133,16 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen
   }
 
 
-  protected function getSearchParams() {
+  public function getSearchParams() {
     return ['where' => 'titre like ' . Zend_Db_Table::getDefaultAdapter()->quote('%' . $this->getSearch() . '%') ,
             'order' => 'titre'];
   }
 
 
   public function getBreadcrumb() {
-    return $this->getSearchValue() ?
-      [] :
-      $this->getBreadcrumbFor($this->getModel(), [], $this->getStartKey());
+    return $this->isSearching()
+      ? []
+      : $this->getBreadcrumbFor($this->getModel(), [], $this->getStartKey());
   }
 
 
@@ -255,8 +272,9 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen
 
 
   public function getItemsPaginator() {
-    $count = $this->getSearchValue() ?
-      $this->getCountSearchResult() : $this->countItemsFor($this->getModel());
+    $count = $this->isSearching()
+      ? $this->getCountSearchResult()
+      : $this->countItemsFor($this->getModel());
 
     return (new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)))
       ->setItemCountPerPage($this->_items_by_page)
@@ -267,4 +285,36 @@ abstract class ZendAfi_Controller_Action_Helper_AbstractListViewMode extends Zen
   public function getRequestParam($key, $default = null) {
     return $this->getRequest()->getParam($key, $default);
   }
+
+
+  public function renderSearchFormOn($view) {
+    $form = $this->_getSearchForm($view);
+    $form = $view->renderForm($form,
+                              [$view->button((new Class_Entity())
+                                             ->setText($this->_form_settings->getSearchText())
+                                             ->setImage($view->tagImg(Class_Admin_Skin::current()
+                                                                      ->renderIconUrlOn('actions',
+                                                                                        'loupe'),
+                                                                      ['style' => 'filter: invert();']))
+                                             ->setAttribs(['onclick' => "var form=$(this).parents('form'); if (!form.size()) form=$(this).parents('.boutons, .admin-buttons').prevAll('form');if (!form.size()) form=$(this).parents('.boutons, .admin-buttons').nextAll('form');form.submit(); return false;",
+                                                           'type' => 'submit',
+                                                           'class' => 'search',
+                                                           'title' => $this->_form_settings->getSearchTitle()]))]);
+
+    return $view->tag('div',
+                      $form,
+                      ['class' => 'list_search_wrapper']);
+  }
+
+
+  protected function _getSearchForm($view) {
+    return (new ZendAfi_Form())
+      ->setAction($view->url(array_filter($this->getSearchUrl()), null, true))
+      ->addElement('text',
+                   'title_search',
+                   ['id' => 'list_title_search',
+                    'placeHolder' => $this->_form_settings->getPlaceHolder(),
+                    'value' => $this->getSearch()])
+      ->addUniqDisplayGroup('list_search_group');
+  }
 }
\ 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 7d2c5f8580fcfac75e0096a7deab735f35d5aaf8..07e46a599a20171dafa078aa38af834e8d1ecb3d 100644
--- a/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php
+++ b/library/ZendAfi/Controller/Action/Helper/ArticleListViewMode.php
@@ -21,13 +21,21 @@
 
 
 class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Controller_Action_Helper_AbstractListViewMode {
-  use Trait_Translator;
   const STRATEGY = 'article';
 
-  protected $_filtred_categories_ids = [],
+  protected
+    $_filtred_categories_ids = [],
     $_search_params;
 
 
+  public function init() {
+    parent::init();
+    $this->_form_settings
+      ->setPlaceHolder($this->_('Titre, auteur, date'))
+      ->setSearchText($this->_('Rechercher'));
+  }
+
+
   public function articleListViewMode($params) {
     $this->_params = $params;
     return $this;
@@ -48,7 +56,8 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr
   public function getSearchUrl() {
     return $this->getBaseUrl() + ['action' => 'index',
                                   'id_bib' => $this->getBibId(),
-                                  'title_search' => ''];
+                                  'title_search' => '',
+                                  'status' => ''];
   }
 
 
@@ -119,8 +128,15 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr
 
 
   protected function getItemsParams() {
-    return array_merge(parent::getItemsParams(),
-                       ['order' => 'titre']);
+    $default_params = ['limitPage' => [$this->getPage(),  $this->_items_by_page]];
+
+    $params = $this->isSearching()
+      ? $this->getSearchParams()
+      : [$this->getParamKey() => $this->getModelId()];
+
+    return array_filter(array_merge($params,
+                                    $default_params,
+                                    ['order' => 'titre']));
   }
 
 
@@ -181,12 +197,13 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr
 
 
   protected function getMultipleSearchParams() {
-    return ['where' => $this->buildWhereParams(),
-            'order' => 'titre'];
+    return array_filter(['where' => $this->buildWhereParams(),
+                         'status' => $this->getStatus(),
+                         'order' => 'titre']);
   }
 
 
-  protected function getSearchParams() {
+  public function getSearchParams() {
     if($this->_search_params)
       return $this->_search_params;
 
@@ -234,7 +251,7 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr
                     'label' => $this->getBibLabel(),
                     'options' => []]];
 
-    if ($this->getSearchValue())
+    if ($this->isSearching())
       return $breadcrumb;
 
     if (Class_Users::getIdentity()->isRoleLibraryLimited())
@@ -328,4 +345,30 @@ class ZendAfi_Controller_Action_Helper_ArticleListViewMode extends ZendAfi_Contr
   public function getStrategyLabel() {
     return static::STRATEGY;
   }
+
+
+  public function _getSearchForm($view) {
+    $form = parent::_getSearchForm($view);
+
+    if(!Class_AdminVar::isWorkflowEnabled())
+      return $form;
+
+    $form->removeDisplayGroup('list_search_group');
+    return $form->addElement('select',
+                             'status',
+                             ['multiOptions' => array_merge([0 => $this->_('Tout statut')],
+                                                            Class_Article::getKnownStatus()),
+                              'value' => $this->getStatus()])
+                ->addUniqDisplayGroup('list_search_group');
+  }
+
+
+  public function getStatus() {
+    return $this->getParam('status');
+  }
+
+
+  public function isSearching() {
+    return parent::isSearching() || $this->getStatus();
+  }
 }
\ No newline at end of file
diff --git a/library/ZendAfi/Controller/Action/Helper/SitothequeListViewMode.php b/library/ZendAfi/Controller/Action/Helper/SitothequeListViewMode.php
index 476cabc77de35db3b9a21a1d38bb3dc0e4cf6e29..cc2da937cddf27b6c02fe0334af90145a6e31084 100644
--- a/library/ZendAfi/Controller/Action/Helper/SitothequeListViewMode.php
+++ b/library/ZendAfi/Controller/Action/Helper/SitothequeListViewMode.php
@@ -84,7 +84,7 @@ class ZendAfi_Controller_Action_Helper_SitothequeListViewMode extends ZendAfi_Co
   }
 
 
-  protected function getSearchParams() {
+  public function getSearchParams() {
     $search_params = ['where' => 'titre like \'%' . trim($this->getSearch()) . '%\'',
                       'order' => 'titre'];
 
diff --git a/library/ZendAfi/View/Helper/Admin/ListViewMode.php b/library/ZendAfi/View/Helper/Admin/ListViewMode.php
index e4153539b47bafe1911e8b1e90a5b41b3736e84b..1a289865e9a016f1454d2c757c8a11fc2e7e5b8c 100644
--- a/library/ZendAfi/View/Helper/Admin/ListViewMode.php
+++ b/library/ZendAfi/View/Helper/Admin/ListViewMode.php
@@ -27,13 +27,11 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel
     if(!$this->_list = $list)
       return '';
 
-    $html = $this->getSearchFormHTML()
-      . $this->getBreadcrumbHTML()
-      . $this->getCategoriesHTML()
-      . $this->getItemsHTML()
-      . $this->getItemsPaginatorHTML();
-
-    return $html;
+    return implode([$this->getSearchFormHTML(),
+                    $this->getBreadcrumbHTML(),
+                    $this->getCategoriesHTML(),
+                    $this->getItemsHTML(),
+                    $this->getItemsPaginatorHTML()]);
   }
 
 
@@ -41,23 +39,7 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel
     if (!$this->_list->isSearchEnabled())
       return '';
 
-    $search_input = $this->_tag('input', '',
-                                ['type' => 'text',
-                                 'name' => 'title_search',
-                                 'id' => 'list_title_search',
-                                 'placeholder' => $this->_('titre du document'),
-                                 'value' => $this->_list->getSearchValue()]);
-
-    $search_button = $this->_tag('button', $this->_('Filtrer'),
-                                 ['id' => 'list_filter_button']);
-
-    return $this->_tag('form', $search_input . $search_button,
-                       ['style' => 'text-align: right;',
-                        'action' => $this->view->url(array_filter($this->_list->getSearchUrl()),
-                                                     null,
-                                                     true),
-                        'method' => 'POST',
-                        'id' => 'list_search_form']);
+    return $this->_list->renderSearchFormOn($this->view);
   }
 
 
@@ -85,7 +67,7 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel
 
 
   protected function getCategoriesHTML() {
-    if ($this->_list->getSearchValue())
+    if ($this->_list->isSearching())
       return '';
 
     $labelWithCount = function($model, $attrib) {
@@ -124,7 +106,7 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel
 
 
   protected function getItemsHTML() {
-    if (!$this->_list->getModel() && !$this->_list->getSearchValue())
+    if (!$this->_list->getModel() && !$this->_list->isSearching())
       return '';
 
     $labelWithBreadcrumb = function($model, $attrib) {
@@ -144,7 +126,7 @@ class ZendAfi_View_Helper_Admin_ListViewMode extends ZendAfi_View_Helper_BaseHel
                              }],
                             $this->_list->getItemsId(),
                             $this->_list->getItemsGroupBy(),
-                            $this->_list->getSearchValue() ? [$this->_list->getItemsLabelAttrib() => $labelWithBreadcrumb] : []);
+                            $this->_list->isSearching() ? [$this->_list->getItemsLabelAttrib() => $labelWithBreadcrumb] : []);
   }
 
 
diff --git a/public/admin/css/global.css b/public/admin/css/global.css
index 1daefd23be38feeb7ba28371f4551f2da85df6f8..4a69eb8a93e30eb7d2317c689e4348adbb19284b 100644
--- a/public/admin/css/global.css
+++ b/public/admin/css/global.css
@@ -1564,3 +1564,13 @@ tr.modified label,
     width: 90% !important;
     border: none;
 }
+
+.list_search_wrapper {
+    text-align: right;
+}
+
+.list_search_wrapper > div,
+.list_search_wrapper > form {
+    display: inline-block;
+    vertical-align: middle;
+}
\ No newline at end of file
diff --git a/public/admin/skins/bokeh74/global.css b/public/admin/skins/bokeh74/global.css
index 280ab9bf27f6289b1a9bf7e36846b30f7e079289..05a7ea71e36fdddf6391c1c8d13c4e1d92302ca6 100755
--- a/public/admin/skins/bokeh74/global.css
+++ b/public/admin/skins/bokeh74/global.css
@@ -920,3 +920,13 @@ tr.modified label,
     padding: 0.5em;
     margin: 0.5em;
 }
+
+.list_search_wrapper {
+    text-align: right;
+}
+
+.list_search_wrapper > div,
+.list_search_wrapper > form {
+    display: inline-block;
+    vertical-align: middle;
+}
\ No newline at end of file
diff --git a/public/admin/skins/retro/global.css b/public/admin/skins/retro/global.css
index 4f60fb1a0081d742d8add855b976216ce1b83b3b..2539f9c8f82770da387eb54ee6a1d7f2bbd7925b 100755
--- a/public/admin/skins/retro/global.css
+++ b/public/admin/skins/retro/global.css
@@ -811,3 +811,13 @@ tr.modified label,
     width: 90% !important;
     border: none;
 }
+
+.list_search_wrapper {
+    text-align: right;
+}
+
+.list_search_wrapper > div,
+.list_search_wrapper > form {
+    display: inline-block;
+    vertical-align: middle;
+}
\ No newline at end of file
diff --git a/tests/application/modules/admin/controllers/CmsControllerListModeTest.php b/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
index c7264ffd430ecedaa910d4c358dd0299d360e582..6b0babcaa092bdb93e7cc1fae29efa5c7be60aa0 100644
--- a/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
@@ -430,3 +430,45 @@ class CmsControllerListModeEditPostTest extends CmsControllerListModeTestCase {
     $this->assertNotContains('id_cat', $this->getResponseLocation());
   }
 }
+
+
+
+
+class CmsControllerListModeSearchFormTest extends CmsControllerListModeTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->fixture('Class_AdminVar', ['id' => 'WORKFLOW', 'valeur' => '1']);
+    $this->dispatch('/admin/cms/index/id_cat/1', true);
+  }
+
+
+  /** @test */
+  public function searchInputShouldBeDisplay() {
+    $this->assertXPath('//form//input[@name="title_search"]');
+  }
+
+
+  /** @test */
+  public function statusSelectorShouldBeDisplay() {
+    $this->assertXPath('//form//select[@name="status"]');
+  }
+}
+
+
+
+
+class CmsControllerListModeSearchPostFormTest extends CmsControllerListModeTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->fixture('Class_AdminVar', ['id' => 'WORKFLOW', 'valeur' => '1']);
+    $_SERVER['HTTP_REFERER'] = 'http://mybokeh.fr/admin/cms/index';
+    $this->postDispatch('/admin/cms/index/id_cat/1', ['title_search' => 'abc',
+                                                      'status' => 1]);
+  }
+
+
+  /** @test */
+  public function shouldRedirectToCms() {
+    $this->assertRedirectTo('/admin/cms/index/title_search/abc/status/1');
+  }
+}
diff --git a/tests/library/ZendAfi/Controller/Action/Helper/ArticleListViewModeTest.php b/tests/library/ZendAfi/Controller/Action/Helper/ArticleListViewModeTest.php
index a73bf84280b1e83090a3d2d90f964ca67889345c..21838fe180dab1a7589e83d00cc7e16faae20302 100644
--- a/tests/library/ZendAfi/Controller/Action/Helper/ArticleListViewModeTest.php
+++ b/tests/library/ZendAfi/Controller/Action/Helper/ArticleListViewModeTest.php
@@ -98,4 +98,22 @@ class ArticleListViewModeTest extends ModelTestCase {
 
     $this->assertEquals($where, $this->_list->buildWhereParams());
   }
+
+
+  /**
+   * @test
+   * @dataProvider search
+   */
+  public function searchRequestArrayShouldBeAsExpected($search, $where) {
+    $this->_list = (new ZendAfi_Controller_Action_Helper_ArticleListViewMode())
+      ->articleListViewMode(['page' => 0,
+                             'search_value' => $search,
+                             'status' => 3,
+                             'bib' => $this->_bib,
+                             'id_bib' => null,
+                             'id_cat' => 0]);
+
+    $this->assertEquals(3, $this->_list->getSearchParams()['status']);
+  }
+
 }