Overview
Comment: | La configuration du mot de passe doit être minimale, car c'est un champ un peu dunmaique selon le contexte, ça serait donc trop compliqué |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f1290c6e522eb72b93e9bb0e90450560 |
User & Date: | bohwaz on 2013-01-18 14:05:55 |
Other Links: | manifest | tags |
Context
2013-01-18
| ||
14:27 | Gestion des champs privés et non modifiables en mode utilisateur check-in: a83adc021d user: bohwaz tags: trunk | |
14:05 | La configuration du mot de passe doit être minimale, car c'est un champ un peu dunmaique selon le contexte, ça serait donc trop compliqué check-in: f1290c6e52 user: bohwaz tags: trunk | |
13:31 | Garder l'ancien comportement pour le moment check-in: 03c6e31ed5 user: bohwaz tags: trunk | |
Changes
Modified include/class.champs_membres.php from [6205058156] to [8d723ee771].
︙ | ︙ | |||
173 174 175 176 177 178 179 | { unset($value[$option_key]); } } } } | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | { unset($value[$option_key]); } } } } if (empty($config['title']) && $name != 'passe') { throw new UserException('Champ "'.$name.'" : Le titre est obligatoire.'); } if (empty($config['type']) || !array_key_exists($config['type'], $this->types)) { throw new UserException('Champ "'.$name.'" : Le type est vide ou non valide.'); |
︙ | ︙ | |||
297 298 299 300 301 302 303 304 305 306 307 308 309 | $config = Config::getInstance(); // Champs à créer $create = array( 'id INTEGER PRIMARY KEY, -- Numéro attribué automatiquement', 'id_categorie INTEGER NOT NULL, -- Numéro de catégorie', 'date_connexion TEXT NULL, -- Date de dernière connexion', ); // Champs à recopier $copy = array( 'id', 'id_categorie', | > > > > > > > | > > > > > > > | > > > | < > | 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 | $config = Config::getInstance(); // Champs à créer $create = array( 'id INTEGER PRIMARY KEY, -- Numéro attribué automatiquement', 'id_categorie INTEGER NOT NULL, -- Numéro de catégorie', 'date_connexion TEXT NULL, -- Date de dernière connexion', 'date_inscription TEXT NULL, -- Date d\'inscription', 'date_cotisation TEXT NULL, -- Date de cotisation', //'exemption_transaction INTEGER NOT NULL DEFAULT 0, -- Exempté de transaction obligatoire', ); $create_keys = array( 'FOREIGN KEY (id_categorie) REFERENCES membres_categories (id)' ); // Champs à recopier $copy = array( 'id', 'id_categorie', 'date_connexion', 'date_inscription', 'date_cotisation', //'exemption_transaction', ); $anciens_champs = $config->get('champs_membres'); $anciens_champs = is_null($anciens_champs) ? $this->champs : $anciens_champs->getAll(); foreach ($this->champs as $key=>$cfg) { if ($cfg['type'] == 'number') $type = 'FLOAT'; elseif ($cfg['type'] == 'multiple' || $cfg['type'] == 'checkbox') $type = 'INTEGER'; elseif ($cfg['type'] == 'file') $type = 'BLOB'; else $type = 'TEXT'; $line = $key . ' ' . $type . ' ' . ','; if (!empty($cfg['title'])) { $line .= '-- ' . str_replace(array("\n", "\r"), '', $cfg['title']); } $create[] = $line; if (array_key_exists($key, $anciens_champs)) { $copy[] = $key; } } $create = array_merge($create, $create_keys); $create = 'CREATE TABLE membres_tmp (' . "\n\t" . implode("\n\t", $create) . "\n);"; $copy = 'INSERT INTO membres_tmp (' . implode(', ', $copy) . ') SELECT ' . implode(', ', $copy) . ' FROM membres;'; $db->exec('PRAGMA foreign_keys = OFF;'); $db->exec('BEGIN;'); $db->exec($create); if ($copy) { $db->exec($copy); } $db->exec('DROP TABLE membres;'); $db->exec('ALTER TABLE membres_tmp RENAME TO membres;'); $db->exec('CREATE INDEX membres_id_categorie ON membres (id_categorie);'); // Index $db->exec('END;'); $db->exec('PRAGMA foreign_keys = ON;'); $config->set('champs_membres', $this); $config->save(); return true; } } ?> |
Modified include/data/champs_membres.ini from [2a8de6fd6b] to [6b80d17df1].
︙ | ︙ | |||
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | type = text title = "Nom & prénom" mandatory = true install = true editable = true [email] type = email title = "Adresse E-Mail" mandatory = true install = true editable = true [passe] type = password | > > > < | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | type = text title = "Nom & prénom" mandatory = true install = true editable = true [email] ; ce champ est obligatoirement présent et de type 'email' type = email title = "Adresse E-Mail" mandatory = true install = true editable = true [passe] ; ce champ est obligatoirement présent et de type 'password' ; le titre ne peut être modifié type = password mandatory = true install = true editable = true [adresse] type = textarea title = "Adresse postale" |
︙ | ︙ |
Modified include/data/schema.sql from [01ca919fb3] to [97f6a904bb].
︙ | ︙ | |||
11 12 13 14 15 16 17 | CREATE TABLE membres_categories -- Catégories de membres ( id INTEGER PRIMARY KEY, nom TEXT, description TEXT, | | < | < | < < < < < < | < < < | < < < < < < < < < | < < | < < < < < < < | | > > > > > | 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 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 | CREATE TABLE membres_categories -- Catégories de membres ( id INTEGER PRIMARY KEY, nom TEXT, description TEXT, droit_wiki INT DEFAULT 1, droit_membres INT DEFAULT 1, droit_compta INT DEFAULT 1, droit_inscription INT DEFAULT 0, droit_connexion INT DEFAULT 1, droit_config INT DEFAULT 0, cacher INT DEFAULT 0, id_transaction_obligatoire INTEGER NULL, FOREIGN KEY (id_transaction_obligatoire) REFERENCES transactions (id) ); -- Membres de l'asso -- Voir class.champs_membres.php -- Paiements possibles CREATE TABLE transactions ( id INTEGER PRIMARY KEY, id_categorie_compta INTEGER NULL, -- NULL si le type n'est pas associé automatiquement à la compta intitule TEXT NOT NULL, description TEXT NOT NULL, montant REAL NOT NULL, duree INTEGER NULL, debut TEXT NULL, fin TEXT NULL, rappel_expiration INTEGER NULL DEFAULT 0, -- 1 si envoi de rappel avant expiration FOREIGN KEY (id_categorie_compta) REFERENCES compta_categories (id) ); -- Paiements enregistrés CREATE TABLE membres_transactions ( id_membre INTEGER NOT NULL, id_transaction INTEGER NOT NULL, id_operation INTEGER NULL, libelle TEXT NULL, date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, montant REAL NOT NULL, FOREIGN KEY (id_membre) REFERENCES membres (id), FOREIGN KEY (id_transaction) REFERENCES transactions (id), FOREIGN KEY (id_operation) REFERENCES compta_journal (id) |
︙ | ︙ |
Modified include/lib.template.php from [d93f2441d6] to [648ab66dd3].
︙ | ︙ | |||
458 459 460 461 462 463 464 465 466 467 468 469 470 471 | { $out .= ' <dd>' . $field . '</dd>'; } return $out; } $tpl->register_function('csrf_field', 'Garradin\tpl_csrf_field'); $tpl->register_function('form_field', 'Garradin\tpl_form_field'); $tpl->register_function('select_compte', 'Garradin\tpl_select_compte'); $tpl->register_function('format_droits', 'Garradin\tpl_format_droits'); | > > > | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 | { $out .= ' <dd>' . $field . '</dd>'; } return $out; } $tpl->register_compiler('continue', function() { return 'continue;'; }); //$tpl->register_modifier('va_', function() { return 'continue;'; }); $tpl->register_function('csrf_field', 'Garradin\tpl_csrf_field'); $tpl->register_function('form_field', 'Garradin\tpl_form_field'); $tpl->register_function('select_compte', 'Garradin\tpl_select_compte'); $tpl->register_function('format_droits', 'Garradin\tpl_format_droits'); |
︙ | ︙ |
Modified templates/admin/config/membres.tpl from [25243cba6e] to [0a30b6cfc5].
︙ | ︙ | |||
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 | {/if} {if $review} <fieldset> <legend>Fiche membre exemple</legend> <dl> {foreach from=$champs item="champ" key="nom"} {html_champ_membre config=$champ name=$nom disabled=true} {if empty($champ.editable) || !empty($champ.private)} <dd> {if !empty($champ.private)} (Champ privé) {elseif empty($champ.editable)} (Non-modifiable par les membres) {/if} </dd> {/if} {/foreach} </dl> </fieldset> <form method="post" action="{$admin_url}config/membres.php"> <p class="submit"> {csrf_field key="config_membres"} <input type="submit" name="back" value="← Retour à l'édition" class="minor" /> <input type="submit" name="reset" value="Annuler les changements" class="minor" /> <input type="submit" name="save" value="Enregistrer →" /> | > > > > > > > > > > > > > > > > > > | 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | {/if} {if $review} <fieldset> <legend>Fiche membre exemple</legend> <dl> {foreach from=$champs item="champ" key="nom"} {if $nom == 'passe'}{continue}{/if} {html_champ_membre config=$champ name=$nom disabled=true} {if empty($champ.editable) || !empty($champ.private)} <dd> {if !empty($champ.private)} (Champ privé) {elseif empty($champ.editable)} (Non-modifiable par les membres) {/if} </dd> {/if} {/foreach} </dl> </fieldset> <fieldset id="f_passe"> <legend>Mot de passe</legend> <dl> <dt><label for="f_passe">Mot de passe</label>{if !empty($champs.passe.mandatory)} <b title="(Champ obligatoire)">obligatoire</b>{/if}</dt> <dd><input type="password" id="f_passe" disabled="disabled" /></dd> {if empty($champs.passe.editable) || !empty($champs.passe.private)} <dd> {if !empty($champs.passe.private)} (Champ privé) {elseif empty($champs.passe.editable)} (Non-modifiable par les membres) {/if} </dd> {/if} </dl> </fieldset> <form method="post" action="{$admin_url}config/membres.php"> <p class="submit"> {csrf_field key="config_membres"} <input type="submit" name="back" value="← Retour à l'édition" class="minor" /> <input type="submit" name="reset" value="Annuler les changements" class="minor" /> <input type="submit" name="save" value="Enregistrer →" /> |
︙ | ︙ | |||
102 103 104 105 106 107 108 109 110 111 112 113 114 115 | </dd> </dl> <p><input type="submit" name="add" value="Ajouter ce champ à la fiche membre" /></p> </fieldset> <div id="orderFields"> {foreach from=$champs item="champ" key="nom"} <fieldset id="f_{$nom|escape}"> <legend>{$nom|escape}</legend> <dl> <dt><label>Type</label></dt> <dd>{$champ.type|get_type}</dd> <dt><label for="f_{$nom|escape}_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt> <dd><input type="text" name="champs[{$nom|escape}][title]" id="f_{$nom|escape}_title" value="{form_field data=$champs[$nom] name=title}" size="60" /></dd> | > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | </dd> </dl> <p><input type="submit" name="add" value="Ajouter ce champ à la fiche membre" /></p> </fieldset> <div id="orderFields"> {foreach from=$champs item="champ" key="nom"} {if $nom == 'passe'}{continue}{/if} <fieldset id="f_{$nom|escape}"> <legend>{$nom|escape}</legend> <dl> <dt><label>Type</label></dt> <dd>{$champ.type|get_type}</dd> <dt><label for="f_{$nom|escape}_title">Titre</label> <b title="(Champ obligatoire)">obligatoire</b></dt> <dd><input type="text" name="champs[{$nom|escape}][title]" id="f_{$nom|escape}_title" value="{form_field data=$champs[$nom] name=title}" size="60" /></dd> |
︙ | ︙ | |||
141 142 143 144 145 146 147 148 149 150 151 152 153 154 | <dd>{if $champ.type == 'multiple'}{math a=$more equation="a+1"}. {/if}<input type="text" name="champs[{$nom|escape}][options][{$more|escape}]" value="" size="50" /></dd> {/if} {/if} </dl> </fieldset> {/foreach} </div> <p class="submit"> {csrf_field key="config_membres"} <input type="submit" name="reset" value="Annuler les changements" class="minor" /> <input type="submit" name="review" value="Enregistrer →" /> (un récapitulatif sera présenté et une confirmation sera demandée) </p> | > > > > > > > > > > > > | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | <dd>{if $champ.type == 'multiple'}{math a=$more equation="a+1"}. {/if}<input type="text" name="champs[{$nom|escape}][options][{$more|escape}]" value="" size="50" /></dd> {/if} {/if} </dl> </fieldset> {/foreach} </div> <fieldset id="f_passe"> <legend>Mot de passe</legend> <dl> <dt><label><input type="checkbox" name="champs[passe][editable]" value="1" {form_field data=$champs.passe name=editable checked="1"} /> Modifiable par les membres</label></dt> <dd class="help">Si coché, les membres pourront changer cette information depuis leur espace personnel.</dd> <dt><label><input type="checkbox" name="champs[passe][mandatory]" value="1" {form_field data=$champs.passe name=mandatory checked="1"} /> Champ obligatoire</label></dt> <dd class="help">Si coché, ce champ ne pourra rester vide.</dd> <dt><label><input type="checkbox" name="champs[passe][private]" value="1" {form_field data=$champs.passe name=private checked="1"} /> Champ privé</label></dt> <dd class="help">Si coché, ce champ ne sera visible et modifiable que par les personnes pouvant gérer les membres, mais pas les membres eux-même.</dd> </dl> </fieldset> <p class="submit"> {csrf_field key="config_membres"} <input type="submit" name="reset" value="Annuler les changements" class="minor" /> <input type="submit" name="review" value="Enregistrer →" /> (un récapitulatif sera présenté et une confirmation sera demandée) </p> |
︙ | ︙ |
Modified templates/admin/mes_infos.tpl from [9e2c8a3fd2] to [4d73b31814].
︙ | ︙ | |||
16 17 18 19 20 21 22 | {if empty($champ.private) && $nom != 'passe'} {html_champ_membre config=$champ name=$nom data=$membre} {/if} {/foreach} </dl> </fieldset> | < | < | 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 45 46 47 | {if empty($champ.private) && $nom != 'passe'} {html_champ_membre config=$champ name=$nom data=$membre} {/if} {/foreach} </dl> </fieldset> <fieldset> <legend>Changer mon mot de passe</legend> {if $user.droits.membres < Garradin\Membres::DROIT_ADMIN && (!empty($champs.passe.private) || empty($champs.passe.editable))} <p class="help">Vous devez contacter un administrateur pour changer votre mot de passe.</p> {else} <dl> <dd>Vous avez déjà un mot de passe, ne remplissez pas les champs suivants si vous ne souhaitez pas les changer.</dd> <dt><label for="f_passe">Nouveau mot de passe</label></dt> <dd class="help"> Pas d'idée ? Voici une suggestion choisie au hasard : <tt title="Cliquer pour utiliser cette suggestion comme mot de passe" onclick="fillPassword(this);">{$passphrase|escape}</tt> </dd> <dd><input type="password" name="passe" id="f_passe" value="{form_field name=passe}" /></dd> <dt><label for="f_repasse">Encore le mot de passe</label> (vérification)</dt> <dd><input type="password" name="repasse" id="f_repasse" value="{form_field name=repasse}" /></dd> </dl> {/if} </fieldset> <p class="submit"> {csrf_field key="edit_me"} <input type="submit" name="save" value="Enregistrer →" /> </p> </form> |
︙ | ︙ |