Install the App?

Changelog

History of the ZnetDK 4 Mobile versions

Version 3.2 released on April 5, 2024
  • CHANGE: users now can authenticate to the application by using their address email instead of their login name.
  • CHANGE: when the Application GET URL include a login parameter and user is not authenticated (CFG_AUTHENTICATION_REQUIRED is TRUE), the login name is initialized from this parameter and the input focus is set to the password field.
  • CHANGE: when CFG_VIEW_PAGE_RELOAD is set to TRUE, an external link URL can be set for the $menuItemSEOlink argument when calling the \MenuManager::addMenuItem() method within the menu.php script.
  • CHANGE: when CFG_VIEW_PAGE_RELOAD is set to TRUE, views not tied to a level 1 or level 2 menu can be displayed in the application via a hierarchical URL.
    For example, the view view2 can be displayed invoking the https://myhost/myapp/view1seolink/view2seolink URL with the following definition in the menu.php of the application:
    \MenuManager::addMenuItem(NULL, '_views', 'Views', NULL);
    \MenuManager::addMenuItem('_views', 'view1', 'View #1', NULL, 'view1seolink');
    \MenuManager::addMenuItem('view1', 'view2', 'View #2', NULL, 'view2seolink');
  • CHANGE: the beforeunload JS event listener is no longer added once the application is loaded to ask the user for confirmation to exit the application. It is now only added when data has been modified in an input form.
  • CHANGE: extra HTML code can be injected at the end of the page layout (before JS dependencies) by the application and by the modules by adding in the app/layout/ or mod/layout/ subfolder a PHP script named extra_hmtl.php containing the extra HTML code.
  • CHANGE: the custom Users:getUserTheme() controller method of the application or a module is now called to set the ZnetDK 4 Mobile CSS theme for the logged in user.
  • CHANGE: jQuery library updated to version 3.7.1.
  • CHANGE: the color of the rows on hover is changed to light grey instead of white in the user and profile management views (z4musers.php and z4mprofiles.php).
  • BUG FIXING: the z4m.content.getDisplayedViewId() method returned a wrong view ID when the view name contained a dash character.
  • BUG FIXING: while processing a GET request, if the MainController::renderView() method failed due to a missing view, the PHP script was not interrupted and the output error message was followed by unexpected HTML code.
  • BUG FIXING: issue "Unload event listeners are deprecated and will be removed." displayed in Chrome's console. The JS unload event handler is no longer added to the application.
  • BUG FIXING: error "Uncaught ReferenceError: $ is not defined" displayed in browser's console when CFG_VIEW_PRELOAD is set to TRUE and jQuery code exists in the preloaded views. To prevent this error, the new parameter CFG_LOAD_JS_DEPENDENCIES_FROM_HTML_HEAD can be set to TRUE to force the JS dependencies loading from the HTML <head> tag.
  • BUG FIXING: snackbar messages were masked by elements with a CSS z-index higher than 1. The snackbar element is now set with a CSS z-index value of 10 by default. This value can be increased in CSS by selecting the snackbar through the z4m-snackbar class name.
  • BUG FIXING: the error message LC_MSG_WARN_LOGGED_OUT_MSG is not longer displayed by the \UserSession::isAuthenticated() method if the request method is GET. The LC_MSG_WARN_NO_AUTH error message is displayed instead.
  • BUG FIXING: in the event of an error processing a GET request, the PHP output buffer is now cleared before returning an HTTP error in HTML format (see \Response::doHttpError() method).
  • BUG FIXING: the page layout scripts office.php, custom.php and classic.php, not useful for ZnetDK 4 Mobile, are no longer included in the engine/core/layout/ subfolder of the delivery ZIP archive.
  • BUG FIXING: the background color was not properly set for the following user panel modal dialogs: z4minstall.php, z4muninstall.php and z4mmyuserrights.php.
  • BUG FIXING: the separator lines of the records in the list were longer than that of the title header in the user and profile management views (z4musers.php and z4mprofiles.php).
  • BUG FIXING: a PHP fatal error was not properly displayed when happened before the definition of the LC_MSG_CRI_ERR_SUMMARY and LC_MSG_CRI_ERR_DETAIL PHP constants.
  • BUG FIXING: message "You will be redirected to the login page." were displayed when a user tried to log in to the application while the database was down.
  • BUG FIXING: when a PHP warning error existed in the output buffer before the first statement of the index.php script was executed, it was not traced in the engine/log/errors.log and made any response generated in JSON format unreadable.
Version 3.1 released on December 22, 2023
  • CHANGE: the SQL query execution time is now traced when the CFG_SQL_TRACE_ENABLED PHP constant is set to TRUE.
  • CHANGE: a custom PHP script can be ran after a controller action is executed to track application activity or measure performance, by setting its path through the new CFG_EXEC_PHP_SCRIPT_AFTER_ACTION_DONE PHP constant in the config.php script of the application. The time elapsed in seconds for executing a controller action is given by the ZNETDK_TIME_ELAPSED_FOR_ACTION PHP constant.
  • CHANGE: to optimize the first display of the application, JavaScript dependencies are now loaded at the end of the body block of the HTML document.
  • CHANGE: after granting or not granting a profile to a user, the latter no longer needs to log out and log in again for their new rights to apply. Indeed, reloading the application in the internet browser is now enough for the user's rights to apply.
  • CHANGE: for better accessibility, new title parameter added to the JavaScript z4m.action.addCustomButton() method to specify a title for the custom action button.
  • BUG FIXING: a JS data list was wrongly refreshed after a form submission if the success property of the JSON response existed and was false (see z4m.list.setModal() method).
  • BUG FIXING: for better accessibility, title and aria-label HTML attributes are added to the action buttons.
  • BUG FIXING: after saving and removing a user profile, the confirmation message is now displayed as a snackbar message.
  • BUG FIXING: for better accessibility, form labels are now associated with their form fields.
  • BUG FIXING: items in the left vertical menu were not focusable when navigating with keyboard (accessibility issue).
  • BUG FIXING: HTML title attribute added to the application's logo link and HTML alt attribute set from the PHP LC_HEAD_TITLE constant.
  • BUG FIXING: for SEO purpose when the CFG_VIEW_PAGE_RELOAD parameter is set to TRUE, the href attribute of the level 2 horizontal menu items is now set to the $menuItemSEOlink value specified in the menu.php script on \MenuManager::addMenuItem() method call.
Version 3.0 released on September 10, 2023
  • CHANGE: new \Convert::toISO88591() method to convert a string from UTF-8 to ISO-8859-1. This method requires mbstring, iconv or intl PHP extension and can replace the PHP utf8_decode() function which is deprecated in PHP version 8.2.
  • CHANGE: new parameter CFG_DISPLAY_ERROR_DETAIL to hide technical error details from the end user. This parameter is FALSE by default.
  • CHANGE: new parameter CFG_SESSION_ONLY_ONE_PER_USER which limits the number of sessions allowed per user login to one when set to TRUE (default). Thus, a user is automatically disconnected from their first user session when they connect a second time to the application with the same login ID.
  • CHANGE: the logout button is moved from the banner to the user panel when the application is viewed on small and medium-sized devices.
  • CHANGE: token added to AJAX requests to prevent CSRF attacks. When CFG_AUTHENT_REQUIRED parameter is FALSE, new \UserSession::isUITokenValid() method can be called to check if the token sent by the AJAX request matches the one stored in the user's session.
  • CHANGE: for security purpose, ZnetDK controller actions controller\Users and controller\Profiles are no longer executable if the logged in user does not have permission (via user profiles) to access the users or profiles view. This restriction is also applied when no authentication is required (CFG_AUTHENT_REQUIRED is FALSE) and the users or profiles view is not declared within the menu.php script of the application.
  • CHANGE: new \AppController::setRequiredMenuItemForAction() method to call within the \AppController::setAllowedActions() method in order to restrict execution to controller's actions if the logged in user does not have permission (via user profiles) to access a given menu item.
  • CHANGE: the \AppController::isActionAllowed() method can be implemented within an Application controller to specify whether a given action is allowed or not according to custom conditions.
  • CHANGE: the A2HS installation prompt is now only shown on the first view displayed once the application is loaded.
  • CHANGE: z4m.footer.adjustPosition() method is deprecated because the footer is now positioned through CSS styles.
  • CHANGE: new z4m.ajax.setCustomAjaxURL() method to set a custom AJAX URL when the z4m.ajax.request() is called, especially from an application that is not a ZnetDK 4 Mobile application (for example from a CMS like WordPress).
  • CHANGE: the ZnetDK 4 Mobile JS library now can be loaded in a CMS like WordPress, even if the the jQuery library is initialized in noConflict mode (variable $ not declared).
  • CHANGE: the .htaccess root file is now automatically generated if missing and configured based on the ZnetDK installation directory relative to the Apache web server's DocumentRoot folder. The other .htaccess files, usually located in the app/ and mod/ subdirectories, are no longer needed.
  • BUG FIXING: an HTTP error 403 is now returned when executing a controller action which is explicitely forbidden through the definition of the \AppController::setAllowedActions() and \AppController::isActionAllowed() methods within the custom application controller.
  • BUG FIXING: "E_WARNING - filemtime(): stat failed for ... engine\core\Dependencies.php(210)" when the CFG_PAGE_LAYOUT is set to a page layout other than mobile.
  • BUG FIXING: when the view 'httperror' was displayed on error HTTP 403, 404 or 500, the HTTP status code was always 200 instead of 403, 404 or 500.
  • BUG FIXING: error "E_DEPRECATED - Function utf8_decode() is deprecated" in PHP 8.2 when downloading a document or a CSV file after calling the \Response::setFileToDownload() or \Response::setDataForCsv() method.
  • BUG FIXING: when a critical PHP error occurred for an HTTP GET request, a blank HTML page was displayed instead of an explicit error message.
  • BUG FIXING: the HTTP 403 error code was not managed by the \Response::doHttpError() ZnetDK method.
  • BUG FIXING: the TCP/IP port other than 80 and 443 was missing in the URL returned by the \General::getApplicationURI() method.
  • BUG FIXING: the w3-theme-light CSS class was missing for the Notification and Confirmation dialogs.
  • BUG FIXING: The button labeled in English "Connect" on the login form and "Connection" title on user edit form are replaced by "Login".
  • BUG FIXING: extra bottom space added to the "forgotten password?" link displayed on the login page.
  • BUG FIXING: error CTL-003 displayed when the CFG_VIEW_PAGE_RELOAD parameter was set to TRUE.
  • BUG FIXING: flash effect is removed when refreshing rows of a Data list.
  • BUG FIXING: the rows of the JS Data list were not automatically loaded on z4m.list.make() method call if the application was configured with the CFG_VIEW_PAGE_RELOAD PHP parameter set to TRUE.
  • BUG FIXING: JS error message in Chrome browser console "The keyword 'searchfield-cancel-button' specified to an 'appearance' property is not standardized. It will be removed in the future.".
  • BUG FIXING: the \General::callRemoteAction() method could not be called because it was wrongly declared private.
  • BUG FIXING: error "E_WARNING - key_exists() expects parameter 2 to be array, null given - \engine\core\Response.php(68)" reported when trying to read a \Response object property when no value has yet been set.
  • BUG FIXING: no exception was thrown by \General::reducePictureSize() when imagecreatefrompng() or imagecreatefromjpeg() PHP functions failed. Now a GEN-009 ZDKException is thrown.
  • BUG FIXING: the user phone and user notes were not returned by the \UserManager::getUsersHavingProfile() ZnetDK PHP method.
  • BUG FIXING: error "CTL-003: the controller '' and the action '' does not exist!" returned when sending a POST request with controller and action specified as GET parameters.
  • BUG FIXING: error E_WARNING - Undefined array key "HTTP_ACCEPT_LANGUAGE" \Request.php(311) when a controller action was called as a web service while the Accept-Language was not specified in the HTTP header.
Version 2.9 released on April 7, 2023
  • CHANGE: new z4m global variable which is a shorten alias of the znetdkMobile global variable.
  • CHANGE: new beforehide and afterhide JS events triggered before and after closing a modal dialog.
  • CHANGE: the onAdd and onEdit callback functions specified when calling the znetdkMobile.list.setModal() method, can return false to prevent the modal dialog from being opened. So, the modal dialog is opened by the callback function at the appropriate time.
  • CHANGE: the \Convert::toUTF8() method accepts now an optional second parameter named $fromEncoding to specify the character encoding of the string passed as first parameter. The default value for $fromEncoding is 'ISO-8859-1'.
  • CHANGE: extra locales were added by default to the LC_LOCALE_ALL constant for the English, French and Spanish languages in order to increase the chance to target a locale installed on the webserver.
  • CHANGE: the znetdkMobile.form.getInputValue() method now returns an array containing the multiple selected values of the checkboxes having the same name in a form (i.e the HTML attribute name is defined with the same string value for several checkbox elements).
  • CHANGE: new znetdkMobile.action.removeCustomButton() method to remove a custom action button and unregister it from the views.
  • CHANGE: new afterpageloaded events triggered by the Data List <ul> element each time a new page of rows is loaded.
    The data sent with the event are in first position, the ZnetDK Data List object, in second position the number of rows loaded, in last position the data page number.
  • CHANGE: when hovering a user profile from the ZnetDK user form, its description is now displayed as a tooltip on desktop computer.
  • CHANGE: the \ProfileManager::getProfiles() method now returns the profile's description through the 'description' array key.
  • CHANGE: for optimization purpose, new \UserSession::hasFullMenuAccess() method to know if logged in user has a full menu access without requesting the database.
  • CHANGE: for optimization purpose, new \UserSession::getUserEmail() method to get logged in user email without requesting the database.
  • CHANGE: for optimization purpose, new \UserSession::getUserName() method to get logged in user name without requesting the database.
  • CHANGE: for optimization purpose, new \UserSession::getUserProfiles() and \UserSession::hasUserProfile() methods to get access to the authenticated user's profiles without requesting the database.
  • CHANGE: the \Convert::toDecimalForDB() method accepts mixed type (float, int, string) for the $number parameter. In previous version, an empty string was returned if the specified number was not a string.
  • BUG FIXING: a JS error "Invalid regular expression" was displayed when the searched string in an autocomplete field contained a character having a special meaning in a regular expression (for example an opening parenthesis).
  • BUG FIXING: in PHP 8.1, error "E_DEPRECATED - str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated" when calling the \General::getFilledMessage() with a null value as argument.
  • BUG FIXING: the \ProfileManager::storeProfile() method did not return the user profile's internal database identifier once stored.
  • BUG FIXING: the \Convert::toLocaleDate() method returned a long date instead of a short date with the intl extension loaded and the LC_LOCALE_DATE_FORMAT constant set to NULL.
  • BUG FIXING: with the LC_LOCALE_CURRENCY_SYMBOL set to NULL, the \api\Locale::getCurrencySymbol() method returned an incorrect character when the currency symbol was not encoded in UTF-8. Now, if the currency symbol is not encoded in UTF-8, it is decoded from the Windows-1252 character set.
  • BUG FIXING: with the LC_LOCALE_THOUSANDS_SEPARATOR set to NULL, the \api\Locale::getThousandsSeparator() method returned a space character which does not match the ASCII space character (value 20 in Hexadecimal).
  • BUG FIXING: according to the PHP server configuration, the \Request::getAcceptLanguage() could return a NULL value while the HTTP_ACCEPT_LANGUAGE server variable was properly defined.
  • BUG FIXING: the \Convert::valuesToAnsi() method uses now the Windows-1252 encoding instead of the ISO-8859-1 encoding, in particular to correctly convert the euro character.
  • BUG FIXING: the \Convert::valuesToAnsi() and \Convert::toUTF8() methods are no longer based on the utf8_decode() and utf8_encode() PHP functions for they are deprecated in PHP 8.2.
    If no encoding/decoding function is installed (i.e. iconv function or mbstring and intl extensions), then an exception is thrown..
  • BUG FIXING: in PHP 8.2 version, a DEPRECATED error was generated by the \Validator::__construct() method when the VAL-003 exception was thrown because string variable interpolation is deprecated in this version.
  • BUG FIXING: the thousands separator comma (i.e. ',') was wrongly converted to a dot character (i.e. '.') when calling the \Convert::toDecimalForDB() method while the language of the application was configured with the comma character as thousands separator.
  • BUG FIXING: the ui-widget, ui-widget-content and ui-corner-all CSS classes were removed from the mobile page layout as they were not used.
  • BUG FIXING: the modal object was not initialized by the znetdkMobile.modal.open() method when the aftershow event was triggered.
  • BUG FIXING: when displaying the list of user profiles, as many SQL queries as user profiles displayed were executed in the database. Now, only one SQL query is executed.
  • BUG FIXING: when executing \General::encrypt() or \General::decrypt(), an exception is now thrown if the openssl extension is not installed.
  • BUG FIXING: exceptions were not correctly catched by the ZnetDK \SimpleDAO::getSuggestions() method.
  • BUG FIXING: dash characters (i.e ' - ') were filtered out of the view name when the view was called in AJAX, causing a CTL-001 ZnetDK error.
Version 2.8 released on December 12, 2022
  • CHANGE: class names now conform to the PSR-4 autoloading standard. This means that a PHP script named MyClass.php corresponding to the definition of MyClass is now loaded automatically. In the previous version of ZnetDK, the same PHP script had to be named myclass.php to be automatically loaded.
  • CHANGE: new \DAO::setAmountColumns(), \DAO::setMoneyColumns() and \DAO::setDateColumns() to set up the SQL table columns to format according to locale settings when retrieving data rows via \SimpleDAO::getRows().
  • CHANGE: the phone and notes specified for a user are now displayed on the user list.
  • CHANGE: new \Response::setCustomContent() method to return custom content (HTML, XML, text, ...) from a controller action in response of an http request.
  • CHANGE: calling a web service with http GET method is now accepted when the corresponding controller and action are authorized by setting the CFG_ACTIONS_ALLOWED_FOR_WEBSERVICE_USERS parameter. In previous version, only controller's actions named 'download' could be called with the http GET method. This possibility can be particularly useful when a controller action is to be executed from a webcron service.
  • CHANGE: new optional parameter '$sanitize' added to the \UserSession::setCustomValue() and \UserSession::getCustomValue() methods. When this parameter is set to TRUE (FALSE by default), the custom value is sanitized before being stored in user session or returned from user session.
  • CHANGE: \General::isPictureTooBig() private method is converted to a public method to check if a photo is too big to be reduced in regards of the available memory in the PHP process. Initially only called by the \General::reducePictureSize() method to avoid memory allocation error, \General::isPictureTooBig(), now can be called with a custom $tweakFactor value (set by defaut to 1.65 in previous version of ZnetDK, this value has been increased to 2) before reducing a photo.
  • CHANGE: \General::reducePictureSize() method no longer returns FALSE on error. Instead, a ZDKException is thrown ('GEN-003' to 'GEN-006').
  • CHANGE: new $tweakFactor parameter (set to 2 by default) added to the \General::reducePictureSize() method.
  • CHANGE: new CFG_IS_IN_MAINTENANCE parameter to close access to the application. A message is then displayed to inform users that the application is temporarily in maintenance. The LC_MSG_ERR_MAINTENANCE constant can be overloaded in the 'locale.php' script of the application to customize the message.
  • CHANGE: the date format set through the LC_LOCALE_DATE_FORMAT must now conform to that used by the DateTime::format() PHP method. The previous supported format was the one used by the strftime() PHP function which is deprecated in PHP version 8.1.
  • CHANGE: Http request data filtering can be globally disabled by setting 'NONE' to the CFG_REQUEST_VARIABLE_FILTERING_LEVEL parameter. In addition, the \Request::setVariableFilteringLevel() method accepts the value 'NONE' as parameter to disable value filtering for a specific Http request only.
  • CHANGE: \Request::setTrimedCharacters() method now returns a boolean value. If the '$trimedCharacters' parameter is not NULL or is not a string then a FALSE value is returned.
  • CHANGE: controller\Users::notify() method removed as it was not useful.
  • CHANGE: new znetdkMobile.list.loadedCallback property to define a custom function to call after list's rows are fully loaded. This function has two parameters which contain the number of rows loaded and the data page number loaded.
  • CHANGE: new znetdkMobile.list.afterInsertRowCallback property to define a custom function to call after a row has been inserted in a list. This function has one parameter which contains the new inserted list item as a jQuery element. This callback function can be useful for example to set draggable the list item once added to the list.
  • CHANGE: new topspacechange event triggered when the space between the top of the view container and the top of the page change, for example when the secondary menu is shown on multiple lines, when a message is displayed through the znetdkMobile.messages.add() method, or when the "Install the App?" message is cleared.
  • CHANGE: a column header is now displayed on top of the user and profile lists when the screen is a large screen.
  • BUG FIXING: the MainController::getControllerName() method now is able to find a specific controller method amoung multiple modules overloading the same controller.
  • BUG FIXING: the 'maxlength' attribute of the 'profile_name' input field was wrongly set to 100 instead of 50.
  • BUG FIXING: the 'maxlength' attribute of the 'profile_description' input field was wrongly set to 100 instead of 200.
  • BUG FIXING: in PHP 8.1, integers and floats in result sets are by default returned using native PHP types instead of strings. To restore the behavior of earlier versions of PHP, the PDO::ATTR_STRINGIFY_FETCHES option is now forced to true.
  • BUG FIXING: in PHP 8.1, error "E_DEPRECATED - Function strftime() is deprecated - engine\core\convert.php(116)".
  • BUG FIXING: in PHP 8.1, error "E_DEPRECATED - Constant FILTER_SANITIZE_STRING is deprecated".
  • BUG FIXING: in PHP 8.1, error "E_DEPRECATED - php_function_name(): Passing null to parameter #X ($parametername) of type string is deprecated" where 'php_function_name' is an internal PHP function name, '#X' is the parameter position and '$parametername' is the concerned function parameter name.
  • BUG FIXING: in PHP 8.1, error "E_DEPRECATED - Implicit conversion from float to int loses precision" when executing \General::reducePictureSize() method.
  • BUG FIXING: on HTTP error 403 or 404, the page reloading confirmation message ('beforeunload' JS event) was shown unnecessarily after clicking the link to return to the home page.
  • BUG FIXING: on HTTP error 403 or 404, the installation panel "Install the App?" was shown unnecessarily.
  • BUG FIXING: the confirmation message "A confirmation email has been sent to you." was not displayed after submitting the email address on new password request (clicking the "forgotten password?" link).
  • BUG FIXING: the znetdkMobile.form.getInputValue() method returned false and the error message "The input type='undefined' is not supported!" was displayed in the browser's console when an input field was declared in a form without specifying the type attribute. Now, if the type attribute is not specified for an input field, it is considered to be of type "text".
Version 2.7 released on August 18, 2022
  • CHANGE: input fields are now surrounded by a red border in case of form validation error.
  • CHANGE: new jQuery events triggered before (beforeshow) and after (aftershow) displaying a modal dialog. If the beforeshow event handler returns false, the modal dialog is not displayed.
  • CHANGE: server-side errors are now displayed using the HTML5 JS Validation API (setCustomValidity method) when an input field value is incorrect.
  • CHANGE: the message displayed after the user changes their password is now a "snackbar" type message rather than a message in a blue panel.
  • CHANGE: the message displayed after editing a user's information or deleting a user is now a "snackbar" type message rather than a message in a blue panel.
  • CHANGE: new "My user rights" button added to the user panel to display the user profiles assigned to the connected user and to indicate whether she or he has a full menu access or not.
  • CHANGE: when 'Remember me' is checked on the login form, the user's login name is stored in the browser's local storage and is pre-populated on subsequent displays of the login form.
  • CHANGE: new "Installation" and "Uninstallation" buttons added to the user panel in order to help users to install the Application on their devices and to uninstall it. The modal dialogs shown when clicking these new buttons can also be displayed by calling the two following methods: znetdkMobile.install.showInstallView() and znetdkMobile.install.showUninstallView().
  • CHANGE: new CFG_MOBILE_INSTALL_MESSAGE_DISPLAY_AUTO parameter to enable or disable automatic display of a message to install the application (Add 2 Home Screen). Set to TRUE by default, this value can be changed to FALSE in the config.php script of the application. This message can also be displayed on demand by calling the znetdkMobile.install.showInstallableMessage() method.
  • CHANGE: new znetdkMobile.install.isAppInstallable() and znetdkMobile.install.isAppInstalled() methods respectively to know if the application is installable and if it is already installed.
  • CHANGE: new viewName and onViewLoaded optional parameters added to the znetdkMobile.modal.make() method in order to load in Ajax the modal dialog from the specified ZnetDK view before instantiating it. If the modal dialog already exists in the DOM, it is not loaded again when the method is called next times.
  • CHANGE: new znetdkMobile.serviceWorker.isRegistered property that is set to true once the service worker registration has succeeded.
  • CHANGE: new znetdkMobile.browser.doPhoneCall() method to dial the specified phone number on cell phone.
  • CHANGE: new znetdkMobile.browser.sendSMS() method to open the screen for sending an SMS and pre-fill phone number and message from the specified values passed in parameters.
  • CHANGE: special characters are now allowed by default when entering a new password for app authentication (see CFG_CHECK_PWD_VALIDITY and LC_MSG_ERR_PASSWORD_BADLENGTH PHP constants for customization purpose).
  • CHANGE: new $includeArchived parameter (set to TRUE by default) added to the \UserManager::getUsersHavingProfile() method. When set to FALSE, archived users are excluded from the returned users.
  • CHANGE: new znetdkMobile.list.beforeInsertRowCallback property to define a custom function to call each time a row is inserted in a list. This function has one parameter which contains the data to display for the row. This data can be modified within the function before displaying the row. This callback function can be useful to format data before row insertion.
  • CHANGE: for optimization purpose, AJAX requests are no longer sent by a znetdkMobile.autocomplete input field when the previously entered keyword does not match any suggestions.
  • CHANGE: for performance purpose, suggestions returned by AJAX requests when entering a keyword in a znetdkMobile.autocomplete input field can be cached in memory to reduce network traffic. To enable caching, set znetdkMobile.autocomplete.maxNumberOfCachedItems to a value greater than zero (set to zero by default). To clear the cache once a suggestion is selected, change the value znetdkMobile.autocomplete.cacheLifetime to 'selection' ('page' is set by default, meaning that cache is kept until user leaves the application).
  • BUG FIXING: when calling the DAO::store() method with an empty row id value (i.e. '') and the $emptyValuesToNull parameter is FALSE (default case), then the SQL statement generated is no longer an UPDATE but an INSERT instead.
  • BUG FIXING: for optimization purpose, the user profile list displayed for each user in the user list (menu Authorizations | Users) is no longer created by querying profiles in SQL for each user (now, only one SQL query is executed for all displayed users).
  • BUG FIXING: multiples clicks are prevented on anchor and button elements of the application (disabling during 500 ms).
  • BUG FIXING: messages displayed through the znetdkMobile.messages.add() method were not hidden after the user logged out.
  • BUG FIXING: the first parameter named $loginName is renamed to $userId for the \UserManager::getUserProfiles() method because the expected parameter value was the user internal identifier.
  • BUG FIXING: Javascript error displayed in web browser console on service worker registration when the App's URL is redirected: "The script resource is behind a redirect, which is disallowed.".
  • BUG FIXING: user profiles were displayed twice when the number of defined profiles exceeded 20 profiles.
  • BUG FIXING: when activating the "Users" tab from the "Profiles" tab, the user list was not reloaded when applying "Enabled", "Disabled" or "Archived" filter and the profile list was reloaded instead.
  • BUG FIXING: ajax requests could be executed twice after the user's session expired if a JS error occurred while executing them from the queue.
  • BUG FIXING: the login name was not displayed in the login field after reloading of the application once session was expired.
  • BUG FIXING: JS error message "TypeError: Cannot read properties of undefined (reading 'replace')" was displayed when the rendering callback function passed to the znetdkMobile.autocomplete.make() method did not returned a string value.
  • BUG FIXING: JS error message displayed in web browser console about znetdkMobile.log.e$() function that is not defined when a JS error is detected after a view loading through the znetdkMobile.ajax.loadView() method (issue in minification of mobile-min.js version 2.6).
Version 2.6 released on June 03, 2022
  • CHANGE: downloaded documents (photos, pdf, etc.) are now stored in cache by the service worker if the cache=true GET parameter is added to the download url.
  • CHANGE: new ZnetDK \General::reducePictureSize() method that resizes a JPEG or PNG picture by specifying a maximum width and height.
  • CHANGE: new CFG_APPLICATION_VERSION parameter to specify the current application's version (integer value, 1 by default). When this version is set into the config.php of the application, the client-side application is automatically reloaded on user's session expiration if the application version on the server-side is higher than the one currently loaded in the user's web browser.
  • CHANGE: new \Convert::binaryToBase64Url() ZnetDK method to convert a binary file content to base64 URL.
  • CHANGE: new \Convert::base64UrlToBinary() ZnetDK method to convert a base64 URL to binary file content.
  • CHANGE: new \Request::setTrimedCharacters() to specify the characters to trim when retrieving the sanitized value of a request parameter. By default, the trimed characters are " \n\r\t\v\x00". This method can be useful to preserve the newline characters of the beginning and the end of a text.
  • CHANGE: new CFG_REQUEST_VARIABLE_FILTERING_LEVEL parameter to specify the filtering level applied by default when reading HTTP request variables by calling the\Request() getter method (i.e $request->my_var). Value 'HIGH' is set by default (PHP filter_var() function is applied with FILTER_SANITIZE_STRING filter and FILTER_FLAG_NO_ENCODE_QUOTES option). Other allowed value is 'LOW' (PHP strip_tags() function is applied and the string '<=' is preserved if exists in the text to filter).
  • CHANGE: new \Request::setVariableFilteringLevel() to change the default value set through the CFG_REQUEST_VARIABLE_FILTERING_LEVEL parameter. Allowed parameters are 'LOW' and 'HIGH'.
  • CHANGE: Flash Of Unstyled Content (FOUC) is now prevented on application loading.
  • CHANGE: jQuery upgrade from version 3.5.1 to version 3.6.0 (see CFG_MOBILE_JQUERY_JS PHP constant).
  • CHANGE: the znetdkMobile.setInputValue() method now allows to check multiple checkboxes having the same name (generally ended with double brackets, for example "mycheckboxes[]"). The values of the checkboxes to check are passed in parameter of the method as an array.
  • CHANGE: the znetdkMobile.getInputValue() method now allows to retrieve as a JS array, the selected values for a SELECT HTML element set with the multiple property.
  • BUG FIXING: jQuery syntax error calling znetdkMobile.getInputValue() method when the input name passed in parameter contains "bracket" symbols.
  • BUG FIXING: when more than 20 users were declared in the application, the list of users (view 'z4musers.php') was not properly paginated (same users were displayed several times).
Version 2.5 released on September 29, 2021
  • CHANGE: new \General::callRemoteAction() method usefull to invoke a controller action exposed as web service by a remote ZnetDK application.
  • CHANGE: new CFG_SQL_TRACE_ENABLED parameter which traces in the system log all SQL statements executed through the ZnetDK \DAO class.
  • CHANGE: new \UserSession::getUserId() method that returns the user ID of the connected user.
  • CHANGE: new zdk_user_pwd_resets SQL table for tracing reset password requests. The database schema can be upgraded for applications deployed in a previous version of ZnetDK by executing the following DDL statement:
    CREATE TABLE `zdk_user_pwd_resets` (
    `email` VARCHAR(100) NOT NULL COMMENT 'Email address',
    `request_date_time` DATETIME NOT NULL COMMENT 'Request date time',
    `reset_key` VARCHAR(100) NOT NULL COMMENT 'Reset key',
    UNIQUE `email` (`email`)
    ) ENGINE = InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci
    COMMENT = 'Password reset';

    For any new applications, just download the znetdk-security-1.6.zip archive from the ZnetDK download page to install the security SQL tables corresponding to this version.
  • CHANGE: new CFG_FORGOT_PASSWORD_ENABLED parameter to display a link labeled 'Forgot password?' on the login form. When clicked, the ZnetDK modal dialog corresponding to the view forgotpassword.php is shown to request a new password from a user email address. This view can be customized by copying it to the view/ folder of the application or a module.
  • CHANGE: new controller\ForgotPassword class in charge of displaying the forgotpassword.php view when the 'Forgot password?' link is clicked. In addition, the controller processes the requests for getting a new password and for resetting the user's password.
    This controller can be overloaded by the application or a module for customization purpose.
  • CHANGE: new CFG_FORGOT_PASSWORD_REQUEST_TRACE_ENABLED parameter to trace the
    requests for a new password to the ZnetDK system log file.
  • CHANGE: new 'Archived' user's status and new 'Status' datatable filter to limit display to users matching a given status ('Enabled', 'Disabled' or 'Archived'). An archived user is not allowed to log in to the application and can't request a new password through the 'Forgot password?' link.
  • CHANGE: the verification of the login name during authentication process is now case sensitive. This means that a user declared for example with the login name 'JohnDoe' can no longer log in if he enters 'JOHNdoe'.
  • BUG FIXING: the filename defined for the \Response::setFileToDownload() method was not properly displayed by the web browser when it contained accents.
  • BUG FIXING (for mobile only): when the znetdkMobile.setInputValue() method was called for a checkbox element with a non-empty value different than the one set for the checkbox element, it was not unchecked.
  • BUG FIXING: 'Remember me' checkbox state change event handler was incorrectly declared each time the login form was displayed for the user's session renewal.
  • BUG FIXING: focus wrongly applied to the show/hide password button instead of the password entry field.
  • BUG FIXING: error ENOTICE - Trying to access array offset on value of type null in profilemanager.php(126) when the user profile view (profile.php) was displayed in PHP 7.4.
  • BUG FIXING: the callback function specified for the znetdkMobile.messages.ask() method could be executed twice wrongly.
  • BUG FIXING: the Phone and Note labels of the z4musers.php view were not displayed in bold.
  • BUG FIXING: when the page header was hidden after calling the znetdkMobile.header.events.handleHideHeaderOnScroll() method, no extra space
    was longer added to the page's anchors through the inline #zdk-anchor-adjust CSS style (bug finally not fixed in version 2.4).
Version 2.4 released on April 15, 2021
  • CHANGE: the \DAO::remove() method now returns the number of rows removed.
  • CHANGE: Phone and Notes fields added to the user form. The database schema must also be upgraded for applications deployed in a previous version of ZnetDK by executing the following DML statement:
    ALTER TABLE zdk_users
    ADD user_phone VARCHAR(50) NULL COMMENT 'Phone number' AFTER user_email,
    ADD notes VARCHAR(100) NULL COMMENT 'Notes' AFTER user_phone;

    For any new applications, just download the znetdk-security-1.5.zip archive from the ZnetDK download page to install the security SQL tables corresponding to this version.
  • CHANGE: new znetdkMobile.navigation.clearRowCountFromHorizontalMenuItem() method to clear the counter displayed on the right of the menu item (see znetdkMobile.navigation.addRowCountToHorizontalMenuItem() method).
  • CHANGE: new \DAO::doesTableExist() method to check if the table specified as property of the DAO exists or not.
  • BUG FIXING: when the page header is hidden after calling the znetdkMobile.header.events.handleHideHeaderOnScroll() method, no extra space is longer added to the page's anchors through the inline #zdk-anchor-adjust CSS style.
  • BUG FIXING: the suggestions were not automatically hidden after pressing the TAB key from a ZnetDK 4 Mobile autocomplete input field.
  • BUG FIXING: error message PFL-012 when calling \DAO::remove() with a row ID passed as a parameter while the 'zdk_profile_rows' ZnetDK security SQL table is missing.
  • BUG FIXING: checkbox and radio inputs could be modified after calling the znetdkMobile.form.setReadOnly() method.
  • BUG FIXING: a JS error occured calling znetdkMobile.form.setInputValue() when the value specified for a radio button contained a space character.
  • BUG FIXING: znetdkMobile.form.getInputValue() called for a checkbox input wrongly returned the element's value while the checkbox was not checked. Now, an empty string is returned if the checkbox is not checked.
  • BUG FIXING: in the mobile.php page layout, the title attribute is added to the #zdk-side-nav-button anchor for a better accessibility.
Version 2.3 released on October 9, 2020
  • CHANGE: the regular expression set by default to the CFG_CHECK_PWD_VALIDITY parameter in order to check the strength of a new password is changed to impose the user to input a minimum of 8 characters with at least 1 uppercase letter, 1 lowercase letter and 1 number.
  • CHANGE: custom action button can be added to the page calling the new znetdkMobile.action.addCustomButton() method.
  • CHANGE: the page header can be hidden on scroll calling the new znetdkMobile.header.events.handleHideHeaderOnScroll() method.
  • CHANGE: new optional 'classSelector' parameter added to the znetdkMobile.modal.getInnerForm() method to select a specific form in case more than one form exists in the modal dialog.
  • CHANGE: new optional 'parentContainer' parameter added to the znetdkMobile.messages.showSnackbar() method to force display of a snackbar message into a specific container (for example a modal dialog).
  • CHANGE: new optional 'renderCallback' parameter added to the znetdkMobile.autocomplete.make() method to customize the display of the suggestions.
  • CHANGE: new znetdkMobile.form.setDataModifiedState() method to indicate whether form data are modified or not by a user input. This method is called by the znetdkMobile.form.reset() and znetdkMobile.form.events.handleAllInput() methods.
  • CHANGE: new znetdkMobile.form.isModified() method to know if form data have been modified or not by a user input.
  • CHANGE: new 'checkDataFormsModified' parameter added to the znetdkMobile.modal.close() method to check whether the inner form data have been modified or not by a user input. If so, a confirmation is aked to user before closing the modal dialog.
  • CHANGE: when the 'question' parameter is set to null calling the znetdkMobile.messages.ask() method, then the LC_MSG_ASK_CANCEL_CHANGES php constant message is displayed as default question.
  • CHANGE: the display width of the 'z4musers.php' and 'z4mprofiles.php' views is enlarged for best display on mobile devices.
  • CHANGE: if an anchor with 'href' attribute starting with 'mailto:' or 'tel:' is clicked, then no unload confirmation message is longer prompted by the web browser.
  • CHANGE: the 'engine/log/autoexec.sync' file created by ZnetDK to synchronize the execution in background of an 'autoexec' controller action is now automatically deleted and recreated if it is corrupted or if its execution time exceeds one hour.
  • CHANGE: the jQuery library is updated to version 3.5.1 (previous version was 3.4.1).
  • CHANGE: when calling znetdkMobile.list.setCustomSortCriteria() method with a property named '_default' as sort definition for the sortCriteria parameter, then no sort is applied when this sort field is choosen from the search modal dialog, including if reverse sort has been selected.
  • CHANGE: the local storage key used to memorize the custom sort criteria of a data list (see znetdkMobile.list) is now suffixed with the view ID. So the sort criteria are no longer applied when a data list, with the same element ID, exists in different "reloaded on display" views (with the 'zdk-viewreload' CSS class).
  • CHANGE: the onAdd parameter of the znetdkMobile.list.setModal() now accepts to be set to false in order to hide the 'Add' action button.
  • CHANGE: for the custom and mobile page layout only (CFG_PAGE_LAYOUT set to 'custom' or 'mobile'), the HTML title attribute is added to the menu item anchor of the navigation menu and is set to menu item label.
  • CHANGE: labels that are too long in the vertical navigation menu are cut off on the right and suffixed by 3 dots (i.e. '...').
  • CHANGE: when calling znetdkMobile.modal.getInnerForm() method, if more than one form exist in the modal, the first one is now returned instead of a boolean false value.
  • CHANGE: new znetdkMobile.list.searchedKeywordAsJson property. When set to true, extra 'keyword_json' POST parameter is sent to the PHP controller's action on search by keyword, for loading a ZnetDK Mobile Data List (see 'data-zdk-load' HTML5 property). This 'keyword_json' parameter contains each searched keywords in JSON format including the extra properties of the selected keyword suggestions (see 'data-zdk-autocomplete' HTML5 property).
  • CHANGE: keyboard selection added to the suggestions displayed by a znetdkMobile.autocomplete input field.
  • BUG FIXING: error message "E_WARNING - file_exists(): open_basedir restriction in effect." when the README.TXT file existed into the 'engine/modules' subdirectory.
  • BUG FIXING: error message "The input with name='input_name' is not supported!" was displayed into the browser console when calling the znetdkMobile.form.getInputValue() method passing as parameter an input name matching a <textarea> HTML element.
  • BUG FIXING: the znetdkMobile.list.refresh() method could be called multiple times on view display when the view was set to be reloaded on each of its displays ('zdk-viewreload' CSS class applied to a HTML element of the view).
  • BUG FIXING: after znetdkMobile.navigation.addRowCountToHorizontalMenuItem() method call, the horizontal menu items could be displayed on an extra line and so they could hide the view content.
  • BUG FIXING: after removing a filter tag applied to a znetdkMobile.list element, the space was not totally released at the top of the list.
  • BUG FIXING: after calling the \Response::setFileToDownload() method, the response header Content-Type was not set properly for downloaded pictures when its file extension was in upper case and when the '$downloadedFilename' parameter was not specified.
  • BUG FIXING: when saving a user profile, the parent menu items of the selected menu items were not stored. As a result, parent menu items were not displayed in the navigation verticial menu for users who were assigned the profile.
  • BUG FIXING: select HTML element did not gain focus when calling znetdkMobile.form.setFocus() method.
Version 2.2 released on May 25, 2020
  • CHANGE: extra logs added to the /engine/log/system.log file when the CFG_AUTOEXEC_LOG_ENABLED parameter is set to TRUE. Now, the command line executed as background process, the console output and the result code are also traced.
  • CHANGE: if a view contains a HTML element with the 'zdk-viewreload' CSS class, then the content of the view is reloaded each time the view is displayed.
  • CHANGE: the znetdkMobile.form setFocus() and setFocusOnFirstInput() methods now set focus to html textarea and select elements in addition to input elements.
  • CHANGE: when adding a new user, the expiration date is set to the today date by default and the user is enabled by default.
  • CHANGE: users and profiles can be removed now through the new 'Remove' button.
  • CHANGE: a Fontawesome warning icon is added to the form error messages. In addition, the form is scrolled to top to ensure the visibility of the form error message.
  • BUG FIXING: in PHP version 7.2, E_WARNING errors were traced into the ./engine/log/errors.log when calling the \Request::getUploadedFileInfos(). The error message were as below: count(): Parameter must be an array or an object that implements Countable - ..\engine\core\request.php(351).
  • BUG FIXING: in PHP version 7.3, when the CFG_AUTO_MINIFICATION_METHOD parameter was set into the 'config.php' of the application, the error message Access to undeclared static property... in ..\dependencies.php on line 164 was displayed on main page loading.
  • BUG FIXING: E_WARNING errors were traced into the ./engine/log/errors.log on PHP 'include' by the ZnetDK 'response.php' script when the view to include called the ZnetDK \ErrorHandler::restart() method.
  • BUG FIXING: the 'textarea' and 'select' HTML fields were wrongly editable after calling the znetdkMobile.form.setReadOnly() method.
  • BUG FIXING: when displaying the user form of the 'mobile' page layout (see 'z4musers.php'), the list of profiles was loaded twice through AJAX request instead of once.
  • BUG FIXING: the decimal separator of a float number stored in session through the \UserSession::setCustomValue() method, was missing next when retrieving the float number value calling the \UserSession::getCustomValue() method.
  • BUG FIXING: JavaScript exception thrown when the value returned by the remote PHP controller for a checkbox or radio button input is empty, on calling the znetdkMobile.form.load() method.
  • BUG FIXING: the error message "The multiple input element with name='myinput' is not supported!" was displayed into the browser console when calling the znetdkMobile.form.getInputValue() method with a radio button input name as parameter while no radio button was selected. Now, the null value is returned instead and no error message is longer triggered.
Version 2.1 released on October 15, 2019
  • CHANGE: the 'autocomplete' HTML attributes are set to 'username' and 'current-password' into the login form to allow the web browser to memorize the credentials.
  • CHANGE: data-icon attribute added to the 'custom' layout menu hyperlink for display. The data-icon value is set from the icon value indicated into the 'menu.php' script by calling the \MenuManager::addMenuItem() method.
  • CHANGE: new page layout dedicated to mobile applications enabled when the CFG_PAGE_LAYOUT paramater is set to 'mobile' into the 'config.php' script of the application. For full documentation, go to the mobile.znetdf.fr website.
  • CHANGE: new 'action_detail' method added to the ZnetDK \Profile controller class to get detailed informations of a user profile through an AJAX call.
  • CHANGE: new 'action_detail' method added to the ZnetDK \Users controller class to get detailed informations of a user through an AJAX call.
  • CHANGE: new \SimpleDAO ZnetDK class for selecting and updating a table content in database without the need of declaring a custom DAO class. This new DAO object is perfect for executing simple operations on one SQL table.
  • CHANGE: additional CSS and JavaScript librairies can be added to a ZnetDK application through the CFG_APPLICATION_CSS and CFG_APP_JS parameters set into the 'config.php' application script. These libraries can be CDN libraries hosted out of the machine hosting the ZnetDK application. To set multiple libraries, declare them using a PHP serialized array.
  • CHANGE: the filename of a CSS or JavaScript internal librairies is now suffixed by a timestamp value (i.e. '/mypath/mylib.js?v=12545656') calculated from its modification date and time. So, newly modified server-side libraries get reloaded if they are newer than those existing in the web browser cache.
  • CHANGE: an offline page is displayed when calling in HTTP GET the resource http(s)://mydomain/offline. The offline page content can be customized by adding a 'offline.php' view into the 'applications/default/app/view' folder.
  • CHANGE: new 'action_isconnected' method added to the ZnetDK \Security controller class to check through an AJAX call if the user's session has not expired. This controller action can be called for example, before downloading a document for which authentication is required.
  • CHANGE: in the root .htaccess file of ZnetDK, the 404 HTTP errors are now managed using the rewrite engine module if installed rather than using the ErrorDocument 404 directive.
  • BUG FIXING: on some Linux Hosting systems, the following MySQL error message "Invalid datetime format: 1366 Incorrect integer value" was displayed when calling the ZnetDK \DAO::store method with boolean type values set to false for storage in a MySQL table column with an integer datatype.
  • BUG FIXING: an error 404 was displayed when calling a PHP view with the SEO url specified into 'menu.php' script through the \MenuManager::addMenuItem() method (case of the CFG_VIEW_PAGE_RELOAD parameter set to TRUE into the 'config.php' of the application).
  • BUG FIXING: the 'type="text/javascript"' attribute of the HTML script tag is no longer specified to avoid the following W3C validator warning error: "The type attribute is unnecessary for JavaScript resources."
  • BUG FIXING: the "CORE - E_WARNING - scandir(..engine/modules): failed to open dir" warning message is no longer displayed when the ZnetDK 'engine/modules' directory is missing.
Sort order