3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
10 * Copyright © 2019-2023 The Galette Team
12 * This file is part of Galette (http://galette.tuxfamily.org).
14 * Galette is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
19 * Galette is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2019-2023 The Galette Team
32 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
33 * @link http://galette.tuxfamily.org
34 * @since Available since 0.9.4-dev - 2019-12-03
42 use Galette\Core\Login
;
43 use Galette\Core\Authentication
;
44 use Galette\Entity\Status
;
45 use Galette\Entity\Adherent
;
46 use Galette\Repository\Titles
;
47 use Galette\Repository\Members
;
48 use Galette\Entity\FieldsConfig
;
49 use Galette\Filters\MembersList
;
57 * @author Johan Cwiklinski <johan@x-tnd.be>
58 * @copyright 2019-2023 The Galette Team
59 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
60 * @link http://galette.tuxfamily.org
61 * @since Available since 0.9.4-dev - 2019-12-03
64 class MembersCsv
extends CsvOut
70 private $members_fields;
71 private $fields_config;
77 * @param Db $zdb Db instance
78 * @param Login $login Login instance
79 * @param array $members_fields Members fields
80 * @param FieldsConfig $fields_config Fields configuration
82 public function __construct(Db
$zdb, Login
$login, array $members_fields, FieldsConfig
$fields_config)
84 $this->filename
= __('filtered_memberslist') . '.csv';
85 $this->path
= self
::DEFAULT_DIRECTORY
. $this->filename
;
87 $this->login
= $login;
88 $this->members_fields
= $members_fields;
89 $this->fields_config
= $fields_config;
90 parent
::__construct();
96 * @param MembersList $filters Current filters
100 public function exportMembers(MembersList
$filters)
102 $export_fields = null;
103 if (file_exists(GALETTE_CONFIG_PATH
. 'local_export_fields.inc.php')) {
104 include_once GALETTE_CONFIG_PATH
. 'local_export_fields.inc.php';
105 //@phpstan-ignore-next-line
106 $export_fields = $fields;
110 $fc = $this->fields_config
;
111 $visibles = $fc->getVisibilities();
112 //hack for id_adh and parent_id
113 $hacks = ['id_adh', 'parent_id'];
114 foreach ($hacks as $hack) {
115 if ($visibles[$hack] == FieldsConfig
::NOBODY
) {
116 $visibles[$hack] = FieldsConfig
::MANAGER
;
119 $access_level = $this->login
->getAccessLevel();
122 foreach ($this->members_fields
as $k => $f) {
123 // skip fields blacklisted for export
126 ($export_fields !== null &&
127 (is_array($export_fields) && !in_array($k, $export_fields)))
132 // skip fields according to access control
134 $visibles[$k] == FieldsConfig
::NOBODY ||
135 ($visibles[$k] == FieldsConfig
::ADMIN
&&
136 $access_level < Authentication
::ACCESS_ADMIN
) ||
137 ($visibles[$k] == FieldsConfig
::STAFF
&&
138 $access_level < Authentication
::ACCESS_STAFF
) ||
139 ($visibles[$k] == FieldsConfig
::MANAGER
&&
140 $access_level < Authentication
::ACCESS_MANAGER
)
146 $labels[] = $f['label'];
149 $members = new Members($filters);
150 $members_list = $members->getArrayList(
159 $s = new Status($this->zdb
);
160 $statuses = $s->getList();
163 $titles = $t->getList($this->zdb
);
165 foreach ($members_list as &$member) {
166 if (isset($member->id_statut
)) {
168 $member->id_statut
= $statuses[$member->id_statut
];
171 if (isset($member->titre_adh
)) {
173 $member->titre_adh
= $titles[$member->titre_adh
]->short
;
177 if (isset($member->date_crea_adh
)) {
179 $member->date_crea_adh
!= ''
180 && $member->date_crea_adh
!= '1901-01-01'
182 $dcrea = new DateTime($member->date_crea_adh
);
183 $member->date_crea_adh
= $dcrea->format(__("Y-m-d"));
185 $member->date_crea_adh
= '';
189 if (isset($member->date_modif_adh
)) {
191 $member->date_modif_adh
!= ''
192 && $member->date_modif_adh
!= '1901-01-01'
194 $dmodif = new DateTime($member->date_modif_adh
);
195 $member->date_modif_adh
= $dmodif->format(__("Y-m-d"));
197 $member->date_modif_adh
= '';
201 if (isset($member->date_echeance
)) {
203 $member->date_echeance
!= ''
204 && $member->date_echeance
!= '1901-01-01'
206 $dech = new DateTime($member->date_echeance
);
207 $member->date_echeance
= $dech->format(__("Y-m-d"));
209 $member->date_echeance
= '';
213 if (isset($member->ddn_adh
)) {
215 $member->ddn_adh
!= ''
216 && $member->ddn_adh
!= '1901-01-01'
218 $ddn = new DateTime($member->ddn_adh
);
219 $member->ddn_adh
= $ddn->format(__("Y-m-d"));
221 $member->ddn_adh
= '';
225 if (isset($member->sexe_adh
)) {
227 switch ($member->sexe_adh
) {
229 $member->sexe_adh
= _T("Man");
231 case Adherent
::WOMAN
:
232 $member->sexe_adh
= _T("Woman");
235 $member->sexe_adh
= _T("Unspecified");
241 if (isset($member->activite_adh
)) {
242 $member->activite_adh
243 = ($member->activite_adh
) ?
_T("Yes") : _T("No");
245 if (isset($member->bool_admin_adh
)) {
246 $member->bool_admin_adh
247 = ($member->bool_admin_adh
) ?
_T("Yes") : _T("No");
249 if (isset($member->bool_exempt_adh
)) {
250 $member->bool_exempt_adh
251 = ($member->bool_exempt_adh
) ?
_T("Yes") : _T("No");
253 if (isset($member->bool_display_info
)) {
254 $member->bool_display_info
255 = ($member->bool_display_info
) ?
_T("Yes") : _T("No");
259 $fp = fopen($this->path
, 'w');
263 self
::DEFAULT_SEPARATOR
,
273 * Get file path on disk
277 public function getPath()
287 public function getFileName()
289 return $this->filename
;