<?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');

global $mod_strings,$app_strings,$log,$theme;
$theme_path="themes/".$theme."/";
$image_path=$theme_path."images/";
require_once($theme_path.'layout_utils.php');
$smarty=new vtigerCRM_Smarty;

$subMode = $_REQUEST['sub_mode'];
$smarty->assign("MOD",$mod_strings);
$smarty->assign("APP",$app_strings);

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();
	
$smarty->assign("THEME", $theme);
$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"
	);

$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']
	);
	

	
$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;
	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');
	
	$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']);
					
					$fieldlabel = getTranslatedString($row_field['fieldlabel'], $module);
					
					$strictlyMandatory = false;
					if(isset($focus->mandatory_fields) && (!empty($focus->mandatory_fields)) && in_array($fieldname, $focus->mandatory_fields)){
						$strictlyMandatory = true;
					} elseif (in_array($uitype, $nonEditableUiTypes) || $displaytype == 2) {
						$strictlyMandatory = true;
					}
					$visibility = getFieldInfo($fieldname,$typeofdata,$quickcreate,$massedit,$presence,$strictlyMandatory,$customfieldflag,$displaytype,$uitype);
					
					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]['uitype']=$uitype;
						$cf_element[$count]['columnname']=$row_field['columnname'];					
						$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]['uitype']=$uitype;
						$cf_hidden_element[$hiddencount]['columnname']=$row_field['columnname'];					
						$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'];
	

	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);	
	
}



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
		$uichekdata='N~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 == '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,selected,maximumlength,sequence,block,displaytype,typeofdata,quickcreate,quickcreatesequence,info_type,masseditable) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
				$qparams = array($tabid,$custfld_fieldid,$columnName,$tableName,2,$uitype,$columnName,$fldlabel,0,2,0,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, 1));	 	
				}
	
				//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, 1));

			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);
				for($i = 0; $i < $count; $i++)
				{
					$pickArray[$i] = trim(from_html($pickArray[$i]));
					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());
					}
				}
			}
			//Inserting into LeadMapping table - Jaguar
			if($fldmodule == 'Leads' && $_REQUEST['fieldid'] == '')
			{
				$sql_def = "insert into vtiger_convertleadmapping (leadfid) values(?)";
				$adb->pquery($sql_def, array($custfld_fieldid));
			}
		}	
	}
}
}

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));
		
		}
	}
}

?>