]> git.agnieray.net Git - galette.git/commitdiff
Fix search on nickname in member dropdowns; closes #1383
authorJohan Cwiklinski <jcwiklinski@teclib.com>
Sat, 25 Jan 2020 10:26:58 +0000 (11:26 +0100)
committerJohan Cwiklinski <jcwiklinski@teclib.com>
Sat, 25 Jan 2020 10:26:58 +0000 (11:26 +0100)
galette/includes/routes/ajax.routes.php
galette/includes/routes/contributions.routes.php
galette/includes/routes/members.routes.php
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Repository/Members.php
galette/templates/default/ajouter_transaction.tpl

index 59a9a9127b54458a0e932ee149d7977b025967ef..c452982341e96b2134cd127188bd1fe154387afc 100644 (file)
@@ -291,23 +291,14 @@ $app->group('/ajax', function () use ($authenticate) {
             }
 
             $m = new Members($filters);
-            $required_fields = array(
-                'id_adh',
-                'nom_adh',
-                'prenom_adh'
-            );
-            $list_members = $m->getList(false, $required_fields);
+            $list_members = $m->getSelectizedMembers($this->zdb);
 
             $members = [];
             if (count($list_members) > 0) {
-                foreach ($list_members as $member) {
-                    $pk = Adherent::PK;
-                    $sname = mb_strtoupper($member->nom_adh, 'UTF-8') .
-                        ' ' . ucwords(mb_strtolower($member->prenom_adh, 'UTF-8')) .
-                        ' (' . $member->id_adh . ')';
+                foreach ($list_members as $pk => $member) {
                     $members[] = [
-                        'value' => $member->$pk,
-                        'text'  => $sname
+                        'value' => $pk,
+                        'text'  => $member
                     ];
                 }
             }
index 75619a243839bf462ea9ca819c5df09273210173..19419af196a1668ad6b739066741b168cda584fa 100644 (file)
@@ -401,38 +401,17 @@ $app->get(
         $params['type_cotis_options'] = $contributions_types;
 
         // members
-        $members = [];
         $m = new Members();
-        $required_fields = array(
-            'id_adh',
-            'nom_adh',
-            'prenom_adh'
+        $members = $m->getSelectizedMembers(
+            $this->zdb,
+            isset($contrib) && $contrib->member > 0 ? $contrib->member : null
         );
-        $list_members = $m->getList(false, $required_fields);
-
-        if (count($list_members) > 0) {
-            foreach ($list_members as $member) {
-                $pk = Adherent::PK;
-                $sname = mb_strtoupper($member->nom_adh, 'UTF-8') .
-                    ' ' . ucwords(mb_strtolower($member->prenom_adh, 'UTF-8')) .
-                    ' (' . $member->id_adh . ')';
-                $members[$member->$pk] = $sname;
-            }
-        }
 
         $params['members'] = [
             'filters'   => $m->getFilters(),
             'count'     => $m->getCount()
         ];
 
-        //check if current attached member is part of the list
-        if (isset($contrib)
-            && $contrib->member > 0
-            && !isset($members[$contrib->member])
-        ) {
-            $members[$contrib->member] = Adherent::getSName($this->zdb, $contrib->member, true);
-        }
-
         if (count($members)) {
             $params['members']['list'] = $members;
         }
@@ -849,24 +828,11 @@ $app->get(
         }
 
         // members
-        $members = [];
         $m = new Members();
-        $required_fields = array(
-            'id_adh',
-            'nom_adh',
-            'prenom_adh'
+        $members = $m->getSelectizedMembers(
+            $this->zdb,
+            $trans->member > 0 ? $trans->member : null
         );
-        $list_members = $m->getList(false, $required_fields);
-
-        if (count($list_members) > 0) {
-            foreach ($list_members as $member) {
-                $pk = Adherent::PK;
-                $sname = mb_strtoupper($member->nom_adh, 'UTF-8') .
-                    ' ' . ucwords(mb_strtolower($member->prenom_adh, 'UTF-8')) .
-                    ' (' . $member->id_adh . ')';
-                $members[$member->$pk] = $sname;
-            }
-        }
 
         $params['members'] = [
             'filters'   => $m->getFilters(),
@@ -874,16 +840,6 @@ $app->get(
         ];
         $params['autocomplete'] = true;
 
-        //check if current attached member is part of the list
-        if (isset($trans) && $trans->member > 0) {
-            if (!isset($members[$trans->member])) {
-                $members =
-                    [$trans->member => Adherent::getSName($this->zdb, $trans->member, true)] +
-                    $members
-                ;
-            }
-        }
-
         if (count($members)) {
             $params['members']['list'] = $members;
         }
index 0bac92430af3596afb4165e8476631a45d4ffa86..7c3af6f53004b06e559099635488067d50143374 100644 (file)
@@ -98,40 +98,17 @@ $app->get(
         $spam_img = $spam->getImage();
 
         // members
-        $members = [];
         $m = new Members();
-        $required_fields = array(
-            'id_adh',
-            'nom_adh',
-            'prenom_adh'
+        $members = $m->getSelectizedMembers(
+            $this->zdb,
+            $member->hasParent() ? $member->parent->id : null
         );
-        $list_members = $m->getList(false, $required_fields);
-
-        if (count($list_members) > 0) {
-            foreach ($list_members as $lmember) {
-                $pk = Adherent::PK;
-                $sname = mb_strtoupper($lmember->nom_adh, 'UTF-8') .
-                    ' ' . ucwords(mb_strtolower($lmember->prenom_adh, 'UTF-8')) .
-                    ' (' . $lmember->id_adh . ')';
-                $members[$lmember->$pk] = $sname;
-            }
-        }
 
         $params['members'] = [
             'filters'   => $m->getFilters(),
             'count'     => $m->getCount()
         ];
 
-        //check if current attached member is part of the list
-        if ($member->hasParent()) {
-            if (!isset($members[$member->parent->id])) {
-                $members =
-                    [$member->parent->id => Adherent::getSName($this->zdb, $member->parent->id)] +
-                    $members
-                ;
-            }
-        }
-
         if (count($members)) {
             $params['members']['list'] = $members;
         }
@@ -819,40 +796,17 @@ $app->get(
         );
 
         // members
-        $members = [];
         $m = new Members();
-        $required_fields = array(
-            'id_adh',
-            'nom_adh',
-            'prenom_adh'
+        $members = $m->getSelectizedMembers(
+            $this->zdb,
+            $member->hasParent() ? $member->parent->id : null
         );
-        $list_members = $m->getList(false, $required_fields);
-
-        if (count($list_members) > 0) {
-            foreach ($list_members as $lmember) {
-                $pk = Adherent::PK;
-                $sname = mb_strtoupper($lmember->nom_adh, 'UTF-8') .
-                    ' ' . ucwords(mb_strtolower($lmember->prenom_adh, 'UTF-8')) .
-                    ' (' . $lmember->id_adh . ')';
-                $members[$lmember->$pk] = $sname;
-            }
-        }
 
         $route_params['members'] = [
             'filters'   => $m->getFilters(),
             'count'     => $m->getCount()
         ];
 
-        //check if current attached member is part of the list
-        if ($member->hasParent()) {
-            if (!isset($members[$member->parent->id])) {
-                $members =
-                    [$member->parent->id => Adherent::getSName($this->zdb, $member->parent->id)] +
-                    $members
-                ;
-            }
-        }
-
         if (count($members)) {
             $route_params['members']['list'] = $members;
         }
index ee73648c9da906e2d1e06a06582a7a4a61ece057..f14d632e46c2240748aaac553ff48ed37beb458f 100644 (file)
@@ -755,13 +755,14 @@ class Adherent
     /**
      * Retrieve Full name and surname for the specified member id
      *
-     * @param Db      $zdb Database instance
-     * @param integer $id  member id
-     * @param boolean $wid Add member id
+     * @param Db      $zdb   Database instance
+     * @param integer $id    Member id
+     * @param boolean $wid   Add member id
+     * @param boolean $wnick Add member nickname
      *
      * @return string formatted Name and Surname
      */
-    public static function getSName($zdb, $id, $wid = false)
+    public static function getSName($zdb, $id, $wid = false, $wnick = false)
     {
         try {
             $select = $zdb->select(self::TABLE);
@@ -773,7 +774,8 @@ class Adherent
                 $row->nom_adh,
                 $row->prenom_adh,
                 false,
-                ($wid === true ? $row->id_adh : false)
+                ($wid === true ? $row->id_adh : false),
+                ($wnick === true ? $row->pseudo_adh : false)
             );
         } catch (\Exception $e) {
             Analog::log(
@@ -792,10 +794,11 @@ class Adherent
      * @param string        $surname Mmeber surname
      * @param false|Title   $title   Member title to show or false
      * @param false|integer $id      Member id to display or false
+     * @param false|string  $nick    Member nickname to display or false
      *
      * @return string
      */
-    public static function getNameWithCase($name, $surname, $title = false, $id = false)
+    public static function getNameWithCase($name, $surname, $title = false, $id = false, $nick = false)
     {
         $str = '';
 
@@ -806,8 +809,20 @@ class Adherent
         $str .= mb_strtoupper($name, 'UTF-8') . ' ' .
             ucwords(mb_strtolower($surname, 'UTF-8'), " \t\r\n\f\v-_|");
 
+        if ($id !== false || $nick !== false) {
+            $str .= ' (';
+        }
+        if ($nick !== false) {
+            $str .= $nick;
+        }
         if ($id !== false) {
-            $str .= ' (' . $id . ')';
+            if ($nick !== false) {
+                $str .= ', ';
+            }
+            $str .= $id;
+        }
+        if ($id !== false || $nick !== false) {
+            $str .= ')';
         }
         return $str;
     }
index a7041a417e88e3bba9dd66b16848117f76edf22d..f5e3a5307b8e0c6d3f25797fb3fd65ede442d55c 100644 (file)
@@ -1715,4 +1715,48 @@ class Members
     {
         return $this->filters;
     }
+
+    /**
+     * Get members list to instanciate dropdowns
+     *
+     * @param Db      $zdb     Database instance
+     * @param integer $current Current member
+     *
+     * @return array
+     */
+    public function getSelectizedMembers(Db $zdb, $current = null)
+    {
+        $members = [];
+        $required_fields = array(
+            'id_adh',
+            'nom_adh',
+            'prenom_adh',
+            'pseudo_adh'
+        );
+        $list_members = $this->getList(false, $required_fields);
+
+        if (count($list_members) > 0) {
+            foreach ($list_members as $member) {
+                $pk = Adherent::PK;
+
+                $members[$member->$pk] = Adherent::getNameWithCase(
+                    $member->nom_adh,
+                    $member->prenom_adh,
+                    false,
+                    $member->id_adh,
+                    $member->pseudo_adh
+                );
+            }
+        }
+
+        //check if current attached member is part of the list
+        if ($current !== null && !isset($members[$current])) {
+            $members =
+                [$current => Adherent::getSName($zdb, $current, true, true)] +
+                $members
+            ;
+        }
+
+        return $members;
+    }
 }
index e36c0f2c1aac6451670d1bd032f2ee11495bd49b..d54d227a9822fc2a1ec7f2edc3f4763b9de4cbff 100644 (file)
@@ -14,7 +14,7 @@
                     <label for="id_adh" class="bline" >{_T string="Originator:"}</label>
                     <select name="id_adh" id="id_adh" class="nochosen"{if $required.id_adh eq 1} required="required"{/if}>
     {if !$transaction->member}
-                        <option>{_T string="-- select a name --"}</option>
+                        <option value="">{_T string="-- select a name --"}</option>
     {/if}
     {foreach $members.list as $k=>$v}
                             <option value="{$k}"{if $transaction->member == $k} selected="selected"{/if}>{$v}</option>