Interesting 29 days! Cleaning, optimizing, updating, securing, and adding new features. We got in a lot of stuff!!

List View and Related List View standardization of functionality for all modules.

At some point in our history, there was a distinction made between stock and custom modules. Stock modules were those that came with the application when installed and custom modules were those that were created and added after the installation by the user/implementor to adapt to the needs of that business. As time passed we eliminated the differences between these types of modules to the point where, this month, we eliminated the distinction completely.

The functionality that was still existing related to custom modules and that we standardized was on the related list views. When clicking on the "delete" action of a record in a related list, a stock module would eliminate the relation, be it a many-to-many relation or a one-to-many relation. In the case of a one-to-many relation, the delete action sets the related field in the module to null. If the record belonged to a custom module, the delete action would eliminate ONLY the many-to-many relations, not the one-to-many. Don't ask me what the logic of that was...

Now all modules behave the same by eliminating both many-to-many and one-to-many relations. No more custom modules.

Colorizer

The Colorizer extension is now a native part of the application and gets a much-needed revamp. Not only on the visuals which are now more aligned with the look and feel of the application but also with the functionality. We mix in some nice optimizations too!

  • support the OR and AND operators to conditions
  • support for global Search
  • colorize by event instead of using polling: much faster!
  • moved the dynamically created functions to scripts, refactor and optimize code
  • translated hardcoded string
  • passing to the colorizer engine the full value to properly decide
  • fix setting input for text and color and picklist filter with contains condition
  • use correct Global Variable names for activation

Colorizer UI

User Preferences key-value store

This month sees the addition of an internal code engine to save user preferences. It is a specialized and dedicated key-value store only for user preferences.

It supports:

  • adding values cbUserPreferences::set($userid, $module, $preferenceName, $preferenceValue)
  • reading values cbUserPreferences::get($userid, $module, $preferenceName, $default, $cache)
  • reading values with type: get_string, get_int, get_float, get_bool, get_array, get_list
  • deleting values cbUserPreferences::del($userid, $module, $preferenceName)
  • checking for values: cbUserPreferences::exists($userid, $module, $preferenceName)

Features and Implementor/Developer enhancements

  • add support for InformationMap to Business Map testMap functionality
  • add support for returning any value structure in InformationMap Business Map
  • support FPM call in cron script
  • export
    • support condition foreign columns
    • support filter groups
  • Support extending virtual related modules using GenDocRelations map
    • Support Product From/To for Product Components in GenDoc
  • isManyToManyRelation function
  • download the latest results from the import widget
  • return formatted response if the format parameter is set to "user" in Web Services. Web service, as the application itself returns raw database values but expects user-formatted values. With this format mode, we can get user-formatted values instead.
  • audio conversion (distortion) workflow task
  • support CODE 128 B in the generate image code Workflow task

EvolutivoFW Standard Code Formatting, Security, Optimizations, and Tests

  • EvolutivoFW Standard Formatting
  • Documentation: code and wiki.
    • function headers and help messages
    • wiki documentation keeps going
    • Global Variable Grammarly syntax
  • Refactor and Optimize code
    • sonarqube recommendations
    • eliminate obsolete files: config.performance, tabdata, and soap entry point
    • HTML errors detected by Chrome. font to span
    • substitute variables for their value
    • condense four preg_replace calls into one
    • eliminate obsolete and unused methods for unsupported word plugin in account, contact, leads, and helpdesk
  • Security fixes and updates
    • update DOMPurify to 3.0.9
    • update Smarty to 4.4.1
    • block access to top-level PHP scripts to avoid direct calls using htaccess
    • install laminas-escaper library
    • escape output sent to browser function: vtlib_escape and vtlib_unescape
    • deprecate popup_decode_html and set_return_specific in favor of vtlib_escape
    • XSS in report and report folder names
  • PHP constant updates
  • Unit Tests: keeps getting more and more assertions.

Global Variables

  • Application_DMS_ShowAllAction: Define to show or not the "Show All" action in DMS. The default value is 1.
  • CustomerPortal_NonRestrictedModules: Used to deactivate the module's functionality of displaying solely the records associated with the present portal user. Read more here
  • CustomerPortal_CompanyLevelRestriction: Used to set the companyAccess parameter for the Portal Module Restrictions. Read more here

Others

  • Calendar fixes and warnings
  • adjustments for DisplayType 5 fields. These can be used everywhere now
  • DMS
    • convert upload type to binary
    • preview documents in OnlyOffice document server
    • translate headers
    • validate parameters and use Save method for uploads
  • reduce the usage of single and double quotes in the translation scripts to avoid javascript errors
  • Listview: support uitype 77 for tuigrid
  • add autocomplete to Login user name as per HTML recommendations
  • use the correct variable name for cache in MailScanner
  • ModuleManager: get row info by rowKey instead of name
  • Reports: advanced conditions error
  • no foreign keys for Users module in export
  • not showing the application logo and favicon fix if it contained spaces
  • Workflow -trim field name to avoid incorrect condition evaluation -handle empty list in many-to-many task -force web service session to Lock IP when application session is locked, for the extended session call to work -not return empty string when we are getting 0 from the context
  • Translations

Insights

February Insights

February March
Sonarqube February Sonarqube March

Thanks for reading.

Previous Post Next Post