A lot of new features land this month along with a few important speed optimizations and bug fixes too!! Our journey continues.

Settings Page

This month we give the Settings page a revamp. The goal is to give any user the option to manage one or more of the settings applications. We accomplish that by centralizing, in one screen, all the configuration options we have. Then we permit each user to select which applications he wants to see and in which order from an easy set of search features.

Have a look at this blog post for full details.


Sees support for previewing Emails, with support for Plain Text Format (RFC 5322), HTML Format (RFC 2045-9), and the (always) special Microsoft Outlook format.

For this to work we need an additional PHP extension: php-mailparse and an external tool to process the Outlook format: libemail-outlook-message-perl. These tools must be installed in your operating system. Probably something like:

apt install -y php-mailparse libemail-outlook-message-perl

  • add .msg and .eml files for preview and save
  • drag&drop multiple files at the same time
  • support basic map-based search
  • various fixes in the functionality


We update the multiple merge option screen to LDS and add different options for joining and saving the final result of the merge.

GenDoc Multiple Merge

Master Grid

Keeps on going strong!

  • add actions
  • add virtual grid property
  • support virtual records
  • force to use map name


This month sees the addition of a set of new widgets: timeline, denorm layout, drag and drop, related list, and create popup. Very important new functionality. They still need some polishing and testing but they are in the application now and will be getting documentation and fixes to get them to prime time as soon as possible.

New Login layout: splitLogo

split logo login

Features and Implementor/Developer enhancements

  • Support copying Dashboard settings between users from the browser using the HelperScript
  • New deleteDuplicateTableRecords function in database utils
  • Important optimization in Detail View. We were calling the field dependency map for each field. Now we call it only twice and return an error message if there are parsing errors in the conditions
  • Module builder was saving the new module in the cache directory which is protected from download access, so we changed the path to the package directory which was created specifically for this need, and permitted .zip files to be downloaded from that directory
  • Make the column_condition work in popups advft_criteria URL attribute
  • Filter condition expression had a strict rule whereas the last condition could not have a connector (and/or) or it would produce invalid SQL. We are using these expressions in business maps and could run into this edge case, so we modified the functionality to be more permissive and, hopefully, implement a more logical syntax without breaking existing expressions.
  • Add properties to hide/show actions in the microtask side panel
  • Add symbols to the Users generate password function
  • improve the UI of setManyToManyRelation workflow task

many-to-many workflow task

EvolutivoFW Standard Code Formatting, Security, Optimizations, and Tests

  • EvolutivoFW Standard Formatting
  • Our CI now sends a message to the author of a pull request if the tests fail
  • Documentation: code and wiki.
    • function headers and help messages
    • wiki documentation keeps going
    • SearchUtils: add a comment about the empty group condition
    • Workflow: add inline help for many-to-many relation
  • Refactor and Optimize code
    • sonarqube recommendations
    • substitute variables for their value
    • Custom View: skip empty blocks and use direct value
    • Field Dependency: process map only once per field
    • Master Grid: load reference field values once
    • Request: return boolean calculation directly
    • Utils: is_admin eliminate log message
    • VTCache: save the flipped array of values to avoid operation each time we need the values saved in the cache
    • Workflow: checkModuleWorkflow
    • move generateManyToManyQuery function to the database utils file
    • eliminate mandatory and optional packages directories, leave a flat structure for the module manager
    • remove PEAR and third-party dependencies
  • Security fixes and updates
    • update DOMPurify to 3.0.11
    • update LDS to 2.23.1
    • Smarty: eliminate PHP functions in templates
  • PHP constant updates
  • Unit Tests: keeps getting more and more assertions.

Global Variables

  • Application_Display_Seconds_On_DateTime_Fields: Show or hide seconds on date and time fields. By default, the application does not show seconds in DateTime fields because, for the majority of operations we do in the application, they are irrelevant. If you need them to be shown and searchable you can activate this global variable.


  • fix createBy query in reports, we were returning the incorrect user
  • Custom View
    • user fields in filters were lost at some point in our development efforts, but we got them back. In the list of fields that are available in the filter, we have always a small set of assigned user fields, these had been lost and are now available again to be used in the filters
    • correct queries by flattening the parameter array
  • cannot edit in detail view after the user opens the email view
  • Field Dependency
    • check if the field exists before changing its styling
    • search for field value as TD when it is read-only in the profile
  • Install: set the default charset to UTF-8
  • round the total and tax to 6 decimals (our maximum supported) in Inventory Details to avoid MySQL giving us scientific notation which fails in the creation of the record
  • Mail Manager
    • close window correctly
    • use UTF-8 to parse the email if its charset is not defined
  • special picklist types were not being translated/shown correctly in the List View
  • User Preferences: fix array support, and get query
  • reset Users export where condition on users index and search
  • force PHP type casting when reading properties from XML
  • hide compose header for inline email: optimize screen space
  • update FAQ: sync with the latest ModuleDir
  • Web Service
    • avoid error when the current user has no profile (not sure how that happens)
    • skip filter field rows with no field (however that happens)
    • hmmm... suspicious, same comment twice in the same month > coincidence or symptom of something?
  • Workflow
    • add array helper expression methods
    • do not try to relate many to many records when one of the parameters is missing
    • return an empty string for empty expression values instead of an error
    • getting a field value from a related record had a different format than getting it directly
    • set user/group field condition value to ID instead of the entity name: this is important and may cause backward compatibility issues. Until now when setting conditions in workflows using user ID fields like assigned_user_id, we would have to compare with the string that represented the user, normally the user_name field. Now we don't have to do this anymore, we can just use the field and the value chosen in the picklist. We will have to keep an eye on this one for a while.

workflow user comparison

  • Translations


March Insights

March April
Sonarqube March Sonarqube April

Thanks for reading.

Previous Post Next Post