Highlights
This new LuxCal version 5.1.0 includes interesting new features, improved technical issues and bug-fixes.
Most important new features / improvements:
• No more "PHP session expired" messages for view-only calendar pages, so all pages without forms with input fields.
• New "rolling" events. Once the start date of these events has passed, it will keep on "rolling" to the current day, until the user deselects "rolling". When a reminder has been set for a rolling event, a new reminder will be sent each day the event rolls to a next day.
• In month view the full-width event title line (from the left to the right margin of the day cell) can now be clicked to open the event report or edit window and can be hovered to view the pop-up box with event details.
• Event sub-categories are now more flexible and not limited anymore to a maximum of four. In addition sub-categories can be copied from other event categories.
This new release has been tested again with the help of John from Denmark. Thank you John, well done!
The Dutch and German language files have been thoroughly reviewed, corrected and completed by Piotr in Germany. Thank you Piotr!
Hereafter you will find a full summary of all changes since LuxCal version 4.7.9.
New features/Improvements
• Calendar pages not containing forms that can affect the database content will not time out anymore when a PHP session expires. This means that the calendar can stay open and unused for long periods of time without "PHP session expired" messages. Only pages with forms that can affect the database content will time out when the user does not submit the form within the expiry time of the PHP session (24 minutes).
• When the user does not submit the form in the Add/Edit Event window in time and the PHP session expires, to avoid the loading of the calendar in the Add/Edit Event window, together with the "PHP session expired" message just a "Close" button is displayed, instead of a "Restart" button.
• In the Add/Edit Event window, the "Set Repetition" overlay has a new option "Rolling". A rolling event is an event that, once the start date has passed, will always "roll" to the current day. When a reminder has been set for a rolling event, a new reminder will be sent each day the event rolls to a next day. When the user deselects "Rolling", the event will stop rolling and remain fixed at the current day. Rolling events will help users who have a tendency to postpone their tasks.
• The way event sub-categories are stored in the calendar database has been made more flexible. The maximum number of sub-categories, which was four in the last calendar version, is now flexible and can be selected when editing a category. It is now also possible to copy all sub-categories of one category to an other category. Sub-categories present in previous LuxCal versions, will be automatically converted and preserved during the upgrade process to LuxCal V5.1.0.
• In month view the full-width event title line (from the left to the right margin of the day cell) is a hyper-link which can be clicked to open the event report window or the edit event window and can be hovered to view the pop-up box with event details. In previous versions only the event title text was a hyper-link.
• When on the Settings page in the "Events layout" template the extra fields were included and contained an image, the image would be shown on the calendar, even if on the Settings page "Show images in month view" was disabled. If "Show images in month view" was enabled, the image would be shown twice. This has been solved by removing images in the event title.
• The default number of days to search back and the default number of days to search ahead, which used to be fixed 365 days respectively, can now be specified on the admin's Settings page.
• On the User profile page, in the Change my data form a "Done" button has been added to return to the calendar page after the user data has been changed.
• On the Edit User Groups page in the Edit User Group form the interaction between the View and Add event categories check boxes has been improved. The (un)checking of the Add check boxes have been made subordinate to the (un)checking of the View check boxes.
• The log-in box on the Log In page has been made slightly narrower to make it also fit on a mobile phone in portrait position.
• A script, called cron.php, has been added to the !luxcal-toolbox folder. When multiple calendars have been installed, this script can be used to start multiple lcalcron.php scripts, using only one cron job. An explanation is given in the readme_cron.txt file.
• Several small stand-alone tools have been added to the !luxcal-toolbox folder in the LuxCal zip-file. These tools can be used to get information about your server and the PHP installation on your server.
• On the settings page, in the General section, the "Link to parent page" can now, besides a URL, also be a path relative to the calendar root folder.
Technical issues
• The token used to validate user inputs is now only used for forms. The token which was stored in a cookie (LXtkn) has moved as a hidden input to each form that directly affects the database. In combination with item number 2 hereafter this means that only pages with these forms will time out when the submission does not take place within the expiry time of the PHP session (24 minutes). Surfing the calendar pages which contain no forms affecting the db will not depend on PHP sessions and will therefore not time out when the PHP session expires.
• The last user selections (cP, cC, cU, cG and cD) were saved in a PHP session variable and, if on the Settings page Restore last user selections was selected, also in a cookie. Storing variables in two places is undesirable and therefore they are now always and only stored in a cookie. At the initial start of the calendar these values will be used if on the settings page Restore last user selections has been selected.
• The user rights (privs) were stores in a PHP session variable and used by the dloader. To reduce the dependency on PHP session variables, the dloader is now getting the user privileges from the database.
• To avoid duplication of code the code to produce the Side Panel in month, week and day view has moved to a the new file vfunctions.php. The dw_functions have also moved to this new file.
• Like for the calendar's month, week and day view, now also for the the calendar sidebar the event layout can be specified via a template with keys.
• In the alert.php file the HTML lang tag is set to the language corresponding to the ISOCODE in the active ui-{lang}.php file.
• The regex to extract side panel info messages from the file info.txt has improved, so that only messages are extracted where there are no other characters but spaces in front of the ~ (tilde) character of the month number.
• On the Settings page PHP info hyper-link replaced by a button.
• The code to submit the event edit form when a new category is selected has changed from onChange="document.forms['event'].submit();" to onChange="this.form.submit();". Code simplification.
• When in the Add/Edit Event window a category is selected for which a repetition has been specified, the "Change repetition" button is suppressed. Category repetitions always overwrite.
• In the previous version, when in the event layout template, between two separators one #-parameter resulted in an empty string, the whole section was omitted. This has changed: now the whole section is omitted when ALL #-parameters between two separators result in an empty string.
• Since many ISPs only accept PHP mails being sent from an email address hosted on the same server as the calendar, the "From" field of all emails will always be the calendar email address. When on the Settings page, in the section Periodic Functions the "Add 'Reply To' field" has been checked, emails will contain a 'Reply to" field with the event owner's email address.
• Since not all ISPs accept PHP mails with a blank 'To' field the 'To' field is now set to the calendar email address. In addition, to make the source code of emails better readable, after each </tr> and <br> tag, a crlf (\r\n) has been added.
• The link rel="canonical" has been removed from the page header because is was not useful.
• Rather than passing the current calendar ID in the calendar's head section via a parameter in the style sheet URL, the style sheet is now getting the calendar ID directly from the LXCcid cookie.
• The URL for valid time zones updated to https://www.php.net/manual/en/timezones.php.
• For a new installation of the calendar the initial language for the administrator is set to English. In the previous calendar version it was not set and resulted in Bulgarian (first in the list).
• To prevent session fixation attacks, the PHP session ID is regenerated each time the index.php file runs.
Bug fixes
• Due to an erroneous style ("body {overflow:hidden;}") the calendar pages can not be scrolled on a mobile device. Solved.
• In the Add / Edit Event window, when there are two consecutive separator characters (;;) in the Send mail's "To" field, a PHP notification message was shown. Solved.
• For events in Week and Day view, falling outside the active day hours, the event layout template from the Settings page was not used and always resulted in: start time followed by event title.
• When the Help window overflowed and the content was scrolled up, the overflow part did not have the correct background color.
• There was an error in the backupDatabase function. The PRIMARY KEY (`ID`) directive at the end of the CREATE TABLE commands was mistaken for a table field by the regex. When trying to import the .sql backup file, this resulted in an SQL error.