Overview
Comment: | Make date_inscription a normal dynamic field |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA3-256: |
7e4bceb84e1f31f0f995badfe8fd164c |
User & Date: | bohwaz on 2022-08-05 03:14:14 |
Other Links: | branch diff | manifest | tags |
Context
2022-08-06
| ||
01:47 | Improve rendering of user permissions icons check-in: e09b69879e user: bohwaz tags: dev | |
2022-08-05
| ||
03:14 | Make date_inscription a normal dynamic field check-in: 7e4bceb84e user: bohwaz tags: dev | |
2022-07-31
| ||
03:21 | Implement generated columns as dynamic user fields check-in: 3b12525b6e user: bohwaz tags: dev | |
Changes
Modified src/include/data/users_fields_presets.ini from [420ae8bd60] to [be9acc7ed5].
︙ | ︙ | |||
122 123 124 125 126 127 128 | [age] type = generated label = "Âge" depends[] = date_naissance default = false sql = "CAST(strftime('%Y.%m%d', date()) - strftime('%Y.%m%d', date_naissance) as int)" | > > > > > > > > > > > > > > > | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | [age] type = generated label = "Âge" depends[] = date_naissance default = false sql = "CAST(strftime('%Y.%m%d', date()) - strftime('%Y.%m%d', date_naissance) as int)" [date_inscription] type = date label = "Date d'inscription" help = "Date à laquelle le membre a été inscrit à l'association pour la première fois" default = true default_value = '=NOW' [anciennete] type = generated label = "Ancienneté" help = "Nombre d'années depui" depends[] = date_inscription default = false sql = "CAST(strftime('%Y.%m%d', date()) - strftime('%Y.%m%d', date_inscription) as int)" |
Modified src/include/lib/Garradin/Entities/Users/DynamicField.php from [fea81bfd05] to [9f15fe5ba6].
︙ | ︙ | |||
140 141 142 143 144 145 146 | const SYSTEM_FIELDS = [ 'id' => '?int', 'id_category' => 'int', 'pgp_key' => '?string', 'otp_secret' => '?string', 'date_login' => '?DateTime', | < | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | const SYSTEM_FIELDS = [ 'id' => '?int', 'id_category' => 'int', 'pgp_key' => '?string', 'otp_secret' => '?string', 'date_login' => '?DateTime', ]; public function delete(): bool { if (!$this->canDelete()) { throw new ValidationException('Ce champ est utilisé en interne, il n\'est pas possible de le supprimer'); } |
︙ | ︙ |
Modified src/include/lib/Garradin/Template.php from [718990ebdc] to [69ecefeb35].
︙ | ︙ | |||
826 827 828 829 830 831 832 833 834 835 836 837 838 839 | elseif ($field->system & $field::NUMBER && $context == 'new') { $params['default'] = DB::getInstance()->firstColumn(sprintf('SELECT MAX(%s) + 1 FROM %s;', $key, User::TABLE)); $params['required'] = false; } elseif ($type == 'number') { $params['step'] = 'any'; } $out = self::formInput($params); if ($context != 'edit' && $field->system & $field::LOGIN) { $out .= '<dd class="help"><small>(Sera utilisé comme identifiant de connexion si le membre a le droit de se connecter.)</small></dd>'; } | > > > > | 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 | elseif ($field->system & $field::NUMBER && $context == 'new') { $params['default'] = DB::getInstance()->firstColumn(sprintf('SELECT MAX(%s) + 1 FROM %s;', $key, User::TABLE)); $params['required'] = false; } elseif ($type == 'number') { $params['step'] = 'any'; } if ($field->default_value == '=NOW') { $params['default'] = new \DateTime; } $out = self::formInput($params); if ($context != 'edit' && $field->system & $field::LOGIN) { $out .= '<dd class="help"><small>(Sera utilisé comme identifiant de connexion si le membre a le droit de se connecter.)</small></dd>'; } |
︙ | ︙ |
Modified src/include/lib/Garradin/Users/DynamicFields.php from [a6c147d5c6] to [44b3bafce3].
︙ | ︙ | |||
349 350 351 352 353 354 355 | $presets = parse_ini_file(self::PRESETS_FILE, true); $i = 0; $self = new self(false); $fields = [ 'date_connexion' => 'date_login', | | | 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | $presets = parse_ini_file(self::PRESETS_FILE, true); $i = 0; $self = new self(false); $fields = [ 'date_connexion' => 'date_login', 'date_inscription' => 'date_inscription', 'clef_pgp' => 'pgp_key', 'secret_otp' => 'otp_secret', 'id_category' => 'id_category', ]; $defaults = [ 'help' => null, |
︙ | ︙ | |||
416 417 418 419 420 421 422 423 424 425 426 427 428 429 | $field->set('read_access', $data['private'] ? $field::ACCESS_ADMIN : $field::ACCESS_USER); $field->set('write_access', $data['editable'] ? $field::ACCESS_ADMIN : $field::ACCESS_USER); $field->set('required', (bool) $data['mandatory']); $field->set('list_table', (bool) $data['list_row']); $field->set('sort_order', $i++); $self->add($field); } self::$_instance = $self; $self->createTable(); $self->createIndexes(); $self->copy('membres', User::TABLE, $fields); | > > > > | 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | $field->set('read_access', $data['private'] ? $field::ACCESS_ADMIN : $field::ACCESS_USER); $field->set('write_access', $data['editable'] ? $field::ACCESS_ADMIN : $field::ACCESS_USER); $field->set('required', (bool) $data['mandatory']); $field->set('list_table', (bool) $data['list_row']); $field->set('sort_order', $i++); $self->add($field); } // Create date_inscription $field = $self->addFieldFromPreset('date_inscription'); $self->add($field); self::$_instance = $self; $self->createTable(); $self->createIndexes(); $self->copy('membres', User::TABLE, $fields); |
︙ | ︙ | |||
507 508 509 510 511 512 513 | $db = DB::getInstance(); // Champs à créer $create = [ 'id INTEGER PRIMARY KEY, -- Numéro attribué automatiquement', 'id_category INTEGER NOT NULL REFERENCES users_categories(id),', 'date_login TEXT NULL CHECK (date_login IS NULL OR datetime(date_login) = date_login), -- Date de dernière connexion', | < | 511 512 513 514 515 516 517 518 519 520 521 522 523 524 | $db = DB::getInstance(); // Champs à créer $create = [ 'id INTEGER PRIMARY KEY, -- Numéro attribué automatiquement', 'id_category INTEGER NOT NULL REFERENCES users_categories(id),', 'date_login TEXT NULL CHECK (date_login IS NULL OR datetime(date_login) = date_login), -- Date de dernière connexion', 'otp_secret TEXT NULL, -- Code secret pour TOTP', 'pgp_key TEXT NULL, -- Clé publique PGP' ]; end($this->_fields); $last_one = key($this->_fields); |
︙ | ︙ |
Modified src/templates/users/details.tpl from [67897bfc54] to [69de06f64e].
︙ | ︙ | |||
51 52 53 54 55 56 57 | {/if} </dl> <aside class="describe"> <dl class="describe"> <dt>Catégorie</dt> <dd>{$category.name} <span class="permissions">{display_permissions permissions=$category}</span></dd> | < < | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | {/if} </dl> <aside class="describe"> <dl class="describe"> <dt>Catégorie</dt> <dd>{$category.name} <span class="permissions">{display_permissions permissions=$category}</span></dd> <dt>Dernière connexion</dt> <dd>{if empty($user.date_login)}Jamais{else}{$user.date_login|date_short:true}{/if}</dd> <dt>Mot de passe</dt> <dd> {if empty($user.password)} Pas de mot de passe configuré {else} |
︙ | ︙ |