add files
Dieser Commit ist enthalten in:
Ursprung
935ba6e5d9
Commit
b75948a709
37 geänderte Dateien mit 4890 neuen und 0 gelöschten Zeilen
552
includes/functions.workflow.php
Normale Datei
552
includes/functions.workflow.php
Normale Datei
|
|
@ -0,0 +1,552 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Workflow functions
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend classes
|
||||
* @version 1.8.1
|
||||
* @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-28
|
||||
* modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready)
|
||||
*
|
||||
* $Id: functions.workflow.php 128 2019-07-03 11:58:28Z oldperl $
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
if(!defined('CON_FRAMEWORK')) {
|
||||
die('Illegal call');
|
||||
}
|
||||
|
||||
|
||||
cInclude("includes", "functions.con.php");
|
||||
|
||||
plugin_include('workflow', 'classes/class.workflowitems.php');
|
||||
|
||||
function getUsers ($listid, $default)
|
||||
{
|
||||
global $idclient, $cfg, $auth;
|
||||
|
||||
$userlist = new Users;
|
||||
$users = $userlist->getAccessibleUsers(explode(',', $auth->auth['perm']));
|
||||
$grouplist = new Groups;
|
||||
$groups = $grouplist->getAccessibleGroups(explode(',', $auth->auth['perm']));
|
||||
|
||||
$tpl2 = new Template;
|
||||
$tpl2->set('s', 'NAME', 'user'.$listid);
|
||||
$tpl2->set('s', 'CLASS', 'text_small');
|
||||
$tpl2->set('s', 'OPTIONS', 'size=1');
|
||||
|
||||
$tpl2->set('d', 'VALUE', 0);
|
||||
$tpl2->set('d', 'CAPTION', '--- '.i18n("None", "workflow").' ---');
|
||||
if ($default == 0)
|
||||
{
|
||||
$tpl2->set('d', 'SELECTED', 'SELECTED');
|
||||
} else {
|
||||
$tpl2->set('d', 'SELECTED', '');
|
||||
}
|
||||
$tpl2->next();
|
||||
|
||||
if ( is_array($users) )
|
||||
{
|
||||
|
||||
foreach ($users as $key => $value)
|
||||
{
|
||||
|
||||
$tpl2->set('d', 'VALUE', $key);
|
||||
$tpl2->set('d', 'CAPTION', $value["realname"] . " (".$value["username"].")");
|
||||
|
||||
if ($default == $key)
|
||||
{
|
||||
$tpl2->set('d', 'SELECTED', 'SELECTED');
|
||||
} else {
|
||||
$tpl2->set('d', 'SELECTED', '');
|
||||
}
|
||||
|
||||
$tpl2->next();
|
||||
}
|
||||
}
|
||||
|
||||
$tpl2->set('d', 'VALUE', '0');
|
||||
$tpl2->set('d', 'CAPTION', '------------------------------------');
|
||||
$tpl2->set('d', 'SELECTED', 'disabled');
|
||||
$tpl2->next();
|
||||
|
||||
if ( is_array($groups) )
|
||||
{
|
||||
|
||||
foreach ($groups as $key => $value)
|
||||
{
|
||||
|
||||
$tpl2->set('d', 'VALUE', $key);
|
||||
$tpl2->set('d', 'CAPTION', $value["groupname"]);
|
||||
|
||||
if ($default == $key)
|
||||
{
|
||||
$tpl2->set('d', 'SELECTED', 'SELECTED');
|
||||
} else {
|
||||
$tpl2->set('d', 'SELECTED', '');
|
||||
}
|
||||
|
||||
$tpl2->next();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $tpl2->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true);
|
||||
|
||||
}
|
||||
|
||||
function isCurrentEditor ($uid)
|
||||
{
|
||||
global $auth, $cfg;
|
||||
|
||||
/* Check if the UID is a group. If yes, check if we are in it */
|
||||
$user = new User;
|
||||
if ($user->loadUserByUserID($uid) == false)
|
||||
{
|
||||
$db2 = new DB_ConLite;
|
||||
|
||||
/* Yes, it's a group. Let's try to load the group members! */
|
||||
$sql = "SELECT user_id FROM "
|
||||
.$cfg["tab"]["groupmembers"]."
|
||||
WHERE group_id = '".Contenido_Security::escapeDB($uid,$db2)."'";
|
||||
|
||||
$db2->query($sql);
|
||||
|
||||
while ($db2->next_record())
|
||||
{
|
||||
if ($db2->f("user_id") == $auth->auth["uid"])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($uid == $auth->auth["uid"])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function getActionSelect ($idartlang, $idusersequence)
|
||||
{
|
||||
global $cfg;
|
||||
|
||||
$workflowActions = new WorkflowActions;
|
||||
|
||||
$allActions = $workflowActions->getAvailableWorkflowActions();
|
||||
|
||||
$wfSelect = new Template;
|
||||
$wfSelect->set('s', 'NAME', 'wfselect'.$idartlang);
|
||||
$wfSelect->set('s', 'CLASS', 'text_medium');
|
||||
|
||||
$userSequence = new WorkflowUserSequence;
|
||||
$userSequence->loadByPrimaryKey($idusersequence);
|
||||
|
||||
$workflowItem = $userSequence->getWorkflowItem();
|
||||
|
||||
if ($workflowItem === false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$wfRights = $workflowItem->getStepRights();
|
||||
|
||||
$artAllocation = new WorkflowArtAllocations;
|
||||
$artAllocation->select("idartlang = '$idartlang'");
|
||||
|
||||
if ($obj = $artAllocation->next())
|
||||
{
|
||||
$laststep = $obj->get("lastusersequence");
|
||||
}
|
||||
|
||||
$bExistOption = false;
|
||||
if ($laststep != $idusersequence)
|
||||
{
|
||||
$wfSelect->set('d', 'VALUE', 'next');
|
||||
$wfSelect->set('d', 'CAPTION', i18n("Confirm", "workflow"));
|
||||
$wfSelect->set('d', 'SELECTED', 'SELECTED');
|
||||
$wfSelect->next();
|
||||
$bExistOption = true;
|
||||
}
|
||||
|
||||
if ($wfRights["last"] == true)
|
||||
{
|
||||
$wfSelect->set('d', 'VALUE', 'last');
|
||||
$wfSelect->set('d', 'CAPTION', i18n("Back to last editor", "workflow"));
|
||||
$wfSelect->set('d', 'SELECTED', '');
|
||||
$wfSelect->next();
|
||||
$bExistOption = true;
|
||||
}
|
||||
|
||||
if ($wfRights["reject"] == true)
|
||||
{
|
||||
$wfSelect->set('d', 'VALUE', 'reject');
|
||||
$wfSelect->set('d', 'CAPTION', i18n("Reject article", "workflow"));
|
||||
$wfSelect->set('d', 'SELECTED', '');
|
||||
$wfSelect->next();
|
||||
$bExistOption = true;
|
||||
}
|
||||
|
||||
if ($wfRights["revise"] == true)
|
||||
{
|
||||
$wfSelect->set('d', 'VALUE', 'revise');
|
||||
$wfSelect->set('d', 'CAPTION', i18n("Revise article", "workflow"));
|
||||
$wfSelect->set('d', 'SELECTED', '');
|
||||
$wfSelect->next();
|
||||
$bExistOption = true;
|
||||
}
|
||||
|
||||
if ($bExistOption)
|
||||
return ($wfSelect->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true));
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#function for inserting todos in wokflow_art_allocation used, when a workflow is associated with a category in content->category
|
||||
function setUserSequence ($idartlang, $defaultidworkflow) {
|
||||
$wfaa = new WorkflowArtAllocations;
|
||||
$wfaa->select("idartlang = '$idartlang'");
|
||||
$idusersequence = 0;
|
||||
|
||||
if ($associatedUserSequence = $wfaa->next())
|
||||
{
|
||||
$idartallocation = $associatedUserSequence->get("idartallocation");
|
||||
$wfaa->delete($idartallocation);
|
||||
}
|
||||
|
||||
if ($defaultidworkflow != -1) {
|
||||
$newObj = $wfaa->create($idartlang);
|
||||
|
||||
if (!$newObj)
|
||||
{
|
||||
/* Try to load */
|
||||
$newObj = new WorkflowArtAllocation;
|
||||
|
||||
echo $wfaa->lasterror;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get the first idusersequence for the new item */
|
||||
$workflowItems = new WorkflowItems;
|
||||
$workflowItems->select("idworkflow = '$defaultidworkflow' AND position = '1'");
|
||||
|
||||
if ($obj = $workflowItems->next())
|
||||
{
|
||||
$firstitem = $obj->get("idworkflowitem");
|
||||
}
|
||||
|
||||
$workflowUserSequences = new WorkflowUserSequences;
|
||||
$workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'");
|
||||
|
||||
if ($obj = $workflowUserSequences->next())
|
||||
{
|
||||
$firstIDUserSequence = $obj->get("idusersequence");
|
||||
}
|
||||
|
||||
$newObj->set("idusersequence", $firstIDUserSequence);
|
||||
$newObj->store();
|
||||
|
||||
$idusersequence = $newObj->get("idusersequence");
|
||||
$associatedUserSequence = $newObj;
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentUserSequence ($idartlang, $defaultidworkflow)
|
||||
{
|
||||
$wfaa = new WorkflowArtAllocations;
|
||||
$wfaa->select("idartlang = '$idartlang'");
|
||||
$idusersequence = 0;
|
||||
|
||||
if ($associatedUserSequence = $wfaa->next())
|
||||
{
|
||||
$idusersequence = $associatedUserSequence->get("idusersequence");
|
||||
}
|
||||
|
||||
if ($idusersequence == 0)
|
||||
{
|
||||
if ($associatedUserSequence != false)
|
||||
{
|
||||
$newObj = $associatedUserSequence;
|
||||
} else {
|
||||
$newObj = $wfaa->create($idartlang);
|
||||
|
||||
if (!$newObj)
|
||||
{
|
||||
/* Try to load */
|
||||
$newObj = new WorkflowArtAllocation;
|
||||
|
||||
echo $wfaa->lasterror;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the first idusersequence for the new item */
|
||||
$workflowItems = new WorkflowItems;
|
||||
$workflowItems->select("idworkflow = '$defaultidworkflow' AND position = '1'");
|
||||
|
||||
if ($obj = $workflowItems->next())
|
||||
{
|
||||
$firstitem = $obj->get("idworkflowitem");
|
||||
}
|
||||
|
||||
$workflowUserSequences = new WorkflowUserSequences;
|
||||
$workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'");
|
||||
|
||||
if ($obj = $workflowUserSequences->next())
|
||||
{
|
||||
$firstIDUserSequence = $obj->get("idusersequence");
|
||||
}
|
||||
|
||||
$newObj->set("idusersequence", $firstIDUserSequence);
|
||||
$newObj->store();
|
||||
|
||||
$idusersequence = $newObj->get("idusersequence");
|
||||
$associatedUserSequence = $newObj;
|
||||
}
|
||||
|
||||
return ($idusersequence);
|
||||
}
|
||||
|
||||
function getLastWorkflowStatus ($idartlang)
|
||||
{
|
||||
$wfaa = new WorkflowArtAllocations;
|
||||
|
||||
$wfaa->select("idartlang = '$idartlang'");
|
||||
|
||||
if ($associatedUserSequence = $wfaa->next())
|
||||
{
|
||||
$laststatus = $associatedUserSequence->get("laststatus");
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch ($laststatus)
|
||||
{
|
||||
case "reject":
|
||||
return (i18n("Rejected", "workflow"));
|
||||
break;
|
||||
case "revise":
|
||||
return (i18n("Revised", "workflow"));
|
||||
break;
|
||||
case "last":
|
||||
return (i18n("Last", "workflow"));
|
||||
break;
|
||||
case "confirm":
|
||||
return (i18n("Confirmed", "workflow"));
|
||||
break;
|
||||
default:
|
||||
return (i18n("None", "workflow"));
|
||||
break;
|
||||
}
|
||||
return ("");
|
||||
}
|
||||
|
||||
function doWorkflowAction ($idartlang, $action)
|
||||
{
|
||||
global $cfg, $idcat;
|
||||
|
||||
switch ($action)
|
||||
{
|
||||
case "last":
|
||||
$artAllocations = new WorkflowArtAllocations;
|
||||
$artAllocations->select("idartlang = '$idartlang'");
|
||||
|
||||
if ($obj = $artAllocations->next())
|
||||
{
|
||||
$usersequence = new WorkflowUserSequence;
|
||||
$usersequence->loadByPrimaryKey($obj->get("idusersequence"));
|
||||
|
||||
$workflowitem = $usersequence->getWorkflowItem();
|
||||
|
||||
$idworkflow = $workflowitem->get("idworkflow");
|
||||
$newpos = $workflowitem->get("position") - 1;
|
||||
|
||||
if ($newpos < 1)
|
||||
{
|
||||
$newpos = 1;
|
||||
}
|
||||
|
||||
$workflowitems = new WorkflowItems;
|
||||
$workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'");
|
||||
|
||||
if ($nextObj = $workflowitems->next())
|
||||
{
|
||||
$userSequences = new WorkflowUserSequences;
|
||||
$idworkflowitem = $nextObj->get("idworkflowitem");
|
||||
$userSequences->select("idworkflowitem = '$idworkflowitem'");
|
||||
|
||||
if ($nextSeqObj = $userSequences->next())
|
||||
{
|
||||
$obj->set("lastusersequence", $obj->get("idusersequence"));
|
||||
$obj->set("idusersequence",$nextSeqObj->get("idusersequence"));
|
||||
$obj->set("laststatus", "last");
|
||||
$obj->store();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "next":
|
||||
$artAllocations = new WorkflowArtAllocations;
|
||||
$artAllocations->select("idartlang = '$idartlang'");
|
||||
|
||||
if ($obj = $artAllocations->next())
|
||||
{
|
||||
$usersequence = new WorkflowUserSequence;
|
||||
$usersequence->loadByPrimaryKey($obj->get("idusersequence"));
|
||||
|
||||
$workflowitem = $usersequence->getWorkflowItem();
|
||||
|
||||
$idworkflow = $workflowitem->get("idworkflow");
|
||||
$newpos = $workflowitem->get("position") + 1;
|
||||
|
||||
$workflowitems = new WorkflowItems;
|
||||
$workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'");
|
||||
|
||||
if ($nextObj = $workflowitems->next())
|
||||
{
|
||||
$userSequences = new WorkflowUserSequences;
|
||||
$idworkflowitem = $nextObj->get("idworkflowitem");
|
||||
$userSequences->select("idworkflowitem = '$idworkflowitem'");
|
||||
|
||||
if ($nextSeqObj = $userSequences->next())
|
||||
{
|
||||
$obj->set("lastusersequence", '10');
|
||||
$obj->set("idusersequence",$nextSeqObj->get("idusersequence"));
|
||||
$obj->set("laststatus", "confirm");
|
||||
$obj->store();
|
||||
}
|
||||
} else {
|
||||
$workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($workflowitem->get("position"), NULL)."'");
|
||||
if ($nextObj = $workflowitems->next())
|
||||
{
|
||||
$userSequences = new WorkflowUserSequences;
|
||||
$idworkflowitem = $nextObj->get("idworkflowitem");
|
||||
$userSequences->select("idworkflowitem = '$idworkflowitem'");
|
||||
|
||||
if ($nextSeqObj = $userSequences->next())
|
||||
{
|
||||
$obj->set("lastusersequence", $obj->get("idusersequence"));
|
||||
$obj->set("idusersequence",$nextSeqObj->get("idusersequence"));
|
||||
$obj->set("laststatus", "confirm");
|
||||
$obj->store();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case "reject":
|
||||
$artAllocations = new WorkflowArtAllocations;
|
||||
$artAllocations->select("idartlang = '$idartlang'");
|
||||
|
||||
if ($obj = $artAllocations->next())
|
||||
{
|
||||
$usersequence = new WorkflowUserSequence;
|
||||
$usersequence->loadByPrimaryKey($obj->get("idusersequence"));
|
||||
|
||||
$workflowitem = $usersequence->getWorkflowItem();
|
||||
|
||||
$idworkflow = $workflowitem->get("idworkflow");
|
||||
$newpos = 1;
|
||||
|
||||
$workflowitems = new WorkflowItems;
|
||||
$workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'");
|
||||
|
||||
if ($nextObj = $workflowitems->next())
|
||||
{
|
||||
$userSequences = new WorkflowUserSequences;
|
||||
$idworkflowitem = $nextObj->get("idworkflowitem");
|
||||
$userSequences->select("idworkflowitem = '$idworkflowitem'");
|
||||
|
||||
if ($nextSeqObj = $userSequences->next())
|
||||
{
|
||||
$obj->set("lastusersequence", $obj->get("idusersequence"));
|
||||
$obj->set("idusersequence",$nextSeqObj->get("idusersequence"));
|
||||
$obj->set("laststatus", "reject");
|
||||
$obj->store();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "revise":
|
||||
$db = new DB_ConLite;
|
||||
$sql = "SELECT idart, idlang FROM ".$cfg["tab"]["art_lang"] ." WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $db)."'";
|
||||
$db->query($sql);
|
||||
$db->next_record();
|
||||
$idart = $db->f("idart");
|
||||
$idlang = $db->f("idlang");
|
||||
|
||||
$newidart = conCopyArticle($idart,$idcat, "foo");
|
||||
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
function getWorkflowForUserSequence ($usersequence)
|
||||
{
|
||||
$usersequences = new WorkflowUserSequences;
|
||||
$workflowitems = new WorkflowItems;
|
||||
$usersequences->select("idusersequence = '$usersequence'");
|
||||
|
||||
if ($obj = $usersequences->next())
|
||||
{
|
||||
$idworkflowitem = $obj->get("idworkflowitem");
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
$workflowitems->select("idworkflowitem = '$idworkflowitem'");
|
||||
if ($obj = $workflowitems->next())
|
||||
{
|
||||
return $obj->get("idworkflow");
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function workflowSelect ($listid, $default, $idcat)
|
||||
{
|
||||
global $idclient, $cfg, $frame, $area, $workflowworkflows, $client, $lang, $wfcache, $workflowSelectBox;
|
||||
|
||||
$oSelectBox = new cHTMLSelectElement('workflow');
|
||||
$oSelectBox = $workflowSelectBox;
|
||||
|
||||
$default = (int) $default;
|
||||
$workflowSelectBox->updateAttributes(array("id" => "wfselect" . $idcat));
|
||||
$workflowSelectBox->updateAttributes(array("name" => "wfselect" . $idcat));
|
||||
$workflowSelectBox->setDefault($default);
|
||||
|
||||
$sButton ='<a href="javascript:setWorkflow('.$idcat.', \''."wfselect".$idcat.'\')"><img src="'.$cfg["path"]["images"].'submit.gif" class="spaced"></a>';
|
||||
|
||||
return $workflowSelectBox->render().$sButton;
|
||||
}
|
||||
|
||||
function workflowInherit ($idcat)
|
||||
{
|
||||
global $idclient, $cfg, $frame, $area, $workflowworkflows, $sess;
|
||||
$sUrl = $sess->url("main.php?area=$area&frame=$frame&modidcat=$idcat&action=workflow_inherit_down");
|
||||
$sButton ='<a href="'.$sUrl.'"><img src="'.$cfg["path"]["images"].'pfeil_runter.gif" class="spaced"></a>';
|
||||
return $sButton;
|
||||
}
|
||||
|
||||
?>
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren