/**
  * Removes the elements / modules handled by the current installer.
  * Use the reference param to add a human readable logging.
  *
  * @param string &$strReturn
  *
  * @return bool
  */
 public function remove(&$strReturn)
 {
     //remove the workflow
     if (class_module_system_module::getModuleByName("workflows") !== null) {
         foreach (class_module_workflows_workflow::getWorkflowsForClass("class_workflow_ldap_sync") as $objOneWorkflow) {
             if (!$objOneWorkflow->deleteObjectFromDatabase()) {
                 $strReturn .= "Error deleting workflow, aborting.\n";
                 return false;
             }
         }
         $objHandler = class_module_workflows_handler::getHandlerByClass("class_workflow_ldap_sync");
         if (!$objHandler->deleteObjectFromDatabase()) {
             $strReturn .= "Error deleting workflow handler, aborting.\n";
             return false;
         }
     }
     //fetch associated users
     foreach ($this->objDB->getPArray("SELECT * FROM " . _dbprefix_ . "user_ldap", array()) as $arrOneRow) {
         $objOneUser = new class_module_user_user($arrOneRow["user_ldap_id"]);
         echo "Deleting ldap user " . $objOneUser->getStrDisplayName() . "...\n";
         $objOneUser->deleteObjectFromDatabase();
     }
     //fetch associated groups
     foreach ($this->objDB->getPArray("SELECT * FROM " . _dbprefix_ . "user_group_ldap", array()) as $arrOneRow) {
         $objOneUser = new class_module_user_group($arrOneRow["group_ldap_id"]);
         echo "Deleting ldap group " . $objOneUser->getStrDisplayName() . "...\n";
         $objOneUser->deleteObjectFromDatabase();
     }
     //delete the module-node
     $strReturn .= "Deleting the module-registration...\n";
     $objModule = class_module_system_module::getModuleByName($this->objMetadata->getStrTitle(), true);
     if (!$objModule->deleteObjectFromDatabase()) {
         $strReturn .= "Error deleting module, aborting.\n";
         return false;
     }
     //delete the tables
     foreach (array("user_group_ldap", "user_ldap") as $strOneTable) {
         $strReturn .= "Dropping table " . $strOneTable . "...\n";
         if (!$this->objDB->_pQuery("DROP TABLE " . $this->objDB->encloseTableName(_dbprefix_ . $strOneTable) . "", array())) {
             $strReturn .= "Error deleting table, aborting.\n";
             return false;
         }
     }
     return true;
 }
 /**
  * Removes the elements / modules handled by the current installer.
  * Use the reference param to add a human readable logging.
  *
  * @param string &$strReturn
  *
  * @return bool
  */
 public function remove(&$strReturn)
 {
     $strReturn .= "Removing system settings...\n";
     if (class_module_system_setting::getConfigByName("_workflows_trigger_authkey_") != null) {
         class_module_system_setting::getConfigByName("_workflows_trigger_authkey_")->deleteObjectFromDatabase();
     }
     /** @var class_module_workflows_workflow $objOneObject */
     foreach (class_module_workflows_workflow::getObjectList() as $objOneObject) {
         $strReturn .= "Deleting object '" . $objOneObject->getStrDisplayName() . "' ...\n";
         if (!$objOneObject->deleteObjectFromDatabase()) {
             $strReturn .= "Error deleting object, aborting.\n";
             return false;
         }
     }
     /** @var class_module_workflows_handler $objOneObject */
     foreach (class_module_workflows_handler::getObjectList() as $objOneObject) {
         $strReturn .= "Deleting object '" . $objOneObject->getStrDisplayName() . "' ...\n";
         if (!$objOneObject->deleteObjectFromDatabase()) {
             $strReturn .= "Error deleting object, aborting.\n";
             return false;
         }
     }
     //delete the module-node
     $strReturn .= "Deleting the module-registration...\n";
     $objModule = class_module_system_module::getModuleByName($this->objMetadata->getStrTitle(), true);
     if (!$objModule->deleteObjectFromDatabase()) {
         $strReturn .= "Error deleting module, aborting.\n";
         return false;
     }
     //delete the tables
     foreach (array("workflows_handler", "workflows") as $strOneTable) {
         $strReturn .= "Dropping table " . $strOneTable . "...\n";
         if (!$this->objDB->_pQuery("DROP TABLE " . $this->objDB->encloseTableName(_dbprefix_ . $strOneTable) . "", array())) {
             $strReturn .= "Error deleting table, aborting.\n";
             return false;
         }
     }
     return true;
 }
 /**
  * @return string
  * @permissions right1
  */
 protected function actionStartInstance()
 {
     $strReturn = "";
     $objHandler = new class_module_workflows_handler($this->getSystemid());
     $objWorkflow = new class_module_workflows_workflow();
     $objWorkflow->setStrClass($objHandler->getStrHandlerClass());
     $objWorkflow->setStrAffectedSystemid($this->getParam("instance_systemid"));
     $objWorkflow->setStrResponsible($this->getParam("instance_responsible_id"));
     $objWorkflow->updateObjectToDb();
     $this->adminReload(getLinkAdminHref($this->getArrModule("modul"), "list"));
     return $strReturn;
 }
 /**
  * Synchronizes the list of handlers available on the filesystem compared to the list
  * of handlers available in the database.
  * Adds or removes handlers from or to the database.
  *
  */
 public static function synchronizeHandlerList()
 {
     //load the list of handlers in the filesystem
     $arrFiles = class_resourceloader::getInstance()->getFolderContent("/system/workflows", array(".php"));
     foreach ($arrFiles as $strOneFile) {
         $strClassname = uniStrReplace(".php", "", $strOneFile);
         $objReflection = new ReflectionClass($strClassname);
         if (!$objReflection->isAbstract()) {
             $objWorkflow = class_module_workflows_handler::getHandlerByClass($strClassname);
             if ($objWorkflow == null) {
                 $objWorkflow = new class_module_workflows_handler();
                 $objWorkflow->setStrHandlerClass($strClassname);
                 $arrDefault = $objWorkflow->getObjInstanceOfHandler()->getDefaultValues();
                 if (isset($arrDefault[0])) {
                     $objWorkflow->setStrConfigVal1($arrDefault[0]);
                 }
                 if (isset($arrDefault[1])) {
                     $objWorkflow->setStrConfigVal2($arrDefault[1]);
                 }
                 if (isset($arrDefault[2])) {
                     $objWorkflow->setStrConfigVal3($arrDefault[2]);
                 }
                 $objWorkflow->updateObjectToDb();
             }
         }
     }
     //find workflows to remove
     $arrWorkflows = self::getObjectList();
     /** @var class_module_workflows_handler $objOneWorkflow */
     foreach ($arrWorkflows as $objOneWorkflow) {
         if (!in_array($objOneWorkflow->getStrHandlerClass() . ".php", $arrFiles)) {
             $objOneWorkflow->deleteObjectFromDatabase();
         }
     }
 }
 /**
  * Returns the current workflow-handler
  *
  * @throws class_exception
  * @return interface_workflows_handler
  */
 public function getObjWorkflowHandler()
 {
     $strClassname = $this->getStrClass();
     if (class_exists($strClassname)) {
         //load the config-object
         $objConfig = class_module_workflows_handler::getHandlerByClass($strClassname);
         /** @var $objHandler interface_workflows_handler */
         $objHandler = new $strClassname();
         $objHandler->setObjWorkflow($this);
         if ($objConfig != null) {
             $objHandler->setConfigValues($objConfig->getStrConfigVal1(), $objConfig->getStrConfigVal2(), $objConfig->getStrConfigVal3());
         }
         return $objHandler;
     } else {
         throw new class_exception("workflow handler " . $strClassname . " not exisiting", class_exception::$level_ERROR);
     }
 }