The EU's General Data Protection Regulation, aka "GDPR", which was adopted April 2016, will be enforced as of 25 May 2018. The regulation contains provisions and requirements pertaining to the processing of personally identifiable information.
Although the LuxCal calendar is using cookies and does not ask users to accept the use of cookies, we believe the calendar complies with the GDPR. As required by the GDPR we are applying data protection by design and default in the following way:

  • the calendar does not use so-called tracking cookies,

  • the calendar is only collecting the calendar ID (e.g. 'mycal') and numbers (i.e. User ID, and the current page, category, group, language) which are meaningless to other parties; so no sensitive data is stored in the cookies,

  • the data stored in cookies is serialized and as such not understandable by the human eye.

If you prefer, you could of course add a notice on your calendar web page saying that the calendar is using cookies and is compliant with the EU's GDPR.
Roel

527

(2 replies, posted in Need Help)

Hi Meena,

Like Dan said above, I assume you have created a MySQL database. If so, then "problem connecting to database" means one of the following parameters you entered during the calendar installation is wrong: db host, db username, db password or db name.

Again like Dan said above, if you have difficulty to get the MySQL database connection working, I suggest to install the SQLite version of the calendar, which has exactly the same functionality, is very fast and easier to install.

Roel

528

(5 replies, posted in Need Help)

Fred,

In the To section a file with or without file extension can be specified. When the extension is omitted, the default .txt will be assumed.

It is strange that if the cron job summary report says emails have been sent, but the recipients did not receive any. This means that the PHP mail function executed successfully, but the produced emails were not delivered by your server. (I remember from other posts from Dan and Schwartz that some ISPs require the sender email address to be registered with the ISP!?)

As said in an earlier post the cron job starting the lcalcron.php script should run early in the morning and it must run before 12 noon! If it runs after 12 noon, it is considered to be running for the next day. (This is done to best cope with reminders sent to different countries with different time zones.).

Roel

529

(5 replies, posted in Need Help)

Hi Fred,

Is it the MySQL or SQLite calendar you used for this notification test?
Did the cronjob summary say that email notifications were sent to the recipients in your text file?
At what time did your cron job run? It should normally run early in the morning, but it MUST run before midday of the day the notifications should be sent.

Since you gave me FTP access, I took the liberty to look in your log files and I saw that in your MySQL luxcal.log file that the last cronjob was aborted, because the remote IP address of the cron job service had changed and did not match the one specified on the Settings page.

Roel

530

(24 replies, posted in Need Help)

Hi Fred,

I'm sorry for all this hassle and I do understand you get frustrated.
Don't give up; this calendar is used by many people and we must get it to work.

I have a few remarks and suggestions . . .
Remarks:
Going back to your post yesterday at 16:09 . . .
Under point 5. you said you received a blank page when running the lcalcron.php script manually. This is correct, this scrip does not produce any output (unless there are errors) because there is no need to send output to cronjobs. So no output means it ran successfully. Also the cron.png image shows that the script ran successfully.
Under point 4. you said you received the same error message as the day before  (the one with SQL error . . . Query string: SELECT `name`,`value` FROM `alumni_settings`). This would normally not be possible; if there is no table `alumni_settings` in the database, there can be no error related to this table. I don't know, maybe the cronjob started a different calendar!?
Both points above show that starting lcalcron manually works and the cron job coming from cron-job.com works, but most probably starts the wrong lcalcron.php script. So we should look at this last problem.

Suggestions:

1. Taking your SQLite calendar, give it one more try and do the following:
a. Create a test event for tomorrow and check the "Send mail now" check box and specify 1 day(s) before event and fill in your email address (if not done already) and hit the Add and Save button. Now you should get 1 email message.
b. Go to the settings page and in the section Periodic Functions ensure that the Cron job host is set to "remote"
c. Start the lcalcron.php script from your browser. This must be done before midday. Now you should receive 2 mail messages, a reminder and a cron job summary.
If so far all works well, the only thing left to do is set up a cronjob, so . . .
d. The URL http://www.fredsfollies.com/fsptracker/ in your last post does not exist. Correct this and try again.
If this also works, then on the Settings page, in the section Periodic Functions check Cron job host "IP address" and fill in the IP address of cron-job.com.

2. Give me temporarily FTP access to your calendar folder on your server (send me the credentials by email) and create a user account for me with admin rights in your SQLite calendar. I will then analyze the problem and make sure that periodic functions work.

Roel

531

(24 replies, posted in Need Help)

Fred,

1. Yes, this is certainly possible.
3. Most PHP installations have both PDO-MySQL and PDO-SQLite installed. If you want you can check this by going to the calendar's settings page and under General select "Show info"  just after the PHP version (2nd line from the top). When selected, you will get the PHP page with all installation details. Now you can search for the "PDO" section (somewhere half way) and directly thereafter you will find which databases are enabled.

Roel

532

(24 replies, posted in Need Help)

Fred,

Now I understand what's going wrong. What's happening is the following:
The lcalcron.php script will search the database for installed calendars and it does this by looking for table names xxxx_settings (e.g. mycal_settings, pools_settings). Coincidentally and unfortunately Admidio also has a table called settings with a prefix in the format xxxx_. So the lcalcron.php script thinks that there is a calendar with name alumni and tries to read the alumni_settings table which results in a SQL error sad

There are several solutions:
1. You separate the databases of the Admidio application and the LuxCal application.
2. I will change the lcalcron.php script for you, so that it will not look for xxxx_settings tables, but instead for e.g. xxxx_styles tables to find the installed calendars.
3. You will use the SQLite version of the LuxCal calendar.

Solution 1 will not be possible if you have run out of databases.
Solution 2 has the disadvantage that you will have a dedicated lcalcron.php script (future upgrades).
Solution 3 would be my choice. No disadvantages, exactly identical functionality.

Please let me know your preference and I will help you.

Roel

533

(2 replies, posted in Need Help)

Hi there,

Yes, this can be easily done as follows:

  1. On the admin's Categories page of the calendar create a category with the check mark (2/3 from the top) checked. So now you will have an event category for ToDo events. Remember the category ID! If you already have a ToDo category, you can of course skip this step.

  2. Edit the file display2.php and in the General Settings change $header to "To be done" (or whatever you want) and in the Filters set $cats to the ID of the ToDo category (remembered above).

Now only events created in this ToDo category will appear in your display2.

In case of problems, please let me know.
Roel

Hi there,

This problem is solved in LuxCal V4.6.1, which we released 2018-04-24 (yesterday). A couple of other issues were solved as well in this new version. So best would be to upgrade.
Or otherwise edit the file common/toolbox.php and change line 16 to . . .

$rxEML = '~(^|\s)([^@\s]{2,40})@((?:[^@\s\.]{2,30}\.)*[^@\s\.]{2,30}).(\w{2,6})(?:\s*\[([^<>\[]+?)\])?(\.|\s|<|$)~im'; //jd@skyweb.com [title]

Disabling the checking would require a program change, which is not recommended.

Roel

Highlights
This new LuxCal version 4.6.1 has a few important new features and has some technical issues and bugs fixes.
Hereafter you will find a full summary of all changes since LuxCal version 4.6.0 . . .

This new release was tested with the help of the best beta tester of the universe: John from Denmark!

New features/Improvements
• A contact button has been added to the navigation bar, which opens a Contact page which can be used to send a message to the calendar administrator. When  a contact message is sent, the user will receive a confirmation message. This feature can be enabled / disable on the admin's Settings page in the section Navigation Bar.
• It is now possible to add a logo image with a maximum height and width of 70px to the left upper corner of the calendar. The logo image file should be loaded to the server and it can be activated on the admin's Settings page, in the General section, by specifying the path to the logo file. If a URL back link has been specified as well, the logo will become the back link.
• The layout of all email messages send by the calendar have been standardized and embellished. If a logo (see above) has been activated on the Settings page, it will also appear in the left upper corner of all email messages.

Technical issues
• To show the PHP installation details, the PHPinfo page can now be started via the admin's Settings page in the general section, under versions. This makes the phpinfo.php file in the LuxCal toolbox redundant.
• On the admin's Settings page, a validation check has been added for the specified time zone. In the past entering an invalid time zone resulted in many warning messages.
• The isMobile function uses the user-agent string. Because this string is not always supplied a test has been added to check it's presence.
• Function calBaseUrl could not be used from the script lcalcron.php and has been replaced by the function calRootUrl.
• Several discrepancies solved in the administrator interface texts.

Bug fixes
• Due to a bug, for users without administrator rights the Options panel button was not displayed. Solved.
• Problem in the email validation patterns which makes the validation of mail addresses ending on .xxx.yyy, like tom.dowd@mymail.com.uk, and addresses with hyphens, like tom.dowd@my-mail.com, fail. All email validation patterns have been improved to cope with more dots and with hyphens in the domain part of the email address.
• For the MySQL version only: when editing one occurrence of a multi-day or repeating event, the retrieval of the event ID of the new event failed. So when the user saved the new event without closing the Event window and then tried to edit the still displayed event, it failed. Solved by using function dbLastRowId() of the toolboxd.php to get the ID of the last inserted event.

536

(3 replies, posted in Problems)

Hi Stefan,
I was very sure, but not anymore neutral
I guess you are right, for MySQL it should be LAST_INSERT_ID(). Strange that MySQL does not produce an SQL error.
I further investigated this problem and found out that when editing a single occurrence of a repeating or multi-day event and selecting the Save button (so without closing the Event window) and thereafter changing the same event failed because the event ID of the event was not available.
The dbLastRowId() function solves this problem.
Very good that you found this error !
Roel

537

(3 replies, posted in Problems)

Hi Stefan,

It's not a bug. The code . . .

$stH = stPrep("SELECT last_insert_rowid()");
$row = $stH->fetch(PDO::FETCH_NUM);
$stH = null;
$eid = $row[0]; //set id to new event

has the same effect as . . .

$stH = null;
$eid = dbLastRowId(); //set id to new event

However, since the function dbLastRowId() is already used some 18 lines up, I agree - for consistency reasons - it would be better to use this function. I will change this for LuxCal v4.6.1.

The purpose of the code is the following:
When a user chooses to edit one specific occurrence of a repeating (or multi-day) event, then this occurrence will be removed from the repeating (or multi-day) event and a new event will be created to replace the removed occurrence. The code to get the ID of the last added row makes the newly added event the currently active event.

Thanks for reporting this,
Roel

538

(8 replies, posted in Need Help)

Thanks Mark,
I've solved the problem for the calendar as well as for the Contact Us page. Both were using the same erroneous validation pattern (regex).
If you upload the two files I've sent you by email, the problem will be solved.

Roel

539

(8 replies, posted in Need Help)

Hi Mark,
I would like to have your email address that is not accepted, could you send it to me via the Contact Us page please.
I'm about to release calendar version 4.6.1 and would like to fix this problem before.

Thanks,
Roel

540

(4 replies, posted in Problems)

Hi Dilbert,

I suggest to export the calendar database to a .sql file, for instance using phpMyAdmin, as soon as possible and send it to me via the email address at the bottom of the Contact Us page. I think you are  in the USA, so if you send me the file by the end of your day, I will work on it while you are asleep and send the upgraded database back to you next day.
Roel

541

(4 replies, posted in Problems)

Hi Gilbert,

The column name sendSms is a valid name and therefore it is hard to say what went wrong.
Could you export the database from your 4.5.2 version to a .sql file and email this file to me. I will then analyze the problem, upgrade the file to 4.6 and send it back to you. Thereafter you can import the file in your v4.6 calendar and all should be fine.
Roel

Hey Dan,

This bug has not been fixed yet in the download, because I don't want to bring out a new calendar release just for one bug. But it will surely be fixed in the download of the next calendar release.

Cheers,
Roel

There is a bug in the LuxCal calendar version 4.6.0, which makes the Option button disappear for users who have no administrator rights.
To solve this problem, edit the file common/header.php and change line 410 from . . .

$options = ($dbSel and $usr['privs'] == 9) or $set['viewMenu'] or $set['groupMenu'] or $set['userMenu'] or $set['catMenu'] or $set['langMenu']; //menus

to . . .

$options = (($dbSel and $usr['privs'] == 9) or $set['viewMenu'] or $set['groupMenu'] or $set['userMenu'] or $set['catMenu'] or $set['langMenu']) ? true : false; //menus

Thereafter the Options button will be visible to all users.
Roel

Hi Phil,
That's hard to say. I still believe the most likely problem is that the styles are not refreshed.
Do you maybe display the calendar in a frame or an iframe? If so, then just ctrl F5 is not enough, but the (i)frame contents should be refreshed (Firefox: right click in frame - This frame > Reload frame).
Roel

Hi Phil,

I tried to reproduce this problem, but when I press the Print button on the Upcoming Events page, my printed report looks normal.
It surprises me, because nothing changed related to neither the Upcoming Events page, nor to the Print function.
Could you please try again, but before printing, reload/refresh the Upcoming Events page in your browser, just to be sure that the latest style sheet is loaded.

Roel

When you are using your own server and you are using SMTP mail to send email notifications, and no notifications are sent, then use the smtptest.php script to test your SMTP mail settings. You can find the file smtptest.php in the LuxCal download zip-file -> toolbox.zip -> smtpmail.
When you use the smtptest.php tool and you get error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, then maybe the link https://github.com/composer/composer/issues/3346 could be of help.

I've also copied the post with the solution below.
Roel

github wrote:

Finally I found the answer wink
First: Check the certificate file location which will be in default_cert_file key, you will find it in openssl_get_cert_locations() it's php openssl function:

$ php -r "print_r(openssl_get_cert_locations());"
Array
(
    [default_cert_file] => /opt/lampp/share/openssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /opt/lampp/share/openssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /opt/lampp/share/openssl/private
    [default_default_cert_area] => /opt/lampp/share/openssl
    [ini_cafile] => 
    [ini_capath] => 
)

Second: Download http://curl.haxx.se/ca/cacert.pem:

$ wget [url]http://curl.haxx.se/ca/cacert.pem[/url]

Third: Copy certificate PEM file into default_cert_file location:

$ sudo mv cacert.pem /opt/lampp/share/openssl/cert.pem

My php-cli is under XAMPP and default_cert_file maybe point to some place that is different than this.
I hope anything after that should go fine with you brothers.

Remember that when you are successfully logged into the calendar, your username is shown in the right upper corner of the calendar.

When you log in and get no error message, but effectively the log in was not successful (your username does not show in the right upper corner), then most probably the session mechanism of the PHP installation on your server is not working.

If the PHP sessions are not working, there can be several reasons . . .
• In the PHP installation the sessions are disabled. This normally is never the case.
• In the PHP installation the "session.save_path" is incorrect or blank. This is most of the time the problem.

You can check the PHP sessions installation by launching with your browser the phpinfo.php file (part of the toolbox.zip file). In calendar versions 4.6 and greater, you can open the admin's Settings page and at the top of the page right next to the PHP version number select "Show Info" .
This will show a page with all PHP installation settings. If on this page you search for "sessions", you will find the Sessions section and close to the end of this section you can see if the "session.save_path" has been specified.
Normally you can specify this path in the php.ini file on your server (or ask your ISP to specify a valid path). A good educated guess for a valid session.save_path would be "/tmp".
Roel

For LuxCal 4.6.0 when optimizing the validation rules for email addresses, an error was introduced in the validation pattern (regex). Because of this error email addresses ending on .xxx.yy, like tom.dowd@mymail.com.uk, will not pass the validation.
This problem will be fixed in the next LuxCal release.
You can solve this problem yourself by editing the file common/toolbox.php and replacing lines 12 - 16 by the following lines . . .

$rxEmail = '~(?:^|\s|:)([^@\s]{2,40})@((?:[^@\s\.]{2,30}\.)+\w{2,6})(?:\.\s|\s|<|$)~im'; //jd@skyweb.com

$rxEmailX = '~^(?:[^<@]*<)?([^@\s]{2,40})@((?:[^@\s\.]{2,30}\.)+\w{2,6})>?$~i'; //John D. <jd@skyweb.com>

$rxEML = '~(^|\s)([^@\s]{2,40})@((?:[^@\s\.]{2,30}\.)*[^@\s\.]{2,30}).(\w{2,6})(?:\s*\[([^<>\[]+?)\])?(\.|\s|<|$)~im'; //jd@skyweb.com [title]

Use cut and paste wink

Roel

This issue only applies to LuxCal versions 3.2.3 or lower; so if you upgraded to LuxCal v4 or greater there is no problem.

If all your events all of a sudden show an end time of 3:00, then most probably your ISP upgraded the MySQL software on your server.

The problem can easily be solved by applying the following change to the files "common/retrieve.php" and "common/retrieve2.php":
Change retrieve.php - lines 61 - 62 and retrieve2.php - lines 50 - 51 from . . .

     DATE_FORMAT(e.s_time,'%H:%i') AS sti,
     DATE_FORMAT(e.e_time,'%H:%i') AS eti,

to . . .

     SUBSTR(e.s_time,1,5) AS sti,
     SUBSTR(e.e_time,1,5) AS eti,

This change can be applied at any time, even if the problem doesn't show up (yet) in your calendar.

Roel

You want to embed in your web page a stand-alone sidebar with upcoming events, as shown on the LuxCal Demo page.
You've nicely added the following two lines to the head section of your index.html page:

<link rel="stylesheet" type="text/css" href="mycalendarfolder/css/css_sbar.php">
<script type="text/javascript" src="mycalendarfolder/common/toolbox.js"></script>

and within the body you've added the following PHP-code:

<?php
$sbHeader = 'My Upcoming Events';
include './mycalendarfolder/lcsbar.php';
?>

all exactly as described in the LuxCal installation_guide.html.
However, the sidebar does not show :o

Because . . . you have forgotten to rename your index.html page to index.php