- Installation/Setup
  - How do I setup PHP, MySQL and Apache on Windows?
  - How do I setup PHP, MySQL and Apache on Mac OS X?
  - How do I setup PHP, MySQL and Apache on UNIX/Linux?
  - I've finished the install. What is the login to WebCalendar?
  - I want to use WebCalendar as an events calendar for my organization. How do I set it up to do this?
  - How can I add holidays to the calendar?
  - Why are deleted events still present in the database?
  - Can I setup more than one public calendar?
  - How do I change the title "Public Access" at the top of the calendar?
  - Can I embed WebCalendar as a component on another web page?
  - How do I customize the appearance of WebCalendar so that it matches the rest of my site?
  - How do I add a new translation?
  - How do I update an existing translation?
  - During Import, I receive this error: Unknown Timezone: XXXXX defaulting to GMT.
- Troubleshooting
  - I get error messages about undefined variables when I try to view any page.
  - I receive an error message saying "Error removing temporary file" or "Cache error".
  - I receive an error message saying "Failed opening 'includes/...' for inclusion ..."
  - I get an error message from PHP saying "Call to undefined function: ..."
  - When I try and view certain pages, nothing happens for 30 seconds, then I get a time-out error.
  - I get an error message that says "Can't connect to local MySQL server through socket '/tmp/mysql.sock'."
  - I am not receiving any email messages from WebCalendar.
  - Some of the pages are displaying text in English rather than <insert your language here>
  - The text that I entered in the Custom Event Fields is not being translated to different languages.
  - How do I get the most recent version of WebCalendar?
  - I get a database error indicating table webcal_config does not exist.
  - I get a database error from MySQL that says "Client does not support authentication protocol."
- Usage
  - Why do weeks start with Sunday instead of Monday?
  - Can I sync events with Palm/PocketPC/Outlook/iCal?
  - Why can't I edit an event that another user added to my calendar?
  - I'm trying to add a user as a participant to an event, but they do not show up in the list of users.
- Developing
  - Why aren't you using PHP sessions?
  - Why aren't you using ADODB for database access?
  - Why aren't you using the PEAR database functions?
  - Why aren't you using a template engine like smarty?
  - How do I install a patch?

How do I setup PHP, MySQL and Apache on Windows?
  The easiest way to do this is to try one of the prepackaged bundles that will install all of these for you:
  - XAMPP
How do I setup PHP, MySQL and Apache on Mac OS X?
  You can use the built-in Apache/PHP installed on Mac OS X. However, this does not include MySQL. An easier way to setup WebCalendar would be to use one of the following packages:
  - XAMPP
How do I setup PHP, MySQL and Apache on UNIX/Linux?
  There are many online instructions on how to do this. Here are a few:
  - PHP.net
I've finished the install. What is the login to WebCalendar?
  After the initial creation of the database tables, there will be a single user account created with the username "admin" and the password set to "admin" as well.
  Note: This account is intended to get your started. You should create a new admin account and delete this one.
I want to use WebCalendar as an events calendar for my organization. How do I set it up to do this?
  You will want to setup WebCalendar to use public access.
  1. Setup your settings.php file as a multi-user system (see instructions).
  2. In System Settings, set "Allow public access" to "Yes."
  3. If you want people to be able to submit new events through public access, set "Public access can add events" to "Yes."
  4. If you set "Public access can add events" to "Yes", set the setting for "Public access new events require approval" to your liking. If you set this to "Yes," an admin user will need to approve any new events before they will appear on the public access calendar.
  5. Login using one of the accounts you have setup. Add a new event, and select "Public User" as one of the participants.
  6. If you have enabled "Require event approvals" in your System Settings, then you will need to approve the new event. Choose the "Unapproved Events" at the bottom of any page (you must be an admin user to access this). You will be presented with a list of unapproved events (for both the current user and for the Public User account). Approve the new event for the Public User.
  7. Go to the Login page. You will see a "Access public calendar" link that will bring you to the calendar for public access.
  8. By default, the index.php page should send users to the public calendar.
How can I add holidays to the calendar?
  There is no built-in support for holidays because it is not necessary. You can add holidays into WebCalendar by importing one of the many iCalendar holiday files that are freely available. If you don't want each individual user to have to import the holiday calendar, you can use nonuser calendars. First, make sure nonuser calendars are enabled in your system settings. Then, from Admin->Users, you can access nonuser calendars. Create a new nonuser calendar (such as "usholidays"). Then, notify your users that they can add this nonuser calendar as a layer to their own calendar in order to see the holidays.
Why are deleted events still present in the database?
  When you delete an event from your calendar, it is not deleted from the database. Instead, it is marked as deleted. This allows the system administrator access to information even after it is deleted.
Can I setup more than one public calendar?
  You cannot directly setup two public calendars. However, there are two options for emulating this type of functionality:
  - You can create global categories and point users to the calendar with only a certain category displayed.
  - You can setup multiple NonUser calendars and enable public access viewing of other users' calendars. You can then link directly to the calendar of one of the NonUser calendars, or you can setup a view that contains the calendar of one or more of the NonUser calendars.
How do I change the title "Public Access" at the top of the calendar?
  In the file translations/English-US.txt, change the line that says "Public Access" to what you want it to say on the right side.
  Example:

      Public Access: Foobar Event Calendar

Can I embed WebCalendar as a component on another web page?
  WebCalendar is meant to be run as a standalone web application. You can customize the appearance of WebCalendar to match your existing site. To do this, In System Settings, set both "Custom header" and "Custom trailer" to "Yes" and press the "Edit" button to enter the header and trailer content.
  If you are looking to just include a list of upcoming events in one of your web pages, you can use the upcoming.php page in WebCalendar to do this. Edit the top of this file to configure options. (These settings will likely move into System Settings in subsequent release.) You can then use an iframe elsewhere on your web site as in the example below:

      <iframe src="upcoming.php" style="inline-size: 300px; block-size: 250px;" scrolling="yes"></iframe>

  Include this HTML anywhere on any of your pages. By default, the events from the public calendar will be loaded (so you must have "Public Access" enabled in System Settings). You can override this with another user's calendar. (See upcoming.php for instructions on this.)
  If you would like to display a small calendar (like the ones on the month view), you can add the following example. There are some configuration options available in the top of this file as well. You can then use an iframe elsewhere on your web site as in the example below:

      <iframe src="minical.php" style="inline-size: 180px; block-size: 200px;" scrolling="yes"></iframe>

How do I customize the appearance of WebCalendar so that it matches the rest of my site?
  You can customize the appearance of WebCalendar to match your existing site. To do this, In System Settings, set both "Custom header" and "Custom trailer" to "Yes", and press the "Save" button. Then click on the "Edit" button to enter your site content. The custom header will be included after the document's HTML `<body>` tag but before any WebCalendar content. The custom trailer will be included after the WebCalendar content and before the document's HTML `</body>` tag. If you want to add JavaScript or Stylesheet data, you can use the "Custom script/stylesheet" option on the same System Settings page. Any content entered will be included within the document's HTML `<head>` section.
How do I add a new translation?
  It's a fairly simple process. If you've ever translated a C-based app that used GNU's gettext tool, then you'll have no problem. The I18N support was based on GNU's gettext. Here's what you need to do.
  1. look in the "translations" directory
  2. copy the English-US.txt file into what you'd like to call your language data file. (e.g. cp English-US.txt French.txt)
  3. Now translate all the text to the _right_ of the ": " into the new language. Do not alter the text to the left of the ": ".
  4. When you're done making changes, move into the "tools" directory. Run the check_translation.pl script on your new data file to make sure you have all the needed translations. (e.g. perl check_translation.pl French)
  5. Add the new language to both the $languages array and the $browser_languages arrays defined in includes/translate.php.
  6. Test it out...
  7. Create a pull request on Github.
How do I update an existing translation?
  Just open up the translation file in the translations directory with your favorite text editor (like vi, vim, emacs, pico, Notepad, etc.). In particular look for places where missing translations are indicated. All missing translations should be marked with a "<< MISSING >>" note. and typically the English version of the translation will also be included on the following line (as in the example below):

      # << MISSING >>
      # Edit:
      #

  For some text, an abbreviation may be used rather than the English text. In those cases, the full text will be noted as in the following example:

      # << MISSING >>
      # custom-script-help:
      # English text: Allows entry of custom Javascript or stylesheet text that
      # will be inserted into the HTML "head" section of every page.
      #

  When you're done making changes, move into the tools directory. Run the check_translation.pl script on your new data file to make sure you have all the needed translations:

      perl check_translation.pl French

  Create a pull request on Github.
During Import, I receive this error: Unknown Timezone: XXXXX defaulting to GMT.
  This is a notice that your import file contained unknown timezone information. WebCalendar will simply save the event or task as GMT. You are encouraged to submit these notices as a new Issue on Github, so that WebCalendar can improve its TZID support.
I get error messages about undefined variables when I try to view any page.
  On newer versions of PHP, the default setting of PHP is to display messages when an undefined variable is referenced. To prevent these messages from being displayed, change the setting of error_reporting in your php.ini file to be:

      error_reporting = E_ALL & ~E_NOTICE

  Alternately, you can disable any error messages from being displayed in the browser and have them logged to a file. (See the comments included in the php.ini file for instructions on how to do this.)
I receive an error message saying "Error removing temporary file" or "Cache error".
  This indicates that a file in your database cache directory could not be deleted or created. The quickest solution to this problem is to not use the database cache. Simply remote the db_cachedir line from includes/settings.php with a simple text editor. This error is most common when the send_reminders.php script is run from a cron job under a different system account than the PHP application server is running under. This causes files created by the send_reminders.php script to be owned by a different user than normal, preventing the PHP application from being able to remove the files when needed.
I receive an error message saying "Failed opening 'includes/...' for inclusion ..."
  You may have to modify the include_path setting in your php.ini file. Most users do not need to do this, but some PHP installs seem to require it. You will need to add the WebCalendar directory to the list of directories for include_path.
I get an error message from PHP saying "Call to undefined function: ..."
  This tells you that your version of PHP is missing something that WebCalendar needs. If the function mentioned is a database login function (ociplogin, mysql_pconnect, ibase_connect, pg_pconnect), then you probably do not have the needed support for your database compiled into PHP. If the function is not a database connect call, then check the PHP manual to see if the function requires a specific version of PHP. You may have an out-dated version of PHP that requires upgrading.
When I try and view certain pages, nothing happens for 30 seconds, then I get a time-out error.
  On slower or very busy servers, it can take some time for the server to get all the events. Most PHP installations have a built-in timeout out of 30 seconds and will interrupt any request that takes longer than that. This is most likely to happen on the year-long custom report or on the month view when layers are being used. If you have access, you can increase the time-out value for PHP in the php.ini file by changing the setting of the max_execution_time setting.
I get an error message that says "Can't connect to local MySQL server through socket '/tmp/mysql.sock'."
  This is a PHP/MySQL configuration issue. The value of mysql.default_socket in your php.ini file must match the value of socket in your my.cnf file. Edit the php.ini file to fix this problem.
I am not receiving any email messages from WebCalendar.
  WebCalendar sends two types of email messages: Notifications* and Reminders*. Check the following if you are not receiving any email:
  1. You have defined a valid SMTP server in your PHP configuration file php.ini. (The setting is "SMTP" in the "mail_function" section.)
  2. In WebCalendar's System Settings, you have set the "Email Enabled" setting to "Yes".
  3. In WebCalendar's System Settings, make sure you have the "Default sender address" to something.
     Note: Some mail system will reject mail that has a "From" address that is a different domain from the originating SMTP server. So, if your SMTP server is smtp.mydomain.com and your "Default sender address" is calendar@someotherdomain.com, some mail systems may bounce the mail back.
  4. For a Notification, make sure you have the type of Notification set to "Yes" in the user's Preferences.
  5. For a Reminder:
     - Make sure you have "Event reminders" set to "Yes" in the user's Preferences.
     - Make sure you have setup a cron job to periodically run the send_reminders.php script.
Some of the pages are displaying text in English rather than <insert your language here>
  The translations have been submitted at various points of WebCalendar development. Some have not been updated to include newer features.
The text that I entered in the Custom Event Fields is not being translated to different languages.
  You will need to add an entry in each of the translation files for any text you add into the Custom Event Fields.
How do I get the most recent version of WebCalendar?
  You can download the latest public release from Github: WebCalendar Releases
  You can download the latest development code from git using the Github repository:
  `git clone https://github.com/craigk5n/webcalendar.git`
I get a database error indicating table webcal_config does not exist.
  This is the first table that WebCalendar tries to access, so it typically means one of the following:
  - You have not created the database tables as described in the instructions
  - You have the wrong database name specified in your includes/settings.php file
I get a database error from MySQL that says "Client does not support authentication protocol."
  From the MySQL 5.0 Reference Manual:

  > MySQL 5.0 uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older (pre-4.1) clients. If you upgrade the server from 4.0, attempts to connect to it with an older client may fail with the following message:
  > Client does not support authentication protocol requested by server; consider upgrading MySQL client

Why do weeks start with Sunday instead of Monday?
  The default setup of WebCalendar is to start weeks on Sunday. Your system administrator can change the system default setting. You can change the setting just for you in your Preferences.
Can I sync events with Palm/PocketPC/Outlook/iCal?
  Export support is available for Palm and anything that supports iCal or vCal. Use the "Export" link at the bottom of each page.
Why can't I edit an event that another user added to my calendar?
  If another user adds an event to your calendar, you cannot edit the event. This is a security restriction. You can reject the event rather than approve it, or you can delete the event from your calendar.
I'm trying to add a user as a participant to an event, but they do not show up in the list of users.
  Your system administrator has enabled a feature that only allows you to view users that are in the same group(s) that you are in. Make sure the user is in one of the same groups that you are in.
Why aren't you using PHP sessions?
  The install/index.php page does use PHP sessions. The cookie-based solution that WebCalendar uses is simple, and it will work with all versions of PHP.
Why aren't you using ADODB for database access?
  Again, this would be overkill for what we need. ADODB is a fairly large project, so I'm partial to my leaner dbi4php.php solution.
Why aren't you using the PEAR database functions?
  WebCalendar pre-dates the PEAR database functions. There does not seem to be sufficient reason to switch from our existing code at this point.
Why aren't you using a template engine like smarty?
  WebCalendar pre-dates most of the template engines out there. We are currently evaluating some of the templating options and may consider moving to one of the template systems in the future.
How do I install a patch?
  Different patches are applied differently. Some patches just contain an updated file. In that case, you should be able to just replace the old file with the new (assuming the new file and your install are based on the same version of WebCalendar).
  Others are patch files, which usually have a .diff or .patch file extension. In order to use one of these files, you need the GNU patch program. (This should be installed on all Linux systems and you can get a version for Windows. I use the patch program that comes with Cygwin on windows.) I would recommend testing the patch on your install first using the --dry-run option.
  For example, if the patch file is called calmods.diff, then you would use:

      patch --dry-run < calmods.diff

  If the program says it cannot determine which file to patch, try adding -p1:

      patch --dry-run -p1 < calmods.diff

  If it goes through all the changes successfully, do the same command without the --dry-run option to install the patch. If it says "hunk failed", then the patch cannot be applied without hand-merging files. This essentially means that the patch was based on a version of WebCalendar that is too different than the version that you have installed, so it was unable to determine how to apply some of the changes in the patch file.