add(
'checkbox',
E::SHORT_NAME . '_enable',
label: E::ts('Enable synchronization of mailing lists groups and events'),
extra: ['class' => 'huge'],
);
$this->add(
'checkbox',
E::SHORT_NAME . '_logging',
label: E::ts('Enable logging of synchronization'),
extra: ['class' => 'huge'],
);
$this->add(
'text',
E::SHORT_NAME . '_mlmmj_host',
label: E::ts('mlmmj Host'),
extra: ['class' => 'huge'],
);
$this->add(
'password',
E::SHORT_NAME . '_mlmmj_token',
label: E::ts('mlmmj Token'),
extra: ['class' => 'huge'],
);
$this->add(
'text',
E::SHORT_NAME . '_mlmmj_port',
label: E::ts('mlmmj Port
(default: 443)'),
extra: ['class' => 'huge'],
);
$this->add(
'text',
E::SHORT_NAME . '_dovecot_host',
label: E::ts('Dovecot Host'),
extra: ['class' => 'huge'],
);
$this->add(
'password',
E::SHORT_NAME . '_dovecot_token',
label: E::ts('Dovecot Token'),
extra: ['class' => 'huge'],
);
$this->add(
'text',
E::SHORT_NAME . '_dovecot_port',
label: E::ts('Dovecot Port
(default: 443)'),
extra: ['class' => 'huge'],
);
$this->add(
'select',
E::SHORT_NAME . '_participant_status',
label: E::ts('Participant status'),
attributes: static::getParticipantStatusOptions(),
extra: ['class' => 'crm-select2 huge', 'multiple' => 'multiple']
);
$this->add(
'select',
E::SHORT_NAME . '_ad_contact_tags',
label: E::ts('Tags to restrict contact matching for AD groups'),
attributes: static::getContactTags(),
extra: ['class' => 'crm-select2 huge', 'multiple' => 'multiple']
);
$this->addButtons([
[
'type' => 'submit',
'name' => E::ts('Submit'),
'isDefault' => TRUE,
],
]);
$this->assign('EXTENSION_SHORT_NAME', E::SHORT_NAME);
parent::buildQuickForm();
}
public function setDefaultValues() {
return Settings::get();
}
public function postProcess(): void {
// Set configuration values
Settings::set($this->exportValues());
parent::postProcess();
// Display message
CRM_Utils_System::setUFMessage(E::ts('Settings saved'));
}
public function validate(): bool {
parent::validate();
Settings::validate($this->exportValues(), $this->_errors);
return (0 == count($this->_errors));
}
/**
* Get the participant status options.
*
* @return array
*
* @throws \Civi\API\Exception\UnauthorizedException
* @throws \CRM_Core_Exception
*/
protected static function getParticipantStatusOptions(): array {
$result = \Civi\Api4\ParticipantStatusType::get()
->addSelect('id', 'label')
->addWhere('is_active', '=', TRUE)
->execute()
->getArrayCopy();
return array_column($result, 'label', 'id');
}
/**
* Get available contact tags.
*
* @return array
*
* @throws \CRM_Core_Exception
* @throws \Civi\API\Exception\UnauthorizedException
*/
protected static function getContactTags(): array {
$result = \Civi\Api4\Tag::get()
->addSelect('id', 'label')
->addWhere('used_for', '=', 'civicrm_contact')
->addWhere('is_selectable', '=', TRUE)
->addWhere('is_tagset', '=', FALSE)
->execute()
->getArrayCopy();
return array_column($result, 'label', 'id');
}
}