/**
  * 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());
 }
示例#5
0
 /**
  * Static flag to change the handling of deleted objects globally, so for every following
  * ORM operation
  *
  * @param class_orm_deletedhandling_enum $objHandleLogicalDeleted
  */
 public static function setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum $objHandleLogicalDeleted = null)
 {
     class_carrier::getInstance()->flushCache(class_carrier::INT_CACHE_TYPE_DBQUERIES | class_carrier::INT_CACHE_TYPE_ORMCACHE);
     self::$objHandleLogicalDeletedGlobal = $objHandleLogicalDeleted;
 }
 /**
  * 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;
 }