278 Zeilen
7,4 KiB
PHP
278 Zeilen
7,4 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);
|
||
|
}
|
||
|
}
|
||
|
?>
|