controller->_destination = CRM_Utils_System::url('civicrm/admin/settings/twingle', 'reset=1'); $this->add( 'text', 'twingle_prefix', E::ts("Twingle ID Prefix") ); $this->add( 'checkbox', 'twingle_use_sepa', E::ts("Use CiviSEPA") ); $this->add( 'select', 'twingle_protect_recurring', E::ts("Protect Recurring Contributions"), CRM_Twingle_Config::getRecurringProtectionOptions() ); $this->add( 'select', 'twingle_protect_recurring_activity_type', E::ts("Activity Type"), $this->getOptionValueList('activity_type', [0]) ); $this->add( 'text', 'twingle_protect_recurring_activity_subject', E::ts("Subject"), ['class' => 'huge'] ); $this->add( 'select', 'twingle_protect_recurring_activity_status', E::ts("Status"), $this->getOptionValueList('activity_status') ); $this->addEntityRef( 'twingle_protect_recurring_activity_assignee', E::ts('Assigned To'), [ 'contact_type' => ['IN' => ['Individual', 'Organization']], 'check_permissions' => 0, ] ); $this->addButtons(array( array ( 'type' => 'submit', 'name' => E::ts('Save'), 'isDefault' => TRUE, ) )); // set defaults foreach (self::$SETTINGS_LIST as $setting) { $this->setDefaults([ $setting => Civi::settings()->get($setting) ]); } parent::buildQuickForm(); } /** * Custom form validation, because the activity creation fields * are only mandatory if activity creation is active * @return bool */ public function validate() { parent::validate(); // if activity creation is active, make sure the fields are set $protection_mode = CRM_Utils_Array::value('twingle_protect_recurring', $this->_submitValues); if ($protection_mode == CRM_Twingle_Config::RCUR_PROTECTION_ACTIVITY) { foreach (['twingle_protect_recurring_activity_type', 'twingle_protect_recurring_activity_subject', 'twingle_protect_recurring_activity_status', 'twingle_protect_recurring_activity_assignee',] as $activity_field) { $current_value = CRM_Utils_Array::value($activity_field, $this->_submitValues); if (empty($current_value)) { $this->_errors[$activity_field] = E::ts("This is required for activity creation"); } } } return (0 == count($this->_errors)); } /** * @inheritdoc */ function postProcess() { $values = $this->exportValues(); // store settings foreach (self::$SETTINGS_LIST as $setting) { Civi::settings()->set($setting, CRM_Utils_Array::value($setting, $values)); } parent::postProcess(); } /** * Get a list of option group items * @param $group_id string group ID or name * @return array list of ID(value) => label * @throws CiviCRM_API3_Exception */ protected function getOptionValueList($group_id, $reserved = [0,1]) { $list = ['' => E::ts("-select-")]; $query = civicrm_api3('OptionValue', 'get', [ 'option_group_id' => $group_id, 'option.limit' => 0, 'is_active' => 1, 'is_reserved' => ['IN' => $reserved], 'return' => 'value,label', ]); foreach ($query['values'] as $value) { $list[$value['value']] = $value['label']; } return $list; } }