Skip to content

Commit

Permalink
AttributeCollector verify email step
Browse files Browse the repository at this point in the history
  • Loading branch information
Ioannis committed Feb 10, 2025
1 parent 1fa47b4 commit 531cd6a
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@

namespace CoreEnroller\Model\Table;

use App\Lib\Enum\PetitionActionEnum;
use App\Lib\Enum\StatusEnum;
use App\Model\Entity\Petition;
use Cake\Datasource\ConnectionManager;
use Cake\Database\Expression\QueryExpression;
use Cake\Datasource\EntityInterface;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Validation\Validator;
use App\Lib\Enum\PetitionActionEnum;

class AttributeCollectorsTable extends Table {
use \App\Lib\Traits\AutoViewVarsTrait;
Expand Down Expand Up @@ -143,6 +144,28 @@ public function finalize(int $id, \App\Model\Entity\Petition $petition) {
->firstOrFail();

// XXX Should i save the primary name?
// Since we're not modifying $person, it's a bit clearer if we save each entity
// individually than try to save related

$Names = TableRegistry::getTableLocator()->get('Names');

// Get the Primary Name
$primaryName = $Names->primaryName($person->id);

// XXX enforce CoSettings required/permitted fields here?
$name = [
'person_id' => $person->id,
'primary_name' => true,
'type_id' => $cfg->name_type_id
];

foreach(['honorific', 'given', 'middle', 'family', 'suffix'] as $n) {
if(!empty($attributes->$n)) {
$name[$n] = $attributes->$n;
}
}

$Names->saveOrFail($Names->newEntity($name));
// XXX Should i save the email?
return true;
Expand Down Expand Up @@ -267,4 +290,48 @@ public function validationDefault(Validator $validator): Validator {

return $validator;
}

/**
* Obtain the set of Email Addresses known to this plugin that are eligible for
* verification.
*
* @since COmanage Registry v5.1.0
* @param EntityInterface $config Configuration entity for this plugin
* @param int $petitionId Petition ID
* @return array Array of Email Addrsses that are eligible for verification
*/

public function verifiableEmailAddresses(
EntityInterface $config,
int $petitionId
): array {
// First get the Enrollment Attributes for this petition
$vv_enrollment_attributes = $this->EnrollmentAttributes->find('list',
[
'keyField' => 'id',
'valueField' => 'attribute_type'
])->where([
'attribute_collector_id' => $config->id,
'attribute' => 'emailAddress',
'status' => StatusEnum::Active,
])
->order(['ordr' => 'ASC'])
->toArray();

if (empty($vv_enrollment_attributes)) {
return [];
}

$set = $this->EnrollmentAttributes
->PetitionAttributes
->find('list',
[
'keyField' => 'id',
'valueField' => 'value'
])->where(['petition_id' => $petitionId])
->where(fn(QueryExpression $exp, Query $q) => $exp->in('enrollment_attribute_id', array_keys($vv_enrollment_attributes)))
->toArray();

return !empty($set) ? $set : [];
}
}
11 changes: 6 additions & 5 deletions app/plugins/CoreEnroller/src/Model/Table/EmailVerifiersTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,18 @@

namespace CoreEnroller\Model\Table;

use App\Lib\Enum\EnrollmentActorEnum;
use App\Lib\Enum\PetitionStatusEnum;
use App\Lib\Enum\SuspendableStatusEnum;
use App\Lib\Util\StringUtilities;
use App\Model\Entity\Petition;
use Cake\Datasource\ConnectionManager;
use Cake\Datasource\EntityInterface;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Validation\Validator;
use App\Lib\Enum\EnrollmentActorEnum;
use App\Lib\Enum\PetitionStatusEnum;
use App\Lib\Enum\SuspendableStatusEnum;
use App\Lib\Util\StringUtilities;
use App\Model\Entity\Petition;
use CoreEnroller\Lib\Enum\VerificationModeEnum;
use CoreEnroller\Model\Entity\EmailVerifier;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
$this->Time->nice($pv->verification->verification_time, $vv_tz)
]) ?>
<?php else: ?>
<span class="mr-1 badge bg-warning unverified"><?= __d('field','unverified') ?></span>?>
<span class="mr-1 badge bg-warning unverified"><?= __d('field','unverified') ?></span>
<?php endif; ?>
</li>
<?php endforeach; ?>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,21 @@

$vv_pa = $PetitionAcceptances->find()->where(['petition_id' => $vv_obj->id])->first();

if(!empty($vv_pa)) {
if($vv_pa['accepted']) {
print __d('core_enroller', 'result.InvitationAccepters.accepted', [$vv_pa['modified']]);
} else {
print __d('core_enroller', 'result.InvitationAccepters.declined', [$vv_pa['modified']]);
}
} else {
print __d('core_enroller', 'result.InvitationAccepters.none');
}
?>

<ul>
<li>
<?php
if(!empty($vv_pa)) {
if($vv_pa['accepted']) {
print __d('core_enroller', 'result.InvitationAccepters.accepted', [$vv_pa['modified']]);
} else {
print __d('core_enroller', 'result.InvitationAccepters.declined', [$vv_pa['modified']]);
}
} else {
print __d('core_enroller', 'result.InvitationAccepters.none');
}
?>
</li>
</ul>

0 comments on commit 531cd6a

Please sign in to comment.