public function updateContextScriptVMIInstances($script, $vmiinstances) { $changes = array("deleted" => array(), "added" => array()); //remove associated vmi instances which are no longer wanted $m = new Default_Model_VMIinstanceContextScripts(); $f1 = new Default_Model_VMIinstanceContextScriptsFilter(); $f2 = new Default_Model_VMIinstanceContextScriptsFilter(); $f1->contextscriptid->numequals($script->id); $f2->vmiinstanceid->notin($vmiinstances); $m->filter->chain($f1->chain($f2, "AND"), "AND"); if (count($m->items) > 0) { foreach ($m->items as $item) { $changes["deleted"][] = $item->vmiinstanceid; $item->getMapper()->delete($item); } } //collect already existing vmi instances $excludeids = array(); $m = new Default_Model_VMIinstanceContextScripts(); $f1 = new Default_Model_VMIinstanceContextScriptsFilter(); $f2 = new Default_Model_VMIinstanceContextScriptsFilter(); $f1->contextscriptid->numequals($script->id); $f2->vmiinstanceid->in($vmiinstances); $m->filter->chain($f1->chain($f2, "AND"), "AND"); if (count($m->items) > 0) { foreach ($m->items as $item) { if ($item->hasContext()) { $excludeids[] = "" . $item->vmiinstanceid; } } } //get final vmi instances to be included for ($i = 0; $i < count($vmiinstances); $i += 1) { if (in_array($vmiinstances[$i], $excludeids) === false) { $item = new Default_Model_VMIinstanceContextScript(); $item->vmiinstanceid = $vmiinstances[$i]; $item->contextscriptid = $script->id; if ($this->user !== null) { $item->addedbyID = $this->user->id; } $item->save(); $changes["added"][] = $vmiinstances[$i]; } } if (count($changes["added"]) > 0 || count($changes["deleted"]) > 0) { return true; } return false; }
private static function relateScriptToVmiInstance($vmiinstanceid, $script, $user, $usetransaction = true) { self::clearVmiInstances($vmiinstanceid, $user->id, $usetransaction); //Associate context script entry with vmi instance $vmiscript = new Default_Model_VMIinstanceContextScript(); $vmiscript->vmiinstanceid = $vmiinstanceid; $vmiscript->contextscriptid = $script->id; $vmiscript->addedbyid = $user->id; $vmiscript->save(); return $script; }
public function syncContextScript($contextscriptxml, $vmiinstance) { if ($contextscriptxml === null || !$vmiinstance) { return true; } $contextscript = null; $url = $contextscriptxml->xpath("./virtualization:url"); if (count($url) > 0) { $url = trim(strval($url[0])); } else { $url = ""; } $id = trim(strval($contextscriptxml->attributes()->id)); if ($id === "" || is_numeric($id) && intval($id) <= 0) { if ($url !== "") { $contextscript = $this->findContextScriptByUrl($url); } if ($contextscript === null) { $contextscript = $this->createContextScript($contextscriptxml); if ($contextscript !== false && is_string($contextscript) === false) { VapplianceStorage::store($contextscript, $vmiinstance->id, $contextscript->addedbyid); } } } else { if (is_numeric($id) && intval($id) > 0) { $contextscript = $this->getContextScriptById($id); } } if (is_string($contextscript)) { return $contextscript; } try { //Clear existing relations to context scripts for this vmi instance $vmiinstacnescripts = new Default_Model_VMIinstanceContextScripts(); $vmiinstacnescripts->filter->vmiinstanceid = $vmiinstance->id; if (count($vmiinstacnescripts->items) > 0) { foreach ($vmiinstacnescripts->items as $item) { $vmiinstacnescripts->remove($item); } } //create new relation to context scripts for this vmi instance $user = $this->_parent->getUser(); $vmiinstancecontextscript = new Default_Model_VMIinstanceContextScript(); $vmiinstancecontextscript->vmiinstanceid = $vmiinstance->id; $vmiinstancecontextscript->contextscriptid = $contextscript->id; if ($user) { $vmiinstancecontextscript->addedbyid = $user->id; } $vmiinstancecontextscript->save(); } catch (Exception $ex) { return $ex->getMessage(); } return true; }