vtenext/modules/Settings/ProcessMaker/ProcessDynaForm.php
2021-04-28 20:10:26 +02:00

1273 lines
50 KiB
PHP
Raw Blame History

<?php
/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@96450 crmv@105685 crmv@105937 crmv@106857 crmv@112297 crmv@115268 crmv@134058 crmv@150751 */
require_once('modules/com_workflow/VTEntityCache.inc');//crmv@207901
require_once('modules/com_workflow/VTSimpleTemplate.inc');//crmv@207901
require_once('modules/Settings/ProcessMaker/ProcessDynaForm.php');
require_once('modules/Settings/ProcessMaker/ProcessMakerUtils.php');
class ProcessDynaForm extends SDKExtendableClass {
function getStructure($processmaker, $elementid=false, $metaid=false, $running_process='') {
$PMUtils = ProcessMakerUtils::getInstance();
(!empty($running_process)) ? $xml_version = $PMUtils->getSystemVersion4RunningProcess($running_process,array('processmaker','xml_version')) : $xml_version = '';
$data = $PMUtils->retrieve($processmaker,$xml_version);
$helper = Zend_Json::decode($data['helper']);
if (!$elementid) {
$meta = $this->getMeta($processmaker, $elementid, $metaid, $running_process);
$elementid = $meta['elementid'];
}
if (isset($helper[$elementid]['dynaform'])) {
return $helper[$elementid]['dynaform']['mmaker_blocks'];
}
return false;
}
function getCurrentDynaForm($focus, &$elementid='') {
global $adb, $table_prefix;
static $current_dynaform = array();
$blocks = array();
$elementid = '';
// crmv@195977
$processesid = $focus->id;
if (empty($processesid) && is_array($focus) && !empty($focus['record_id']) && $focus['record_module'] == 'Processes') $processesid = $focus['record_id'];
$result = $adb->pquery("select current_dynaform from {$table_prefix}_process_gateway_conn where processesid = ?", array($processesid));
// crmv@195977e
if ($result && $adb->num_rows($result) > 0) {
$elementid = $adb->query_result($result,0,'current_dynaform');
}
if (empty($elementid)) {
$result = $adb->pquery("select current_dynaform from {$table_prefix}_running_processes where id = ?", array($focus->column_fields['running_process']));
if ($result && $adb->num_rows($result) > 0) {
$elementid = $adb->query_result($result,0,'current_dynaform');
}
}
// crmv@203119_2
if (!empty($elementid)) {
if (!isset($current_dynaform[$focus->column_fields['processmaker']][$elementid])) {
$current_dynaform[$focus->column_fields['processmaker']][$elementid] = $this->getStructure($focus->column_fields['processmaker'], $elementid, false, $focus->column_fields['running_process']);
}
$blocks = $current_dynaform[$focus->column_fields['processmaker']][$elementid];
}
// crmv@203119_2e
//crmv@160837 TODO add displaytype
if (!empty($blocks)) {
foreach($blocks as &$block) {
if (!empty($block['fields'])) {
foreach($block['fields'] as &$field) {
if (!isset($field['displaytype'])) {
$field['displaytype'] = 1;
if ($field['uitype'] == 70) $field['displaytype'] = 2;
}
}
}
}
}
//crmv@160837e
return $blocks;
}
function formatField(&$field) {
$fieldType = $this->getFieldTypeFromUIType($field['uitype']);
if ($fieldType === null) {
$ModuleMakerGenerator = new ProcessModuleMakerGenerator();
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
$typeofdata = explode('~',$typeofdata);
$fieldType = $this->getFieldTypeFromTypeOfData($typeofdata[0]);
}
$field['type'] = $fieldType;
}
function getFields($focus, &$elementid='', $add_table_fields=false) {
$fields = array();
$blocks = $this->getCurrentDynaForm($focus, $elementid);
if (!empty($blocks)) {
foreach($blocks as $block) {
if (!empty($block['fields'])) {
foreach($block['fields'] as $field) {
$this->formatField($field);
if ($add_table_fields && $field['type'] == 'table') {
if (!empty($field['columns'])) {
$columns = Zend_Json::decode($field['columns']);
$tmp_columns = array();
foreach($columns as $column) {
$this->formatField($column);
$tmp_columns[$column['fieldname']] = $column;
}
$field['columns'] = $tmp_columns;
}
}
$fields[$field['fieldname']] = $field;
}
}
}
}
return $fields;
}
function getFieldVisibilityPermission($focus, $fieldname) {
$blocks = $this->getCurrentDynaForm($focus);
if (!empty($blocks)) {
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
if ($field['fieldname'] == $fieldname) return true;
}
}
}
return false;
}
function getMeta($processmaker, $elementid=false, $metaid=false, $running_process='') {
global $adb, $table_prefix;
static $metaCache = array();
if (!isset($metaCache[$processmaker])) {
$PMUtils = ProcessMakerUtils::getInstance();
(!empty($running_process)) ? $xml_version = $PMUtils->getSystemVersion4RunningProcess($running_process,array('processmaker','xml_version')) : $xml_version = '';
if (!empty($xml_version)) {
$query = "SELECT * FROM {$table_prefix}_process_dynaform_meta_vh WHERE versionid = ? and processid = ?";
$params = array($xml_version, $processmaker);
} else {
$query = "SELECT * FROM {$table_prefix}_process_dynaform_meta WHERE processid = ?";
$params = array($processmaker);
}
$result = $adb->pquery($query, $params);
if ($result && $adb->num_rows($result) > 0) {
while($row=$adb->fetchByAssoc($result)) {
$metaCache[$processmaker]['elements'][$row['elementid']] = $row;
$metaCache[$processmaker]['meta'][$row['id']] = $row;
}
} else {
return false;
}
}
if (isset($metaCache[$processmaker])) {
if (!$elementid) {
return $metaCache[$processmaker]['meta'][$metaid];
} else {
return $metaCache[$processmaker]['elements'][$elementid];
}
}
return false;
}
function getProcessesId($running_process, $metaid) {
global $adb, $table_prefix;
static $processesIds = array();
if (empty($processesIds[$running_process][$metaid])) {
$result = $adb->pquery("SELECT p.processesid FROM {$table_prefix}_processes p
INNER JOIN {$table_prefix}_process_dynaform d ON p.running_process = d.running_process
WHERE p.deleted = ? and p.running_process = ? AND d.metaid = ?", array(0, $running_process, $metaid)); // crmv@185647 crmv@192951
if ($result && $adb->num_rows($result) > 0) {
$processesIds[$running_process][$metaid] = $adb->query_result($result,0,'processesid');
} else {
$processesIds[$running_process][$metaid] = false;
}
}
return $processesIds[$running_process][$metaid];
}
/*
public static $resetCache = array();
public static function setResetCache($running_process, $metaid) {
self::$resetCache[$running_process][$metaid] = true;
}
*/
function getValues($running_process, $metaid) {
global $adb, $table_prefix;
/* TODO usare una cache e distruggerla al salvataggio del record Processes
* il problema accade se generi una form dinamica e poi un controllo alla sua modifica, alle volte ha in memoria ancora i vecchi valori
static $valuesCache = array();
if (self::$resetCache[$running_process][$metaid]) {
$valuesCache[$running_process][$metaid] = null;
unset(self::$resetCache[$running_process][$metaid]);
}
if (!isset($valuesCache[$running_process][$metaid])) {
*/
$form = array();
$result = $adb->pquery("select form from {$table_prefix}_process_dynaform where running_process = ? and metaid = ?", array($running_process, $metaid));
if ($result && $adb->num_rows($result) > 0) {
$form = Zend_Json::decode($adb->query_result_no_html($result,0,'form'));
}
//crmv@105312
$processesid = $this->getProcessesId($running_process, $metaid);
if (!empty($processesid)) $form['crmid'] = $processesid;
//crmv@105312e
/*
$valuesCache[$running_process][$metaid] = $form;
}
return $valuesCache[$running_process][$metaid];
*/
return $form;
}
function retrieveDynaform(&$focus,&$request) {
$elementid = '';
$blocks = $this->getCurrentDynaForm($focus,$elementid);
if (!empty($blocks)) {
$meta = $this->getMeta($focus->column_fields['processmaker'], $elementid, false, $focus->column_fields['running_process']);
if ($meta) $save = $this->getValues($focus->column_fields['running_process'], $meta['id']);
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
$focus->column_fields[$field['fieldname']] = $request[$field['fieldname']] = $save[$field['fieldname']];
}
}
}
}
// crmv@102879
/**
* convert a value from the display format to the database format
*/
function formatValue($value, $field, &$form=null) {
//crmv@113771
$crmvUtils = CRMVUtils::getInstance();
return $crmvUtils->formatValue($value, $field, $form);
//crmv@113771e
}
function parseTableField($field, &$form, $use_id=false) {
$fieldname = $field['fieldname'];
if (!is_array($field['columns'])) $columns = Zend_Json::decode($field['columns']); else $columns = $field['columns'];
if (!is_array($columns) || count($columns) == 0) return null;
$maxrowno = $form[$fieldname.'_lastrowno'];
$result = array();
for ($rowno = 0; $rowno < $maxrowno; ++$rowno) {
$resrow = array();
foreach ($columns as $column) {
$colname = $column['fieldname'];
if ($form[$fieldname.'_row_'.$rowno] == '1') {
$colvalue = $form[$fieldname.'_'.$colname.'_'.$rowno];
$colvalue = $this->formatValue($colvalue, $column);
$resrow[$colname] = $colvalue;
}
}
if (count($resrow) > 0) {
if ($use_id) {
$tmp = array(
'id'=>$form[$fieldname.'_rowid_'.$rowno],
'row'=>$resrow,
);
} else {
$tmp = $resrow;
}
$sequence = $form[$fieldname.'_seq_'.$rowno];
if (!isset($result[$sequence])) $result[$sequence] = $tmp;
else $result[] = $tmp; // in order to prevent overwrite due by javascript errors
}
}
ksort($result);
$result = array_values($result);
return $result;
}
// crmv@102879e
//crmv@141827
function save($focus,$form) {
global $adb, $table_prefix, $currentModule, $current_user;
$save = array();
$elementid = '';
$blocks = $this->getCurrentDynaForm($focus,$elementid);
$meta = $this->getMeta($focus->column_fields['processmaker'], $elementid, false, $focus->column_fields['running_process']);
if ($meta) {
$result = $adb->pquery("select * from {$table_prefix}_process_dynaform where running_process = ? and metaid = ?", array($focus->column_fields['running_process'],$meta['id']));
($result && $adb->num_rows($result) > 0) ? $mode = 'update' : $mode = 'create';
if (!empty($blocks)) {
//crmv@105312 : fixed update bug (overwrites the values of other dynamic forms)
if ($mode == 'update') {
$save = $this->getValues($focus->column_fields['running_process'], $meta['id']);
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
if (array_key_exists($field['fieldname'],$form)) {
// uso formatValue in quanto i valori arrivan da editview con le varie formattazioni
$save[$field['fieldname']] = $this->formatValue($form[$field['fieldname']],$field, $form); // crmv@102879
}
}
}
} elseif ($mode == 'create' && isset($focus->engine)) {
// load default values
$form = $this->getDefaultValues($focus->engine,$blocks);
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
// non uso formatValue perchè i valori di default sono gia' in formatio db
$save[$field['fieldname']] = $form[$field['fieldname']];
}
}
}
//crmv@105312e
}
if ($mode == 'create') {
$adb->pquery("insert into {$table_prefix}_process_dynaform(running_process,metaid,form) values(?,?,?)", array($focus->column_fields['running_process'],$meta['id'],Zend_Json::encode($save)));
} elseif ($mode == 'update') {
$adb->pquery("update {$table_prefix}_process_dynaform set form = ? where running_process = ? and metaid = ?", array(Zend_Json::encode($save),$focus->column_fields['running_process'],$meta['id']));
}
//crmv@185786
if (!empty($blocks)) {
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
$fieldname = $field['fieldname'];
$sdk_file = SDK::getUitypeFile('php','dynaform.insert.after',$field['uitype']);
if ($sdk_file != '') {
include($sdk_file);
}
}
}
}
//crmv@185786e
$this->saveChangeLog($meta['id'], $focus, $save);
}
return $save; //crmv@105312
}
//crmv@141827e
function resetDynaForm($metaid, $engine, $empty=false) { // crmv@192951
global $adb, $table_prefix;
$save = array();
$processesid = $this->getProcessesId($engine->running_process, $metaid);
if (!empty($processesid)) {
$focus = CRMEntity::getInstance('Processes');
$focus->retrieve_entity_info($processesid,'Processes');
$result = $adb->pquery("select elementid from {$table_prefix}_process_dynaform_meta where id = ? and processid = ?", array($metaid, $focus->column_fields['processmaker']));
$elementid = $adb->query_result($result,0,'elementid');
$blocks = $this->getStructure($focus->column_fields['processmaker'], $elementid, false, $engine->running_process);
$form = $this->getDefaultValues($engine,$blocks);
foreach($blocks as $block) {
foreach($block['fields'] as $field) {
// non uso formatValue perchè i valori di default sono gia' in formatio db
$save[$field['fieldname']] = $form[$field['fieldname']];
}
}
$adb->pquery("delete from {$table_prefix}_process_dynaform where running_process = ? and metaid = ?", array($engine->running_process,$metaid));
// crmv@192951
if (!$empty) {
$adb->pquery("insert into {$table_prefix}_process_dynaform(running_process,metaid,form) values(?,?,?)", array($engine->running_process,$metaid,Zend_Json::encode($save)));
$this->saveChangeLog($metaid, $focus, $save);
}
// crmv@192951e
return true;
}
return false;
}
function saveChangeLog($metaid, $focus, $save) {
global $adb, $table_prefix, $current_user;
$result = $adb->pquery("select max(seq) as \"seq\" from {$table_prefix}_process_dynaform_cl where running_process = ? and metaid = ?", array($focus->column_fields['running_process'],$metaid));
if ($result && $adb->num_rows($result) > 0) {
$seq = $adb->query_result($result,0,'seq');
if (is_numeric($seq)) $seq = $seq+1;
}
if (empty($seq)) $seq = 0;
$adb->pquery("insert into {$table_prefix}_process_dynaform_cl(running_process,metaid,seq,userid,change_date,form) values(?,?,?,?,?,?)", array($focus->column_fields['running_process'],$metaid,$seq,$current_user->id,date('Y-m-d H:i:s'),Zend_Json::encode($save)));
}
// crmv@102879
function getAllTableFields($processmaker) {
$tfields = array();
$PMUtils = ProcessMakerUtils::getInstance();
$data = $PMUtils->retrieve($processmaker);
$helper = Zend_Json::decode($data['helper']);
if (!empty($helper)) {
foreach($helper as $elementid => $h) {
if ($h['active'] == 'on' && isset($h['dynaform'])) {
$blocks = $h['dynaform']['mmaker_blocks'];
if (!empty($blocks)) {
$meta = $this->getMeta($processmaker, $elementid);
$bfields = array();
foreach($blocks as $block) {
if ($meta && !empty($block['fields'])) {
// check for fields in the block
foreach ($block['fields'] as $df) {
if ($df['uitype'] == 220) {
$fkey = $meta['id'].':'.$df['fieldname'];
$bfields[$fkey] = $df['fieldlabel'];
}
}
}
}
if (count($bfields) > 0) {
$key = $meta['id'].':DynaForm';
$label = $this->getLabel($processmaker,$meta['id'],$meta);
$tfields[$key] = array('label' => $label, 'fields' => $bfields);
}
}
}
}
}
return $tfields;
}
// crmv@102879e
function getOptions($processmaker, $selected_value='') {
$PMUtils = ProcessMakerUtils::getInstance();
$data = $PMUtils->retrieve($processmaker);
$helper = Zend_Json::decode($data['helper']);
$values = array();
if (!empty($helper)) {
foreach($helper as $elementid => $h) {
if ($h['active'] == 'on' && isset($h['dynaform'])) {
/* crmv@141827 removed check blocks */
$meta = $this->getMeta($processmaker, $elementid);
if ($meta) {
$key = $meta['id'].':DynaForm';
$label = $this->getLabel($processmaker,$meta['id'],$meta);
($selected_value == $key) ? $selected = 'selected' : $selected = '';
$values[$key] = array($label, $selected);
}
}
}
}
return $values;
}
function getLabel($processid,$metaid,$row=array()) {
$PMUtils = ProcessMakerUtils::getInstance();
if (empty($row)) {
global $adb, $table_prefix;
$result = $adb->pquery("select * from {$table_prefix}_process_dynaform_meta where id = ? and processid = ?", array($metaid,$processid));
if ($result && $adb->num_rows($result) > 0) {
$row = $adb->fetch_array_no_html($result);
}
}
return '[$DF'.$row['id'].'] Form dinamica ('.$PMUtils->formatType($row['type'],true).': '.trim($row['text']).')';
}
// crmv@102879
function categorizeFieldByType(&$return, $field, $groupLabel, $value, $recursive=true) { // crmv@176245
global $current_user; // crmv@176245
if (in_array($field['uitype'],array(15,33,300))) { //crmv@140949
$return['picklist'][$groupLabel][$value] = $field['fieldlabel'];
} elseif (in_array($field['uitype'],array(10))) {
$return['reference'][$groupLabel][$value] = $field['fieldlabel'];
// crmv@176245
if ($recursive) {
// crmv@195745
if (isset($field['relatedmods_selected'])) {
$relatedmodules = is_array($field['relatedmods_selected']) ? $field['relatedmods_selected'] : explode(',',$field['relatedmods_selected']);
} else {
$relatedmodules = is_array($field['relatedmods']) ? $field['relatedmods'] : explode(',',$field['relatedmods']);
}
// crmv@195745e
foreach($relatedmodules as $relatedmodule) {
$relatedmod = vtws_describe($relatedmodule,$current_user,true);
if (!empty($relatedmod['fields'])) {
foreach($relatedmod['fields'] as $relatedmod_field) {
if ($relatedmod_field['type']['name'] == 'autogenerated') continue;
if (!isset($relatedmod_field['fieldlabel'])) $relatedmod_field['fieldlabel'] = $relatedmod_field['label'];
$relatedmod_field['fieldlabel'] = $field['fieldlabel']." : ({$relatedmodule}) ".$relatedmod_field['fieldlabel'];
list($m,$f) = explode('-',$value);
$colvalue = "$m-($f : ($relatedmodule) {$relatedmod_field['name']})";
$this->categorizeFieldByType($return, $relatedmod_field, $groupLabel, $colvalue, false);
}
}
}
}
// crmv@176245e
} elseif (in_array($field['uitype'],array(13))) {
$return['email'][$groupLabel][$value] = $field['fieldlabel'];
} elseif (in_array($field['uitype'],array(52,51,50))) {
$return['user'][$groupLabel][$value] = $field['fieldlabel'];
} elseif (in_array($field['uitype'],array(56))) {
$return['boolean'][$groupLabel][$value] = $field['fieldlabel'];
//crmv@108227
} elseif (in_array($field['uitype'],array(5))) {
$return['date'][$groupLabel][$value] = $field['fieldlabel'];
//crmv@108227e
//crmv@146187
} elseif (in_array($field['uitype'],array(73))) {
$return['time'][$groupLabel][$value] = $field['fieldlabel'];
//crmv@146187e
} elseif ($field['uitype'] == 220) {
// table field, check if I have to display it
$cols = Zend_Json::decode($field['columns']);
if ($cols) {
foreach ($cols as $col) {
$col['fieldlabel'] = $field['fieldlabel'].': '.$col['fieldlabel'];
$colvalue = $value.'::'.$col['fieldname'];
$this->categorizeFieldByType($return, $col, $groupLabel, $colvalue);
}
}
return;
}
$return['all'][$groupLabel][$value] = $field['fieldlabel'];
}
function getFieldsOptions($processmaker, $related=false) {
$PMUtils = ProcessMakerUtils::getInstance();
$data = $PMUtils->retrieve($processmaker);
$helper = Zend_Json::decode($data['helper']);
$return = array();
if (!empty($helper)) {
foreach($helper as $elementid => $h) {
if ($h['active'] == 'on' && isset($h['dynaform'])) {
$blocks = $h['dynaform']['mmaker_blocks'];
if (!empty($blocks)) {
$meta = $this->getMeta($processmaker, $elementid);
if ($meta) {
$groupLabel = $this->getLabel($processmaker,$meta['id'],$meta);
//crmv@105312
$value = '$DF'.$meta['id'].'-crmid';
$return['reference'][$groupLabel][$value] = 'ID '.getTranslatedString('SINGLE_Processes','Processes');
$return['all'][$groupLabel][$value] = 'ID '.getTranslatedString('SINGLE_Processes','Processes');
//crmv@105312e
foreach($blocks as $block) {
if (!empty($block['fields'])) {
foreach($block['fields'] as $field) {
$value = '$DF'.$meta['id'].'-'.$field['fieldname'];
$this->categorizeFieldByType($return, $field, $groupLabel, $value);
}
}
}
}
}
}
}
}
//crmv@98809
if ($related) {
$processes = $PMUtils->getRelatedProcess($processmaker);
if (!empty($processes)) {
foreach($processes as $relid => $info) {
$data = $PMUtils->retrieve($relid);
$helper = Zend_Json::decode($data['helper']);
if (!empty($helper)) {
foreach($helper as $elementid => $h) {
if ($h['active'] == 'on' && isset($h['dynaform'])) {
$blocks = $h['dynaform']['mmaker_blocks'];
if (!empty($blocks)) {
$meta = $this->getMeta($relid, $elementid);
if ($meta) {
$groupLabel = $info['name'].' '.$this->getLabel($relid,$meta['id'],$meta);
foreach($blocks as $block) {
if (!empty($block['fields'])) {
foreach($block['fields'] as $field) {
$value = '$DF'.$info['id'].':'.$meta['id'].'-'.$field['fieldname'];
$this->categorizeFieldByType($return, $field, $groupLabel, $value);
}
}
}
}
}
}
}
}
}
}
}
//crmv@98809e
return $return;
}
// crmv@102879e
function getDefaultValues($engine,$blocks) {
$form = array();
if (!empty($blocks)) { //crmv@141827
foreach($blocks as $block) {
if (!empty($block['fields'])) { //crmv@141827
foreach($block['fields'] as $field) {
$referenceFields = array();
$ownerFields = array();
if (in_array($field['uitype'],array(10))) $referenceFields[] = $field['fieldname'];
if (in_array($field['uitype'],array(52,51,50))) $ownerFields[] = $field['fieldname'];
// crmv@177561
$prepareValue = !in_array($field['uitype'],VTSimpleTemplate::$formatUitypeList);
$form[$field['fieldname']] = $engine->replaceTags($field['fieldname'],$field['default'],$referenceFields,$ownerFields,false,null,false,$prepareValue);
// crmv@177561e
}
}
}
}
return $form;
}
private static $fieldTypeMapping = array();
function getFieldTypeFromUIType($uitype){
global $adb, $table_prefix;
// Cache all the information for futher re-use
if(empty(self::$fieldTypeMapping)) {
$result = $adb->pquery("select * from ".$table_prefix."_ws_fieldtype", array());
while($resultrow = $adb->fetch_array($result)) {
self::$fieldTypeMapping[$resultrow['uitype']] = $resultrow;
}
}
if(isset(ProcessDynaForm::$fieldTypeMapping[$uitype])){
if(ProcessDynaForm::$fieldTypeMapping[$uitype] === false){
return null;
}
$row = ProcessDynaForm::$fieldTypeMapping[$uitype];
return $row['fieldtype'];
} else {
ProcessDynaForm::$fieldTypeMapping[$uitype] = false;
return null;
}
}
function getFieldTypeFromTypeOfData($tod){
switch($tod){
case 'T': return "time";
case 'D':
case 'DT': return "date";
case 'E': return "email";
case 'N':
case 'NN': return "double";
case 'P': return "password";
case 'I': return "integer";
case 'V':
default: return "string";
}
}
function getFieldTypeDetails($field) {
global $current_user, $adb, $table_prefix;
// crmv@102879
$ModuleMakerGenerator = new ProcessModuleMakerGenerator();
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
$typeDetails = array();
$fieldType = $this->getFieldTypeFromUIType($field['uitype']);
if ($fieldType === null) {
$tod = explode('~',$typeofdata);
$fieldType = $this->getFieldTypeFromTypeOfData($tod[0]);
}
$typeDetails['name'] = $fieldType;
$typeDetails['typeofdata'] = $typeofdata;
// crmv@102879e
switch($fieldType){
case 'reference':
//crmv@110181
if (empty($field['relatedmods'])) {
$relatedmods = array();
$result = $adb->pquery("select type from {$table_prefix}_ws_fieldtype
inner join {$table_prefix}_ws_referencetype ON {$table_prefix}_ws_referencetype.fieldtypeid = {$table_prefix}_ws_fieldtype.fieldtypeid
WHERE uitype = ?", array($field['uitype']));
if ($result && $adb->num_rows($result) > 0) {
while($row=$adb->fetchByAssoc($result)) {
$relatedmods[] = $row['type'];
}
}
$typeDetails['refersTo'] = $relatedmods;
} else {
$typeDetails['refersTo'] = explode(',',$field['relatedmods']);
}
//crmv@110181e
break;
case 'multipicklist':
case 'picklist':
$picklistvalues = array();
$tmp = explode("\n", rtrim(str_replace("\r", "", $field['picklistvalues'])));
foreach($tmp as $value) {
$picklistvalues[] = array('label'=>getTranslatedString($value,'Processes'),'value'=>$value); //crmv@112993
}
$typeDetails["picklistValues"] = $picklistvalues;
$typeDetails['defaultValue'] = $typeDetails["picklistValues"][0]['value'];
break;
// crmv@31780
case 'currency':
$currid = 1;
if (!empty($current_user)) {
$currid =$current_user->column_fields['currency_id'];
}
list($symb_name, $symb) = explode(' : ', getCurrencyName($currid), 2);
$typeDetails['symbol'] = $symb;
$typeDetails['symbol_name'] = $symb_name;
break;
// crmv@31780e
case 'date': $typeDetails['format'] = $current_user->date_format;
}
return $typeDetails;
}
// add blocks and fields of dynaform without applying conditionals
// if there are conditionals reload blocks via js
function addBlockInformation($col_fields, $mode, &$return_fields, &$blockdata, &$aBlockStatus, $dynaFormValues=array(), $conditionalPermissions=false) { // crmv@104568
global $adb, $table_prefix, $currentModule, $current_user, $app_strings;
$elementid = '';
$ModuleMakerGenerator = new ProcessModuleMakerGenerator();
$focus = CRMEntity::getInstance('Processes');
$focus->retrieve_entity_info_no_html($col_fields['record_id'],'Processes');
$blocks = $this->getCurrentDynaForm($focus,$elementid);
if (!empty($blocks)) {
$meta = $this->getMeta($col_fields['processmaker'], $elementid, false, $col_fields['running_process']);
if (empty($dynaFormValues)) $dynaFormValues = $this->getValues($col_fields['running_process'], $meta['id']);
if ($conditionalPermissions) $permissions = $this->getConditionalPermissions($col_fields['record_id'],$dynaFormValues,true); //crmv@99316
$col_fields = array_merge($col_fields,$dynaFormValues);
foreach($blocks as $blockid => $block) {
if (!empty($block['fields'])) {
// TODO translate $block['label']
$blockid = 'DF'.$blockid;
$aBlockStatus[$block['label']] = 1;
// crmv@104568
$blockdata[$blockid] = array(
'label' => $block['label'],
'panelid' => getCurrentPanelId('Processes'),
);
// crmv@104568e
foreach($block['fields'] as $field) {
if ($mode == 'edit' && $field['displaytype'] != 1) continue; //crmv@160837
$generatedtype = 1; //crmv@157799
$readonly = $field['readonly'];
$mandatory = $field['mandatory'];
//crmv@99316
if (isset($permissions[$field['fieldname']])) {
$readonly = $permissions[$field['fieldname']]['readonly'];
$mandatory = $permissions[$field['fieldname']]['mandatory'];
}
//crmv@99316e
switch ($field['uitype']) {
case 5:
$generatedtype = 2; //crmv@157799
if ($current_user) {
$fld_value = $col_fields[$field['fieldname']];
$fld_value = substr($fld_value, 0, 10);
$fld_value = adjustTimezone($fld_value, 0, null, false);
$col_fields[$field['fieldname']] = $fld_value;
}
break;
}
// TODO translate $field['label']
if ($mode == 'detail') {
$custfld = getDetailViewOutputHtml($field['uitype'], $field['fieldname'], $field['label'], $col_fields, $generatedtype, '', $currentModule, $field); //crmv@157799
if (is_array($custfld)) {
$fieldtablename = '';
$fieldname = $field['fieldname'];
$fieldid = $field['fieldname'];
$displaytype = 1;
$return_fields[$blockid][] = array($custfld[0]=>array("value"=>$custfld[1],"ui"=>$custfld[2],"options"=>$custfld["options"],"secid"=>$custfld["secid"],"link"=>$custfld["link"],"cursymb"=>$custfld["cursymb"],"salut"=>$custfld["salut"],"notaccess"=>$custfld["notaccess"],"isadmin"=>$custfld["isadmin"],"tablename"=>$fieldtablename,"fldname"=>$fieldname,"fldid"=>$fieldid,"displaytype"=>$displaytype,"readonly"=>$readonly,'mandatory'=>$mandatory));
}
} elseif ($mode == 'edit') {
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
if ($mandatory) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
$fld = getOutputHtml($field['uitype'], $field['fieldname'], $field['label'], $field['length'], $col_fields, $generatedtype, $currentModule, $mode, $readonly, $typeofdata, $field); //crmv@157799
$fld[] = $field['fieldname'];
$return_fields[$blockid][] = $fld;
}
}
}
}
}
}
// add validation data of dynaform without applyng conditionals
// if there are conditionals reload blocks via js
function addValidationData($focus, &$otherInfo, &$fieldinfos) {
global $adb;
$ModuleMakerGenerator = new ProcessModuleMakerGenerator();
$elementid = '';
$blocks = $this->getCurrentDynaForm($focus, $elementid);
if (!empty($blocks)) {
$meta = $this->getMeta($focus->column_fields['processmaker'], $elementid, false, $focus->column_fields['running_process']);
$dynaFormValues = $this->getValues($focus->column_fields['running_process'], $meta['id']);
//$permissions = $this->getConditionalPermissions($focus->id,$dynaFormValues,true); //crmv@99316
foreach($blocks as $block) {
if (!empty($block['fields'])) {
foreach($block['fields'] as $field) {
$fieldname = $field['fieldname'];
$webservice_field = WebserviceField::fromArray($adb,$field);
if (in_array($webservice_field->getFieldDataType(),array('multipicklist','file')) && $_REQUEST['action'] == 'EditView') {
$fieldname = $fieldname.'[]';
}
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
if ($field['mandatory']) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
/*
if ($permissions[$field['fieldname']]['mandatory']) {
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
$typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata); //crmv@99316
}*/
$fieldinfos[$fieldname] = Array($field['label'] => $typeofdata);
$otherInfo['fielduitype'][$fieldname] = intval($field['uitype']);
$otherInfo['fieldwstype'][$fieldname] = $webservice_field->getFieldDataType();
if ($field['uitype'] == 220) {
$field['columns'] = Zend_Json::decode($field['columns']);
foreach($field['columns'] as $column) {
if (!empty($dynaFormValues[$field['fieldname']])) {
foreach($dynaFormValues[$field['fieldname']] as $seq => $row) {
$fieldname = $field['fieldname'].'_'.$column['fieldname'].'_'.$seq;
$webservice_field = WebserviceField::fromArray($adb,$column);
if (in_array($webservice_field->getFieldDataType(),array('multipicklist','file')) && $_REQUEST['action'] == 'EditView') {
$fieldname = $fieldname.'[]';
}
$typeofdata = $ModuleMakerGenerator->getTODForField($column);
if ($column['mandatory']) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
/*
if ($permissions[$fieldname]['mandatory']) {
$typeofdata = $ModuleMakerGenerator->getTODForField($column);
$typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
}*/
$fieldinfos[$fieldname] = Array($column['label'] => $typeofdata);
$otherInfo['fielduitype'][$fieldname] = intval($column['uitype']);
$otherInfo['fieldwstype'][$fieldname] = $webservice_field->getFieldDataType();
}
}
}
}
}
}
}
}
}
//crmv@99316
function existsConditionalPermissions($focus) {
$elementid = '';
$fields = $this->getFields($focus, $elementid);
$PMUtils = ProcessMakerUtils::getInstance();
$xml_version = $PMUtils->getSystemVersion4RunningProcess($focus->column_fields['running_process'],array('processmaker','xml_version'));
$data = $PMUtils->retrieve($focus->column_fields['processmaker'],$xml_version);
$vte_metadata = Zend_Json::decode($data['vte_metadata']);
$dfconditionals = $vte_metadata[$elementid]['dfconditionals'];
return !empty($dfconditionals);
}
function existsConditionalFpovValueActive($focus, &$conditionalFields = null) { // crmv@198388
$elementid = '';
$fields = $this->getFields($focus, $elementid);
$conditionalFields = array(); // crmv@198388
$PMUtils = ProcessMakerUtils::getInstance();
$xml_version = $PMUtils->getSystemVersion4RunningProcess($focus->column_fields['running_process'],array('processmaker','xml_version'));
$data = $PMUtils->retrieve($focus->column_fields['processmaker'],$xml_version);
$vte_metadata = Zend_Json::decode($data['vte_metadata']);
$dfconditionals = $vte_metadata[$elementid]['dfconditionals'];
if (!empty($dfconditionals)) {
// crmv@198388
foreach($dfconditionals as $dfconditional) {
if (!empty($dfconditional['conditions'])) {
foreach ($dfconditional['conditions'] as $group) {
if ($group['conditions']) {
foreach ($group['conditions'] as $cond) {
if (stripos($cond['fieldname'],'ml') === 0) {
// skip table fields (ex. ml26)
} else {
$conditionalFields[] = $cond['fieldname'];
}
}
}
}
}
}
// crmv@198388e
foreach($dfconditionals as $dfconditional) {
if (!empty($dfconditional['fpofv'])) {
foreach($dfconditional['fpofv'] as $fieldname => $params) {
if ($params['FpovValueActive'] == 1 || $params['FpovManaged'] == 1) { // crmv@196985
return true;
}
}
}
}
}
return false;
}
function getConditionalPermissions($record,$dynaform=array(),$use_default=false) {
global $currentModule, $current_user;
$permissions = array();
$focus = CRMEntity::getInstance('Processes');
$focus->retrieve_entity_info($record,'Processes');
$elementid = '';
$fields = $this->getFields($focus, $elementid);
if (empty($dynaform)) {
$meta = $this->getMeta($focus->column_fields['processmaker'], $elementid, false, $focus->column_fields['running_process']);
$dynaform = $this->getValues($focus->column_fields['running_process'], $meta['id']);
}
if (!empty($dynaform)) {
// ??? <20> giusto formatValue ?
// foreach($dynaform as $fieldname => $value) {
// $dynaform[$fieldname] = $this->formatValue($value,$fields[$fieldname]);
// }
$PMUtils = ProcessMakerUtils::getInstance();
$xml_version = $PMUtils->getSystemVersion4RunningProcess($focus->column_fields['running_process'],array('processmaker','xml_version'));
$data = $PMUtils->retrieve($focus->column_fields['processmaker'],$xml_version);
$vte_metadata = Zend_Json::decode($data['vte_metadata']);
$dfconditionals = $vte_metadata[$elementid]['dfconditionals'];
$role_grp_checks = array();
//tutti
$role_grp_checks[] = 'ALL';
//ruoli
$role_grp_checks[] = "roles::".$current_user->roleid;
//ruoli e subordinati
$subordinates=getRoleAndSubordinatesInformation($current_user->roleid);
$parent_role=$subordinates[$current_user->roleid][1];
if (!is_array($parent_role)){
$parent_role = explode('::',$parent_role);
foreach ($parent_role as $parent_role_value){
$role_grp_checks[] = "rs::".$parent_role_value;
}
}
//gruppi
require('user_privileges/requireUserPrivileges.php'); // crmv@39110
if (is_array($current_user_groups)){
foreach ($current_user_groups as $current_user_groups_value){
$role_grp_checks[] = "groups::".$current_user_groups_value;
}
}
$entityCache = new VTEntityCache($current_user);
$PMUtils->setDefaultDataFormat();
$entityCache->forId($record);
$PMUtils->restoreDataFormat();
$entityCache::$cache[$record]->data = $dynaform;
if ($use_default) {
// init permissions with layout editor configuration
foreach($dynaform as $fieldname => $value) {
$field = $fields[$fieldname];
$permissions[$fieldname] = array('readonly'=>$field['readonly'], 'mandatory'=>($field['mandatory'] == 1));
}
}
if (!empty($dfconditionals)) {
// split standard and table-field conditionals
$dfconditionals_std = array();
$dfconditionals_tabs = array();
foreach($dfconditionals as $i => $dfconditional) {
$tab = false;
if (!empty($dfconditional['conditions'])) {
foreach($dfconditional['conditions'] as $subconditions) {
if (!empty($subconditions['conditions'])) {
foreach($subconditions['conditions'] as $subcondition) {
if (isset($subcondition['tabfieldopt'])) {
$tab = true;
break;
}
}
}
}
}
($tab) ? $dfconditionals_tabs[] = $dfconditionals[$i] : $dfconditionals_std[] = $dfconditionals[$i];
}
if (!empty($dfconditionals_tabs)) {
$actionType = $PMUtils->getActionTypes('Cycle');
require_once($actionType['php_file']);
$actionCycle = new $actionType['class']();
}
$i = 0;
if (!empty($dfconditionals_std)) {
foreach($dfconditionals_std as $dfconditional) {
$role_grp_check = $dfconditional['role_grp_check'];
if (in_array($role_grp_check,$role_grp_checks)) {
$conditions = Zend_Json::encode($dfconditional['conditions']);
if ($PMUtils->evaluateCondition($entityCache, $record, $conditions)) {
foreach($dynaform as $fieldname => $value) {
$perm = $dfconditional['fpofv'][$fieldname];
$this->setFieldConditionalPermissions($perm, $i, $fieldname, $permissions);
$field = $fields[$fieldname];
if ($field['type'] == 'table') {
if (is_array($value)) {
foreach($value as $seq => $row) {
foreach($row as $column => $column_value) {
$perm = $dfconditional['fpofv'][$fieldname.'::'.$column];
$this->setFieldConditionalPermissions($perm, $i, $fieldname.'_'.$column.'_'.$seq, $permissions);
}
}
}
}
}
$i++;
}
}
}
}
// check for conditionals in table-fields
if (!empty($dfconditionals_tabs)) {
foreach($dynaform as $fieldname => $value) {
$field = $fields[$fieldname];
if ($field['type'] == 'table') {
if (is_array($value)) {
foreach($value as $seq => $row) {
foreach($dfconditionals_tabs as $dfconditional) {
$role_grp_check = $dfconditional['role_grp_check'];
if (in_array($role_grp_check,$role_grp_checks)) {
$conditions = Zend_Json::encode($dfconditional['conditions']);
if ($actionCycle->checkRowConditions(null, $dynaform, $conditions, $seq)) {
// applico permessi alla riga e anche agli altri campi del modulo
$fpofv = $dfconditional['fpofv'];
foreach($fpofv as $f => $fp) {
// if it is a column of the current table-field OK
// if it is a column of another table-field SKIP
// if it is a standard field OK
if (strpos($f,'::') !== false) {
list($f1,$f2) = explode('::',$f);
if ($f1 == $fieldname) {
$this->setFieldConditionalPermissions($fp, $i, $f1.'_'.$f2.'_'.$seq, $permissions);
}
} else {
$this->setFieldConditionalPermissions($fp, $i, $f, $permissions);
}
}
$i++;
}
}
}
}
}
}
}
}
}
}
// set in request cache
$cache = RCache::getInstance();
$cache->set('conditional_permissions', $permissions);
return $permissions;
}
function setFieldConditionalPermissions($perm, $i, $fieldname, &$permissions) {
$PMUtils = ProcessMakerUtils::getInstance();
$PMUtils->setFieldConditionalPermissions($perm, $i, $fieldname, $permissions);
}
function replaceTags($value, $dynaform, $row) { // crmv@200250
$PMUtils = ProcessMakerUtils::getInstance();
return $PMUtils->replaceTags($value, $dynaform, '/(\$vcf_([0-9:]+))/', $row); // crmv@200250
}
// reload blocks, fields and validation info applying conditionals
function applyConditionals($mode,$record,$dynaform) {
global $currentModule, $current_user, $app_strings, $mod_strings, $theme, $default_charset;
$focus = CRMEntity::getInstance('Processes');
$focus->retrieve_entity_info($record,'Processes');
$elementid = '';
$fields = $this->getFields($focus, $elementid, true);
foreach($dynaform as $fieldname => $value) {
if ($fields[$fieldname]['uitype'] == 220)
$dynaform[$fieldname] = $this->formatValue($value,$fields[$fieldname],$dynaform[$fieldname]);
else
$dynaform[$fieldname] = $this->formatValue($value,$fields[$fieldname]);
}
$dynaform_tmp = $dynaform;
$permissions = $this->getConditionalPermissions($record,$dynaform,true);
if (!empty($permissions)) {
foreach($dynaform as $fieldname => $value) {
if ($fields[$fieldname]['uitype'] == 220) {
if (!empty($value)) {
foreach($value as $row => $tab_fields) {
foreach($tab_fields as $tab_fieldname => $tab_value) {
if (isset($permissions[$fieldname.'_'.$tab_fieldname.'_'.$row]['value'])) {
$dynaform[$fieldname][$row][$tab_fieldname] = $this->replaceTags($permissions[$fieldname.'_'.$tab_fieldname.'_'.$row]['value'],$dynaform_tmp,$row); // crmv@200250
}
}
}
}
} else {
if (isset($permissions[$fieldname]['value'])) {
$dynaform[$fieldname] = $this->replaceTags($permissions[$fieldname]['value'],$dynaform_tmp);
}
}
}
}
$output = array();
$blockVisibility = array(); //crmv@99316
// reload all dynaform blocks. for detail mode reload via javascript
if ($mode == 'edit') {
$focus = CRMEntity::getInstance('Processes');
$focus->retrieve_entity_info($record,'Processes');
$editview_arr = array();
$blockdata = array();
$aBlockStatus = array();
$this->addBlockInformation($focus->column_fields, $mode, $editview_arr, $blockdata, $aBlockStatus, $dynaform);
//crmv@99316
foreach($editview_arr as $headerid => $editview_value) {
foreach($editview_value as $i => $arr) {
if (isset($permissions[$arr[2][0]])) { // overwrite readonly and mandatory
$editview_arr[$headerid][$i][4] = $arr[4] = $permissions[$arr[2][0]]['readonly'];
$editview_arr[$headerid][$i][5] = $arr[5] = ($permissions[$arr[2][0]]['mandatory'] == '1')?'M':'O';
}
if ($arr[4] == 100) unset($editview_value[$i]); // skip field
}
if (empty($editview_value)) $blockVisibility[$headerid] = 0; // skip block if empty
}
//crmv@99316e
foreach($editview_arr as $headerid=>$editview_value)
{
$editview_data = Array();
for ($i=0,$j=0;$i<count($editview_value);$j++)
{
$key1=$editview_value[$i];
if(is_array($editview_value[$i+1]) && ($key1[0][0]!=19 && $key1[0][0]!=20))
{
$key2=$editview_value[$i+1];
}
else
{
$key2 =array();
}
if($key1[0][0]!=19 && $key1[0][0]!=20){
$editview_data[$j]=array(0 => $key1,1 => $key2);
$i+=2;
}
else{
$editview_data[$j]=array(0 => $key1);
$i++;
}
}
$editview_arr[$headerid] = $editview_data;
}
foreach($blockdata as $blockid=>$blockinfo)
{
$label = $blockinfo['label'];
if($label == '')
{
$returndata[$blockid]=array_merge((array)$returndata[$blockid],(array)$editview_arr[$blockid]);
}
else
{
$curBlock = $label;
if(is_array($editview_arr[$blockid]))
$returndata[$blockid]=array_merge((array)$returndata[$blockid],(array)$editview_arr[$blockid]);
}
}
if (!empty($returndata)) {
$smarty = new VteSmarty();
$smarty->assign('MODE','');
$smarty->assign('MODULE','Processes');
$smarty->assign('APP',$app_strings);
$smarty->assign('MOD',$mod_strings);
$smarty->assign("THEME", $theme);
$smarty->assign('IMAGE_PATH', "themes/$theme/images/");
$smarty->assign('ID', '');
foreach($returndata as $header => $data) {
$smarty->assign('data',$data);
$smarty->assign('header',$header);
$output['html'][$header] = htmlentities($smarty->fetch('DisplayFields.tpl'),ENT_QUOTES,$default_charset);
}
}
}
$output['block_visibility'] = $blockVisibility; //crmv@99316
if (!empty($permissions)) {
$ModuleMakerGenerator = new ProcessModuleMakerGenerator();
// fielddatatype for javascript validation
$tabid = getTabid('Processes');
$otherInfo = array();
$validationData = getDBValidationData($focus->tab_name,$tabid,$otherInfo,$focus->column_fields);
$validationArray = getValidationdataArray($validationData, $otherInfo, true);
$output = array_merge($output,$validationArray);
foreach($fields as $field) {
$fieldname = $field['fieldname'];
if (in_array($field['uitype'],array(33,29)) && $mode == 'edit') $fieldname = $fieldname.'[]';
$output['fieldname'][$fieldname] = $fieldname;
$output['fieldlabel'][$fieldname] = $field['label'];
$output['fielduitype'][$fieldname] = $field['uitype'];
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
if ($field['mandatory']) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
$output['datatype'][$fieldname] = $typeofdata;
$output['fieldwstype'][$fieldname] = $field['type'];
if ($field['type'] == 'table') {
foreach($field['columns'] as $column) {
foreach($dynaform[$field['fieldname']] as $seq => $row) {
$fieldname = $field['fieldname'].'_'.$column['fieldname'].'_'.$seq;
if (in_array($column['uitype'],array(33,29)) && $mode == 'edit') $fieldname = $fieldname.'[]';
$output['fieldname'][$fieldname] = $fieldname;
$output['fieldlabel'][$fieldname] = $column['label'];
$output['fielduitype'][$fieldname] = $column['uitype'];
$typeofdata = $ModuleMakerGenerator->getTODForField($column);
if ($column['mandatory']) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
$output['datatype'][$fieldname] = $typeofdata;
$output['fieldwstype'][$fieldname] = $column['type'];
}
}
}
}
// html
foreach($permissions as $fieldname => $perm) {
$field = $fields[$fieldname];
if ($field['uitype'] == 213) continue; // skip
if (in_array($field['uitype'],array(33,29)) && $mode == 'edit') $fieldname = $fieldname.'[]';
$readonly = $perm['readonly'];
$mandatory = $perm['mandatory'];
$typeofdata = $ModuleMakerGenerator->getTODForField($field);
if ($mandatory) $typeofdata = $ModuleMakerGenerator->makeTODMandatory($typeofdata);
/*
if ($mode == 'edit') {
$fld = getOutputHtml($field['uitype'], $field['fieldname'], $field['label'], $field['length'], $dynaform, 1, $currentModule, 'edit', $readonly, $typeofdata, $field);
$fld[] = $field['fieldname'];
$output['html'][$field['fieldname']] = $this->getEditHtmlField($fld);
} */
$output['datatype'][$fieldname] = $typeofdata; // set new typeofdata for javascript validation
}
$output['fieldname'] = array_values($output['fieldname']);
$output['fieldlabel'] = array_values($output['fieldlabel']);
$output['datatype'] = array_values($output['datatype']);
$output['fielduitype'] = array_values($output['fielduitype']);
$output['fieldwstype'] = array_values($output['fieldwstype']);
}
return $output;
}
/*
function getEditHtmlField($maindata) {
$smarty = new VteSmarty();
$smarty->assign("uitype",$maindata[0][0]);
$smarty->assign("fldlabel",$maindata[1][0]);
$smarty->assign("fldlabel_sel",$maindata[1][1]);
$smarty->assign("fldlabel_combo",$maindata[1][2]);
$smarty->assign("fldname",$maindata[2][0]);
$smarty->assign("fldvalue",$maindata[3][0]);
$smarty->assign("secondvalue",$maindata[3][1]);
$smarty->assign("thirdvalue",$maindata[3][2]);
$smarty->assign("readonly",$maindata[4]);
$smarty->assign("typeofdata",$maindata[5]);
$smarty->assign("isadmin",$maindata[6]);
$smarty->assign("keyfldid",$maindata[7]);
if ($maindata[5] == 'M') {
$smarty->assign("mandatory_field",'*');
$keymandatory = true;
} else {
$smarty->assign("mandatory_field",'');
$keymandatory = false;
}
$smarty->assign("keymandatory",$keymandatory);
if ($maindata[4] == 100) {
$html = '<div style="display:none;">'.$smarty->fetch('DisplayFieldsHidden.tpl').'</div>';
} elseif ($maindata[4] == 99) {
$smarty->assign("DIVCLASS",'dvtCellInfoOff');
$html = $smarty->fetch('DisplayFieldsReadonly.tpl');
} else {
if ($keymandatory)
$smarty->assign("DIVCLASS",'dvtCellInfoM');
else
$smarty->assign("DIVCLASS",'dvtCellInfo');
$html = $smarty->fetch('EditViewUI.tpl');
}
$html = str_replace("\n",'',$html);
$html = str_replace("\r",'',$html);
$html = str_replace("\t",'',$html);
return $html;
}*/
//crmv@99316e
//crmv@103534
function propagateParallelsChangeLog($processesid,$changeLogFocus) {
global $adb, $table_prefix;
// check if the process is a fake and then propagate the change log to the main process
$result = $adb->pquery("SELECT casperid FROM {$table_prefix}_process_gateway_conn WHERE processesid = ?", array($processesid));
if ($result && $adb->num_rows($result) > 0) {
$casperid = $adb->query_result($result,0,'casperid');
$changeLogFocus->column_fields['audit_no'] = $changeLogFocus->get_revision_id($casperid);
$changeLogFocus->column_fields['parent_id'] = $casperid;
$changeLogFocus->save(); // crmv@164120
}
}
//crmv@103534e
}