* @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 * @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 * @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); } } ?>