LuxCal Forum

The place for questions, suggestions and news about the LuxCal Event Calendar

User:   Password:   Remember Me?   
LuxCal Forum / LuxCal / What's New / LuxCal 4.2.2M - MySQL: Released: 2015.10.06
Posted:  06 Oct 2015 11:38   Last Edited By: Roel B.
This LuxCal version is a major upgrade of the calendar, where the deprecated PHP's MySQL database extension, deprecated as of PHP 5.5.0, has been replaced by the recommended PDO (PHP Data Objects) abstraction layer. Furthermore this new version contains a whole host of new functionalities, improvements and bug fixes:

- Complete overhaul of the database interface, replacing the deprecated PHP's MySQL database extension by the recommended PDO (PHP Data Objects) abstraction layer.
- User groups, for which the rights and the available event categories can be specified, have been introduced. Users are assigned to user groups.
- When adding/editing event categories, a "Day color" check box can be checked with the following effect: The full background of the days on which an event belonging to such a category falls, will get the color of this category. This can be useful for instance to highlight bank holidays, birthdays, etc.
- A new option has been added to the admin's Settings page to enable/disable the display of images in the day cells of the Month view page. Previously in Month view images were only displayed in the hover box.
- On the admin's Settings page, the extra event description fields, extra field 1 & 2, can now each be set to "admin only", which means the field is only visible to users with manager or admin rights.
- The current date in the title bar of the calendar has been made a hyperlink which, when selected, will return the calendar to the current date. This is a short-cut for selecting 'Today' in the date picker.
- In the Event window, the repetition interval for days, weeks, months and years has been made more flexible and is now freely selectable from 1 - 99.
- When a user added an event which needs approval, the event was not visible any more to the owner of the event until after approval by the manager. This has changed; events which need approval and have not yet been approved, remain visible to the owner of the event.
- On the Search page, a blank search text or a single ampersand is now allowed and will match any text, and therefore each event. This can be useful to display all events within a certain date bracket.
- For email notifications, sent via the PHP mail function, the email will be sent to the recipients as Bcc (Blind carbon copy). This will avoid exposure of email addresses.
- In the event report, for repeating events, the date selected by the user will be displayed, rather than the first date of the repeat range.
- Several vunerabilities solved: Spoofed form submission (CSRF) solved by using a one-time token for each HTML form. SQL injection vulnerability solved. The GET variables were not validated. When a spoofed form submission, or an SQL injection attempts (illegal GET-values) occurs, it will be logged in the luxcal.log file.
- For security reasons a time out value of 5 minutes has been introduced for log in, registration and change my data actions. If the log-in page is displayed for more than 5 minutes without pressing the Log In button, logging in will fail.
- In the 'repeat' overlay of the event window, the three radio buttons are now automatically selected when one of the corresponding repeat values is clicked.
- Adding the empty parameter cD to the calendar URL, e.g., will force the calendar to the current date.
- Sort button added to category list to sort categories on name.
- Improved handling of expired PHP sessions.
- New language packs: Slovene - translation by David, Bulgarian - translation by Radoslav Yovev and Greek - translated by Icehockey.
- Updated language packs: Czech - updated by jose_s and Russian - updated by 0x3.
- The texts "Test mail" and "This test mail was sent ..." in the test mail which can be sent from the Settings page has moved to the language files and consequently can be defined per language.
- Question mark from the event form moved to language files. Not all languages use the question mark character (?) for questions.
- Event sorting (after retrieval) made more logical. Events are now sorted on start time and date/time of event creation, with the last added event at the top.
- Maximum length of the fields title, venue, extra field 1 and extra field 2 increased from 64 to 100 characters.
- For the stand-alone sidebar A new parameter $sbWeekDay has been added. With this parameter it is possible to specify a specific week day (Monday, Tuesday, etc.) for which events should be shown.
- The 'date modified' is set only if the time between adding and updating an event > 10 minutes. This is done to give the user 10 minutes to correct for instance typing errors.
- For the venue field in the Event window auto-complete functionality has been added for all venues used in Month view.
- When importing a CSV file or iCal file, all-day events are shown with a blank start time and end time (rather than 00:00 and 23:59). Parsing of the CSV input file improved. Check for header line before ignoring, blank time fields result in all day events, the last four fields (end date, start time, end time and description) may be omitted, if not used. So the minimum number of fields per line must be 4. If one of the lines has less than 4 fields, an error message is displayed.
- Instructions and files to implement LDAP integration have been added to the LuxCal toolbox folder. The LDAP Integration module has been produced by Martin Dziobek, HLRS Uni Stuttgart. For further details see the README.txt file in the ldapmod folder in the LuxCal toolbox.
- Dedicated color for header titles added to the lctheme.php file. So now, if the background color for headers is set to a dark color, the header text can be set to a contrasting color.
- Toolbox (lctools.php) for multiple calendars completely revised and improved.
- like for the full calendar, the event categories to be displayed in the mini calendar can now also be specified in URL of the mini calendar with the "cC" parameter. E.g.[]=4&cC[]=6.
- Style of radio buttons and select-boxes improved for better alignment.
- The database related functions have been moved to a separate script. This is done to make the calendar scripts as much as possible independent of the selected database type (MySQL or SQLite).
- The previous error logging function has been changed into a general message logging function, which can be used to log any kind of message.
- At the end of the cron job script a message is logged, saying the cron job completed correctly. This can be useful for test purposes.
- The regular expression for URL validation has been changed to accept top-level domain names of up to 15 characters.+10
- Date in RFC format added to email headers to avoid emails to be identified as spam by e.g. spamassasin.
- To improve the rendering speed of the calendar pages in the browser, external Javascript scripts, except toolbox.js, are now loaded asynchronously.
- Not to waste space, for the 'repeat' overlay, the left and right margins of the options in the select fields have been reduced to 2px.
- Viewport definition added to styles, to improve the initial display of the calendar on mobile devices.
- Function isMobile updated to the latest standards.
- Arrow and cross images replaced by unicode characters. Redundant image folder removed.
- The close button (X) of the Upcoming and Todo sidbars now turns red on mouseover.
- The JavaScript drag functions, to drag the Upcoming and Todo sidebars, have been simplified.
- Many more minor changes and improvements.

Bug fixes
- In the cron job summary, in the list of sent reminders each reminder sent should be displayed on a separate line (<br> added).
- Shrink wrapping in the options panel didn't work properly. Size of panel minimized.
- updating user login dates and login counter fixed and simplified.
- When reloading the main calendar page use 'location.href' instead of 'location.reload', to avoid 'resend info' request.
- When in the event check window the checkbox is (un)checked and Done is selected, the window should not be displayed any more, as this will result in undefined variables ($tit and $clb).
- When searching for text, the highlighting of the text found only worked for the event title. Changed so that the found text is highlighted in all fields.
- When the admin disables the mail server, the 'send mail' section in the Event window is suppressed. As a side effect however, also other mail functions, like sending an email with password after a self-registration, were disabled. This has been corrected, other mail functions will now revert to PHP mail when the mail server is disabled.
- The inconsistent processing of single and double quotes in the fields title, venue, description, extra field 1 and extra field 2 has been solved.
- Problem in function 'unregisterGlobals' solved. This problem occurs if in the php.ini file register_globals are turned on.
- When on the Settings page in the Event template - General views the 'date/time added/edited and the associated users' (7) was not specified, then these data were still present in the event report. This has been solved.
- Data types in db table definitions normalized. The data types in the database of the MySQL version of the calendar are now identical to the datatypes in the SQLite version of the calendar. Row names have been wrapped in back-ticks (`) to avoid interference with reserved words in the database.
- The user's last selections should only be restored for logged in users.
- After changing the time slot duration in day/week view, it always reverted to 10 minutes in stead of keeping the latest value. Solved.
- Validation error in the daily exported iCal events file, caused by the two extra fields, solved.
- Private events are now flagged as "private" in the generated iCal file (CLASS:PRIVATE).
- When the admin edits its own user account the groupID got lost and thereafter the user account was not visible any more. Solved
- When importing a CSV file, imported multi-day events were shortened by 2 days. Solved.
- Many more other minor bugs fixed.
Posted:  09 Oct 2015 12:12
Hello Roel,

Congrats on the updated release of LuxCal. Does it require PHP 5.5 or will it run on PHP 5.4?

"Little Guy"
Some own motorcycles, others ride them.

Find great LuxCal examples by Schwartz at
Posted:  09 Oct 2015 12:14
Never mind, I just found it.

Server / Browser Requirements

LuxCal is written in the PHP scripting language, uses an SQLite or a MySQL database to store its data and thus runs on a server which supports PHP and - for the MySQL version - MySQL. LuxCal produces valid HTML5 code and has been tested with recent versions of Firefox, Chrome, Opera, Safari and IE.


    Server: PHP 5.3 or later (for the SQLite version of LuxCal the PHP Data Objects extension is required)
    Server: MySQL 5.0 or later (only needed for the MySQL version of LuxCal)
    Browser: JavaScript enabled and cookies accepted
"Little Guy"
Some own motorcycles, others ride them.

Find great LuxCal examples by Schwartz at
Posted:  20 Oct 2015 11:03   Last Edited By: Gork
Hello!  While I haven't been actively using LuxCal I LOVE your script, and have been waiting eagerly for an update to the MySQL release.

Unfortunately I was unable to update to 4.2.2M from version 3.2.3.  I deleted the contents of the luxcal directory except for the lcconfig.php file.  I then moved the contents of the archive to the luxcal directory and chmod 777 lcconfig.php.  When I then visit the luxcal directory from a Web browser I get an empty browser window which only indicates 'Calendar '' not found.'  I did check the lcconfig.php file afterwards and it does contain the proper information.

Btw, I did try to post this in the support forum here but was met with a "fatal error" when I clicked the Submit button.
Posted:  30 Oct 2015 01:54
Ok, disregard my post above about not being able to upgrade to 4.2.2M.  I just tried again and the upgrade worked fine.  I'm not sure what was causing the problem, but my guess is that it had to do with unzipping the archive improperly and files missing because of it.  What I did differently this time:

I downloaded the archive fresh.

I copied the full archive over to my Linux computer instead of unzipping "sub-archive" from within Windows first.

I extracted the calendar files from with archive located in the Linux file system.  (Instead of using file-roller in Linux to unzip the archive while the archive was located on a network share.)