/**
  * Triggers the workflows scheduled for running.
  */
 public function runWorkflows()
 {
     $arrWorkflows = class_module_workflows_workflow::getWorkflowsByType(class_module_workflows_workflow::$INT_STATE_SCHEDULED);
     class_logger::getInstance(self::STR_LOGFILE)->addLogRow("running workflows, count: " . count($arrWorkflows), class_logger::$levelInfo);
     foreach ($arrWorkflows as $objOneWorkflow) {
         //lock the workflow
         $objLockmanager = new class_lockmanager($objOneWorkflow->getSystemid());
         if ($objLockmanager->isLocked()) {
             class_logger::getInstance(self::STR_LOGFILE)->addLogRow("workflow " . $objOneWorkflow->getSystemid() . " is locked, can't be scheduled", class_logger::$levelWarning);
             continue;
         }
         $objLockmanager->lockRecord();
         /**
          * @var interface_workflows_handler
          */
         $objHandler = $objOneWorkflow->getObjWorkflowHandler();
         //trigger the workflow
         class_logger::getInstance(self::STR_LOGFILE)->addLogRow("executing workflow " . $objOneWorkflow->getSystemid(), class_logger::$levelInfo);
         if ($objHandler->execute()) {
             //handler executed successfully. shift to state 'executed'
             $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_EXECUTED);
             class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: executed", class_logger::$levelInfo);
         } else {
             //handler failed to execute. reschedule.
             $objHandler->schedule();
             $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_SCHEDULED);
             class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: scheduled", class_logger::$levelInfo);
         }
         $objOneWorkflow->setIntRuns($objOneWorkflow->getIntRuns() + 1);
         $objOneWorkflow->updateObjectToDb();
         $objLockmanager->unlockRecord(true);
     }
     class_logger::getInstance(self::STR_LOGFILE)->addLogRow("running workflows finished", class_logger::$levelInfo);
 }
 /**
  * @param string $strSystemid
  */
 public function __construct($strSystemid = "")
 {
     parent::__construct($strSystemid);
     if ($this->getParam("pe") == "1") {
         $this->strPeAddon = "&pe=1";
     }
     if ($this->getParam("unlockid") != "") {
         $objLockmanager = new class_lockmanager($this->getParam("unlockid"));
         $objLockmanager->unlockRecord(true);
     }
 }
 /**
  * Handles the userlogout event and unlocks all records currently locked by the current user.
  *
  * @param string $strEventName
  * @param array $arrArguments
  *
  * @return bool
  */
 public function handleEvent($strEventName, array $arrArguments)
 {
     //unwrap arguments
     list($strUserid) = $arrArguments;
     foreach (class_lockmanager::getLockedRecordsForUser($strUserid) as $objOneLock) {
         $objOneLock->getLockManager()->unlockRecord();
     }
     return true;
 }
 /**
  * @xml
  * @permissions edit
  * @return string
  */
 protected function actionUpdateObjectProperty()
 {
     $strReturn = "";
     //get the object to update
     /** @var $objObject class_module_pages_element */
     $objObject = class_objectfactory::getInstance()->getObject($this->getSystemid());
     if ($objObject->rightEdit()) {
         //differ between two modes - page-elements or regular objects
         if ($objObject instanceof class_module_pages_pageelement) {
             $strPageSystemid = $objObject->getPrevId();
             $objLockmanager = new class_lockmanager($objObject->getSystemid());
             if (!$objLockmanager->isLocked()) {
                 $objLockmanager->lockRecord();
             }
             if ($objLockmanager->isLockedByCurrentUser()) {
                 //and finally create the object
                 /** @var class_module_pages_pageelement $objElement */
                 $strElementClass = str_replace(".php", "", $objObject->getStrClassAdmin());
                 //and finally create the object
                 /** @var $objElement class_element_admin */
                 $objElement = new $strElementClass();
                 $objElement->setSystemid($this->getSystemid());
                 $arrElementData = $objElement->loadElementData();
                 //see if we could set the param to the element
                 if ($this->getParam("property") != "") {
                     $strProperty = null;
                     //try to fetch the matching setter
                     $objReflection = new class_reflection($objElement);
                     //try to fetch the property based on the orm annotations
                     $strTargetTable = $objReflection->getAnnotationValuesFromClass(class_orm_base::STR_ANNOTATION_TARGETTABLE);
                     if (count($strTargetTable) > 0) {
                         $strTargetTable = $strTargetTable[0];
                     }
                     $arrTable = explode(".", $strTargetTable);
                     if (count($arrTable) == 2) {
                         $strTargetTable = $arrTable[0];
                     }
                     $arrOrmProperty = $objReflection->getPropertiesWithAnnotation(class_orm_base::STR_ANNOTATION_TABLECOLUMN);
                     foreach ($arrOrmProperty as $strCurProperty => $strValue) {
                         if ($strValue == $strTargetTable . "." . $this->getParam("property")) {
                             $strProperty = $strCurProperty;
                         }
                     }
                     if ($strProperty == null) {
                         $strProperty = $this->getParam("property");
                     }
                     $strSetter = $objReflection->getSetter($strProperty);
                     if ($strSetter != null) {
                         call_user_func(array($objElement, $strSetter), $this->getParam("value"));
                     } else {
                         $arrElementData[$this->getParam("property")] = $this->getParam("value");
                         $objElement->setArrParamData($arrElementData);
                     }
                 }
                 //pass the data to the element, maybe the element wants to update some data
                 $objElement->doBeforeSaveToDb();
                 //check, if we could save the data, so the element needn't to
                 //woah, we are soooo great
                 $objElement->updateForeignElement();
                 //Edit Date of page & unlock
                 $objPage = class_objectfactory::getInstance()->getObject($strPageSystemid);
                 $objPage->updateObjectToDb();
                 $objLockmanager->unlockRecord();
                 //allow the element to run actions after saving
                 $objElement->doAfterSaveToDb();
                 //Loading the data of the corresp site
                 $this->flushCompletePagesCache();
                 $strReturn = "<message><success>element update succeeded</success></message>";
             }
         } else {
             //any other object - try to find the matching property and write the value
             if ($this->getParam("property") == "") {
                 class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_BADREQUEST);
                 return "<message><error>missing property param</error></message>";
             }
             $objReflection = new class_reflection($objObject);
             $strSetter = $objReflection->getSetter($this->getParam("property"));
             if ($strSetter == null) {
                 class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_BADREQUEST);
                 return "<message><error>setter not found</error></message>";
             }
             call_user_func(array($objObject, $strSetter), $this->getParam("value"));
             $objObject->updateObjectToDb();
             $this->flushCompletePagesCache();
             $strReturn = "<message><success>object update succeeded</success></message>";
         }
     } else {
         class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_UNAUTHORIZED);
         $strReturn = "<message><error>" . $this->getLang("ds_gesperrt") . "." . $this->getLang("commons_error_permissions") . "</error></message>";
     }
     return $strReturn;
 }
 /**
  * Renders a list of records currently locked
  *
  * @permissions right1
  * @return string
  * @autoTestable
  */
 protected function actionLockedRecords()
 {
     $objArraySectionIterator = new class_array_section_iterator(class_lockmanager::getLockedRecordsCount());
     $objArraySectionIterator->setPageNumber((int) ($this->getParam("pv") != "" ? $this->getParam("pv") : 1));
     $objArraySectionIterator->setArraySection(class_lockmanager::getLockedRecords($objArraySectionIterator->calculateStartPos(), $objArraySectionIterator->calculateEndPos()));
     $strReturn = "";
     if (!$objArraySectionIterator->valid()) {
         $strReturn .= $this->getLang("commons_list_empty");
     }
     $strReturn .= $this->objToolkit->listHeader();
     foreach ($objArraySectionIterator as $objOneRecord) {
         $strImage = "";
         if ($objOneRecord instanceof interface_admin_listable) {
             $strImage = $objOneRecord->getStrIcon();
             if (is_array($strImage)) {
                 $strImage = class_adminskin_helper::getAdminImage($strImage[0], $strImage[1]);
             } else {
                 $strImage = class_adminskin_helper::getAdminImage($strImage);
             }
         }
         $strActions = $this->objToolkit->listButton(class_link::getLinkAdmin($this->getArrModule("modul"), "lockedRecords", "&unlockid=" . $objOneRecord->getSystemid(), $this->getLang("action_unlock_record"), $this->getLang("action_unlock_record"), "icon_lockerOpen"));
         $objLockUser = new class_module_user_user($objOneRecord->getLockManager()->getLockId());
         $strReturn .= $this->objToolkit->genericAdminList($objOneRecord->getSystemid(), $objOneRecord instanceof interface_model ? $objOneRecord->getStrDisplayName() : get_class($objOneRecord), $strImage, $strActions, 0, get_class($objOneRecord), $this->getLang("locked_record_info", array(dateToString(new class_date($objOneRecord->getIntLockTime())), $objLockUser->getStrDisplayName())));
     }
     $strReturn .= $this->objToolkit->listFooter();
     $strReturn .= $this->objToolkit->getPageview($objArraySectionIterator, "system", "lockedRecords");
     return $strReturn;
 }