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

refactored group contact action so that it is more generic and also added a...

refactored group contact action so that it is more generic and also added a contact remove from group action
parent 01ce9434
No related branches found
No related tags found
No related merge requests found
<?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
......@@ -6,7 +6,7 @@
* @license AGPL-3.0
*/
class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesActions_Form_Form {
class CRM_CivirulesActions_GroupContact_Form_GroupId extends CRM_CivirulesActions_Form_Form {
/**
......@@ -27,13 +27,53 @@ class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesAction
public function buildQuickForm() {
$this->add('hidden', 'rule_action_id');
$this->add('select', 'group_id', ts('Group'), $this->getGroups(), true);
$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'), $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
*
......@@ -46,6 +86,12 @@ class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesAction
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;
}
......@@ -55,7 +101,14 @@ class CRM_CivirulesActions_Form_GroupContact_GroupId extends CRM_CivirulesAction
* @access public
*/
public function postProcess() {
$data['group_id'] = $this->_submitValues['group_id'];
$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();
......
......@@ -3,15 +3,27 @@
return array (
0 =>
array (
'name' => 'Civirules:Action.GroupContact',
'name' => 'Civirules:Action.GroupContactAdd',
'entity' => 'CiviRuleAction',
'params' =>
array (
'version' => 3,
'name' => 'GroupContact',
'name' => 'GroupContactAdd',
'label' => 'Add contact to group',
'class_name' => 'CRM_CivirulesActions_GroupContact',
'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
......@@ -6,7 +6,7 @@
* @license AGPL-3.0
*/
class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api {
abstract class CRM_CivirulesActions_GroupContact_GroupContact extends CRM_CivirulesActions_Generic_Api {
/**
* Returns an array with parameters used for processing an action
......@@ -22,6 +22,35 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
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
*
......@@ -47,6 +76,16 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
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));
} 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 ts('Add contact to groups %1', array(1 => $groups));
}
return '';
}
......@@ -61,13 +100,4 @@ class CRM_CivirulesActions_GroupContact extends CRM_CivirulesActions_Generic_Api
return '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 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
<h3>{$ruleActionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_action-block-group-contact">
<div class="crm-section">
<div class="label">{$form.group_id.label}</div>
<div class="content">{$form.group_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>{$ruleActionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_action-block-group-contact">
<div class="crm-section">
<div class="label">{$form.type.label}</div>
<div class="content">{$form.type.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section groups-single">
<div class="label">{$form.group_id.label}</div>
<div class="content">{$form.group_id.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section groups-multiple" style="display: none;">
<div class="label">{$form.group_ids.label}</div>
<div class="content">{$form.group_ids.html}</div>
<div class="clear"></div>
</div>
</div>
<div class="crm-submit-buttons">
{include file="CRM/common/formButtons.tpl" location="bottom"}
</div>
{literal}
<script type="text/javascript">
cj(function() {
cj('select#type').change(triggerTypeChange);
triggerTypeChange();
});
function triggerTypeChange() {
cj('.groups-multiple').css('display', 'none');
cj('.groups-single').css('display', 'none');
var val = cj('#type').val();
if (val == 0 ) {
cj('.groups-single').css('display', 'block');
} else {
cj('.groups-multiple').css('display', 'block');
}
}
</script>
{/literal}
\ No newline at end of file
......@@ -56,7 +56,7 @@
</item>
<item>
<path>civicrm/civirule/form/action/groupcontact</path>
<page_callback>CRM_CivirulesActions_Form_GroupContact_GroupId</page_callback>
<page_callback>CRM_CivirulesActions_GroupContact_Form_GroupId</page_callback>
<title>Group contact</title>
<access_arguments>access CiviCRM</access_arguments>
</item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment