1
0
Fork 0
cl-workflow/includes/functions.workflow.php

871 Zeilen
29 KiB
PHP

2019-11-04 15:22:11 +00:00
<?php
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
/**
* 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
*/
2020-08-20 16:30:16 +00:00
if (!defined('CON_FRAMEWORK')) {
die('Illegal call');
2019-11-04 15:22:11 +00:00
}
cInclude("includes", "functions.con.php");
2020-08-20 16:30:16 +00:00
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);
2019-11-04 15:22:11 +00:00
$tpl2->set('s', 'CLASS', 'text_small');
$tpl2->set('s', 'OPTIONS', 'size=1');
2020-08-20 16:30:16 +00:00
$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', '');
}
2019-11-04 15:22:11 +00:00
$tpl2->next();
2020-08-20 16:30:16 +00:00
}
}
2019-11-04 15:22:11 +00:00
2020-08-20 16:30:16 +00:00
$tpl2->set('d', 'VALUE', '0');
$tpl2->set('d', 'CAPTION', '------------------------------------');
2019-11-04 15:22:11 +00:00
$tpl2->set('d', 'SELECTED', 'disabled');
2020-08-20 16:30:16 +00:00
$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', '');
}
2019-11-04 15:22:11 +00:00
$tpl2->next();
}
2020-08-20 16:30:16 +00:00
}
2019-11-04 15:22:11 +00:00
2020-08-20 16:30:16 +00:00
return $tpl2->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true);
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
function isCurrentEditor($uid) {
global $auth, $cfg;
2019-11-04 15:22:11 +00:00
/* Check if the UID is a group. If yes, check if we are in it */
$user = new User;
2020-08-20 16:30:16 +00:00
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) . "'";
2019-11-04 15:22:11 +00:00
$db2->query($sql);
2020-08-20 16:30:16 +00:00
while ($db2->next_record()) {
if ($db2->f("user_id") == $auth->auth["uid"]) {
return true;
}
2019-11-04 15:22:11 +00:00
}
} else {
2020-08-20 16:30:16 +00:00
if ($uid == $auth->auth["uid"]) {
return true;
}
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
return false;
}
2020-08-20 16:30:16 +00:00
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);
2019-11-04 15:22:11 +00:00
$workflowItem = $userSequence->getWorkflowItem();
2020-08-20 16:30:16 +00:00
if ($workflowItem === false) {
return;
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$wfRights = $workflowItem->getStepRights();
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$artAllocation = new WorkflowArtAllocations;
$artAllocation->select("idartlang = '$idartlang'");
2020-08-20 16:30:16 +00:00
if ($obj = $artAllocation->next()) {
$laststep = $obj->get("lastusersequence");
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$bExistOption = false;
2020-08-20 16:30:16 +00:00
if ($laststep != $idusersequence) {
$wfSelect->set('d', 'VALUE', 'next');
$wfSelect->set('d', 'CAPTION', i18n("Confirm", "workflow"));
$wfSelect->set('d', 'SELECTED', 'SELECTED');
$wfSelect->next();
2019-11-04 15:22:11 +00:00
$bExistOption = true;
2020-08-20 16:30:16 +00:00
}
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();
2019-11-04 15:22:11 +00:00
$bExistOption = true;
2020-08-20 16:30:16 +00:00
}
if ($wfRights["reject"] == true) {
$wfSelect->set('d', 'VALUE', 'reject');
$wfSelect->set('d', 'CAPTION', i18n("Reject article", "workflow"));
$wfSelect->set('d', 'SELECTED', '');
$wfSelect->next();
2019-11-04 15:22:11 +00:00
$bExistOption = true;
2020-08-20 16:30:16 +00:00
}
if ($wfRights["revise"] == true) {
$wfSelect->set('d', 'VALUE', 'revise');
$wfSelect->set('d', 'CAPTION', i18n("Revise article", "workflow"));
$wfSelect->set('d', 'SELECTED', '');
$wfSelect->next();
2019-11-04 15:22:11 +00:00
$bExistOption = true;
2020-08-20 16:30:16 +00:00
}
2019-11-04 15:22:11 +00:00
if ($bExistOption)
2020-08-20 16:30:16 +00:00
return ($wfSelect->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true));
2019-11-04 15:22:11 +00:00
else {
return false;
}
}
#function for inserting todos in wokflow_art_allocation used, when a workflow is associated with a category in content->category
2020-08-20 16:30:16 +00:00
function setUserSequence($idartlang, $defaultidworkflow) {
2019-11-04 15:22:11 +00:00
$wfaa = new WorkflowArtAllocations;
$wfaa->select("idartlang = '$idartlang'");
$idusersequence = 0;
2020-08-20 16:30:16 +00:00
if ($associatedUserSequence = $wfaa->next()) {
2019-11-04 15:22:11 +00:00
$idartallocation = $associatedUserSequence->get("idartallocation");
$wfaa->delete($idartallocation);
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
if ($defaultidworkflow != -1) {
$newObj = $wfaa->create($idartlang);
2020-08-20 16:30:16 +00:00
if (!$newObj) {
2019-11-04 15:22:11 +00:00
/* Try to load */
$newObj = new WorkflowArtAllocation;
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
echo $wfaa->lasterror;
return false;
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
/* Get the first idusersequence for the new item */
$workflowItems = new WorkflowItems;
$workflowItems->select("idworkflow = '$defaultidworkflow' AND position = '1'");
2020-08-20 16:30:16 +00:00
if ($obj = $workflowItems->next()) {
2019-11-04 15:22:11 +00:00
$firstitem = $obj->get("idworkflowitem");
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$workflowUserSequences = new WorkflowUserSequences;
$workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'");
2020-08-20 16:30:16 +00:00
if ($obj = $workflowUserSequences->next()) {
2019-11-04 15:22:11 +00:00
$firstIDUserSequence = $obj->get("idusersequence");
}
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$newObj->set("idusersequence", $firstIDUserSequence);
$newObj->store();
$idusersequence = $newObj->get("idusersequence");
$associatedUserSequence = $newObj;
2020-08-20 16:30:16 +00:00
}
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
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;
2019-11-04 15:22:11 +00:00
}
}
2020-08-20 16:30:16 +00:00
/* 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");
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
$workflowUserSequences = new WorkflowUserSequences;
$workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'");
if ($obj = $workflowUserSequences->next()) {
$firstIDUserSequence = $obj->get("idusersequence");
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
$newObj->set("idusersequence", $firstIDUserSequence);
$newObj->store();
$idusersequence = $newObj->get("idusersequence");
$associatedUserSequence = $newObj;
}
return ($idusersequence);
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
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:
}
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
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;
}
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
function workflowSelect($listid, $default, $idcat) {
global $idclient, $cfg, $frame, $area, $workflowworkflows, $client, $lang, $wfcache, $workflowSelectBox;
2019-11-04 15:22:11 +00:00
$oSelectBox = new cHTMLSelectElement('workflow');
$oSelectBox = $workflowSelectBox;
2020-08-20 16:30:16 +00:00
2019-11-04 15:22:11 +00:00
$default = (int) $default;
2020-08-20 16:30:16 +00:00
$workflowSelectBox->updateAttributes(array("id" => "wfselect" . $idcat));
$workflowSelectBox->updateAttributes(array("name" => "wfselect" . $idcat));
2019-11-04 15:22:11 +00:00
$workflowSelectBox->setDefault($default);
2020-08-20 16:30:16 +00:00
$sButton = '<a href="javascript:setWorkflow(' . $idcat . ', \'' . "wfselect" . $idcat . '\')"><img src="' . $cfg["path"]["images"] . 'submit.gif" class="spaced"></a>';
return $workflowSelectBox->render() . $sButton;
2019-11-04 15:22:11 +00:00
}
2020-08-20 16:30:16 +00:00
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>';
2019-11-04 15:22:11 +00:00
return $sButton;
}
2020-08-20 16:30:16 +00:00
/* Helper functions */
function getWorkflowForCat($idcat) {
global $lang, $cfg;
$idcatlang = getCatLang($idcat, $lang);
$workflows = new WorkflowAllocations;
$workflows->select("idcatlang = '$idcatlang'");
if ($obj = $workflows->next()) {
/* Sanity: Check if the workflow still exists */
$workflow = new Workflow;
$res = $workflow->loadByPrimaryKey($obj->get("idworkflow"));
if ($res == false) {
return 0;
} else {
return $obj->get("idworkflow");
}
}
}
function getCatLang($idcat, $idlang) {
global $lang, $cfg;
$db = new DB_ConLite;
/* Get the idcatlang */
$sql = "SELECT idcatlang FROM "
. $cfg["tab"]["cat_lang"] .
" WHERE idlang = '" . Contenido_Security::escapeDB($idlang, $db) . "' AND
idcat = '" . Contenido_Security::escapeDB($idcat, $db) . "'";
$db->query($sql);
if ($db->next_record()) {
return ($db->f("idcatlang"));
}
}
function prepareWorkflowItems() {
global $action, $lang, $modidcat, $workflowSelectBox, $workflowworkflows, $client, $tpl, $cfg;
$workflowworkflows = new Workflows;
if ($action === 'workflow_inherit_down') {
$tmp = strDeeperCategoriesArray($modidcat);
$asworkflow = getWorkflowForCat($modidcat);
$wfa = new WorkflowAllocations;
foreach ($tmp as $tmp_cat) {
$idcatlang = getCatLang($tmp_cat, $lang);
if ($asworkflow == 0) {
$wfa->select("idcatlang = '$idcatlang'");
if ($item = $wfa->next()) {
$wfa->delete($item->get("idallocation"));
# delete user sequences for listing in tasklist for each included article
$oArticles = new ArticleCollection(array('idcat' => $idcatlang, 'start' => true, 'offline' => true));
while ($oArticle = $oArticles->nextArticle()) {
setUserSequence($oArticle->getField('idartlang'), -1);
}
}
} else {
$wfa->select("idcatlang = '$idcatlang'");
if ($item = $wfa->next()) {
$item->setWorkflow($asworkflow);
$item->store();
} else {
$wfa->create($asworkflow, $idcatlang);
# generate user sequences for listing in tasklist for each included article
$oArticles = new ArticleCollection(array('idcat' => $tmp_cat, 'start' => true, 'offline' => true));
while ($oArticle = $oArticles->nextArticle()) {
setUserSequence($oArticle->getField('idartlang'), $asworkflow);
}
}
}
}
}
if ($action == "workflow_cat_assign") {
$seltpl = "wfselect" . $modidcat;
$wfa = new WorkflowAllocations;
$idcatlang = getCatLang($modidcat, $lang);
#associate workflow with category
if ($GLOBALS[$seltpl] != 0) {
$wfa->select("idcatlang = '$idcatlang'");
if ($item = $wfa->next()) {
$item->setWorkflow($GLOBALS[$seltpl]);
$item->store();
} else {
$wfa->create($GLOBALS[$seltpl], $idcatlang);
}
# generate user sequences for listing in tasklist for each included article
$oArticles = new ArticleCollection(array('idcat' => $modidcat, 'start' => true, 'offline' => true));
while ($oArticle = $oArticles->nextArticle()) {
setUserSequence($oArticle->getField('idartlang'), $GLOBALS[$seltpl]);
}
#unlink workflow with category
} else {
$wfa->select("idcatlang = '$idcatlang'");
if ($item = $wfa->next()) {
$alloc = $item->get("idallocation");
}
$wfa->delete($alloc);
# delete user sequences for listing in tasklist for each included article
$oArticles = new ArticleCollection(array('idcat' => $modidcat, 'start' => true, 'offline' => true));
while ($oArticle = $oArticles->nextArticle()) {
setUserSequence($oArticle->getField('idartlang'), -1);
}
}
}
$workflowSelectBox = new cHTMLSelectElement("foo");
$workflowSelectBox->setClass("text_medium");
$workflowworkflows->select("idclient = '$client' AND idlang = '" . Contenido_Security::escapeDB($lang, null) . "'");
$workflowOption = new cHTMLOptionElement("--- " . i18n("None", "workflow") . " ---", 0);
$workflowSelectBox->addOptionElement(0, $workflowOption);
while ($workflow = $workflowworkflows->next()) {
$workflowOption = new cHTMLOptionElement($workflow->get("name"), $workflow->get("idworkflow"));
$workflowSelectBox->addOptionElement($workflow->get("idworkflow"), $workflowOption);
}
$workflowSelectBox->updateAttributes(array("id" => "wfselect{IDCAT}"));
$workflowSelectBox->updateAttributes(array("name" => "wfselect{IDCAT}"));
$tpl->set('s', 'PLUGIN_WORKFLOW', $workflowSelectBox->render() . '<a href="javascript:setWorkflow({IDCAT}, \\\'wfselect{IDCAT}\\\')"><img src="' . $cfg["path"]["images"] . 'submit.gif" class="spaced"></a>');
$tpl->set('s', 'PLUGIN_WORKFLOW_TRANSLATION', i18n("Inherit workflow down", "workflow"));
}
function piworkflowCategoryRenderColumn($idcat, $type) {
switch ($type) {
case "workflow":
$value = workflowInherit($idcat) . '<script type="text/javascript" id="wf' . $idcat . '">printWorkflowSelect(' . $idcat . ', ' . (int) getWorkflowForCat($idcat) . ');</script>';
break;
}
return ($value);
}
function piworkflowCategoryColumns($array) {
prepareWorkflowItems();
$myarray = array("workflow" => i18n("Workflow", "workflow"));
return ($myarray);
}
function piworkflowProcessActions($array) {
global $idcat;
$defaultidworkflow = getWorkflowForCat($idcat);
if ($defaultidworkflow != 0) {
$narray = array("todo",
"wfartconf",
"wftplconf",
"wfonline",
"wflocked",
"duplicate",
"delete",
"usetime");
} else {
$narray = $array;
}
return ($narray);
}
function piworkflowRenderAction($idcat, $idart, $idartlang, $type) {
global $area, $frame, $idtpl, $cfg, $alttitle, $tmp_articletitle;
global $tmp_artconf, $onlinelink, $lockedlink, $tplconf_link;
$defaultidworkflow = getWorkflowForCat($idcat);
$idusersequence = getCurrentUserSequence($idartlang, $defaultidworkflow);
$associatedUserSequence = new WorkflowUserSequence;
$associatedUserSequence->loadByPrimaryKey($idusersequence);
$currentEditor = $associatedUserSequence->get("iduser");
$workflowItem = $associatedUserSequence->getWorkflowItem();
if (isCurrentEditor($associatedUserSequence->get("iduser"))) {
/* Query rights for this user */
$wfRights = $workflowItem->getStepRights();
$mayEdit = true;
} else {
$wfRights = "";
$mayEdit = false;
}
switch ($type) {
case "wfartconf":
if ($wfRights["propertyedit"] == true) {
return $tmp_artconf;
}
break;
case "wfonline":
if ($wfRights["publish"] == true) {
return $onlinelink;
}
break;
case "wflocked":
if ($wfRights["lock"] == true) {
return $lockedlink;
}
break;
case "wftplconf":
if ($wfRights["templateedit"] == true) {
return $tplconf_link;
}
default:
break;
}
return "";
}
function piworkflowProcessArticleColumns($array) {
global $idcat, $action, $modidartlang;
if ($action == "workflow_do_action") {
$selectedAction = "wfselect" . $modidartlang;
doWorkflowAction($modidartlang, $GLOBALS[$selectedAction]);
}
$defaultidworkflow = getWorkflowForCat($idcat);
if ($defaultidworkflow != 0) {
$narray = array();
$bInserted = false;
foreach ($array as $sKey => $sValue) {
$narray[$sKey] = $sValue;
if ($sKey == 'title' && !$bInserted) {
$narray["wftitle"] = $array["title"];
$narray["wfstep"] = i18n("Workflow Step", "cl-workflow");
$narray["wfaction"] = i18n("Workflow Action", "cl-workflow");
$narray["wfeditor"] = i18n("Workflow Editor", "cl-workflow");
$narray["wflaststatus"] = i18n("Last status", "cl-workflow");
$bInserted = true;
}
}
unset($narray['title']);
unset($narray['changeddate']);
unset($narray['publisheddate']);
unset($narray['sortorder']);
} else {
$narray = $array;
}
return ($narray);
}
function piworkflowAllowArticleEdit($idlang, $idcat, $idart, $user) {
$defaultidworkflow = getWorkflowForCat($idcat);
if ($defaultidworkflow == 0) {
return true;
}
$idartlang = getArtLang($idart, $idlang);
$idusersequence = getCurrentUserSequence($idartlang, $defaultidworkflow);
$associatedUserSequence = new WorkflowUserSequence;
$associatedUserSequence->loadByPrimaryKey($idusersequence);
$currentEditor = $associatedUserSequence->get("iduser");
$workflowItem = $associatedUserSequence->getWorkflowItem();
if (isCurrentEditor($associatedUserSequence->get("iduser"))) {
$wfRights = $workflowItem->getStepRights();
$mayEdit = true;
} else {
$wfRights = "";
$mayEdit = false;
}
if ($wfRights["articleedit"] == true) {
return true;
} else {
return false;
}
}
function piworkflowRenderColumn($idcat, $idart, $idartlang, $column) {
global $area, $frame, $idtpl, $cfg, $alttitle, $tmp_articletitle;
$defaultidworkflow = getWorkflowForCat($idcat);
$idusersequence = getCurrentUserSequence($idartlang, $defaultidworkflow);
$associatedUserSequence = new WorkflowUserSequence;
$associatedUserSequence->loadByPrimaryKey($idusersequence);
$currentEditor = $associatedUserSequence->get("iduser");
$workflowItem = $associatedUserSequence->getWorkflowItem();
if (isCurrentEditor($associatedUserSequence->get("iduser"))) {
$wfRights = $workflowItem->getStepRights();
$mayEdit = true;
} else {
$wfRights = "";
$mayEdit = false;
}
switch ($column) {
case "wftitle":
if ($wfRights["articleedit"] == true) {
$mtitle = $tmp_articletitle;
} else {
$mtitle = strip_tags($tmp_articletitle);
}
return ($mtitle);
case "wfstep":
if ($workflowItem === false) {
return "nobody";
}
return ($workflowItem->get("position") . ".) " . $workflowItem->get("name"));
case "wfeditor":
$sEditor = getGroupOrUserName($currentEditor);
if (!$sEditor) {
$sEditor = "nobody";
}
return $sEditor;
case "wfaction":
$defaultidworkflow = getWorkflowForCat($idcat);
$idusersequence = getCurrentUserSequence($idartlang, $defaultidworkflow);
$sActionSelect = getActionSelect($idartlang, $idusersequence);
if (!$sActionSelect) {
$mayEdit = false;
}
$form = new UI_Form("wfaction" . $idartlang, "main.php", "get");
$form->setVar("area", $area);
$form->setVar("action", "workflow_do_action");
$form->setVar("frame", $frame);
$form->setVar("idcat", $idcat);
$form->setVar("modidartlang", $idartlang);
$form->setVar("idtpl", $idtpl);
$form->add("select", '<table cellspacing="0" border="0"><tr><td>' . $sActionSelect . '</td><td>');
$form->add("button", '<input type="image" src="' . $cfg["path"]["htmlpath"] . $cfg["path"]["images"] . "submit.gif" . '"></tr></table>');
if ($mayEdit == true) {
return ($form->render(true));
} else {
return '--- ' . i18n("None") . ' ---';
}
case "wflaststatus":
$sStatus = getLastWorkflowStatus($idartlang);
if (!$sStatus) {
$sStatus = '--- ' . i18n("None") . ' ---';
}
return $sStatus;
}
}
function piworkflowCreateTasksFolder() {
global $sess, $cfg;
$item = array();
/* Create workflow tasks folder */
$tmp_mstr = '<a href="javascript://" onclick="javascript:conMultiLink(\'%s\', \'%s\', \'%s\', \'%s\')">%s</a>';
$mstr = sprintf($tmp_mstr, 'right_bottom',
$sess->url("main.php?area=con_workflow&frame=4"),
'right_top',
$sess->url("main.php?area=con_workflow&frame=3"),
'Workflow / Todo');
$item["image"] = '<img src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . 'workflow/images/workflow_erstellen.gif">';
$item["title"] = $mstr;
return ($item);
}