From: Johan Cwiklinski Date: Mon, 1 Nov 2021 07:33:17 +0000 (+0100) Subject: Add member number; closes #190 X-Git-Tag: 0.9.6~86 X-Git-Url: https://git.agnieray.net/?a=commitdiff_plain;h=b8ffb6abacdd93f6020376ba541347516809edf4;p=galette.git Add member number; closes #190 --- diff --git a/galette/includes/fields_defs/members_fields.php b/galette/includes/fields_defs/members_fields.php index 614f2480b..4a797ef4a 100644 --- a/galette/includes/fields_defs/members_fields.php +++ b/galette/includes/fields_defs/members_fields.php @@ -39,7 +39,7 @@ use Galette\Entity\FieldsCategories; $members_fields = array( 'id_adh' => array( - 'label' => _T("Member number:"), + 'label' => _T("Member id:"), 'propname' => 'id', 'required' => false, 'visible' => FieldsConfig::NOBODY, @@ -319,6 +319,14 @@ $members_fields = array( 'position' => 25, 'category' => FieldsCategories::ADH_CATEGORY_CONTACT ), + 'num_adh' => array( + 'label' => _T("Member number:"), + 'propname' => 'number', + 'required' => false, + 'visible' => FieldsConfig::MANAGER, + 'position' => 26, + 'category' => FieldsCategories::ADH_CATEGORY_IDENTITY + ), 'list_adh_name' => array( 'label' => _T("Name"), 'propname' => 'sname', diff --git a/galette/includes/routes/ajax.routes.php b/galette/includes/routes/ajax.routes.php index a502395e0..bcfac2d71 100644 --- a/galette/includes/routes/ajax.routes.php +++ b/galette/includes/routes/ajax.routes.php @@ -7,7 +7,7 @@ * * PHP version 5 * - * Copyright © 2014-2020 The Galette Team + * Copyright © 2014-2021 The Galette Team * * This file is part of Galette (http://galette.tuxfamily.org). * @@ -28,7 +28,7 @@ * @package Galette * * @author Johan Cwiklinski - * @copyright 2014-2020 The Galette Team + * @copyright 2014-2021 The Galette Team * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version * @link http://galette.tuxfamily.org * @since 0.8.2dev 2014-11-11 @@ -277,7 +277,7 @@ $app->group('/ajax', function () use ($authenticate) { if ($search !== null) { $filters->filter_str = $search; if (is_numeric($search)) { - $filters->field_filter = Members::FILTER_NUMBER; + $filters->field_filter = Members::FILTER_ID; } } diff --git a/galette/install/scripts/mysql.sql b/galette/install/scripts/mysql.sql index 87fe5461c..1b840a1e5 100644 --- a/galette/install/scripts/mysql.sql +++ b/galette/install/scripts/mysql.sql @@ -39,6 +39,7 @@ CREATE TABLE galette_adherents ( gpgid text DEFAULT NULL, fingerprint varchar(255) DEFAULT NULL, parent_id int(10) unsigned DEFAULT NULL, + num_adh varchar(255) DEFAULT NULL, PRIMARY KEY (id_adh), UNIQUE (login_adh), FOREIGN KEY (id_statut) REFERENCES galette_statuts (id_statut) ON DELETE RESTRICT ON UPDATE CASCADE, diff --git a/galette/install/scripts/pgsql.sql b/galette/install/scripts/pgsql.sql index 0468df30b..9f37f365d 100644 --- a/galette/install/scripts/pgsql.sql +++ b/galette/install/scripts/pgsql.sql @@ -226,6 +226,7 @@ CREATE TABLE galette_adherents ( gpgid text DEFAULT NULL, fingerprint character varying(255) DEFAULT NULL, parent_id integer DEFAULT NULL REFERENCES galette_adherents(id_adh) ON DELETE RESTRICT ON UPDATE CASCADE, + num_adh character varying(255) DEFAULT NULL, PRIMARY KEY (id_adh) ); -- add index for faster search on login_adh (auth) diff --git a/galette/install/scripts/upgrade-to-0.96-mysql.sql b/galette/install/scripts/upgrade-to-0.96-mysql.sql index 5aeb2a982..173cfbaf7 100644 --- a/galette/install/scripts/upgrade-to-0.96-mysql.sql +++ b/galette/install/scripts/upgrade-to-0.96-mysql.sql @@ -37,4 +37,7 @@ ALTER TABLE galette_adherents DROP column jabber_adh; -- cleanup fields config DELETE FROM galette_fields_config WHERE field_id IN ('url_adh', 'icq_adh', 'msn_adh', 'jabber_adh'); +-- add num_adh column +ALTER TABLE galette_adherents ADD COLUMN num_adh varchar(255) DEFAULT NULL; + UPDATE galette_database SET version = 0.960; \ No newline at end of file diff --git a/galette/install/scripts/upgrade-to-0.96-pgsql.sql b/galette/install/scripts/upgrade-to-0.96-pgsql.sql index a19b1cc06..cef49cf2e 100644 --- a/galette/install/scripts/upgrade-to-0.96-pgsql.sql +++ b/galette/install/scripts/upgrade-to-0.96-pgsql.sql @@ -45,4 +45,7 @@ ALTER TABLE galette_adherents DROP column jabber_adh; -- cleanup fields config table DELETE FROM galette_fields_config WHERE field_id IN ('url_adh', 'icq_adh', 'msn_adh', 'jabber_adh'); +-- add num_adh column +ALTER TABLE galette_adherents ADD COLUMN num_adh character varying (255) DEFAULT NULL; + UPDATE galette_database SET version = 0.960; \ No newline at end of file diff --git a/galette/lib/Galette/Entity/Adherent.php b/galette/lib/Galette/Entity/Adherent.php index 72be6ff8a..a7ccd3d08 100644 --- a/galette/lib/Galette/Entity/Adherent.php +++ b/galette/lib/Galette/Entity/Adherent.php @@ -118,6 +118,7 @@ use Galette\Features\Dynamics; * @property string $days_remaining * @property-read integer $parent_id * @property Social $social Social networks/Contact + * @property string $number Member number * */ class Adherent @@ -185,6 +186,7 @@ class Adherent private $_children; private $_duplicate = false; private $_socials; + private $_number; private $_row_classes; @@ -411,6 +413,7 @@ class Adherent $this->_due_date = $r->date_echeance; $this->_others_infos = $r->info_public_adh; $this->_others_infos_admin = $r->info_adh; + $this->_number = $r->num_adh; if ($r->parent_id !== null) { $this->_parent = (int)$r->parent_id; @@ -1504,6 +1507,10 @@ class Adherent $values['parent_id'] = new Expression('NULL'); } + if (!$this->_number) { + $values['num_adh'] = new Expression('NULL'); + } + //fields that cannot be null $notnull = [ '_surname' => 'prenom_adh', diff --git a/galette/lib/Galette/Features/Replacements.php b/galette/lib/Galette/Features/Replacements.php index 473b40173..21e06a887 100644 --- a/galette/lib/Galette/Features/Replacements.php +++ b/galette/lib/Galette/Features/Replacements.php @@ -254,6 +254,10 @@ trait Replacements 'title' => _T("Member's ID"), 'pattern' => '/{ID_ADH}/', ], + 'adh_num' => [ + 'title' => _T("Member number"), + 'pattern' => '/{NUM_ADH}/', + ], 'adh_name' => [ 'title' => _T("Name"), 'pattern' => '/{NAME_ADH}/', @@ -623,6 +627,7 @@ trait Replacements array( 'adh_title' => $member->stitle, 'adh_id' => $member->id, + 'adh_num' => $member->number, 'adh_name' => $member->sfullname, 'adh_last_name' => $member->name, 'adh_first_name' => $member->surname, diff --git a/galette/lib/Galette/Filters/MembersList.php b/galette/lib/Galette/Filters/MembersList.php index 363822b95..46b1e1eca 100644 --- a/galette/lib/Galette/Filters/MembersList.php +++ b/galette/lib/Galette/Filters/MembersList.php @@ -7,7 +7,7 @@ * * PHP version 5 * - * Copyright © 2009-2014 The Galette Team + * Copyright © 2009-2021 The Galette Team * * This file is part of Galette (http://galette.tuxfamily.org). * @@ -28,7 +28,7 @@ * @package Galette * * @author Johan Cwiklinski - * @copyright 2009-2014 The Galette Team + * @copyright 2009-2021 The Galette Team * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version * @link http://galette.tuxfamily.org * @since march, 3rd 2009 @@ -49,7 +49,7 @@ use Galette\Repository\Members; * @package Galette * * @author Johan Cwiklinski - * @copyright 2009-2014 The Galette Team + * @copyright 2009-2021 The Galette Team * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version * @link http://galette.tuxfamily.org * @@ -149,7 +149,7 @@ class MembersList extends Pagination } } else { Analog::log( - '[MembersList] Unable to get proprety `' . $name . '`', + '[MembersList] Unable to get property `' . $name . '`', Analog::WARNING ); } @@ -270,6 +270,7 @@ class MembersList extends Pagination { $filter_options = array( Members::FILTER_NAME => _T("Name"), + Members::FILTER_NUMBER => _T("Member number"), Members::FILTER_COMPANY_NAME => _T("Company name"), Members::FILTER_ADDRESS => _T("Address"), Members::FILTER_MAIL => _T("Email,URL,IM"), @@ -278,7 +279,7 @@ class MembersList extends Pagination ); if ($prefs->pref_show_id) { - $filter_options[Members::FILTER_NUMBER] = _T("Member number"); + $filter_options[Members::FILTER_ID] = _T("Member ID"); } $view->assign( diff --git a/galette/lib/Galette/IO/PdfMembersCards.php b/galette/lib/Galette/IO/PdfMembersCards.php index eabe47581..5f68969db 100644 --- a/galette/lib/Galette/IO/PdfMembersCards.php +++ b/galette/lib/Galette/IO/PdfMembersCards.php @@ -220,6 +220,9 @@ class PdfMembersCards extends Pdf case 7: $email .= $member->job; break; + case 8: + $email .= $member->number; + break; } // Select strip color according to status diff --git a/galette/lib/Galette/Repository/Members.php b/galette/lib/Galette/Repository/Members.php index 3e4d2fa37..424fea671 100644 --- a/galette/lib/Galette/Repository/Members.php +++ b/galette/lib/Galette/Repository/Members.php @@ -98,7 +98,8 @@ class Members public const FILTER_DC_PUBINFOS = 9; public const FILTER_W_PUBINFOS = 10; public const FILTER_WO_PUBINFOS = 11; - public const FILTER_NUMBER = 12; + public const FILTER_ID = 12; + public const FILTER_NUMBER = 13; public const MEMBERSHIP_ALL = 0; public const MEMBERSHIP_UP2DATE = 3; @@ -1077,6 +1078,9 @@ class Members ); break; case self::FILTER_NUMBER: + $select->where->equalTo('a.num_adh', $this->filters->filter_str); + break; + case self::FILTER_ID: $select->where->equalTo('a.id_adh', $this->filters->filter_str); break; } diff --git a/galette/templates/default/gestion_adherents.tpl b/galette/templates/default/gestion_adherents.tpl index 453d4de7b..bb46503a9 100644 --- a/galette/templates/default/gestion_adherents.tpl +++ b/galette/templates/default/gestion_adherents.tpl @@ -126,7 +126,7 @@ We have to use a template file, so Smarty will do its work (like replacing varia {if $preferences->pref_show_id} "order", "value" => "Galette\Repository\Members::ORDERBY_ID"|constant]}"> - {_T string="Mbr num"} + {_T string="Mbr id"} {if $filters->orderby eq constant('galette\Repository\Members::ORDERBY_ID')} {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')} diff --git a/galette/templates/default/preferences.tpl b/galette/templates/default/preferences.tpl index 37c30906c..2d7da82d5 100644 --- a/galette/templates/default/preferences.tpl +++ b/galette/templates/default/preferences.tpl @@ -481,6 +481,7 @@ + {_T string="(Choose address printed below name)"}

diff --git a/tests/Galette/Entity/tests/units/FieldsConfig.php b/tests/Galette/Entity/tests/units/FieldsConfig.php index 6658476bc..8313f4574 100644 --- a/tests/Galette/Entity/tests/units/FieldsConfig.php +++ b/tests/Galette/Entity/tests/units/FieldsConfig.php @@ -182,7 +182,7 @@ class FieldsConfig extends atoum $this->array($categorized) ->hasSize(3); $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY]) - ->hasSize(12); + ->hasSize(13); $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_GALETTE]) ->hasSize(11); $this->array($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT]) @@ -271,7 +271,7 @@ class FieldsConfig extends atoum $this->boolean($town['required'])->isFalse(); $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig::NOBODY); - $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][12]; + $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][13]; $this->array($gsm2)->isIdenticalTo($gsm); } @@ -323,7 +323,7 @@ class FieldsConfig extends atoum $categorized = $fields_config->getCategorizedFields(); $this->integer( count($categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY]) - )->isIdenticalTo(12); + )->isIdenticalTo(13); //new object instanciation should add missing field back $fields_config = new \Galette\Entity\FieldsConfig( @@ -387,7 +387,7 @@ class FieldsConfig extends atoum $this->object($elements[0])->isInstanceOf('\stdClass'); $this->integer($elements[0]->id)->isIdenticalTo(1); - $this->array($elements[0]->elements)->hasSize(7); + $this->array($elements[0]->elements)->hasSize(8); $this->object($elements[1])->isInstanceOf('\stdClass'); $this->integer($elements[1]->id)->isIdenticalTo(3); @@ -450,7 +450,7 @@ class FieldsConfig extends atoum $this->object($elements['fieldsets'][0])->isInstanceOf('\stdClass'); $this->integer($elements['fieldsets'][0]->id)->isIdenticalTo(1); - $this->array($elements['fieldsets'][0]->elements)->hasSize(10); + $this->array($elements['fieldsets'][0]->elements)->hasSize(11); $this->object($elements['fieldsets'][1])->isInstanceOf('\stdClass'); $this->integer($elements['fieldsets'][1]->id)->isIdenticalTo(3); diff --git a/tests/Galette/Entity/tests/units/ListsConfig.php b/tests/Galette/Entity/tests/units/ListsConfig.php index 1bde22bfd..ec6e3aacd 100644 --- a/tests/Galette/Entity/tests/units/ListsConfig.php +++ b/tests/Galette/Entity/tests/units/ListsConfig.php @@ -225,7 +225,7 @@ class ListsConfig extends atoum $this->boolean($town['required'])->isFalse(); $this->integer($town['visible'])->isIdenticalTo(\Galette\Entity\FieldsConfig::NOBODY); - $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][10]; //12 in FieldsConfig but 10 here + $gsm2 = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][11]; //13 in FieldsConfig but 11 here $this->array($gsm2)->isIdenticalTo($gsm); // /copied from FieldsConfig::testSetFields to ensure it works as expected from here. } diff --git a/tests/Galette/Entity/tests/units/PdfModel.php b/tests/Galette/Entity/tests/units/PdfModel.php index 6bfa46d5e..dc7e3b297 100644 --- a/tests/Galette/Entity/tests/units/PdfModel.php +++ b/tests/Galette/Entity/tests/units/PdfModel.php @@ -142,6 +142,7 @@ class PdfModel extends GaletteTestCase $expected = $main_expected + [ 'adh_title' => '/{TITLE_ADH}/', 'adh_id' => '/{ID_ADH}/', + 'adh_num' => '/{NUM_ADH}/', 'adh_name' => '/{NAME_ADH}/', 'adh_last_name' => '/{LAST_NAME_ADH}/', 'adh_first_name' => '/{FIRST_NAME_ADH}/', @@ -383,7 +384,7 @@ Au milieu $this->array($legend['main']['patterns'])->hasSize(8); $this->array($legend['member']['patterns']) - ->hasSize(26) + ->hasSize(27) ->hasKeys(['label_dynfield_' . $adf->getId() . '_adh', 'dynfield_' . $adf->getId() . '_adh']); $this->array($legend['contribution']['patterns']) ->hasSize(14) diff --git a/tests/Galette/Repository/tests/units/Members.php b/tests/Galette/Repository/tests/units/Members.php index 8f3c48955..bf3d64366 100644 --- a/tests/Galette/Repository/tests/units/Members.php +++ b/tests/Galette/Repository/tests/units/Members.php @@ -7,7 +7,7 @@ * * PHP version 5 * - * Copyright © 2017 The Galette Team + * Copyright © 2017-2021 The Galette Team * * This file is part of Galette (http://galette.tuxfamily.org). * @@ -28,7 +28,7 @@ * @package GaletteTests * * @author Johan Cwiklinski - * @copyright 2017 The Galette Team + * @copyright 2017-2021 The Galette Team * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version * @version SVN: $Id$ * @link http://galette.tuxfamily.org @@ -46,7 +46,7 @@ use Galette\GaletteTestCase; * @name Members * @package GaletteTests * @author Johan Cwiklinski - * @copyright 2017 The Galette Team + * @copyright 2017-2021 The Galette Team * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version * @link http://galette.tuxfamily.org * @since 2017-04-15 @@ -340,7 +340,7 @@ class Members extends GaletteTestCase //search on member number $filters = new \Galette\Filters\MembersList(); $filters->filter_str = $this->mids[2]; - $filters->field_filter = \Galette\Repository\Members::FILTER_NUMBER; + $filters->field_filter = \Galette\Repository\Members::FILTER_ID; $members = new \Galette\Repository\Members($filters); $list = $members->getList();