From 89f15c0c2f097cf11f3f11b84c5676d56f9a7e57 Mon Sep 17 00:00:00 2001 From: benno Date: Thu, 3 Oct 2024 12:35:58 -0400 Subject: [PATCH] Initial implementation of BasicAttributeCollector (CFM-415) (#231) Co-authored-by: Benn Oshrin --- .../Entity/BasicPetitionAttributeSet.php | 49 +++++++ .../Table/BasicPetitionAttributeSetsTable.php | 125 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 app/plugins/CoreEnroller/src/Model/Entity/BasicPetitionAttributeSet.php create mode 100644 app/plugins/CoreEnroller/src/Model/Table/BasicPetitionAttributeSetsTable.php diff --git a/app/plugins/CoreEnroller/src/Model/Entity/BasicPetitionAttributeSet.php b/app/plugins/CoreEnroller/src/Model/Entity/BasicPetitionAttributeSet.php new file mode 100644 index 000000000..b810bd47d --- /dev/null +++ b/app/plugins/CoreEnroller/src/Model/Entity/BasicPetitionAttributeSet.php @@ -0,0 +1,49 @@ + + */ + protected $_accessible = [ + '*' => true, + 'id' => false, + 'slug' => false, + ]; +} diff --git a/app/plugins/CoreEnroller/src/Model/Table/BasicPetitionAttributeSetsTable.php b/app/plugins/CoreEnroller/src/Model/Table/BasicPetitionAttributeSetsTable.php new file mode 100644 index 000000000..d0f7bb5bb --- /dev/null +++ b/app/plugins/CoreEnroller/src/Model/Table/BasicPetitionAttributeSetsTable.php @@ -0,0 +1,125 @@ +addBehavior('Changelog'); + $this->addBehavior('Log'); + $this->addBehavior('Timestamp'); + + $this->setTableType(\App\Lib\Enum\TableTypeEnum::Artifact); + + // Define associations + $this->belongsTo('CoreEnroller.BasicAttributeCollectors'); + $this->belongsTo('Petition'); + + $this->setDisplayField('mail'); + + $this->setPrimaryLink('petition_id'); + $this->setRequiresCO(true); + + $this->setPermissions([ + // Actions that operate over an entity (ie: require an $id) + 'entity' => [ + 'delete' => false, + 'edit' => false, + 'view' => ['platformAdmin', 'coAdmin'] + ], + // Actions that operate over a table (ie: do not require an $id) + 'table' => [ + 'add' => false, + 'index' => ['platformAdmin', 'coAdmin'] + ] + ]); + } + + /** + * Set validation rules. + * + * @since COmanage Registry v5.1.0 + * @param Validator $validator Validator + * @return Validator Validator + */ + + public function validationDefault(Validator $validator): Validator { + $schema = $this->getSchema(); + + $validator->add('petition_id', [ + 'content' => ['rule' => 'isInteger'] + ]); + $validator->notEmptyString('petition_id'); + + $validator->add('basic_attribute_collector_id', [ + 'content' => ['rule' => 'isInteger'] + ]); + $validator->notEmptyString('basic_attribute_collector_id'); + + // For now we allow any attribute to be empty and rely on upsert and the UI to + // enforce requirements. + foreach(['honorific', 'given', 'middle', 'family', 'suffix'] as $f) { + $validator->add($f, [ + 'size' => ['rule' => ['validateMaxLength', ['column' => $schema->getColumn($f)]], + 'provider' => 'table'], + 'filter' => ['rule' => ['validateInput'], + 'provider' => 'table'] + ]); + $validator->allowEmptyString($f); + } + + $this->registerStringValidation($validator, $schema, 'mail', false); + $validator->add('mail', [ + 'content' => ['rule' => ['email'], + 'message' => __d('error', 'input.invalid.email')] + ]); + + return $validator; + } +}