/** * Duplicate a rule * * @param $ID of the rule to duplicate * * @since version 0.85 * * @return true if all ok **/ function duplicateRule($ID) { //duplicate rule $rulecollection = new self(); $rulecollection->getFromDB($ID); //get ranking $ruletype = $rulecollection->fields['sub_type']; $rule = new $ruletype(); $nextRanking = $rule->getNextRanking(); //Update fields of the new duplicate $rulecollection->fields['name'] = sprintf(__('Copy of %s'), $rulecollection->fields['name']); $rulecollection->fields['is_active'] = 0; $rulecollection->fields['ranking'] = $nextRanking; $rulecollection->fields['uuid'] = Rule::getUuid(); unset($rulecollection->fields['id']); //add new duplicate $newID = $rulecollection->add($rulecollection->fields); $rule = $rulecollection->getRuleClass(); if (!$newID) { return false; } //find and duplicate actions $ruleaction = new RuleAction(get_class($rule)); $actions = $ruleaction->find("`rules_id` = '{$ID}'"); foreach ($actions as $action) { $action['rules_id'] = $newID; unset($action['id']); if (!$ruleaction->add($action)) { return false; } } //find and duplicate criterias $rulecritera = new RuleCriteria(get_class($rule)); $criteria = $rulecritera->find("`rules_id` = '{$ID}'"); foreach ($criteria as $criterion) { $criterion['rules_id'] = $newID; unset($criterion['id']); if (!$rulecritera->add($criterion)) { return false; } } return true; }