diff --git a/Civi/ActionProvider/Condition/ContactHasActivity.php b/Civi/ActionProvider/Condition/ContactHasActivity.php new file mode 100644 index 0000000000000000000000000000000000000000..7e2976b8ee5d1349003228206e66fb7f8ad5997f --- /dev/null +++ b/Civi/ActionProvider/Condition/ContactHasActivity.php @@ -0,0 +1,87 @@ +, J. Margraf + * @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 + } + + $inverse = $this->configuration->getParameter('inverse'); + if ($activity_count > 0) { + if($inverse){ + return false; + } + return true; + } + if($inverse){ + 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('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), + )); + } + + /** + * 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'); + } + + + protected function getInvertOptions() { + return [ + 0 => E::ts("contact has activity"), + 1 => E::ts("contact has no activity"), + ]; + } + +} diff --git a/Civi/ActionProvider/Provider.php b/Civi/ActionProvider/Provider.php index 537d006d742674af2b4140a12a1d5843c2ffebc3..8c7f930555c3da3a9166a18169090ee225ef4038 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) {