Skip to content
Snippets Groups Projects
Commit 16d90c43 authored by jaapjansma's avatar jaapjansma
Browse files

added activity contact record type for activity events

parent 615b5ddf
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
<?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 '';
}
}
\ 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;
}
......
<?php
require_once 'CRM/Core/Form.php';
/**
* Form controller class
*
* @see http://wiki.civicrm.org/confluence/display/CRMDOC43/QuickForm+Reference
*/
class CRM_CivirulesConditions_Form_Activity_RecordType extends CRM_CivirulesConditions_Form_Form {
/**
* Overridden parent method to build the form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_condition_id');
$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();
}
/**
* Overridden parent method to set default values
*
* @return array $defaultValues
* @access public
*/
public function setDefaultValues() {
$defaultValues = parent::setDefaultValues();
$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 perform data processing once form is submitted
*
* @access public
*/
public function postProcess() {
$data['record_type_id'] = $this->_submitValues['record_type_id'];
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
parent::postProcess();
}
}
\ No newline at end of file
<?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);
}
}
}
\ No newline at end of file
INSERT INTO civirule_event (name, label, object_name, op, class_name, created_date, created_user_id)
VALUES
('new_activity', 'Activity is added', 'Activity', 'create', null, CURDATE(), 1),
('changed_activity', 'Activity is changed', 'Activity', 'edit', null, CURDATE(), 1),
('deleted_activity', 'Activity is deleted', 'Activity', 'delete', null, CURDATE(), 1),
('new_activity', 'Activity is added', 'Activity', 'create', 'CRM_CivirulesPostEvent_Activity', CURDATE(), 1),
('changed_activity', 'Activity is changed', 'Activity', 'edit', 'CRM_CivirulesPostEvent_Activity', CURDATE(), 1),
('deleted_activity', 'Activity is deleted', 'Activity', 'delete', 'CRM_CivirulesPostEvent_Activity', CURDATE(), 1),
('new_address', 'Address is added', 'Address', 'create', null, CURDATE(), 1),
('changed_address', 'Address is changed', 'Address', 'edit', null, CURDATE(), 1),
('deleted_address', 'Address is deleted', 'Address', 'delete', null, CURDATE(), 1),
......
<h3>{$ruleConditionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-activity-type">
<div class="crm-section">
<div class="label">{$form.record_type_id.label}</div>
<div class="content">{$form.record_type_id.html}</div>
<div class="clear"></div>
</div>
</div>
<div class="crm-submit-buttons">
{include file="CRM/common/formButtons.tpl" location="bottom"}
</div>
\ No newline at end of file
......@@ -72,4 +72,10 @@
<title>Activity Type</title>
<access_arguments>access CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/activity_contact_record_type</path>
<page_callback>CRM_CivirulesConditions_Form_Activity_RecordType</page_callback>
<title>Activity Contact Record Type</title>
<access_arguments>access CiviCRM</access_arguments>
</item>
</menu>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment