258 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			258 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Project: 
 | |
|  * Contenido Content Management System
 | |
|  * 
 | |
|  * Description: 
 | |
|  * Workflow management class
 | |
|  * 
 | |
|  * Requirements: 
 | |
|  * @con_php_req 5.0
 | |
|  * 
 | |
|  *
 | |
|  * @package    Contenido Backend classes
 | |
|  * @version    1.3
 | |
|  * @author     Timo Hummel
 | |
|  * @copyright  four for business AG <www.4fb.de>
 | |
|  * @license    http://www.contenido.org/license/LIZENZ.txt
 | |
|  * @link       http://www.4fb.de
 | |
|  * @link       http://www.contenido.org
 | |
|  * 
 | |
|  * {@internal 
 | |
|  *   created 2003-07-18
 | |
|  *   
 | |
|  *   $Id: class.workflowusersequence.php 128 2019-07-03 11:58:28Z oldperl $
 | |
|  * }}
 | |
|  * 
 | |
|  */
 | |
| if (!defined('CON_FRAMEWORK')) {
 | |
|     die('Illegal call');
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Class WorkflowUserSequences
 | |
|  * Class for workflow user sequence management
 | |
|  * @author Timo A. Hummel <Timo.Hummel@4fb.de>
 | |
|  * @version 0.2
 | |
|  * @copyright four for business 2003
 | |
|  */
 | |
| class WorkflowUserSequences extends ItemCollection {
 | |
| 
 | |
|     /**
 | |
|      * Constructor Function
 | |
|      * @param string $table The table to use as information source
 | |
|      */
 | |
|     function __construct() {
 | |
|         global $cfg;
 | |
|         parent::__construct($cfg["tab"]["workflow_user_sequences"], "idusersequence");
 | |
|         $this->_setItemClass("WorkflowUserSequence");
 | |
|     }
 | |
| 
 | |
|     /** @deprecated  [2011-03-15] Old constructor function for downwards compatibility */
 | |
|     function WorkflowUserSequences() {
 | |
|         cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
 | |
|         $this->__construct();
 | |
|     }
 | |
| 
 | |
|     function delete($id) {
 | |
|         global $cfg, $idworkflow;
 | |
| 
 | |
|         $item = new WorkflowUserSequence;
 | |
|         $item->loadByPrimaryKey($id);
 | |
| 
 | |
|         $pos = $item->get("position");
 | |
|         $idworkflowitem = $item->get("idworkflowitem");
 | |
|         $this->select("position > $pos AND idworkflowitem = '" . Contenido_Security::escapeDB($idworkflowitem, NULL) . "'");
 | |
|         while ($obj = $this->next()) {
 | |
|             $pos = $obj->get("position") - 1;
 | |
|             $obj->setPosition($pos);
 | |
|             $obj->store();
 | |
|         }
 | |
| 
 | |
|         parent::delete($id);
 | |
| 
 | |
|         $this->updateArtAllocation($id);
 | |
|     }
 | |
| 
 | |
|     function updateArtAllocation($idusersequence) {
 | |
|         global $idworkflow, $cfg;
 | |
|         $oDb = new DB_ConLite();
 | |
| 
 | |
|         $aIdArtLang = array();
 | |
|         $sSql = 'SELECT idartlang FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence = ' . Contenido_Security::escapeDB($idusersequence, $oDb) . ';';
 | |
|         $oDb->query($sSql);
 | |
|         while ($oDb->next_record()) {
 | |
|             array_push($aIdArtLang, $oDb->f('idartlang'));
 | |
|         }
 | |
| 
 | |
|         $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence = ' . Contenido_Security::escapeDB($idusersequence, $oDb) . ';';
 | |
|         $oDb->query($sSql);
 | |
| 
 | |
| 
 | |
|         foreach ($aIdArtLang as $iIdArtLang) {
 | |
|             setUserSequence($iIdArtLang, $idworkflow);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function create($idworkflowitem) {
 | |
|         global $auth, $client, $idworkflow;
 | |
|         $newitem = parent::createNewItem();
 | |
| 
 | |
|         $workflowitems = new WorkflowItems;
 | |
|         if (!$workflowitems->exists($idworkflowitem)) {
 | |
|             $this->delete($newitem->getField("idusersequence"));
 | |
|             $this->lasterror = i18n("Workflow item doesn't exist. Can't create entry.", "workflow");
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $this->select("idworkflowitem = '" . Contenido_Security::escapeDB($idworkflowitem, NULL) . "'", "", "position DESC", "1");
 | |
| 
 | |
|         $item = $this->next();
 | |
| 
 | |
|         if ($item === false) {
 | |
|             $lastPos = 1;
 | |
|         } else {
 | |
|             $lastPos = $item->getField("position") + 1;
 | |
|         }
 | |
| 
 | |
|         $newitem->setWorkflowItem($idworkflowitem);
 | |
|         $newitem->setPosition($lastPos);
 | |
|         $newitem->store();
 | |
| 
 | |
|         return ($newitem);
 | |
|     }
 | |
| 
 | |
|     function swap($idworkflowitem, $pos1, $pos2) {
 | |
|         $this->select("idworkflowitem = '$idworkflowitem' AND position = '" . Contenido_Security::escapeDB($pos1, NULL) . "'");
 | |
|         if (($item = $this->next()) === false) {
 | |
|             $this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow");
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $pos1ID = $item->getField("idusersequence");
 | |
| 
 | |
|         $this->select("idworkflowitem = '$idworkflowitem' AND position = '" . Contenido_Security::escapeDB($pos2, NULL) . "'");
 | |
|         if (($item = $this->next()) === false) {
 | |
|             $this->lasterror(i18n("Swapping items failed: Item doesn't exist", "workflow"));
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $pos2ID = $item->getField("idusersequence");
 | |
| 
 | |
|         $item = new WorkflowUserSequence();
 | |
|         $item->loadByPrimaryKey($pos1ID);
 | |
|         $item->setPosition($pos2);
 | |
|         $item->store();
 | |
|         $item->loadByPrimaryKey($pos2ID);
 | |
|         $item->setPosition($pos1);
 | |
|         $item->store();
 | |
| 
 | |
|         $this->updateArtAllocation($pos2ID);
 | |
|         $this->updateArtAllocation($pos1ID);
 | |
| 
 | |
|         return (true);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Class WorkflowUserSequence
 | |
|  * Class for a single workflow item
 | |
|  * @author Timo A. Hummel <Timo.Hummel@4fb.de>
 | |
|  * @version 0.1
 | |
|  * @copyright four for business 2003
 | |
|  */
 | |
| class WorkflowUserSequence extends Item {
 | |
| 
 | |
|     /**
 | |
|      * Constructor Function
 | |
|      * @param string $table The table to use as information source
 | |
|      */
 | |
|     function __construct() {
 | |
|         global $cfg;
 | |
|         parent::__construct($cfg["tab"]["workflow_user_sequences"], "idusersequence");
 | |
|     }
 | |
| 
 | |
|     /** @deprecated  [2011-03-15] Old constructor function for downwards compatibility */
 | |
|     function WorkflowUserSequence() {
 | |
|         cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
 | |
|         $this->__construct();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Override setField Function to prevent that somebody modifies
 | |
|      * idsequence.
 | |
|      * @param string $field Field to set
 | |
|      * @param string $valie Value to set
 | |
|      */
 | |
|     function setField($field, $value, $bSafe = true) {
 | |
|         global $cfg;
 | |
| 
 | |
|         switch ($field) {
 | |
|             case "idworkflowitem":
 | |
|                 die("Please use create to modify idsequence. Direct modifications are not allowed");
 | |
|             case "idusersequence":
 | |
|                 die("Please use create to modify idsequence. Direct modifications are not allowed");
 | |
|             case "position":
 | |
|                 die("Please use create and swap to set the position. Direct modifications are not allowed");
 | |
|             case "iduser":
 | |
|                 if ($value != 0) {
 | |
|                     $db = new DB_ConLite;
 | |
|                     $sql = "SELECT user_id FROM " . $cfg["tab"]["phplib_auth_user_md5"] .
 | |
|                             " WHERE user_id = '" . Contenido_Security::escapeDB($value, $db) . "'";
 | |
|                     $db->query($sql);
 | |
| 
 | |
|                     if (!$db->next_record()) {
 | |
|                         $sql = "SELECT group_id FROM " . $cfg["tab"]["groups"] .
 | |
|                                 " WHERE group_id = '" . Contenido_Security::escapeDB($value, $db) . "'";
 | |
| 
 | |
|                         $db->query($sql);
 | |
|                         if (!$db->next_record()) {
 | |
|                             $this->lasterror = i18n("Can't set user_id: User or group doesn't exist", "workflow");
 | |
|                             return false;
 | |
|                         }
 | |
|                     }
 | |
|                     $idusersquence = parent::getField('idusersequence');
 | |
|                 }
 | |
|         }
 | |
| 
 | |
|         parent::setField($field, $value, $bSafe);
 | |
|         if ($idusersquence) {
 | |
|             WorkflowUserSequences::updateArtAllocation(0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the associated workflowItem for this user sequence
 | |
|      * @param none
 | |
|      */
 | |
|     function getWorkflowItem() {
 | |
|         if (!$this->virgin) {
 | |
|             $workflowItem = new WorkflowItem;
 | |
|             $workflowItem->loadByPrimaryKey($this->values["idworkflowitem"]);
 | |
|             return ($workflowItem);
 | |
|         } else {
 | |
|             return false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Interface to set idworkflowitem. Should only be called by "create".
 | |
|      * @param string $value The value to set
 | |
|      */
 | |
|     function setWorkflowItem($value) {
 | |
|         parent::setField("idworkflowitem", $value);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Interface to set idworkflowitem. Should only be called by "create".
 | |
|      * @param string $value The value to set
 | |
|      */
 | |
|     function setPosition($value) {
 | |
|         parent::setField("position", $value);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| ?>
 |