vtigerossez/modules/Settings/LayoutBlockList.php

1057 lines
40 KiB
PHP

<?php
/*+********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
********************************************************************************/
require_once('Smarty_setup.php');
require_once('include/CustomFieldUtil.php');
require_once('include/utils/UserInfoUtil.php');
require_once('include/utils/utils.php');
require_once 'modules/PickList/PickListUtils.php';
global $mod_strings,$app_strings,$log,$theme;
$theme_path="themes/".$theme."/";
$image_path=$theme_path."images/";
require_once('modules/Vtiger/layout_utils.php');
$smarty=new vtigerCRM_Smarty;
$subMode = $_REQUEST['sub_mode'];
$smarty->assign("MOD",$mod_strings);
$smarty->assign("APP",$app_strings);
$smarty->assign("THEME", $theme);
$smarty->assign("JS_DATEFORMAT",parse_calendardate($app_strings['NTC_DATE_FORMAT']));
if ($subMode == 'updateFieldProperties')
updateFieldProperties();
elseif($subMode == 'deleteCustomField')
deleteCustomField();
elseif($subMode == 'changeOrder')
changeFieldOrder();
elseif($subMode == 'addBlock')
$duplicate = addblock();
elseif($subMode == 'deleteCustomBlock')
deleteBlock();
elseif($subMode == 'addCustomField')
$duplicate = addCustomField();
elseif($subMode == 'movehiddenfields' || $subMode == 'showhiddenfields')
show_move_hiddenfields($subMode);
elseif($subMode == 'changeRelatedInfoOrder')
changeRelatedListOrder();
$module_array=getCustomFieldSupportedModules();
$cfimagecombo = Array(
$image_path."text.gif",
$image_path."number.gif",
$image_path."percent.gif",
$image_path."currency.gif",
$image_path."date.gif",
$image_path."email.gif",
$image_path."phone.gif",
$image_path."picklist.gif",
$image_path."url.gif",
$image_path."checkbox.gif",
$image_path."text.gif",
$image_path."picklist.gif",
$image_path."time.PNG"
);
$cftextcombo = Array(
$mod_strings['Text'],
$mod_strings['Number'],
$mod_strings['Percent'],
$mod_strings['Currency'],
$mod_strings['Date'],
$mod_strings['Email'],
$mod_strings['Phone'],
$mod_strings['PickList'],
$mod_strings['LBL_URL'],
$mod_strings['LBL_CHECK_BOX'],
$mod_strings['LBL_TEXT_AREA'],
$mod_strings['LBL_MULTISELECT_COMBO'],
$mod_strings['Time']
);
$smarty->assign("MODULES",$module_array);
$smarty->assign("CFTEXTCOMBO",$cftextcombo);
$smarty->assign("CFIMAGECOMBO",$cfimagecombo);
if($_REQUEST['formodule'] !='')
$fld_module = vtlib_purify($_REQUEST['formodule']);
elseif($_REQUEST['fld_module'] != '') {
$fld_module = vtlib_purify($_REQUEST['fld_module']);
}else
$fld_module = 'Accounts';
$block_array = getModuleBlocks($fld_module);
$smarty->assign("BLOCKS",$block_array);
$smarty->assign("MODULE",$fld_module);
$smarty->assign("CFENTRIES",getFieldListEntries($fld_module));
$smarty->assign("RELATEDLIST",getRelatedListInfo($fld_module));
if(isset($_REQUEST["duplicate"]) && $_REQUEST["duplicate"] == "yes" || $duplicate == 'yes') {
echo "ERROR";
exit;
}
if($duplicate == 'LENGTH_ERROR') {
echo "LENGTH_ERROR";
exit;
}
if($_REQUEST['mode'] !='')
$mode = vtlib_purify($_REQUEST['mode']);
$smarty->assign("MODE", $mode);
if($_REQUEST['ajax'] != 'true') {
$smarty->display('Settings/LayoutBlockList.tpl');
}
elseif(($subMode == 'getRelatedInfoOrder' || $subMode == 'changeRelatedInfoOrder') && $_REQUEST['ajax'] == 'true') {
$smarty->display('Settings/OrderRelatedList.tpl');
}
else {
$smarty->display('Settings/LayoutBlockEntries.tpl');
}
function InStrCount($String,$Find,$CaseSensitive = false) {
global $log;
$i=0;
$x=0;
$substring = '';
while (strlen($String)>=$i) {
unset($substring);
if ($CaseSensitive) {
$Find=strtolower($Find);
$String=strtolower($String);
}
$substring=substr($String,$i,strlen($Find));
if ($substring==$Find) $x++;
$i++;
}
$log->debug("In InStrCount function".$String,$Find);
return $x;
}
/**
* Function to get customfield entries
* @param string $module - Module name
* return array $cflist - customfield entries
*/
function getFieldListEntries($module) {
$tabid = getTabid($module);
global $adb, $smarty,$log,$current_user;
global $theme;
$theme_path="themes/".$theme."/";
$image_path="themes/images/";
$dbQuery = "select vtiger_blocks.*,vtiger_tab.presence as tabpresence from vtiger_blocks" .
" inner join vtiger_tab on vtiger_tab.tabid = vtiger_blocks.tabid" .
" where vtiger_blocks.tabid=? and vtiger_tab.presence = 0 order by sequence";
$result = $adb->pquery($dbQuery, array($tabid));
$row = $adb->fetch_array($result);
$focus = CRMEntity::getInstance($module);
$nonEditableUiTypes = array('4','70');
// To get reference field names
require_once('include/Webservices/Utils.php');
$handler = vtws_getModuleHandlerFromName($module, $current_user);
$meta = $handler->getMeta();
$referenceFieldNames = array_keys($meta->getReferenceFieldDetails());
$cflist=Array();
$i=0;
if($row!='') {
do {
if($row["blocklabel"] == 'LBL_CUSTOM_INFORMATION' ) {
$smarty->assign("CUSTOMSECTIONID",$row["blockid"]);
}
if($row["blocklabel"] == 'LBL_RELATED_PRODUCTS' ) {
$smarty->assign("RELPRODUCTSECTIONID",$row["blockid"]);
}
if($row["blocklabel"] == 'LBL_COMMENTS' || $row['blocklabel'] == 'LBL_COMMENT_INFORMATION' ) {
$smarty->assign("COMMENTSECTIONID",$row["blockid"]);
}
if($row['blocklabel'] == 'LBL_TICKET_RESOLUTION') {
$smarty->assign("SOLUTIONBLOCKID",$row["blockid"]);
}
if($row['blocklabel'] == '') {
continue;
}
$cflist[$i]['tabpresence']= $row['tabpresence'];
$cflist[$i]['module'] = $module;
$cflist[$i]['blocklabel']=getTranslatedString($row["blocklabel"], $module);
$cflist[$i]['blockid']=$row["blockid"];
$cflist[$i]['display_status']=$row["display_status"];
$cflist[$i]['tabid']=$tabid;
$cflist[$i]['blockselect']=$row["blockid"];
$cflist[$i]['sequence'] = $row["sequence"];
$cflist[$i]['iscustom'] = $row["iscustom"];
if($module!='Invoices' && $module!='Quotes' && $module!='SalesOrder' && $module!='Invoice') {
$sql_field="select * from vtiger_field where block=? and vtiger_field.displaytype IN (1,2,4) order by sequence";
$sql_field_params = array($row["blockid"]);
}else {
$sql_field="select * from vtiger_field where block=? and (vtiger_field.fieldlabel!='Total' and vtiger_field.fieldlabel!='Sub Total' and vtiger_field.fieldlabel!='Tax') and vtiger_field.displaytype IN (1,2,4) order by sequence";
$sql_field_params = array($row["blockid"]);
}
$result_field = $adb->pquery($sql_field,$sql_field_params);
$row_field= $adb->fetch_array($result_field);
if($row_field!='') {
$cf_element=Array();
$cf_hidden_element=Array();
$count=0;
$hiddencount=0;
do {
$fieldid = $row_field['fieldid'];
$presence = $row_field['presence'];
$fieldname = $row_field['fieldname'];
$customfieldflag=InStrCount($row_field['fieldname'],'cf_',true);
$quickcreate = $row_field['quickcreate'];
$massedit = $row_field['masseditable'];
$typeofdata = $row_field['typeofdata'];
$displaytype = $row_field['displaytype'];
$uitype = $row_field['uitype'];
$fld_type_name = getCustomFieldTypeName($row_field['uitype']);
$defaultValue = $row_field['defaultvalue'];
if(!empty($defaultValue) && ($uitype == '5' || $uitype == '6' || $uitype == '23')) {
$defaultValue = getValidDisplayDate($defaultValue);
}
$fieldlabel = getTranslatedString($row_field['fieldlabel'], $module);
$defaultPermitted = true;
$strictlyMandatory = false;
if(isset($focus->mandatory_fields) && (!empty($focus->mandatory_fields)) && in_array($fieldname, $focus->mandatory_fields)) {
$strictlyMandatory = true;
$defaultPermitted = false;
} elseif (in_array($uitype, $nonEditableUiTypes) || $displaytype == 2) {
$strictlyMandatory = true;
$defaultPermitted = false;
}
if(in_array($fieldname, $referenceFieldNames)) {
$defaultPermitted = false;
}
$visibility = getFieldInfo($fieldname,$typeofdata,$quickcreate,$massedit,$presence,$strictlyMandatory,$customfieldflag,$displaytype,$uitype);
$allValues = array();
if(in_array($uitype, array('15','16','33'))) {
$allValues = getAllPickListValues($fieldname);
}
if ($presence == 0 || $presence == 2) {
$cf_element[$count]['fieldselect']=$fieldid;
$cf_element[$count]['blockid']=$row['blockid'];
$cf_element[$count]['tabid']=$tabid;
$cf_element[$count]['no']=$count;
$cf_element[$count]['label']=$fieldlabel;
$cf_element[$count]['fieldlabel'] = $row_field['fieldlabel'];
$cf_element[$count]['type']=$fld_type_name;
$cf_element[$count]['typeofdata']=$typeofdata;
$cf_element[$count]['uitype']=$uitype;
$cf_element[$count]['columnname']=$row_field['columnname'];
$cf_element[$count]['defaultvalue']= array('permitted' => $defaultPermitted, 'value' => $defaultValue, '_allvalues' => $allValues);
$cf_element[$count] = array_merge($cf_element[$count], $visibility);
$count++;
} else {
$cf_hidden_element[$hiddencount]['fieldselect']=$fieldid;
$cf_hidden_element[$hiddencount]['blockid']=$row['blockid'];
$cf_hidden_element[$hiddencount]['tabid']=$tabid;
$cf_hidden_element[$hiddencount]['no']=$hiddencount;
$cf_hidden_element[$hiddencount]['label']=$fieldlabel;
$cf_hidden_element[$hiddencount]['fieldlabel'] = $row_field['fieldlabel'];
$cf_hidden_element[$hiddencount]['type']=$fld_type_name;
$cf_hidden_element[$hiddencount]['typeofdata']=$typeofdata;
$cf_hidden_element[$hiddencount]['uitype']=$uitype;
$cf_hidden_element[$hiddencount]['columnname']=$row_field['columnname'];
$cf_hidden_element[$hiddencount]['defaultvalue']= array('permitted' => $defaultPermitted, 'value' => $defaultValue, '_allvalues' => $allValues);
$cf_hidden_element[$hiddencount] = array_merge($cf_hidden_element[$hiddencount], $visibility);
$hiddencount++;
}
} while($row_field = $adb->fetch_array($result_field));
$cflist[$i]['no']=$count;
$cflist[$i]['hidden_count'] = $hiddencount;
}
else {
$cflist[$i]['no']= 0;
}
$query_fields_not_in_block ='select fieldid,fieldlabel,block from vtiger_field ' .
'inner join vtiger_blocks on vtiger_field.block=vtiger_blocks.blockid ' .
'where vtiger_field.block != ? and vtiger_blocks.blocklabel not in ("LBL_TICKET_RESOLUTION","LBL_COMMENTS","LBL_COMMENT_INFORMATION") ' .
'AND vtiger_field.tabid = ? and vtiger_field.displaytype IN (1,2,4) order by vtiger_field.sequence';
$params =array($row['blockid'],$tabid);
$fields = $adb->pquery($query_fields_not_in_block,$params);
$row_field= $adb->fetch_array($fields);
if($row_field != '') {
$movefields = array();
$movefieldcount = 0;
do {
$movefields[$movefieldcount]['fieldid'] = $row_field['fieldid'];
$movefields[$movefieldcount]['fieldlabel'] = getTranslatedString($row_field['fieldlabel'], $module);
$movefieldcount++;
}while($row_field = $adb->fetch_array($fields));
$cflist[$i]['movefieldcount'] = $movefieldcount;
}
else {
$cflist[$i]['movefieldcount'] = 0 ;
}
$cflist[$i]['field']= $cf_element;
$cflist[$i]['hiddenfield']= $cf_hidden_element;
$cflist[$i]['movefield'] = $movefields;
$cflist[$i]['hascustomtable'] = $focus->customFieldTable;
unset($cf_element);
unset($cf_hidden_element);
unset($movefields);
$i++;
} while($row = $adb->fetch_array($result));
}
return $cflist;
}
/**
* Function to Lead customfield Mapping entries
* @param integer $cfid - Lead customfield id
* return array $label - customfield mapping
*/
function getListLeadMapping($cfid) {
global $adb;
$sql='select * from vtiger_convertleadmapping where cfmid = ?';
$result = $adb->pquery($sql, array($cfid));
$noofrows = $adb->num_rows($result);
for($i =0;$i <$noofrows;$i++) {
$leadid = $adb->query_result($result,$i,'leadfid');
$accountid = $adb->query_result($result,$i,'accountfid');
$contactid = $adb->query_result($result,$i,'contactfid');
$potentialid = $adb->query_result($result,$i,'potentialfid');
$cfmid = $adb->query_result($result,$i,'cfmid');
$sql2="select fieldlabel from vtiger_field where fieldid = ? and vtiger_field.presence in (0,2)";
$result2 = $adb->pquery($sql2, array($accountid));
$accountfield = $adb->query_result($result2,0,'fieldlabel');
$label['accountlabel'] = $accountfield;
$sql3="select fieldlabel from vtiger_field where fieldid = ? and vtiger_field.presence in (0,2)";
$result3 = $adb->pquery($sql3, array($contactid));
$contactfield = $adb->query_result($result3,0,'fieldlabel');
$label['contactlabel'] = $contactfield;
$sql4="select fieldlabel from vtiger_field where fieldid = ? and vtiger_field.presence in (0,2)";
$result4 = $adb->pquery($sql4, array($potentialid));
$potentialfield = $adb->query_result($result4,0,'fieldlabel');
$label['potentiallabel'] = $potentialfield;
}
return $label;
}
/* function to get the modules supports Custom Fields
*/
function getCustomFieldSupportedModules() {
global $adb;
$sql="select distinct vtiger_field.tabid,name from vtiger_field inner join vtiger_tab on vtiger_field.tabid=vtiger_tab.tabid where vtiger_field.tabid not in(9,10,16,15,8,29)";
$result = $adb->query($sql);
while($moduleinfo=$adb->fetch_array($result)) {
$modulelist[$moduleinfo['name']] = $moduleinfo['name'];
}
return $modulelist;
}
function getModuleBlocks($module) {
global $adb;
$tabid = getTabid($module);
$blockquery = "select blocklabel,blockid from vtiger_blocks where tabid = ?";
$blockres = $adb->pquery($blockquery,array($tabid));
while($blockinfo = $adb->fetch_array($blockres)) {
$blocklist[$blockinfo['blockid']] = getTranslatedString($blockinfo['blocklabel'],$module);
}
return $blocklist;
}
/**
*
*/
function changeFieldOrder() {
global $adb,$log,$smarty;
if(!empty($_REQUEST['what_to_do'])) {
if($_REQUEST['what_to_do']=='block_down') {
$sql="select * from vtiger_blocks where blockid=?";
$result = $adb->pquery($sql, array($_REQUEST['blockid']));
$row= $adb->fetch_array($result);
$current_sequence=$row[sequence];
$sql_next="select * from vtiger_blocks where sequence > ? and tabid=? limit 0,1";
$result_next = $adb->pquery($sql_next, array($current_sequence,$_REQUEST[tabid]));
$row_next= $adb->fetch_array($result_next);
$next_sequence=$row_next[sequence];
$next_id=$row_next[blockid];
$sql_up_current="update vtiger_blocks set sequence=? where blockid=?";
$result_up_current = $adb->pquery($sql_up_current, array($next_sequence,$_REQUEST['blockid']));
$sql_up_next="update vtiger_blocks set sequence=? where blockid=?";
$result_up_next = $adb->pquery($sql_up_next, array($current_sequence,$next_id));
}
if($_REQUEST['what_to_do']=='block_up') {
$sql="select * from vtiger_blocks where blockid=?";
$result = $adb->pquery($sql, array($_REQUEST['blockid']));
$row= $adb->fetch_array($result);
$current_sequence=$row[sequence];
$sql_previous="select * from vtiger_blocks where sequence < ? and tabid=? order by sequence desc limit 0,1";
$result_previous = $adb->pquery($sql_previous, array($current_sequence,$_REQUEST[tabid]));
$row_previous= $adb->fetch_array($result_previous);
$previous_sequence=$row_previous[sequence];
$previous_id=$row_previous[blockid];
$sql_up_current="update vtiger_blocks set sequence=? where blockid=?";
$result_up_current = $adb->pquery($sql_up_current, array($previous_sequence,$_REQUEST['blockid']));
$sql_up_previous="update vtiger_blocks set sequence=? where blockid=?";
$result_up_previous = $adb->pquery($sql_up_previous, array($current_sequence,$previous_id));
}
if($_REQUEST['what_to_do']=='down' || $_REQUEST['what_to_do']=='Right') {
$sql="select * from vtiger_field where fieldid=? and vtiger_field.presence in (0,2)";
$result = $adb->pquery($sql, array($_REQUEST['fieldid']));
$row= $adb->fetch_array($result);
$current_sequence=$row['sequence'];
if($_REQUEST['what_to_do']=='down') {
$sql_next="select * from vtiger_field where sequence > ? and block = ? and vtiger_field.presence in (0,2) order by sequence limit 1,1";
$sql_next_params = array($current_sequence, $_REQUEST['blockid']);
}else {
$sql_next="select * from vtiger_field where sequence > ? and block = ? and vtiger_field.presence in (0,2) order by sequence limit 0,1";
$sql_next_params = array($current_sequence, $_REQUEST['blockid']);
}
$result_next = $adb->pquery($sql_next,$sql_next_params);
$row_next= $adb->fetch_array($result_next);
$next_sequence=$row_next['sequence'];
$next_id=$row_next['fieldid'];
$sql_up_current="update vtiger_field set sequence=? where fieldid=?";
$result_up_current = $adb->pquery($sql_up_current, array($next_sequence,$_REQUEST['fieldid']));
$sql_up_next="update vtiger_field set sequence=? where fieldid=?";
$result_up_next = $adb->pquery($sql_up_next, array($current_sequence,$next_id));
$smarty->assign("COLORID",vtlib_purify($_REQUEST['fieldid']));
}
if($_REQUEST['what_to_do']=='up' || $_REQUEST['what_to_do']=='Left') {
$sql="select * from vtiger_field where fieldid=? and vtiger_field.presence in (0,2)";
$result = $adb->pquery($sql, array($_REQUEST['fieldid']));
$row= $adb->fetch_array($result);
$current_sequence=$row['sequence'];
if($_REQUEST['what_to_do']=='up') {
$sql_previous="select * from vtiger_field where sequence < ? and block=? and vtiger_field.presence in (0,2) order by sequence desc limit 1,1";
$sql_prev_params = array($current_sequence,$_REQUEST['blockid']);
}else {
$sql_previous="select * from vtiger_field where sequence < ? and block=? and vtiger_field.presence in (0,2) order by sequence desc limit 0,1";
$sql_prev_params = array($current_sequence,$_REQUEST['blockid']);
}
$result_previous = $adb->pquery($sql_previous,$sql_prev_params);
$row_previous= $adb->fetch_array($result_previous);
$previous_sequence=$row_previous['sequence'];
$previous_id=$row_previous['fieldid'];
$sql_up_current="update vtiger_field set sequence=? where fieldid=?";
$result_up_current = $adb->pquery($sql_up_current, array($previous_sequence,$_REQUEST['fieldid']));
$sql_up_previous="update vtiger_field set sequence=? where fieldid=?";
$result_up_previous = $adb->pquery($sql_up_previous, array($current_sequence,$previous_id));
$smarty->assign("COLORID",vtlib_purify($_REQUEST['fieldid']));
}
if($_REQUEST['what_to_do']=='show') {
$sql_up_display="update vtiger_blocks set display_status='1' where blockid=?";
$result_up_display = $adb->pquery($sql_up_display, array($_REQUEST['blockid']));
}
if($_REQUEST['what_to_do']=='hide') {
$sql_up_display="update vtiger_blocks set display_status='0' where blockid=?";
$result_up_display = $adb->pquery($sql_up_display, array($_REQUEST['blockid']));
}
}
}
/**
*
*/
function getFieldInfo($fieldname,$typeofdata,$quickcreate,$massedit,$presence,$strictlyMandatory,$customfieldflag,$displaytype,$uitype) {
global $log;
$fieldtype = explode("~",$typeofdata);
if($strictlyMandatory) {//fields without which the CRM Record will be inconsistent
$mandatory = '0';
}elseif($fieldtype[1] == "M") {//fields which are made mandatory
$mandatory = '2';
}else {
$mandatory = '1'; //fields not mandatory
}
if ($uitype == 4 || $displaytype == 2) {
$mandatory = '3';
}
$visibility = array();
$visibility['mandatory'] = $mandatory;
$visibility['quickcreate'] = $quickcreate;
$visibility['presence'] = $presence;
$visibility['massedit'] = $massedit;
$visibility['displaytype'] = $displaytype;
$visibility['customfieldflag'] = $customfieldflag;
$visibility['fieldtype'] = $fieldtype[1];
return $visibility;
}
function updateFieldProperties() {
global $adb,$smarty,$log;
$fieldid = $_REQUEST['fieldid'];
$req_sql = "select * from vtiger_field where fieldid = ? and fieldname not in('salutationtype') and vtiger_field.presence in (0,2)";
$req_result = $adb->pquery($req_sql, array($fieldid));
$typeofdata = $adb->query_result($req_result,0,'typeofdata');
$tabid = $adb->query_result($req_result,0,'tabid');
$fieldname = $adb->query_result($req_result,0,'fieldname');
$uitype = $adb->query_result($req_result,0,'uitype');
$oldfieldlabel = $adb->query_result($req_result,0,'fieldlabel');
$tablename = $adb->query_result($req_result,0,'tablename');
$columnname = $adb->query_result($req_result,0,'columnname');
$oldquickcreate = $adb->query_result($req_result,0,'quickcreate');
$oldmassedit = $adb->query_result($req_result,0,'masseditable');
$oldpresence = $adb->query_result($req_result,0,'presence');
if(!empty($_REQUEST['fld_module'])) {
$fld_module = vtlib_purify($_REQUEST['fld_module']);
}else {
$fld_module = getTabModuleName($tabid);
}
$focus = CRMEntity::getInstance($fld_module);
$fieldtype = explode("~",$typeofdata);
$mandatory_checked= $_REQUEST['ismandatory'];
$quickcreate_checked = $_REQUEST['quickcreate'];
$presence_check = $_REQUEST['isPresent'];
$massedit_check = $_REQUEST['massedit'];
$defaultvalue = vtlib_purify($_REQUEST['defaultvalue']);
if(!empty($defaultvalue)) {
if($uitype == 56) {
if($defaultvalue == 'on' || $defaultvalue == '1') {
$defaultvalue = '1';
} elseif($defaultvalue == 'off' || $defaultvalue == '0') {
$defaultvalue = '0';
} else {
$defaultvalue = '';
}
} elseif($uitype == 5 || $uitype == 6 || $uitype == 23) {
$defaultvalue = getValidDBInsertDateValue($defaultvalue);
}
}
if(isset($focus->mandatory_fields) && (!empty($focus->mandatory_fields)) && in_array($fieldname, $focus->mandatory_fields)) {
$fieldtype[1] = 'M';
} elseif($mandatory_checked == 'true' || $mandatory_checked == '') {
$fieldtype[1] = 'M';
} else {
$fieldtype[1] = 'O';
}
$datatype = implode('~', $fieldtype);
$maxseq = '';
if($oldquickcreate != 3) {
if(($quickcreate_checked == 'true' || $quickcreate_checked == '' )) {
$qcdata = 2;
$quickcreateseq_Query = 'select max(quickcreatesequence) as maxseq from vtiger_field where tabid = ?';
$res = $adb->pquery($quickcreateseq_Query,array($tabid));
$maxseq = $adb->query_result($res,0,'maxseq');
}else {
$qcdata = 1;
}
}
if($oldpresence != 3) {
if($presence_check == 'true' || $presence_check == '') {
$presence = 2;
}else {
$presence = 1;
}
}else {
$presence =1;
}
if($oldmassedit != 3) {
if(($massedit_check == 'true' || $massedit_check == '')) {
$massedit = 1;
}else {
$massedit = 2;
}
}else {
$massedit=1;
}
if(isset($focus->mandatory_fields) && (!empty($focus->mandatory_fields))) {
$fieldname_list = implode(',',$focus->mandatory_fields);
}else {
$fieldname_list = '';
}
$mandatory_query = "update vtiger_field set typeofdata=? where fieldid=? and fieldname not in (?) AND displaytype != 2";
$mandatory_params = array($datatype,$fieldid,$fieldname_list);
$adb->pquery($mandatory_query, $mandatory_params);
if(!empty($qcdata)) {
$quickcreate_query = "update vtiger_field set quickcreate = ? ,quickcreatesequence = ? where fieldid = ? and quickcreate not in (0,3) AND displaytype != 2";
$quickcreate_params = array($qcdata,$maxseq+1,$fieldid);
$adb->pquery($quickcreate_query,$quickcreate_params);
}
$presence_query = "update vtiger_field set presence = ? where fieldid = ? and presence not in (0,3) and quickcreate != 0";
$quickcreate_params = array($presence,$fieldid);
$adb->pquery($presence_query,$quickcreate_params);
$massedit_query = "update vtiger_field set masseditable = ? where fieldid = ? and masseditable not in (0,3) AND displaytype != 2";
$massedit_params = array($massedit,$fieldid);
$adb->pquery($massedit_query,$massedit_params);
$defaultvalue_query = "update vtiger_field set defaultvalue=? where fieldid = ? and fieldname not in (?) AND displaytype != 2";
$defaultvalue_params = array($defaultvalue,$fieldid,$fieldname_list);
$adb->pquery($defaultvalue_query, $defaultvalue_params);
}
function deleteCustomField() {
global $adb;
$fld_module = $_REQUEST["fld_module"];
$id = $_REQUEST["fld_id"];
$colName = $_REQUEST["colName"];
$uitype = $_REQUEST["uitype"];
$fieldquery = 'select * from vtiger_field where fieldid = ?';
$res = $adb->pquery($fieldquery,array($id));
$typeofdata = $adb->query_result($res,0,'typeofdata');
$fieldname = $adb->query_result($res,0,'fieldname');
$oldfieldlabel = $adb->query_result($res,0,'fieldlabel');
$tablename = $adb->query_result($res,0,'tablename');
$columnname = $adb->query_result($res,0,'columnname');
$fieldtype = explode("~",$typeofdata);
//Deleting the CustomField from the Custom Field Table
$query='delete from vtiger_field where fieldid = ? and vtiger_field.presence in (0,2)';
$adb->pquery($query, array($id));
//Deleting from vtiger_profile2field table
$query='delete from vtiger_profile2field where fieldid=?';
$adb->pquery($query, array($id));
//Deleting from vtiger_def_org_field table
$query='delete from vtiger_def_org_field where fieldid=?';
$adb->pquery($query, array($id));
$focus = CRMEntity::getInstance($fld_module);
$deletecolumnname =$tablename .":". $columnname .":".$fieldname.":".$fld_module. "_" .str_replace(" ","_",$oldfieldlabel).":".$fieldtype[0];
$column_cvstdfilter = $tablename .":". $columnname .":".$fieldname.":".$fld_module. "_" .str_replace(" ","_",$oldfieldlabel);
$select_columnname = $tablename.":".$columnname .":".$fld_module. "_" . str_replace(" ","_",$oldfieldlabel).":".$fieldname.":".$fieldtype[0];
$reportsummary_column = $tablename.":".$columnname.":".str_replace(" ","_",$oldfieldlabel);
$dbquery = 'alter table '. $adb->sql_escape_string($focus->customFieldTable[0]).' drop column '. $adb->sql_escape_string($colName);
$adb->pquery($dbquery, array());
//To remove customfield entry from vtiger_field table
$dbquery = 'delete from vtiger_field where columnname= ? and fieldid=? and vtiger_field.presence in (0,2)';
$adb->pquery($dbquery, array($colName, $id));
//we have to remove the entries in customview and report related tables which have this field ($colName)
$adb->pquery("delete from vtiger_cvcolumnlist where columnname = ? ", array($deletecolumnname));
$adb->pquery("delete from vtiger_cvstdfilter where columnname = ?", array($column_cvstdfilter));
$adb->pquery("delete from vtiger_cvadvfilter where columnname = ?", array($deletecolumnname));
$adb->pquery("delete from vtiger_selectcolumn where columnname = ?", array($select_columnname));
$adb->pquery("delete from vtiger_relcriteria where columnname = ?", array($select_columnname));
$adb->pquery("delete from vtiger_reportsortcol where columnname = ?", array($select_columnname));
$adb->pquery("delete from vtiger_reportdatefilter where datecolumnname = ?", array($column_cvstdfilter));
$adb->pquery("delete from vtiger_reportsummary where columnname like ?", array('%'.$reportsummary_column.'%'));
//Deleting from convert lead mapping vtiger_table- Jaguar
if($fld_module=="Leads") {
$deletequery = 'delete from vtiger_convertleadmapping where leadfid=?';
$adb->pquery($deletequery, array($id));
}elseif($fld_module=="Accounts" || $fld_module=="Contacts" || $fld_module=="Potentials") {
$map_del_id = array("Accounts"=>"accountfid","Contacts"=>"contactfid","Potentials"=>"potentialfid");
$map_del_q = "update vtiger_convertleadmapping set ".$map_del_id[$fld_module]."=0 where ".$map_del_id[$fld_module]."=?";
$adb->pquery($map_del_q, array($id));
}
//HANDLE HERE - we have to remove the table for other picklist type values which are text area and multiselect combo box
if($uitype == 15) {
$deltablequery = 'drop table vtiger_'.$adb->sql_escape_string($colName);
$adb->pquery($deltablequery, array());
}
}
function addblock() {
global $mod_strings,$log,$adb;
$fldmodule=$_REQUEST['fld_module'];
$mode=$_REQUEST['mode'];
$newblocklabel = trim($_REQUEST['blocklabel']);
$after_block = $_REQUEST['after_blockid'];
$tabid = getTabid($fldmodule);
$flag = 0;
$dup_check_query = $adb->pquery("SELECT blocklabel from vtiger_blocks WHERE tabid = ?",array($tabid));
$norows = $adb->num_rows($dup_check_query);
for($i=0;$i<$norows;$i++) {
$blklbl = $adb->query_result($dup_check_query,$i,'blocklabel');
$blklbltran = getTranslatedString($blklbl,$fldmodule);
if(strtolower($blklbltran) == strtolower($newblocklabel)) {
$flag = 1;
$duplicate='yes';
return $duplicate;
}
}
$length = strlen($newblocklabel);
if($length > 50) {
$flag = 1;
$duplicate='LENGTH_ERROR';
return $duplicate;
}
if($flag!=1) {
$sql_seq="select sequence from vtiger_blocks where blockid=?";
$res_seq= $adb->pquery($sql_seq, array($after_block));
$row_seq=$adb->fetch_array($res_seq);
$block_sequence=$row_seq['sequence'];
$newblock_sequence=$block_sequence+1;
$sql_up="update vtiger_blocks set sequence=sequence+1 where tabid=? and sequence > ?";
$adb->pquery($sql_up, array($tabid,$block_sequence));
$max_blockid=$adb->getUniqueID('vtiger_blocks');
$iscustom = 1;
$sql="INSERT INTO vtiger_blocks (tabid, blockid, sequence, blocklabel,iscustom) values (?,?,?,?,?)";
$params = array($tabid,$max_blockid,$newblock_sequence,$newblocklabel,$iscustom);
$adb->pquery($sql,$params);
}
}
function deleteBlock() {
global $adb;
$blockid = $_REQUEST['blockid'];
$deleteblock = 'delete from vtiger_blocks where blockid = ? and iscustom = 1';
$res = $adb->pquery($deleteblock,array($blockid));
}
function addCustomField() {
global $current_user,$log,$adb;
$fldmodule=vtlib_purify($_REQUEST['fld_module']);
$fldlabel=vtlib_purify(trim($_REQUEST['fldLabel']));
$fldType= vtlib_purify($_REQUEST['fieldType']);
$parenttab=vtlib_purify($_REQUEST['parenttab']);
$mode=vtlib_purify($_REQUEST['mode']);
$blockid = vtlib_purify($_REQUEST['blockid']);
$tabid = getTabid($fldmodule);
if ($fldmodule == 'Calendar' && isset($_REQUEST['activity_type'])) {
$activitytype = $_REQUEST['activity_type'];
if ($activitytype == 'E') $tabid = '16';
if ($activitytype == 'T') $tabid = '9';
}
if(get_magic_quotes_gpc() == 1) {
$fldlabel = stripslashes($fldlabel);
}
$dup_check_tab_id = $tabid;
if ($fldmodule == 'Calendar')
$dup_check_tab_id = array('9', '16');
$checkquery="select * from vtiger_field where tabid in (". generateQuestionMarks($dup_check_tab_id) .") and fieldlabel=?";
$params = array($dup_check_tab_id, $fldlabel);
$checkresult=$adb->pquery($checkquery,$params);
if($adb->num_rows($checkresult) > 0 ) {
$duplicate = 'yes';
return $duplicate ;
}
else {
$max_fieldid = $adb->getUniqueID("vtiger_field");
$columnName = 'cf_'.$max_fieldid;
$custfld_fieldid = $max_fieldid;
//Assigning the vtiger_table Name
if($fldmodule != '') {
$focus = CRMEntity::getInstance($fldmodule);
if (isset($focus->customFieldTable)) {
$tableName=$focus->customFieldTable[0];
} else {
$tableName= 'vtiger_'.strtolower($fldmodule).'cf';
}
}
//Assigning the uitype
$fldlength=$_REQUEST['fldLength'];
$uitype='';
$fldPickList='';
if(isset($_REQUEST['fldDecimal']) && $_REQUEST['fldDecimal'] != '') {
$decimal=$_REQUEST['fldDecimal'];
}else {
$decimal=0;
}
$type='';
$uichekdata='';
if($fldType == 'Text') {
$uichekdata='V~O~LE~'.$fldlength;
$uitype = 1;
$type = "C(".$fldlength.") default ()"; // adodb type
}elseif($fldType == 'Number') {
$uitype = 7;
//this may sound ridiculous passing decimal but that is the way adodb wants
$dbfldlength = $fldlength + $decimal + 1;
$type="N(".$dbfldlength.".".$decimal.")"; // adodb type
// Fix for http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/6363
$uichekdata='NN~O~'.$fldlength .','.$decimal;
}elseif($fldType == 'Percent') {
$uitype = 9;
$type="N(5.2)"; //adodb type
$uichekdata='N~O~2~2';
}elseif($fldType == 'Currency') {
$uitype = 71;
$dbfldlength = $fldlength + $decimal + 1;
$type="N(".$dbfldlength.".".$decimal.")"; //adodb type
$uichekdata='N~O~'.$fldlength .','.$decimal;
}elseif($fldType == 'Date') {
$uichekdata='D~O';
$uitype = 5;
$type = "D"; // adodb type
}elseif($fldType == 'Email') {
$uitype = 13;
$type = "C(50) default () "; //adodb type
$uichekdata='E~O';
}elseif($fldType == 'Time') {
$uitype = 14;
$type = "TIME";
$uichekdata='T~O';
}elseif($fldType == 'Phone') {
$uitype = 11;
$type = "C(30) default () "; //adodb type
$uichekdata='V~O';
}elseif($fldType == 'Picklist') {
$uitype = 15;
$type = "C(255) default () "; //adodb type
$uichekdata='V~O';
}elseif($fldType == 'URL') {
$uitype = 17;
$type = "C(255) default () "; //adodb type
$uichekdata='V~O';
}elseif($fldType == 'Checkbox') {
$uitype = 56;
$type = "C(3) default 0"; //adodb type
$uichekdata='C~O';
}elseif($fldType == 'TextArea') {
$uitype = 21;
$type = "X"; //adodb type
$uichekdata='V~O';
}elseif($fldType == 'MultiSelectCombo') {
$uitype = 33;
$type = "X"; //adodb type
$uichekdata='V~O';
}elseif($fldType == 'Skype') {
$uitype = 85;
$type = "C(255) default () "; //adodb type
$uichekdata='V~O';
}
if(is_numeric($blockid)) {
if($_REQUEST['fieldid'] == '') {
$max_fieldsequence = "select max(sequence) as maxsequence from vtiger_field where block = ? ";
$res = $adb->pquery($max_fieldsequence,array($blockid));
$max_seq = $adb->query_result($res,0,'maxsequence');
if($fldmodule == 'Quotes' || $fldmodule == 'PurchaseOrder' || $fldmodule == 'SalesOrder' || $fldmodule == 'Invoice') {
$quickcreate = 3;
}else {
$quickcreate = 1;
}
$query = "insert into vtiger_field (tabid,fieldid,columnname,tablename,generatedtype,uitype,fieldname,fieldlabel,readonly,presence,defaultvalue,maximumlength,sequence,block,displaytype,typeofdata,quickcreate,quickcreatesequence,info_type,masseditable) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$qparams = array($tabid,$custfld_fieldid,$columnName,$tableName,2,$uitype,$columnName,$fldlabel,0,2,'',100,$max_seq+1,$blockid,1,$uichekdata,$quickcreate,0,'BAS',1);
$adb->pquery($query, $qparams);
$adb->alterTable($tableName, $columnName." ".$type, "Add_Column");
//Inserting values into vtiger_profile2field vtiger_tables
$sql1 = "select * from vtiger_profile";
$sql1_result = $adb->pquery($sql1, array());
$sql1_num = $adb->num_rows($sql1_result);
for($i=0; $i<$sql1_num; $i++) {
$profileid = $adb->query_result($sql1_result,$i,"profileid");
$sql2 = "insert into vtiger_profile2field values(?,?,?,?,?)";
$adb->pquery($sql2, array($profileid, $tabid, $custfld_fieldid, 0, 0));
}
//Inserting values into def_org vtiger_tables
$sql_def = "insert into vtiger_def_org_field values(?,?,?,?)";
$adb->pquery($sql_def, array($tabid, $custfld_fieldid, 0, 0));
if($fldType == 'Picklist' || $fldType == 'MultiSelectCombo') {
$columnName = $adb->sql_escape_string($columnName);
// Creating the PickList Table and Populating Values
if($_REQUEST['fieldid'] == '') {
$qur = "CREATE TABLE vtiger_".$columnName." (
".$columnName."id int(19) NOT NULL auto_increment,
".$columnName." varchar(200) NOT NULL,
presence int(1) NOT NULL default '1',
picklist_valueid int(19) NOT NULL default '0',
PRIMARY KEY (".$columnName."id)
)";
$adb->pquery($qur, array());
}
//Adding a new picklist value in the picklist table
if($mode != 'edit') {
$picklistid = $adb->getUniqueID("vtiger_picklist");
$sql="insert into vtiger_picklist values(?,?)";
$adb->pquery($sql, array($picklistid,$columnName));
}
$roleid=$current_user->roleid;
$qry="select picklistid from vtiger_picklist where name=?";
$picklistid = $adb->query_result($adb->pquery($qry, array($columnName)), 0,'picklistid');
$pickArray = Array();
$fldPickList = $_REQUEST['fldPickList'];
$pickArray = explode("\n",$fldPickList);
$count = count($pickArray);
global $default_charset;
for($i = 0; $i < $count; $i++) {
$pickArray[$i] = trim(htmlentities($pickArray[$i],ENT_QUOTES, $default_charset));
if($pickArray[$i] != '') {
$picklistcount=0;
$sql ="select $columnName from vtiger_$columnName";
$numrow = $adb->num_rows($adb->pquery($sql, array()));
for($x=0;$x < $numrow ; $x++) {
$picklistvalues = $adb->query_result($adb->pquery($sql, array()),$x,$columnName);
if($pickArray[$i] == $picklistvalues) {
$picklistcount++;
}
}
if($picklistcount == 0) {
$picklist_valueid = getUniquePicklistID();
$query = "insert into vtiger_".$columnName." values(?,?,?,?)";
$adb->pquery($query, array($adb->getUniqueID("vtiger_".$columnName),$pickArray[$i],1,$picklist_valueid));
/*$sql="update vtiger_picklistvalues_seq set id = ?";
$adb->pquery($sql, array(++$picklist_valueid));*/
}
$sql = "select picklist_valueid from vtiger_$columnName where $columnName=?";
$pick_valueid = $adb->query_result($adb->pquery($sql, array($pickArray[$i])),0,'picklist_valueid');
$sql = "insert into vtiger_role2picklist select roleid,$pick_valueid,$picklistid,$i from vtiger_role";
$adb->pquery($sql, array());
}
}
}
}
}
}
}
function show_move_hiddenfields($submode) {
global $adb,$log;
$selected_fields = $_REQUEST['selected'];
$selected = trim($selected_fields,":");
$sel_arr = array();
$sel_arr = explode(":",$selected);
$sequence = $adb->pquery('select max(sequence) as maxseq from vtiger_field where block = ? and tabid = ?',array($_REQUEST['blockid'],$_REQUEST['tabid']));
$max = $adb->query_result($sequence,0,'maxseq');
$max_seq = $max + 1;
if($submode == 'showhiddenfields') {
for($i=0; $i< count($sel_arr);$i++) {
$res = $adb->pquery('update vtiger_field set presence = 2,sequence = ? where block = ? and fieldid = ?', array($max_seq,$_REQUEST['blockid'],$sel_arr[$i]));
$max_seq++;
}
}
else {
for($i=0; $i< count($sel_arr);$i++) {
$res = $adb->pquery('update vtiger_field set sequence = ? , block = ? where fieldid = ?', array($max_seq,$_REQUEST['blockid'],$sel_arr[$i]));
$max_seq++;
}
}
}
function getRelatedListInfo($module) {
global $adb;
$tabid = getTabid($module);
$related_query = 'select * from vtiger_relatedlists ' .
'inner join vtiger_tab on vtiger_relatedlists.related_tabid = vtiger_tab.tabid and vtiger_tab.presence = 0 where vtiger_relatedlists.tabid = ? order by sequence';
$relinfo = $adb->pquery($related_query,array($tabid));
$noofrows = $adb->num_rows($relinfo);
for($i=0;$i<$noofrows;$i++) {
$res[$i]['name'] = $adb->query_result($relinfo,$i,'name');
$res[$i]['sequence'] = $adb->query_result($relinfo,$i,'sequence');
$label = $adb->query_result($relinfo,$i,'label');
$relatedModule = getTabname($adb->query_result($relinfo,$i,'related_tabid'));
$res[$i]['label'] = getTranslatedString($label,$relatedModule);
$res[$i]['presence'] = $adb->query_result($relinfo,$i,'presence');
$res[$i]['tabid'] = $tabid;
$res[$i]['id'] = $adb->query_result($relinfo,$i,'relation_id');
}
return $res;
}
function changeRelatedListOrder() {
global $adb,$log;
$tabid = $_REQUEST['tabid'];
$what_todo = $_REQUEST['what_to_do'];
if(!empty($_REQUEST['what_to_do'])) {
if($_REQUEST['what_to_do'] == 'move_up') {
$currentsequence = $_REQUEST['sequence'];
$previous_relation = $adb->pquery('select relation_id,sequence from vtiger_relatedlists where sequence < ? and tabid = ? order by sequence desc limit 0,1',array($currentsequence,$tabid));
$previous_sequence = $adb->query_result($previous_relation,0,'sequence');
$previous_relationid = $adb->query_result($previous_relation,0,'relation_id');
$adb->pquery('update vtiger_relatedlists set sequence = ? where relation_id = ? and tabid = ?',array($previous_sequence,$_REQUEST['id'],$tabid));
$adb->pquery('update vtiger_relatedlists set sequence = ? where tabid = ? and relation_id = ?',array($currentsequence,$tabid,$previous_relationid));
}elseif($_REQUEST['what_to_do'] == 'move_down') {
$currentsequence = $_REQUEST['sequence'];
$next_relation = $adb->pquery('select relation_id,sequence from vtiger_relatedlists where sequence > ? and tabid = ? order by sequence limit 0,1',array($currentsequence,$tabid));
$next_sequence = $adb->query_result($next_relation,0,'sequence');
$next_relationid = $adb->query_result($next_relation,0,'relation_id');
$adb->pquery('update vtiger_relatedlists set sequence = ? where relation_id = ? and tabid = ?',array($next_sequence,$_REQUEST['id'],$tabid));
$adb->pquery('update vtiger_relatedlists set sequence = ? where tabid = ? and relation_id = ?',array($currentsequence,$tabid,$next_relationid));
}
}
}
?>