/** * First, creates a new Tracker Object by importing its structure from an XML file, * then, imports it into the Database, before verifying the consistency * * @param string $xml_element the location of the imported file * @param int $groupId the Id of the project to create the tracker * @param string $name the name of the tracker (label) * @param string $description the description of the tracker * @param string $itemname the short name of the tracker * * @throws TrackerFromXmlException * @return the new Tracker, or null if error */ public function createFromXML(SimpleXMLElement $xml_element, $groupId, $name, $description, $itemname) { $tracker = null; if ($this->tracker_factory->validMandatoryInfoOnCreate($name, $description, $itemname, $groupId)) { $this->rng_validator->validate($xml_element, realpath(dirname(TRACKER_BASE_DIR) . '/www/resources/tracker.rng')); $tracker = $this->getInstanceFromXML($xml_element, $groupId, $name, $description, $itemname); //Testing consistency of the imported tracker before updating database if ($tracker->testImport()) { if ($tracker_id = $this->tracker_factory->saveObject($tracker)) { $tracker->setId($tracker_id); } else { throw new TrackerFromXmlException($GLOBALS['Language']->getText('plugin_tracker_admin', 'error_during_creation')); } } else { throw new TrackerFromXmlException('XML file cannot be imported'); } } $this->formelement_factory->clearCaches(); $this->tracker_factory->clearCaches(); return $tracker; }