Skip to content
Snippets Groups Projects
Commit db902c98 authored by jaapjansma's avatar jaapjansma
Browse files
parents 604f5e06 f59a8934
No related branches found
No related tags found
No related merge requests found
Showing
with 451 additions and 7 deletions
......@@ -31,7 +31,7 @@ class CRM_Civirules_Upgrader extends CRM_Civirules_Upgrader_Base {
CRM_Core_DAO::executeQuery("
INSERT INTO civirule_event (name, label, object_name, op, cron, class_name, created_date, created_user_id)
VALUES
('groupmembership', 'Daily trigger for group members', NULL, NULL, 1, 'CRM_CivirulesCronEvent_GroupMembership', CURDATE(), 1);
('groupmembership', 'Daily trigger for group members', NULL, NULL, 1, 'CRM_CivirulesCronTrigger_GroupMembership', CURDATE(), 1);
");
}
return true;
......
......@@ -211,6 +211,48 @@ class CRM_Civirules_Utils {
return $return;
}
/**
* Method to get the membership types
* @param bool $onlyActive
* @return array
*/
public static function getMembershipTypes($onlyActive = TRUE) {
$return = array();
if ($onlyActive) {
$params = array('is_active' => 1);
} else {
$params = array();
}
try {
$membershipTypes = civicrm_api3("MembershipType", "Get", $params);
foreach ($membershipTypes['values'] as $membershipType) {
$return[$membershipType['id']] = $membershipType['name'];
}
} catch (CiviCRM_API3_Exception $ex) {}
return $return;
}
/**
* Method to get the membership status
* @param bool $onlyActive
* @return array
*/
public static function getMembershipStatus($onlyActive = TRUE) {
$return = array();
if ($onlyActive) {
$params = array('is_active' => 1);
} else {
$params = array();
}
try {
$apiMembershipStatus = civicrm_api3("MembershipStatus", "Get", $params);
foreach ($apiMembershipStatus['values'] as $membershipStatus) {
$return[$membershipStatus['id']] = $membershipStatus['name'];
}
} catch (CiviCRM_API3_Exception $ex) {}
return $return;
}
/**
* Method to check if the incoming date is later than today
*
......
......@@ -40,7 +40,11 @@ class CRM_CivirulesConditions_Form_FieldValueComparison extends CRM_CivirulesCon
$fields = call_user_func(array($className, 'fields'));
foreach ($fields as $field) {
$fieldKey = $key . $field['name'];
$label = $field['title'];
if (isset($field['title'])) {
$label = $field['title'];
} else {
$label = "";
}
if (empty($label)) {
$label = $field['name'];
}
......
<?php
/**
* Class for CiviRules Condition Membership Status Form
*
* @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesConditions_Form_Membership_Status extends CRM_CivirulesConditions_Form_Form {
/**
* Overridden parent method to build form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_condition_id');
$membershipStatus = CRM_Civirules_Utils::getMembershipStatus();
$membershipStatus[0] = ts('- select -');
asort($membershipStatus);
$this->add('select', 'membership_status_id', ts('Membership Status'), $membershipStatus, true);
$this->add('select', 'operator', ts('Operator'), array('equals', 'is not equal to'), 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['membership_status_id'])) {
$defaultValues['membership_status_id'] = $data['membership_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['membership_status_id'] = $this->_submitValues['membership_status_id'];
$data['operator'] = $this->_submitValues['operator'];
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
parent::postProcess();
}
}
\ No newline at end of file
<?php
/**
* Class for CiviRules Condition Membership Type Form
*
* @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesConditions_Form_Membership_Type extends CRM_CivirulesConditions_Form_Form {
/**
* Overridden parent method to build form
*
* @access public
*/
public function buildQuickForm() {
$this->add('hidden', 'rule_condition_id');
$membershipTypes = CRM_Civirules_Utils::getMembershipTypes();
$membershipTypes[0] = ts('- select -');
asort($membershipTypes);
$this->add('select', 'membership_type_id', ts('Membership Type'), $membershipTypes, true);
$this->add('select', 'operator', ts('Operator'), array('equals', 'is not equal to'), 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['membership_type_id'])) {
$defaultValues['membership_type_id'] = $data['membership_type_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['membership_type_id'] = $this->_submitValues['membership_type_id'];
$data['operator'] = $this->_submitValues['operator'];
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
parent::postProcess();
}
}
\ No newline at end of file
......@@ -117,7 +117,9 @@ class CRM_CivirulesConditions_Form_ValueComparison extends CRM_CivirulesConditio
$data = unserialize($this->ruleCondition->condition_params);
$data['operator'] = $this->_submitValues['operator'];
$data['value'] = $this->_submitValues['value'];
$data['multi_value'] = explode("\r\n", $this->_submitValues['multi_value']);
if (isset($this->_submitValues['multi_value'])) {
$data['multi_value'] = explode("\r\n", $this->_submitValues['multi_value']);
}
$this->ruleCondition->condition_params = serialize($data);
$this->ruleCondition->save();
......
<?php
return array (
0 =>
array (
'name' => 'Civirules:Condition.MembershipStatus',
'entity' => 'CiviRuleCondition',
'params' =>
array (
'version' => 3,
'name' => 'membership_status',
'label' => 'Membership status is (not) ...',
'class_name' => 'CRM_CivirulesConditions_Membership_Status',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
class CRM_CivirulesConditions_Membership_Status 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;
$membership = $triggerData->getEntityData('Membership');
CRM_Core_Error::debug('membership', $membership);
switch ($this->conditionParams['operator']) {
case 0:
if ($membership['status_id'] == $this->conditionParams['membership_status_id']) {
$isConditionValid = TRUE;
}
break;
case 1:
if ($membership['status_id'] != $this->conditionParams['membership_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/membershipstatus', '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() {
try {
$apiMembershipStatus = civicrm_api3('MembershipStatus', 'Get', array('is_active' => 1));
$operator = null;
if ($this->conditionParams['operator'] == 0) {
$operator = 'equals';
}
if ($this->conditionParams['operator'] == 1) {
$operator = 'is not equal to';
}
foreach ($apiMembershipStatus['values'] as $membershipStatus) {
if ($membershipStatus['id'] == $this->conditionParams['membership_status_id']) {
return "Membership Status ".$operator." ".$membershipStatus['name'];
}
}
} catch (CiviCRM_API3_Exception $ex) {}
return '';
}
/**
* Returns an array with required entity names
*
* @return array
* @access public
*/
public function requiredEntities() {
return array('Membership');
}
}
\ No newline at end of file
<?php
return array (
0 =>
array (
'name' => 'Civirules:Condition.MembershipType',
'entity' => 'CiviRuleCondition',
'params' =>
array (
'version' => 3,
'name' => 'membership_type',
'label' => 'Membership type is (not) ...',
'class_name' => 'CRM_CivirulesConditions_Membership_Type',
'is_active' => 1
),
),
);
\ No newline at end of file
<?php
class CRM_CivirulesConditions_Membership_Type 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;
$membership = $triggerData->getEntityData('Membership');
switch ($this->conditionParams['operator']) {
case 0:
if ($membership['membership_type_id'] == $this->conditionParams['membership_type_id']) {
$isConditionValid = TRUE;
}
break;
case 1:
if ($membership['membership_type_id'] != $this->conditionParams['membership_type_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/membershiptype', '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() {
try {
$membershipTypes = civicrm_api3('MembershipType', 'Get', array('is_active' => 1));
$operator = null;
if ($this->conditionParams['operator'] == 0) {
$operator = 'equals';
}
if ($this->conditionParams['operator'] == 1) {
$operator = 'is not equal to';
}
foreach ($membershipTypes['values'] as $membershipType) {
if ($membershipType['id'] == $this->conditionParams['membership_type_id']) {
return "Membership Type ".$operator." ".$membershipType['name'];
}
}
} catch (CiviCRM_API3_Exception $ex) {}
return '';
}
/**
* Returns an array with required entity names
*
* @return array
* @access public
*/
public function requiredEntities() {
return array('Membership');
}
}
\ No newline at end of file
......@@ -87,6 +87,6 @@ VALUES
INSERT INTO civirule_trigger (name, label, object_name, op, cron, class_name, created_date, created_user_id)
VALUES
('birthday', 'Individual has birthday', null, null, 1, 'CRM_CivirulesCronEvent_Birthday', CURDATE(), 1),
('groupmembership', 'Daily trigger for group members', null, null, 1, 'CRM_CivirulesCronEvent_GroupMembership', CURDATE(), 1);
('birthday', 'Individual has birthday', null, null, 1, 'CRM_CivirulesCronTrigger_Birthday', CURDATE(), 1),
('groupmembership', 'Daily trigger for group members', null, null, 1, 'CRM_CivirulesCronTrigger_GroupMembership', CURDATE(), 1);
......@@ -2,4 +2,5 @@ UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_Activity' W
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_Contact' WHERE `class_name` = 'CRM_CivirulesPostEvent_Contact';
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_GroupContact' WHERE `class_name` = 'CRM_CivirulesPostEvent_GroupContact';
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_Birthday' WHERE `class_name` = 'CRM_CivirulesCronEvent_Birthday';
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronTrigger_GroupMembership';
\ No newline at end of file
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronTrigger_GroupMembership';
UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronEvent_GroupMembership';
<h3>{$ruleConditionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-membership_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.membership_status_id.label}</div>
<div class="content">{$form.membership_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
<h3>{$ruleConditionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-membership_type">
<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.membership_type_id.label}</div>
<div class="content">{$form.membership_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
......@@ -38,7 +38,7 @@
{/literal}
{if ($field_options)}
{foreach from=$field_options item=value key=key}
options[options.length] = {'key': key, 'value': value};
{literal}options[options.length] = {'key': key, 'value': value};{/literal}
{/foreach}
{/if}
{if ($is_field_option_multiple)}
......
......@@ -56,6 +56,20 @@
<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>
<title>membership type</title>
<access_arguments>access CiviCRM</access_arguments>
<access_arguments>administer CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/membershipstatus</path>
<page_callback>CRM_CivirulesConditions_Form_Membership_Status</page_callback>
<title>membership status</title>
<access_arguments>access CiviCRM</access_arguments>
<access_arguments>administer CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/contribution_totalcontributedamount</path>
<page_callback>CRM_CivirulesConditions_Form_Contribution_TotalContributedAmount</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