Skip to content
Snippets Groups Projects
Commit 24779862 authored by Erik Hommel's avatar Erik Hommel
Browse files
parents 776c0e31 192495b9
No related branches found
No related tags found
No related merge requests found
Showing
with 1061 additions and 11 deletions
......@@ -15,7 +15,7 @@ abstract class CRM_Civirules_EventData_EventData {
*/
private $entity_data = array();
protected $contact_id;
protected $contact_id = 0;
/**
* @var CRM_Civirules_Event
......@@ -48,7 +48,14 @@ abstract class CRM_Civirules_EventData_EventData {
* @return int
*/
public function getContactId() {
return $this->contact_id;
if ($this->contact_id) {
return $this->contact_id;
}
foreach($this->entity_data as $data) {
if (!empty($data['contact_id'])) {
return $data['contact_id'];
}
}
}
/**
......@@ -73,7 +80,7 @@ abstract class CRM_Civirules_EventData_EventData {
* @param array $data
* @return CRM_CiviRules_Engine_EventData
*/
protected function setEntityData($entity, $data) {
public function setEntityData($entity, $data) {
if (is_array($data)) {
$this->entity_data[$entity] = $data;
}
......
......@@ -76,6 +76,8 @@ class CRM_Civirules_Form_RuleCondition extends CRM_Core_Form {
*/
protected function createFormElements() {
$this->add('hidden', 'rule_id');
$this->add('hidden', 'rid');
$this->add('hidden', 'action');
/*
* add select list only if it is not the first condition
*/
......@@ -92,6 +94,8 @@ class CRM_Civirules_Form_RuleCondition extends CRM_Core_Form {
public function setDefaultValues() {
$defaults['rule_id'] = $this->ruleId;
$defaults['rid'] = $this->ruleId;
$defaults['action'] = 'add';
return $defaults;
}
......
......@@ -3,14 +3,14 @@
return array (
0 =>
array (
'name' => 'Civirules:Action.GroupContact',
'name' => 'Civirules:Action.ActivityAdd',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'GroupContact',
'label' => 'Add contact to group',
'class_name' => 'CRM_CivirulesActions_GroupContact',
'name' => 'ActivityAdd',
'label' => 'Add activity to contact',
'class_name' => 'CRM_CivirulesActions_Activity_Add',
'is_active' => 1
),
),
......
<?php
/**
* Class for CiviRules Group Contact Action
* Class for CiviRules adding an activity to the system
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api {
class CRM_CivirulesActions_Activity_Add extends CRM_CivirulesActions_Generic_Api {
/**
* Returns an array with parameters used for processing an action
......@@ -17,8 +17,15 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
* @access protected
*/
protected function alterApiParameters($params, CRM_Civirules_EventData_EventData $eventData) {
$action_params = $this->getActionParameters();
//this function could be overridden in subclasses to alter parameters to meet certain criteraia
$params['contact_id'] = $eventData->getContactId();
$params['target_contact_id'] = $eventData->getContactId();
$params['activity_type_id'] = $action_params['activity_type_id'];
$params['status_id'] = $action_params['status_id'];
$params['subject'] = $action_params['subject'];
if (!empty($action_params['assignee_contact_id'])) {
$params['assignee_contact_id'] = $action_params['assignee_contact_id'];
}
return $params;
}
......@@ -32,7 +39,7 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
* @access public
*/
public function getExtraDataInputUrl($ruleActionId) {
return CRM_Utils_System::url('civicrm/civirule/form/action/groupcontact', 'rule_action_id='.$ruleActionId);
return CRM_Utils_System::url('civicrm/civirule/form/action/activity', 'rule_action_id='.$ruleActionId);
}
/**
......@@ -43,12 +50,24 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
* @access public
*/
public function userFriendlyConditionParams() {
$return = '';
$params = $this->getActionParameters();
if (!empty($params['group_id'])) {
$group = civicrm_api3('Group', 'getvalue', array('return' => 'title', 'id' => $params['group_id']));
return ts('Add contact to group %1', array(1 => $group));
$type = CRM_Core_OptionGroup::getLabel('activity_type', $params['activity_type_id']);
$return .= ts("Type: %1", array(1 => $type));
$status = CRM_Core_OptionGroup::getLabel('activity_status', $params['status_id']);
$return .= "<br>";
$return .= ts("Status: %1", array(1 => $status));
$subject = $params['subject'];
if (!empty($subject)) {
$return .= "<br>";
$return .= ts("Subject: %1", array(1 => $subject));
}
if (!empty($params['assignee_contact_id'])) {
$assignee = civicrm_api3('Contact', 'getvalue', array('return' => 'display_name', 'id' => $params['assignee_contact_id']));
$return .= '<br>';
$return .= ts("Assignee: %1", array(1 => $assignee));
}
return '';
return $return;
}
/**
......@@ -58,7 +77,7 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
* @access protected
*/
protected function getApiEntity() {
return 'GroupContact';
return 'Activity';
}
/**
......@@ -70,4 +89,5 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
protected function getApiAction() {
return 'create';
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact Action Form
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_Activity_Form_Activity extends CRM_CivirulesActions_Form_Form {
/**
* Overridden parent method to build the form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_action_id');
$this->add('select', 'activity_type_id', ts('Activity type'), array('' => ts('-- please select --')) + CRM_Core_OptionGroup::values('activity_type'), true);
$this->add('select', 'status_id', ts('Status'), array('' => ts('-- please select --')) + CRM_Core_OptionGroup::values('activity_status'), true);
$this->add('text', 'subject', ts('Subject'));
$data = unserialize($this->ruleAction->action_params);
$assignees = array();
if (!empty($data['assignee_contact_id'])) {
$assignees[] = $data['assignee_contact_id'];
}
$this->assign('selectedContacts', implode(",", $assignees));
CRM_Contact_Form_NewContact::buildQuickForm($this);
$this->addButtons(array(
array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
array('type' => 'cancel', 'name' => ts('Cancel'))));
}
/**
* Overridden parent method to set default values
*
* @return array $defaultValues
* @access public
*/
public function setDefaultValues() {
$defaultValues = parent::setDefaultValues();
$data = unserialize($this->ruleAction->action_params);
if (!empty($data['activity_type_id'])) {
$defaultValues['activity_type_id'] = $data['activity_type_id'];
}
if (!empty($data['status_id'])) {
$defaultValues['status_id'] = $data['status_id'];
}
if (!empty($data['subject'])) {
$defaultValues['subject'] = $data['subject'];
}
return $defaultValues;
}
/**
* Overridden parent method to process form data after submitting
*
* @access public
*/
public function postProcess() {
$data['activity_type_id'] = $this->_submitValues['activity_type_id'];
$data['status_id'] = $this->_submitValues['status_id'];
$data['subject'] = $this->_submitValues['subject'];
$data['assignee_contact_id'] = false;
$values = $this->controller->exportValues();
if (!empty($values['contact_select_id']) && count($values['contact_select_id']) > 0) {
$data['assignee_contact_id'] = reset($values['contact_select_id']);
}
$this->ruleAction->action_params = serialize($data);
$this->ruleAction->save();
parent::postProcess();
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact add action.
*
* Adds a user to a group
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_GroupContact_Add extends CRM_CivirulesActions_GroupContact_GroupContact {
/**
* Method to set the api action
*
* @return string
* @access protected
*/
protected function getApiAction() {
return 'create';
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact Action Form
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_GroupContact_Form_GroupId extends CRM_CivirulesActions_Form_Form {
/**
* Method to get groups
*
* @return array
* @access protected
*/
protected function getGroups() {
return CRM_Contact_BAO_GroupContact::getGroupList();
}
/**
* Overridden parent method to build the form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_action_id');
$this->add('select', 'type', ts('Single/Multiple'), array(
0 => ts('Select a single a group'),
1 => ts('Select multiple groups'),
));
$this->add('select', 'group_id', ts('Group'), array('' => ts('-- please select --')) + $this->getGroups());
$multiGroup = $this->addElement('advmultiselect', 'group_ids', ts('Groups'), $this->getGroups(), array(
'size' => 5,
'style' => 'width:250px',
'class' => 'advmultiselect',
));
$multiGroup->setButtonAttributes('add', array('value' => ts('Add >>')));
$multiGroup->setButtonAttributes('remove', array('value' => ts('<< Remove')));
$this->addButtons(array(
array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
array('type' => 'cancel', 'name' => ts('Cancel'))));
}
public function addRules() {
$this->addFormRule(array('CRM_CivirulesActions_GroupContact_Form_GroupId', 'validateGroupFields'));
}
/**
* Function to validate value of rule action form
*
* @param array $fields
* @return array|bool
* @access public
* @static
*/
static function validateGroupFields($fields) {
$errors = array();
if ($fields['type'] == 0 && empty($fields['group_id'])) {
$errors['group_id'] = ts('You have to select at least one group');
} elseif ($fields['type'] == 1 && (empty($fields['group_ids']) || count($fields['group_ids']) < 1)) {
$errors['group_ids'] = ts('You have to select at least one group');
}
if (count($errors)) {
return $errors;
}
return true;
}
/**
* Overridden parent method to set default values
*
* @return array $defaultValues
* @access public
*/
public function setDefaultValues() {
$defaultValues = parent::setDefaultValues();
$data = unserialize($this->ruleAction->action_params);
if (!empty($data['group_id'])) {
$defaultValues['group_id'] = $data['group_id'];
}
if (!empty($data['group_ids'])) {
$defaultValues['group_ids'] = $data['group_ids'];
}
if (!empty($data['group_ids']) && is_array($data['group_ids'])) {
$defaultValues['type'] = 1;
}
return $defaultValues;
}
/**
* Overridden parent method to process form data after submitting
*
* @access public
*/
public function postProcess() {
$data['group_id'] = false;
$data['group_ids'] = false;
if ($this->_submitValues['type'] == 0) {
$data['group_id'] = $this->_submitValues['group_id'];
} else {
$data['group_ids'] = $this->_submitValues['group_ids'];
}
$this->ruleAction->action_params = serialize($data);
$this->ruleAction->save();
parent::postProcess();
}
}
\ No newline at end of file
<?php
return array (
0 =>
array (
'name' => 'Civirules:Action.GroupContactAdd',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'GroupContactAdd',
'label' => 'Add contact to group',
'class_name' => 'CRM_CivirulesActions_GroupContact_Add',
'is_active' => 1
),
),
1 => array (
'name' => 'Civirules:Action.GroupContactRemove',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'GroupContactRemove',
'label' => 'Remove contact from group',
'class_name' => 'CRM_CivirulesActions_GroupContact_Remove',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact Action
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
abstract class CRM_CivirulesActions_GroupContact_GroupContact extends CRM_CivirulesActions_Generic_Api {
/**
* Returns an array with parameters used for processing an action
*
* @param array $params
* @param object CRM_Civirules_EventData_EventData $eventData
* @return array $params
* @access protected
*/
protected function alterApiParameters($params, CRM_Civirules_EventData_EventData $eventData) {
//this function could be overridden in subclasses to alter parameters to meet certain criteraia
$params['contact_id'] = $eventData->getContactId();
return $params;
}
/**
* Process the action
*
* @param CRM_Civirules_EventData_EventData $eventData
* @access public
*/
public function processAction(CRM_Civirules_EventData_EventData $eventData) {
$entity = $this->getApiEntity();
$action = $this->getApiAction();
$action_params = $this->getActionParameters();
$group_ids = array();
if (!empty($action_params['group_id'])) {
$group_ids = array($action_params['group_id']);
} elseif (!empty($action_params['group_ids']) && is_array($action_params['group_ids'])) {
$group_ids = $action_params['group_ids'];
}
foreach($group_ids as $group_id) {
$params = array();
$params['group_id'] = $group_id;
//alter parameters by subclass
$params = $this->alterApiParameters($params, $eventData);
//execute the action
$this->executeApiAction($entity, $action, $params);
}
}
/**
* Returns a redirect url to extra data input from the user after adding a action
*
* Return false if you do not need extra data input
*
* @param int $ruleActionId
* @return bool|string
* @access public
*/
public function getExtraDataInputUrl($ruleActionId) {
return CRM_Utils_System::url('civicrm/civirule/form/action/groupcontact', 'rule_action_id='.$ruleActionId);
}
/**
* Returns a user friendly text explaining the condition params
* e.g. 'Older than 65'
*
* @return string
* @access public
*/
public function userFriendlyConditionParams() {
$params = $this->getActionParameters();
if (!empty($params['group_id'])) {
$group = civicrm_api3('Group', 'getvalue', array('return' => 'title', 'id' => $params['group_id']));
return $this->getActionLabel($group);
} elseif (!empty($params['group_ids']) && is_array($params['group_ids'])) {
$groups = '';
foreach($params['group_ids'] as $group_id) {
$group = civicrm_api3('Group', 'getvalue', array('return' => 'title', 'id' => $group_id));
if (strlen($groups)) {
$groups .= ', ';
}
$groups .= $group;
}
return $this->getActionLabel($groups);
}
return '';
}
/**
* Method to set the api entity
*
* @return string
* @access protected
*/
protected function getApiEntity() {
return 'GroupContact';
}
protected function getActionLabel($group) {
switch ($this->getApiAction()) {
case 'create':
return ts('Add contact to group(s): %1', array(
1 => $group
));
break;
case 'delete':
return ts('Remove contact from group(s): %1', array(
1 => $group
));
break;
}
return '';
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact remove action.
*
* Adds a user to a group
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_GroupContact_Remove extends CRM_CivirulesActions_GroupContact_GroupContact {
/**
* Method to set the api action
*
* @return string
* @access protected
*/
protected function getApiAction() {
return 'delete';
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact add action.
*
* Adds a user to a group
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_Tag_Add extends CRM_CivirulesActions_Tag_Tag {
/**
* Method to set the api action
*
* @return string
* @access protected
*/
protected function getApiAction() {
return 'create';
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact Action Form
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_Tag_Form_TagId extends CRM_CivirulesActions_Form_Form {
/**
* Method to get groups
*
* @return array
* @access protected
*/
protected function getTags() {
$tags = CRM_Core_BAO_Tag::getTagsUsedFor();
$options = array();
foreach($tags as $tag_id => $tag) {
$options[$tag_id] = $tag;
}
return $options;
}
/**
* Overridden parent method to build the form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_action_id');
$this->add('select', 'type', ts('Single/Multiple'), array(
0 => ts('Select one tag'),
1 => ts('Select multiple tags'),
));
$this->add('select', 'tag_id', ts('Tag'), array('' => ts('-- please select --')) + $this->getTags());
$multiGroup = $this->addElement('advmultiselect', 'tag_ids', ts('Tags'), $this->getTags(), array(
'size' => 5,
'style' => 'width:250px',
'class' => 'advmultiselect',
));
$multiGroup->setButtonAttributes('add', array('value' => ts('Add >>')));
$multiGroup->setButtonAttributes('remove', array('value' => ts('<< Remove')));
$this->addButtons(array(
array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
array('type' => 'cancel', 'name' => ts('Cancel'))));
}
public function addRules() {
$this->addFormRule(array('CRM_CivirulesActions_Tag_Form_TagId', 'validateTagFields'));
}
/**
* Function to validate value of rule action form
*
* @param array $fields
* @return array|bool
* @access public
* @static
*/
static function validateTagFields($fields) {
$errors = array();
if ($fields['type'] == 0 && empty($fields['tag_id'])) {
$errors['tag_id'] = ts('You have to select at least one tag');
} elseif ($fields['type'] == 1 && (empty($fields['tag_ids']) || count($fields['tag_ids']) < 1)) {
$errors['tag_ids'] = ts('You have to select at least one tag');
}
if (count($errors)) {
return $errors;
}
return true;
}
/**
* Overridden parent method to set default values
*
* @return array $defaultValues
* @access public
*/
public function setDefaultValues() {
$defaultValues = parent::setDefaultValues();
$data = unserialize($this->ruleAction->action_params);
if (!empty($data['tag_id'])) {
$defaultValues['tag_id'] = $data['tag_id'];
}
if (!empty($data['tag_ids'])) {
$defaultValues['tag_ids'] = $data['tag_ids'];
}
if (!empty($data['tag_ids']) && is_array($data['tag_ids'])) {
$defaultValues['type'] = 1;
}
return $defaultValues;
}
/**
* Overridden parent method to process form data after submitting
*
* @access public
*/
public function postProcess() {
$data['tag_id'] = false;
$data['tag_ids'] = false;
if ($this->_submitValues['type'] == 0) {
$data['tag_id'] = $this->_submitValues['tag_id'];
} else {
$data['tag_ids'] = $this->_submitValues['tag_ids'];
}
$this->ruleAction->action_params = serialize($data);
$this->ruleAction->save();
parent::postProcess();
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Group Contact add action.
*
* Adds a user to a group
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesActions_Tag_Remove extends CRM_CivirulesActions_Tag_Tag {
/**
* Method to set the api action
*
* @return string
* @access protected
*/
protected function getApiAction() {
return 'delete';
}
}
\ No newline at end of file
<?php
return array (
0 =>
array (
'name' => 'Civirules:Action.TagAdd',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'TagAdd',
'label' => 'Add tag to contact',
'class_name' => 'CRM_CivirulesActions_Tag_Add',
'is_active' => 1
),
),
1 => array (
'name' => 'Civirules:Action.TagRemove',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'TagRemove',
'label' => 'Remove tag from contact',
'class_name' => 'CRM_CivirulesActions_Tag_Remove',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
/**
* Class for CiviRules setting/unsetting a contact tag
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
abstract class CRM_CivirulesActions_Tag_Tag extends CRM_CivirulesActions_Generic_Api {
/**
* Returns an array with parameters used for processing an action
*
* @param array $params
* @param object CRM_Civirules_EventData_EventData $eventData
* @return array $params
* @access protected
*/
protected function alterApiParameters($params, CRM_Civirules_EventData_EventData $eventData) {
//this function could be overridden in subclasses to alter parameters to meet certain criteraia
$params['entity_id'] = $eventData->getContactId();
$params['entity_table'] = 'civicrm_contact';
return $params;
}
/**
* Process the action
*
* @param CRM_Civirules_EventData_EventData $eventData
* @access public
*/
public function processAction(CRM_Civirules_EventData_EventData $eventData) {
$entity = $this->getApiEntity();
$action = $this->getApiAction();
$action_params = $this->getActionParameters();
$tag_ids = array();
if (!empty($action_params['tag_id'])) {
$tag_ids = array($action_params['tag_id']);
} elseif (!empty($action_params['tag_ids']) && is_array($action_params['tag_ids'])) {
$tag_ids = $action_params['tag_ids'];
}
foreach($tag_ids as $tag_id) {
$params = array();
$params['tag_id'] = $tag_id;
//alter parameters by subclass
$params = $this->alterApiParameters($params, $eventData);
//execute the action
$this->executeApiAction($entity, $action, $params);
}
}
/**
* Returns a redirect url to extra data input from the user after adding a action
*
* Return false if you do not need extra data input
*
* @param int $ruleActionId
* @return bool|string
* @access public
*/
public function getExtraDataInputUrl($ruleActionId) {
return CRM_Utils_System::url('civicrm/civirule/form/action/tag', 'rule_action_id='.$ruleActionId);
}
/**
* Returns a user friendly text explaining the condition params
* e.g. 'Older than 65'
*
* @return string
* @access public
*/
public function userFriendlyConditionParams() {
$params = $this->getActionParameters();
if (!empty($params['tag_id'])) {
$tag = civicrm_api3('Tag', 'getvalue', array('return' => 'name', 'id' => $params['tag_id']));
return $this->getActionLabel($tag);
} elseif (!empty($params['tag_ids']) && is_array($params['tag_ids'])) {
$tags = '';
foreach($params['tag_ids'] as $tag_id) {
$tag = civicrm_api3('Tag', 'getvalue', array('return' => 'name', 'id' => $tag_id));
if (strlen($tags)) {
$tags .= ', ';
}
$tags .= $tag;
}
return $this->getActionLabel($tags);
}
return '';
}
/**
* Method to set the api entity
*
* @return string
* @access protected
*/
protected function getApiEntity() {
return 'EntityTag';
}
protected function getActionLabel($tag) {
switch ($this->getApiAction()) {
case 'create':
return ts('Add tag (%1) to contact', array(
1 => $tag
));
break;
case 'delete':
return ts('Remove tag (%1) from contact', array(
1 => $tag
));
break;
}
return '';
}
}
\ No newline at end of file
<?php
return array (
0 =>
array (
'name' => 'Civirules:Condition.ActivityRecordType',
'entity' => 'CiviRuleCondition',
'params' =>
array (
'version' => 3,
'name' => 'contact_activity_record_type',
'label' => 'Activity Contact record type',
'class_name' => 'CRM_CivirulesConditions_Activity_RecordType',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
/**
* Class for CiviRule Condition Activity Record Type
*
* @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
* @license http://www.gnu.org/licenses/agpl-3.0.html
*/
class CRM_CivirulesConditions_Activity_RecordType extends CRM_Civirules_Condition {
private $conditionParams = array();
public function getExtraDataInputUrl($ruleConditionId) {
return CRM_Utils_System::url('civicrm/civirule/form/condition/activity_contact_record_type/',
'rule_condition_id='.$ruleConditionId);
}
/**
* Method to set the Rule Condition data
*
* @param array $ruleCondition
* @access public
*/
public function setRuleConditionData($ruleCondition) {
parent::setRuleConditionData($ruleCondition);
$this->conditionParams = array();
if (!empty($this->ruleCondition['condition_params'])) {
$this->conditionParams = unserialize($this->ruleCondition['condition_params']);
}
}
/**
* Method to check if the condition is valid, will check if the contact
* has an activity of the selected type
*
* @param object CRM_Civirules_EventData_EventData $eventData
* @return bool
* @access public
*/
public function isConditionValid(CRM_Civirules_EventData_EventData $eventData) {
$ActivityContact = $eventData->getEntityData('ActivityContact');
if ($ActivityContact['record_type_id'] == $this->conditionParams['record_type_id']) {
return true;
}
return false;
}
/**
* Returns a user friendly text explaining the condition params
* e.g. 'Older than 65'
*
* @return string
* @access public
*/
public function userFriendlyConditionParams() {
$activityTypeLabel = CRM_Civirules_Utils::getOptionLabelWithValue(CRM_Civirules_Utils::getOptionGroupIdWithName('activity_contacts'), $this->conditionParams['record_type_id']);
if (!empty($activityTypeLabel)) {
return ts('For all %1', array(1 => $activityTypeLabel));
}
return '';
}
/**
* Returns an array with required entity names
*
* @return array
* @access public
*/
public function requiredEntities() {
return array(
'Activity',
'ActivityContact'
);
}
}
\ No newline at end of file
......@@ -38,14 +38,9 @@ class CRM_CivirulesConditions_Activity_Type extends CRM_Civirules_Condition {
* @access public
*/
public function isConditionValid(CRM_Civirules_EventData_EventData $eventData) {
$contactId = $eventData->getContactId();
$activities = civicrm_api3('Activity', 'Get', array('contact_id' => $contactId));
if ($activities['count'] > 0) {
foreach ($activities['values'] as $activityId => $activity) {
if ($activity['activity_type_id'] == $this->conditionParams['activity_type_id']) {
return true;
}
}
$activity = $eventData->getEntityData('Activity');
if ($activity['activity_type_id'] == $this->conditionParams['activity_type_id']) {
return true;
}
return false;
}
......@@ -64,4 +59,16 @@ class CRM_CivirulesConditions_Activity_Type extends CRM_Civirules_Condition {
}
return '';
}
/**
* Returns an array with required entity names
*
* @return array
* @access public
*/
public function requiredEntities() {
return array(
'Activity'
);
}
}
\ No newline at end of file
<?php
require_once 'CRM/Core/Form.php';
/**
* Class for CiviRules Group Contact Action Form
* Form controller class
*
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license AGPL-3.0
* @see http://wiki.civicrm.org/confluence/display/CRMDOC43/QuickForm+Reference
*/
class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesActions_Form_Form {
/**
* Method to get groups
*
* @return array
* @access protected
*/
protected function getGroups() {
return array('' => ts('-- please select --')) + CRM_Contact_BAO_GroupContact::getGroupList();
}
class CRM_CivirulesConditions_Form_Activity_RecordType extends CRM_CivirulesConditions_Form_Form {
/**
* Overridden parent method to build the form
......@@ -25,13 +15,17 @@ class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesAction
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_action_id');
$this->add('hidden', 'rule_condition_id');
$this->add('select', 'group_id', ts('Group'), $this->getGroups(), true);
$activityTypeList = array('- select -') + CRM_Core_OptionGroup::values('activity_contacts');
asort($activityTypeList);
$this->add('select', 'record_type_id', 'Contact record Type', $activityTypeList, true);
$this->addButtons(array(
array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
array('type' => 'cancel', 'name' => ts('Cancel'))));
parent::buildQuickForm();
}
/**
......@@ -42,22 +36,23 @@ class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesAction
*/
public function setDefaultValues() {
$defaultValues = parent::setDefaultValues();
$data = unserialize($this->ruleAction->action_params);
if (!empty($data['group_id'])) {
$defaultValues['group_id'] = $data['group_id'];
$data = unserialize($this->ruleCondition->condition_params);
if (!empty($data['record_type_id'])) {
$defaultValues['record_type_id'] = $data['record_type_id'];
}
return $defaultValues;
}
/**
* Overridden parent method to process form data after submitting
* Overridden parent method to perform data processing once form is submitted
*
* @access public
*/
public function postProcess() {
$data['group_id'] = $this->_submitValues['group_id'];
$this->ruleAction->action_params = serialize($data);
$this->ruleAction->save();
$data['record_type_id'] = $this->_submitValues['record_type_id'];
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
parent::postProcess();
}
......
<?php
class CRM_CivirulesPostEvent_Activity extends CRM_Civirules_Event_Post {
/**
* Returns an array of entities on which the event reacts
*
* @return CRM_Civirules_EventData_EntityDefinition
*/
protected function reactOnEntity() {
return new CRM_Civirules_EventData_EntityDefinition($this->objectName, $this->objectName, $this->getDaoClassName(), 'Activity');
}
/**
* Return the name of the DAO Class. If a dao class does not exist return an empty value
*
* @return string
*/
protected function getDaoClassName() {
return 'CRM_Activity_DAO_Activity';
}
/**
* Trigger a rule for this event
*
* @param $op
* @param $objectName
* @param $objectId
* @param $objectRef
*/
public function triggerEvent($op, $objectName, $objectId, $objectRef) {
$eventData = $this->getEventDataFromPost($op, $objectName, $objectId, $objectRef);
//trigger for activity event for every source_contact_id, target_contact_id and assignee_contact_id
$activityContact = new CRM_Activity_BAO_ActivityContact();
$activityContact->activity_id = $objectId;
$activityContact->find();
while($activityContact->fetch()) {
$data = array();
CRM_Core_DAO::storeValues($activityContact, $data);
$eventData->setEntityData('ActivityContact', $data);
CRM_Civirules_Engine::triggerRule($this, clone $eventData);
}
}
/**
* Returns an array of additional entities provided in this event
*
* @return array of CRM_Civirules_EventData_EntityDefinition
*/
protected function getAdditionalEntities() {
return array(
new CRM_Civirules_EventData_EntityDefinition('ActivityContact', 'ActivityContact', 'CRM_Activity_DAO_ActivityContact' , 'ActivityContact'),
);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment