From e8b3a5fe1fc7eef701bb55217a0b9cf3bbdbba43 Mon Sep 17 00:00:00 2001
From: Ghislain Loas <ghislo@sandbox.pergame.net>
Date: Fri, 22 Jan 2016 12:53:14 +0100
Subject: [PATCH] hotline #36925 fix

---
 VERSIONS_HOTLINE/36925                        |  1 +
 library/ZendAfi/Form/Admin/User.php           | 48 ++++++++++---------
 .../admin/controllers/UsersControllerTest.php |  5 +-
 3 files changed, 29 insertions(+), 25 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/36925

diff --git a/VERSIONS_HOTLINE/36925 b/VERSIONS_HOTLINE/36925
new file mode 100644
index 00000000000..51d804711ce
--- /dev/null
+++ b/VERSIONS_HOTLINE/36925
@@ -0,0 +1 @@
+ - ticket #36925 : Correction de la création d'un compte utilisateur
diff --git a/library/ZendAfi/Form/Admin/User.php b/library/ZendAfi/Form/Admin/User.php
index 08a4e957a25..a5976dea7a7 100644
--- a/library/ZendAfi/Form/Admin/User.php
+++ b/library/ZendAfi/Form/Admin/User.php
@@ -21,16 +21,30 @@
 
 
 class ZendAfi_Form_Admin_User extends ZendAfi_Form {
+  protected $_user;
+
   public static function newWith($datas = [], $custom_form = null) {
-    $form = parent::newWith($datas, $custom_form);
+    $form = (new static());
+
+    $user = ((isset($datas['id_user'])) && ($user = Class_Users::find($datas['id_user'])))
+      ? $user
+      : new Class_Users();
+
+    $form->setUser($user);
+    $form->addElements();
     $form->addValidity($datas['date_debut'],$datas['date_fin']);
-    return $form;
+    return $form->populate($datas)
+                ->setCustomForm($custom_form);
   }
 
 
-  public function init() {
-    parent::init();
+  public function setUser($user) {
+    $this->_user = $user;
+    return $this;
+  }
+
 
+  public function addElements() {
     $this
       ->addBasicUserInfo()
       ->addAdminUserInfo()
@@ -97,14 +111,12 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
 
 
   protected function addAdminUserInfo() {
-    $user = $this->getView()->user;
-
-    $multi_options = $user->isSuperAdmin()
+    $multi_options = $this->_user->isSuperAdmin()
       ? ZendAfi_Acl_AdminControllerRoles::getRolesLabels()
       : ZendAfi_Acl_AdminControllerRoles::getRolesLabelsWithOutSuperAdmin();
 
     $option=[];
-    if ($user->isSuperAdmin() || $user->isAbonne() || (Class_Users::getIdentity()->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL))
+    if ($this->_user->isSuperAdmin() || $this->_user->isAbonne() || (Class_Users::getIdentity()->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL))
       $option=['disabled' => 'disabled'];
 
     $this
@@ -112,17 +124,13 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
                    'role_level',
                    array_merge(['label' => $this->_('Niveau d\'accès'),
                                 'multiOptions' => $multi_options],$option));
-    $bib_option=[];
-    if ($user->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB)
-      $bib_option=['disabled' => 'disabled'];
-
     $this
       ->addElement('select',
                    'id_site',
                    array_merge(
                                ['label' => $this->_('Bibliothèque'),
-                                'multiOptions' => array_merge(['0' => $this->_('Portail')], Class_Zone::findAllLabels())],
-                               $bib_option))
+                                'multiOptions' => array_merge(['0' => $this->_('Portail')], Class_Bib::findAllLabels())],
+                               $option))
 
       ->addElement('userGroup',
                    'user_group_ids',
@@ -136,9 +144,7 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
                          'user_group_ids'],
                         'admin_user_info',
                         ['legend' => $this->_('Droits')]);
-
     return $this;
-
   }
 
 
@@ -204,8 +210,7 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
 
 
   protected function addSIGB() {
-    $user = $this->getView()->user;
-    $disabled = $user->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB
+    $disabled = $this->_user->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB
       ? ['disabled' => 'disabled']
       : [];
 
@@ -251,12 +256,10 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
     if (!Class_AdminVar::isRedmineEnabled())
       return $this;
 
-    $user = $this->getView()->user;
-
-    if($user->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB)
+    if($this->_user->getRoleLevel() <= ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB)
       return $this;
 
-    $user_library = $user->getRedmineLibrary();
+    $user_library = $this->_user->getRedmineLibrary();
     $value = $user_library ? $user_library->getId() : 0;
     $options = $this->_getLibraries();
     $this
@@ -278,7 +281,6 @@ class ZendAfi_Form_Admin_User extends ZendAfi_Form {
     $this->getElement('redmine_status')
          ->addDecorator('Redmine', ['view' => $this->getView(),
                                     'library' => $user_library]);
-
     return $this;
   }
 
diff --git a/tests/application/modules/admin/controllers/UsersControllerTest.php b/tests/application/modules/admin/controllers/UsersControllerTest.php
index 0e8afd2dae1..e3996c22305 100644
--- a/tests/application/modules/admin/controllers/UsersControllerTest.php
+++ b/tests/application/modules/admin/controllers/UsersControllerTest.php
@@ -581,10 +581,11 @@ class UsersControllerPostValidDataWithCommOpsysTest extends UsersControllerWithM
 }
 
 
+
 class UsersControllerAddViewTest extends AbstractControllerTestCase {
   public function setUp() {
     parent::setUp();
-    $this->dispatch('/admin/users/add');
+    $this->dispatch('/admin/users/add', true);
   }
 
   public function testActionAdd() {
@@ -606,10 +607,10 @@ class UsersControllerAddViewTest extends AbstractControllerTestCase {
   public function testPseudoIsEmpty() {
     $this->assertXPath("//input[@name='pseudo'][@value='']");
   }
-
 }
 
 
+
 class UsersControllerReferentIndexTest extends UsersControllerWithMarcusTestCase {
   use Trait_UserGroupFixtures;
 
-- 
GitLab