* SPDX-License-Identifier: AGPL-3.0-only
************************************/
//A collection of util functions for the workflow module
class VTWorkflowUtils{
function __construct(){
global $current_user;
$this->userStack = array();
}
/**
* Check whether the given identifier is valid.
*/
function validIdentifier($identifier){
if(is_string($identifier)){
return preg_match("/^[a-zA-Z][a-zA-Z_0-9]+$/", $identifier);
}else{
return false;
}
}
/**
* Push the admin user on to the user stack
* and make it the $current_user
*
*/
function adminUser(){
$user = Users::getActiveAdminUser(); //crmv@180676
global $current_user;
array_push($this->userStack, $current_user);
$current_user = $user;
return $user;
}
/**
* Revert to the previous use on the user stack
*/
function revertUser(){
global $current_user;
if(count($this->userStack)!=0){
$current_user = array_pop($this->userStack);
}else{
$current_user = null;
}
return $current_user;
}
/**
* Get the current user
*/
function currentUser(){
return $current_user;
}
/**
* The the webservice entity type of an EntityData object
*/
function toWSModuleName($entityData){
$moduleName = $entityData->getModuleName();
if($moduleName == 'Activity'){
$arr = array('Task' => 'Calendar', 'Emails' => 'Emails');
$moduleName = $arr[getActivityType($entityData->getId())];
if($moduleName == null){
$moduleName = 'Events';
}
}
return $moduleName;
}
/**
* Insert redirection script
*/
function redirectTo($to, $message){
?>
">
is_admin)==='on';
}
/**
* function to check if the module has workflow
* @params :: $modulename - name of the module
*/
function checkModuleWorkflow($modulename){
global $adb,$table_prefix;
$tabid = getTabid($modulename);
$modules_not_supported = array('Documents','Calendar','Emails','Faq','Events','PBXManager','Users','Processes');
$query = "SELECT name FROM ".$table_prefix."_tab WHERE name not in (".generateQuestionMarks($modules_not_supported).") AND isentitytype=1 AND presence = 0 AND tabid = ?";
$result = $adb->pquery($query,array($modules_not_supported,$tabid));
$rows = $adb->num_rows($result);
if($rows > 0){
return true;
}else{
return false;
}
}
function vtGetModules($adb){
global $table_prefix;
$modules_not_supported = array('Documents','Calendar','Emails','Faq','Events','PBXManager','Users','ModComments','Processes'); //crmv@37660 crmv@164120 crmv@164122
$sql="select distinct ".$table_prefix."_field.tabid, name
from ".$table_prefix."_field
inner join ".$table_prefix."_tab
on ".$table_prefix."_field.tabid=".$table_prefix."_tab.tabid
where ".$table_prefix."_tab.name not in(".generateQuestionMarks($modules_not_supported).") and ".$table_prefix."_tab.isentitytype=1 and ".$table_prefix."_tab.presence = 0 ";
$it = new SqlResultIterator($adb, $adb->pquery($sql,array($modules_not_supported)));
$modules = array();
foreach($it as $row){
$modules[$row->name] = getTranslatedString($row->name, $row->name);
}
asort($modules);
return $modules;
}
// crmv@177071
/**
* Check all update tasks and change the userid with the new one.
* Used when a user is deleted and ownership is transferd to another user.
*/
public function changeOwnerInTasks($olduser, $newuser) {
global $adb,$table_prefix;
require_once('modules/com_workflow/VTTaskManager.inc');//crmv@207901
$TM = new VTTaskManager($adb);
// get all update tasks
$res = $adb->query(
"SELECT wft.task_id, wf.module_name
FROM com_{$table_prefix}_workflowtasks wft
INNER JOIN com_{$table_prefix}_workflows wf ON wf.workflow_id = wft.workflow_id
WHERE wft.task LIKE 'O:17:\"VTUpdateFieldTask\"%'"
);
while ($row = $adb->FetchByAssoc($res, -1, false)) {
$module = $row['module_name'];
$tabid = getTabid2($module);
$task = $TM->retrieveTask($row['task_id']);
if ($task->fieldValue == $olduser) { // make here the comparison, to skip the query if it doesn't match
// get field info
$res2 = $adb->pquery("SELECT uitype FROM {$table_prefix}_field WHERE tabid = ? AND fieldname = ?", array($tabid, $task->fieldName));
if ($res2 && $adb->num_rows($res2) > 0) {
$uitype = intval($adb->query_result_no_html($res2, 0, 'uitype'));
if (in_array($uitype, array(50,51,52,53,77,101))) {
$task->fieldValue = $newuser;
$TM->saveTask($task);
}
}
}
}
}
// crmv@177071e
}