Files
crm.clientright.ru/modules/ModuleBuilder/actions/BuildModule.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

2280 lines
80 KiB
PHP

<?php
/***********************************************************************************************
** The contents of this file are subject to the Vtiger Module-Builder License Version 1.0
* ( "License" ); You may not use this file except in compliance with the License
* The Original Code is: Technokrafts Labs Pvt Ltd
* The Initial Developer of the Original Code is Technokrafts Labs Pvt Ltd.
* Portions created by Technokrafts Labs Pvt Ltd are Copyright ( C ) Technokrafts Labs Pvt Ltd.
* All Rights Reserved.
**
*************************************************************************************************/
error_reporting( 0 );
set_time_limit( 0 );
include_once( 'modules/ModuleBuilder/utils/ZipMB.php' );
include_once( 'vtlib/Vtiger/Module.php' );
include_once( 'vtlib/Vtiger/Menu.php' );
include_once( 'vtlib/Vtiger/Event.php' );
include_once( 'vtlib/Vtiger/Cron.php' );
require_once( 'include/utils/VtlibUtils.php' );
require_once( "modules/ModuleBuilder/utils/tks_utils.php" );
class ModuleBuilder_BuildModule_Action extends Settings_Vtiger_Index_Action
{
private $modulename;
private $src;
private $dst;
private $xmlfile;
private $xmlfilename;
private $export_tmpdir;
private $tks_entity;
private $zipfilename;
private $current_language;
private $flag;
private $token;
private $moduleData;
/**
* Class Constructor
*/
function __construct()
{
global $log;
$log->debug("Entering __construct() method....");
$this -> exposeMethod( 'saveModule' );
$this -> modulename = NULL ;
$this -> src = './modules/ModuleBuilder/Module_Template';
$this -> dst = 'test/vtlib/modules/';
$this -> xmlfile = NULL;
$this -> xmlfilename = NULL;
$this -> export_tmpdir = 'test/vtlib/modules';
$this -> tks_entity = NULL;
$this -> zipfilename = NULL;
$this -> current_language = NULL;
$this -> flag = 0;
$this -> token = NULL;
$this -> tabid = NULL ;
$this -> moduleData = NULL;
$log->debug("Exiting __construct() method....");
}
/**
* Function to check permission for the User
*/
function checkPermission(Vtiger_Request $request) {
global $log;
$log->debug("Entering checkPermission() method....");
$log->debug("Exiting checkPermission() method....");
return true;
}
/**
* Function to check module directory exist
*/
private function check_dir( $dir )
{
global $log;
$log->debug("Entering check_dir($dir) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting check_dir($dir) method.... INITIALIZAION SESSION ERROR");
exit;
}
if ( !file_exists( $dir ) and !is_dir( $dir ) )
{
if( @mkdir( $dir ) != 1 )
{
$log->debug("Exiting check_dir($dir) method....");
return false;
}
}
$log->debug("Exiting check_dir($dir) method....");
return true;
}
/**
* Function to check dulicate module name
*/
private function checkDuplicateModule( $modulename )
{
global $log;
$log->debug("Entering checkDuplicateModule($modulename) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting checkDuplicateModule($modulename) method.... INITIALIZAION SESSION ERROR");
exit;
}
global $adb;
$table_flag1 = 0;
$table_flag2 = 0;
$query1 = "SELECT name FROM vtiger_tab where name=?";
$result1 = $adb->pquery($query1,array($modulename));
if($adb->num_rows($result1) > 0)
{
$table_flag1 = 1;
}
$tks_table_name = "vtiger_".strtolower($modulename);
$query2 = "SHOW TABLES LIKE ?";
$result2 = $adb->pquery($query2,array($tks_table_name));
if($adb->num_rows($result2) > 0)
{
$table_flag2 = 1;
}
if($table_flag1 == 1 || $table_flag2 == 1)
{
$log->debug("Exiting checkDuplicateModule($modulename) method.... Module Exisit");
return true;
}
$log->debug("Exiting checkDuplicateModule($modulename) method....");
return false;
}
/**
* Function to check id deleted
*/
private function checkDeleted( $farray )
{
global $log;
$log->debug("Entering checkDeleted(arrray()) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting checkDeleted(arrray()) method.... INITIALIZAION SESSION ERROR");
exit;
}
for($i = 0 ;$i < sizeof($farray) ;$i++)
{
if($farray[$i] == '')
{
$log->debug("Exiting checkDeleted(arrray()) method....");
return true;
}
elseif($farray[$i]['deleted'] == 'false')
{
$log->debug("Exiting checkDeleted(arrray()) method....");
return false;
}
}
$log->debug("Exiting checkDeleted(arrray()) method....");
return true;
}
/**
* Function to Build Module Data From Session
*/
function buildSessionData($token) {
global $log;
$log->debug("Entering buildSessionData($token) method....");
$data = array();
$tempData = $_SESSION['tks_module_builder'][$token];
$blockid = 0;
foreach($tempData['blocks'] as $key => $value )
{
if($tempData['blocks'][$key]['fieldCount'] > 0 && $tempData['blocks'][$key]['deleted'] == 'false')
{
$data['tks_blocks'][] = $value;
end($data['tks_blocks']);
$blockid = key($data['tks_blocks']);
foreach($tempData['fields'] as $k => $v)
{
if( $v['blockid'] == $value['block_id'] && $v['deleted'] == 'false')
{
$data['tks_blocks'][$blockid]['tks_fields'][] = $v;
}
}
$data['tks_blocks'][$blockid]['tks_fields'] = array_sort($data['tks_blocks'][$blockid]['tks_fields'], 'sequence', SORT_ASC);
}
}
$data['tks_modname'] = $_SESSION['tks_module_builder'][$token]['tks_modname'];
$data['tks_label'] = $_SESSION['tks_module_builder'][$token]['tks_label'];
$data['tks_parent'] = $_SESSION['tks_module_builder'][$token]['tks_parent'];
$log->debug("Exiting buildSessionData($token) method....");
return $data;
}
/**
* Function to save module and build
*/
public function saveModule( Vtiger_Request $request )
{
global $log;
$log->debug("Entering saveModule(request array()) method....");
$token = $request->get('token');
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $request->getModule(false)));
$response->emit();
$log->debug("Exiting saveModule(request array()) method.... INITIALIZAION SESSION ERROR");
exit;
}
$this -> token = $token;
$result = '';
global $adb;
$this -> moduleData = $this -> buildSessionData($token);
$this -> modulename = ucfirst( strtolower($this -> moduleData['tks_modname']) );
$this -> tabid = $request -> get( 'tabid' ) ;
$this -> dst = $this -> dst.$this -> modulename;
$this -> tks_entity = $this -> moduleData['tks_modname'];
$this -> zipfilename = $this -> export_tmpdir.'/'.$this -> modulename.'.zip';
if( sanitizeModuleName($this -> modulename) )
{
$this->response( vtranslate('LBL_RESERVED_KEYWORD', $request->getModule() ) );
}
if( $this -> checkDuplicateModule ( $this -> modulename ) )
{
$this->response( vtranslate( 'LBL_EXIST_MODULE', $request->getModule() ) );
}
$realtedlist = ModuleBuilder_MBindex_View::modList();
$temp_rel = array();
$i=0;
foreach($realtedlist as $key => $val)
{
if($request ->get($key) != '')
{
$temp_rel[$i]['module'] = $key;
if($request ->get($key.'_add') != '')
{
$temp_rel[$i]['add'] = 1;
}
else
{
$temp_rel[$i]['add'] = 0;
}
if($request ->get($key.'_sel') != '')
{
$temp_rel[$i]['sel'] = 1;
}
else
{
$temp_rel[$i]['sel'] = 0;
}
$i++;
}
}
$_SESSION['tks_module_builder'][$token]['tks_relatedlist'] = $temp_rel;
$this -> moduleData ['tks_relatedlist'] = $temp_rel;
$block = array();
$sequenceList = $request->get('tkssequence');
if(is_array($sequenceList) && !empty($sequenceList))
{
foreach($sequenceList as $key => $val)
{
foreach($this -> moduleData['tks_blocks'] as $k => $v)
{
if($val == $v['name'])
{
$block[] = $this -> moduleData['tks_blocks'][$k];
break;
}
}
}
unset($this -> moduleData['tks_blocks']);
$this -> moduleData['tks_blocks']=$block;
}
else
{
$this -> moduleData['tks_blocks'] = array_reverse($this -> moduleData['tks_blocks']);
}
unset($block);
if( $request -> get( 'download' ) == 'download' )
{
$zipfilename = 'test/vtlib/modules/'. ucfirst( strtolower( vtlib_purify ( $this -> modulename ) ) ).'.zip';
if ( !file_exists( $zipfilename ) )
{
$this->response(vtranslate('LBL_ZIP_NOT_PRESENT', $request->getModule()));
}
}
else
{
if( sizeof( $this -> moduleData[ 'tks_blocks' ] ) < 1 || $this -> moduleData[ 'tks_blocks' ] == '' )
{
$this->response(vtranslate('LBL_ZERO_BLOCK', $request->getModule()));
}
elseif(sizeof($this -> moduleData[ 'tks_blocks' ] ) > 0 )
{
/*this is to check there must be atleat one field per block*/
for( $i = 0; $i < sizeof( $this -> moduleData[ 'tks_blocks' ] ) ; $i++ )
{
if( $this->checkDeleted($this -> moduleData[ 'tks_blocks' ]) )
{
for( $j = 0; $j < sizeof( $this -> moduleData[ 'tks_blocks' ][ $i ][ 'tks_fields' ] ) ; $j++ )
{
$fieldarr = $this -> moduleData[ 'tks_blocks' ][ $i ][ 'tks_fields' ];
if( $this->checkDeleted($fieldarr) )
{
$this->response(vtranslate('LBL_ZERO_FIELD_IN_BLOCK', $request->getModule()).
$this -> moduleData[ 'tks_blocks' ][ $i ]['name'].' BLock');
}
}
}
}
if( $this -> check_dir( 'test/vtlib/modules' ) == false )
{
$this->response(vtranslate('LBL_DIR_CREATION', $request->getModule()));
}
elseif(!class_exists(ZipArchive))
{
$this->response(vtranslate('LBL_ZIP_ARCHIVE_PACKAGE_NOT_FOUND', $request->getModule()));
}
elseif(!class_exists(DOMDocument))
{
$this->response(vtranslate('LBL_DOMDOCUMENT_PACKAGE_NOT_FOUND', $request->getModule()));
}
else
{
$this -> copy_folder( $this -> src, $this -> dst, $request, 'BASE' );
$this -> saveIntoDB( $request );
}
}
}
$log->debug("Exiting saveModule(request array()) method....");
$this->response('');
}
/**
* Function to forward response if validation fails or success
*/
private function response( $result )
{
global $log;
$log->debug("Entering response($result) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting response($result) method.... INITIALIZAION SESSION ERROR");
exit;
}
$response = new Vtiger_Response();
try
{
if( empty( $result ) )
{
$log->debug("response($result) method.... Module Build successfully");
$response->setResult( array( 'success'=>true, 'saved' => 'success', 'tabid' => $this -> tabid ));
}
else
{
$log->debug("response($result) method.... Module Build Failure");
$response->setResult( array( 'success'=>true, 'saved' => 'fail', 'status' => $result ) );
}
}
catch( Exception $e)
{
$log->debug("response($result) method.... Module Build ERROR");
$response->setError( $e->getCode(), $e->getMessage());
}
$log->debug("Exiting response($result) method....");
$response->emit();
exit();
}
/**
* Function to copy default module template folder to test folder for further processing
*/
private function copy_folder( $src,$dst,$request,$base)
{
global $log;
$log->debug("Entering copy_folder($src,$dst,request array(),$base) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting copy_folder($src,$dst,request array(),$base) method.... INITIALIZAION SESSION ERROR");
exit;
}
$content = '';
$dir = opendir( $src);
@mkdir( $dst);
while( false !== ( $file = readdir( $dir)) )
{
if ( ( $file != '.' ) && ( $file != '..' ))
{
if ( is_dir( $src . '/' . $file) )
{
$this -> copy_folder( $src . '/' . $file,$dst . '/' . $file,$request,'PATH');
}
else
{
@copy( $src . '/' . $file,$dst . '/' . $file);
}
}
if( $file == 'ModuleFile.php')
{
@rename( $dst.'/'."ModuleFile.php" , $dst.'/'.$this -> modulename.".php");
}
if( $file == 'languages')
{
@rename( $dst.'/languages/'."ModuleFile.php" , $dst.'/languages/'.$this -> modulename.".php");
}
}
@closedir( $dir);
if( $base == 'BASE')
{
$this -> export( $request);
}
$log->debug("Exiting copy_folder($src,$dst,request array(),$base) method....");
}
/**
* Function to create manifest XML file
*/
private function getManifestFilePath()
{
global $log;
$log->debug("Entering getManifestFilePath() method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting getManifestFilePath() method.... INITIALIZAION SESSION ERROR");
exit;
}
if( empty( $this -> xmlfilename))
{
// Set the module xml filename to be written for exporting.
$this -> xmlfilename = "manifest-".time().".xml";
}
$log->debug("Exiting getManifestFilePath() method....");
return $this -> dst.'/'.$this -> xmlfilename;
}
/**
* Function to create query for module table and module custom table
*/
private function create_tablesql( $tablename, $type)
{
global $log;
$log->debug("Entering create_tablesql( $tablename, $type) method....");
$log->debug("Exiting create_tablesql( $tablename, $type) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting create_tablesql( $tablename, $type) method.... INITIALIZAION SESSION ERROR");
exit;
}
$engine = ' ENGINE=InnoDB DEFAULT CHARSET=utf8';
$primarykey = '`'.strtolower( $this -> modulename).'id`'.' int(11) NOT NULL, ';
$primarykeycf = '`'.strtolower( $this -> modulename).'id`'.' int(11) NOT NULL, ';
$moduleno = '`'.strtolower( $this -> modulename).'no` varchar(100) default NULL, ';
$field = '';
if( !$type == 'cf')
{
$mblocks = $this -> moduleData['tks_blocks'];
for( $i=0; $i < sizeof( $mblocks) ; $i++)
{
if($mblocks[$i]['deleted'] == 'true')
{
continue;
}
$mfield = $mblocks[$i]['tks_fields'];
for( $j=0; $j<sizeof( $mfield); $j++ )
{
$m_field = $mfield[$j];
if($m_field['deleted'] == 'true')
{
continue;
}
$field .= '`'.$m_field['fieldname'].'` ';
if( $m_field['typeofdata'] == 'V~M' || $m_field['typeofdata'] == 'V~O'
||$m_field['typeofdata'] == 'E~M' || $m_field['typeofdata'] == 'E~O')
{
$type = 'varchar('.$m_field['maximumlength'].')'.' ';
}
if( $m_field['typeofdata'] == 'D~M' || $m_field['typeofdata'] == 'D~O')
{
$type = 'date'.' ';
}
if( $m_field['typeofdata'] == 'N~M' || $m_field['typeofdata'] == 'N~O')
{
if( !isset( $m_field['decimal']))
$type = 'varchar('.$m_field['maximumlength'].')'.' ';
else
$type = 'decimal('.$m_field['decimal'].')'.' ';
}
if( $m_field['typeofdata'] == 'I~M' || $m_field['typeofdata'] == 'I~O')
{
$type = 'int('.$m_field['maximumlength'].')'.' ';
}
if( $m_field['typeofdata'] == 'C~M' || $m_field['typeofdata'] == 'C~O')
{
$type = 'varchar(3)'.' ';
}
if( $m_field['typeofdata'] == 'T~M' || $m_field['typeofdata'] == 'T~O')
{
$type = 'varchar('.$m_field['maximumlength'].')'.' ';
}
$field .= $type;
$default = 'default NULL ';
$field .= $default;
if( $i == sizeof( $mblocks)-1 && $j == sizeof( $mfield)-1)
{
$field .= ' ';
}
else
{
$field .= ',';
}
}
}
$log->debug("Exiting create_tablesql( $tablename, $type) method....");
return 'CREATE TABLE `'.$tablename."` (".$primarykey.$moduleno.$field." , PRIMARY KEY (`".strtolower( $this -> modulename)."id"."`) )".$engine;
}
else
{
$log->debug("Exiting create_tablesql( $tablename, $type) method....");
return 'CREATE TABLE `'.$tablename."cf` (".$primarykeycf."PRIMARY KEY (`".strtolower( $this -> modulename)."id"."`) )".$engine;
}
}
/**
* Function to create query for module table and module custom table
*/
private function create_tablesq2( $tablename)
{
global $log;
$log->debug("Entering create_tablesql( $tablename, $type) method....");
$log->debug("Exiting create_tablesql( $tablename, $type) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting create_tablesql( $tablename, $type) method.... INITIALIZAION SESSION ERROR");
exit;
}
$engine = ' ENGINE=InnoDB DEFAULT CHARSET=utf8';
$primarykey = '`recordid` int(25) NOT NULL, ';
$primarykeycf = '`userid` int(25) NOT NULL, ';
$moduleno = '`starred` varchar(100) default NULL';
$field = '';
$log->debug("Exiting create_tablesql( $tablename, $type) method....");
return 'CREATE TABLE `'.$tablename."_user_field` (".$primarykey.$primarykeycf.$moduleno." , KEY (`".strtolower( $tablename)."_user_field"."`) )".$engine;
}
/**
* Function to get the field name from the field label
*/
private function getFieldName( $fldlabel )
{
global $log;
$log->debug("Entering getFieldName( $fldlabel ) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting getFieldName( $fldlabel ) method.... INITIALIZAION SESSION ERROR");
exit;
}
$log->debug("Exiting getFieldName( $fldlabel ) method....");
return substr( strtolower( $this -> modulename.'_'."tks_".str_replace( " ", "", strtolower( $fldlabel ) ) ), 0, 30 );
}
/**
* Function to get return number for true or false
*/
private function returnNos( $val )
{
global $log;
$log->debug("Entering returnNos( $val ) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting returnNos( $val ) method.... INITIALIZAION SESSION ERROR");
exit;
}
$log->debug("Exiting returnNos( $val ) method....");
return $val == 'true' ? '1' : '0';
}
/**
* Function to get the field attributes
*/
private function getFieldAttributes( $field, $seq )
{
global $log;
$log->debug("Entering getFieldAttributes( $field, $seq ) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting getFieldAttributes( $field, $seq ) method.... INITIALIZAION SESSION ERROR");
exit;
}
$field_data=array();
$fldType = strtolower($field['type']);
$fldlength=$field['tkslength'];
$field_data['fieldname'] = substr(strtolower( $this -> modulename ).'_'."tks_".str_replace( " ", "", strtolower( $field['tkslabel'])), 0, 30);
$field_data['columnname'] = substr(strtolower( $this -> modulename ).'_'."tks_".str_replace( " ", "", strtolower( $field['tkslabel'])), 0, 30);
$field_data['tablename'] ='vtiger_'.strtolower( $this -> modulename);
$field_data['generatedtype'] = '1';
$field_data['fieldlabel'] = $field['tkslabel'];
$field_data['readonly'] = '1';
$field_data['presence'] = '2';
$field_data['defaultvalue'] = $field['fieldDefaultValue'];
$field_data['sequence'] = $seq;
$field_data['fieldselect'] = $field['blockid'].'_'.$seq;
$field_data['quickcreate'] = $field['quickcreate'] == 'true' ? '2' : '1';
$field_data['quickcreatesequence'] = '';
$field_data['displaytype'] = '1';
$field_data['info_type'] = 'BAS';
$field_data['helpinfo'] = '<![CDATA[]]>';
$field_data['masseditable'] = $this -> returnNos( $field['masseditable']);
$tks_mfield = $field['tksrequired'];
if( $field['tksfilterfield'] == 'true' )
{
$field_data['filter']='Yes';
}
else
{
$field_data['filter']='No';
}
if( get_magic_quotes_gpc() == 1)
{
$fldlabel = stripslashes( $field['tkslabel']);
}
$uitype='';
$fldPickList='';
if( $field['tksdecimal'] != '')
{
$decimal=$field['tksdecimal'];
}
else
{
$decimal=0;
}
$type='';
$uichekdata='';
if( $fldType == 'string')
{
$field_data['uitype']='2';
$field_data['maximumlength']=$fldlength;
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'number')
{
$field_data['uitype']='7';
$field_data['maximumlength']=$fldlength;
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='N~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='N~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'double')
{
$field_data['uitype']='7';
$field_data['maximumlength']='100';
$field_data['decimal']=$fldlength .','.$decimal;
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='N~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='N~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'percentage')
{
$field_data['uitype']='9';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='N~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='N~O';
$field_data['fieldtype']='O';
}
$field_data['decimal']='5,2';
}
elseif( $fldType == 'currency')
{
$field_data['uitype']='71';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='N~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='N~O';
$field_data['fieldtype']='O';
}
$field_data['decimal']=$fldlength .','.$decimal;
}
elseif( $fldType == 'date')
{
$field_data['uitype']='5';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='D~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='D~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'email')
{
$field_data['uitype']='13';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='E~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='E~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'time')
{
$field_data['uitype']='14';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='T~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='T~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'phone')
{
$field_data['uitype']='11';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'picklist')
{
$field_data['uitype']='15';
$field_data['maximumlength']='100';
$field_data['pickArray'] = $field['tkspickListValues'];
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'url')
{
$field_data['uitype']='17';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'boolean')
{
$field_data['uitype']='56';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='C~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='C~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'textarea')
{
$field_data['uitype']='21';
$field_data['maximumlength']='250';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'multipicklist')
{
$field_data['uitype']='33';
$field_data['maximumlength']='100';
$field_data['pickArray'] = $field['tkspickListValues'];
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'skype')
{
$field_data['uitype']='85';
$field_data['maximumlength']='100';
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'integer')
{
$field_data['uitype']='1';
$field_data['maximumlength']=$fldlength;
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='I~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='I~O';
$field_data['fieldtype']='O';
}
}
elseif( $fldType == 'relate')
{
$field_data['uitype']='10';
$field_data['maximumlength']='100';
$field_data['relatedmodules'] = $field['tksrelate'];
if( $tks_mfield== 'true' )
{
$field_data['typeofdata']='V~M';
$field_data['fieldtype']='M';
}
else
{
$field_data['typeofdata']='V~O';
$field_data['fieldtype']='O';
}
}
$log->debug("Exiting getFieldAttributes( $field, $seq ) method....");
return $field_data;
}
/**
* Function to claborate all the related module files to embed in the language file
*/
private function getlangStr( $mod_list )
{
global $log;
$log->debug("Entering getlangStr(array()) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting getlangStr(array()) method.... INITIALIZAION SESSION ERROR");
exit;
}
global $adb;
$str = NULL;
for( $i = 0; $i < sizeof( $mod_list ); $i++ )
{
$str .= '\''.$mod_list[ $i ].'\' => \''.vtranslate('SINGLE_'.$mod_list[ $i ],$mod_list[ $i ]). '\','."\n";
}
$log->debug("Exiting getlangStr(array()) method....");
return $str;
}
/**
* Function to Save data into database.
*/
private function saveIntoDB( $request)
{
global $log,$adb,$current_user;
$log->debug("Entering saveIntoDB(request array()) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting saveIntoDB(request array()) method.... INITIALIZAION SESSION ERROR");
exit;
}
//*********** Insert Table *************//
$tabid = $this -> tabid;
$user_id = $current_user->id;
$parent = $this -> moduleData['tks_parent']; //$request->get('tks_parent');
$tks_entity = $this -> moduleData['tks_modname']; //$request->get('tks_entity');
$modulename = $this -> moduleData['tks_modname'];
$label = $this -> moduleData['tks_label'];
$sql = "SELECT version FROM vtiger_tks_module WHERE tabid=?";
$result = $adb->pquery($sql,array($tabid));
if($adb->num_rows($result)>0 && $tabid!=''){
$sql = "UPDATE vtiger_tks_module SET tablabel=?,name=?, modifiedby=?,tks_entity=?,version=?,parent=? WHERE tabid=? ";
$adb->pquery($sql, array($label,$modulename, $user_id,$tks_entity,1,$parent,$tabid));
}else{
$tabid_res = $adb->pquery("SELECT MAX(tabid) FROM vtiger_tks_module" , array());
$row1 = $adb->fetch_row($tabid_res);
$this -> tabid = $row1[0]+1;
$tabid = $this -> tabid;
$adb->pquery("INSERT INTO vtiger_tks_module(tabid,name,tablabel,modifiedby,ownedby,version,parent,tks_entity) VALUES(?,?,?,?,?,?,?,?)" , array($tabid,$modulename, $label,$user_id,$user_id,1,$parent,$tks_entity));
}
$mblocks = $this -> moduleData['tks_blocks'];
if($tabid!=''){
$sql = "DELETE FROM vtiger_tks_blocks WHERE tabid=?";
$adb->pquery($sql, array($tabid));
$sql = "DELETE FROM vtiger_tks_field WHERE tabid=?";
$adb->pquery($sql, array($tabid));
$sql = "DELETE FROM vtiger_tks_fieldmodulerel WHERE tabid=?";
$adb->pquery($sql, array($tabid));
$sql = "DELETE FROM vtiger_tks_picklist WHERE tabid=?";
$adb->pquery($sql, array($tabid));
$sql = "DELETE FROM vtiger_tks_relatedlists WHERE tabid=?";
$adb->pquery($sql, array($tabid));
}
//*********** Insert Block *************//
for( $i=0; $i < sizeof( $mblocks) ; $i++)
{
if($mblocks[$i]['deleted'] == 'true')
continue;
$tabid_res = $adb->pquery("SELECT MAX(blockid) FROM vtiger_tks_blocks" , array());
$row1 = $adb->fetch_row($tabid_res);
$blobkId = $row1[0]+1;
$blocksequence = $i+1;
$adb->pquery("INSERT INTO vtiger_tks_blocks(blockid, tabid, blocklabel, sequence, show_title) VALUES(?,?,?,?,?)" , array($blobkId,$tabid, $mblocks[$i]['name'],$blocksequence,$mblocks[$i]['name']));
$mfield = $mblocks[$i]['tks_fields'];
$k = 0;
//*********** Insert Fields *************//
for( $j=0; $j<sizeof( $mfield); $j++ )
{
if($mfield[$j]['deleted'] == 'true')
{
continue;
}
$s = $k+1;
$fldname= $mfield[$j]['fieldname'];
$tablename = $mfield[$j]['tablename'];
$fldlabel = $mfield[$j]['fieldlabel'];
$fldcolumnname = $mfield[$j]['columnname'];
$defaultvalue = $mfield[$j]['defaultvalue'];
$maximumlength = $mfield[$j]['maximumlength'];
$blockid = $mfield[$j]['blockid'];
$uitype = $mfield[$j]['uitype'];
$typeofdata = $mfield[$j]['typeofdata'];
if($mfield[$j]['isQuickCreateDisabled'] == 'true')
$quickcreate=1;
else
$quickcreate=0;
if($mfield[$j]['tksfilterfield'] == 'true')
$isfilter=1;
else
$isfilter=0;
if($mfield[$j]['isSummaryField'] == 'true')
$summaryfield=1;
else
$summaryfield=0;
$generatedtype= $mfield[$j]['generatedtype'];
$readonly = $mfield[$j]['readonly'];
$presence = $mfield[$j]['presence'];
$displaytype = $mfield[$j]['displaytype'];
$quickcreatesequence = $mfield[$j]['quickcreatesequence'];
$info_type = $mfield[$j]['info_type'];
$helpinfo = $mfield[$j]['helpinfo'];
$masseditable = $mfield[$j]['masseditable'];
$tabid_res = $adb->pquery("SELECT MAX(fieldid) FROM vtiger_tks_field" , array());
$row1 = $adb->fetch_row($tabid_res);
$fieldid = $row1[0]+1;
$adb->pquery("INSERT INTO vtiger_tks_field(tabid, fieldid, columnname, tablename,generatedtype, uitype, fieldname, fieldlabel,readonly,presence,defaultvalue, maximumlength, sequence, block,displaytype,typeofdata, quickcreate,quickcreatesequence,info_type,isfilter, helpinfo, masseditable,summaryfield) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ,
array($tabid,$fieldid, $fldcolumnname,$tablename,$generatedtype,$uitype,$fldname,$fldlabel,$readonly,$presence,$defaultvalue,$maximumlength,$s,$blockid,$displaytype,$typeofdata,$quickcreate,$quickcreatesequence,$info_type,$isfilter,$helpinfo,$masseditable,$summaryfield));
//Relation Fields.
if($uitype == 10)
{
$module = $this -> moduleData['tks_modname'];
$relatedmodules = $mfield[$j]['relatedmodules'];
$rls=0;
if(is_array($relatedmodules))
{
for($rls=0;$rls<count($relatedmodules);$rls++)
{
$relmodule=$relatedmodules[$rls];
$adb->pquery("INSERT INTO vtiger_tks_fieldmodulerel(fieldid,tabid,module, relmodule, status,sequence) VALUES(?,?,?,?,?,?)" ,
array($fieldid,$tabid,$module,$relmodule,'',$rls));
}
}
else
{
$relmodule=$relatedmodules;
$adb->pquery("INSERT INTO vtiger_tks_fieldmodulerel(fieldid,tabid,module, relmodule, status,sequence) VALUES(?,?,?,?,?,?)" ,
array($fieldid,$tabid,$module,$relmodule,'',$rls));
}
}
//Picklist and Multi Picklis Fields.
if($uitype == 15 || $uitype == 33)
{
$picklistvalues = $mfield[$j]['picklistvalues'];
$pls=0;
foreach ($picklistvalues as $picklistvalue) {
$adb->pquery("INSERT INTO vtiger_tks_picklist(fieldid,tabid,picklistvalue, sequence) VALUES(?,?,?,?)" ,
array($fieldid,$tabid,$picklistvalue,$pls));
$pls++;
}
}
$k++;
}
}
//Related List.
$tks_relatedlist = $this -> moduleData['tks_relatedlist'];
for($i=0;$i<count($tks_relatedlist);$i++)
{
$tabid_res = $adb->pquery("SELECT tabid FROM vtiger_tab WHERE `tablabel` LIKE ?" , array($tks_relatedlist[$i]['module']));
$row1 = $adb->fetch_row($tabid_res);
$related_tabid= $row1['tabid'];
$tabid_res = $adb->pquery("SELECT MAX(relation_id) FROM vtiger_tks_relatedlists" , array());
$row1 = $adb->fetch_row($tabid_res);
$relation_id= $row1[0]+1;
$name = 'get_related_list';
$sequence = $i;
$label = $tks_relatedlist[$i]['module'];
$presence=0;
$actions = array();
if($tks_relatedlist[$i]['add'])
$actions[] = 'add';
if($tks_relatedlist[$i]['sel'])
$actions[] = 'select';
$action= implode(',',$actions);
$adb->pquery("INSERT INTO vtiger_tks_relatedlists(relation_id,tabid,related_tabid, name,sequence,label,presence,actions) VALUES(?,?,?,?,?,?,?,?)" ,
array($relation_id,$tabid,$related_tabid,$name,$sequence,$label,$presence,$action));
}
$log->debug("Exiting saveIntoDB(request array()) method....");
}
/**
* Function to export module zip to the test folder
*/
private function export( $request)
{
global $log;
$log->debug("Entering export(request array()) method....");
$token = $this -> token;
if($token == '')
{
$response = new Vtiger_Response();
$response->setError('502', vtranslate('LBL_FAILED_MODULE_INIT', $this -> modulename));
$response->emit();
$log->debug("Exiting export(request array()) method.... INITIALIZAION SESSION ERROR");
exit;
}
$modulename = $this -> modulename;
$zipfilename = '';
/*START -- Temp array to take care of all related list*/
$temp_rel = array();
/*END -- Temp array to take care of all related list*/
$mblocks = $this -> moduleData['tks_blocks'];
for( $i=0; $i < sizeof( $mblocks) ; $i++)
{
if($mblocks[$i]['deleted'] == 'true')
{
continue;
}
$mfield = $mblocks[$i]['tks_fields'];
$k = 0;
for( $j=0; $j<sizeof( $mfield); $j++ )
{
if($mfield[$j]['deleted'] == 'true')
{
continue;
}
$s = $k+1;
$m_field = $this -> getFieldAttributes( $mfield[$j],$s);
$this -> moduleData['tks_blocks'][$i]['tks_fields'][$j]
= array_merge( $this -> moduleData['tks_blocks'][$i]['tks_fields'][$j], $m_field);
$k++;
}
}
$ManifestFilePath = $this -> getManifestFilePath();
$tablename = "vtiger_".strtolower( $this -> modulename);
$primarykey = strtolower( $this -> modulename).'id';
$label = ucfirst( $this -> moduleData['tks_modname']);
$xml = new DOMDocument( "1.0","UTF-8");
$module = $xml->createElement( "module");
$xml->appendChild( $module);
$exporttime = $xml->createElement( "exporttime");
$exporttimeText = $xml->createTextNode( date( 'Y-m-d H:i:s'));
$exporttime->appendChild( $exporttimeText);
$name = $xml->createElement( "name");
$nameText = $xml->createTextNode( $this -> modulename);
$name->appendChild( $nameText);
$label1 = $xml->createElement( "label");
$label1Text = $xml->createTextNode( $label);
$label1->appendChild( $label1Text);
$parent = $xml->createElement( "parent");
$parentText = $xml->createTextNode($this -> moduleData['tks_parent']);
$parent->appendChild( $parentText);
$module->appendChild( $exporttime);
$module->appendChild( $name);
$module->appendChild( $label1);
$module->appendChild( $parent);
$dependencies = $xml->createElement( "dependencies");
$vtiger_version = $xml->createElement( "vtiger_version");
$vtiger_versionText = $xml->createTextNode( '7.1.0');
$vtiger_version->appendChild( $vtiger_versionText);
$dependencies->appendChild( $vtiger_version);
$module->appendChild( $dependencies);
$licence = $xml->createElement( "license");
$inline = $xml->createElement( "inline");
$lic = vtranslate('LBL_TECH_LICENCE', 'ModuleBuilder');
$lic = str_replace( '##moduleLable##', $this -> moduleData['tks_modname'], $lic);
$techlicence = $xml->createCDATASection( $lic);
$inline->appendChild( $techlicence);
$licence->appendChild( $inline);
$module->appendChild( $licence);
$tables = $xml->createElement( "tables");
$table = $xml->createElement( "table");
$table_name = $xml->createElement( "name");
$table_nameText = $xml->createTextNode( $tablename);
$table_name->appendChild( $table_nameText);
$sql = $xml->createElement( "sql");
$query = $this -> create_tablesql( $tablename, '');
$sqlText = $xml->createCDATASection( $query);
$sql->appendChild( $sqlText);
$table->appendChild( $table_name);
$table->appendChild( $sql);
$tables->appendChild( $table);
$table1 = $xml->createElement( "table");
$cftable_name = $xml->createElement( "name");
$cftable_nameText = $xml->createTextNode( $tablename.'cf');
$cftable_name->appendChild( $cftable_nameText);
$cfsql = $xml->createElement( "sql");
$cfquery = $this -> create_tablesql( $tablename, 'cf');
$cfsqlText = $xml->createCDATASection( $cfquery);
$cfsql->appendChild( $cfsqlText);
$table1->appendChild( $cftable_name);
$table1->appendChild( $cfsql);
$tables->appendChild( $table1);
$table2 = $xml->createElement( "table");
$usertable_name = $xml->createElement( "name");
$usertable_nameText = $xml->createTextNode( $tablename.'_user_field');
$usertable_name->appendChild( $usertable_nameText);
$usersql = $xml->createElement( "sql");
$userquery = $this -> create_tablesq2( $tablename);
$usersqlText = $xml->createCDATASection( $userquery);
$usersql->appendChild( $usersqlText);
$table2->appendChild( $usertable_name);
$table2->appendChild( $usersql);
$tables->appendChild( $table2);
$module->appendChild( $tables);
$blocks = $xml->createElement( "blocks");
$mblocks = $this -> moduleData['tks_blocks'];
for( $i=0; $i < sizeof( $mblocks) ; $i++)
{
if($mblocks[$i]['deleted'] == 'true')
continue;
$block = $xml->createElement( "block");
$block_label = $xml->createElement( "label");
$block_labelText = $xml->createTextNode( $mblocks[$i]['name']);
$block_label->appendChild( $block_labelText);
$block_fields = $xml->createElement( "fields");
$mfield = $mblocks[$i]['tks_fields'];
$k = 0;
for( $j=0; $j<sizeof( $mfield); $j++ )
{
if( $i==0 && $j==0)
{
$field = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( strtolower( $this -> modulename).'no');
$fieldname->appendChild( $fieldnameText);
$uitype = $xml->createElement( "uitype");
$uitypeText = $xml->createTextNode( '4');
$uitype->appendChild( $uitypeText);
$columnname = $xml->createElement( "columnname");
$columnnameText = $xml->createTextNode( strtolower( $this -> modulename).'no');
$columnname->appendChild( $columnnameText);
$tablename1 = $xml->createElement( "tablename");
$tablename1Text = $xml->createTextNode( $tablename);
$tablename1->appendChild( $tablename1Text);
$generatedtype = $xml->createElement( "generatedtype");
$generatedtypeText = $xml->createTextNode( '1');
$generatedtype->appendChild( $generatedtypeText);
$fieldlabel = $xml->createElement( "fieldlabel");
$fieldlabelText = $xml->createTextNode( $this -> modulename.' No');
$fieldlabel->appendChild( $fieldlabelText);
$readonly = $xml->createElement( "readonly");
$readonlyText = $xml->createTextNode( '1');
$readonly->appendChild( $readonlyText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( '2');
$presence->appendChild( $presenceText);
$defaultvalue = $xml->createElement( "defaultvalue");
$defaultvalueText = $xml->createTextNode('');
$defaultvalue->appendChild( $defaultvalueText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( '0');
$sequence->appendChild( $sequenceText);
$maximumlength = $xml->createElement( "maximumlength");
$maximumlengthText = $xml->createTextNode( '100');
$maximumlength->appendChild( $maximumlengthText);
$typeofdata = $xml->createElement( "typeofdata");
$typeofdataText = $xml->createTextNode( 'V~M');
$typeofdata->appendChild( $typeofdataText);
$quickcreate = $xml->createElement( "quickcreate");
$quickcreateText = $xml->createTextNode( '1');
$quickcreate->appendChild( $quickcreateText);
$quickcreatesequence = $xml->createElement( "quickcreatesequence");
$quickcreatesequenceText = $xml->createTextNode( '');
$quickcreatesequence->appendChild( $quickcreatesequenceText);
$displaytype = $xml->createElement( "displaytype");
$displaytypeText = $xml->createTextNode( '1');
$displaytype->appendChild( $displaytypeText);
$info_type = $xml->createElement( "info_type");
$info_typeText = $xml->createTextNode( 'BAS');
$info_type->appendChild( $info_typeText);
$helpinfo = $xml->createElement( "helpinfo");
$helpinfoText = $xml->createCDATASection( '');
$helpinfo->appendChild( $helpinfoText);
$masseditable = $xml->createElement( "masseditable");
$masseditableText = $xml->createTextNode( '1');
$masseditable->appendChild( $masseditableText);
if($this -> flag == 0 && $this -> tks_entity == '')
{
$entityidentifier = $xml->createElement( "entityidentifier");
$entityidfield = $xml->createElement( "entityidfield");
$entityidfieldText = $xml->createTextNode( strtolower( $this -> modulename).'id' );
$entityidfield->appendChild( $entityidfieldText);
$entityidcolumn = $xml->createElement( "entityidcolumn");
$entityidcolumnText = $xml->createTextNode( strtolower( $this -> modulename).'id' );
$entityidcolumn->appendChild( $entityidcolumnText);
$entityidentifier->appendChild( $entityidfield);
$entityidentifier->appendChild( $entityidcolumn);
}
$field->appendChild( $fieldname);
$field->appendChild( $uitype);
$field->appendChild( $columnname);
$field->appendChild( $tablename1);
$field->appendChild( $generatedtype);
$field->appendChild( $fieldlabel);
$field->appendChild( $readonly);
$field->appendChild( $presence);
$field->appendChild( $defaultvalue);
$field->appendChild( $sequence);
$field->appendChild( $maximumlength);
$field->appendChild( $typeofdata);
$field->appendChild( $quickcreate);
$field->appendChild( $quickcreatesequence);
$field->appendChild( $displaytype);
$field->appendChild( $info_type);
$field->appendChild( $helpinfo);
$field->appendChild( $masseditable);
if($this -> flag == 0 && $this -> tks_entity == '')
{
$this -> flag = 1;
$field->appendChild( $entityidentifier);
}
$block_fields->appendChild( $field);
}//end if
if($mfield[$j]['deleted'] == 'true')
{
continue;
}
$s = $k+1;
$k++;
$field = $xml->createElement( "field");
$m_field = $mfield[$j];
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( $m_field['fieldname']);
$fieldname->appendChild( $fieldnameText);
$uitype = $xml->createElement( "uitype");
$uitypeText = $xml->createTextNode( $m_field['uitype']);
$uitype->appendChild( $uitypeText);
$columnname = $xml->createElement( "columnname");
$columnnameText = $xml->createTextNode( $m_field['columnname']);
$columnname->appendChild( $columnnameText);
$tablename1 = $xml->createElement( "tablename");
$tablename1Text = $xml->createTextNode( $m_field['tablename']);
$tablename1->appendChild( $tablename1Text);
$generatedtype = $xml->createElement( "generatedtype");
$generatedtypeText = $xml->createTextNode( $m_field['generatedtype']);
$generatedtype->appendChild( $generatedtypeText);
$fieldlabel = $xml->createElement( "fieldlabel");
$fieldlabelText = $xml->createTextNode( $m_field['fieldlabel']);
$fieldlabel->appendChild( $fieldlabelText);
$readonly = $xml->createElement( "readonly");
$readonlyText = $xml->createTextNode( $m_field['readonly']);
$readonly->appendChild( $readonlyText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( $m_field['presence']);
$presence->appendChild( $presenceText);
$defaultvalue = $xml->createElement( "defaultvalue");
$defaultvalueText = $xml->createTextNode( $m_field['defaultvalue']);
$defaultvalue->appendChild( $defaultvalueText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( $m_field['sequence']);
$sequence->appendChild( $sequenceText);
$maximumlength = $xml->createElement( "maximumlength");
$maximumlengthText = $xml->createTextNode( $m_field['maximumlength']);
$maximumlength->appendChild( $maximumlengthText);
$typeofdata = $xml->createElement( "typeofdata");
$typeofdataText = $xml->createTextNode( $m_field['typeofdata']);
$typeofdata->appendChild( $typeofdataText);
$quickcreate = $xml->createElement( "quickcreate");
$quickcreateText = $xml->createTextNode( $m_field['quickcreate'] );
$quickcreate->appendChild( $quickcreateText);
$quickcreatesequence = $xml->createElement( "quickcreatesequence");
$quickcreatesequenceText = $xml->createTextNode( $m_field['quickcreatesequence']);
$quickcreatesequence->appendChild( $quickcreatesequenceText);
$displaytype = $xml->createElement( "displaytype");
$displaytypeText = $xml->createTextNode( $m_field['displaytype']);
$displaytype->appendChild( $displaytypeText);
$info_type = $xml->createElement( "info_type");
$info_typeText = $xml->createTextNode( $m_field['info_type']);
$info_type->appendChild( $info_typeText);
$helpinfo = $xml->createElement( "helpinfo");
$helpinfoText = $xml->createCDATASection( '');
$helpinfo->appendChild( $helpinfoText);
$masseditable = $xml->createElement( "masseditable");
$masseditableText = $xml->createTextNode( $m_field['masseditable']);
$masseditable->appendChild( $masseditableText);
if($this -> flag == 0 && $m_field['uitype'] != '10' && $m_field['tksrequired'] == 'true' && $m_field['tksfilterfield'] == 'true')
{
$entity = explode( ':',$request ->get ( 'tks_entity'));
$m_identifier = $mblocks[$entity[0] - 1]['tks_fields'][$entity[1]];
if($m_identifier['fieldname'] == $m_field['fieldname'])
{
$entityidentifier = $xml->createElement( "entityidentifier");
$entityidfield = $xml->createElement( "entityidfield");
$entityidfieldText = $xml->createTextNode( strtolower( $this -> modulename).'id' );
$entityidfield->appendChild( $entityidfieldText);
$entityidcolumn = $xml->createElement( "entityidcolumn");
$entityidcolumnText = $xml->createTextNode( strtolower( $this -> modulename).'id' );
$entityidcolumn->appendChild( $entityidcolumnText);
$entityidentifier->appendChild( $entityidfield);
$entityidentifier->appendChild( $entityidcolumn);
}
}
$field->appendChild( $fieldname);
$field->appendChild( $uitype);
$field->appendChild( $columnname);
$field->appendChild( $tablename1);
$field->appendChild( $generatedtype);
$field->appendChild( $fieldlabel);
$field->appendChild( $readonly);
$field->appendChild( $presence);
$field->appendChild( $defaultvalue);
$field->appendChild( $sequence);
$field->appendChild( $maximumlength);
$field->appendChild( $typeofdata);
$field->appendChild( $quickcreate);
$field->appendChild( $quickcreatesequence);
$field->appendChild( $displaytype);
$field->appendChild( $info_type);
$field->appendChild( $helpinfo);
$field->appendChild( $masseditable);
if($this -> flag == 0 && $m_field['uitype'] != '10' && $m_field['tksrequired'] == 'true' && $m_field['tksfilterfield'] == 'true' )
{
$entity = explode( ':',$request ->get ( 'tks_entity'));
$m_identifier = $mblocks[$entity[0] - 1]['tks_fields'][$entity[1]];
if($m_identifier['fieldname'] == $m_field['fieldname'])
{
$this -> flag = 1;
$field->appendChild( $entityidentifier);
}
}
//picklist fields
$uitype = $m_field['uitype'];
if( $uitype == '15' || $uitype == '33'){
$picklistvalues1 = preg_split('/,/', $m_field['pickArray']);
//$picklistvalues1 = split( ",", $m_field['pickArray']);
$picklistvalues = $xml->createElement( "picklistvalues");
foreach( $picklistvalues1 as $picklistvalue1) {
$picklistvalue = $xml->createElement( "picklistvalue");
$picklistvalueText = $xml->createTextNode( $picklistvalue1);
$picklistvalue->appendChild( $picklistvalueText);
$picklistvalues->appendChild( $picklistvalue);
}
$field->appendChild( $picklistvalues);
}
//relatedmodule fields
if( $uitype == '10'){
$relatedmodules1 = $m_field['relatedmodules'];
$relatedmodules = $xml->createElement( "relatedmodules");
if(is_array($relatedmodules1))
{
foreach( $relatedmodules1 as $relatedmodule1) {
/*START -- Enter the modulename in to temp_rel array*/
$temp_rel[] = $relatedmodule1;
/*END -- Enter the modulename in to temp_rel array*/
if( $relatedmodule1 !=''){
$relatedmodule = $xml->createElement( "relatedmodule");
$relatedmoduleText = $xml->createTextNode( $relatedmodule1);
$relatedmodule->appendChild( $relatedmoduleText);
$relatedmodules->appendChild( $relatedmodule);
}
}
}
else
{
if( $relatedmodules1 !=''){
$relatedmodule = $xml->createElement( "relatedmodule");
$relatedmoduleText = $xml->createTextNode( $relatedmodules1);
$relatedmodule->appendChild( $relatedmoduleText);
$relatedmodules->appendChild( $relatedmodule);
}
}
$field->appendChild( $relatedmodules);
}
$block_fields->appendChild( $field);
//mandatory fields : assigned_user_id, CreatedTime, ModifiedTime
if( $i == 0 && $j == sizeof( $mfield)-1)
{
$s = $m_field['sequence'];
$a = $s+2;
$field_assigned_user_id = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( 'assigned_user_id');
$fieldname->appendChild( $fieldnameText);
$uitype = $xml->createElement( "uitype");
$uitypeText = $xml->createTextNode( '53');
$uitype->appendChild( $uitypeText);
$columnname = $xml->createElement( "columnname");
$columnnameText = $xml->createTextNode( 'smownerid');
$columnname->appendChild( $columnnameText);
$tablename1 = $xml->createElement( "tablename");
$tablename1Text = $xml->createTextNode( 'vtiger_crmentity');
$tablename1->appendChild( $tablename1Text);
$generatedtype = $xml->createElement( "generatedtype");
$generatedtypeText = $xml->createTextNode( '1');
$generatedtype->appendChild( $generatedtypeText);
$fieldlabel = $xml->createElement( "fieldlabel");
$fieldlabelText = $xml->createTextNode( 'Assigned To');
$fieldlabel->appendChild( $fieldlabelText);
$readonly = $xml->createElement( "readonly");
$readonlyText = $xml->createTextNode( '1');
$readonly->appendChild( $readonlyText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( '2');
$presence->appendChild( $presenceText);
$defaultvalue = $xml->createElement( "defaultvalue");
$defaultvalueText = $xml->createTextNode( '');
$defaultvalue->appendChild( $defaultvalueText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( $a++);
$sequence->appendChild( $sequenceText);
$maximumlength = $xml->createElement( "maximumlength");
$maximumlengthText = $xml->createTextNode( '100');
$maximumlength->appendChild( $maximumlengthText);
$typeofdata = $xml->createElement( "typeofdata");
$typeofdataText = $xml->createTextNode( 'V~M');
$typeofdata->appendChild( $typeofdataText);
$quickcreate = $xml->createElement( "quickcreate");
$quickcreateText = $xml->createTextNode( '1');
$quickcreate->appendChild( $quickcreateText);
$quickcreatesequence = $xml->createElement( "quickcreatesequence");
$quickcreatesequenceText = $xml->createTextNode( '');
$quickcreatesequence->appendChild( $quickcreatesequenceText);
$displaytype = $xml->createElement( "displaytype");
$displaytypeText = $xml->createTextNode( '1');
$displaytype->appendChild( $displaytypeText);
$info_type = $xml->createElement( "info_type");
$info_typeText = $xml->createTextNode( 'BAS');
$info_type->appendChild( $info_typeText);
$masseditable = $xml->createElement( "masseditable");
$masseditableText = $xml->createTextNode( '1');
$masseditable->appendChild( $masseditableText);
$field_assigned_user_id->appendChild( $fieldname);
$field_assigned_user_id->appendChild( $uitype);
$field_assigned_user_id->appendChild( $columnname);
$field_assigned_user_id->appendChild( $tablename1);
$field_assigned_user_id->appendChild( $generatedtype);
$field_assigned_user_id->appendChild( $fieldlabel);
$field_assigned_user_id->appendChild( $readonly);
$field_assigned_user_id->appendChild( $presence);
$field_assigned_user_id->appendChild( $defaultvalue);
$field_assigned_user_id->appendChild( $sequence);
$field_assigned_user_id->appendChild( $maximumlength);
$field_assigned_user_id->appendChild( $typeofdata);
$field_assigned_user_id->appendChild( $quickcreate);
$field_assigned_user_id->appendChild( $quickcreatesequence);
$field_assigned_user_id->appendChild( $displaytype);
$field_assigned_user_id->appendChild( $info_type);
$field_assigned_user_id->appendChild( $masseditable);
$field_CreatedTime = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( 'createdtime');
$fieldname->appendChild( $fieldnameText);
$uitype = $xml->createElement( "uitype");
$uitypeText = $xml->createTextNode( '70');
$uitype->appendChild( $uitypeText);
$columnname = $xml->createElement( "columnname");
$columnnameText = $xml->createTextNode( 'createdtime');
$columnname->appendChild( $columnnameText);
$tablename1 = $xml->createElement( "tablename");
$tablename1Text = $xml->createTextNode( 'vtiger_crmentity');
$tablename1->appendChild( $tablename1Text);
$generatedtype = $xml->createElement( "generatedtype");
$generatedtypeText = $xml->createTextNode( '1');
$generatedtype->appendChild( $generatedtypeText);
$fieldlabel = $xml->createElement( "fieldlabel");
$fieldlabelText = $xml->createTextNode( 'Created Time');
$fieldlabel->appendChild( $fieldlabelText);
$readonly = $xml->createElement( "readonly");
$readonlyText = $xml->createTextNode( '1');
$readonly->appendChild( $readonlyText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( '2');
$presence->appendChild( $presenceText);
$defaultvalue = $xml->createElement( "defaultvalue");
$defaultvalueText = $xml->createTextNode( '');
$defaultvalue->appendChild( $defaultvalueText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( $a++);
$sequence->appendChild( $sequenceText);
$maximumlength = $xml->createElement( "maximumlength");
$maximumlengthText = $xml->createTextNode( '100');
$maximumlength->appendChild( $maximumlengthText);
$typeofdata = $xml->createElement( "typeofdata");
$typeofdataText = $xml->createTextNode( 'T~O');
$typeofdata->appendChild( $typeofdataText);
$quickcreate = $xml->createElement( "quickcreate");
$quickcreateText = $xml->createTextNode( '1');
$quickcreate->appendChild( $quickcreateText);
$quickcreatesequence = $xml->createElement( "quickcreatesequence");
$quickcreatesequenceText = $xml->createTextNode( '');
$quickcreatesequence->appendChild( $quickcreatesequenceText);
$displaytype = $xml->createElement( "displaytype");
$displaytypeText = $xml->createTextNode( '2');
$displaytype->appendChild( $displaytypeText);
$info_type = $xml->createElement( "info_type");
$info_typeText = $xml->createTextNode( 'BAS');
$info_type->appendChild( $info_typeText);
$masseditable = $xml->createElement( "masseditable");
$masseditableText = $xml->createTextNode( '1');
$masseditable->appendChild( $masseditableText);
$field_CreatedTime->appendChild( $fieldname);
$field_CreatedTime->appendChild( $uitype);
$field_CreatedTime->appendChild( $columnname);
$field_CreatedTime->appendChild( $tablename1);
$field_CreatedTime->appendChild( $generatedtype);
$field_CreatedTime->appendChild( $fieldlabel);
$field_CreatedTime->appendChild( $readonly);
$field_CreatedTime->appendChild( $presence);
$field_CreatedTime->appendChild( $defaultvalue);
$field_CreatedTime->appendChild( $sequence);
$field_CreatedTime->appendChild( $maximumlength);
$field_CreatedTime->appendChild( $typeofdata);
$field_CreatedTime->appendChild( $quickcreate);
$field_CreatedTime->appendChild( $quickcreatesequence);
$field_CreatedTime->appendChild( $displaytype);
$field_CreatedTime->appendChild( $info_type);
$field_CreatedTime->appendChild( $masseditable);
$field_ModifiedTime = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( 'modifiedtime');
$fieldname->appendChild( $fieldnameText);
$uitype = $xml->createElement( "uitype");
$uitypeText = $xml->createTextNode( '70');
$uitype->appendChild( $uitypeText);
$columnname = $xml->createElement( "columnname");
$columnnameText = $xml->createTextNode( 'modifiedtime');
$columnname->appendChild( $columnnameText);
$tablename1 = $xml->createElement( "tablename");
$tablename1Text = $xml->createTextNode( 'vtiger_crmentity');
$tablename1->appendChild( $tablename1Text);
$generatedtype = $xml->createElement( "generatedtype");
$generatedtypeText = $xml->createTextNode( '1');
$generatedtype->appendChild( $generatedtypeText);
$fieldlabel = $xml->createElement( "fieldlabel");
$fieldlabelText = $xml->createTextNode( 'Modified Time');
$fieldlabel->appendChild( $fieldlabelText);
$readonly = $xml->createElement( "readonly");
$readonlyText = $xml->createTextNode( '1');
$readonly->appendChild( $readonlyText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( '2');
$presence->appendChild( $presenceText);
$defaultvalue = $xml->createElement( "defaultvalue");
$defaultvalueText = $xml->createTextNode( '');
$defaultvalue->appendChild( $defaultvalueText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( $a++);
$sequence->appendChild( $sequenceText);
$maximumlength = $xml->createElement( "maximumlength");
$maximumlengthText = $xml->createTextNode( '100');
$maximumlength->appendChild( $maximumlengthText);
$typeofdata = $xml->createElement( "typeofdata");
$typeofdataText = $xml->createTextNode( 'T~O');
$typeofdata->appendChild( $typeofdataText);
$quickcreate = $xml->createElement( "quickcreate");
$quickcreateText = $xml->createTextNode( '1');
$quickcreate->appendChild( $quickcreateText);
$quickcreatesequence = $xml->createElement( "quickcreatesequence");
$quickcreatesequenceText = $xml->createTextNode( '');
$quickcreatesequence->appendChild( $quickcreatesequenceText);
$displaytype = $xml->createElement( "displaytype");
$displaytypeText = $xml->createTextNode( '2');
$displaytype->appendChild( $displaytypeText);
$info_type = $xml->createElement( "info_type");
$info_typeText = $xml->createTextNode( 'BAS');
$info_type->appendChild( $info_typeText);
$masseditable = $xml->createElement( "masseditable");
$masseditableText = $xml->createTextNode( '1');
$masseditable->appendChild( $masseditableText);
$field_ModifiedTime->appendChild( $fieldname);
$field_ModifiedTime->appendChild( $uitype);
$field_ModifiedTime->appendChild( $columnname);
$field_ModifiedTime->appendChild( $tablename1);
$field_ModifiedTime->appendChild( $generatedtype);
$field_ModifiedTime->appendChild( $fieldlabel);
$field_ModifiedTime->appendChild( $readonly);
$field_ModifiedTime->appendChild( $presence);
$field_ModifiedTime->appendChild( $defaultvalue);
$field_ModifiedTime->appendChild( $sequence);
$field_ModifiedTime->appendChild( $maximumlength);
$field_ModifiedTime->appendChild( $typeofdata);
$field_ModifiedTime->appendChild( $quickcreate);
$field_ModifiedTime->appendChild( $quickcreatesequence);
$field_ModifiedTime->appendChild( $displaytype);
$field_ModifiedTime->appendChild( $info_type);
$field_ModifiedTime->appendChild( $masseditable);
$block_fields->appendChild( $field_assigned_user_id);
$block_fields->appendChild( $field_CreatedTime);
$block_fields->appendChild( $field_ModifiedTime);
}
}
$block->appendChild( $block_label);
$block->appendChild( $block_fields);
$blocks->appendChild( $block);
}
$customviews = $xml->createElement( "customviews");
$customview = $xml->createElement( "customview");
$viewname = $xml->createElement( "viewname");
$viewnameText = $xml->createTextNode( 'All');
$viewname->appendChild( $viewnameText);
$setdefault = $xml->createElement( "setdefault");
$setdefaultText = $xml->createTextNode( 'false');
$setdefault->appendChild( $setdefaultText);
$setmetrics = $xml->createElement( "setmetrics");
$setmetricsText = $xml->createTextNode( 'false');
$setmetrics->appendChild( $setmetricsText);
$fields = $xml->createElement( "fields");
$field = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( strtolower( $this -> modulename).'no');
$fieldname->appendChild( $fieldnameText);
$columnindex = $xml->createElement( "columnindex");
$columnindexText = $xml->createTextNode( '1');
$columnindex->appendChild( $columnindexText);
$field->appendChild( $fieldname);
$field->appendChild( $columnindex);
$fields->appendChild( $field);
$k = 2;
for( $i=0; $i < sizeof( $mblocks) ; $i++)
{
if($mblocks[$i]['deleted'] == 'true')
continue;
$mfield = $mblocks[$i]['tks_fields'];
for( $j=0; $j<sizeof( $mfield) && $j < 10 ;$j++)
{
if($mfield[$j]['deleted'] == 'true')
continue;
if( $mfield[$j]['tksfilterfield']=='true'){
$field1 = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( $this -> getFieldName( $mfield[$j]['tkslabel']));
$fieldname->appendChild( $fieldnameText);
$columnindex = $xml->createElement( "columnindex");
$columnindexText = $xml->createTextNode( $k++);
$columnindex->appendChild( $columnindexText);
$field1->appendChild( $fieldname);
$field1->appendChild( $columnindex);
$fields->appendChild( $field1);
}
}
}
$field2 = $xml->createElement( "field");
$fieldname = $xml->createElement( "fieldname");
$fieldnameText = $xml->createTextNode( 'assigned_user_id');
$fieldname->appendChild( $fieldnameText);
$columnindex = $xml->createElement( "columnindex");
$columnindexText = $xml->createTextNode( $k++);
$columnindex->appendChild( $columnindexText);
$field2->appendChild( $fieldname);
$field2->appendChild( $columnindex);
$fields->appendChild( $field2);
$customview->appendChild( $viewname);
$customview->appendChild( $setdefault);
$customview->appendChild( $setmetrics);
$customview->appendChild( $fields);
$customviews->appendChild( $customview);
$sharingaccess = $xml->createElement( "sharingaccess");
$default = $xml->createElement( "default");
$defaultText = $xml->createTextNode( 'private');
$default->appendChild( $defaultText);
$sharingaccess->appendChild( $default);
$actions = $xml->createElement( "actions");
$action1 = $xml->createElement( "action");
$import = $xml->createElement( "name");
$importText = $xml->createCDATASection( 'Import');
$import->appendChild( $importText);
$status = $xml->createElement( "status");
$statusText = $xml->createTextNode( 'enabled');
$status->appendChild( $statusText);
$action1->appendChild( $import);
$action1->appendChild( $status);
$action2 = $xml->createElement( "action");
$export = $xml->createElement( "name");
$exportText = $xml->createCDATASection( 'Export');
$export->appendChild( $exportText);
$status = $xml->createElement( "status");
$statusText = $xml->createTextNode( 'enabled');
$status->appendChild( $statusText);
$action2->appendChild( $export);
$action2->appendChild( $status);
$action3 = $xml->createElement( "action");
$merge = $xml->createElement( "name");
$mergeText = $xml->createCDATASection( 'Merge');
$merge->appendChild( $mergeText);
$status = $xml->createElement( "status");
$statusText = $xml->createTextNode( 'enabled');
$status->appendChild( $statusText);
$action3->appendChild( $merge);
$action3->appendChild( $status);
$actions->appendChild( $action1);
$actions->appendChild( $action2);
$actions->appendChild( $action3);
// Relatedlists
$mod_list=$this -> moduleData['tks_relatedlist'];
$relatedlists = $xml->createElement( "relatedlists");
for( $m = 0; $m < sizeof( $mod_list); $m++ )
{
$relmethod ='get_related_list';
if($mod_list[$m]['module'] == 'Documents')
{
$relmethod ='get_attachments';
}
$relatedlist = $xml->createElement( "relatedlist");
$function = $xml->createElement( "function");
$functionText = $xml->createTextNode( $relmethod );
$function->appendChild( $functionText);
$label = $xml->createElement( "label");
$labelText = $xml->createTextNode( $mod_list[$m]['module']);
$label->appendChild( $labelText);
$sequence = $xml->createElement( "sequence");
$sequenceText = $xml->createTextNode( $m+1 );
$sequence->appendChild( $sequenceText);
$presence = $xml->createElement( "presence");
$presenceText = $xml->createTextNode( '0');
$presence->appendChild( $presenceText);
$relatedlist->appendChild( $function);
$relatedlist->appendChild( $label);
$relatedlist->appendChild( $sequence);
$relatedlist->appendChild( $presence);
if( $mod_list[$m]['add'] == 1 && $mod_list[$m]['sel'] == 1)
{
$actions_r = $xml->createElement( "actions");
$action = $xml->createElement( "action");
$actionText = $xml->createTextNode( 'ADD');
$action->appendChild( $actionText);
$action1 = $xml->createElement( "action");
$action1Text = $xml->createTextNode( 'SELECT');
$action1->appendChild( $action1Text);
$actions_r->appendChild( $action);
$actions_r->appendChild( $action1);
}
elseif( $mod_list[$m]['add'] == 1){
$actions_r = $xml->createElement( "actions");
$action = $xml->createElement( "action");
$actionText = $xml->createTextNode( 'ADD');
$action->appendChild( $actionText);
$action1 = $xml->createElement( "action");
$action1Text = $xml->createTextNode( 'NULL');
$action1->appendChild( $action1Text);
$actions_r->appendChild( $action);
$actions_r->appendChild( $action1);
}
elseif( $mod_list[$m]['sel'] == 1){
$actions_r = $xml->createElement( "actions");
$action = $xml->createElement( "action");
$actionText = $xml->createTextNode( 'SELECT');
$action->appendChild( $actionText);
$action1 = $xml->createElement( "action");
$action1Text = $xml->createTextNode( 'NULL');
$action1->appendChild( $action1Text);
$actions_r->appendChild( $action);
$actions_r->appendChild( $action1);
}
else{
$actions_r = $xml->createElement( "actions");
$action1 = $xml->createElement( "action");
$action1Text = $xml->createTextNode( 'NULL');
$action1->appendChild( $action1Text);
$actions_r->appendChild( $action1);
}
$relatedlist->appendChild( $actions_r);
$relatedmodule = $xml->createElement( "relatedmodule");
$relatedmoduleText = $xml->createTextNode( $mod_list[$m]['module']);
$relatedmodule->appendChild( $relatedmoduleText);
$relatedlist->appendChild( $relatedmodule);
$relatedlists->appendChild( $relatedlist);
}
//crons
$crons = $xml->createElement( "crons");
$cronsText = $xml->createTextNode( '');
$crons->appendChild( $cronsText);
$module->appendChild( $blocks);
$module->appendChild( $customviews);
$module->appendChild( $sharingaccess);
$module->appendChild( $actions);
if( sizeof( $mod_list) > 0 )
$module->appendChild( $relatedlists);
$module->appendChild( $crons);
$xml->formatOutput = true;
$xml->save( $ManifestFilePath);
//Creating Zip file of module
if( $zipfilename == '') $zipfilename = "$modulename.zip";
$zipfilename = $this -> export_tmpdir."/$zipfilename";
$zip = new Vtiger_ZipMB( $zipfilename);
$zip->addFile( $ManifestFilePath, "manifest.xml");
$zip->copyDirectoryFromDisk( 'test/vtlib/modules/'.$modulename.'/ModuleFile', 'modules/'.$modulename);
$zip->copyDirectoryFromDisk( 'test/vtlib/modules/'.$modulename.'/languages', 'languages');
$zip->save();
//To rename zlanguage folder to language
$tks_zip = new ZipArchive;
$res = $tks_zip->open( "$zipfilename", ZipArchive::CREATE );
if ( $res === TRUE)
{
//To replace modulename and tablenames
$fileContents = $tks_zip->getFromName( 'modules/'.$modulename.'/'.$modulename.'.php');
$replaced = str_replace( 'ModuleClass', $modulename, $fileContents);
$final_content = str_replace( '##tablename##', strtolower( $modulename), $replaced);
//Entity Identifier Field
$mblocks = $this -> moduleData['tks_blocks'];
/*TECHNOKRAFTS :- Resolve Issue for pop-up field*/
$entityIdentifierLabel = $modulename.' No';
$entityIdentifierField = strtolower($modulename).'no';
$final_content = str_replace( '##ENTITYIDENTIFIERLABEL##', $entityIdentifierLabel, $final_content);
$final_content = str_replace( '##ENTITYIDENTIFIERFIELD##', $entityIdentifierField, $final_content);
/*TECHNOKRAFTS :- Resolve Issue for pop-up field*/
if( $request ->get ( 'tks_entity') != '')
{
$entity = explode( ':',$request ->get ( 'tks_entity'));
$m_identifier = $mblocks[$entity[0] - 1]['tks_fields'][$entity[1]];
$final_content = str_replace( '##label##', $m_identifier['fieldlabel'], $final_content);
$final_content = str_replace( '##labelfield##', $m_identifier['fieldname'], $final_content);
}
else
{
$final_content = str_replace( '##label##', $entityIdentifierLabel, $final_content);
$final_content = str_replace( '##labelfield##', $entityIdentifierField, $final_content);
$final_content = str_replace( '/*FIELDSTART*/', '/*', $final_content);
$final_content = str_replace( '/*FIELDEND*/', '*/', $final_content);
}
$lang_fileContents = $tks_zip->getFromName( 'languages/en_us/'.$modulename.'.php');
$lang_replaced = str_replace( '##ModuleName##', $modulename, $lang_fileContents);
$lang_replaced = str_replace( '##moduleLable##', $this -> moduleData['tks_modname'], $lang_replaced);
/*START -- Logic to add the module names in the language file*/
$rel_arr = '';
if( isset ( $temp_rel) && is_array( $temp_rel ) )
$rel_arr = $this -> getlangStr( $temp_rel );
$lang_replaced = str_replace( '\'#####\'', $rel_arr , $lang_replaced);
/*END -- Logic to add the module names in the language file*/
//To replace language variables
$tks_zip->deleteName( 'languages/en_us/'.$modulename.'.php');
$tks_zip->addFromString( 'languages/en_us/'.$modulename.'.php', $lang_replaced);
$tks_zip->deleteName( 'modules/'.$modulename.'/'.$modulename.'.php');
$tks_zip->addFromString( 'modules/'.$modulename.'/'.$modulename.'.php', $final_content);
$tks_zip->close();
}
//unlink manifest file
unlink( $ManifestFilePath);
$log->debug("Exiting export(request array()) method....");
}
}