diff --git a/CHANGELOG.md b/CHANGELOG.md index 998498808388bb31e00401d19f2e17337e674810..0218775d5c2781bd0b75354212395fcc2844ccdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Version 1.99 (not yet released) ------------ * Use CiviCRM "standard" labels for address fields. Add missing Supplemental Address 2, 3 fields by !77 +* Added action: Create or update grant. Version 1.98 ------------ diff --git a/Civi/ActionProvider/Action/Grant/Actions.php b/Civi/ActionProvider/Action/Grant/Actions.php new file mode 100644 index 0000000000000000000000000000000000000000..6270ad6ce04093f778e13c823dac6eea3419e9b1 --- /dev/null +++ b/Civi/ActionProvider/Action/Grant/Actions.php @@ -0,0 +1,27 @@ + + * @license AGPL-3.0 + */ + +namespace Civi\ActionProvider\Action\Grant; + +use Civi\ActionProvider\Action\AbstractAction; +use Civi\ActionProvider\Provider; +use CRM_ActionProvider_ExtensionUtil as E; + +class Actions { + + /** + * Load activity actions + * + * @param \Civi\ActionProvider\Provider $provider + */ + public static function loadActions(Provider $provider) { + $provider->addAction('CreateOrUpdateGrant', '\Civi\ActionProvider\Action\Grant\CreateOrUpdateGrant',E::ts('Grant: Create or update') , array( + AbstractAction::SINGLE_CONTACT_ACTION_TAG, + AbstractAction::DATA_MANIPULATION_TAG, + )); + } + +} diff --git a/Civi/ActionProvider/Action/Grant/CreateOrUpdateGrant.php b/Civi/ActionProvider/Action/Grant/CreateOrUpdateGrant.php new file mode 100644 index 0000000000000000000000000000000000000000..3dff18f46bab58a9c341baa140cf2d6ce8b6a05d --- /dev/null +++ b/Civi/ActionProvider/Action/Grant/CreateOrUpdateGrant.php @@ -0,0 +1,99 @@ +execute(); + foreach ($fields as $field) { + $fkEntity = NULL; + if (in_array($field['input_type'], ['Select', 'CheckBox', 'EntityRef']) && $field['fk_entity']) { + $fkEntity = $field['fk_entity']; + } + if ($field['name'] === 'id') { + $specs[] = new Specification($field['name'], $field['data_type'], E::ts($field['title']), FALSE, $field['default_value'], $fkEntity); + } + else { + $specs[] = new Specification($field['name'], $field['data_type'], E::ts($field['title']), $field['required'], $field['default_value'], $fkEntity); + } + } + $specBag = new SpecificationBag($specs); + + $config = ConfigContainer::getInstance(); + $customGroups = $config->getCustomGroupsForEntity('Grant'); + foreach ($customGroups as $customGroup) { + if (!empty($customGroup['is_active'])) { + $specBag->addSpecification(CustomField::getSpecForCustomGroup($customGroup['id'], $customGroup['name'], $customGroup['title'])); + } + } + + return $specBag; + } + + /** + * Returns the specification of the output parameters of this action. + * + * This function could be overriden by child classes. + * + * @return \Civi\ActionProvider\Parameter\SpecificationBag + */ + public function getOutputSpecification() { + return new SpecificationBag(array( + new Specification('id', 'Integer', E::ts('Grant ID')), + )); + } + + /** + * Run the action + * + * @param ParameterInterface $parameters + * The parameters to this action. + * @param \Civi\ActionProvider\Parameter\ParameterBagInterface $output + * The parameters this action can send back + * @return void + */ + protected function doAction(ParameterBagInterface $parameters, ParameterBagInterface $output) { + $apiParams = CustomField::getCustomFieldsApiParameter($parameters, $this->getParameterSpecification()); + $fields = \Civi\Api4\Grant::getFields()->execute()->column('name'); + foreach ($fields as $fieldName) { + if ($parameters->doesParameterExists($fieldName)) { + $apiParams[$fieldName] = $parameters->getParameter($fieldName); + } + } + + // Create or Update the event through an API call. + try { + $result = civicrm_api3('Grant', 'create', $apiParams); + $output->setParameter('id', $result['id']); + } + catch (Exception $e) { + throw new \Civi\ActionProvider\Exception\ExecutionException(E::ts('Could not update or create a grant.')); + } + } + +} diff --git a/Civi/ActionProvider/Provider.php b/Civi/ActionProvider/Provider.php index 537d006d742674af2b4140a12a1d5843c2ffebc3..dc9d67986dd8ab27f7d30d482edca0486824d137 100644 --- a/Civi/ActionProvider/Provider.php +++ b/Civi/ActionProvider/Provider.php @@ -72,6 +72,7 @@ class Provider { Action\Generic\Actions::loadActions($this); Action\Tag\Actions::loadActions($this); Action\SMS\Actions::loadActions($this); + Action\Grant\Actions::loadActions($this); $conditions = array( new \Civi\ActionProvider\Condition\ParameterIsEmpty(),