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

refactor of trigger data so it would always include a contact entity and...

refactor of trigger data so it would always include a contact entity and changed the entity tag triggers
parent f77c9bca
Branches
Tags
No related merge requests found
......@@ -70,7 +70,12 @@ abstract class CRM_Civirules_Trigger {
* @return array of CRM_Civirules_TriggerData_EntityDefinition
*/
protected function getAdditionalEntities() {
return array();
$reactOnEntity = $this->reactOnEntity();
$entities = array();
if (strtolower($reactOnEntity->key) != strtolower('Contact')) {
$entities[] = new CRM_Civirules_TriggerData_EntityDefinition('Contact', 'Contact', 'CRM_Contact_DAO_Contact', 'Contact');
}
return $entities;
}
/**
......
......@@ -67,8 +67,20 @@ abstract class CRM_Civirules_TriggerData_TriggerData {
* @return array
*/
public function getEntityData($entity) {
if (isset($this->entity_data[$entity]) && is_array($this->entity_data[$entity])) {
//only lookup entities by their lower case name. Entity is now case insensetive
if (isset($this->entity_data[strtolower($entity)]) && is_array($this->entity_data[strtolower($entity)])) {
return $this->entity_data[strtolower($entity)];
//just for backwards compatibility also check case sensitive entity
} elseif (isset($this->entity_data[$entity]) && is_array($this->entity_data[$entity])) {
return $this->entity_data[$entity];
} elseif (strtolower($entity) == strtolower('Contact') && $this->getContactId()) {
$contactObject = new CRM_Contact_BAO_Contact();
$contactObject->id = $this->getContactId();
$contactData = array();
if ($contactObject->find(true)) {
CRM_Core_DAO::storeValues($contactObject, $contactData);
}
return $contactData;
}
return array();
}
......@@ -82,7 +94,7 @@ abstract class CRM_Civirules_TriggerData_TriggerData {
*/
public function setEntityData($entity, $data) {
if (is_array($data)) {
$this->entity_data[$entity] = $data;
$this->entity_data[strtolower($entity)] = $data;
}
return $this;
}
......
......@@ -75,4 +75,16 @@ class CRM_Civirules_Upgrader extends CRM_Civirules_Upgrader_Base {
$this->executeSqlFile('sql/update_1003.sql');
return true;
}
/**
* Executes upgrade 1004
*
* Changes the class for entity triggers
*
* @return bool
*/
public function upgrade_1004() {
CRM_Core_DAO::executeQuery("update `civirule_trigger` set `class_name` = 'CRM_CivirulesPostTrigger_EntityTag' where `object_name` = 'EntityTag';");
return true;
}
}
\ No newline at end of file
......@@ -16,7 +16,7 @@ class CRM_CivirulesCronTrigger_Birthday extends CRM_Civirules_Trigger_Cron {
* @return CRM_Civirules_TriggerData_EntityDefinition
*/
protected function reactOnEntity() {
return new CRM_Civirules_TriggerData_EntityDefinition(ts('Person'), 'contact', 'CRM_Contact_DAO_Contact', 'contact');
return new CRM_Civirules_TriggerData_EntityDefinition(ts('Person'), 'contact', 'CRM_Contact_DAO_Contact', 'Contact');
}
/**
......
......@@ -39,12 +39,6 @@ class CRM_CivirulesPostTrigger_Activity extends CRM_Civirules_Trigger_Post {
$data = array();
CRM_Core_DAO::storeValues($activityContact, $data);
$triggerData->setEntityData('ActivityContact', $data);
$contactObject = new CRM_Contact_BAO_Contact();
$contactObject->id = $data['contact_id'];
$contactObject->find(true);
$contactData = array();
CRM_Core_DAO::storeValues($contactObject, $contactData);
$triggerData->setEntityData('Contact', $contactData);
CRM_Civirules_Engine::triggerRule($this, clone $triggerData);
}
......@@ -56,10 +50,9 @@ class CRM_CivirulesPostTrigger_Activity extends CRM_Civirules_Trigger_Post {
* @return array of CRM_Civirules_TriggerData_EntityDefinition
*/
protected function getAdditionalEntities() {
return array(
new CRM_Civirules_TriggerData_EntityDefinition('ActivityContact', 'ActivityContact', 'CRM_Activity_DAO_ActivityContact' , 'ActivityContact'),
new CRM_Civirules_TriggerData_EntityDefinition('Contact', 'Contact', 'CRM_Contact_DAO_Contact' , 'Contact'),
);
$entities = parent::getAdditionalEntities();
$entities[] = new CRM_Civirules_TriggerData_EntityDefinition('ActivityContact', 'ActivityContact', 'CRM_Activity_DAO_ActivityContact' , 'ActivityContact');
return $entities;
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ class CRM_CivirulesPostTrigger_Contact extends CRM_Civirules_Trigger_Post {
* @return CRM_Civirules_TriggerData_EntityDefinition
*/
protected function reactOnEntity() {
return new CRM_Civirules_TriggerData_EntityDefinition($this->objectName, $this->objectName, $this->getDaoClassName(), 'contact');
return new CRM_Civirules_TriggerData_EntityDefinition($this->objectName, $this->objectName, $this->getDaoClassName(), 'Contact');
}
/**
......
<?php
class CRM_CivirulesPostTrigger_EntityTag extends CRM_Civirules_Trigger_Post {
/**
* Trigger a rule for this trigger
*
* @param $op
* @param $objectName
* @param $objectId
* @param $objectRef
*/
public function triggerTrigger($op, $objectName, $objectId, $objectRef) {
$entity = CRM_Civirules_Utils_ObjectName::convertToEntity($objectName);
//only execute entity tag for setting or removing tags from contacts
//beceuase we need to know the contact id for the trigger engine
//and we only know this when the tag is on contact level
if (!isset($objectRef['1']) || $objectRef['1'] != 'civicrm_contact') {
return;
}
foreach($objectRef['0'] as $cid) {
$data = array (
'tag_id' => $objectId,
'entity_id' => $cid,
'entity_table' => $objectRef['1'],
'contact_id' => $cid,
);
$triggerData = new CRM_Civirules_TriggerData_Post($entity, $objectId, $data);
CRM_Civirules_Engine::triggerRule($this, $triggerData);
}
}
}
\ 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