Contel,
You are right that every update to EPESI Core modules will overwrite your changes and they would have to be applied again - if you make your changes within the existing code. The same is true for any Premium Modules.
If the changes to the core are absolutely necessary and can not be done in a different way - then you should submit it to us via Github: https://github.com/Telaxus/epesi
and we will incorporate them in the future version.
But in great majority of scenarios - and we do it all the time - you can make modifications to EPESI via custom modules without making changes to the core. By custom modules I mean modules placed in /module/Custom or /modules/Premium directory. More on developing modules: http://www.epesi.org/Create_module_files or http://www.epesi.org/HelloWorld
Please note, that an upgrade process consist of 2 parts:
- replace PHP scripts with newer ones
- execute patches if needed, which may update the database
However data that is stored in the database is completely separate from the code and generally does not change. Therefore if you store some data in the database and keep your custom modifications in a separate script - custom module - subsequent updates will not affect your modifications.
The first and the second one:
Look at the example of CRM Contacts module - submodule: Account Manager - to see how this is done:
Install new field:
public function install() {
Utils_RecordBrowserCommon::new_record_field('company', array('name' => _M('Account Manager'), 'type'=>'crm_contact', 'param'=>array('field_type'=>'select', 'crits'=>array('CRM_Contacts_AccountManagerCommon', 'crits_accountmanager'), 'format'=>array('CRM_ContactsCommon','contact_format_no_company')), 'required'=>false, 'extra'=>false, 'filter'=>true, 'visible'=>true));
and uninstall procedure:
public function uninstall() {
Utils_RecordBrowserCommon::delete_record_field('company', 'Account Manager');
Your module may consist only of adding new fields to an existing recordset and have no additional functionality.
You can also create a module that does not change or add or remove any fields, but just modifies callbacks (which are stored in the database) and it is processed with your own supplied callback.
More on RB: http://www.epesi.org/Utils/RecordBrowser
The last one:
You can use any text editor on any platform - Programmer's Notepad for example: http://www.pnotepad.org/
But if you want code folding, autocomplete etc. you may want to use something better. We tried and used in the past: Eclipse, NetBeans, Komodo...
Right now our entire team uses PHPStorm: http://www.jetbrains.com/phpstorm/ - this is by far the most complete IDE.