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>
|