/** * Searches for tags assigned to the systemid to be deleted. * * @param string $strEventName * @param array $arrArguments * * @return bool */ public function handleEvent($strEventName, array $arrArguments) { //unwrap arguments list($strSystemid, $strSourceClass) = $arrArguments; $bitReturn = true; if ($strSourceClass == "class_module_tags_tag" && class_module_system_module::getModuleByName("tags") != null) { //delete matching favorites class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $arrFavorites = class_module_tags_favorite::getAllFavoritesForTag($strSystemid); foreach ($arrFavorites as $objOneFavorite) { if ($strEventName == class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED_LOGICALLY) { $bitReturn = $bitReturn && $objOneFavorite->deleteObject(); } if ($strEventName == class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED) { $bitReturn = $bitReturn && $objOneFavorite->deleteObjectFromDatabase(); $bitReturn = $bitReturn && class_carrier::getInstance()->getObjDB()->_pQuery("DELETE FROM " . _dbprefix_ . "tags_member WHERE tags_tagid=?", array($strSystemid)); } } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); } //delete memberships. Fire a plain query, faster then searching. if ($strEventName == class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED) { $bitReturn = $bitReturn && class_carrier::getInstance()->getObjDB()->_pQuery("DELETE FROM " . _dbprefix_ . "tags_member WHERE tags_systemid=?", array($strSystemid)); } return $bitReturn; }
/** * Fetches a list of records currently marked as deleted * * @return class_model[] */ public static function getDeletedRecords($intStart = null, $intEnd = null) { class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $strQuery = "SELECT system_id FROM " . _dbprefix_ . "system WHERE system_deleted = 1 ORDER BY system_id DESC"; $arrRows = class_carrier::getInstance()->getObjDB()->getPArray($strQuery, array(), $intStart, $intEnd); $arrReturn = array(); foreach ($arrRows as $arrOneRow) { $arrReturn[] = class_objectfactory::getInstance()->getObject($arrOneRow["system_id"]); } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); return $arrReturn; }
/** * Searches for workflows assigned to the systemid to be deleted. * * @param string $strEventName * @param array $arrArguments * * @return bool */ public function handleEvent($strEventName, array $arrArguments) { //unwrap arguments list($strSystemid, $strSourceClass) = $arrArguments; $bitReturn = true; $objORM = new class_orm_objectlist(); $objORM->setObjHandleLogicalDeleted(class_orm_deletedhandling_enum::INCLUDED()); $objORM->addWhereRestriction(new class_orm_objectlist_restriction(" AND workflows_systemid = ?", $strSystemid)); if ($objORM->getObjectCount("class_module_workflows_workflow") == 0) { return true; } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $arrWorkflows = class_module_workflows_workflow::getWorkflowsForSystemid($strSystemid, false); foreach ($arrWorkflows as $objOneWorkflow) { if ($strEventName == class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED_LOGICALLY) { $bitReturn = $bitReturn && $objOneWorkflow->deleteObject(); } if ($strEventName == class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED) { $bitReturn = $bitReturn && $objOneWorkflow->deleteObjectFromDatabase(); } } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); return $bitReturn; }
public function testLogicalDelete() { class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $intCountTotal = class_module_system_aspect::getObjectCount(); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); $intCountActive = class_module_system_aspect::getObjectCount(); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUSIVE()); $intCountDeleted = class_module_system_aspect::getObjectCount(); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); echo "Creating aspect\n"; $objAspect1 = new class_module_system_aspect(); $objAspect1->setStrName("Dummy"); $objAspect1->updateObjectToDb(); $objAspect = new class_module_system_aspect(); $objAspect->setStrName("logical delete"); $objAspect->updateObjectToDb(); $strAspectId = $objAspect->getSystemid(); $this->assertEquals($intCountActive + 2, class_module_system_aspect::getObjectCount()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals(1, count($arrAspects)); echo "Deleting logically\n"; $this->assertEquals($objAspect->getIntRecordDeleted(), 0); $objAspect->deleteObject(); $this->assertEquals($objAspect->getIntRecordDeleted(), 1); $this->assertEquals($objAspect->getIntSort(), -1); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); echo "Loading non-deleted only\n"; $this->assertEquals($intCountActive + 1, class_module_system_aspect::getObjectCount()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals(0, count($arrAspects)); echo "Loading deleted only\n"; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUSIVE()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals($intCountDeleted + 1, class_module_system_aspect::getObjectCount()); $this->assertEquals(1, count($arrAspects)); echo "Loading mixed deleted and non-deleted\n"; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals($intCountTotal + 2, class_module_system_aspect::getObjectCount()); $this->assertEquals(1, count($arrAspects)); echo "Deleting from database\n"; $objAspect->deleteObjectFromDatabase(); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); echo "Loading non-deleted only\n"; $this->assertEquals($intCountActive + 1, class_module_system_aspect::getObjectCount()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals(0, count($arrAspects)); echo "Loading deleted only\n"; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUSIVE()); $arrAspects = class_module_system_aspect::getObjectList(); $arrAspects = array_filter($arrAspects, function (class_module_system_aspect $objAspect) use($strAspectId) { return $objAspect->getSystemid() == $strAspectId; }); $this->assertEquals($intCountDeleted, class_module_system_aspect::getObjectCount()); $this->assertEquals(0, count($arrAspects)); echo "Deleting dummy node directly\n"; $objAspect1->deleteObjectFromDatabase(); echo "Loading non-deleted only\n"; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); $this->assertEquals($intCountActive, class_module_system_aspect::getObjectCount()); echo "Loading deleted only\n"; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUSIVE()); $this->assertEquals($intCountDeleted, class_module_system_aspect::getObjectCount()); }
/** * Removes the current package, if possible, from the system * * @param string &$strLog * * @return bool */ public function remove(&$strLog) { class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); if (!$this->isRemovable()) { return false; } /** @var class_module_packagemanager_template[] $arrTemplates */ $arrTemplates = class_module_packagemanager_template::getObjectList(); foreach ($arrTemplates as $objOneTemplate) { if ($objOneTemplate->getStrName() == $this->getObjMetadata()->getStrTitle()) { return $objOneTemplate->deleteObjectFromDatabase(); } } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); return false; }
public function testLogicalDeleteLoadHandling() { $objDB = class_carrier::getInstance()->getObjDB(); /** @var orm_objectlist_testclass $objTestobject */ $objTestobject = $this->getObject("testobject"); $arrAspects = array($this->getObject("aspect1"), $this->getObject("aspect2"), $this->getObject("aspect3")); $objTestobject->setArrObject1($arrAspects); $objTestobject->updateObjectToDb(); $arrRow = $objDB->getPRow("SELECT COUNT(*) FROM " . _dbprefix_ . "testclass_rel WHERE testclass_source_id = ?", array($objTestobject->getSystemid())); $this->assertEquals(3, $arrRow["COUNT(*)"]); //delete one aspect logically $arrAspects[1]->deleteObject(); $objTestobject = new orm_objectlist_testclass($objTestobject->getSystemid()); $this->assertEquals(count($objTestobject->getArrObject1()), 2); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $objTestobject = new orm_objectlist_testclass($objTestobject->getSystemid()); class_orm_base::setObjHandleLogicalDeletedGlobal(null); $this->assertEquals(count($objTestobject->getArrObject1()), 3); class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUSIVE()); $objTestobject = new orm_objectlist_testclass($objTestobject->getSystemid()); class_orm_base::setObjHandleLogicalDeletedGlobal(null); $this->assertEquals(count($objTestobject->getArrObject1()), 1); $this->assertEquals($objTestobject->getArrObject1()[0]->getSystemid(), $arrAspects[1]->getSystemid()); class_orm_base::setObjHandleLogicalDeletedGlobal(null); $objTestobject = new orm_objectlist_testclass($objTestobject->getSystemid()); class_orm_base::setObjHandleLogicalDeletedGlobal(null); $this->assertEquals(count($objTestobject->getArrObject1()), 2); $this->assertTrue(in_array($objTestobject->getArrObject1()[0]->getSystemid(), array($arrAspects[0]->getSystemid(), $arrAspects[2]->getSystemid()))); }
/** * Restores a single object * * @permissions right1,delete * @return string * @throws class_exception */ protected function actionFinalDeleteRecord() { if ($this->getParam("delete") == "") { class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $objRecord = class_objectfactory::getInstance()->getObject($this->getSystemid()); $strReturn = $this->objToolkit->formHeader(class_link::getLinkAdminHref($this->getArrModule("modul"), "finalDeleteRecord")); $strReturn .= $this->objToolkit->warningBox($this->getLang("final_delete_question", array($objRecord->getStrDisplayName())), "alert-danger"); $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("final_delete_submit")); $strReturn .= $this->objToolkit->formInputHidden("systemid", $this->getParam("systemid")); $strReturn .= $this->objToolkit->formInputHidden("delete", "1"); $strReturn .= $this->objToolkit->formClose(); return $strReturn; } else { class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $objRecord = class_objectfactory::getInstance()->getObject($this->getSystemid()); if ($objRecord !== null && !$objRecord->rightDelete()) { throw new class_exception($this->getLang("commons_error_permissions"), class_exception::$level_ERROR); } $objRecord->deleteObjectFromDatabase(); $this->adminReload(class_link::getLinkAdminHref($this->getArrModule("modul"), "deletedRecords")); } return ""; }
/** * @param class_module_packagemanager_metadata $objMetadata * * @throws class_exception * @return string */ public function removePackage(class_module_packagemanager_metadata $objMetadata) { $strLog = ""; class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED()); $objHandler = $this->getPackageManagerForPath($objMetadata->getStrPath()); if ($objHandler->isRemovable()) { $objHandler->remove($strLog); } class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED()); class_resourceloader::getInstance()->flushCache(); return $strLog; }