/**
* Execute the actions as defined in the rule
*
* @see Rule::executeActions()
*
* @param $output the result of the actions
* @param $params the parameters
*
* @return the fields modified
**/
function executeActions($output, $params)
{
global $CFG_GLPI;
$entity = '';
$right = '';
$is_recursive = 0;
$continue = true;
$output_src = $output;
if (count($this->actions)) {
$entity = array();
foreach ($this->actions as $action) {
switch ($action->fields["action_type"]) {
case "assign":
switch ($action->fields["field"]) {
case "entities_id":
$entity[] = $action->fields["value"];
break;
case "profiles_id":
$right = $action->fields["value"];
break;
case "is_recursive":
$is_recursive = $action->fields["value"];
break;
case "is_active":
$output["is_active"] = $action->fields["value"];
break;
case "_ignore_user_import":
$continue = false;
$output_src["_stop_import"] = true;
break;
}
// switch (field)
break;
case "regex_result":
switch ($action->fields["field"]) {
case "_affect_entity_by_dn":
case "_affect_entity_by_tag":
case "_affect_entity_by_domain":
case "_affect_entity_by_completename":
foreach ($this->regex_results as $regex_result) {
$res = RuleAction::getRegexResultById($action->fields["value"], $regex_result);
if ($res != null) {
switch ($action->fields["field"]) {
case "_affect_entity_by_dn":
$entity_found = Entity::getEntityIDByDN(addslashes($res));
break;
case "_affect_entity_by_tag":
$entity_found = Entity::getEntityIDByTag(addslashes($res));
break;
case "_affect_entity_by_domain":
$entity_found = Entity::getEntityIDByDomain(addslashes($res));
break;
case "_affect_entity_by_completename":
$res = Toolbox::unclean_cross_side_scripting_deep($res);
$entity_found = Entity::getEntityIDByCompletename(addslashes($res));
break;
default:
$entity_found = -1;
break;
}
//If an entity was found
if ($entity_found > -1) {
$entity[] = $entity_found;
}
}
}
if (!count($entity)) {
//Not entity assigned : action processing must be stopped for this rule
$continue = false;
}
break;
}
// switch (field)
break;
}
// switch (action_type)
}
// foreach (action)
}
// count (actions)
if ($continue) {
//Nothing to be returned by the function :
//Store in session the entity and/or right
if (count($entity)) {
if ($right != '') {
foreach ($entity as $entID) {
$output["_ldap_rules"]["rules_entities_rights"][] = array($entID, $right, $is_recursive);
}
} else {
foreach ($entity as $entID) {
$output["_ldap_rules"]["rules_entities"][] = array($entID, $is_recursive);
}
}
} else {
if ($right != '') {
$output["_ldap_rules"]["rules_rights"][] = $right;
}
}
return $output;
}
return $output_src;
}