Comment: | Modernisation : utilisation d'objets au lieu de tableaux et utilisation de Session |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
1b35af2dbea95ffdb03e03c2fefd4ebe |
User & Date: | bohwaz on 2017-05-01 06:42:45 |
Other Links: | branch diff | manifest | tags |
2017-05-01
| ||
07:12 | Modernisation partie membres : utilisation d'objets et de Session check-in: be2ef5bb8b user: bohwaz tags: dev | |
06:42 | Modernisation : utilisation d'objets au lieu de tableaux et utilisation de Session check-in: 1b35af2dbe user: bohwaz tags: dev | |
06:40 | Utilisation d'objets anonymes plutôt que des tableaux associatifs check-in: 7bf5e8cf66 user: bohwaz tags: dev | |
Modified src/include/lib/Garradin/Membres.php from [8382fa36e3] to [d9c5990d64].
1 2 3 4 | <?php namespace Garradin; | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php namespace Garradin; use KD2\Security; use Garradin\Membres\Session; class Membres { const DROIT_AUCUN = 0; const DROIT_ACCES = 1; const DROIT_ECRITURE = 2; const DROIT_ADMIN = 9; |
︙ | ︙ | |||
288 289 290 291 292 293 294 | public function delete($ids) { if (!is_array($ids)) { $ids = [(int)$ids]; } | | | | | 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | public function delete($ids) { if (!is_array($ids)) { $ids = [(int)$ids]; } if ($session = Session::get()) { $user = $session->getUser(); foreach ($ids as $id) { if ($user->id == $id) { throw new UserException('Il n\'est pas possible de supprimer son propre compte.'); } } } return self::_deleteMembres($ids); |
︙ | ︙ | |||
493 494 495 496 497 498 499 500 501 502 503 504 505 506 | $db->delete('rappels_envoyes', $where); $db->delete('membres_operations', $where); $db->delete('cotisations_membres', $where); //$db->exec('DELETE FROM wiki_suivi WHERE id_membre IN ('.$membres.');'); // Suppression du membre return $db->delete('membres', $where); } /** * @deprecated remplacer par envoyer message à tableau de membres */ public function sendMessageToCategory($dest, $sujet, $message, $subscribed_only = false) | > | 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 | $db->delete('rappels_envoyes', $where); $db->delete('membres_operations', $where); $db->delete('cotisations_membres', $where); //$db->exec('DELETE FROM wiki_suivi WHERE id_membre IN ('.$membres.');'); // Suppression du membre $where = sprintf('id IN (%s)', $membres); return $db->delete('membres', $where); } /** * @deprecated remplacer par envoyer message à tableau de membres */ public function sendMessageToCategory($dest, $sujet, $message, $subscribed_only = false) |
︙ | ︙ |
Modified src/include/lib/Garradin/Membres/Categories.php from [75e748283d] to [f9aa83d6c1].
︙ | ︙ | |||
30 31 32 33 34 35 36 | if (!isset($data['nom']) || !trim($data['nom'])) { throw new UserException('Le nom de catégorie ne peut rester vide.'); } if (!empty($data['id_cotisation_obligatoire']) | | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | if (!isset($data['nom']) || !trim($data['nom'])) { throw new UserException('Le nom de catégorie ne peut rester vide.'); } if (!empty($data['id_cotisation_obligatoire']) && !$db->firstColumn('SELECT 1 FROM cotisations WHERE id = ?;', (int)$data['id_cotisation_obligatoire'])) { throw new UserException('Numéro de cotisation inconnu.'); } if (isset($data['id_cotisation_obligatoire']) && empty($data['id_cotisation_obligatoire'])) { $data['id_cotisation_obligatoire'] = null; |
︙ | ︙ | |||
60 61 62 63 64 65 66 | if (!isset($data['droit_'.$key])) $data['droit_'.$key] = $value; else $data['droit_'.$key] = (int)$data['droit_'.$key]; } $db = DB::getInstance(); | | | | | | | | | | | | | < < | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | if (!isset($data['droit_'.$key])) $data['droit_'.$key] = $value; else $data['droit_'.$key] = (int)$data['droit_'.$key]; } $db = DB::getInstance(); $db->insert('membres_categories', $data); return $db->lastInsertRowId(); } public function edit($id, $data) { $this->_checkData($data); foreach ($this->droits as $key=>$value) { if (isset($data['droit_'.$key])) $data['droit_'.$key] = (int)$data['droit_'.$key]; } if (!isset($data['cacher']) || $data['cacher'] != 1) $data['cacher'] = 0; $db = DB::getInstance(); return $db->update('membres_categories', $data, 'id = '.(int)$id); } public function get($id) { $db = DB::getInstance(); return $db->first('SELECT * FROM membres_categories WHERE id = ?;', (int) $id); } public function remove($id) { $db = DB::getInstance(); $config = Config::getInstance(); if ($id == $config->get('categorie_membres')) { throw new UserException('Il est interdit de supprimer la catégorie définie par défaut dans la configuration.'); } if ($db->simpleQuerySingle('SELECT 1 FROM membres WHERE id_categorie = ?;', false, (int)$id)) { throw new UserException('La catégorie contient encore des membres, il n\'est pas possible de la supprimer.'); } $db->update( 'wiki_pages', [ 'droit_lecture' => Wiki::LECTURE_NORMAL, 'droit_ecriture' => Wiki::ECRITURE_NORMAL, ], 'droit_lecture = '.(int)$id.' OR droit_ecriture = '.(int)$id ); return $db->exec('DELETE FROM membres_categories WHERE id = ?;', (int) $id); } public function listSimple() { $db = DB::getInstance(); return $db->getAssoc('SELECT id, nom FROM membres_categories ORDER BY nom;'); } public function listComplete() { $db = DB::getInstance(); return $db->get('SELECT * FROM membres_categories ORDER BY nom;'); } public function listCompleteWithStats() { $db = DB::getInstance(); return $db->get('SELECT *, (SELECT COUNT(*) FROM membres WHERE id_categorie = membres_categories.id) AS nombre FROM membres_categories ORDER BY nom;'); } public function listHidden() { $db = DB::getInstance(); return $db->getAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 1;'); } public function listNotHidden() { $db = DB::getInstance(); return $db->getAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 0;'); } } |
Modified src/include/lib/Garradin/Membres/Session.php from [45b3d75749] to [2d466640b5].
︙ | ︙ | |||
268 269 270 271 272 273 274 275 276 277 278 279 280 281 | // Démarrage session self::start(); if (empty($_SESSION['user'])) { throw new \LogicException('Aucun utilisateur connecté.'); } } protected function getPermanentCookie() { if (empty($_COOKIE[self::PERMANENT_COOKIE_NAME])) { return false; | > > | 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | // Démarrage session self::start(); if (empty($_SESSION['user'])) { throw new \LogicException('Aucun utilisateur connecté.'); } $this->user = $_SESSION['user']; } protected function getPermanentCookie() { if (empty($_COOKIE[self::PERMANENT_COOKIE_NAME])) { return false; |
︙ | ︙ | |||
444 445 446 447 448 449 450 | } else { return null; } } | | | | 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 | } else { return null; } } public function canAccess($category, $permission) { if (!$this->user) { return false; } return ($this->user->droits->$category >= $permission); } public function requireAccess($category, $permission) { if (!$this->canAccess($category, $permission)) { throw new UserException('Vous n\'avez pas le droit d\'accéder à cette page.'); } } public function getNewOTPSecret() { |
︙ | ︙ | |||
617 618 619 620 621 622 623 | { $fingerprint = str_split($fingerprint, 4); $fingerprint = implode(' ', $fingerprint); } return $fingerprint; } | | < | 619 620 621 622 623 624 625 626 | { $fingerprint = str_split($fingerprint, 4); $fingerprint = implode(' ', $fingerprint); } return $fingerprint; } } |
Modified src/include/lib/Garradin/Template.php from [438b56c467] to [e30b12e055].
︙ | ︙ | |||
546 547 548 549 550 551 552 | case 'url': return '<a href="' . htmlspecialchars($v) . '">' . htmlspecialchars($v) . '</a>'; case 'country': return Utils::getCountryName($v); case 'multiple': $out = []; | | | 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | case 'url': return '<a href="' . htmlspecialchars($v) . '">' . htmlspecialchars($v) . '</a>'; case 'country': return Utils::getCountryName($v); case 'multiple': $out = []; foreach ($config->options as $b => $name) { if ($v & (0x01 << $b)) $out[] = $name; } return implode(', ', $out); default: |
︙ | ︙ |
Modified src/templates/admin/membres/fiche.tpl from [e593bfd1c6] to [ce083161b7].
︙ | ︙ | |||
64 65 66 67 68 69 70 | <dd>{$membre.date_inscription|date_fr:'d/m/Y'}</dd> <dt>Dernière connexion</dt> <dd>{if empty($membre.date_connexion)}Jamais{else}{$membre.date_connexion|date_fr:'d/m/Y à H:i'}{/if}</dd> {foreach from=$champs key="c" item="config"} <dt>{$config.title}</dt> <dd> {if $config.type == 'checkbox'} | | | | | | | | | | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | <dd>{$membre.date_inscription|date_fr:'d/m/Y'}</dd> <dt>Dernière connexion</dt> <dd>{if empty($membre.date_connexion)}Jamais{else}{$membre.date_connexion|date_fr:'d/m/Y à H:i'}{/if}</dd> {foreach from=$champs key="c" item="config"} <dt>{$config.title}</dt> <dd> {if $config.type == 'checkbox'} {if $membre->$c}Oui{else}Non{/if} {elseif empty($membre->$c)} <em>(Non renseigné)</em> {elseif $c == 'nom'} <strong>{$membre->$c}</strong> {elseif $c == 'email'} <a href="mailto:{$membre->$c}">{$membre->$c}</a> | <a href="{$www_url}admin/membres/message.php?id={$membre.id}"><b class="icn action">✉</b> Envoyer un message</a> {elseif $config.type == 'email'} <a href="mailto:{$membre->$c}">{$membre->$c}</a> {elseif $config.type == 'tel'} <a href="tel:{$membre->$c}">{$membre->$c|format_tel}</a> {elseif $config.type == 'country'} {$membre->$c|get_country_name} {elseif $config.type == 'date' || $config.type == 'datetime'} {$membre->$c|format_sqlite_date_to_french} {elseif $c == 'passe'} Oui {elseif $config.type == 'password'} ******* {elseif $config.type == 'multiple'} <ul> {foreach from=$config.options key="b" item="name"} {if $membre->$c & (0x01 << $b)} <li>{$name}</li> {/if} {/foreach} </ul> {else} {$membre->$c|escape|rtrim|nl2br} {/if} </dd> {/foreach} </dl> {include file="admin/_foot.tpl"} |
Modified src/templates/admin/membres/index.tpl from [b3bd44002a] to [432dc2550b].
︙ | ︙ | |||
59 60 61 62 63 64 65 | </thead> <tbody> {foreach from=$liste item="membre"} <tr> {if $user.droits.membres == Garradin\Membres::DROIT_ADMIN}<td class="check"><input type="checkbox" name="selected[]" value="{$membre.id}" /></td>{/if} <td class="num"><a href="{$admin_url}membres/fiche.php?id={$membre.id}">{$membre.id}</a></th> {foreach from=$champs key="c" item="cfg"} | | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | </thead> <tbody> {foreach from=$liste item="membre"} <tr> {if $user.droits.membres == Garradin\Membres::DROIT_ADMIN}<td class="check"><input type="checkbox" name="selected[]" value="{$membre.id}" /></td>{/if} <td class="num"><a href="{$admin_url}membres/fiche.php?id={$membre.id}">{$membre.id}</a></th> {foreach from=$champs key="c" item="cfg"} <td>{$membre->$c|raw|display_champ_membre:$cfg}</td> {/foreach} <td class="actions"> {if !empty($membre.email)}<a class="icn" href="{$admin_url}membres/message.php?id={$membre.id}" title="Envoyer un message">✉</a> {/if} <a class="icn" href="{$admin_url}membres/fiche.php?id={$membre.id}" title="Fiche membre">👤</a> <a class="icn" href="{$admin_url}membres/modifier.php?id={$membre.id}" title="Modifier la fiche membre">✎</a> </td> </tr> |
︙ | ︙ |
Modified src/www/admin/_inc.php from [48fbe337e7] to [8fa8938d39].
︙ | ︙ | |||
37 38 39 40 41 42 43 | $user = $session->getUser(); $tpl->assign('user', $user); $tpl->assign('current', ''); $tpl->assign('plugins_menu', Plugin::listMenu()); | | | 37 38 39 40 41 42 43 44 45 46 47 48 | $user = $session->getUser(); $tpl->assign('user', $user); $tpl->assign('current', ''); $tpl->assign('plugins_menu', Plugin::listMenu()); if ($session->canAccess('membres', Membres::DROIT_ACCES)) { $tpl->assign('nb_membres', (new Membres)->countAllButHidden()); } } |
Modified src/www/admin/index.php from [fe9c328e0e] to [b5439ef247].
︙ | ︙ | |||
15 16 17 18 19 20 21 | $cats = new Membres\Categories; $categorie = $cats->get($user->id_categorie); $cotisations = new Membres\Cotisations; | | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | $cats = new Membres\Categories; $categorie = $cats->get($user->id_categorie); $cotisations = new Membres\Cotisations; if (!empty($categorie->id_cotisation_obligatoire)) { $tpl->assign('cotisation', $cotisations->isMemberUpToDate($user->id, $categorie->id_cotisation_obligatoire)); } else { $tpl->assign('cotisation', false); } $tpl->display('admin/index.tpl'); |
︙ | ︙ |
Added src/www/admin/membres/_inc.php version [def8326778].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; $session->requireAccess('membres', Membres::DROIT_ACCES); $membres = new Membres; |
Modified src/www/admin/membres/action.php from [bc00f7163a] to [42ab6e796b].
1 2 3 | <?php namespace Garradin; | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); if (empty($_POST['selected'])) { throw new UserException("Aucun membre sélectionné."); } foreach ($_POST['selected'] as &$id) { $id = (int) $id; // On ne permet pas d'action collective sur l'utilisateur courant pour éviter les risques // d'erreur genre "oh je me suis supprimé du coup j'ai plus accès à rien" if ($id == $user->id) { throw new UserException("Il n'est pas possible de se modifier ou supprimer soi-même."); } } $error = false; |
︙ | ︙ |
Modified src/www/admin/membres/ajouter.php from [5e7a5df698] to [bced1ce071].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ECRITURE); $cats = new Membres\Categories; $champs = $config->get('champs_membres'); $error = false; |
︙ | ︙ | |||
20 21 22 23 24 25 26 | { $error = 'La vérification ne correspond pas au mot de passe.'; } else { try { | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | { $error = 'La vérification ne correspond pas au mot de passe.'; } else { try { if ($session->canAccess('membres', Membres::DROIT_ADMIN)) { $id_categorie = Utils::post('id_categorie'); } else { $id_categorie = $config->get('categorie_membres'); } |
︙ | ︙ | |||
55 56 57 58 59 60 61 | $tpl->assign('passphrase', Utils::suggestPassword()); $tpl->assign('champs', $champs->getAll()); $tpl->assign('membres_cats', $cats->listSimple()); $tpl->assign('current_cat', Utils::post('id_categorie') ?: $config->get('categorie_membres')); $tpl->display('admin/membres/ajouter.tpl'); | < < | 55 56 57 58 59 60 61 | $tpl->assign('passphrase', Utils::suggestPassword()); $tpl->assign('champs', $champs->getAll()); $tpl->assign('membres_cats', $cats->listSimple()); $tpl->assign('current_cat', Utils::post('id_categorie') ?: $config->get('categorie_membres')); $tpl->display('admin/membres/ajouter.tpl'); |
Modified src/www/admin/membres/cat_modifier.php from [a7fc1000f3] to [ac24a4dd6a].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $cats = new Membres\Categories; if (empty($_GET['id']) || !is_numeric($_GET['id'])) { |
︙ | ︙ | |||
43 44 45 46 47 48 49 | 'cacher' => (int) Utils::post('cacher'), 'id_cotisation_obligatoire' => (int) Utils::post('id_cotisation_obligatoire'), ]; // Ne pas permettre de modifier la connexion, l'accès à la config et à la gestion des membres // pour la catégorie du membre qui édite les catégories, sinon il pourrait s'empêcher // de se connecter ou n'avoir aucune catégorie avec le droit de modifier les catégories ! | | | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 'cacher' => (int) Utils::post('cacher'), 'id_cotisation_obligatoire' => (int) Utils::post('id_cotisation_obligatoire'), ]; // Ne pas permettre de modifier la connexion, l'accès à la config et à la gestion des membres // pour la catégorie du membre qui édite les catégories, sinon il pourrait s'empêcher // de se connecter ou n'avoir aucune catégorie avec le droit de modifier les catégories ! if ($cat->id == $user->id_categorie) { $data['droit_connexion'] = Membres::DROIT_ACCES; $data['droit_config'] = Membres::DROIT_ADMIN; $data['droit_membres'] = Membres::DROIT_ADMIN; } try { $cats->edit($id, $data); if ($id == $user->id_categorie) { $membres->updateSessionData(); } Utils::redirect('/admin/membres/categories.php'); } catch (UserException $e) { $error = $e->getMessage(); } } } $tpl->assign('cat', $cat); $tpl->assign('error', $error); $tpl->assign('readonly', $cat->id == $user->id_categorie ? 'disabled="disabled"' : ''); $cotisations = new Cotisations; $tpl->assign('cotisations', $cotisations->listCurrent()); $tpl->assign('membres', $membres); $tpl->display('admin/membres/cat_modifier.tpl'); |
Modified src/www/admin/membres/cat_supprimer.php from [a4b79b483c] to [9693b6dec4].
1 2 3 | <?php namespace Garradin; | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $cats = new Membres\Categories; if (empty($_GET['id']) || !is_numeric($_GET['id'])) { throw new UserException("Argument du numéro de catégorie manquant."); } $id = (int) $_GET['id']; $cat = $cats->get($id); if (!$cat) { throw new UserException("Cette catégorie n'existe pas."); } if ($cat->id == $user->id_categorie) { throw new UserException("Vous ne pouvez pas supprimer votre catégorie."); } $error = false; if (!empty($_POST['delete'])) |
︙ | ︙ | |||
47 48 49 50 51 52 53 | } } $tpl->assign('cat', $cat); $tpl->assign('error', $error); $tpl->display('admin/membres/cat_supprimer.tpl'); | < < | 47 48 49 50 51 52 53 | } } $tpl->assign('cat', $cat); $tpl->assign('error', $error); $tpl->display('admin/membres/cat_supprimer.tpl'); |
Modified src/www/admin/membres/categories.php from [6744f7ef6f] to [40bd489c9b].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $cats = new Membres\Categories; $error = false; |
︙ | ︙ | |||
32 33 34 35 36 37 38 | } $tpl->assign('error', $error); $tpl->assign('liste', $cats->listCompleteWithStats()); $tpl->display('admin/membres/categories.tpl'); | < < | 32 33 34 35 36 37 38 | } $tpl->assign('error', $error); $tpl->assign('liste', $cats->listCompleteWithStats()); $tpl->display('admin/membres/categories.tpl'); |
Modified src/www/admin/membres/cotisations.php from [8065ef0e0e] to [c07ea0b3ba].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ECRITURE); if (empty($_GET['id']) || !is_numeric($_GET['id'])) { throw new UserException("Argument du numéro de membre manquant."); } |
︙ | ︙ | |||
38 39 40 41 42 43 44 | $tpl->assign('nb_activites', $cotisations->countForMember($membre['id'])); $tpl->assign('cotisations', $cotisations->listForMember($membre['id'])); $tpl->assign('cotisations_membre', $cotisations->listSubscriptionsForMember($membre['id'])); $tpl->assign('membre', $membre); $tpl->display('admin/membres/cotisations.tpl'); | < < | 38 39 40 41 42 43 44 | $tpl->assign('nb_activites', $cotisations->countForMember($membre['id'])); $tpl->assign('cotisations', $cotisations->listForMember($membre['id'])); $tpl->assign('cotisations_membre', $cotisations->listSubscriptionsForMember($membre['id'])); $tpl->assign('membre', $membre); $tpl->display('admin/membres/cotisations.tpl'); |
Modified src/www/admin/membres/fiche.php from [2671454489] to [1a6a56f8e5].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ECRITURE); if (empty($_GET['id']) || !is_numeric($_GET['id'])) { throw new UserException("Argument du numéro de membre manquant."); } |
︙ | ︙ | |||
20 21 22 23 24 25 26 | } $champs = $config->get('champs_membres'); $tpl->assign('champs', $champs->getAll()); $cats = new Membres\Categories; | | | | | | | < < | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | } $champs = $config->get('champs_membres'); $tpl->assign('champs', $champs->getAll()); $cats = new Membres\Categories; $categorie = $cats->get($membre->id_categorie); $tpl->assign('categorie', $categorie); $cotisations = new Membres\Cotisations; if (!empty($categorie->id_cotisation_obligatoire)) { $tpl->assign('cotisation', $cotisations->isMemberUpToDate($membre->id, $categorie->id_cotisation_obligatoire)); } else { $tpl->assign('cotisation', false); } $tpl->assign('nb_activites', $cotisations->countForMember($membre->id)); if ($session->canAccess('compta', Membres::DROIT_ACCES)) { $journal = new Compta\Journal; $tpl->assign('nb_operations', $journal->countForMember($membre->id)); } $tpl->assign('membre', $membre); $tpl->display('admin/membres/fiche.tpl'); |
Modified src/www/admin/membres/import.php from [acabd113f1] to [213e3d1431].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $import = new Membres\Import; if (isset($_GET['export'])) { |
︙ | ︙ | |||
60 61 62 63 64 65 66 | $tpl->assign('ok', isset($_GET['ok']) ? true : false); $tpl->assign('garradin_champs', $champs); $tpl->assign('galette_champs', $import->galette_fields); $tpl->assign('translate', Utils::post('galette_translate')); $tpl->display('admin/membres/import.tpl'); | < < | 60 61 62 63 64 65 66 | $tpl->assign('ok', isset($_GET['ok']) ? true : false); $tpl->assign('garradin_champs', $champs); $tpl->assign('galette_champs', $import->galette_fields); $tpl->assign('translate', Utils::post('galette_translate')); $tpl->display('admin/membres/import.tpl'); |
Modified src/www/admin/membres/index.php from [7a97d5397c] to [e555d5ecb0].
1 2 3 | <?php namespace Garradin; | | < < < < | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; // Recherche de membre (pour ceux qui n'ont qu'un accès à la liste des membres) if (Utils::get('r')) { $recherche = trim(Utils::get('r')); $result = $membres->search($config->get('champ_identite'), $recherche); |
︙ | ︙ | |||
49 50 51 52 53 54 55 | if (isset($_GET['d'])) $desc = true; $fields = $champs->getListedFields(); // Vérifier que le champ de tri existe bien dans la table | | | | | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | if (isset($_GET['d'])) $desc = true; $fields = $champs->getListedFields(); // Vérifier que le champ de tri existe bien dans la table if ($order != 'id' && !isset($fields->$order)) { // Sinon par défaut c'est le premier champ de la table qui fait le tri $order = $champs->getFirstListed(); } $tpl->assign('order', $order); $tpl->assign('desc', $desc); $tpl->assign('champs', $fields); $tpl->assign('liste', $membres->listByCategory($cat_id, array_keys((array) $fields), $page, $order, $desc)); $tpl->assign('total', $membres->countByCategory($cat_id)); $tpl->assign('pagination_url', Utils::getSelfUrl(true) . '?p=[ID]&o=' . $order . ($desc ? '&d' : '') . ($cat_id? '&cat='. (int) Utils::get('cat') : '')); $tpl->assign('membres_cats', $membres_cats); $tpl->assign('membres_cats_cachees', $membres_cats_cachees); $tpl->assign('current_cat', $cat_id); |
︙ | ︙ |
Modified src/www/admin/membres/message.php from [e72f713804] to [77d9d0a7a1].
1 2 3 | <?php namespace Garradin; | | < < | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; if (empty($user['email'])) { throw new UserException("Vous devez renseigner l'adresse e-mail dans vos informations pour pouvoir contacter les autres membres."); } if (empty($_GET['id']) || !is_numeric($_GET['id'])) |
︙ | ︙ | |||
58 59 60 61 62 63 64 | $cats = new Membres\Categories; $tpl->assign('categorie', $cats->get($membre['id_categorie'])); $tpl->assign('membre', $membre); $tpl->assign('error', $error); $tpl->display('admin/membres/message.tpl'); | < < | 56 57 58 59 60 61 62 | $cats = new Membres\Categories; $tpl->assign('categorie', $cats->get($membre['id_categorie'])); $tpl->assign('membre', $membre); $tpl->assign('error', $error); $tpl->display('admin/membres/message.tpl'); |
Modified src/www/admin/membres/message_collectif.php from [b4f814aa9f] to [96dd15d89a].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $error = false; if (!empty($_POST['save'])) { |
︙ | ︙ | |||
37 38 39 40 41 42 43 | $cats = new Membres\Categories; $tpl->assign('cats_liste', $cats->listSimple()); $tpl->assign('cats_cachees', $cats->listHidden()); $tpl->assign('error', $error); $tpl->display('admin/membres/message_collectif.tpl'); | < < | 37 38 39 40 41 42 43 | $cats = new Membres\Categories; $tpl->assign('cats_liste', $cats->listSimple()); $tpl->assign('cats_cachees', $cats->listHidden()); $tpl->assign('error', $error); $tpl->display('admin/membres/message_collectif.tpl'); |
Modified src/www/admin/membres/modifier.php from [6df93d8953] to [c5f6388ed3].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ECRITURE); if (empty($_GET['id']) || !is_numeric($_GET['id'])) { throw new UserException("Argument du numéro de membre manquant."); } |
︙ | ︙ | |||
19 20 21 22 23 24 25 | throw new UserException("Ce membre n'existe pas."); } $cats = new Membres\Categories; $champs = $config->get('champs_membres'); // Protection contre la modification des admins par des membres moins puissants | | > | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | throw new UserException("Ce membre n'existe pas."); } $cats = new Membres\Categories; $champs = $config->get('champs_membres'); // Protection contre la modification des admins par des membres moins puissants $membre_cat = $cats->get($membre->id_categorie); if (($membre_cat->droit_membres == Membres::DROIT_ADMIN) && ($user->droits->membres < Membres::DROIT_ADMIN)) { throw new UserException("Seul un membre admin peut modifier un autre membre admin."); } $error = false; if (!empty($_POST['save'])) |
︙ | ︙ | |||
48 49 50 51 52 53 54 | $data = []; foreach ($champs->getAll() as $key=>$config) { $data[$key] = Utils::post($key); } | | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | $data = []; foreach ($champs->getAll() as $key=>$config) { $data[$key] = Utils::post($key); } if ($session->canAccess('membres', Membres::DROIT_ADMIN) && $user->id != $membre->id) { $data['id_categorie'] = Utils::post('id_categorie'); $data['id'] = Utils::post('id'); } $membres->edit($id, $data); |
︙ | ︙ | |||
75 76 77 78 79 80 81 | } $tpl->assign('error', $error); $tpl->assign('passphrase', Utils::suggestPassword()); $tpl->assign('champs', $champs->getAll()); $tpl->assign('membres_cats', $cats->listSimple()); | | | < < | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | } $tpl->assign('error', $error); $tpl->assign('passphrase', Utils::suggestPassword()); $tpl->assign('champs', $champs->getAll()); $tpl->assign('membres_cats', $cats->listSimple()); $tpl->assign('current_cat', Utils::post('id_categorie') ?: $membre->id_categorie); $tpl->assign('can_change_id', $session->canAccess('membres', Membres::DROIT_ADMIN)); $tpl->assign('membre', $membre); $tpl->display('admin/membres/modifier.tpl'); |
Modified src/www/admin/membres/recherche.php from [5395028cb2] to [96056f7b5d].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ECRITURE); $recherche = trim(Utils::get('r')); $champ = trim(Utils::get('c')); $champs = $config->get('champs_membres'); |
︙ | ︙ | |||
37 38 39 40 41 42 43 | if ($recherche != '') { $result = $membres->search($champ, $recherche); if (count($result) == 1 && $auto) { | | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | if ($recherche != '') { $result = $membres->search($champ, $recherche); if (count($result) == 1 && $auto) { Utils::redirect('/admin/membres/fiche.php?id=' . (int)$result[0]->id); } } $champs_liste = $champs->getList(); $champs_liste = array_merge( ['id' => ['title' => 'Numéro unique', 'type' => 'number']], |
︙ | ︙ | |||
70 71 72 73 74 75 76 | { $tpl->assign('liste', $result); } $tpl->assign('recherche', $recherche); $tpl->display('admin/membres/recherche.tpl'); | < < | 70 71 72 73 74 75 76 | { $tpl->assign('liste', $result); } $tpl->assign('recherche', $recherche); $tpl->display('admin/membres/recherche.tpl'); |
Modified src/www/admin/membres/recherche_sql.php from [0fd1703f2d] to [7fb10d435a].
1 2 3 | <?php namespace Garradin; | | | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $query = trim(Utils::get('query')); $tpl->assign('schema', $membres->schemaSQL()); $tpl->assign('query', $query); |
︙ | ︙ | |||
23 24 25 26 27 28 29 | } else { $tpl->assign('result', null); } $tpl->display('admin/membres/recherche_sql.tpl'); | < < | 23 24 25 26 27 28 29 | } else { $tpl->assign('result', null); } $tpl->display('admin/membres/recherche_sql.tpl'); |
Modified src/www/admin/membres/supprimer.php from [befec5c0f6] to [9fa9721159].
1 2 3 | <?php namespace Garradin; | | | | | < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $session->requireAccess('membres', Membres::DROIT_ADMIN); $membre = $membres->get(Utils::get('id')); if (!$membre) { throw new UserException("Ce membre n'existe pas."); } $error = false; if ($membre->id == $user->id) { $error = "Il n'est pas possible de supprimer votre propre compte."; } if (Utils::post('delete') && !$error) { if (!Utils::CSRF_check('delete_membre_'.$membre->id)) { $error = 'Une erreur est survenue, merci de renvoyer le formulaire.'; } else { try { $membres->delete($membre->id); Utils::redirect('/admin/membres/'); } catch (UserException $e) { $error = $e->getMessage(); } } } $tpl->assign('membre', $membre); $tpl->assign('error', $error); $tpl->display('admin/membres/supprimer.tpl'); |