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

Added condition for case status is (not) one of.

parent 86869be6
No related branches found
No related tags found
No related merge requests found
<?php
/**
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license http://www.gnu.org/licenses/agpl-3.0.html
*/
return array (
0 =>
array (
'name' => 'Civirules:Condition.Case.CaseStatus',
'entity' => 'CiviRuleCondition',
'params' =>
array (
'version' => 3,
'name' => 'case_case_status',
'label' => 'Case status is (not) one of',
'class_name' => 'CRM_CivirulesConditions_Case_CaseStatus',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
/**
* @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
* @license http://www.gnu.org/licenses/agpl-3.0.html
*/
class CRM_CivirulesConditions_Case_CaseStatus extends CRM_Civirules_Condition {
private $conditionParams = array();
/**
* 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 determine if the condition is valid
*
* @param CRM_Civirules_TriggerData_TriggerData $triggerData
* @return bool
*/
public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData) {
$isConditionValid = FALSE;
$case = $triggerData->getEntityData('Case');
$status_id = $case['status_id'];
switch ($this->conditionParams['operator']) {
case 0:
if (in_array($status_id, $this->conditionParams['status_id'])) {
$isConditionValid = TRUE;
}
break;
case 1:
if (!in_array($status_id, $this->conditionParams['status_id'])) {
$isConditionValid = TRUE;
}
break;
}
return $isConditionValid;
}
/**
* Returns a redirect url to extra data input from the user after adding a condition
*
* Return false if you do not need extra data input
*
* @param int $ruleConditionId
* @return bool|string
* @access public
* @abstract
*/
public function getExtraDataInputUrl($ruleConditionId) {
return CRM_Utils_System::url('civicrm/civirule/form/condition/case/casestatus', 'rule_condition_id='
.$ruleConditionId);
}
/**
* Returns a user friendly text explaining the condition params
* e.g. 'Older than 65'
*
* @return string
* @access public
*/
public function userFriendlyConditionParams() {
$caseStatuses = self::getCaseStatus();
$friendlyText = "";
if ($this->conditionParams['operator'] == 0) {
$friendlyText = 'Case Status is one of: ';
}
if ($this->conditionParams['operator'] == 1) {
$friendlyText = 'Case Status is NOT one of: ';
}
$caseText = array();
foreach ($this->conditionParams['status_id'] as $caseStatusId) {
$caseText[] = $caseStatuses[$caseStatusId];
}
if (!empty($caseText)) {
$friendlyText .= implode(", ", $caseText);
}
return $friendlyText;
}
public static function getCaseStatus() {
$return = array();
$option_group_id = civicrm_api3('OptionGroup', 'getvalue', array('return' => 'id', 'name' => 'case_status'));
$case_statuses = civicrm_api3('OptionValue', 'Get', array('option_group_id' => $option_group_id));
foreach ($case_statuses['values'] as $case_status) {
$return[$case_status['value']] = $case_status['label'];
}
return $return;
}
/**
* Returns an array with required entity names
*
* @return array
* @access public
*/
public function requiredEntities() {
return array('Case');
}
}
\ No newline at end of file
<?php
class CRM_CivirulesConditions_Form_Case_CaseStatus extends CRM_CivirulesConditions_Form_Form {
protected function getCaseStatus() {
return CRM_CivirulesConditions_Case_CaseStatus::getCaseStatus();
}
/**
* Overridden parent method to build form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_condition_id');
$caseStatuses = $this->getCaseStatus();
asort($caseStatuses);
$this->add('select', 'status_id', ts('Case Status(es)'), $caseStatuses, true,
array('id' => 'status_ids', 'multiple' => 'multiple','class' => 'crm-select2'));
$this->add('select', 'operator', ts('Operator'), array('is one of', 'is NOT one of'), true);
$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->ruleCondition->condition_params);
if (!empty($data['status_id'])) {
$defaultValues['status_id'] = $data['status_id'];
}
if (!empty($data['operator'])) {
$defaultValues['operator'] = $data['operator'];
}
return $defaultValues;
}
/**
* Overridden parent method to process form data after submission
*
* @throws Exception when rule condition not found
* @access public
*/
public function postProcess() {
$data['status_id'] = $this->_submitValues['status_id'];
$data['operator'] = $this->_submitValues['operator'];
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
parent::postProcess();
}
}
\ No newline at end of file
<h3>{$ruleConditionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-case_status">
<div class="crm-section">
<div class="label">{$form.operator.label}</div>
<div class="content">{$form.operator.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.status_id.label}</div>
<div class="content">{$form.status_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
......@@ -70,6 +70,13 @@
<access_arguments>access CiviCRM</access_arguments>
<access_arguments>administer CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/case/casestatus</path>
<page_callback>CRM_CivirulesConditions_Form_Case_CaseStatus</page_callback>
<title>case status</title>
<access_arguments>access CiviCRM</access_arguments>
<access_arguments>administer CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/membershiptype</path>
<page_callback>CRM_CivirulesConditions_Form_Membership_Type</page_callback>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment