From ce692f7c09f1532a3658f6a55e27711680948fb9 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 12 Jul 2022 16:55:37 +0200 Subject: [PATCH 1/3] added Condition: ContactHasActivity --- .../Condition/ContactHasActivity.php | 72 +++++++++++++++++++ Civi/ActionProvider/Provider.php | 1 + 2 files changed, 73 insertions(+) create mode 100644 Civi/ActionProvider/Condition/ContactHasActivity.php diff --git a/Civi/ActionProvider/Condition/ContactHasActivity.php b/Civi/ActionProvider/Condition/ContactHasActivity.php new file mode 100644 index 0000000..2dad173 --- /dev/null +++ b/Civi/ActionProvider/Condition/ContactHasActivity.php @@ -0,0 +1,72 @@ + + * @license AGPL-3.0 + */ + +namespace Civi\ActionProvider\Condition; + +use \Civi\ActionProvider\Parameter\ParameterBagInterface; +use \Civi\ActionProvider\Parameter\ParameterBag; +use Civi\ActionProvider\Parameter\Specification; +use \Civi\ActionProvider\Parameter\SpecificationBag; + +use CRM_ActionProvider_ExtensionUtil as E; + +class ContactHasActivity extends AbstractCondition { + + /** + * @param \Civi\ActionProvider\Parameter\ParameterBagInterface $parameterBag + * + * @return bool + */ + public function isConditionValid(ParameterBagInterface $parameterBag) { + try { + $activity_count = civicrm_api3('Activity', 'getcount', array('activity_type_id' => $this->configuration->getParameter('activity_type_id'), 'contact_id' => $parameterBag->getParameter('contact_id'))); + } catch (\CiviCRM_API3_Exception $ex) { + // Do nothing + } + + if ($activity_count > 0) { + return true; + } + + return false; + } + + /** + * Returns the specification of the configuration options for the actual condition. + * + * @return SpecificationBag + */ + public function getConfigurationSpecification() { + $optionGroupId = civicrm_api3('OptionGroup', 'getSingle', array('name' => 'activity_type')); + $activityTypesApi = civicrm_api3('OptionValue', 'get', array('option_group_id' => $optionGroupId['id'], 'options' => array('limit' => 0))); + $activityTypes = array(); + foreach($activityTypesApi['values'] as $activityType) { + $activityTypes[$activityType['value']] = $activityType['label']; + } + return new SpecificationBag(array( + new Specification('activity_type_id', 'Integer', E::ts('Activity Type'), true, null, null, $activityTypes, FALSE), + )); + } + + /** + * Returns the specification of the parameters of the actual condition. + * + * @return SpecificationBag + */ + public function getParameterSpecification() { + return new SpecificationBag(array( + new Specification('contact_id', 'Integer', E::ts('Contact ID')), + )); + } + + /** + * Returns the human readable title of this condition + */ + public function getTitle() { + return E::ts('Contact has activity'); + } + +} diff --git a/Civi/ActionProvider/Provider.php b/Civi/ActionProvider/Provider.php index 537d006..8c7f930 100644 --- a/Civi/ActionProvider/Provider.php +++ b/Civi/ActionProvider/Provider.php @@ -86,6 +86,7 @@ class Provider { new \Civi\ActionProvider\Condition\ArrayParameterContains(), new \Civi\ActionProvider\Condition\ContactHasSubtype(), new \Civi\ActionProvider\Condition\ContactHasTag(), + new \Civi\ActionProvider\Condition\ContactHasActivity(), ); foreach($conditions as $condition) { -- GitLab From 1e91dbb30e8c945b389d7913a9f0f9e3a106606d Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 12 Jul 2022 16:57:38 +0200 Subject: [PATCH 2/3] added Condition: ContactHasActivity --- Civi/ActionProvider/Condition/ContactHasActivity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Civi/ActionProvider/Condition/ContactHasActivity.php b/Civi/ActionProvider/Condition/ContactHasActivity.php index 2dad173..53c889d 100644 --- a/Civi/ActionProvider/Condition/ContactHasActivity.php +++ b/Civi/ActionProvider/Condition/ContactHasActivity.php @@ -1,6 +1,6 @@ + * @author Jaap Jansma , J. Margraf * @license AGPL-3.0 */ -- GitLab From 7fb9a0b2de13c05498a6b1f57327d1ae4f8fc059 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 12 Jul 2022 17:08:27 +0200 Subject: [PATCH 3/3] update Condition ContactHasActivity: added inverse option --- .../Condition/ContactHasActivity.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Civi/ActionProvider/Condition/ContactHasActivity.php b/Civi/ActionProvider/Condition/ContactHasActivity.php index 53c889d..7e2976b 100644 --- a/Civi/ActionProvider/Condition/ContactHasActivity.php +++ b/Civi/ActionProvider/Condition/ContactHasActivity.php @@ -27,10 +27,16 @@ class ContactHasActivity extends AbstractCondition { // Do nothing } + $inverse = $this->configuration->getParameter('inverse'); if ($activity_count > 0) { + if($inverse){ + return false; + } return true; } - + if($inverse){ + return true; + } return false; } @@ -47,6 +53,7 @@ class ContactHasActivity extends AbstractCondition { $activityTypes[$activityType['value']] = $activityType['label']; } return new SpecificationBag(array( + new Specification('inverse', 'String', E::ts('Condition'), false, null, null, $this->getInvertOptions()), new Specification('activity_type_id', 'Integer', E::ts('Activity Type'), true, null, null, $activityTypes, FALSE), )); } @@ -69,4 +76,12 @@ class ContactHasActivity extends AbstractCondition { return E::ts('Contact has activity'); } + + protected function getInvertOptions() { + return [ + 0 => E::ts("contact has activity"), + 1 => E::ts("contact has no activity"), + ]; + } + } -- GitLab