I am creating a custom module in vtiger, this is the Vehicles.php
file in the Modules/Vehicles
:
<?php
include_once 'modules/Vtiger/CRMEntity.php';
class Vehicles extends Vtiger_CRMEntity {
var $table_name = 'vtiger_vehicles';
var $table_index= 'vehiclesid';
var $customFieldTable = Array('vtiger_vehiclescf', 'vehiclesid');
var $tab_name = Array('vtiger_crmentity', 'vtiger_vehicles', 'vtiger_vehiclescf');
var $tab_name_index = Array(
'vtiger_crmentity' => 'crmid',
'vtiger_vehicles' => 'vehiclesid',
'vtiger_vehiclescf'=>'vehiclesid');
var $list_fields = Array (
/* Format: Field Label => Array(tablename, columnname) */
// tablename should not have prefix 'vtiger_'
'Reg No' => Array('vehicles', 'reg_no'),
'Assigned To' => Array('crmentity','smownerid')
);
var $list_fields_name = Array (
/* Format: Field Label => fieldname */
'Reg No' => 'reg_no',
'Assigned To' => 'assigned_user_id',
);
// Make the field link to detail view
var $list_link_field = 'reg_no';
// For Popup listview and UI type support
var $search_fields = Array(
/* Format: Field Label => Array(tablename, columnname) */
// tablename should not have prefix 'vtiger_'
'Reg No' => Array('vehicles', 'reg_no'),
'Assigned To' => Array('vtiger_crmentity','assigned_user_id'),
);
var $search_fields_name = Array (
/* Format: Field Label => fieldname */
'Reg No' => 'reg_no',
'Assigned To' => 'assigned_user_id',
);
// For Popup window record selection
var $popup_fields = Array ('reg_no');
// For Alphabetical search
var $def_basicsearch_col = 'reg_no';
// Column value to use on detail view record text display
var $def_detailview_recname = 'reg_no';
// Used when enabling/disabling the mandatory fields for the module.
// Refers to vtiger_field.fieldname values.
var $mandatory_fields = Array('reg_no','assigned_user_id');
var $default_order_by = 'reg_no';
var $default_sort_order='ASC';
/**
* Invoked when special actions are performed on the module.
* @param String Module name
* @param String Event Type
*/
function vtlib_handler($moduleName, $eventType) {
global $adb;
if($eventType == 'module.postinstall') {
// TODO Handle actions after this module is installed.
} else if($eventType == 'module.disabled') {
// TODO Handle actions before this module is being uninstalled.
} else if($eventType == 'module.preuninstall') {
// TODO Handle actions when this module is about to be deleted.
} else if($eventType == 'module.preupdate') {
// TODO Handle actions before this module is updated.
} else if($eventType == 'module.postupdate') {
// TODO Handle actions after this module is updated.
}
}
}
The file for creating the module is:
<?php
include_once('vtlib/Vtiger/Module.php');
/**
*Init instance
*/
$Vtiger_Utils_Log = true;
$MODULENAME = 'Vehicles';
$moduleInstance = Vtiger_Module::getInstance($MODULENAME);
if ($moduleInstance || file_exists('modules/'.$MODULENAME)) {
$moduleInstance->delete();
} else {
$moduleInstance = new Vtiger_Module();
$moduleInstance->name = $MODULENAME;
$moduleInstance->parent= 'Inventory';
$moduleInstance->save();
// Schema Setup
$moduleInstance->initTables();
//Bring on the blocks
$block = new Vtiger_Block();
$block->label = 'LBL_'. strtoupper($moduleInstance->name) . '_INFORMATION';
$table = "vtiger_".strtolower($moduleInstance->name);
$moduleInstance->addBlock($block);
$blockcf = new Vtiger_Block();
$blockcf->label = 'LBL_CUSTOM_INFORMATION';
$moduleInstance->addBlock($blockcf);
$field1 = new Vtiger_Field();
$field1->name = 'reg_no';
$field1->label= 'Registration Number';
$field1->uitype= 2;
$field1->table = $table;
$field1->column = $field1->name;
$field1->columntype = 'VARCHAR(255)';
$field1->typeofdata = 'V~M';
$block->addField($field1);
$moduleInstance->setEntityIdentifier($field1);
$field2 = new Vtiger_Field();
$field2->name = 'chas_no';
$field2->label= 'Chassis Number';
$field2->uitype= 2;
$field2->column = $field1->name;
$field2->columntype = 'VARCHAR(255)';
$field2->typeofdata = 'V~O';
$field2->table = $table;
$block->addField($field2);
$field3 = new Vtiger_Field();
$field3->name= 'cust_name';
$field3->label = 'Customer';
$field3->uitype = 10;
$field3->column = $field3->name;
$field3->columntype ='VARCHAR(255)';
$field3->typeofdata ='V~M';
$field3->table = $table;
$block->addField($field3);
$field3->setRelatedModules(Array('Contacts'));
// Recommended common fields every Entity module should have (linked to core table)
$mfield1 = new Vtiger_Field();
$mfield1->name = 'assigned_user_id';
$mfield1->label = 'Assigned To';
$mfield1->table = 'vtiger_crmentity';
$mfield1->column = 'smownerid';
$mfield1->uitype = 53;
$mfield1->typeofdata = 'V~M';
$block->addField($mfield1);
$mfield2 = new Vtiger_Field();
$mfield2->name = 'CreatedTime';
$mfield2->label= 'Created Time';
$mfield2->table = 'vtiger_crmentity';
$mfield2->column = 'createdtime';
$mfield2->uitype = 70;
$mfield2->typeofdata = 'T~O';
$mfield2->displaytype= 2;
$block->addField($mfield2);
$mfield3 = new Vtiger_Field();
$mfield3->name = 'ModifiedTime';
$mfield3->label= 'Modified Time';
$mfield3->table = 'vtiger_crmentity';
$mfield3->column = 'modifiedtime';
$mfield3->uitype = 70;
$mfield3->typeofdata = 'T~O';
$mfield3->displaytype= 2;
$block->addField($mfield3);
// Filter Setup
$filter1 = new Vtiger_Filter();
$filter1->name = 'All';
$filter1->isdefault = true;
$moduleInstance->addFilter($filter1);
$filter1->addField($field1)->addField($field2, 1)->addField($field3, 2)->addField($mfield1, 3);
// Sharing Access Setup
$moduleInstance->setDefaultSharing();
// Webservice Setup
$moduleInstance->initWebservice();
}
Everything runs well:
Creating Module Vehicles ... STARTED
Initializing module permissions ... DONE
Updating tabdata file ... DONE
Setting up sharing access options ... DONE
Added to menu Inventory ... DONE
Updating parent_tabdata file ... STARTED
Updating parent_tabdata file ... DONE
Creating Module Vehicles ... DONE
Creating Block LBL_VEHICLES_INFORMATION ... DONE
Module language entry for LBL_VEHICLES_INFORMATION ... CHECK
Creating Block LBL_CUSTOM_INFORMATION ... DONE
Module language entry for LBL_CUSTOM_INFORMATION ... CHECK
Creating Field reg_no ... DONE
Module language mapping for Registration Number ... CHECK
Setting entity identifier ... DONE
Creating Field chas_no ... DONE
Module language mapping for Chassis Number ... CHECK
Creating Field cust_name ... DONE
Module language mapping for Customer ... CHECK
Setting cust_name relation with Contacts ... DONE
Creating Field assigned_user_id ... DONE
Module language mapping for Assigned To ... CHECK
Creating Field CreatedTime ... DONE
Module language mapping for Created Time ... CHECK
Creating Field ModifiedTime ... DONE
Module language mapping for Modified Time ... CHECK
Creating Filter All ... DONE
Setting Filter All to status [0] ... DONE
Adding reg_no to All filter ... DONE
Adding chas_no to All filter ... DONE
Adding cust_name to All filter ... DONE
Adding assigned_user_id to All filter ... DONE
Recalculating sharing rules ... DONE
Initializing webservices support ...DONE
The module runs well but cannot add a record but shows this after saving:
What am I missing and how do I fix the error?
The mistake is in the line $field2->column = $field1->name;
,
It should be $field2->column = $field2->name;