function myClone() { $tmparr = cloneArray($this->xmlroot); //$tmparr = $this->xmlroot; $new = new NatRule(); $new->owner = $this->owner; $new->load_from_xml($tmparr); //$new->setName($new->name.'-tmpcloned'); //$new->setName('LOL'); return $new; }
/** * @param SecurityRule|NatRule $rule * @param string $newName * @return SecurityRule|NatRule */ public function cloneRule($rule, $newName = null, $inPostRuleBase = null) { if ($newName !== null) { if (!$this->isRuleNameAvailable($newName)) { derr('this rule name is not available: ' . $newName); } } if ($inPostRuleBase === null) { $inPostRuleBase = $rule->isPostRule(); } /** @var SecurityRule|NatRule|DecryptionRule $newRule */ $newRule = new $this->type($this); $xml = $rule->xmlroot->cloneNode(true); $newRule->load_from_domxml($xml); //trick to avoid name change propagation and errors $newRule->owner = null; // if no name was provided then we need to look for one if ($newName === null || !$this->isRuleNameAvailable($newRule->name())) { $newName = $this->findAvailableName($newRule->name(), ''); $newRule->setName($newName); } // finally add it to the store $this->addRule($newRule, $inPostRuleBase); return $newRule; }