private static function removeRelatedScript($id, $script, $userid, $usetransaction = true) { try { $vmiinstanceid = 0; if ($usetransaction) { db()->beginTransaction(); } $vmis = new Default_Model_VMIinstanceContextScripts(); $vmis->filter->id->numequals($id); if (count($vmis->items) > 0) { $vmi = $vmis->items[0]; if ($vmi->contextscriptid === $script->id) { $vmiinstanceid = $vmi->vmiinstanceid; $vmis->remove($vmi); } } $vmis = new Default_Model_VMIinstanceContextScripts(); $vmis->filter->contextscriptid->numequals($script->id); if (count($vmis->items) === 0) { //The script is not longer used. Remove it. $scripts = new Default_Model_ContextScripts(); $scripts->filter->id->numequals($script->id); if (count($scripts->items) > 0) { VapplianceStorage::remove($scripts->items[0], $vmiinstanceid, $userid); $scripts->remove($scripts->items[0]); } } if ($usetransaction) { db()->commit(); } } catch (Exception $ex) { if ($usetransaction) { db()->rollback(); return $ex->getMessage(); } else { throw $ex; } } return true; }
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; }