From 8734d71d2ff0147a6c1b921154f6c4a06383854a Mon Sep 17 00:00:00 2001
From: gloas <gloas@afi-sa.fr>
Date: Wed, 31 May 2017 12:05:32 +0200
Subject: [PATCH] dev #60900 add show admin icons to menu admin + save
 preferences to user settings

---
 .../admin/controllers/UsersController.php     | 11 +++++++++
 .../ZendAfi/View/Helper/Admin/FrontNav.php    | 11 +++++++++
 public/admin/js/global.js                     | 15 ++++++++++++
 public/admin/skins/bokeh74/front_nav.css      | 24 ++++++++++++++-----
 .../AbonneControllerSettingsTest.php          | 17 +++++++++++++
 .../opac/controllers/IndexControllerTest.php  | 14 +++++++++++
 6 files changed, 86 insertions(+), 6 deletions(-)

diff --git a/application/modules/admin/controllers/UsersController.php b/application/modules/admin/controllers/UsersController.php
index 68c14a12426..e8ef95c5033 100644
--- a/application/modules/admin/controllers/UsersController.php
+++ b/application/modules/admin/controllers/UsersController.php
@@ -49,4 +49,15 @@ class Admin_UsersController extends ZendAfi_Controller_Action {
 
     $this->_redirectToReferer();
   }
+
+
+  public function settingsAction() {
+    $viewRenderer = $this->getHelper('ViewRenderer');
+    $viewRenderer->setNoRender();
+
+    $user = Class_Users::getIdentity();
+    $settings = Class_User_Settings::newWith($user);
+    $settings->set($this->_getParam('key'), $this->_getParam('value'));
+    $user->save();
+   }
 }
diff --git a/library/ZendAfi/View/Helper/Admin/FrontNav.php b/library/ZendAfi/View/Helper/Admin/FrontNav.php
index 7f8b2b6a973..9a712515dfe 100644
--- a/library/ZendAfi/View/Helper/Admin/FrontNav.php
+++ b/library/ZendAfi/View/Helper/Admin/FrontNav.php
@@ -105,6 +105,11 @@ class ZendAfi_View_Helper_Admin_FrontNav extends ZendAfi_View_Helper_BaseHelper
                                      'reactiveOpacBlocksSorting()',
                                      'deactiveOpacBlocksSorting()'),
 
+                $this->_toggleAnchor($this->_('Afficher les icones d\'administration'),
+                                     'show_admin_icons',
+                                     'showAdminIcons()',
+                                     'hideAdminIcons()'),
+
                 $this->_toggleAnchor($this->_('Editeur CSS'),
                                      'css_editor',
                                      'showCSSEditor()',
@@ -167,6 +172,12 @@ class ZendAfi_View_Helper_Admin_FrontNav extends ZendAfi_View_Helper_BaseHelper
                                      'onclick' => $js . ';return true;']);
     };
 
+    $admin = Class_Users::getIdentity();
+    $settings = Class_User_Settings::newWith($admin);
+
+    if($settings->get($class_sufix))
+      Class_ScriptLoader::getInstance()->addJQueryReady($js_on);
+
     return $toggleFy($js_on, 'toggle_off', 'activate_') . $toggleFy($js_off, 'toggle_on', 'deactivate_');
   }
 
diff --git a/public/admin/js/global.js b/public/admin/js/global.js
index fe529d3b302..4e45689dde9 100644
--- a/public/admin/js/global.js
+++ b/public/admin/js/global.js
@@ -327,6 +327,21 @@ function hideZFDebug() {
 }
 
 
+function showAdminIcons() {
+  $("#site_web_wrapper").attr('data-show_admin_icons', 'true');
+  $('.activate_show_admin_icons').hide();
+  $('.deactivate_show_admin_icons').show();
+  $.ajax( baseUrl + '/admin/users/settings/key/show_admin_icons/value/1');
+}
+
+
+function hideAdminIcons() {
+  $("#site_web_wrapper").attr('data-show_admin_icons', 'false');
+  $('.activate_show_admin_icons').show();
+  $('.deactivate_show_admin_icons').hide();
+}
+
+
 function hideMenuAdmin() {
   $('#menuAdmin').css('display','none');
 }
diff --git a/public/admin/skins/bokeh74/front_nav.css b/public/admin/skins/bokeh74/front_nav.css
index dd63dc3b195..8c85d86d28a 100644
--- a/public/admin/skins/bokeh74/front_nav.css
+++ b/public/admin/skins/bokeh74/front_nav.css
@@ -75,12 +75,6 @@
     display: none;
 }
 
-.footer select[onchange],
-.footer a[href*="/admin"],
-.admin_tools_lock {
-    display: none !important;
-}
-
 .menu_admin_front fieldset {
     padding: 0;
     margin: 0;
@@ -116,4 +110,22 @@
     height: 2em;
     border: 1px solid var(--nav-text);
     width: 149px;
+}
+
+#site_web_wrapper[data-show_admin_icons="true"] a[href*="/admin"] {
+    display: inline-block !important;
+}
+
+
+#site_web_wrapper[data-show_admin_icons="true"] .configuration_module {
+    display: block !important;
+}
+
+#site_web_wrapper .footer select[onchange],
+#site_web_wrapper .footer a[href*="/admin"],
+#site_web_wrapper .admin_tools_lock,
+#site_web_wrapper .configuration_module,
+#site_web_wrapper a[href*="/admin"] {
+    display: none !important;
+    opacity: 1 !important;
 }
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/AbonneControllerSettingsTest.php b/tests/application/modules/opac/controllers/AbonneControllerSettingsTest.php
index 4bf8da8d327..c38ce192900 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerSettingsTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerSettingsTest.php
@@ -287,3 +287,20 @@ class AbonneControllerWithLibrariesAndNoDomainsBookmarkableTest extends Abstract
     $this->assertXPathContentContains('//div//a', 'Gérer mes favoris', $this->_response->getBody());
   }
 }
+
+
+
+class AbonneControllerSettingsAdminSettingsTest extends AbonneControllerSettingsTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->_user->beAdminPortail();
+
+    $this->dispatch('/admin/users/settings/key/show_admin_icons/value/1', true);
+  }
+
+
+  /** @test */
+  public function userShowAdminIconsShouldBeEnabled() {
+    $this->assertEquals(1, Class_User_Settings::newWith($this->_user)->get('show_admin_icons'));
+  }
+}
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/IndexControllerTest.php b/tests/application/modules/opac/controllers/IndexControllerTest.php
index d2b36b858a5..eaa1c132db5 100644
--- a/tests/application/modules/opac/controllers/IndexControllerTest.php
+++ b/tests/application/modules/opac/controllers/IndexControllerTest.php
@@ -720,7 +720,9 @@ class IndexControllerWithBibAdminLoggedTest extends AbstractControllerTestCase {
                            'login' => 'Joe',
                            'password' => 'unsupermotdepasse',
                            'id_site' => 1,
+                           'settings' => Class_User_Settings::serializeSettings(['show_admin_icons' => '1']),
                            'role_level' => ZendAfi_Acl_AdminControllerRoles::MODO_BIB]);
+
     ZendAfi_Auth::getInstance()->logUser($joe);
     $this->dispatch('/');
   }
@@ -790,4 +792,16 @@ class IndexControllerWithBibAdminLoggedTest extends AbstractControllerTestCase {
   public function changeProfileSelectorShouldBeInMenu() {
     $this->assertXPath('//body/div//ul/li/ul/li/form//select');
   }
+
+
+  /** @test */
+  public function linkToShowAdminIconsShouldBeInMenu() {
+    $this->assertXPathContentContains('//body/div//ul/li/ul/li/a', 'Afficher les icones d\'administration');
+  }
+
+
+  /** @test */
+  public function scriptToShowAdminIconsShouldBePresent() {
+    $this->assertXPathContentContains('//script', 'showAdminIcons()');
+  }
 }
\ No newline at end of file
-- 
GitLab