add files
180
classes/class.workflow.php
Normale Datei
|
@ -0,0 +1,180 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow management class
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.6
|
||||||
|
* @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.workflow.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$cfg["tab"]["workflow"] = $cfg['sql']['sqlprefix'] . "_piwf_workflow";
|
||||||
|
$cfg["tab"]["workflow_allocation"] = $cfg['sql']['sqlprefix'] . "_piwf_allocation";
|
||||||
|
$cfg["tab"]["workflow_art_allocation"] = $cfg['sql']['sqlprefix'] . "_piwf_art_allocation";
|
||||||
|
$cfg["tab"]["workflow_items"] = $cfg['sql']['sqlprefix'] . "_piwf_items";
|
||||||
|
$cfg["tab"]["workflow_user_sequences"] = $cfg['sql']['sqlprefix'] . "_piwf_user_sequences";
|
||||||
|
$cfg["tab"]["workflow_actions"] = $cfg['sql']['sqlprefix'] . "_piwf_actions";
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflowactions.php');
|
||||||
|
plugin_include('workflow', 'classes/class.workflowallocation.php');
|
||||||
|
plugin_include('workflow', 'classes/class.workflowartallocation.php');
|
||||||
|
plugin_include('workflow', 'classes/class.workflowitems.php');
|
||||||
|
plugin_include('workflow', 'classes/class.workflowusersequence.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Workflows
|
||||||
|
* Class for workflow management
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class Workflows extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param none
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow"], "idworkflow");
|
||||||
|
$this->_setItemClass("Workflow");
|
||||||
|
}
|
||||||
|
|
||||||
|
function create() {
|
||||||
|
global $auth, $client, $lang;
|
||||||
|
$newitem = parent::createNewItem();
|
||||||
|
$newitem->setField("created", date("Y-m-d H-i-s"));
|
||||||
|
$newitem->setField("idauthor", $auth->auth["uid"]);
|
||||||
|
$newitem->setField("idclient", $client);
|
||||||
|
$newitem->setField("idlang", $lang);
|
||||||
|
$newitem->store();
|
||||||
|
|
||||||
|
return ($newitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes all corresponding informations to this workflow and delegate call to parent
|
||||||
|
* @param integer $idWorkflow - id of workflow to delete
|
||||||
|
*/
|
||||||
|
function delete($idWorkflow) {
|
||||||
|
global $cfg;
|
||||||
|
$oDb = new DB_ConLite();
|
||||||
|
|
||||||
|
$aItemIdsDelete = array();
|
||||||
|
$sSql = 'SELECT idworkflowitem FROM ' . $cfg["tab"]["workflow_items"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
while ($oDb->next_record()) {
|
||||||
|
array_push($aItemIdsDelete, Contenido_Security::escapeDB($oDb->f('idworkflowitem'), $oDb));
|
||||||
|
}
|
||||||
|
|
||||||
|
$aUserSequencesDelete = array();
|
||||||
|
$sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
while ($oDb->next_record()) {
|
||||||
|
array_push($aUserSequencesDelete, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb));
|
||||||
|
}
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_actions"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_items"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_allocation"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequencesDelete) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
parent::delete($idWorkflow);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Workflow
|
||||||
|
* Class for a single workflow item
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class Workflow extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @global array $cfg
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow"], "idworkflow");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
132
classes/class.workflowactions.php
Normale Datei
|
@ -0,0 +1,132 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Management of per-workflowitem actions
|
||||||
|
*
|
||||||
|
* 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.workflowactions.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowActions
|
||||||
|
* Class for workflow action collections
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowActions extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow_actions"], "idworkflowaction");
|
||||||
|
$this->_setItemClass("WorkflowAction");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type $idworkflowitem
|
||||||
|
* @param type $action
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function get($idworkflowitem, $action)
|
||||||
|
{
|
||||||
|
$this->select("idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."' AND action = '".Contenido_Security::escapeDB($action, NULL)."'");
|
||||||
|
if ($this->next())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAvailableWorkflowActions ()
|
||||||
|
{
|
||||||
|
$availableWorkflowActions = array (
|
||||||
|
"publish" => i18n("Publish article", "workflow"),
|
||||||
|
"lock" => i18n("Lock article", "workflow"),
|
||||||
|
"last" => i18n("Move back to last editor", "workflow"),
|
||||||
|
"reject" => i18n("Reject article", "workflow"),
|
||||||
|
"articleedit" => i18n("Edit article content", "workflow"),
|
||||||
|
"propertyedit" => i18n("Edit article properties", "workflow"),
|
||||||
|
"templateedit" => i18n("Edit template", "workflow"),
|
||||||
|
"revise" => i18n("Revise article", "workflow"));
|
||||||
|
|
||||||
|
return($availableWorkflowActions);
|
||||||
|
}
|
||||||
|
|
||||||
|
function set ($idworkflowitem, $action)
|
||||||
|
{
|
||||||
|
$this->select("idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."' AND action = '".Contenido_Security::escapeDB($action, NULL)."'");
|
||||||
|
if (!$this->next())
|
||||||
|
{
|
||||||
|
$newitem = parent::createNewItem();
|
||||||
|
$newitem->setField("idworkflowitem",$idworkflowitem);
|
||||||
|
$newitem->setField("action",$action);
|
||||||
|
$newitem->store();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove ($idworkflowitem, $action)
|
||||||
|
{
|
||||||
|
$this->select("idworkflowitem = '$idworkflowitem' AND action = '$action'");
|
||||||
|
if ($item = $this->next())
|
||||||
|
{
|
||||||
|
$this->delete($item->getField("idworkflowaction"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function select ($where = "", $group_by = "", $order_by = "", $limit = "")
|
||||||
|
{
|
||||||
|
global $client;
|
||||||
|
|
||||||
|
return parent::select($where, $group_by, $order_by, $limit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowAction
|
||||||
|
* Class for a single workflow action
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowAction extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @global type $cfg
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow_actions"], "idworkflowaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
242
classes/class.workflowallocation.php
Normale Datei
|
@ -0,0 +1,242 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow allocation class
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.5
|
||||||
|
* @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.workflowallocation.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowAllocations
|
||||||
|
* Class for workflow allocation management
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowAllocations extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow_allocation"], "idallocation");
|
||||||
|
$this->_setItemClass("WorkflowAllocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowAllocations()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete ($idallocation)
|
||||||
|
{
|
||||||
|
global $cfg, $lang;
|
||||||
|
|
||||||
|
$obj = new WorkflowAllocation;
|
||||||
|
$obj->loadByPrimaryKey($idallocation);
|
||||||
|
|
||||||
|
$idcatlang = $obj->get("idcatlang");
|
||||||
|
|
||||||
|
$db = new DB_ConLite;
|
||||||
|
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat_lang"]." WHERE idcatlang = '".Contenido_Security::toInteger($idcatlang)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
$db->next_record();
|
||||||
|
$idcat = $db->f("idcat");
|
||||||
|
|
||||||
|
$sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
while ($db->next_record())
|
||||||
|
{
|
||||||
|
$idarts[] = $db->f("idart");
|
||||||
|
}
|
||||||
|
|
||||||
|
$idartlangs = array();
|
||||||
|
|
||||||
|
if (is_array($idarts))
|
||||||
|
{
|
||||||
|
foreach ($idarts as $idart)
|
||||||
|
{
|
||||||
|
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' and idlang = '".Contenido_Security::toInteger($lang)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
if ($db->next_record())
|
||||||
|
{
|
||||||
|
$idartlangs[] = $db->f("idartlang");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflowArtAllocation = new WorkflowArtAllocation;
|
||||||
|
$workflowArtAllocations = new WorkflowArtAllocations;
|
||||||
|
|
||||||
|
foreach ($idartlangs as $idartlang)
|
||||||
|
{
|
||||||
|
$workflowArtAllocation->loadBy("idartlang", $idartlang);
|
||||||
|
$workflowArtAllocations->delete($workflowArtAllocation->get("idartallocation"));
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::delete($idallocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
function create ($idworkflow, $idcatlang)
|
||||||
|
{
|
||||||
|
$this->select("idcatlang = '$idcatlang'");
|
||||||
|
|
||||||
|
if ($this->next() !== false)
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Category already has a workflow assigned", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflows = new Workflows;
|
||||||
|
$workflows->select("idworkflow = '$idworkflow'");
|
||||||
|
|
||||||
|
if ($workflows->next() === false)
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Workflow doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$newitem = parent::createNewItem();
|
||||||
|
if (!$newitem->setWorkflow($idworkflow))
|
||||||
|
{
|
||||||
|
$this->lasterror = $newitem->lasterror;
|
||||||
|
$workflows->delete($newitem->getField("idallocation"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$newitem->setCatLang($idcatlang))
|
||||||
|
{
|
||||||
|
$this->lasterror = $newitem->lasterror;
|
||||||
|
$workflows->delete($newitem->getField("idallocation"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newitem->store();
|
||||||
|
|
||||||
|
return ($newitem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowAllocation
|
||||||
|
* Class for a single workflow allocation item
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowAllocation extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
parent::__construct($cfg["tab"]["workflow_allocation"], "idallocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowAllocation()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridden setField function. Users should only use setWorkflow.
|
||||||
|
* @param string $field Void field since we override the usual setField function
|
||||||
|
* @param string $value Void field since we override the usual setField function
|
||||||
|
*/
|
||||||
|
function setField($field, $value, $bSafe = true)
|
||||||
|
{
|
||||||
|
die("Don't use setField for WorkflowAllocation items! Use setWorkflow instead!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setWorkflow sets the workflow for the current item.
|
||||||
|
* @param int $idworkflow Workflow-ID to set the item to
|
||||||
|
*/
|
||||||
|
function setWorkflow ($idworkflow)
|
||||||
|
{
|
||||||
|
$workflows = new Workflows;
|
||||||
|
|
||||||
|
$workflows->select("idworkflow = '$idworkflow'");
|
||||||
|
|
||||||
|
if ($workflows->next() === false)
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Workflow doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::setField("idworkflow", $idworkflow);
|
||||||
|
parent::store();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setCatLang sets the idcatlang for the current item. Should
|
||||||
|
* only be called by the create function.
|
||||||
|
* @param int $idcatlang idcatlang to set.
|
||||||
|
*/
|
||||||
|
function setCatLang ($idcatlang)
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
$allocations = new WorkflowAllocations;
|
||||||
|
|
||||||
|
$allocations->select("idcatlang = '$idcatlang'");
|
||||||
|
|
||||||
|
if ($allocations->next() !== false)
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Category already has a workflow assigned", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = new DB_ConLite;
|
||||||
|
$sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcatlang = '".Contenido_Security::toInteger($idcatlang)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
if (!$db->next_record())
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Category doesn't exist, assignment failed", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::setField("idcatlang", $idcatlang);
|
||||||
|
parent::store();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
361
classes/class.workflowartallocation.php
Normale Datei
|
@ -0,0 +1,361 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow allocation class
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.4
|
||||||
|
* @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
|
||||||
|
* modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
*
|
||||||
|
* $Id: class.workflowartallocation.php 128 2019-07-03 11:58:28Z oldperl $:
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowArtAllocations
|
||||||
|
* Class for workflow art allocation management
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowArtAllocations extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow_art_allocation"], "idartallocation");
|
||||||
|
$this->_setItemClass("WorkflowArtAllocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowArtAllocations()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function create ($idartlang)
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
$sql = "SELECT idartlang FROM " .$cfg["tab"]["art_lang"].
|
||||||
|
" WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $this->db)."'";
|
||||||
|
|
||||||
|
$this->db->query($sql);
|
||||||
|
if (!$this->db->next_record())
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Article doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->select("idartlang = '$idartlang'");
|
||||||
|
|
||||||
|
if ($this->next() !== false)
|
||||||
|
{
|
||||||
|
$this->lasterror = i18n("Article is already assigned to a usersequence step.", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newitem = parent::createNewItem();
|
||||||
|
$newitem->setField("idartlang",$idartlang);
|
||||||
|
$newitem->store();
|
||||||
|
|
||||||
|
return ($newitem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowArtAllocation
|
||||||
|
* Class for a single workflow allocation item
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowArtAllocation extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
parent::__construct($cfg["tab"]["workflow_art_allocation"], "idartallocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowArtAllocation()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWorkflowItem ()
|
||||||
|
{
|
||||||
|
$userSequence = new WorkflowUserSequence;
|
||||||
|
$userSequence->loadByPrimaryKey($this->values["idusersequence"]);
|
||||||
|
|
||||||
|
return ($userSequence->getWorkflowItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current item position
|
||||||
|
* @param string $field Void field since we override the usual setField function
|
||||||
|
* @param string $value Void field since we override the usual setField function
|
||||||
|
*/
|
||||||
|
function currentItemPosition()
|
||||||
|
{
|
||||||
|
$idworkflowitem = $this->get("idworkflowitem");
|
||||||
|
|
||||||
|
$workflowItems = new WorkflowItems;
|
||||||
|
$workflowItems->select("idworkflowitem = '$idworkflowitem'");
|
||||||
|
|
||||||
|
if ($item = $workflowItems->next())
|
||||||
|
{
|
||||||
|
return ($item->get("position"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current user position
|
||||||
|
* @param string $field Void field since we override the usual setField function
|
||||||
|
* @param string $value Void field since we override the usual setField function
|
||||||
|
*/
|
||||||
|
function currentUserPosition()
|
||||||
|
{
|
||||||
|
return ($this->get("position"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overriden store function to send mails
|
||||||
|
* @param none
|
||||||
|
*/
|
||||||
|
function store()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
$sMailhost = getSystemProperty('system', 'mail_host');
|
||||||
|
if ($sMailhost == '') {
|
||||||
|
$sMailhost = 'localhost';
|
||||||
|
}
|
||||||
|
|
||||||
|
//modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
$oMail = new PHPMailer();
|
||||||
|
$oMail->Host = $sMailhost;
|
||||||
|
$oMail->IsHTML(0);
|
||||||
|
$oMail->WordWrap = 1000;
|
||||||
|
$oMail->IsMail();
|
||||||
|
|
||||||
|
if (array_key_exists("idusersequence",$this->modifiedValues))
|
||||||
|
{
|
||||||
|
$usersequence = new WorkflowUserSequence;
|
||||||
|
$usersequence->loadByPrimaryKey($this->values["idusersequence"]);
|
||||||
|
|
||||||
|
$email = $usersequence->get("emailnoti");
|
||||||
|
$escal = $usersequence->get("escalationnoti");
|
||||||
|
|
||||||
|
if ($email == 1 || $escal == 1)
|
||||||
|
{
|
||||||
|
/* Grab the required informations */
|
||||||
|
$curEditor = getGroupOrUserName($usersequence->get("iduser"));
|
||||||
|
$idartlang = $this->get("idartlang");
|
||||||
|
$timeunit = $usersequence->get("timeunit");
|
||||||
|
$timelimit = $usersequence->get("timelimit");
|
||||||
|
|
||||||
|
$db = new DB_ConLite;
|
||||||
|
$sql = "SELECT author, title, idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $db)."'";
|
||||||
|
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
if ($db->next_record())
|
||||||
|
{
|
||||||
|
$idart = $db->f("idart");
|
||||||
|
$title = $db->f("title");
|
||||||
|
$author = $db->f("author");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract category */
|
||||||
|
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::escapeDB($idart, $db)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
if ($db->next_record())
|
||||||
|
{
|
||||||
|
$idcat = $db->f("idcat");
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT name FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::escapeDB($idcat, $db)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
if ($db->next_record())
|
||||||
|
{
|
||||||
|
$catname = $db->f("name");
|
||||||
|
}
|
||||||
|
|
||||||
|
$starttime = $this->get("starttime");
|
||||||
|
|
||||||
|
|
||||||
|
$starttime = strtotime (substr_replace (substr (substr ($starttime,0,2).chunk_split (substr ($starttime,2,6),2,"-").chunk_split (substr ($starttime,8),2,":"),0,19)," ",10,1));
|
||||||
|
|
||||||
|
switch ($timeunit)
|
||||||
|
{
|
||||||
|
case "Seconds":
|
||||||
|
$maxtime = $starttime + $timelimit;
|
||||||
|
break;
|
||||||
|
case "Minutes":
|
||||||
|
$maxtime = $starttime + ($timelimit * 60);
|
||||||
|
break;
|
||||||
|
case "Hours":
|
||||||
|
$maxtime = $starttime + ($timelimit * 3600);
|
||||||
|
break;
|
||||||
|
case "Days":
|
||||||
|
$maxtime = $starttime + ($timelimit * 86400);
|
||||||
|
break;
|
||||||
|
case "Weeks":
|
||||||
|
$maxtime = $starttime + ($timelimit * 604800);
|
||||||
|
break;
|
||||||
|
case "Months":
|
||||||
|
$maxtime = $starttime + ($timelimit * 2678400);
|
||||||
|
break;
|
||||||
|
case "Years":
|
||||||
|
$maxtime = $starttime + ($timelimit * 31536000);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$maxtime = $starttime + $timelimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($email == 1)
|
||||||
|
{
|
||||||
|
$email = "Hello %s,\n\n".
|
||||||
|
"you are assigned as the next editor for the Article %s.\n\n".
|
||||||
|
"More informations:\n".
|
||||||
|
"Article: %s\n".
|
||||||
|
"Category: %s\n".
|
||||||
|
"Editor: %s\n".
|
||||||
|
"Author: %s\n".
|
||||||
|
"Editable from: %s\n".
|
||||||
|
"Editable to: %s\n";
|
||||||
|
|
||||||
|
$filledMail = sprintf( $email,
|
||||||
|
$curEditor,
|
||||||
|
$title,
|
||||||
|
$title,
|
||||||
|
$catname,
|
||||||
|
$curEditor,
|
||||||
|
$author,
|
||||||
|
date("Y-m-d H:i:s", $starttime),
|
||||||
|
date("Y-m-d H:i:s", $maxtime));
|
||||||
|
$user = new User;
|
||||||
|
|
||||||
|
if (isGroup($usersequence->get("iduser")))
|
||||||
|
{
|
||||||
|
$sql = "select idgroupuser, user_id FROM ". $cfg["tab"]["groupmembers"] ." WHERE
|
||||||
|
group_id = '".Contenido_Security::escapeDB($usersequence->get("iduser"), $db)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
while ($db->next_record())
|
||||||
|
{
|
||||||
|
$user->loadUserByUserID($db->f("user_id"));
|
||||||
|
//modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
$oMail->AddAddress($user->getField("email"), "");
|
||||||
|
$oMail->Subject = stripslashes (i18n('Workflow notification'));
|
||||||
|
$oMail->Body = $filledMail;
|
||||||
|
$oMail->Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$user->loadUserByUserID($usersequence->get("iduser"));
|
||||||
|
//modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
$oMail->AddAddress($user->getField("email"), "");
|
||||||
|
$oMail->Subject = stripslashes (i18n('Workflow notification'));
|
||||||
|
$oMail->Body = $filledMail;
|
||||||
|
$oMail->Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$email = "Hello %s,\n\n".
|
||||||
|
"you are assigned as the escalator for the Article %s.\n\n".
|
||||||
|
"More informations:\n".
|
||||||
|
"Article: %s\n".
|
||||||
|
"Category: %s\n".
|
||||||
|
"Editor: %s\n".
|
||||||
|
"Author: %s\n".
|
||||||
|
"Editable from: %s\n".
|
||||||
|
"Editable to: %s\n";
|
||||||
|
|
||||||
|
$filledMail = sprintf( $email,
|
||||||
|
$curEditor,
|
||||||
|
$title,
|
||||||
|
$title,
|
||||||
|
$catname,
|
||||||
|
$curEditor,
|
||||||
|
$author,
|
||||||
|
date("Y-m-d H:i:s", $starttime),
|
||||||
|
date("Y-m-d H:i:s", $maxtime));
|
||||||
|
|
||||||
|
$user = new User;
|
||||||
|
|
||||||
|
if (isGroup($usersequence->get("iduser")))
|
||||||
|
{
|
||||||
|
|
||||||
|
$sql = "select idgroupuser, user_id FROM ". $cfg["tab"]["groupmembers"] ." WHERE
|
||||||
|
group_id = '".Contenido_Security::escapeDB($usersequence->get("iduser"), $db)."'";
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
while ($db->next_record())
|
||||||
|
{
|
||||||
|
$user->loadUserByUserID($db->f("user_id"));
|
||||||
|
echo "mail to ".$user->getField("email")."<br>";
|
||||||
|
//modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
$oMail->AddAddress($user->getField("email"), "");
|
||||||
|
$oMail->Subject = stripslashes (i18n('Workflow escalation'));
|
||||||
|
$oMail->Body = $filledMail;
|
||||||
|
$oMail->Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$user->loadUserByUserID($usersequence->get("iduser"));
|
||||||
|
echo "mail to ".$user->getField("email")."<br>";
|
||||||
|
//modified : 2008-06-25 - use php mailer class instead of mail()
|
||||||
|
$oMail->AddAddress($user->getField("email"), "");
|
||||||
|
$oMail->Subject = stripslashes (i18n('Workflow escalation'));
|
||||||
|
$oMail->Body = $filledMail;
|
||||||
|
$oMail->Send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return parent::store();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
304
classes/class.workflowitems.php
Normale Datei
|
@ -0,0 +1,304 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow items
|
||||||
|
*
|
||||||
|
* 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.workflowitems.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowItems
|
||||||
|
* Class for workflow item management
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowItems extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["workflow_items"], "idworkflowitem");
|
||||||
|
$this->_setItemClass("WorkflowItem");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowItems() {
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete($id) {
|
||||||
|
global $cfg;
|
||||||
|
$item = new WorkflowItem;
|
||||||
|
$item->loadByPrimaryKey($id);
|
||||||
|
$pos = $item->get("position");
|
||||||
|
$idworkflow = $item->get("idworkflow");
|
||||||
|
$oDb = new DB_ConLite();
|
||||||
|
|
||||||
|
$this->select("position > $pos AND idworkflow = '" . Contenido_Security::escapeDB($idworkflow, $oDb) . "'");
|
||||||
|
while ($obj = $this->next()) {
|
||||||
|
$obj->setPosition($obj->get("position") - 1);
|
||||||
|
$obj->store();
|
||||||
|
}
|
||||||
|
|
||||||
|
$aUserSequencesDelete = array();
|
||||||
|
$sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem = ' . $id . ';';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
while ($oDb->next_record()) {
|
||||||
|
array_push($aUserSequencesDelete, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb));
|
||||||
|
}
|
||||||
|
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_actions"] . ' WHERE idworkflowitem = ' . Contenido_Security::escapeDB($id, $oDb) . ';';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
|
||||||
|
$this->updateArtAllocation($id, 1);
|
||||||
|
|
||||||
|
if (count($aUserSequencesDelete) > 0) {
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idusersequence in (' . implode(',', $aUserSequencesDelete) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateArtAllocation($idworkflowitem, $delete = false) {
|
||||||
|
global $idworkflow, $cfg;
|
||||||
|
$oDb = new DB_ConLite();
|
||||||
|
|
||||||
|
$aUserSequences = array();
|
||||||
|
$sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem = ' . Contenido_Security::escapeDB($idworkflowitem, $oDb) . ';';
|
||||||
|
|
||||||
|
$oDb->query($sSql);
|
||||||
|
while ($oDb->next_record()) {
|
||||||
|
array_push($aUserSequences, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb));
|
||||||
|
}
|
||||||
|
|
||||||
|
$aIdArtLang = array();
|
||||||
|
if (count($aUserSequences) > 0) {
|
||||||
|
$sSql = 'SELECT idartlang FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequences) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
while ($oDb->next_record()) {
|
||||||
|
array_push($aIdArtLang, $oDb->f('idartlang'));
|
||||||
|
}
|
||||||
|
$sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequences) . ');';
|
||||||
|
$oDb->query($sSql);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($delete) {
|
||||||
|
parent::delete($idworkflowitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($aIdArtLang as $iIdArtLang) {
|
||||||
|
setUserSequence($iIdArtLang, $idworkflow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function swap($idworkflow, $pos1, $pos2) {
|
||||||
|
$this->select("idworkflow = '$idworkflow' AND position = '$pos1'");
|
||||||
|
if (($item = $this->next()) === false) {
|
||||||
|
$this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pos1ID = $item->getField("idworkflowitem");
|
||||||
|
|
||||||
|
$this->select("idworkflow = '$idworkflow' AND position = '$pos2'");
|
||||||
|
if (($item = $this->next()) === false) {
|
||||||
|
$this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pos2ID = $item->getField("idworkflowitem");
|
||||||
|
|
||||||
|
$item = new WorkflowItem();
|
||||||
|
$item->loadByPrimaryKey($pos1ID);
|
||||||
|
$item->setPosition($pos2);
|
||||||
|
$item->store();
|
||||||
|
$item->loadByPrimaryKey($pos2ID);
|
||||||
|
$item->setPosition($pos1);
|
||||||
|
$item->store();
|
||||||
|
|
||||||
|
$this->updateArtAllocation($pos1ID);
|
||||||
|
$this->updateArtAllocation($pos2ID);
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function create($idworkflow) {
|
||||||
|
$workflows = new Workflows;
|
||||||
|
|
||||||
|
$workflows->select("idworkflow = '$idworkflow'");
|
||||||
|
|
||||||
|
if ($workflows->next() === false) {
|
||||||
|
$this->lasterror = i18n("Can't add item to workflow: Workflow doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->select("idworkflow = '$idworkflow'", "", "position DESC", "1");
|
||||||
|
|
||||||
|
$item = $this->next();
|
||||||
|
|
||||||
|
if ($item === false) {
|
||||||
|
$lastPos = 1;
|
||||||
|
} else {
|
||||||
|
$lastPos = $item->getField("position") + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newItem = parent::createNewItem();
|
||||||
|
if ($newItem->init($idworkflow, $lastPos) === false) {
|
||||||
|
$this->delete($newItem->getField("idworkflowitem"));
|
||||||
|
$this->lasterror = $newItem->lasterror;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item === false) {
|
||||||
|
$this->updateArtAllocation(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($newItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowItem
|
||||||
|
* Class for a single workflow item
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowItem extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
parent::__construct($cfg["tab"]["workflow_items"], "idworkflowitem");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowItem() {
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getStepRights() {
|
||||||
|
$idwfi = $this->values["idworkflowitem"];
|
||||||
|
$workflowActions = new WorkflowActions;
|
||||||
|
|
||||||
|
$actions = WorkflowActions::getAvailableWorkflowActions();
|
||||||
|
|
||||||
|
foreach ($actions as $key => $value) {
|
||||||
|
$rights[$key] = $workflowActions->get($idwfi, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $rights;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridden setField function.
|
||||||
|
* @param string $field Void field since we override the usual setField function
|
||||||
|
* @param string $value Void field since we override the usual setField function
|
||||||
|
*/
|
||||||
|
function setField($field, $value, $bSafe = TRUE) {
|
||||||
|
if ($this->virgin == true) {
|
||||||
|
$this->lasterror = i18n("No item loaded", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field == "idsequence") {
|
||||||
|
die("You can't set the idsequence field using this method. Use 'create' in the WorkflowItems class.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field == "idworkflow") {
|
||||||
|
die("You can't set the workflow ID using this method. Use 'create' in the WorkflowItems class!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field == "position") {
|
||||||
|
die("You can't set the position ID using this method. Use 'create' or 'swap' to create or move items!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field == "idtask" && $value != 0) {
|
||||||
|
$taskCollection = new WorkflowTasks;
|
||||||
|
$taskCollection->select("idtask = '$value'");
|
||||||
|
if ($taskCollection->next() === false) {
|
||||||
|
$this->lasterror = i18n("Requested task doesn't exist, can't assign", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::setField($field, $value, $bSafe);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init initializes a new wf_items entry. Should
|
||||||
|
* only be called by the create function.
|
||||||
|
* @param int $idworkflow The workflow to set the item to
|
||||||
|
*/
|
||||||
|
function init($idworkflow, $idposition) {
|
||||||
|
global $cfg;
|
||||||
|
|
||||||
|
$workflows = new Workflows;
|
||||||
|
|
||||||
|
$workflows->select("idworkflow = '$idworkflow'");
|
||||||
|
|
||||||
|
if ($workflows->next() === false) {
|
||||||
|
$this->lasterror = i18n("Workflow doesn't exist", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflowItems = new WorkflowItems;
|
||||||
|
$workflowItems->select("position = '$idposition' AND idworkflow = '$idworkflow'");
|
||||||
|
if ($workflowItems->next()) {
|
||||||
|
$this->lasterror = i18n("Position in this workflow already exists.", "workflow");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::setField("idworkflow", $idworkflow);
|
||||||
|
parent::setField("position", $idposition);
|
||||||
|
parent::store();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setPosition Sets the position for an item. Should only be
|
||||||
|
* called by the "swap" function
|
||||||
|
* @param int $idposition The new position ID
|
||||||
|
*/
|
||||||
|
function setPosition($idposition) {
|
||||||
|
parent::setField("position", $idposition);
|
||||||
|
parent::store();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
106
classes/class.workflowtasks.php
Normale Datei
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Simple wrapper for workflow tasks
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.2
|
||||||
|
* @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.workflowtasks.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowTasks
|
||||||
|
* Class for workflow task collections
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.2
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowTasks extends ItemCollection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["tasks"], "idtask");
|
||||||
|
$this->_setItemClass("WorkflowTask");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowTasks()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function create ()
|
||||||
|
{
|
||||||
|
$newitem = parent::createNewItem();
|
||||||
|
return ($newitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
function select ($where = "", $group_by = "", $order_by = "", $limit = "")
|
||||||
|
{
|
||||||
|
global $client;
|
||||||
|
|
||||||
|
if ($where != "")
|
||||||
|
{
|
||||||
|
$where = $where . " AND idclient = '".Contenido_Security::escapeDB($client, NULL)."'";
|
||||||
|
}
|
||||||
|
return parent::select($where, $group_by, $order_by, $limit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class WorkflowTask
|
||||||
|
* Class for a single workflow task item
|
||||||
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
||||||
|
* @version 0.1
|
||||||
|
* @copyright four for business 2003
|
||||||
|
*/
|
||||||
|
class WorkflowTask extends Item {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor Function
|
||||||
|
* @param string $table The table to use as information source
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
global $cfg;
|
||||||
|
parent::__construct($cfg["tab"]["tasks"], "idtask");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated [2011-03-15] Old constructor function for downwards compatibility */
|
||||||
|
function WorkflowTask()
|
||||||
|
{
|
||||||
|
cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()");
|
||||||
|
$this->__construct();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
278
classes/class.workflowusersequence.php
Normale Datei
|
@ -0,0 +1,278 @@
|
||||||
|
<?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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
114
cronjobs/advance_workflow.php
Normale Datei
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Advances to the next step if the time limit is "over"
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.5.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-05-26
|
||||||
|
* modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307]
|
||||||
|
*
|
||||||
|
* $Id: advance_workflow.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('CON_FRAMEWORK', true);
|
||||||
|
|
||||||
|
|
||||||
|
// Contenido startup process
|
||||||
|
include_once ('../../../includes/startup.php');
|
||||||
|
|
||||||
|
cInclude("includes", "cfg_language_de.inc.php");
|
||||||
|
cInclude("includes", "functions.con.php");
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
plugin_include('workflow', 'includes/functions.workflow.php');
|
||||||
|
|
||||||
|
$workflowartallocations = new WorkflowArtAllocations;
|
||||||
|
$workflowusersequences = new WorkflowUserSequences;
|
||||||
|
|
||||||
|
$workflowartallocations->select();
|
||||||
|
|
||||||
|
while ($obj = $workflowartallocations->next())
|
||||||
|
{
|
||||||
|
$starttime = $obj->get("starttime");
|
||||||
|
$idartlang = $obj->get("idartlang");
|
||||||
|
$lastidusersequence = $obj->get("lastusersequence");
|
||||||
|
|
||||||
|
$usersequence = getCurrentUserSequence($idartlang,0);
|
||||||
|
|
||||||
|
if ($usersequence != $lastidusersequence)
|
||||||
|
{
|
||||||
|
|
||||||
|
$workflowusersequences->select("idusersequence = '$usersequence'");
|
||||||
|
|
||||||
|
if ($wfobj = $workflowusersequences->next())
|
||||||
|
{
|
||||||
|
$wfitem = $wfobj->get("idworkflowitem");
|
||||||
|
$pos = $wfobj->get("position");
|
||||||
|
$timeunit = $wfobj->get("timeunit");
|
||||||
|
$timelimit = $wfobj->get("timelimit");
|
||||||
|
}
|
||||||
|
|
||||||
|
$starttime = strtotime (substr_replace (substr (substr ($starttime,0,2).chunk_split (substr ($starttime,2,6),2,"-").chunk_split (substr ($starttime,8),2,":"),0,19)," ",10,1));
|
||||||
|
switch ($timeunit)
|
||||||
|
{
|
||||||
|
case "Seconds":
|
||||||
|
$maxtime = $starttime + $timelimit;
|
||||||
|
break;
|
||||||
|
case "Minutes":
|
||||||
|
$maxtime = $starttime + ($timelimit * 60);
|
||||||
|
break;
|
||||||
|
case "Hours":
|
||||||
|
$maxtime = $starttime + ($timelimit * 3600);
|
||||||
|
break;
|
||||||
|
case "Days":
|
||||||
|
$maxtime = $starttime + ($timelimit * 86400);
|
||||||
|
break;
|
||||||
|
case "Weeks":
|
||||||
|
$maxtime = $starttime + ($timelimit * 604800);
|
||||||
|
break;
|
||||||
|
case "Months":
|
||||||
|
$maxtime = $starttime + ($timelimit * 2678400);
|
||||||
|
break;
|
||||||
|
case "Years":
|
||||||
|
$maxtime = $starttime + ($timelimit * 31536000);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$maxtime = $starttime + $timelimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($maxtime < time())
|
||||||
|
{
|
||||||
|
$pos = $pos + 1;
|
||||||
|
$workflowusersequences->select("idworkflowitem = '$wfitem' AND position = '".Contenido_Security::escapeDB($pos, NULL)."'");
|
||||||
|
|
||||||
|
if ($wfobj = $workflowusersequences->next())
|
||||||
|
{
|
||||||
|
$obj->set("idusersequence", $wfobj->get("idusersequence"));
|
||||||
|
$obj->store();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
BIN
images/no_verschieben.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 121 B |
BIN
images/nu_verschieben.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 121 B |
BIN
images/workflow.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 96 B |
BIN
images/workflow_alt.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 96 B |
BIN
images/workflow_email_noti.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 90 B |
BIN
images/workflow_erstellen.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 74 B |
BIN
images/workflow_escal_noti.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 84 B |
BIN
images/workflow_step.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 61 B |
BIN
images/workflow_step_delete.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 195 B |
BIN
images/workflow_step_ist_raus.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 61 B |
BIN
images/workflow_step_new.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 74 B |
BIN
images/workflow_user.gif
Normale Datei
Nachher Breite: | Höhe: | Größe: 113 B |
453
includes/config.plugin.php
Normale Datei
|
@ -0,0 +1,453 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow allocation class
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.5
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
* @todo move functions to own file and add autoloader (Ortwin)
|
||||||
|
*
|
||||||
|
* $Id: config.plugin.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
plugin_include('workflow', 'includes/functions.workflow.php');
|
||||||
|
|
||||||
|
global $lngAct, $modidartlang;
|
||||||
|
|
||||||
|
$lngAct["workflow"]["workflow_delete"] = i18n("Delete workflow", "workflow");
|
||||||
|
$lngAct["con_workflow"]["workflow_task_user_select"] = i18n("Select workflow task", "workflow");
|
||||||
|
$lngAct["workflow_common"]["workflow_show"] = i18n("Show workflow", "workflow");
|
||||||
|
$lngAct["workflow_common"]["workflow_create"] = i18n("Create workflow", "workflow");
|
||||||
|
$lngAct["workflow_common"]["workflow_save"] = i18n("Edit workflow", "workflow");
|
||||||
|
$lngAct["con"]["workflow_do_action"] = i18n("Process workflow step", "workflow");
|
||||||
|
$lngAct["str"]["workflow_inherit_down"] = i18n("Inherit workflow down", "workflow");
|
||||||
|
$lngAct["str"]["workflow_inherit_down"] = i18n("Inherit workflow down", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_step_edit"] = i18n("Edit workflow step", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_step_up"] = i18n("Move workflowstep up", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_step_down"] = i18n("Move workflowstep down", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_save_step"] = i18n("Save Workflowstep", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_create_step"] = i18n("Create workflowstep", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_step_delete"] = i18n("Delete workflowstep", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_user_up"] = i18n("Move workflowstepuser up", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_user_down"] = i18n("Move workflowstepuser down", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_create_user"] = i18n("Create Workflowstepuser", "workflow");
|
||||||
|
$lngAct["workflow_steps"]["workflow_user_delete"] = i18n("Delete Workflowstepuser", "workflow");
|
||||||
|
$lngAct["str"]["workflow_cat_assign"] = i18n("Associate workflow with category", "workflow");
|
||||||
|
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.ArticleCategoryList.ListItems", "piworkflowCreateTasksFolder");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.ArticleList.Columns", "piworkflowProcessArticleColumns");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.ArticleList.Actions", "piworkflowProcessActions");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.ArticleList.RenderColumn", "piworkflowRenderColumn");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.ArticleList.RenderAction", "piworkflowRenderAction");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.CategoryList.Columns", "piworkflowCategoryColumns");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.CategoryList.RenderColumn", "piworkflowCategoryRenderColumn");
|
||||||
|
$_cecRegistry->addChainFunction("Contenido.Frontend.AllowEdit", "piworkflowAllowArticleEdit");
|
||||||
|
|
||||||
|
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", "workflow");
|
||||||
|
$narray["wfaction"] = i18n("Workflow Action", "workflow");
|
||||||
|
$narray["wfeditor"] = i18n("Workflow Editor", "workflow");
|
||||||
|
$narray["wflaststatus"] = i18n("Last status", "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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
109
includes/include.workflow_edit.php
Normale Datei
|
@ -0,0 +1,109 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Contains workflow editing functions
|
||||||
|
*
|
||||||
|
* 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-05-20
|
||||||
|
*
|
||||||
|
* $Id: include.workflow_edit.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
|
||||||
|
$form = new UI_Table_Form("workflow_edit");
|
||||||
|
$userclass = new User;
|
||||||
|
$workflows = new Workflows;
|
||||||
|
|
||||||
|
$workflow = $workflows->loadItem($idworkflow);
|
||||||
|
|
||||||
|
if ($action == "workflow_save")
|
||||||
|
{
|
||||||
|
if ($idworkflow == "-1")
|
||||||
|
{
|
||||||
|
$workflow = $workflows->create();
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflow->set("name",clHtmlSpecialChars($wfname));
|
||||||
|
$workflow->set("description",clHtmlSpecialChars($wfdescription));
|
||||||
|
$idworkflow = $workflow->get("idworkflow");
|
||||||
|
$workflow->store();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((int) $idworkflow == 0) {
|
||||||
|
$idworkflow = $_GET['idworkflow'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($idworkflow) {
|
||||||
|
$sReloadScript = "<script type=\"text/javascript\">
|
||||||
|
var left_bottom = top.content.frames['left'].frames['left_bottom'];
|
||||||
|
var right_top = top.content.frames['right'].frames['right_top'];
|
||||||
|
if (left_bottom) {
|
||||||
|
var href = left_bottom.location.href;
|
||||||
|
href = href.replace(/&action=workflow_delete/, '');
|
||||||
|
left_bottom.location.href = href+'&idworkflow='+".$idworkflow.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (right_top) {
|
||||||
|
right_top.location.href = right_top.location.href+'&idworkflow='+".$idworkflow.";
|
||||||
|
}
|
||||||
|
</script>";
|
||||||
|
} else {
|
||||||
|
$sReloadScript = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//function formGenerateField ($type, $name, $initvalue, $width, $maxlen)
|
||||||
|
$form->setVar("area",$area);
|
||||||
|
$form->setVar("action","workflow_save");
|
||||||
|
$form->setVar("idworkflow", $idworkflow);
|
||||||
|
$form->setVar("frame", $frame);
|
||||||
|
|
||||||
|
if ($workflow->virgin)
|
||||||
|
{
|
||||||
|
$name = i18n("New Workflow", "workflow");
|
||||||
|
$header = i18n("Create new workflow", "workflow");
|
||||||
|
} else {
|
||||||
|
$header = i18n("Edit workflow", "workflow");
|
||||||
|
$description = $workflow->get("description");
|
||||||
|
$name = $workflow->get("name");
|
||||||
|
$created = $workflow->get("created");
|
||||||
|
$author = $userclass->getRealname($workflow->get("idauthor"));
|
||||||
|
}
|
||||||
|
|
||||||
|
$form->addHeader($header);
|
||||||
|
$form->add(i18n("Workflow name", "workflow"),formGenerateField("text","wfname",$name,40,255));
|
||||||
|
$form->add(i18n("Description", "workflow"),formGenerateField("textbox","wfdescription",$description,50,10));
|
||||||
|
$form->add(i18n("Author", "workflow"),$author);
|
||||||
|
$form->add(i18n("Created", "workflow"),$created);
|
||||||
|
|
||||||
|
$page = new UI_Page;
|
||||||
|
$page->setContent($form->render(true));
|
||||||
|
$page->addScript('reload', $sReloadScript);
|
||||||
|
|
||||||
|
$page->render();
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
48
includes/include.workflow_left_top.php
Normale Datei
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow allocation class
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.5
|
||||||
|
* @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: include.workflow_left_top.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$create = new Link;
|
||||||
|
$create->setMultiLink("workflow","","workflow_common","workflow_create");
|
||||||
|
//$create->setCLink("workflow_common",4,"workflow_create");
|
||||||
|
$create->setContent(i18n("Create workflow", "workflow"));
|
||||||
|
$create->setCustom("idworkflow","-1");
|
||||||
|
|
||||||
|
$aAttributes = array();
|
||||||
|
$aAttributes['class'] = "addfunction";
|
||||||
|
$create->updateAttributes($aAttributes);
|
||||||
|
|
||||||
|
$ui = new UI_Left_Top;
|
||||||
|
$ui->setLink($create);
|
||||||
|
$ui->render();
|
||||||
|
|
||||||
|
?>
|
129
includes/include.workflow_list.php
Normale Datei
|
@ -0,0 +1,129 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow list
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.5
|
||||||
|
* @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 2006-01-13
|
||||||
|
*
|
||||||
|
* $Id: include.workflow_list.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$iIdMarked = (int) $_GET['idworkflow'];
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
|
||||||
|
$workflows = new Workflows;
|
||||||
|
$sScript = '';
|
||||||
|
if ($action == "workflow_delete")
|
||||||
|
{
|
||||||
|
$workflows->delete($idworkflow);
|
||||||
|
$sScript = '<script type="text/javascript">
|
||||||
|
var right_top = top.content.frames["right"].frames["right_top"];
|
||||||
|
var right_bottom = top.content.frames["right"].frames["right_bottom"];
|
||||||
|
|
||||||
|
if (right_top) {
|
||||||
|
right_top.location.href = "'.$sess->url('main.php?area=workflow&frame=3').'";
|
||||||
|
}
|
||||||
|
if (right_bottom) {
|
||||||
|
right_bottom.location.href = "'.$sess->url('main.php?area=workflow&frame=4').'";
|
||||||
|
}
|
||||||
|
</script>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ui = new UI_Menu;
|
||||||
|
$workflows->select("idclient = '$client' AND idlang = '$lang'");
|
||||||
|
|
||||||
|
while ($workflow = $workflows->next())
|
||||||
|
{
|
||||||
|
$wfid = $workflow->getField("idworkflow");
|
||||||
|
$wfname = $workflow->getField("name");
|
||||||
|
$wfdescription = $workflow->getField("description");
|
||||||
|
|
||||||
|
/* Create the link to show/edit the workflow */
|
||||||
|
$link = new Link;
|
||||||
|
$link->setMultiLink("workflow","","workflow_common","workflow_show");
|
||||||
|
$link->setAlt($wfdescription);
|
||||||
|
$link->setCustom("idworkflow",$wfid);
|
||||||
|
|
||||||
|
$delTitle = i18n("Delete workflow", "workflow");
|
||||||
|
$delDescr = sprintf(i18n("Do you really want to delete the following workflow:<br><br>%s<br>", "workflow"),$wfname);
|
||||||
|
$delete = '<a title="'.$delTitle.'" href="javascript://" onclick="box.confirm(\''.$delTitle.'\', \''.$delDescr.'\', \'deleteWorkflow(\\\''.$wfid.'\\\')\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$delTitle.'" alt="'.$delTitle.'"></a>';
|
||||||
|
|
||||||
|
$ui->setTitle($wfid, $wfname);
|
||||||
|
$ui->setLink($wfid, $link);
|
||||||
|
|
||||||
|
$ui->setActions($wfid, 'delete', $delete);
|
||||||
|
|
||||||
|
if ($wfid == $iIdMarked) {
|
||||||
|
$ui->setExtra ($wfid, 'id="marked" ');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
$content = $ui->render(false);
|
||||||
|
|
||||||
|
$delScript = '
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
|
||||||
|
function foo(){return true;}
|
||||||
|
|
||||||
|
/* Session-ID */
|
||||||
|
var sid = "'.$sess->id.'";
|
||||||
|
|
||||||
|
/* Create messageBox
|
||||||
|
instance */
|
||||||
|
box = new messageBox("", "", "", 0, 0);
|
||||||
|
|
||||||
|
/* Function for deleting
|
||||||
|
modules */
|
||||||
|
|
||||||
|
function deleteWorkflow(idworkflow) {
|
||||||
|
url = "main.php?area=workflow";
|
||||||
|
url += "&action=workflow_delete";
|
||||||
|
url += "&frame=2";
|
||||||
|
url += "&idworkflow=" + idworkflow;
|
||||||
|
url += "&contenido=" + sid;
|
||||||
|
parent.left_bottom.location.href = url;
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>';
|
||||||
|
|
||||||
|
$sInitRowMark = "<script type=\"text/javascript\">
|
||||||
|
if (document.getElementById('marked')) {
|
||||||
|
row.markedRow = document.getElementById('marked');
|
||||||
|
}
|
||||||
|
</script>";
|
||||||
|
|
||||||
|
$msgboxInclude = ' <script type="text/javascript" src="scripts/messageBox.js.php?contenido='.$sess->id.'"></script>';
|
||||||
|
$page = new UI_Page;
|
||||||
|
$page->addScript('include', $msgboxInclude);
|
||||||
|
$page->addScript('del',$delScript);
|
||||||
|
$page->addScript('refresh', $sScript);
|
||||||
|
$page->setMargin(0);
|
||||||
|
$page->setContent($content.$sInitRowMark);
|
||||||
|
$page->render();
|
||||||
|
|
||||||
|
?>
|
405
includes/include.workflow_steps.php
Normale Datei
|
@ -0,0 +1,405 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Class for workflow allocation management
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.0
|
||||||
|
* @author Unknwon
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
* @modified 2008-12-05 Andreas Lindner, make select box values for time unit selection language independent
|
||||||
|
|
||||||
|
* {@internal
|
||||||
|
* created
|
||||||
|
*
|
||||||
|
* $Id: include.workflow_steps.php 128 2019-07-03 11:58:28Z oldperl $:
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
plugin_include('workflow', 'includes/functions.workflow.php');
|
||||||
|
cInclude("includes", "functions.encoding.php");
|
||||||
|
|
||||||
|
$iIdMarked = (int) $_GET['idworkflowitem'];
|
||||||
|
|
||||||
|
$availableWorkflowActions= WorkflowActions :: getAvailableWorkflowActions();
|
||||||
|
|
||||||
|
$sCurrentEncoding = getEncodingByLanguage ($db, $lang, $cfg);
|
||||||
|
|
||||||
|
if (clHtmlEntities($adduser, ENT_COMPAT, $sCurrentEncoding) == i18n("Add User", "workflow")) {
|
||||||
|
$action= "workflow_create_user";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Move step up */
|
||||||
|
if ($action == "workflow_step_up") {
|
||||||
|
$workflowitems= new WorkflowItems;
|
||||||
|
$workflowitems->swap($idworkflow, $position, $position -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Move step down */
|
||||||
|
if ($action == "workflow_step_down") {
|
||||||
|
$workflowitems= new WorkflowItems;
|
||||||
|
$workflowitems->swap($idworkflow, $position, $position +1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Move user up */
|
||||||
|
if ($action == "workflow_user_up") {
|
||||||
|
$workflowitems= new WorkflowUserSequences;
|
||||||
|
$workflowitems->swap($idworkflowitem, $position, $position -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Move step down */
|
||||||
|
if ($action == "workflow_user_down") {
|
||||||
|
$workflowitems= new WorkflowUserSequences;
|
||||||
|
$workflowitems->swap($idworkflowitem, $position, $position +1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Create new step */
|
||||||
|
if ($action == "workflow_create_step") {
|
||||||
|
$workflowitems= new WorkflowItems;
|
||||||
|
$item= $workflowitems->create($idworkflow);
|
||||||
|
$item->set("name", i18n("New Workflow Step", "workflow"));
|
||||||
|
$item->store();
|
||||||
|
$idworkflowitem= $item->get("idworkflowitem");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Delete step */
|
||||||
|
if ($action == "workflow_step_delete") {
|
||||||
|
$workflowitems= new WorkflowItems;
|
||||||
|
$workflowitems->delete($idworkflowitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Add user */
|
||||||
|
if ($action == "workflow_create_user") {
|
||||||
|
$workflowusers= new WorkflowUserSequences;
|
||||||
|
$new= $workflowusers->create($idworkflowitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Remove user */
|
||||||
|
if ($action == "workflow_user_delete") {
|
||||||
|
$workflowusers= new WorkflowUserSequences;
|
||||||
|
$workflowusers->delete($idusersequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function: Save step */
|
||||||
|
if ($action == "workflow_save_step" || $action == "workflow_create_user") {
|
||||||
|
$workflowactions= new WorkflowActions;
|
||||||
|
|
||||||
|
foreach ($availableWorkflowActions as $key => $value) {
|
||||||
|
if ($wfactions[$key] == 1) {
|
||||||
|
$workflowactions->set($idworkflowitem, $key);
|
||||||
|
} else {
|
||||||
|
$workflowactions->remove($idworkflowitem, $key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflowitem= new WorkflowItem;
|
||||||
|
$workflowitem->loadByPrimaryKey($idworkflowitem);
|
||||||
|
$workflowitem->setField('idtask', $wftaskselect);
|
||||||
|
$workflowitem->setField('name', $wfstepname);
|
||||||
|
$workflowitem->setField('description', $wfstepdescription);
|
||||||
|
$workflowitem->store();
|
||||||
|
|
||||||
|
$usersequences= new WorkflowUserSequences;
|
||||||
|
$usersequences->select("idworkflowitem = '$idworkflowitem'");
|
||||||
|
|
||||||
|
while ($usersequence= $usersequences->next()) {
|
||||||
|
$wftime= "time" . $usersequence->get("idusersequence");
|
||||||
|
$wfuser= "user" . $usersequence->get("idusersequence");
|
||||||
|
|
||||||
|
$wftimelimit= "wftimelimit" . $usersequence->get("idusersequence");
|
||||||
|
$usersequence->set("timeunit", $$wftime);
|
||||||
|
$usersequence->set("iduser", $$wfuser);
|
||||||
|
$usersequence->set("timelimit", $$wftimelimit);
|
||||||
|
$usersequence->set("emailnoti", $wfemailnoti[$usersequence->get("idusersequence")]);
|
||||||
|
$usersequence->set("escalationnoti", $wfescalnoti[$usersequence->get("idusersequence")]);
|
||||||
|
$usersequence->store();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTimeUnitSelector($listid, $default) {
|
||||||
|
global $idclient, $cfg, $auth;
|
||||||
|
|
||||||
|
$timeunits = array ();
|
||||||
|
$timeunits['Seconds'] = i18n("Seconds", "workflow");
|
||||||
|
$timeunits['Minutes'] = i18n("Minutes", "workflow");
|
||||||
|
$timeunits['Hours'] = i18n("Hours", "workflow");
|
||||||
|
$timeunits['Days'] = i18n("Days", "workflow");
|
||||||
|
$timeunits['Weeks'] = i18n("Weeks", "workflow");
|
||||||
|
$timeunits['Months'] = i18n("Months", "workflow");
|
||||||
|
$timeunits['Years'] = i18n("Years", "workflow");
|
||||||
|
|
||||||
|
$tpl2= new Template;
|
||||||
|
$tpl2->set('s', 'NAME', 'time' . $listid);
|
||||||
|
$tpl2->set('s', 'CLASS', 'text_small');
|
||||||
|
$tpl2->set('s', 'OPTIONS', 'size=1');
|
||||||
|
|
||||||
|
foreach ($timeunits as $key => $value) {
|
||||||
|
|
||||||
|
$tpl2->set('d', 'VALUE', $key);
|
||||||
|
$tpl2->set('d', 'CAPTION', $value);
|
||||||
|
|
||||||
|
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 getWorkflowList() {
|
||||||
|
global $idworkflow, $cfg;
|
||||||
|
|
||||||
|
$ui= new UI_Menu;
|
||||||
|
$workflowitems= new WorkflowItems;
|
||||||
|
|
||||||
|
$workflowitems->select("idworkflow = '$idworkflow'", "", "position ASC");
|
||||||
|
|
||||||
|
while ($workflowitem= $workflowitems->next()) {
|
||||||
|
$pos= $workflowitem->get("position");
|
||||||
|
$name= $workflowitem->get("name");
|
||||||
|
$id= $workflowitem->get("idworkflowitem");
|
||||||
|
|
||||||
|
$edititem= new Link;
|
||||||
|
$edititem->setCLink("workflow_steps", 4, "workflow_step_edit");
|
||||||
|
$edititem->setCustom("idworkflowitem", $id);
|
||||||
|
$edititem->setCustom("idworkflow", $idworkflow);
|
||||||
|
|
||||||
|
|
||||||
|
$moveup= new Link;
|
||||||
|
$moveup->setCLink("workflow_steps", 4, "workflow_step_up");
|
||||||
|
$moveup->setCustom("idworkflowitem", $id);
|
||||||
|
$moveup->setCustom("idworkflow", $idworkflow);
|
||||||
|
$moveup->setCustom("position", $pos);
|
||||||
|
$moveup->setAlt(i18n("Move step up", "workflow"));
|
||||||
|
$moveup->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/no_verschieben.gif" . '">');
|
||||||
|
|
||||||
|
$movedown= new Link;
|
||||||
|
$movedown->setCLink("workflow_steps", 4, "workflow_step_down");
|
||||||
|
$movedown->setCustom("idworkflowitem", $id);
|
||||||
|
$movedown->setCustom("idworkflow", $idworkflow);
|
||||||
|
$movedown->setCustom("position", $pos);
|
||||||
|
$movedown->setAlt(i18n("Move step down", "workflow"));
|
||||||
|
$movedown->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/nu_verschieben.gif" . '">');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$deletestep= new Link;
|
||||||
|
$deletestep->setCLink("workflow_steps", 4, "workflow_step_delete");
|
||||||
|
$deletestep->setCustom("idworkflowitem", $id);
|
||||||
|
$deletestep->setCustom("idworkflow", $idworkflow);
|
||||||
|
$deletestep->setCustom("position", $pos);
|
||||||
|
$deletestep->setAlt(i18n("Delete step", "workflow"));
|
||||||
|
$deletestep->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_step_delete.gif" . '">');
|
||||||
|
|
||||||
|
$ui->setTitle($id, "$pos. $name");
|
||||||
|
$ui->setLink($id, $edititem);
|
||||||
|
|
||||||
|
if ($pos > 1) {
|
||||||
|
$ui->setActions($id, "moveup", $moveup->render());
|
||||||
|
} else {
|
||||||
|
$ui->setActions($id, "moveup", '<img style="padding-left: 2px" src="images/spacer.gif" width="15" height="1">');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pos < $workflowitems->count()) {
|
||||||
|
$ui->setActions($id, "movedown", $movedown->render());
|
||||||
|
} else {
|
||||||
|
$ui->setActions($id, "movedown", '<img style="padding-left: 2px" src="images/spacer.gif" width="15" height="1">');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ui->setActions($id, "delete", $deletestep->render());
|
||||||
|
|
||||||
|
if ($_GET['idworkflowitem'] == $id) {
|
||||||
|
$ui->setExtra ($id, 'id="marked" ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$content= $ui->render(false);
|
||||||
|
|
||||||
|
return ($content);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createNewWorkflow() {
|
||||||
|
global $idworkflow, $cfg;
|
||||||
|
$content= "";
|
||||||
|
$ui= new UI_Menu;
|
||||||
|
$rowmark = false;
|
||||||
|
|
||||||
|
$createstep= new Link;
|
||||||
|
$createstep->setCLink("workflow_steps", 4, "workflow_create_step");
|
||||||
|
$createstep->setCustom("idworkflow", $idworkflow);
|
||||||
|
|
||||||
|
#$ui->setLink("spacer", NULL);
|
||||||
|
$ui->setTitle("create", i18n("Create new step", "workflow"));
|
||||||
|
$ui->setImage("create", $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_step_new.gif");
|
||||||
|
$ui->setLink("create", $createstep);
|
||||||
|
$ui->setRowmark ($rowmark);
|
||||||
|
$ui->setBgColor("create", $cfg['color']['table_header']);
|
||||||
|
|
||||||
|
$content= $ui->render(false);
|
||||||
|
return $content;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function editWorkflowStep($idworkflowitem) {
|
||||||
|
global $area, $idworkflow, $idworkflowitem, $frame, $availableWorkflowActions;
|
||||||
|
global $notification;
|
||||||
|
$workflowitem= new WorkflowItem;
|
||||||
|
|
||||||
|
if ($workflowitem->loadByPrimaryKey($idworkflowitem) == false) {
|
||||||
|
return " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
$workflowactions= new WorkflowActions;
|
||||||
|
|
||||||
|
$stepname= $workflowitem->get("name");
|
||||||
|
$stepdescription= $workflowitem->get("description");
|
||||||
|
$id= $workflowitem->get("idworkflowitem");
|
||||||
|
$task= $workflowitem->get("idtask");
|
||||||
|
|
||||||
|
$form= new UI_Table_Form("workflow_edit");
|
||||||
|
|
||||||
|
$form->setVar("area", $area);
|
||||||
|
$form->setVar("action", "workflow_save_step");
|
||||||
|
$form->setVar("idworkflow", $idworkflow);
|
||||||
|
$form->setVar("idworkflowitem", $idworkflowitem);
|
||||||
|
$form->setVar("frame", $frame);
|
||||||
|
|
||||||
|
$form->addHeader(i18n("Edit workflow step", "workflow"));
|
||||||
|
$form->add(i18n("Step name", "workflow"), formGenerateField("text", "wfstepname", $stepname, 40, 255));
|
||||||
|
$form->add(i18n("Step description", "workflow"), formGenerateField("textbox", "wfstepdescription", $stepdescription, 60, 10));
|
||||||
|
|
||||||
|
foreach ($availableWorkflowActions as $key => $value) {
|
||||||
|
$actions .= formGenerateCheckbox("wfactions[" . $key . "]", "1", $workflowactions->get($id, $key)) . '<label for="wfactions[' . $key . ']1">' . $value . '</label>' . "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$form->add(i18n("Actions", "workflow"), $actions);
|
||||||
|
$form->add(i18n("Assigned users", "workflow"), getWorkflowUsers($idworkflowitem));
|
||||||
|
|
||||||
|
return $form->render(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWorkflowUsers($idworkflowitem) {
|
||||||
|
global $idworkflow, $cfg;
|
||||||
|
|
||||||
|
$ui= new UI_Menu;
|
||||||
|
$workflowusers= new WorkflowUserSequences;
|
||||||
|
|
||||||
|
$workflowusers->select("idworkflowitem = '$idworkflowitem'", "", "position ASC");
|
||||||
|
|
||||||
|
while ($workflowitem= $workflowusers->next()) {
|
||||||
|
$pos= $workflowitem->get("position");
|
||||||
|
$iduser= $workflowitem->get("iduser");
|
||||||
|
$timelimit= $workflowitem->get("timelimit");
|
||||||
|
$timeunit= $workflowitem->get("timeunit");
|
||||||
|
$email= $workflowitem->get("emailnoti");
|
||||||
|
$escalation= $workflowitem->get("escalationnoti");
|
||||||
|
$timeunit= $workflowitem->get("timeunit");
|
||||||
|
$id= $workflowitem->get("idusersequence");
|
||||||
|
|
||||||
|
$moveup= new Link;
|
||||||
|
$moveup->setCLink("workflow_steps", 4, "workflow_user_up");
|
||||||
|
$moveup->setCustom("idworkflowitem", $idworkflowitem);
|
||||||
|
$moveup->setCustom("idworkflow", $idworkflow);
|
||||||
|
$moveup->setCustom("position", $pos);
|
||||||
|
$moveup->setAlt(i18n("Move user up", "workflow"));
|
||||||
|
#$moveup->setContent('<img border="0" style="padding-left: 2px" src="images/pfeil_hoch.gif">');
|
||||||
|
$moveup->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/no_verschieben.gif" . '">');
|
||||||
|
|
||||||
|
$movedown= new Link;
|
||||||
|
$movedown->setCLink("workflow_steps", 4, "workflow_user_down");
|
||||||
|
$movedown->setCustom("idworkflowitem", $idworkflowitem);
|
||||||
|
$movedown->setCustom("idworkflow", $idworkflow);
|
||||||
|
$movedown->setCustom("position", $pos);
|
||||||
|
$movedown->setAlt(i18n("Move user down", "workflow"));
|
||||||
|
$movedown->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/nu_verschieben.gif" . '">');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$deletestep= new Link;
|
||||||
|
$deletestep->setCLink("workflow_steps", 4, "workflow_user_delete");
|
||||||
|
$deletestep->setCustom("idworkflowitem", $idworkflowitem);
|
||||||
|
$deletestep->setCustom("idworkflow", $idworkflow);
|
||||||
|
$deletestep->setCustom("position", $pos);
|
||||||
|
$deletestep->setCustom("idusersequence", $id);
|
||||||
|
$deletestep->setAlt(i18n("Delete user", "workflow"));
|
||||||
|
$deletestep->setContent('<img style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_step_delete.gif" . '">');
|
||||||
|
|
||||||
|
$title= "$pos. " . getUsers($id, $iduser);
|
||||||
|
$title .= formGenerateField("text", "wftimelimit" . $id, $timelimit, 3, 6);
|
||||||
|
$title .= getTimeUnitSelector($id, $timeunit);
|
||||||
|
$altmail= i18n("Notify this user via E-Mail", "workflow");
|
||||||
|
$altnoti= i18n("Escalate to this user via E-Mail", "workflow");
|
||||||
|
$title .= formGenerateCheckbox("wfemailnoti[" . $id . "]", "1", $email) . '<label for="wfemailnoti[' . $id . ']1"><img alt="' . $altmail . '" title="' . $altmail . '" style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_email_noti.gif" . '"></label>';
|
||||||
|
$title .= formGenerateCheckbox("wfescalnoti[" . $id . "]", "1", $escalation) . '<label for="wfescalnoti[' . $id . ']1"><img alt="' . $altnoti . '" title="' . $altnoti . '" style="padding-left: 2px" border="0" src="' . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_escal_noti.gif" . '"></label>';
|
||||||
|
|
||||||
|
$ui->setTitle($id, $title);
|
||||||
|
$ui->setLink($id, NULL);
|
||||||
|
|
||||||
|
if ($pos > 1) {
|
||||||
|
$ui->setActions($id, "moveup", $moveup->render());
|
||||||
|
} else {
|
||||||
|
$ui->setActions($id, "moveup", '<img style="padding-left: 2px" src="images/spacer.gif" width="15" height="1">');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pos < $workflowusers->count()) {
|
||||||
|
$ui->setActions($id, "movedown", $movedown->render());
|
||||||
|
} else {
|
||||||
|
$ui->setActions($id, "movedown", '<img style="padding-left: 2px" src="images/spacer.gif" width="15" height="1">');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ui->setActions($id, "delete", $deletestep->render());
|
||||||
|
|
||||||
|
$ui->setImage($id, $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_user.gif");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$createstep= new Link;
|
||||||
|
$createstep->setCLink("workflow_steps", 4, "workflow_create_user");
|
||||||
|
$createstep->setCustom("idworkflow", $idworkflow);
|
||||||
|
$createstep->setCustom("idworkflowitem", $idworkflowitem);
|
||||||
|
|
||||||
|
$ui->setLink("spacer", NULL);
|
||||||
|
|
||||||
|
$ui->setTitle("create", '<input class="text_medium" type="submit" name="adduser" value="' . i18n("Add User", "workflow") . '">');
|
||||||
|
$ui->setLink("create", NULL);
|
||||||
|
$content= $ui->render(false);
|
||||||
|
|
||||||
|
return ($content);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl= new Template;
|
||||||
|
$tpl->set('s', 'NEW', createNewWorkflow());
|
||||||
|
$tpl->set('s', 'STEPS', getWorkflowList());
|
||||||
|
$tpl->set('s', 'EDITSTEP', editWorkflowStep($idworkflowitem));
|
||||||
|
$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
||||||
|
$frame= $tpl->generate($cfg["path"]["contenido"] . $cfg["path"]["plugins"] . "workflow/templates/template.workflow_steps.html", true);
|
||||||
|
|
||||||
|
$page= new UI_Page;
|
||||||
|
$page->setContent($frame);
|
||||||
|
$page->render();
|
||||||
|
?>
|
113
includes/include.workflow_subnav.php
Normale Datei
|
@ -0,0 +1,113 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Builds the third navigation layer
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.1.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-05-20
|
||||||
|
* modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307]
|
||||||
|
*
|
||||||
|
* $Id: include.workflow_subnav.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$nav = new Contenido_Navigation;
|
||||||
|
|
||||||
|
$parentarea = getParentAreaID($area);
|
||||||
|
$sql = "SELECT
|
||||||
|
idarea
|
||||||
|
FROM
|
||||||
|
".$cfg["tab"]["area"]." AS a
|
||||||
|
WHERE
|
||||||
|
a.name = '".Contenido_Security::escapeDB($parentarea, $db)."' OR
|
||||||
|
a.parent_id = '".Contenido_Security::escapeDB($parentarea, $db)."'
|
||||||
|
ORDER BY
|
||||||
|
idarea";
|
||||||
|
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
$in_str = "";
|
||||||
|
|
||||||
|
while ( $db->next_record() ) {
|
||||||
|
$in_str .= $db->f('idarea') . ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
$len = strlen($in_str)-1;
|
||||||
|
$in_str = substr($in_str, 0, $len);
|
||||||
|
$in_str = '('.$in_str.')';
|
||||||
|
|
||||||
|
$sql = "SELECT
|
||||||
|
b.location AS location,
|
||||||
|
a.name AS name
|
||||||
|
FROM
|
||||||
|
".$cfg["tab"]["area"]." AS a,
|
||||||
|
".$cfg["tab"]["nav_sub"]." AS b
|
||||||
|
WHERE
|
||||||
|
b.idarea IN ".Contenido_Security::escapeDB($in_str, $db)." AND
|
||||||
|
b.idarea = a.idarea AND
|
||||||
|
b.level = 1
|
||||||
|
ORDER BY
|
||||||
|
b.idnavs";
|
||||||
|
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
while ( $db->next_record() ) {
|
||||||
|
|
||||||
|
# Extract caption from
|
||||||
|
# the xml language file
|
||||||
|
$caption = $nav->getName($db->f("location"));
|
||||||
|
|
||||||
|
$tmp_area = $db->f("name");
|
||||||
|
|
||||||
|
# Set template data
|
||||||
|
$tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt);
|
||||||
|
$tpl->set("d", "CLASS", '');
|
||||||
|
$tpl->set("d", "OPTIONS", '');
|
||||||
|
$tpl->set("d", "CAPTION", '<a class="white" onclick="sub.clicked(this)" target="right_bottom" href="'.$sess->url("main.php?area=$tmp_area&frame=4&idworkflow=$idworkflow").'">'.$caption.'</a>');
|
||||||
|
if ($area == $tmp_area)
|
||||||
|
{
|
||||||
|
$tpl->set('s', 'DEFAULT', markSubMenuItem($tpl->dyn_cnt,true));
|
||||||
|
}
|
||||||
|
$tpl->next();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2);
|
||||||
|
$tpl->set('s', 'IDCAT', $idcat);
|
||||||
|
$tpl->set('s', 'SESSID', $sess->id);
|
||||||
|
$tpl->set('s', 'CLIENT', $client);
|
||||||
|
$tpl->set('s', 'LANG', $lang);
|
||||||
|
|
||||||
|
|
||||||
|
# Generate the third
|
||||||
|
# navigation layer
|
||||||
|
if ($idworkflow <= 0)
|
||||||
|
{
|
||||||
|
$tpl->generate($cfg["path"]["templates"].$cfg["templates"]["subnav_blank"]);
|
||||||
|
} else {
|
||||||
|
$tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
274
includes/include.workflow_tasks.php
Normale Datei
|
@ -0,0 +1,274 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Project:
|
||||||
|
* Contenido Content Management System
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Workflow task overview mask
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
* @con_php_req 5.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @package Contenido Backend classes
|
||||||
|
* @version 1.4
|
||||||
|
* @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-30
|
||||||
|
*
|
||||||
|
* $Id: include.workflow_tasks.php 128 2019-07-03 11:58:28Z oldperl $
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!defined('CON_FRAMEWORK')) {
|
||||||
|
die('Illegal call');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plugin_include('workflow', 'classes/class.workflow.php');
|
||||||
|
plugin_include('workflow', 'includes/functions.workflow.php');
|
||||||
|
|
||||||
|
global $sess;
|
||||||
|
$sSession = $sess->id;
|
||||||
|
|
||||||
|
$wfa = new WorkflowArtAllocations;
|
||||||
|
$wfu = new WorkflowUserSequences;
|
||||||
|
$users = new User;
|
||||||
|
$db2 = new DB_ConLite;
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
if ($usershow == "")
|
||||||
|
{
|
||||||
|
$usershow = $auth->auth["uid"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$perm->have_perm_area_action($area, "workflow_task_user_select"))
|
||||||
|
{
|
||||||
|
$usershow = $auth->auth["uid"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($action == "workflow_do_action")
|
||||||
|
{
|
||||||
|
$selectedAction = "wfselect".$modidartlang;
|
||||||
|
doWorkflowAction($modidartlang, $GLOBALS[$selectedAction]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$wfa->select();
|
||||||
|
|
||||||
|
while ($wfaitem = $wfa->next())
|
||||||
|
{
|
||||||
|
$wfaid = $wfaitem->get("idartallocation");
|
||||||
|
$usersequence[$wfaid] = $wfaitem->get("idusersequence");
|
||||||
|
$lastusersequence[$wfaid] = $wfaitem->get("lastusersequence");
|
||||||
|
$article[$wfaid] = $wfaitem->get("idartlang");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (is_array($usersequence))
|
||||||
|
{
|
||||||
|
foreach ($usersequence as $key => $value)
|
||||||
|
{
|
||||||
|
$wfu->select("idusersequence = '$value'");
|
||||||
|
if ($obj = $wfu->next())
|
||||||
|
{
|
||||||
|
$userids[$key] = $obj->get("iduser");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($userids))
|
||||||
|
{
|
||||||
|
foreach ($userids as $key=>$value)
|
||||||
|
{
|
||||||
|
$isCurrent[$key] = false;
|
||||||
|
|
||||||
|
if ($usershow == $value)
|
||||||
|
{
|
||||||
|
$isCurrent[$key] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($users->loadUserByUserID($value) == false)
|
||||||
|
{
|
||||||
|
/* Yes, it's a group. Let's try to load the group members! */
|
||||||
|
$sql = "SELECT user_id FROM "
|
||||||
|
.$cfg["tab"]["groupmembers"]."
|
||||||
|
WHERE group_id = '".$value."'";
|
||||||
|
$db2->query(Contenido_Security::escapeDB($sql, $db2));
|
||||||
|
|
||||||
|
while ($db2->next_record())
|
||||||
|
{
|
||||||
|
if ($db2->f("user_id") == $usershow)
|
||||||
|
{
|
||||||
|
$isCurrent[$key] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($value == $usershow)
|
||||||
|
{
|
||||||
|
$isCurrent[$key] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($lastusersequence[$key] == $usersequence[$key])
|
||||||
|
{
|
||||||
|
$isCurrent[$key] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl->reset();
|
||||||
|
$tpl->setEncoding('iso-8859-1');
|
||||||
|
$tpl->set('s', 'SESSID', $sSession);
|
||||||
|
$tpl->set('s', 'SESSNAME', $sess->name);
|
||||||
|
$iIDCat = 0;
|
||||||
|
$iIDTpl = 0;
|
||||||
|
|
||||||
|
if ($perm->have_perm_area_action($area, "workflow_task_user_select"))
|
||||||
|
{
|
||||||
|
$form = new UI_Form("showusers", $sess->url("main.php?area=$area&frame=$frame"));
|
||||||
|
$form->setVar("area",$area);
|
||||||
|
$form->setEvent("submit", "setUsershow();");
|
||||||
|
$form->setVar("frame", $frame);
|
||||||
|
$form->setVar("action", "workflow_task_user_select");
|
||||||
|
$form->add("select",i18n("Show users").": ".getUsers("show",$usershow));
|
||||||
|
$form->add("button", '<input style="vertical-align:middle;" type="image" src="'.$cfg["path"]["htmlpath"].$cfg["path"]["images"]."submit.gif".'">');
|
||||||
|
|
||||||
|
$tpl->set('s', 'USERSELECT', $form->render(true));
|
||||||
|
} else {
|
||||||
|
$tpl->set('s', 'USERSELECT', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pageTitle = i18n('Search results').' - '.i18n('Workflow tasks', 'workflow');
|
||||||
|
$tpl->set('s', 'PAGE_TITLE', $pageTitle);
|
||||||
|
|
||||||
|
$tpl->set('s', 'TH_START', i18n("Article"));
|
||||||
|
$tpl->set('s', 'TH_TEMPLATE', i18n("Template"));
|
||||||
|
$tpl->set('s', 'TH_ACTIONS', i18n("Actions"));
|
||||||
|
$tpl->set('s', 'TH_TITLE', i18n("Title"));
|
||||||
|
$tpl->set('s', 'TH_CHANGED', i18n("Changed"));
|
||||||
|
$tpl->set('s', 'TH_PUBLISHED', i18n("Published"));
|
||||||
|
$tpl->set('s', 'TH_WORKFLOW_STEP', i18n("Workflow Step", 'workflow'));
|
||||||
|
$tpl->set('s', 'TH_WORKFLOW_ACTION', i18n("Workflow Action", 'workflow'));
|
||||||
|
$tpl->set('s', 'TH_WORKFLOW_EDITOR', i18n("Workflow Editor"));
|
||||||
|
$tpl->set('s', 'TH_LAST_STATUS', i18n("Last status", 'workflow'));
|
||||||
|
|
||||||
|
$currentUserSequence = new WorkflowUserSequence;
|
||||||
|
|
||||||
|
if (is_array($isCurrent))
|
||||||
|
{
|
||||||
|
|
||||||
|
foreach ($isCurrent as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == true)
|
||||||
|
{
|
||||||
|
$idartlang = Contenido_Security::toInteger($article[$key]);
|
||||||
|
$lang = Contenido_Security::toInteger($lang);
|
||||||
|
$client = Contenido_Security::toInteger($client);
|
||||||
|
|
||||||
|
$sql = "SELECT B.idcat AS idcat, A.title AS title, A.created AS created, A.lastmodified AS changed,
|
||||||
|
A.idart as idart, E.name as tpl_name, A.idartlang as idartlang, F.idcatlang as idcatlang,
|
||||||
|
B.idcatart as idcatart, A.idlang as art_lang, F.startidartlang as startidartlang
|
||||||
|
FROM (".$cfg["tab"]["art_lang"]." AS A,
|
||||||
|
".$cfg["tab"]["cat_art"]." AS B,
|
||||||
|
".$cfg["tab"]["art"]." AS C)
|
||||||
|
LEFT JOIN ".$cfg['tab']['tpl_conf']." as D ON A.idtplcfg = D.idtplcfg
|
||||||
|
LEFT JOIN ".$cfg['tab']['tpl']." as E ON D.idtpl = E.`idtpl`
|
||||||
|
LEFT JOIN ".$cfg['tab']['cat_lang']." as F ON B.idcat = F.`idcat`
|
||||||
|
WHERE A.idartlang = '$idartlang' AND
|
||||||
|
A.idart = B.idart AND
|
||||||
|
A.idart = C.idart AND
|
||||||
|
A.idlang = '$lang' AND
|
||||||
|
C.idclient = '$client';";
|
||||||
|
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
if ($db->next_record())
|
||||||
|
{
|
||||||
|
global $area;
|
||||||
|
//$area = "con";
|
||||||
|
$idcat = $db->f("idcat");
|
||||||
|
$idart = $db->f("idart");
|
||||||
|
|
||||||
|
# create javascript multilink
|
||||||
|
$tmp_mstr = '<a href="javascript://" onclick="javascript:conMultiLink(\'%s\', \'%s\', \'%s\', \'%s\')" title="idart: '.$db->f('idart').' idcatart: '.$db->f('idcatart').'" alt="idart: '.$db->f('idart').' idcatart: '.$db->f('idcatart').'">%s</a>';
|
||||||
|
|
||||||
|
$mstr = sprintf($tmp_mstr, 'right_top',
|
||||||
|
$sess->url("main.php?area=con&frame=3&idcat=$idcat&idtpl=$idtpl"),
|
||||||
|
'right_bottom',
|
||||||
|
$sess->url("main.php?area=con_editart&action=con_edit&frame=4&idcat=$idcat&idtpl=$idtpl&idart=$idart"),
|
||||||
|
$db->f("title"));
|
||||||
|
|
||||||
|
$laststatus = getLastWorkflowStatus($idartlang);
|
||||||
|
$username = getGroupOrUserName($userids[$key]);
|
||||||
|
$actionSelect = piworkflowRenderColumn($idcat, $idart, $db->f('idartlang'), 'wfaction');
|
||||||
|
|
||||||
|
$currentUserSequence->loadByPrimaryKey($usersequence[$key]);
|
||||||
|
$workflowItem = $currentUserSequence->getWorkflowItem();
|
||||||
|
$step = $workflowItem->get("name");
|
||||||
|
$description = $workflowItem->get("description");
|
||||||
|
|
||||||
|
$sRowId = $db->f('idart').'-'.$db->f('idartlang').'-'.$db->f('idcat').'-'.$db->f('idcatlang').'-'.$db->f('idcatart').'-'.$db->f('art_lang');
|
||||||
|
|
||||||
|
if( $db->f('startidartlang') == $db->f('idartlang') ) {
|
||||||
|
$makeStartarticle = "<img src=\"images/isstart1.gif\" border=\"0\" title=\"{$sFlagTitle}\" alt=\"{$sFlagTitle}\">";
|
||||||
|
} else {
|
||||||
|
$makeStartarticle = "<img src=\"images/isstart0.gif\" border=\"0\" title=\"{$sFlagTitle}\" alt=\"{$sFlagTitle}\">";
|
||||||
|
}
|
||||||
|
|
||||||
|
$todoListeSubject = i18n("Reminder");
|
||||||
|
$sReminder = i18n("Set reminder / add to todo list");
|
||||||
|
$sReminderHtml = "<a id=\"m1\" onclick=\"javascript:window.open('main.php?subject=$todoListeSubject&area=todo&frame=1&itemtype=idart&itemid=$idart&contenido=$sSession', 'todo', 'scrollbars=yes, height=300, width=550');\" alt=\"$sReminder\" title=\"$sReminder\" href=\"#\"><img id=\"m2\" style=\"padding-left: 2px; padding-right: 2px;\" alt=\"$sReminder\" src=\"images/but_setreminder.gif\" border=\"0\"></a>";
|
||||||
|
|
||||||
|
$templatename = $db->f('tpl_name');
|
||||||
|
if (!empty($templatename)) {
|
||||||
|
$templatename = clHtmlEntities($templatename);
|
||||||
|
} else {
|
||||||
|
$templatename = '--- ' . i18n("None") . ' ---';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i == 0) {
|
||||||
|
$iIDCat = $db->f("idcat");
|
||||||
|
$iIDTpl = $idtpl;
|
||||||
|
$tpl->set('s', 'FIRST_ROWID', $sRowId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl->set('d', 'START', $makeStartarticle);
|
||||||
|
$tpl->set('d', 'TITLE', $mstr);
|
||||||
|
$tpl->set('d', 'LAST_STATUS', $laststatus);
|
||||||
|
$tpl->set('d', 'WORKFLOW_EDITOR', $username);
|
||||||
|
$tpl->set('d', 'WORKFLOW_STEP', $step);
|
||||||
|
$tpl->set('d', 'WORKFLOW_ACTION', $actionSelect);
|
||||||
|
$tpl->set('d', 'TEMPLATE', $templatename);
|
||||||
|
$tpl->set('d', 'BGCOLOR', $cfg['color']['table_dark_offline']);
|
||||||
|
$tpl->set('d', 'ROWID', $sRowId);
|
||||||
|
$tpl->set('d', 'ACTIONS', $sReminderHtml);
|
||||||
|
$tpl->next();
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i > 0) {
|
||||||
|
$tpl->set('s', 'NO_ARTICLES_ROW');
|
||||||
|
} else {
|
||||||
|
$sRow = '<tr><td colspan="8" class="bordercell">' . i18n("No article found.") . '</td></tr>';
|
||||||
|
$tpl->set('s', 'NO_ARTICLES_ROW', $sRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sLoadSubnavi = 'parent.parent.frames["right"].frames["right_top"].location.href = \'main.php?area=con&frame=3&idcat=' . $iIDCat . '&idtpl=' . $iIDTpl . '&contenido=' . $sSession . "';";
|
||||||
|
$tpl->set('s', 'SUBNAVI', $sLoadSubnavi);
|
||||||
|
|
||||||
|
$frame = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
$tpl->generate($cfg["path"]['contenido'] . $cfg["path"]["plugins"] . "workflow/templates/template.workflow_tasks.html");
|
||||||
|
|
||||||
|
?>
|
BIN
locale/de_DE/LC_MESSAGES/workflow.mo
Normale Datei
453
locale/de_DE/LC_MESSAGES/workflow.po
Normale Datei
|
@ -0,0 +1,453 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-05-18 11:03+0200\n"
|
||||||
|
"PO-Revision-Date: 2011-05-18 11:17+0100\n"
|
||||||
|
"Last-Translator: Ortwin Pinke <translation@dceonline.de>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Poedit-Basepath: M:\\Projekte_Persoenlich\\timo.hummel\\plugin_sources\\\n"
|
||||||
|
"X-Poedit-KeywordsList: i18n\n"
|
||||||
|
"X-Poedit-SearchPath-0: workflow\n"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:40
|
||||||
|
#: includes/include.workflow_list.php:71
|
||||||
|
msgid "Delete workflow"
|
||||||
|
msgstr "Workflow löschen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:41
|
||||||
|
msgid "Select workflow task"
|
||||||
|
msgstr "Workflow-Aufgabe auswählen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:42
|
||||||
|
msgid "Show workflow"
|
||||||
|
msgstr "Workflow zeigen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:43
|
||||||
|
#: includes/include.workflow_left_top.php:37
|
||||||
|
msgid "Create workflow"
|
||||||
|
msgstr "Neuer Workflow"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:44
|
||||||
|
#: includes/include.workflow_edit.php:89
|
||||||
|
msgid "Edit workflow"
|
||||||
|
msgstr "Workflow bearbeiten"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:45
|
||||||
|
msgid "Process workflow step"
|
||||||
|
msgstr "Workflow Schritt durchführen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:46
|
||||||
|
#: includes/config.plugin.php:47
|
||||||
|
#: includes/config.plugin.php:178
|
||||||
|
msgid "Inherit workflow down"
|
||||||
|
msgstr "Workflow nach unten vererben"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:48
|
||||||
|
#: includes/include.workflow_steps.php:292
|
||||||
|
msgid "Edit workflow step"
|
||||||
|
msgstr "Workflow Schritt bearbeiten"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:49
|
||||||
|
msgid "Move workflowstep up"
|
||||||
|
msgstr "Workflowschritt nach oben verschieben"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:50
|
||||||
|
msgid "Move workflowstep down"
|
||||||
|
msgstr "Workflowschritt nach unten verschieben"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:51
|
||||||
|
msgid "Save Workflowstep"
|
||||||
|
msgstr "Workflowschritt speichen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:52
|
||||||
|
msgid "Create workflowstep"
|
||||||
|
msgstr "Workflowschritt erstellen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:53
|
||||||
|
msgid "Delete workflowstep"
|
||||||
|
msgstr "Workflowschritt löschen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:54
|
||||||
|
msgid "Move workflowstepuser up"
|
||||||
|
msgstr "Workflowschrittbenutzer nach oben verschieben"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:55
|
||||||
|
msgid "Move workflowstepuser down"
|
||||||
|
msgstr "Workflowschrittbenutzer nach unten verschieben"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:56
|
||||||
|
msgid "Create Workflowstepuser"
|
||||||
|
msgstr "Workflowschrittbenutzer erstellen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:57
|
||||||
|
msgid "Delete Workflowstepuser"
|
||||||
|
msgstr "Workflowschrittbenutzer löschen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:58
|
||||||
|
msgid "Associate workflow with category"
|
||||||
|
msgstr "Workflow zu Kategorien zuweisen"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:165
|
||||||
|
#: includes/config.plugin.php:421
|
||||||
|
#: includes/config.plugin.php:427
|
||||||
|
#: includes/include.workflow_tasks.php:233
|
||||||
|
#: includes/functions.workflow.php:54
|
||||||
|
#: includes/functions.workflow.php:356
|
||||||
|
msgid "None"
|
||||||
|
msgstr "Kein"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:197
|
||||||
|
msgid "Workflow"
|
||||||
|
msgstr "Workflow"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:300
|
||||||
|
#: includes/include.workflow_tasks.php:157
|
||||||
|
msgid "Workflow Step"
|
||||||
|
msgstr "Workflow Schritt"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:301
|
||||||
|
#: includes/include.workflow_tasks.php:158
|
||||||
|
msgid "Workflow Action"
|
||||||
|
msgstr "Workflow Aktion"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:302
|
||||||
|
#: includes/include.workflow_tasks.php:159
|
||||||
|
msgid "Workflow Editor"
|
||||||
|
msgstr "Workflow Bearbeiter"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:303
|
||||||
|
#: includes/include.workflow_tasks.php:160
|
||||||
|
msgid "Last status"
|
||||||
|
msgstr "Letzter Status"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:140
|
||||||
|
msgid "Show users"
|
||||||
|
msgstr "Zeige Benutzer"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:148
|
||||||
|
msgid "Search results"
|
||||||
|
msgstr "Suchergebnis"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:148
|
||||||
|
msgid "Workflow tasks"
|
||||||
|
msgstr "Workflow Aufgaben"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:151
|
||||||
|
msgid "Article"
|
||||||
|
msgstr "Artikel"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:152
|
||||||
|
msgid "Template"
|
||||||
|
msgstr "Template"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:153
|
||||||
|
#: includes/include.workflow_steps.php:300
|
||||||
|
msgid "Actions"
|
||||||
|
msgstr "Aktionen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:154
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Titel"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:155
|
||||||
|
msgid "Changed"
|
||||||
|
msgstr "Geändert"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:156
|
||||||
|
msgid "Published"
|
||||||
|
msgstr "Veröffentlichen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:225
|
||||||
|
msgid "Reminder"
|
||||||
|
msgstr "Wiedervorlage"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:226
|
||||||
|
msgid "Set reminder / add to todo list"
|
||||||
|
msgstr "Wiedervorlage / zur Todoliste hinzuf&uegen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:262
|
||||||
|
#, fuzzy
|
||||||
|
msgid "No article found."
|
||||||
|
msgstr "Kein Artikel gefunden"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:86
|
||||||
|
msgid "New Workflow"
|
||||||
|
msgstr "Neuer Workflow"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:87
|
||||||
|
msgid "Create new workflow"
|
||||||
|
msgstr "Neuer Workflow erzeugen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:97
|
||||||
|
msgid "Workflow name"
|
||||||
|
msgstr "Workflow Name"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:98
|
||||||
|
msgid "Description"
|
||||||
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:99
|
||||||
|
msgid "Author"
|
||||||
|
msgstr "Autor"
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:100
|
||||||
|
msgid "Created"
|
||||||
|
msgstr "Erstellt"
|
||||||
|
|
||||||
|
#: includes/include.workflow_list.php:72
|
||||||
|
#, php-format
|
||||||
|
msgid "Do you really want to delete the following workflow:<br><br>%s<br>"
|
||||||
|
msgstr "Wollen Sie wirklich den folgenden Workflow löschen:<br><br>%s<br>"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:46
|
||||||
|
#: includes/include.workflow_steps.php:388
|
||||||
|
msgid "Add User"
|
||||||
|
msgstr "Benutzer hinzufügen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:78
|
||||||
|
msgid "New Workflow Step"
|
||||||
|
msgstr "Neuer Workflow Schritt"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:142
|
||||||
|
msgid "Seconds"
|
||||||
|
msgstr "Sekunden"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:143
|
||||||
|
msgid "Minutes"
|
||||||
|
msgstr "Minuten"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:144
|
||||||
|
msgid "Hours"
|
||||||
|
msgstr "Stunden"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:145
|
||||||
|
msgid "Days"
|
||||||
|
msgstr "Tage"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:146
|
||||||
|
msgid "Weeks"
|
||||||
|
msgstr "Wochen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:147
|
||||||
|
msgid "Months"
|
||||||
|
msgstr "Monate"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:148
|
||||||
|
msgid "Years"
|
||||||
|
msgstr "Jahre"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:197
|
||||||
|
msgid "Move step up"
|
||||||
|
msgstr "Schritt nach oben bewegen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:205
|
||||||
|
msgid "Move step down"
|
||||||
|
msgstr "Schritt nach unten verschieben"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:215
|
||||||
|
msgid "Delete step"
|
||||||
|
msgstr "Schritt löschen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:257
|
||||||
|
msgid "Create new step"
|
||||||
|
msgstr "Neuen Schritt erzeugen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:293
|
||||||
|
msgid "Step name"
|
||||||
|
msgstr "Name des Schritts"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:294
|
||||||
|
msgid "Step description"
|
||||||
|
msgstr "Beschreibung des Schritts"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:301
|
||||||
|
msgid "Assigned users"
|
||||||
|
msgstr "Zugeordnete Benutzer"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:329
|
||||||
|
msgid "Move user up"
|
||||||
|
msgstr "Benutzer nach oben verschieben"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:338
|
||||||
|
msgid "Move user down"
|
||||||
|
msgstr "Benutzer nach unten verschieben"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:349
|
||||||
|
msgid "Delete user"
|
||||||
|
msgstr "Benutzer löschen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:355
|
||||||
|
msgid "Notify this user via E-Mail"
|
||||||
|
msgstr "Diesen Benutzer per e-Mail benachrichtigen"
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:356
|
||||||
|
msgid "Escalate to this user via E-Mail"
|
||||||
|
msgstr "An diesen Benutzer per e-Mail eskalieren"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:183
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "Bestätigen"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:192
|
||||||
|
msgid "Back to last editor"
|
||||||
|
msgstr "Zurück zum letzten Bearbeiter"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:201
|
||||||
|
#: classes/class.workflowactions.php:77
|
||||||
|
msgid "Reject article"
|
||||||
|
msgstr "Artikel ablehnen"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:210
|
||||||
|
#: classes/class.workflowactions.php:81
|
||||||
|
msgid "Revise article"
|
||||||
|
msgstr "Artikel überarbeiten"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:344
|
||||||
|
msgid "Rejected"
|
||||||
|
msgstr "Abgelehnt"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:347
|
||||||
|
msgid "Revised"
|
||||||
|
msgstr "überarbeitet"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:350
|
||||||
|
msgid "Last"
|
||||||
|
msgstr "Letzter"
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:353
|
||||||
|
msgid "Confirmed"
|
||||||
|
msgstr "Bestätigt"
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:72
|
||||||
|
msgid "Article doesn't exist"
|
||||||
|
msgstr "Artikel existiert nicht."
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:80
|
||||||
|
msgid "Article is already assigned to a usersequence step."
|
||||||
|
msgstr "Artikel ist bereits Benutzerschritt zugeordnet."
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:286
|
||||||
|
#: classes/class.workflowartallocation.php:295
|
||||||
|
msgid "Workflow notification"
|
||||||
|
msgstr "Workflow Notifikation"
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:336
|
||||||
|
#: classes/class.workflowartallocation.php:346
|
||||||
|
msgid "Workflow escalation"
|
||||||
|
msgstr "Workflow Steigerung"
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:117
|
||||||
|
#: classes/class.workflowallocation.php:223
|
||||||
|
msgid "Category already has a workflow assigned"
|
||||||
|
msgstr "Kategorie ist bereits Workflow zugeordnet"
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:126
|
||||||
|
#: classes/class.workflowallocation.php:199
|
||||||
|
#: classes/class.workflowitems.php:299
|
||||||
|
msgid "Workflow doesn't exist"
|
||||||
|
msgstr "Workflow existiert nicht"
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:233
|
||||||
|
msgid "Category doesn't exist, assignment failed"
|
||||||
|
msgstr "Kategorie existiert nicht, Zuordnung fehlgeschlagen"
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:133
|
||||||
|
#: classes/class.workflowitems.php:142
|
||||||
|
#: classes/class.workflowusersequence.php:139
|
||||||
|
#: classes/class.workflowusersequence.php:148
|
||||||
|
msgid "Swapping items failed: Item doesn't exist"
|
||||||
|
msgstr "Tausch der Einträge fehlgeschlagen: Eintrag nicht vorhanden"
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:169
|
||||||
|
msgid "Can't add item to workflow: Workflow doesn't exist"
|
||||||
|
msgstr "Zuordnung des Eintrags zum Workflow nicht möglich: Workflow existiert nicht"
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:251
|
||||||
|
msgid "No item loaded"
|
||||||
|
msgstr "Kein Eintrag geladen"
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:276
|
||||||
|
msgid "Requested task doesn't exist, can't assign"
|
||||||
|
msgstr "Gewünschte Aufgabe existiert nicht, Zuordnung nicht möglich"
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:307
|
||||||
|
msgid "Position in this workflow already exists."
|
||||||
|
msgstr "Position existiert bereits in diesem Workflow."
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:74
|
||||||
|
msgid "Publish article"
|
||||||
|
msgstr "Artikel veröffentlichen"
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:75
|
||||||
|
msgid "Lock article"
|
||||||
|
msgstr "Artikel sperren"
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:76
|
||||||
|
msgid "Move back to last editor"
|
||||||
|
msgstr "Zurück zum letzten Bearbeiter"
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:78
|
||||||
|
msgid "Edit article content"
|
||||||
|
msgstr "Artikelinhalt bearbeiten"
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:79
|
||||||
|
msgid "Edit article properties"
|
||||||
|
msgstr "Artikeleigenschaften bearbeiten"
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:80
|
||||||
|
msgid "Edit template"
|
||||||
|
msgstr "Template bearbeiten"
|
||||||
|
|
||||||
|
#: classes/class.workflowusersequence.php:112
|
||||||
|
msgid "Workflow item doesn't exist. Can't create entry."
|
||||||
|
msgstr "Workflow existiert nicht. Eintrag kann nicht erstellt werden."
|
||||||
|
|
||||||
|
#: classes/class.workflowusersequence.php:229
|
||||||
|
msgid "Can't set user_id: User or group doesn't exist"
|
||||||
|
msgstr "Kann Benutzer-Id nicht zuweisen: Benutzer oder Gruppe nicht vorhanden"
|
||||||
|
|
||||||
|
#~ msgid "Recently edited articles"
|
||||||
|
#~ msgstr "Zuletzt bearbeitete Artikel"
|
||||||
|
|
||||||
|
#~ msgid "Change client"
|
||||||
|
#~ msgstr "Mandanten wechseln"
|
||||||
|
|
||||||
|
#~ msgid "Welcome"
|
||||||
|
#~ msgstr "Willkommen"
|
||||||
|
|
||||||
|
#~ msgid "You are logged in as"
|
||||||
|
#~ msgstr "Sie sind angemeldet als"
|
||||||
|
|
||||||
|
#~ msgid "Last login"
|
||||||
|
#~ msgstr "Letzter Login"
|
||||||
|
|
||||||
|
#~ msgid "Article is online"
|
||||||
|
#~ msgstr "Artikel ist online"
|
||||||
|
|
||||||
|
#~ msgid "Article is offline"
|
||||||
|
#~ msgstr "Artikel ist offline"
|
||||||
|
|
||||||
|
#~ msgid "Current workflow tasks"
|
||||||
|
#~ msgstr "Aktuelle Workflow Aufgaben"
|
||||||
|
|
||||||
|
#~ msgid "Client"
|
||||||
|
#~ msgstr "Mandant"
|
||||||
|
|
||||||
|
#~ msgid "Language"
|
||||||
|
#~ msgstr "Sprache"
|
||||||
|
|
||||||
|
#~ msgid "No tasks found"
|
||||||
|
#~ msgstr "Keine Aufgabe gefunden"
|
||||||
|
|
||||||
|
#~ msgid "Status"
|
||||||
|
#~ msgstr "Status"
|
||||||
|
|
||||||
|
#~ msgid "Step"
|
||||||
|
#~ msgstr "Schritt"
|
||||||
|
|
||||||
|
#~ msgid "Assign workflow to category"
|
||||||
|
#~ msgstr "Workflow einer Kategorie zuordnen"
|
18
locale/potfiles.txt
Normale Datei
|
@ -0,0 +1,18 @@
|
||||||
|
./includes/include.workflow_subnav.php
|
||||||
|
./includes/config.plugin.php
|
||||||
|
./includes/include.workflow_tasks.php
|
||||||
|
./includes/include.workflow_edit.php
|
||||||
|
./includes/include.workflow_left_top.php
|
||||||
|
./includes/include.workflow_list.php
|
||||||
|
./includes/include.workflow_steps.php
|
||||||
|
./includes/functions.workflow.php
|
||||||
|
./cronjobs/advance_workflow.php
|
||||||
|
./templates/template.workflow_steps.html
|
||||||
|
./templates/template.workflow_tasks.html
|
||||||
|
./classes/class.workflowartallocation.php
|
||||||
|
./classes/class.workflowallocation.php
|
||||||
|
./classes/class.workflowitems.php
|
||||||
|
./classes/class.workflowactions.php
|
||||||
|
./classes/class.workflowtasks.php
|
||||||
|
./classes/class.workflowusersequence.php
|
||||||
|
./classes/class.workflow.php
|
398
locale/workflow.pot
Normale Datei
|
@ -0,0 +1,398 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-05-18 11:03+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:40 includes/include.workflow_list.php:71
|
||||||
|
msgid "Delete workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:41
|
||||||
|
msgid "Select workflow task"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:42
|
||||||
|
msgid "Show workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:43 includes/include.workflow_left_top.php:37
|
||||||
|
msgid "Create workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:44 includes/include.workflow_edit.php:89
|
||||||
|
msgid "Edit workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:45
|
||||||
|
msgid "Process workflow step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:46 includes/config.plugin.php:47
|
||||||
|
#: includes/config.plugin.php:178
|
||||||
|
msgid "Inherit workflow down"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:48 includes/include.workflow_steps.php:292
|
||||||
|
msgid "Edit workflow step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:49
|
||||||
|
msgid "Move workflowstep up"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:50
|
||||||
|
msgid "Move workflowstep down"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:51
|
||||||
|
msgid "Save Workflowstep"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:52
|
||||||
|
msgid "Create workflowstep"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:53
|
||||||
|
msgid "Delete workflowstep"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:54
|
||||||
|
msgid "Move workflowstepuser up"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:55
|
||||||
|
msgid "Move workflowstepuser down"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:56
|
||||||
|
msgid "Create Workflowstepuser"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:57
|
||||||
|
msgid "Delete Workflowstepuser"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:58
|
||||||
|
msgid "Associate workflow with category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:165 includes/config.plugin.php:421
|
||||||
|
#: includes/config.plugin.php:427 includes/include.workflow_tasks.php:233
|
||||||
|
#: includes/functions.workflow.php:54 includes/functions.workflow.php:356
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:197
|
||||||
|
msgid "Workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:300 includes/include.workflow_tasks.php:157
|
||||||
|
msgid "Workflow Step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:301 includes/include.workflow_tasks.php:158
|
||||||
|
msgid "Workflow Action"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:302 includes/include.workflow_tasks.php:159
|
||||||
|
msgid "Workflow Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/config.plugin.php:303 includes/include.workflow_tasks.php:160
|
||||||
|
msgid "Last status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:140
|
||||||
|
msgid "Show users"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:148
|
||||||
|
msgid "Search results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:148
|
||||||
|
msgid "Workflow tasks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:151
|
||||||
|
msgid "Article"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:152
|
||||||
|
msgid "Template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:153
|
||||||
|
#: includes/include.workflow_steps.php:300
|
||||||
|
msgid "Actions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:154
|
||||||
|
msgid "Title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:155
|
||||||
|
msgid "Changed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:156
|
||||||
|
msgid "Published"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:225
|
||||||
|
msgid "Reminder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:226
|
||||||
|
msgid "Set reminder / add to todo list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_tasks.php:262
|
||||||
|
msgid "No article found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:86
|
||||||
|
msgid "New Workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:87
|
||||||
|
msgid "Create new workflow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:97
|
||||||
|
msgid "Workflow name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:98
|
||||||
|
msgid "Description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:99
|
||||||
|
msgid "Author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_edit.php:100
|
||||||
|
msgid "Created"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_list.php:72
|
||||||
|
#, php-format
|
||||||
|
msgid "Do you really want to delete the following workflow:<br><br>%s<br>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:46
|
||||||
|
#: includes/include.workflow_steps.php:388
|
||||||
|
msgid "Add User"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:78
|
||||||
|
msgid "New Workflow Step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:142
|
||||||
|
msgid "Seconds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:143
|
||||||
|
msgid "Minutes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:144
|
||||||
|
msgid "Hours"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:145
|
||||||
|
msgid "Days"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:146
|
||||||
|
msgid "Weeks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:147
|
||||||
|
msgid "Months"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:148
|
||||||
|
msgid "Years"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:197
|
||||||
|
msgid "Move step up"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:205
|
||||||
|
msgid "Move step down"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:215
|
||||||
|
msgid "Delete step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:257
|
||||||
|
msgid "Create new step"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:293
|
||||||
|
msgid "Step name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:294
|
||||||
|
msgid "Step description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:301
|
||||||
|
msgid "Assigned users"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:329
|
||||||
|
msgid "Move user up"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:338
|
||||||
|
msgid "Move user down"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:349
|
||||||
|
msgid "Delete user"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:355
|
||||||
|
msgid "Notify this user via E-Mail"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/include.workflow_steps.php:356
|
||||||
|
msgid "Escalate to this user via E-Mail"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:183
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:192
|
||||||
|
msgid "Back to last editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:201 classes/class.workflowactions.php:77
|
||||||
|
msgid "Reject article"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:210 classes/class.workflowactions.php:81
|
||||||
|
msgid "Revise article"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:344
|
||||||
|
msgid "Rejected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:347
|
||||||
|
msgid "Revised"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:350
|
||||||
|
msgid "Last"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/functions.workflow.php:353
|
||||||
|
msgid "Confirmed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:72
|
||||||
|
msgid "Article doesn't exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:80
|
||||||
|
msgid "Article is already assigned to a usersequence step."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:286
|
||||||
|
#: classes/class.workflowartallocation.php:295
|
||||||
|
msgid "Workflow notification"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowartallocation.php:336
|
||||||
|
#: classes/class.workflowartallocation.php:346
|
||||||
|
msgid "Workflow escalation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:117
|
||||||
|
#: classes/class.workflowallocation.php:223
|
||||||
|
msgid "Category already has a workflow assigned"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:126
|
||||||
|
#: classes/class.workflowallocation.php:199
|
||||||
|
#: classes/class.workflowitems.php:299
|
||||||
|
msgid "Workflow doesn't exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowallocation.php:233
|
||||||
|
msgid "Category doesn't exist, assignment failed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:133 classes/class.workflowitems.php:142
|
||||||
|
#: classes/class.workflowusersequence.php:139
|
||||||
|
#: classes/class.workflowusersequence.php:148
|
||||||
|
msgid "Swapping items failed: Item doesn't exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:169
|
||||||
|
msgid "Can't add item to workflow: Workflow doesn't exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:251
|
||||||
|
msgid "No item loaded"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:276
|
||||||
|
msgid "Requested task doesn't exist, can't assign"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowitems.php:307
|
||||||
|
msgid "Position in this workflow already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:74
|
||||||
|
msgid "Publish article"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:75
|
||||||
|
msgid "Lock article"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:76
|
||||||
|
msgid "Move back to last editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:78
|
||||||
|
msgid "Edit article content"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:79
|
||||||
|
msgid "Edit article properties"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowactions.php:80
|
||||||
|
msgid "Edit template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowusersequence.php:112
|
||||||
|
msgid "Workflow item doesn't exist. Can't create entry."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: classes/class.workflowusersequence.php:229
|
||||||
|
msgid "Can't set user_id: User or group doesn't exist"
|
||||||
|
msgstr ""
|
13
templates/template.workflow_steps.html
Normale Datei
|
@ -0,0 +1,13 @@
|
||||||
|
<div class="grey">
|
||||||
|
{NEW}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="left_list">
|
||||||
|
{STEPS}
|
||||||
|
</div>
|
||||||
|
<div class="right_list">
|
||||||
|
{EDITSTEP}
|
||||||
|
</div>
|
||||||
|
<div class="right_list">
|
||||||
|
i18n('Warning: Changes will reset active Workflows')
|
||||||
|
</div>
|
157
templates/template.workflow_tasks.html
Normale Datei
|
@ -0,0 +1,157 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{TITLE}</title>
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<link rel="stylesheet" type="text/css" href="styles/contenido.css" />
|
||||||
|
<script type="text/javascript" src="scripts/rowMark.js"></script>
|
||||||
|
<script type="text/javascript" src="scripts/general.js"></script>
|
||||||
|
<script type="text/javascript" src="scripts/messageBox.js.php?{SESSNAME}={SESSID}"></script>
|
||||||
|
<script type="text/javascript" src="scripts/articleObject.js.php?{SESSNAME}={SESSID}"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
/* Contenido Session-ID */
|
||||||
|
var sid = "{SESSID}";
|
||||||
|
|
||||||
|
/* New messageBox instance */
|
||||||
|
box = new messageBox("", "", "", 0, 0);
|
||||||
|
|
||||||
|
/* Function for deleting articles */
|
||||||
|
function deleteArticle(idart, idcat) {
|
||||||
|
var url = "main.php?area=con&action=con_deleteart&frame=4&idcat="+idcat+"&idart="+idart+"&{SESSNAME}="+sid;
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUsershow() {
|
||||||
|
document.forms['showusers'].setAttribute('action', document.forms['showusers'].getAttribute('action')+'&usershow='+document.showusers.usershow.value);
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body style="margin: 10px;">
|
||||||
|
<div style="border: 1px solid #B3B3B3; background: #E2E2E2; margin: 0 0 10px 0; padding: 2px; vertical-ailgn:middle; line-height:20px;">
|
||||||
|
<div style="float:right; width:400px; text-align:right;">{USERSELECT}</div>
|
||||||
|
{PAGE_TITLE}
|
||||||
|
<div style="clear:both;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="2" class="bordered" style="display:{DISPLAY}">
|
||||||
|
<tr>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_START}</td>
|
||||||
|
<td width="100%" class="headerbordercell" nowrap="nowrap">{TH_TITLE}</td>
|
||||||
|
<td width="100%" class="headerbordercell" nowrap="nowrap">{TH_WORKFLOW_STEP}</td>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_WORKFLOW_ACTION}</td>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_WORKFLOW_EDITOR}</td>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_LAST_STATUS}</td>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_TEMPLATE}</td>
|
||||||
|
<td width="1%" class="headerbordercell" nowrap="nowrap">{TH_ACTIONS}</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- BEGIN:BLOCK -->
|
||||||
|
<tr id="{ROWID}" class="text_medium" style="{BGCOLOR}" onmouseover="artRow.over(this)" onmouseout="artRow.out(this)" onclick="artRow.click(this)">
|
||||||
|
<td nowrap="nowrap" class="bordercell">{START}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{TITLE}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{WORKFLOW_STEP}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{WORKFLOW_ACTION}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{WORKFLOW_EDITOR}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{LAST_STATUS}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{TEMPLATE}</td>
|
||||||
|
<td nowrap="nowrap" class="bordercell">{ACTIONS}</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END:BLOCK -->
|
||||||
|
|
||||||
|
{NO_ARTICLES_ROW}
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
rcount = 0;
|
||||||
|
|
||||||
|
/* Update frame right top for sub navigation */
|
||||||
|
{SUBNAVI}
|
||||||
|
|
||||||
|
/* Create a reference to the Article Object in frame 'right_top' */
|
||||||
|
artObj = parent.parent.frames["left"].frames["left_top"].artObj;
|
||||||
|
|
||||||
|
/* Reset article object
|
||||||
|
properties. e.g. Some article was edited and we are now back in the
|
||||||
|
overview mask. There is now no marked article, the articleObject data
|
||||||
|
should be reset. */
|
||||||
|
if ( artObj ) {
|
||||||
|
artObj.reset();
|
||||||
|
artObj.enable();
|
||||||
|
artObj.setHrefOverview(document.location.href);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Timeout to call the function afer 250ms */
|
||||||
|
window.setTimeout("createReference()", 250);
|
||||||
|
|
||||||
|
/* Javascript-Error work-around... try to create the reference after
|
||||||
|
250ms again... and hope it works.. */
|
||||||
|
function createReference() {
|
||||||
|
if( !artObj ) {
|
||||||
|
artObj=parent.parent.frames["left"].frames["left_top"].artObj;
|
||||||
|
if( artObj ) {
|
||||||
|
artObj.reset();
|
||||||
|
artObj.enable();
|
||||||
|
artObj.setHrefOverview(document.location.href);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( !artObj ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Extract data from the article grid and send
|
||||||
|
them to the articleObject Instance. The data is stored in the
|
||||||
|
attribute 'id' of the row object. */
|
||||||
|
function conArtOverviewExtractData( obj ) {
|
||||||
|
if( !artObj ) {
|
||||||
|
var rval=createReference();
|
||||||
|
if (rval== false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var datastring=obj.id;
|
||||||
|
var data=datastring.split( "-" );
|
||||||
|
|
||||||
|
if ( data.length== 6 ) {
|
||||||
|
/* Send data to articleObject instance:
|
||||||
|
0: idart
|
||||||
|
1: idartlang
|
||||||
|
2: idcat
|
||||||
|
3: idcatlang
|
||||||
|
5: idcatart */
|
||||||
|
|
||||||
|
artObj.setProperties(data[0], data[1], data[2], data[3], data[4], data[5]);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mark the first submenu item i.e. 'Overview' */
|
||||||
|
if( parent.parent.frames['right'].frames['right_top'].document.getElementById('c_0') ) {
|
||||||
|
menuItem=parent.parent.frames['right'].frames['right_top'].document.getElementById('c_0');
|
||||||
|
parent.parent.frames['right'].frames['right_top'].sub.click(menuItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initTheOne() {
|
||||||
|
var theOne = document.getElementById("{FIRST_ROWID}");
|
||||||
|
artRow.reset();
|
||||||
|
artRow.over( theOne );
|
||||||
|
artRow.click( theOne )
|
||||||
|
}
|
||||||
|
initTheOne();
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
17
xml/lang_de_DE.xml
Normale Datei
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<language>
|
||||||
|
|
||||||
|
<navigation>
|
||||||
|
|
||||||
|
<extra>
|
||||||
|
<workflow>
|
||||||
|
<main>Workflow</main>
|
||||||
|
<settings>Workflow-Einstellungen</settings>
|
||||||
|
<steps>Schritte</steps>
|
||||||
|
</workflow>
|
||||||
|
</extra>
|
||||||
|
|
||||||
|
</navigation>
|
||||||
|
|
||||||
|
|
||||||
|
</language>
|
17
xml/lang_en_EN.xml
Normale Datei
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<language>
|
||||||
|
|
||||||
|
<navigation>
|
||||||
|
|
||||||
|
<extra>
|
||||||
|
<workflow>
|
||||||
|
<main>Workflow</main>
|
||||||
|
<settings>Workflow-Properties</settings>
|
||||||
|
<steps>Steps</steps>
|
||||||
|
</workflow>
|
||||||
|
</extra>
|
||||||
|
|
||||||
|
</navigation>
|
||||||
|
|
||||||
|
|
||||||
|
</language>
|
17
xml/lang_en_US.xml
Normale Datei
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<language>
|
||||||
|
|
||||||
|
<navigation>
|
||||||
|
|
||||||
|
<extra>
|
||||||
|
<workflow>
|
||||||
|
<main>Workflow</main>
|
||||||
|
<settings>Workflow-Properties</settings>
|
||||||
|
<steps>Steps</steps>
|
||||||
|
</workflow>
|
||||||
|
</extra>
|
||||||
|
|
||||||
|
</navigation>
|
||||||
|
|
||||||
|
|
||||||
|
</language>
|