From 77a06e0312be7d5071b11f0c9d05d9bb6dfe0938 Mon Sep 17 00:00:00 2001 From: Bruce Bannon Date: Mon, 25 Sep 2023 09:04:08 -0600 Subject: [PATCH 1/2] rework HTML files not created by perl --- .npmrc | 6 +- UPGRADING.html | 179 +- docs/WebCalendar-DeveloperGuide.html | 672 +++--- docs/WebCalendar-Styling.html | 179 +- docs/WebCalendar-SysAdmin.html | 3092 ++++++++++---------------- docs/WebCalendar-UserManual.html | 1324 +++++------ 6 files changed, 2138 insertions(+), 3314 deletions(-) diff --git a/.npmrc b/.npmrc index 0fb761617..f406248b4 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,6 @@ global-style = true init-author-email = "cknudsen@cknudsen.com" init-author-name = "Craig Knudsen" -init-author-url = "http://www.k5n.us/cknudsen" -init-license = GPL-2.0 -init-version = 1.9.1 +init-author-url = "http://k5n.us/cknudsen" +init-license = GPL-2.0-only +init-version = 1.9.9 diff --git a/UPGRADING.html b/UPGRADING.html index 9595b7ae1..d63d51e88 100644 --- a/UPGRADING.html +++ b/UPGRADING.html @@ -4,149 +4,64 @@ WebCalendar Upgrading Notes +

WebCalendar Upgrading Notes

-
WebCalendar Version: 1.9.9
- -

Important News: A major - improvement beginning with Version 1.1 is the addition of an automated - installation script. This script will guide you through the installation - process and help identify any problem areas that might prevent successful - installation or operation of WebCalendar.

- - - -

This installation script was tested primarily using MySQL and Apache on a - dedicated server. If using an ISP or a CPANEL installer, your mileage may - vary. If problems arise, you can always follow the instruction below as in - previous versions and setup your database manually. As with any upgrade, - it's always a good idea to backup your data prior - to installation.

- -

Another major upgrade to WebCalendar for v1.1 is the implementation of - full timezone support. In olders versions, all date/time data was stored - based on server time and users set their 'time offset' relative to server - time. Now, all date/time data will be stored in the database as - Greenwich Mean Time (GMT) and users will be able to select a timezone based - on their geographical location.

- -

Having true timezone information available within WebCalendar enables the - system to correct for Daylight Savings Time (DST) even if users are in - different timezones. The database houses timezone information from 1970 to - 2038 and can calculate the appropriate GMT offset required to allow users to - see events in their true 'local time'.

- -

The installation script will perform the initial import of the timezone - data and guide you through the one-time conversion required to get your - existing data converted to GMT.

- +

Important News: A major improvement beginning with Version 1.1 is the addition of an automated installation script. This script will guide you through the installation process and help identify any problem areas that might prevent successful installation or operation of WebCalendar. +

+

+

This installation script was tested primarily using MySQL and Apache on a dedicated server. If using an ISP or a CPANEL installer, your mileage may vary. If problems arise, you can always follow the instruction below as in previous versions and setup your database manually. As with any upgrade, it's always a good idea to BACKUP YOUR DATA prior to installation.

+

Another major upgrade to WebCalendar for v1.1 is the implementation of full timezone support. In olders versions, all date/time data was stored based on server time and users set their 'time offset' relative to server time. Now, all date/time data will be stored in the database as Greenwich Mean Time (GMT) and users will be able to select a timezone based on their geographical location.

+

Having true timezone information available within WebCalendar enables the system to correct for Daylight Savings Time (DST) even if users are in different timezones. The database houses timezone information from 1970 to 2038 and can calculate the appropriate GMT offset required to allow users to see events in their true 'local time'.

+

The installation script will perform the initial import of the timezone data and guide you through the one-time conversion required to get your existing data converted to GMT.

Launch the Automatic Installation Script

-

Upgrading Steps

- -

With the install wizard, you will no longer be troubled - with uploading SQL files to phpMyAdmin or executing SQL commands yourself. (For the most part. There are one or two database types that have not been fully implemented, as yet. If you are able to set them up, we'd appreciate the help.) - Your database will be upgraded automatically from your current - WebCalendar installation. Follow the steps below to upgrade to WebCalendar - 1.3.0 from an older version of WebCalendar. - -

NOTE: You should use the Launch the Automatic Installation Script - instead of doing this manually, but the information below is provided - as documentation for those who are interested... - All users (including those using the Automatic Installation Script) - should create a backup of their database before performing the upgrade. +

With the install wizard, you will no longer be troubled with uploading SQL files to phpMyAdmin or executing SQL commands yourself. (For the most part. There are one or two database types that have not been fully implemented, as yet. If you are able to set them up, we'd appreciate the help.) Your database will be upgraded automatically from your current WebCalendar installation. Follow the steps below to upgrade to WebCalendar 1.3.0 from an older version of WebCalendar.

+

NOTE: You should use the Launch the Automatic Installation Script instead of doing this manually, but the information below is provided as documentation for those who are interested... All users (including those using the Automatic Installation Script) should create a backup of their database before performing the upgrade. +

    +
  1. Make a backup of your current WebCalendar database. This can be done a couple of different ways. +
      +
    • If you have access to phpMyAdmin, you can use the export function: +
        +
      • Startup phpMyAdmin
      • +
      • Select the database from the pulldown on the left under the label "Databases". (This will be the same database name used in your includes/settings.php file in your current WebCalendar installation.)
      • +
      • Click on the "Export" tab.
      • +
      • Select the radio button for "Custom - display all possible options"
      • +
      • It's best to use "SQL" for the "Format:" so it can be easily imported again.
      • +
      • Under "Tables:" Make sure all the tables are checked as well as both the "structure" and "data" checkboxes for all of them.
      • +
      • Under "Output:" Select "Save output to a file".
      • +
      • Under "Data creation options" you'll want at least "Function to use when dumping data: INSERT" and "both of the above" radio button.
      • +
      • Experiment with the other options to find out what works best for your situation.
      • +
      • Click on the "Go" button at the bottom of the page and save the file to your computer. Preferably somewhere you can find it again; like the desktop.
      • +
      +
    • +
    • If you have access to a MySQL command line (typically via shell access on a Linux server), you can use the mysqldump command:
        mysqldump -uUSERNAME -pPASSWORD DATABASE > dumpfile.sql
      Of course, replace USERNAME, PASSWORD and DATABASE from the values in your includes/settings.php file from your current WebCalendar installation.
    • +
    +
  2. +
  3. Make a backup of your current WebCalendar files on the server. You would typically do this with an FTP client (like FileZilla).
  4. +
  5. Install the new WebCalendar files in a new directory on your server. How you do this will depend on what type of access you have to your server. It is best to not overwrite your old WebCalendar install. The unpacked/unzipped files will create a directory with the current WebCalendar version name in it.
  6. +
  7. Optional: If you prefer to use a simple name (like "webcalendar" rather than "WebCalendar-1.2.7"), then you can rename the directory after you've installed the files. A good way to do this might be to rename your old webcalendar install to something like "webcalendar-oldinstall" and rename the new install to be the same name as your old one.
    Note: If you are planning on renaming the directory, it is best to do this before you proceed to the automated install.
  8. +
  9. Change the permissions of the includes directory. If you are doing this from FTP, change directories to the new webcalendar directory and use the following command:
      chmod 777 includes
  10. +
  11. Change the permissions of the icons directory. If you are doing this from FTP, change directories to the new webcalendar directory and use the following command:
      chmod 777 icons
  12. +
  13. Download a copy of your old includes/settings.php file from your current WebCalendar install and have it handy so you can enter the same values in your upgrade process.
  14. +
  15. Download all files in your old icons directory from your old WebCalendar and copy the files into the icons directory in the new install directory.
  16. +
  17. You're now ready to start the install/upgrade wizard. Point your browser to the web server where you have installed the files. You only need to specify the webcalendar directory to get to the wizard. Since there is no includes/settings.php file in the new install, you will be redirected to the install/upgrade wizard.
  18. +
  19. Once the wizard is complete, it's a good idea to change your includes permissions back to what they were originally for better security.
  20. +

- -
    -
  1. Make a backup of your current WebCalendar database. This can be done - a couple of different ways. -
      -
    • If you have access to phpMyAdmin, you can use the export function: -
        -
      • Startup phpMyAdmin
      • -
      • Select the database from the pulldown on the left under the - label "Databases". (This will be the same database name - used in your includes/settings.php file in your current WebCalendar installation.)
      • -
      • Click on the "Export" tab.
      • -
      • Select the radio button for "Custom - display all possible options"
      • -
      • It's best to use "SQL" for the "Format:" so it can be easily imported again.
      • -
      • Under "Tables:" Make sure all the tables are checked as well as both the "structure" and "data" checkboxes for all of them.
      • -
      • Under "Output:" Select "Save output to a file".
      • -
      • Under "Data creation options" you'll want at least "Function to use when dumping data: INSERT" and "both of the above" radio button.
      • -
      • Experiment with the other options to find out what works best for your situation.
      • -
      • Click on the "Go" button at the bottom of the page and save the file to your computer. Preferably somewhere you can find it again; like the desktop.
      • - -
    • -
    • If you have access to a MySQL command line (typically via shell access on a - Linux server), you can use the mysqldump command:
      -   mysqldump -uUSERNAME -pPASSWORD DATABASE > dumpfile.sql -
      Of course, replace USERNAME, PASSWORD and DATABASE from the values in - your includes/settings.php file from your current WebCalendar installation. -
    • -
  2. - - -
  3. Make a backup of your current WebCalendar files on the server. You would typically - do this with an FTP client - (like FileZilla). -
  4. - -
  5. Install the new WebCalendar files in a new directory on your server. - How you do this will depend on what type of access you have to your server. - It is best to not overwrite your old WebCalendar install. The unpacked/unzipped - files will create a directory with the current WebCalendar version name in it. -
  6. -
  7. Optional: - If you prefer to use a simple name (like "webcalendar" rather than "WebCalendar-1.2.7"), - then you can rename the directory after you've installed the files. - A good way to do this might be to rename your old webcalendar install to - something like "webcalendar-oldinstall" and rename the new install to be - the same name as your old one. -
    Note: If you are planning on renaming the directory, it is best to do - this before you proceed to the automated install. -
  8. - -
  9. Change the permissions of the includes directory. - If you are doing this from FTP, change directories to the new webcalendar directory - and use the following command:
    -   chmod 777 includes -
  10. Change the permissions of the icons directory. - If you are doing this from FTP, change directories to the new webcalendar directory - and use the following command:
    -   chmod 777 icons - -
  11. Download a copy of your old includes/settings.php file from your current - WebCalendar install and have it handy so you can enter the same values in your - upgrade process.
  12. -
  13. Download all files in your old icons directory from your old - WebCalendar and copy the files into the icons directory in - the new install directory.
  14. - -
  15. You're now ready to start the install/upgrade wizard. Point your browser to the - web server where you have installed the files. You only need to specify - the webcalendar directory to get to the wizard. Since there is no - includes/settings.php file in the new install, you will be redirected - to the install/upgrade wizard.
  16. - -
  17. Once the wizard is complete, it's a good idea to change your includes - permissions back to what they were originally for better security.
  18. -
- diff --git a/docs/WebCalendar-DeveloperGuide.html b/docs/WebCalendar-DeveloperGuide.html index 1767ffe49..82d3f0e96 100644 --- a/docs/WebCalendar-DeveloperGuide.html +++ b/docs/WebCalendar-DeveloperGuide.html @@ -4,398 +4,304 @@ WebCalendar Developer Guide - - -

WebCalendar Developer Guide

- -

Table of Contents

- -
- - -

Introduction

- -

WebCalendar is written in PHP. A minimum of PHP 7.4 is -required to run WebCalendar. -

- -
top
-
- - -

Tools

-

The following tools will be helpful in WebCalendar development: -

- -
-
perl
-
Perl is used to check translation files to see what translations are - missing. If you are using Windows, perl is included as part of the Cygwin package.
- -
make
-
The "make" command is used when generating WebCalendar documentation in - the docs directory. The "make" command is standard on Linux if you - install certain development packages. If you are using Windows, make is - included as part of the Cygwin package.
- -
patch
-
The "patch" command is used to apply patches posted on the SourceForge - patches area.
- -
diff
-
The "diff" command is used to create patches posted on the SourceForge - patches area.
- - - -
Internet Explorer, Mozilla/Firefox, and Apple Safari
-
We try to test on all three of these platforms whenever we make any HTML - or JavaScript changes. If you do not have access to all these, please test - your changes on as many of these browsers as you have access to.
-
- -

TIP If you are developing on a -Windows system, the Cygwin package -will provide command line tools that -include perl, make, patch, diff and cvs. -

- -
top
-
- - -

Getting The Code

- -

You should always be using the latest code from git:

- - WebCalendar - -

To obtain the code from your command line using the git command:

- -
git clone https://github.com/craigk5n/webcalendar.git
- -
top
- -

Naming Conventions

- -

The following conventions have been adopted by WebCalendar (although they -have not been 100% enforced, so you will see exceptions):

- -
-
Class Names
-
Classes should be named using descriptive, full words. Abbreviations - should be avoided except in cases of standard acronyms such as HTML, HTTP, - etc. Names should be in UpperCamelCaps. Examples: -
    -
  • RepeatingEvent
  • -
  • WebCalendarSettings
  • -
- - Classes should be defined in files contained in includes/classes/. - Filenames should be of the form ClassName.class. There should only be one - class defined per file.
- If incorporating a class from another project (i.e. phpMailer ), it is - acceptable to use the original naming conventions and filenames. This will - allow for easy upgrading and help avoid any GNU license issues. -
- -
Method/Function Names
-
Methods and functions should be named with short verb phrases. - Methods/functions which return a boolean should begin with a verb which - implies a yes/no answer (e.g. 'is' or 'has'). Names should be in - lowerCamelCaps. Examples: -
    -
  • getPostValue ()
  • -
  • saveEvent ()
  • -
  • isAllDay ()
  • -
-
- -
Variable Names
-
Variable names should be descriptive noun phrases. Counter variables - should be single letters (commonly 'i', 'j', or 'k'). Names should be in - lowerCamelCaps. Examples: -
    -
  • $passwordHash
  • -
  • $monthName
  • -
  • $i
  • -
-
- -
Constant Names
-
Constants (declared with define ()) should be named with descriptive noun phrases. Names should be in uppercase with WORDS_SEPARATED_BY_UNDERSCORES. Examples: -
    -
  • ONE_DAY
  • -
  • EXTRA_REMINDER
  • -
-
- -
Database Table Names
-
Database table names should be prefixed with 'webcal_'. Names should be - in lowercase with words_separated_by_underscores. Examples: -
    -
  • webcal_user_pref
  • -
  • webcal_entry
  • -
-
- -
Preference Value Names
-
These are variables stored in webcal_config and webcal_user_pref tables. - Names should be in uppercase with words_separated_by_underscores. Examples: -
    -
  • ALLOW_HTML_DESCRIPTION
  • -
  • DISABLE_ACCESS_FIELD
  • +
    Internet Explorer, Mozilla/Firefox, and Apple Safari
    +
    We try to test on all three of these platforms whenever we make any HTML or JavaScript changes. If you do not have access to all these, please test your changes on as many of these browsers as you can.
    +
+

TIP If you are developing on a Windows system, the Cygwin package will provide command line tools that include perl, make, patch, diff and cvs.

+ ↑ top +
+ +

System Requirements

+ - - - -
top
- -

Coding Standards

- -

The following coding standards have been adopted by WebCalendar (although -they have not been 100% implemented).

- -
-
Indenting
-
Two spaces (ASCII 0x20) for each level. Wrapped lines should also be - indented 2 spaces if these spaces will not affect output. Tabs (ASCII 0x09) - will not be used. Replace all occurrences with ASCII 0x20. This may affect - indenting, so please double check before committing to git or posting.
- -
File Format
-
Unix format only (LF ASCII 0x0A), no Windows or Mac format files.
- -
PHP file comments
-
Each file should have a file header. - - - -
PHP function comments
-
Function documentation is generated using phpDocumentor. Each function should be preceded - by a DocBlock. See the phpDocumentor website for information about DocBlocks and DocBlock syntax. - -
XHTML
-
All XHTML should conform to XHTML 1.0 Transitional. Use double quotes around HTML attributes.
- -
If/Else
-
Use the ternary operator (?:) whenever possible. - Curly brackets, {}, need only be used around multi-statement blocks. - Any of the following is acceptable based on logic complexity: - -
bar = ( foo == 1 ? true : false );
-
- or
-
-if ( $foo == 1 )
-   $pro = true;
- else
-   $con = true;
-
- or
-
+    

You must have one of the following databases installed: +

    +
  • MySQL/MariaDB
  • +
  • IBM DB2
  • +
  • Interbase
  • +
  • MS SQL Server
  • +
  • ODBC
  • +
  • Oracle 8+
  • +
  • PostgreSQL
  • +
  • SQLite
  • +
+

+

TIP PHP comes bundled with SQLite support. SQLite is an embedded file-based database. If your hosting service supports PHP, you should be able to create as many SQLite databases as you like (since each database is just a file).

+

For the database you choose, you must have its drivers built into PHP. For example, to use MySQL, PHP must be compiled with MySQL support (which is the default setting when installing PHP). See the PHP pages (php.net) for more information on setting up PHP.

+

TIP If you want to use gradient background images, PHP must be compiled with the GD library.

+

You can run PHP either as a CGI or an Apache module. You'll get better performance with PHP setup as a module. Not only will you not have to deal with the CGI performance hit, but you'll be able to use PHP's database connection pooling. Additionally, this application can use a form/cookie-based authentication or traditional HTTP authentication. For traditional HTTP authentication, PHP must be built as an Apache module.

+

If you are planning on using email reminders, you will need to build PHP as a CGI in order to run the send_reminders.php script. It is recommended to have a module-based PHP for your web server and then a second PHP build to create the CGI version.

+

TIP Some Linux distributions come with both a module-based PHP with Apache and a standalone PHP binary. Check for /usr/bin/php to see if you already have the PHP standalone executable. If it's there, you can use the following command to see what version of PHP you have:

/usr/bin/php -v

+ ↑ top +
+ +

Getting The Code

+

You should always be using the latest code from git: WebCalendar

+

To obtain the code from your command line using the git command:

git clone https://github.com/craigk5n/webcalendar.git

+ ↑ top + +

Naming Conventions

+

The following conventions have been adopted by WebCalendar (although they have not been 100% enforced, so you will see exceptions):

+
+
Class Names
+
Classes should be named using descriptive, full words. Abbreviations should be avoided except in cases of standard acronyms such as HTML, HTTP, etc. Names should be in UpperCamelCaps. Examples: +
    +
  • RepeatingEvent
  • +
  • WebCalendarSettings
  • +
+ Classes should be defined in files contained in includes/classes/. Filenames should be of the form ClassName.php. There should only be one class defined per file.
If incorporating a class from another project (i.e. phpMailer ), it is acceptable to use the original naming conventions and filenames. This will allow for easy upgrading and help avoid any GNU license issues. +
+
Method/Function Names
+
Methods and functions should be named with short verb phrases. Methods/functions which return a boolean should begin with a verb which implies a yes/no answer (e.g. 'is' or 'has'). Names should be in lowerCamelCaps. Examples: +
    +
  • getPostValue()
  • +
  • saveEvent()
  • +
  • isAllDay()
  • +
+
+
Variable Names
+
Variable names should be descriptive noun phrases. Counter variables should be single letters (commonly 'i', 'j', or 'k'). Names should be in lowerCamelCaps. Examples: +
    +
  • $passwordHash
  • +
  • $monthName
  • +
  • $i
  • +
+
+
Constant Names
+
Constants (declared with define()) should be named with descriptive noun phrases. Names should be in uppercase with WORDS_SEPARATED_BY_UNDERSCORES. Examples: +
    +
  • ONE_DAY
  • +
  • EXTRA_REMINDER
  • +
+
+
Database Table Names
+
Database table names should be prefixed with 'webcal_'. Names should be in lowercase with words_separated_by_underscores. Examples: +
    +
  • webcal_user_pref
  • +
  • webcal_entry
  • +
+
+
Preference Value Names
+
These are variables stored in webcal_config and webcal_user_pref tables. Names should be in uppercase with words_separated_by_underscores. Examples: +
    +
  • ALLOW_HTML_DESCRIPTION
  • +
  • DISABLE_ACCESS_FIELD
  • +
+ Administrators can find the defaults in install/default_config.php. +
+
+ ↑ top + +

Coding Standards

+

The following coding standards have been adopted by WebCalendar (although they have not been 100% implemented).

+
+
Indenting
+
Two spaces (ASCII 0x20) for each level. Wrapped lines should also be indented 2 spaces if these spaces will not affect output. Tabs (ASCII 0x09) will not be used. Replace all occurrences with ASCII 0x20. This may affect indenting, so please double check before committing to git or posting.
+
File Format
+
Unix format only (LF ASCII 0x0A), no Windows or Mac format files.
+
PHP file comments
+
Each file, at least the major ones, should have a comment header in the format: +
+/**
+ * short description (3 lines max)
+ * (ends with a period or a blank line).
+ *
+ * long description (whatever it takes).
+ *
+ * @tags
+ * @package should be one of them
+ */
+/**
+ * short description for the next
+ * $variable, define(), constant, function(), etc.
+ * to positively indicate that the page header is finished.
+ *
+ * long description if needed.
+ */
+        
+
+
PHP function comments
+
Function documentation is generated using phpDocumentor. Each class and function, at least, should be preceded by a DocBlock. Constants, define()s and $variables may also benefit from DocBlocks. See the phpDocumentor website for information about DocBlocks syntax.
+
XHTML
+
All XHTML should conform to XHTML 1.0 Transitional. Use double quotes around HTML attributes.
+
If/Else
+
Use the ternary operator (?:) whenever possible. Curly brackets, {}, are only required around multi-statement blocks. However, please use them around all statements to reduce errors when we start to minify the code. Any of the following is acceptable based on logic complexity: +
normal if/else
+if ( $foo === 1 ) {
+  $pro = true;
+} else {
+  $con = true;
+}
+
+or, nested
 if ( $bar > 0 ) {
-   $drink++;
-   $glass = 'full';
- } else {
-   $fun--;
-   if ( $fun < 1)
-     echo 'Party is over!';
- }
-
-
Function Calls/Declarations
-
Use one space both inside and outside of parenthesis () - -
Declaration: function getGetValue ( $name ) {
-Call: bar = getGetValue ( $name );
-
-
Single quotes vs double quotes
-
With the exception of XHTML attributes, use single quotes where possible. - -
 echo 'This is an example of single quoting. ';
- echo 'But, sometimes it\'s not possible without escaping. ';
- echo "Also it's not possible with $embedded variables. ";
- echo 'Control characters such as linefeed "\n" and tab "\t" don\'t work either. ';
- echo 'However, it\'s preferable to concatenate' . $variables . 'like this, anyway. '
- echo '"Nested quotes", she said, "are also acceptable where needed.
-   Just try to use single quotes as the outer set."'
-
- -
Use of the dot connector. Also called concatenation.
-
The above example is faster if written this way: - -
echo 'This is an example of single quoting. '
+  $drink++;
+  $glass = 'full';
+} else {
+  $fun--;
+
+  if ( $fun < 1 ) {
+    echo 'Party is over!';
+  }
+}
+
+the ternary operator
+If $foo is not undefined.
+$a = ( $foo === 1 ? true : false );
+or, since 'true' is the default here:
+$a = ( $foo === 1 );
+
+or, the 'elvis' short version
+$b = ( $a ?: $c ); // $a if isset($a) && ! empty($a) else $c
+
+        
+ See PHP short ternary (elvis) vs null coalescing operator. +
+
+the null coalescing operator
+$b = ( $a ?? 'Y' ); // $a is set and not null then $a else 'Y'
+
+and the null coalescing assignment operator
+$a ??= 1; // if $a is set and not null then $a else 1
+
+        
+ Elvis and null coalescing operators can be combined as needed.
+ See PHP null coalescing operator for more information. +
+
Function Calls/Declarations
+
Use one space both inside and outside of parenthesis '()' +
Declaration: function getGetValue ( $name ) {
+Call: $bar = getGetValue ( $name );
+        
+
+
Single quotes vs double quotes
+
With the exception of HTML and XHTML attributes, use single quotes where possible. +
echo 'This is an example of single quoting. ';
+echo 'But, sometimes it\'s not possible without escaping. ';
+echo "Also it's not possible with $embedded variables. ";
+echo 'Control characters such as linefeed "\n" and tab "\t" don\'t work either. ';
+echo 'We used to prefer to concatenate' . $variables . 'like this. '
+echo 'However, PHP has gotten faster in the last few years. ';
+echo "Now interpolating $variables, inside double quotes, is faster than concatenating. ";
+echo 'As long as the line is still readable. ';
+echo '"Nested quotes", she said, "are also acceptable where needed.
+     Just try to use single quotes as the outer set."';
+        
+
+
Use of the dot connector. Also called concatenation.
+
The above example is faster if written this way: +
echo 'This is an example of single quoting. '
  . 'But, sometimes it\'s not possible without escaping. '
  . "Also it's not possible with $embedded variables. "
  . 'Control characters such as "\n" (linefeed) and "\t" (tab) don\'t work either. '
- . 'However, it\'s preferable to concatenate' . $variables . 'like this, anyway. '
+ . 'We used to prefer to concatenate' . $variables . 'like this. '
+ . 'However, PHP has gotten faster in the last few years. '
+ . "Now interpolating $variables, inside double quotes, is faster than concatenating. "
+ . 'As long as the line is still readable. '
  . '"Nested quotes", she said, "are also acceptable where needed.
- Just try to use single quotes as the outer set."'
- -
- -
- - - -

Submitting Changes

- -

Please use github's pull request feature to contribute -changes to WebCalendar. -

- - - -

Translations and Languages

- -

When adding or modifying WebCalendar code, all displayed text should be -translatable. The following tips will ensure new text can be translated -quickly and efficiently.

- -
-
Translate
-
All displayable text should be sent to the translate () - function, which returns the text translated in the user's language of choice. - A variation of this function is etranslate (), which includes and - echo command. When translating text within javascript, always set the decode - flag to true. This will allow proper decoding of htmlentities.
- -
Htmlentities
-
When used, this function tag should include the current charset when - displaying database results. This will be most important when dealing with - languages such as Japanese that tend to contain characters that would - otherwise be non-displayable. Although this is not the perfect solution, it - seems to suffice for our purposes. Possibly, a better technique would be to - use the charset of the original creator of the data, but this is beyond - current capabilities. -
- For reference see: - http://us3.php.net/manual/en/function.htmlentities.php
- -
Updating Language Files
-
When text is added or updated, requiring new translations, the - translations/English-US.txt file - should be updated as a minimum. This file will be used as the basis for updating - the other language files and needs to be up to date. From within the tools directory, - the following command will search through the WebCalendar source files and - update the language file specified. - - Language files should always be committed to CVS in Unix format to save space. -
perl update_translation.pl English-US.txt
-
-
- - - -

Frequently Asked Questions

-
+ Just try to use single quotes as the outer set."' +
+
+
+ ↑ top + +

Submitting Changes

+

Please use github's pull request feature to contribute changes to WebCalendar. You'll need to make an account on github and fork the repository you want to 'patch'.

+ ↑ top + +

Translations and Languages

+

When adding or modifying WebCalendar code, all displayed text should be translatable. The following tips will ensure new text can be translated quickly and efficiently.

+
+
Translate
+
All displayable text should be sent to the translate() function, which returns the text translated in the user's language of choice. A variation of this function is etranslate(), which includes and echo command. When translating text within javascript, always set the decode flag to true. This will allow proper decoding of htmlentities.
+
Htmlentities
+
When used, this function tag should include the current charset when displaying database results. This will be most important when dealing with languages such as Japanese that tend to contain characters that would otherwise be non-displayable. Although this is not the perfect solution, it seems to suffice for our purposes. Possibly, a better technique would be to use the charset of the original creator of the data, but this is beyond current capabilities.
For reference see: http://us3.php.net/manual/en/function.htmlentities.php
+
Updating Language Files
+
When text is added or updated, requiring new translations, the translations/English-US.txt file should be updated as a minimum. This file will be used as the basis for updating the other language files and needs to be up to date. From within the tools directory, the following command will search through the WebCalendar source files and update the language file specified. Language files should always be committed to CVS in Unix format to save space.
perl update_translation.pl English-US.txt
+
+ ↑ top + +

Frequently Asked Questions

+
-
Why aren't you using PHP sessions?
-
We are still considering using PHP4 sessions. In fact, 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.
- +
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.
-
- -
top
- -

Resources

- -

The following resources may be helpful:

- - - -
top
- +
  • WebCalendar Function Documentation
  • +
  • WebCalendar-Database.html describes the WebCalendar database schema
  • +
  • WebCalendar-Styling.html describes how WebCalendar uses CSS
  • + + ↑ top + diff --git a/docs/WebCalendar-Styling.html b/docs/WebCalendar-Styling.html index e72851561..f374bc6f8 100644 --- a/docs/WebCalendar-Styling.html +++ b/docs/WebCalendar-Styling.html @@ -5,118 +5,101 @@ WebCalendar Styling HOWTO -

    WebCalendar Styling HOWTO

    - - NOTE: THIS DOCUMENTATION IS STILL UNDER CONSTRUCTION.
    - -

    Table of Contents

    - -
    1. - Introduction
    2. - Classes
    3. - Styling Order of Precedence
    4. - Styling for Individual Pages -
    - -

    Introduction

    - -

    WebCalendar offers an easy-to-use method for customizing colors via the Admin Panel. This document provides a more technical, in depth analysis of WebCalendar's styling system. Please note: The WebCalendar styling system is still under construction. We plan on continuing to enhance functionality, and available options in the future.

    - -

    WebCalendar uses CSS to format its content. For an introduction to CSS, you may wish to read - Starting with HTML + CSS, and/or - Dave Raggett's Introduction to CSS. The technical specifications are available at the W3C:

    - - -

    Classes

    - -

    WebCalendar's style system is built to be flexible, standardized, and clear. Understanding how each of these components work in conjunction with one another, as well as individually is key to gaining the full benefit of the ability to customize the look & feel of your WebCalendar without having to modify any PHP, or HTML. The remainder of this document will provide you with the information necessary to fully understand each of these components, and how they work together.

    - -

    Structure

    - -

    WebCalendar can be easily customized site-wide, or page-by-page. In other words, you can easily make every page in WebCalendar look similar to one another, or completely different from one another. WebCalendar achieves this effect by uniquely identifying each page.Each page in WebCalendar (obviously) has a filename. WebCalendar automatically takes each filename, removes any underscores (_), as well as the extension (.php), and assigns the resulting value as an ID attribute on that page's body tag. For example, the page "edit_entry.php" would have the following body tag: <body id="editentry">. If you don't want to customize individual pages, you can disregard this information.

    - -

    If you want to customize the look of a single page in WebCalendar, prefix all selectors for that page with its <body>'s id. For example, to create styles that only apply to month.php, simply prefix all the selectors with #month, for edit_entry.php, prefix all the selectors with #editentry

    - -

    WebCalendar has two basic types of calendars: full-sized calendars, and mini-calendars. Each of these types use a specific structure. Full-sized calendars are organized using the structure outlined below. The header of the page is a div with the "title" class (i.e. <div class="title">). Within that div, there are several spans each with its own class. These classes include:

    - -

    Also within this div are the left & right navigation arrows. The left arrow link has the "prev" class, and the right arrow link has the "next" class. Pages that have mini-calendars in place of the arrows use "prevmonth" and "nextmonth" with the ID attribute.

    -

    Structurally, the header of pages with a full-sized calendar will look similar to:

    -
    - -
    <div class="title">
    +    

    WebCalendar Styling HOWTO

    + NOTE: THIS DOCUMENTATION IS STILL UNDER CONSTRUCTION.
    +

    Table of Contents

    +
      +
    1. Introduction
    2. +
    3. Classes
    4. +
    5. Styling Order of Precedence
    6. +
    7. Styling for Individual Pages
    8. +
    +

    Introduction

    +

    WebCalendar offers an easy-to-use method for customizing colors via the Admin Panel. This document provides a more technical, in depth analysis of WebCalendar's styling system. Please note: The WebCalendar styling system is still under construction. We plan on continuing to enhance functionality, and available options in the future.

    +

    WebCalendar uses CSS to format its content. For an introduction to CSS, you may wish to read Starting with HTML + CSS, and/or Dave Raggett's Introduction to CSS. The technical specifications are available at the W3C:

    + +

    Classes

    +

    WebCalendar's style system is built to be flexible, standardized, and clear. Understanding how each of these components work in conjunction with one another, as well as individually is key to gaining the full benefit of the ability to customize the look & feel of your WebCalendar without having to modify any PHP, or HTML. The remainder of this document will provide you with the information necessary to fully understand each of these components, and how they work together.

    +

    Structure

    +

    WebCalendar can be easily customized site-wide, or page-by-page. In other words, you can easily make every page in WebCalendar look similar to one another, or completely different from one another. WebCalendar achieves this effect by uniquely identifying each page.Each page in WebCalendar (obviously) has a filename. WebCalendar automatically takes each filename, removes any underscores (_), as well as the extension (.php), and assigns the resulting value as an ID attribute on that page's body tag. For example, the page "edit_entry.php" would have the following body tag: <body id="editentry">. If you don't want to customize individual pages, you can disregard this information.

    +

    WebCalendar has two basic types of calendars: full-sized calendars, and mini-calendars. Each of these types use a specific structure. Full-sized calendars are organized using the structure outlined below. The header of the page is a div with the "title" class (i.e. <div class="title">). Within that div, there are several spans each with its own class. These classes include: +

      +
    • weeknumber
    • +
    • view
    • +
    • date
    • +
    +

    +

    Also within this div are the left & right navigation arrows. The left arrow link has the "prev" class, and the right arrow link has the "next" class. Pages that have mini-calendars in place of the arrows use "prevmonth" and "nextmonth" with the ID attribute.

    +

    Structurally, the header of pages with a full-sized calendar will look similar to:

    +
    + +
    <div class="title">
       <span class="weeknumber"></span>
       <span class="view"></span>
       <span class="date"></span>
     </div>
    -
    -

    Example 1

    -
    - -

    Below the "title" div is a table with the "main" class. This is the full-size calendar itself. There are a variety of options available in styling the calendar. First, there are two types of cells in a table: tableheaders (<th> tags), and tablecells (<td> tags). WebCalendar distinguishes between column tableheaders & row tableheaders. Headers containing dates, or days of the week utilize the classes today, and weekend. To style tableheaders for Monday through Friday, while today is eDays of the week that are not Saturday or Sunday, and that are also not today's date, can be styled by simply referring to the "th" tag itself. Alternatively, if you don't want to style tableheaders according to the weekend, or today colors, you can simply omit this style from the stylesheet. Row tableheaders (when they don't contain dates) are always styled using the class, "row".

    -

    Tablecells (td tags) within the "main" calendar table follow the same structure as tableheaders with dates, or days. Therefore, tablecells that fall on the weekend, will have the "weekend" class. If the cell is on today's date, but it's not on Saturday or Sunday, the cell will have the "today" class. If the cell is not on the weekend, nor today's date, it doesn't get a class (in this case, style these cells similar to how you styled tableheaders without a class). If the cell is both on the weekend, and on today's date, it has "weekend today" as the value for the class attribute. Below are some examples to help illustrate.

    -

    If you're customizing month.php & want tablecells (td tags) on today's date to have a red background, you would use:

    -
    - -
    #month td.today {
    +      
    +

    Example 1

    +
    +

    Below the "title" div is a table with the "main" class. This is the full-size calendar itself. There are a variety of options available in styling the calendar. First, there are two types of cells in a table: tableheaders (<th> tags), and tablecells (<td> tags). WebCalendar distinguishes between column tableheaders & row tableheaders. Headers containing dates, or days of the week utilize the classes today, and weekend. To style tableheaders for Monday through Friday, while today is Days of the week that are not Saturday or Sunday, and that are also not today's date, can be styled by simply referring to the "th" tag itself. Alternatively, if you don't want to style tableheaders according to the weekend, or today colors, you can simply omit this style from the stylesheet. Row tableheaders (when they don't contain dates) are always styled using the class, "row".

    +

    Tablecells (td tags) within the "main" calendar table follow the same structure as tableheaders with dates, or days. Therefore, tablecells that fall on the weekend, will have the "weekend" class. If the cell is on today's date, but it's not on Saturday or Sunday, the cell will have the "today" class. If the cell is not on the weekend, nor today's date, it doesn't get a class (in this case, style these cells similar to how you styled tableheaders without a class). If the cell is both on the weekend, and on today's date, it has "weekend today" as the value for the class attribute. Below are some examples to help illustrate.

    +

    If you're customizing month.php & want tablecells (td tags) on today's date to have a red background, you would use:

    +
    + +
    #month td.today {
       background-color: red;
    -}
    -

    Example 2

    -
    - -

    Similarly, if customizing month.php & you want tablecells occurring on the weekend to have a thin black border with 10 pixels of padding on each side, you would use:

    -
    - -
    #month td.weekend {
    +}
    +      
    +

    Example 2

    +
    +

    Similarly, if customizing month.php & you want tablecells occurring on the weekend to have a thin black border with 10 pixels of padding on each side, you would use:

    +
    + +
    #month td.weekend {
       border: 1px solid black;
       padding: 10px;
    -}
    -

    Example 3

    -
    - -

    Clearly there will be times when tablecells will be both on the weekend, as well as on today's date. In such an instance, styles from each of the classes are combined. For example, if today is a Saturday, the HTML for that cell would be <td class="weekend today">. Using the classes from examples one & two above, this cell would have a red background, with a thin black border, and 10 pixels of padding on each side.

    - -

    Now say the styles had looked like this:

    -
    - -
    .today {
    +}
    +      
    +

    Example 3

    +
    +

    Clearly there will be times when tablecells will be both on the weekend, as well as on today's date. In such an instance, styles from each of the classes are combined. For example, if today is a Saturday, the HTML for that cell would be <td class="weekend today">. Using the classes from examples one & two above, this cell would have a red background, with a thin black border, and 10 pixels of padding on each side.

    +

    Now say the styles had looked like this:

    +
    + +
    .today {
       background-color: red;
     }
    -
     .weekend {
       border: 1px solid black;
       padding: 10px;
       background-color: blue;
     }
    -
     .hasevents {
       font-weight: bold;
    -}
    -

    Example 4

    -
    - -

    Note that both the today class and the weekend class have a background-color definition. So does our example <td> (which belongs to both the today and weekend classes) end up with a red background or a blue one? This conflict is decided by the Styling Order of Precedence.

    - -

    Styling Order of Precedence

    - -

    When conflicts arise between styles (as in Example 4 above), the definition from the class with the highest precedence is chosen. The order of precedence is:

    - -
    1. - today
    2. - hasevents
    3. - weekend
    4. - empty -
    - -

    This says that styles defined for the today class will be chosen - styles for the hasevents class when there is a conflict, styles - for the hasevents class will be chosen over styles for the weekend class, - and so on. When hasevents is identical to normal table cell color, it will be ignored.

    - +} +
    +

    Example 4

    +
    +

    Note that both the today class and the weekend class have a background-color definition. So does our example <td> (which belongs to both the today and weekend classes) end up with a red background or a blue one? This conflict is decided by the Styling Order of Precedence.

    +

    Styling Order of Precedence

    +

    When conflicts arise between styles (as in Example 4 above), the definition from the class with the highest precedence is chosen. The order of precedence is currently: +

      +
    1. empty
    2. +
    3. weekend
    4. +
    5. hasevents
    6. +
    7. today
    8. +
    +

    +

    This says that styles defined for the today class will be chosen over styles for the hasevents class when there is a conflict, styles for the hasevents class will be chosen over styles for the weekend class, and so on. When hasevents is identical to normal table cell color, it will be ignored.

    This is determined by the order the class is specified on the tag; last one takes precedence.

    <td class="weekend today"> will be red while
    <td class="today weekend"> would be blue.

    +

    Styling for Individual Pages

    +

    There are two ways to customize the look of a single page in WebCalendar. +

    +

    + diff --git a/docs/WebCalendar-SysAdmin.html b/docs/WebCalendar-SysAdmin.html index db6b5c3ad..4c875570e 100644 --- a/docs/WebCalendar-SysAdmin.html +++ b/docs/WebCalendar-SysAdmin.html @@ -1,1923 +1,1247 @@ - + WebCalendar System Administrator's Guide -

    WebCalendar System Administrator's Guide

    -

    WebCalendar Version: 1.9.0

    - -

    Table of Contents

    - -
    - - -

    Introduction

    - -

    WebCalender is an open source PHP-based multi-user calendar.

    - -

    Features:

    - -
    ↑ top
    -
    - - -

    System Requirements

    - -

    You must have one of the following databases installed:

    - - -

    TIP - PHP comes bundled with - SQLite support. SQLite is an embedded file-based database. If your - hosting service supports PHP, you should be able to create as - many SQLite databases as you like (since each database is just - a file).

    -

    For the database you choose, you must have its drivers built into - PHP. For example, to use MySQL, PHP must be compiled with MySQL - support (which is the default setting when installing PHP). - See the PHP pages (php.net new) - for more information on setting up PHP.

    -

    TIPIf you want to use gradient background - images, PHP must be compiled with the GD library.

    - -

    You can run PHP either as a CGI or an Apache module. You'll get better - performance with PHP setup as a module. Not only will you not have to - deal with the CGI performance hit, but you'll be able to use PHP's - database connection pooling. Additionally, this application can use - a form/cookie-based authentication or traditional HTTP authentication. - For traditional HTTP authentication, PHP must be built as an Apache - module.

    -

    If you are planning on using email reminders, you will need to build - PHP as a CGI in order to run the send_reminders.php script. It - is recommended to have a module-based PHP for your web server - and then a second PHP build to create the CGI version.

    -

    TIP Some Linux distributions come with both a module-based PHP - with Apache and a standalone PHP binary. - Check for /usr/bin/php to see if you already have the - PHP standalone executable. If it's there, you can use - the following command to see what version of PHP you have: -

    - /usr/bin/php -v -

    - -
    ↑ top
    -
    - - -

    File Unpacking

    -

    Unpack the calendar software in its own directory somewhere where - your web server will find it. (See your web server documentation for information.)

    -

    By default, unpacking WebCalendar will create its own directory - when you unpack it. The new directory name will typically - contain the version name (such as WebCalendar-1.9.0). - You can rename this directory after unpacking the files if you - prefer a directory name like calendar or webcalendar. - Keep in mind that unless you remap the directory (via your web server's - configuration settings), it will be part of the URL for the calendar.

    -
    ↑ top
    -
    - - -

    Application Installation

    - -

    WebCalendar now includes an installation script that will guide you through - the entire installation process. - It should run automatically when first accessing - a new installation or when a major version upgrade has been performed. - The installation - script can always be rerun if needed by adding install/index.php - to your base WebCalendar URL.

    - -

    WebCalendar Installation Wizard: Step 1

    -

    When first run, the installation script will prompt you for a - Configuration Wizard Password that will protect against unauthorized - tampering. Until this password is set, your WebCalendar installation and possibly your database are vulnerable to attack. Once, you've set your password, be sure - to write it down. If forgotten, the only way to recover is to manually edit the - install/settings.php file.

    - -

    The installation script will now check several prerequisites and report the - results. Any item that appears in RED should be - corrected before continuing.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Prerequisite FailedRecommended Solution
    PHP 7.1 or greaterUpgrade your PHP installation
    Safe Mode* = OffIf possible, change this setting in your php.ini file to Off.
    Safe Mode Allowed Vars*If unable to to set Safe Mode Off, then set safe_mode_allowed_vars to contain - TZ in your php.ini file. -
    * NOTE: If neither of the these settings pass testing, then - your WebCalendar installation will be restricted to using the server's timezone - setting only.
    File UploadsIf disabled, then some features of WebCalendar will not function. This setting is configurable in your php.ini or httpd.conf files as file_uploads
    CRYPT_STD_DESThis setting should be able to be ignored. We now support multiple crypt - algorithms. If this setting is not enabled and you experience difficulties logging in, - please notify the WebCalendar development team.
    GDThis library is required only if gradient background images are desired. Normally, PHP must be compiled with this option. Some installations only require it be enabled in your - php.ini file.
    Session CheckPHP Sessions are used during the installation process and are required - for proper operation. Sessions can be configured in your php.ini file. - If it's not possible to enable sessions, then you must manually install WebCalendar. - Details are available in - Appendix F
    Settings.php StatusThe installation script was either unable to create, or unable to write - to your settings.php file. You will need to modify the permissions of the includes - directory. On Linux/UNIX, you should change this directory to be read/write - for all users (chmod 777 includes). On Windows, change this directory - to have full access for all users using Windows Explorer.
    -

    WebCalendar Installation Wizard: STEP 2

    - -

    The installation script can create your WebCalendar database as well as create all the required tables and pre-populate them with the basic configuration data. These features are only available when using fully supported database types. See - Appendix B to manually create your database if needed.

    - -

    Database Status

    -

    Displays the current status of your database settings as well the supported - databases for your PHP installation.

    - -

    Database Settings

    -

    To configure your database access. Set the values for:

    - - - - - - - - - - - - - -
    Displayed Valuesettings.php valueComments
    - Database Typedb_type - One of "mysql", "oracle", "postgresql", "odbc", - "mssql", sqllite, db2, - or "ibase" -
    - Serverdb_host - The hostname that database is running on. - (Use localhost if it's the same machine as - the web server.) (This variable is not used with ODBC, enter 'none') - (Use 'none' if your db server does not use a TCP socket to connect) - (If using a special PORT, you can specify it as HOST:PORT) -
    - Logindb_login - The database login - (Not used for SQLite.) -
    - Database Namedb_password - The database password for the above login
    - (Use 'none' if your db server does not use a TCP socket to connect.) - (Not used for SQLite.) -
    - Database Namedb_database - The name of the database that the calendar - tables reside in. ("intranet" in the examples above.) - For ODBC, this should be the DSN. - For SQLite, this is the filename that will be used. -
    - Connection Persistencedb_persistent - Enable use of persistent (pooled) database connections. - This should typically be enabled. This setting may be disabled for CGI installations. -
    - Database Cache Directorydb_cachedir - To enable caching of database query results, enter a writable directory. This - directory should NOT be in the webserver document path to prevent unauthorized - access to cached sensitive data such as passwords hashes and private event - details. - To disable this feature, leave this field blank. - However, this feature is recommended to enhance your system's performance. -
    -

    Click the Test Settings button to perform the test your settings.

    - -

    Click the Create button to have the installation - script create your database. This option will only be available for fully - supported database types. Retest your database settings if prompted to do - so.

    - -

    TIPIf this step does not complete - properly, then you will have to manually create your database. Detailed instructions - can be found in Appendix B. Then rerun the installation - script to continue the installation.

    - -

    WebCalendar Installation Wizard: STEP 3

    -

    In this section we will perform the required database changes to bring your database up to the required level If you are using a fully supported database, this step will be performed automatically for you If not, the required SQL can be displayed and you should be able to cut & paste it into your database server query window.

    - -

    Database Status

    -

    This should display the current installed version of WebCalendar as well as the version being installed.

    - -

    The following database actions are required -

    - -

    If using a fully supported database type, clicking the Update Database button will create any tables required for this installation or upgrade. If this feature is - not supported, then this button will not be available.

    - -

    The Display Required SQL button will always be available - and if clicked will display the required SQL text that can then be cut & pasted - into the SQL query window of your database program. If using the approach, - please rerun the installation script after completing your required database - updates.

    - -

    TIPIf this step does not complete properly, - then you will have to manually create your database tables. Detailed instructions - can be found in Appendix F. Then rerun the installation - script to continue the installation.

    - -

    WebCalendar Installation Wizard: STEP 4

    - -

    Timezone Conversion

    -

    If upgrading WebCalendar from a previous version, you may be prompted to perform a Timezone Conversion. WebCalendar version 1.0.4 and earlier stored event date and time in the server's -timezone. As of v1.1.0, all event date and time information is stored as UTC time. So, a one-time conversion of existing events will required to prevent event displayed times from -appearing incorrectly.

    - -

    Application Settings

    - -

    Create Default Admin Account: If checked, a DEFAULT ADMINISTRATOR account will be created with username:admin password:admin

    - -

    Application Name: The default value Title will be translated into - WebCalendar into the user's language. Any other entry will not be -translated unless entries are made into the appropriate language.txt files.

    - -

    Server URL: This should be the full URL to access your WebCalendar installation.The trailing "/" is required for proper operation. If this field is left blank, WebCalendar will -calculate the proper value and store it in the database.

    - -

    User Authentication: You can configure the calendar to run in single-user* mode or - multi-user* mode. If this is your first time using the - calendar, it's easier to try single-user. You can always switch to multi-user - later. Leave single_user set to "false" (the default) for multi-user or set - it to "true" and set the value of single_user_login to a login name of your liking - to set the system to single-user mode. (And be sure to set the value of - single_user_login to the login that you would choose if you decide to switch - to multi-user mode some day.)

    -

    Note: If you do decide to switch from single-user mode to multi-user mode, make sure you add in a user to the system for the login you set the - single_user_login variable to. You will need to do this via the - database (mysql, sqlplus, etc.) Look in the tables-mysql.sql - (or tables-oracle.sql, etc.) to see the example of adding in the "admin" user.

    -

    If you are setting up a multi-user calendar, you will need to choose - how your users are authenticated. You must change the settings of - use_http_auth and user_inc - to setup which authentication method to use.

    -

    You currently have five choices:

    -
      -
    1. Web-based authentication (login/passwords verified in the WebCalendar database):
      - use_http_auth = false
      - user_inc = user.php -
    2. -
    3. HTTP-based authentication (login/passwords verified by the web server):
      - use_http_auth = true
      - user_inc = user.php
      - ... and don't forget to setup your web server to handle user - authentication.
      - Note: In order to use HTTP-based authentication, - PHP must be setup as a module for your server rather than a CGI. -
    4. -
    5. NIS-based authentication (login/passwords verified by NIS):
      - use_http_auth = false
      - user_inc = user-nis.php
      - Additional configuration settings will need to be set - in includes/user-nis.php. -
    6. -
    7. LDAP-based authentication (login/passwords verified by LDAP server):
      - use_http_auth = false
      - user_inc = user-ldap.php
      - Additional configuration settings will need to be set - in includes/user-ldap.php. -
    8. -
    9. IMAP-based authentication (login/passwords verified by IMAP server):
      - use_http_auth = false
      - user_inc = user-imap.php
      - Additional configuration settings will need to be set - in includes/user-imap.php. -
    10. -
    - -

    Read-Only: Determines whether events can be added to your WebCalendar.

    - -

    Environment: Normally set this Production. Development will allow -more verbose sql logging and should not be used unless needed.

    - -

    After saving your settings, you should be provided with a -Launch WebCalendar button that will open WebCalendar in a separate -browser window.

    - -

    Congratulations! You have successfully installed WebCalendar on -your system.

    - -

    Keep in mind that if you want to use reminders, you will need to - setup the send_reminders.php script (see below) and keep your admin - setting for "Email enabled" set to "Yes" on the admin settings page.

    -

    At this point, your WebCalendar installation should be up and running. - To access WebCalendar open up your favorite web browser and - type in the URL. The URL will depend on where you installed WebCalendar.

    - -

    TIP On a multi-user system, the only user account created - during installation has the username of "admin" and a password of "admin". You should create - a new admin account and delete this one for security reasons.

    - -
    ↑ top
    - -
    - - -

    Configuring as Event Calendar

    - -

    - If you intend to use WebCalendar as an event calendar, you will - need to enable "Public Access" in the System Settings with the following - steps:

    - -

    This will allow users to access WebCalendar without a username and -password. Only events that are created with the "Public User" as -an event participant will show up in your event calendar for users -who have not logged in. If events are not showing up on your public -calendar, make sure the events have the "Public User" as a participant -and the event has been approved. -

    - -
    ↑ top
    - -
    - - -

    Creating Users

    -

    After logging in as an admin user (the initial username is "admin" with - password "admin"), you will see a common set of links at the bottom - of each page. Follow these steps to create a new user:

    -
      -
    1. Login to WebCalendar as an admin user
    2. -
    3. Click on the "Admin" link at the bottom of any WebCalendar page
    4. -
    5. Click on the "Users" button
    6. -
    7. Click on the "Add New User" link
    8. -
    9. Fill out the form with details for the new user (email address is optional)
    10. -
    11. Click on the "Save" button
    12. -
    -

    TIP On a single-user system, you do not need to create any users.

    -

    TIP For an event calendar, you do not need to create a user for the "public user".

    -
    ↑ top
    -
    - - -

    Setting Up Email Reminders

    -

    PHP does not come with a utility for executing time-based jobs. - So, in order to check periodically for email reminders, a shell - script was written in PHP. You will need two things to get this working:

    -
      -
    1. You should have a version of PHP built as a CGI (so that you can run - php from the command line). This does not mean you must build all - of PHP as a CGI. You can still build PHP as a module for your web - server and then build the CGI-based PHP later.
      - Note: Many Linux distributions and some Windows LAMP packages - come with the PHP built for CGI.
    2. -
    3. You must setup cron (on Linux/UNIX) or something like cron for Windows - to run the send_reminders.php script periodically.
    4. -
    -

    Building PHP as a CGI is outside the scope of these instructions. But, - if you read the PHP instructions, you'll see that the default build - settings will build the CGI-based PHP. If you really can't do this - (perhaps you don't have permission to install anything new on the - system), skip down a couple of paragraphs to an alternate solution - that does not require PHP CGI.

    -

    For Linux/UNIX users, add the following line to the crontab entry of - a user. (This would be the same user that the web server - process runs as.)

    -
    1 * * * * cd /some/directory/webcalendar/tools; ./send_reminders.php
    -

    Of course, replace the directory location to wherever the - send_reminders.php file can be found. If you moved this out of the - tools directory (which is recommended for security reasons), - be sure to update send_reminders.php since it needs - to know where to find other WebCalendar files.

    -

    If you cannot setup PHP as a CGI or have no idea how, you can leave - send_reminders.php in its current location and access it via a URL. - IMHO, this is not the best choice, but it still works. Setup a cron - job to access the URL. For Linux/UNIX users, add the following line to - the crontab entry of a user.

    -
    1 * * * * wget http://yourserverhere/webcalendardirectoryhere/tools/send_reminders.php > /dev/null
    -

    Some users have reported the following works better for their configuration.

    -
    1 * * * * wget -q -O /dev/null http://yourserverhere/webcalendardirectoryhere/tools/send_reminders.php
    -
    -

    You should test this from the command line first to make sure your setup is - correct. If you do not have wget installed on your system, you can use - any tool (lynx, perl script, etc.) that is capable of making an HTTP request for this.

    -
    ↑ top
    -
    - - -

    System Settings

    -

    System Settings allows the administrator to control what features are available to users - as well as default values for certain features.

    -

    Many of these settings can be overridden by users in their Preferences (such - as color). These user configurable settings are identified by - Italics.

    -

    Settings

    -
    -
    Application Name
    -
    Specifies the document title (typically displayed in the window title bar - of most browsers)
    -
    Server URL
    -
    Specifies the base URL of the calendar. This information is needed to - accurately include URLs in email messages (Notifications and Reminders).
    -
    Home URL
    -
    Specifies the URL to return to when exiting WebCalendar. If set, a new menu option will - become visible in the menu.
    -
    Language
    -
    Specifies the default language setting for all users.
    -
    Server Timezone Selection
    -
    Allows you to manually set your server's WebCalendar timezone selection. This has - no effect on the OS Timezone settings.
    -
    Allow user to use themes
    -
    Allows users to have access to pre-defined themes that can set color or user preference - settings. There are a few examples available in the themes folder.
    -
    Themes
    -
    The default theme that will be applied to all users unless they make their own - changes.
    -
    Allow top menu
    -
    Turns on the NEW menu system for all users.
    -
    Date Selectors position
    -
    Determines position of Date Pulldown Selectors. Either inside the NEW - menu or in their original location at the bottom of the calendar.
    -
    Menu theme
    -
    Theme to be used with NEW menu.
    -
    Fonts
    -
    Specifies your preferred font. Multiple font names should be comma-separated.
    -
    Custom script/stylesheet
    -
    Place any custom stylesheet information or JavaScript that will - be included on all WebCalendar pages.
    -
    Custom header
    -
    The custom header allows you to specify HTML to be placed after - the <body> tag but before any WebCalendar content and - included on all WebCalendar pages.
    -
    Custom trailer
    -
    The custom trailer allows you to specify HTML to be placed after - the WebCalendar content but before the </body> tag and - included on all WebCalendar pages.
    -
    Allow external file for header/script/trailer
    -
    If enabled, then the Custom header and Custom trailer settings - can specify a filename on the server rather than HTML.
    -
    Allow user to override header/trailer
    -
    If enabled, then users can add their own custom HTML for - both the header (top of the page) and trailer (bottom of the page) - to customize the appearance of all pages.
    -
    Preferred View
    -
    Specify if users should see the day, week, month, or year after logging in.
    -
    Display small months
    -
    Specifies whether small months are included in month, week, day views.
    -
    Display weekends
    -
    Specifies whether weekends are included in month, week, day, and views.
    -
    Display all days in month view
    -
    Specifies whether the complete month grid is filled with days from previous and - next month.
    -
    Display days with events in bold in month and year views
    -
    Highlights and bolds the text for days containing events in the mini-calendars - used in day, month and year calendars.
    -
    Display description in printer day view
    -
    If enabled, then the "printer friendly" view of the day view will include full event - descriptions rather than just the event name.
    -
    Display Common Use Date/Times as GMT
    -
    Sets the timezone to used for General Purpose dates. Either GMT of the Server - timezone will be selected.
    -
    Date format
    -
    Specifies the default format for displaying dates. These are defined in - file - includes/date_formats.php and if LANGUAGE DEFINED is selected - then the format will be adjusted based on the format in the user's language.txt file.
    -
    Time format
    -
    Specifies the default time format as either 12-hour (3:45pm) or 24-hour (15:14)
    -
    Display 00 minutes always
    -
    Specifies whether times on the hour ( 10:00 ) are displayed with trailing 00.
    -
    Entry interval
    -
    Specify the default options for entry start and stop times. This values will also - determine the display resolution of timebar views as well as user availability.
    -
    Time interval
    -
    Specify the default number of minutes each time block represents in the day and - week display
    -
    Auto-refresh calendars
    -
    If set to "yes," the day, week, and month pages will automatically - reload after a specified duration
    -
    Auto-refresh time
    -
    Specifies how long to wait before the auto-refresh should force a page - to be reloaded
    -
    Require event approvals
    -
    If enabled, then events added to one user's calendar by another - user will require approval.
    -
    Display unapproved
    -
    Specifies whether events that have been added to a calendar but not yet - approved should display on the calendar (in a different color)
    -
    Display week number
    -
    Specifies whether the week number should be displayed in month and week views
    -
    Week starts on
    -
    Specifies if week start on Sunday or Monday
    -
    Work hours
    -
    Specifies the default time range to display in day and week views
    -
    Disable Pop-Ups
    -
    Determines whether event pop-ups are displayed.
    -
    Disable Location field
    -
    Determines whether to use the Location field for events.
    -
    Disable Priority field
    -
    If enabled, the Priority field will not be used
    -
    Disable Access field
    -
    If enabled, the Access field will not be used
    -
    Disable Participants field
    -
    If enabled, the Participants field will not be used, and users will not be - able to add events to any calendar other than their own.
    -
    Disable Repeating field
    -
    If enabled, users will not be able to create repeating events
    -
    Display Site Extras in popup
    -
    If enabled, custom event fields configured in site_extras.php - will appear in the mouse-over popups containing additional - event information.
    -
    Display Participants in popup
    -
    If enabled, event participants will be included in popup details.
    -
    Allow HTML in Description
    -
    Allow the use of HTML in the description field when creating events. In addition, with the addition of either of two optional packages (HTMLArea or CKEditor), you can have a WYSIWYG interface. These packages are available on WebCalendar's Home Page
    -
    Allow viewing other user's calendars
    -
    If enabled, users will be able to view the calendar of another user
    -
    Include add event link in views
    -
    If enabled, Views will include a link to quickly add events to the - specified user's calendar.
    -
    Remember last login
    -
    If enabled, when a returning calendar user reaches the login page, their login name will be pre-filled with the last login username that they entered. (The password field will still be blank.)
    -
    Check for event conflicts
    -
    Specifies if the system should check for scheduling conflicts when a user adds or updates an event.
    -
    Conflict checking months
    -
    If conflict checking is enabled, this specifies how many months past the initial date the system will check for conflicts when a user adds or updates a repeating event.
    -
    Allow users to override conflicts
    -
    If enabled, users will be warned when there is an event conflict and be presented with the option of scheduling the event anyhow.
    -
    Limit number of timed events per day
    -
    If enabled, users can be limited to a specific number of timed events per day
    -
    Maximum timed events per day
    -
    Specifies that maximum number of events that can be scheduled in one day of any one user.
    -
    Specify timed event length by
    -
    Allows you to configure event lengths to be specified - by either duration or end time.
    -
    Brief Description Length
    -
    Specifies the maximum numbers of characters to display in calendar views.
    -
    Display Lunar Phases in month view
    -
    Show Lunar Calendar icons in month view. This will not use existing event space.
    -
    Disable Cross-Day Events
    -
    Determines whether to display events that cross user's day boundary as - multiple events.
    -
    -

    Public Access

    -
    -
    Allow public access
    -
    If enabled, anonymous users will be able to view the public access calendar without logging in.
    -
    Public access visible by default
    -
    If enabled, user's can go to the public access page without having to select it.
    -
    Public access is default participant
    -
    If enabled, public access will be added to every event created.
    -
    Public access can view other users
    -
    If enabled, public access user's will be able to see the calendar of other WebCalendar users. Use with caution!
    -
    Public access can add events
    -
    If enabled, anonymous users will be able to submit new events
    -
    Public access new events require approval
    -
    If enabled, events submitted to the public access calendar (by anonymous users) will require approval by an admin user. If not enabled, then new events will appear on the public access calendar as soon as they are submitted.
    -
    Public access can view participants
    -
    If enabled, public access users can view the names of other participants for any event that public access is a participant. Use with caution!
    -
    Override event name/description for public access
    -
    If enabled, the value of the following setting will be used to mask the name and description of events.
    -
    Text to display to public access
    -
    Text to display as explained above.
    -
    -

    User Access Control

    -
    -
    User Access Control enabled
    -
    User Access Control provides more advanced control of - user access permissions. - If enabled, a "User Access Control" button will appear on the - main Admin page and/or on the Settings menu of the NEW top menu. This page - will allow you to configure:
    -
    -
      -
    • which functions in the system each user can access
    • -
    • which user calendars each user can access - (user A can edit events on user B's calendar, etc.)
    • -
    -
    -
    -

    Groups

    -
    -
    Groups enabled
    -
    Specifies if group features should be enabled
    -
    User sees only his group
    -
    If enabled, users will be unaware of any users that are not in the same group as the user.
    -
    -

    NonUser Calendars

    -
    -
    Nonuser Calendars Enabled
    -
    If enabled, you may create "nonuser calendars" in WebCalendar. - A nonuser calendar is a calendar without a user login. It can - be used to manage a resource like a conference room's availability. - Or it can be used to place common events (like holidays) that multiple - users may want to access as a layer. - You will need to enable nonuser calendars in order to subscribe - to remote iCalendar URLs from within WebCalendar (allowing the events - from an iCalendar or hCalendar file elsewhere on the net to appear in your - WebCalendar calendar.) -
    -
    Display in participants list at
    -
    If enabled, then nonuser calendars can be selected as - participants to events.
    -
    -

    Other

    -
    -
    Reports enabled
    -
    If enabled, user's will be able to create and generate reports.
    -
    Allow remote subscriptions
    -
    If enabled, user's will be able enable their own subscription settings. There are currently two main ways to publish events with WebCalendar.
    -
    -
    • publish.php will provide outbound publishing to a calendar client
    • -
    • icalclient.php will provide two-way full synchronization between WebCalendar and another calendar client such as Sunbird, Apple iCal. - (PHP 4.3+ required)
    • -
    - -
    Allow remote calendars
    -
    If enabled, user's will be able to add a special type Non-User Calendar - that includes a URL that point to the remote location. The user can manually - synchronize the remote calendars if desired. In addition, tool/reload_remotes.php - can be set up as a cron job to automatically reload all remote calendars - as desired. Currently both iCalendar and hCalendar calendars can be consumed - by WebCalendar. The calendar type should be automatically detected based - on the URL and calendar content. Users will need to create a layer to make - a remote calendar visible on their calendars, just like regular Non-User - Calendars.
    -
    Enable RSS feed
    -
    If enabled, a link is added to all pages that permits some browsers to - create a persistent RSS feed to that page. Currently, only Firefox and IE - 7.0 supports this functionality. Also, the setting will enable the use of - the rss.php script generate RSS feeds to RSS clients. User's will also be - required to enable this feature in their respective preference settings.
    -
    Categories enabled
    -
    Specifies if category features should be enabled
    -
    Category Icon Upload enabled
    -
    Specifies if category icons can be uploaded by users. This requires that - a folder named icons exist in the WebCalendar directory.
    -
    Display small task list
    -
    If enabled, a small task window will be displayed in the month and day calendars. These tasks are compatible with the VTODO component of RFC2445 (iCalendar)
    -
    Display tasks in Calendars
    -
    If enabled, tasks are displayed along with events in calendars. The date they appear is the due date but if the due date has passed without the task being completed, the task will shift to the current day.
    - -
    Allow external users
    -
    If enabled, the create/edit event page will contain a text area to include - the names (and optional email address) of event participants that are not calendar users.
    -
    External users can receive email notifications
    -
    If enabled, event participants entered into the External Participants area will receive email notifications at the same time as calendar users (if an email address was specified for the External Participant).
    -
    External users can receive email reminders
    -
    If enabled, event participants entered into the External Participants area will receive email reminders at the same time as calendar users (if an email address was specified for the External Participant).
    -
    Allow self-registration
    -
    If enabled, new users are permitted to setup their own accounts and log into WebCalendar without admin intervention. Use with caution!
    -
    Restrict self-registration to blacklist
    -
    If enabled, admin can configure the includes/blacklist.php to restrict or permit self-registration based on the user's IP. This will restrict access to existing users or new user's set up by admin. Details and examples are available in the top of the file.
    -
    Generate passwords and send to new users
    -
    If enabled, self-registration user's will be emailed a randomly generated password that they can then use to access WebCalendar normally. Hopefully, this will prevent some spammers and hackers from misusing the self-registration process.
    -
    Allow file attachments to events
    -
    If enabled, attachments can be uploaded and associated with events. The - attachments are stored in the database, so care should be taken if performance - is an issue. Additionally, permission may extended to participants and/or - anyone.
    -
    Allow comments to events
    -
    If enabled, comments can be associated with events. Additionally, - permission may extended to participants and/or anyone.
    -
    -

    Email

    -
    -
    Email enabled
    -
    Specifies if email functionality should be enabled. If set to "No," then no email messages will be sent at any time.
    -
    Default sender address
    -
    Specifies the email originator to use when the system sends out email Notifications and Reminders
    -
    Email Mailer
    -
    Specifies the email program to use. (PHP mail, SMTP, or sendmail)
    -
    SMTP Host name(s)
    -
    Specifies the SMTP server name(s) or IP(s) if SMTP is selected above.
    -
    SMTP Port Number
    -
    Specifies the SMTP port number if SMTP is selected above. Default is 25.
    -
    SMTP Authentication
    -
    Specifies whether authentication is required if SMTP is selected above. Additionally, - SMTP Username and SMTP Password will be required.
    -
    Event reminders
    -
    Specifies if email reminders for events that include a reminder should be sent
    -
    Events added to my calendar
    -
    Specifies if the system should send email when an event is added
    -
    Events updated on my calendar
    -
    Specifies if the system should send email when an event is updated
    -
    Events removed from my calendar
    -
    Specifies if the system should send email when an event is deleted
    -
    Event rejected by participant
    -
    Specifies if the system should send email when a participant to an event rejects the event
    -
    -

    Colors

    -
    -
    Allow user to customize colors
    -
    Specifies whether color settings should be available to users in their Preferences
    -
    Enable gradient images for background colors
    -
    If enabled, the background of calendar table cells will be rendered with a gradient image based on the background color selected for that cell type. This option requires that php be compiled with the gd module.
    -
    Document background
    -
    Specifies the background color of all pages
    -
    Document title
    -
    Specifies the color of page title on each page
    -
    Document text
    -
    Specifies the default text color on each page
    -
    My event text
    -
    Specifies the default text color for the user's events
    -
    Table grid color
    -
    Specifies color of the lines that make HTML table grids on each page
    -
    Table header background
    -
    Specifies the default background for the heading of any HTML table
    -
    Table header text
    -
    Specifies the default text color for the heading of any HTML table
    -
    Table cell background
    -
    Specifies the background color for table cells
    -
    Table cell background for current day
    -
    Specifies the background color for the table cell containing the current - date (today)
    -
    Table cell background for days with events
    -
    Specifies the background color of table cells containing events. This - setting will not override the today setting and - if identical to today, will be ignored.
    -
    Table cell background for weekend
    -
    Specifies the background color for table cells that represent a Saturday or Sunday
    -
    Table cell background for other month
    -
    Specifies the background color for table cells of other month days.
    -
    Week number color
    -
    Specifies the text color for week numbers (if enabled)
    -
    Event popup background
    -
    Specifies the background color of event popup areas
    -
    Event popup text
    -
    Specifies the text color of event popup areas
    -
    -
    ↑ top
    -
    - - -

    Custom Event Fields

    -

    You may want to customize the event-specific fields found in - the includes/site_extras.php field. - If this is your first time using the calendar, you can skip - this step and come back later since this step - is optional.

    -

    You can use this feature to add extra - fields to your calendar events. For example, you can add a URL, - a contact email address, or a pulldown containing predefined attributes.

    -

    When defining a new custom field, the following types listed below - are available. "Arg 1" and "Arg 2" have different meaning depending on the type - of field. In some cases, "Arg 1" and "Arg 2" are not used.

    -
    - - - - - - - - - - - -
    - Type - Description - Arg 1 - Arg 2 -
    - EXTRA_TEXT - Allows the user to enter a single line of text - Specifies the size of the text form element as it would appear in the - following ("NN" would be replaced with Arg 1):
    -    <input size="NN" ...
    - N/A -
    - EXTRA_MULTILINETEXT - Allows the user to enter multiple lines of text - Specifies how many characters wide the textform element should be as it - would appear in the following ("NN" would be replaced with Arg 1):
    -    <textarea cols="NN" ...
    - Specifies how many lines long the textform element should be as it would - appear in the following ("NN" would be replaced with Arg 1):
    -    <textarea rows="NN" ... -
    - EXTRA_URL - Allows the user to enter a single line of text and will be displayed as a - link when viewed - N/A - N/A -
    - EXTRA_DATE - Allows the user to select a date using the standard date selection form - elements - N/A - N/A -
    - EXTRA_EMAIL - Allows the user to enter a single line of text and will be displayed as - a mailto URL link - N/A - N/A -
    - EXTRA_USER - Allows selection of a WebCalendar user from a pulldown list - N/A - N/A -
    - EXTRA_RADIO - Allows selection of a single item from a group of radio buttons - Specifies the list of available options using the PHP array - The default item that will be selected (from list above) -
    - EXTRA_SELECTION_LIST - Presents the user with a selection list (single selection) to choose from - Specifies the list of available options using the PHP array - function - 0 indicates single selection, 1 indicates multiple selection and - also the maximum size -
    - EXTRA_CHECKBOX - Will display a checkbox control - N/A - N/A -
    -
    -
    ↑ top
    -
    - - -

    Frequently Asked Questions

    -
    - - -
    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: +
    + +

    Introduction

    +

    WebCalender is an open source PHP-based multi-user calendar.

    +

    Features:

      -
    • XAMPP new
    • - +
    • Multi-user support
    • +
    • Group support
    • +
    • View day-at-glance
    • +
    • View month-at-glance
    • +
    • View week-at-glance
    • +
    • View year-at-glance
    • +
    • View another user's calendar
    • +
    • View multiple users' calendars at the same time
    • +
    • View one or more users' calendar via layers on top of your own calendar
    • +
    • Public calendar (that requires no login) where anonymous users submit events that are approved by an administrator
    • +
    • Add/Edit/Delete users
    • +
    • Add/Edit/Delete events/todos
    • +
    • Repeating events
    • +
    • Custom event fields
    • +
    • Search interface for calendar entries
    • +
    • User-configurable preferences for colors, 12/24 time format, Week start on Sun or Mon, default work hours
    • +
    • Online help
    • +
    • Checks for scheduling conflicts
    • +
    • Support for multiple timezones
    • +
    • Users can accept or reject events added by another user to their calendar
    • +
    • Email reminders
    • +
    • Email notifications for new events
    • +
    • Support, at least partially, for more than 40 languages: +
        +
      • Afrikaans
      • +
      • Albanian
      • + +
      • Arabic
      • + + +
      • Basque
      • + + + +
      • Bulgarian
      • +
      • Catalan
      • + + +
      • Chinese-Simplified
      • +
      • Chinese-Traditional
      • +
      • 简体中文(GB2312)
      • +
      • 繁體中文(Big5)
      • + +
      • Croatian
      • +
      • Czech
      • +
      • Danish
      • +
      • Deutsche (German)
      • +
      • English
      • +
      • Español (Spanish)
      • + +
      • Estonian
      • + + + +
      • Finnish
      • +
      • Français (French)
      • + +
      • Galician
      • + +
      • Greek
      • + + + + +
      • Hebrew
      • + + +
      • Hollands (Dutch)
      • +
      • Holo (Taiwanese)
      • +
      • Hungarian
      • +
      • Icelandic
      • + +
      • Indonesian
      • + +
      • Italiano (Italian)
      • +
      • Japanese
      • +
      • Japanese (EUCJP, SJIS)
      • + + + + + +
      • Korean
      • + + + + + +
      • Lithuanian
      • + + + + + + + + + + + +
      • Norsk (Norwegian)
      • + + + +
      • Polish
      • +
      • Portuguese/Brazil
      • +
      • Portuguese
      • + +
      • Romanian
      • +
      • Русско (Russian)
      • + + +
      • Serbian
      • + + + + +
      • Slovak
      • +
      • Slovenian
      • + + + +
      • Suomalainen (Finnish)
      • +
      • Svensk (Swedish)
      • + +
      • Swedish
      • + + + + + + +
      • Turkish
      • + + + + + + +
      • Welsh
      • + + + + +
      +
    • +
    • Exporting to and importing from: +
        +
      • Palm Pilot
      • +
      • iCalendar
      • +
      • vCalendar
      • +
      • hCalendar (import only, requires PHP5)
      • +
      +
    • +
    • Authentication using: +
        +
      • web-based
      • +
      • HTTP authentication
      • +
      • LDAP
      • +
      • NIS
      • +
      • IMAP
      • +
      • support for external application authentication (Joomla)
      • +
      +
    • +
    • Activity log that tracks: +
        +
      • event creation
      • +
      • event updates
      • +
      • event acceptance
      • +
      • event rejection
      • +
      • email notifications
      • +
      • email reminders
      • +
      +
    • +
    • Synchronization and Syndication: +
        +
      • Two-way authenticated iCalendar (ics) sync
      • +
      • Anonymous iCalendar (ics) publishing
      • +
      • RSS 2.0 feed
      • +
      +
    -
    -
    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: + ↑ top +
    + +

    System Requirements

      -
    • XAMPP new
    • +
    • PHP 7.4 or later: PHP 7.0-7.3 and 5.X are no longer supported since they have reach end-of-life status. Expect only PHP 8 support sometime soon.
    • +
    • Database (see below)
    • +
    • CSS-enabled browser: +
        +
      • Mozilla Firefox
      • +
      • Opera
      • +
      • Microsoft Internet Explorer
      • +
      • Microsoft Edge
      • +
      • Apple Safari
      • +
      +
    • +
    • JavaScript-enabled browser
    • +
    • If not using HTTP-based authentication, then browser cookies are required
    -
    -
    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: +

    You must have one of the following databases installed:

      - -
    • PHP.net new
    • +
    • MySQL/MariaDB
    • +
    • IBM DB2
    • +
    • Interbase
    • +
    • MS SQL Server
    • +
    • ODBC
    • +
    • Oracle 8+
    • +
    • PostgreSQL
    • +
    • SQLite
    -
    -
    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. -
    3. In System Settings, set "Allow public access" to "Yes."
    4. -
    5. If you want people to be able to submit new events - through public access, set "Public access can add events" - to "Yes."
    6. -
    7. 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.
    8. -
    9. Login using one of the accounts you have setup. - Add a new event, and select "Public User" as one of the - participants.
    10. -
    11. 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.
    12. -
    13. Go to the Login page. You will see a "Access public calendar" - link that will bring you to the calendar for public access.
    14. -
    15. By default, the index.php page should send users to - the public calendar.
    16. -
    -
    - -
    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. - + +
    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
    • + - 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 height="250" width="300" scrolling="yes" src="upcoming.php"></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 height="200" width="180" scrolling="yes" src="minical.php"></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 new. Here's what you need to do. -
      -
    1. look in the "translations" directory
    2. -
    3. 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)
    4. -
    5. Now translate all the text to the _right_ of the ": " into the - new language. Do not alter the text to the left of the ": ".
    6. -
    7. 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)
    8. -
    9. Add the new language to both the $languages array and the - $browser_languages arrays defined in includes/translate.php.
    10. -
    11. Test it out...
    12. -
    13. 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 >>
    +        
    +      
    +
    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: + +
    +
    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: + +
    +
    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. +
    3. In System Settings, set "Allow public access" to "Yes."
    4. +
    5. If you want people to be able to submit new events through public access, set "Public access can add events" to "Yes."
    6. +
    7. 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.
    8. +
    9. Login using one of the accounts you have setup. Add a new event, and select "Public User" as one of the participants.
    10. +
    11. 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.
    12. +
    13. Go to the Login page. You will see a "Access public calendar" link that will bring you to the calendar for public access.
    14. +
    15. By default, the index.php page should send users to the public calendar.
    16. +
    +
    +
    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" width="300" height="250" 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" width="180" height="200" 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. +
    3. 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)
    4. +
    5. Now translate all the text to the _right_ of the ": " into the new language. Do not alter the text to the left of the ": ".
    6. +
    7. 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)
    8. +
    9. Add the new language to both the $languages array and the $browser_languages arrays defined in includes/translate.php.
    10. +
    11. Test it out...
    12. +
    13. Create a pull request on Github.
    14. +
    +
    +
    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 >>
    +#
    +        

    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.
    - +# +
    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.
    -
    -
    ↑ top
    -
    - - -

    Troubleshooting

    + + ↑ top +
    + +

    Troubleshooting

    -
    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 new - 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. -
    3. In WebCalendar's System Settings, you have set the "Email Enabled" setting to "Yes".
    4. -
    5. 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.
    6. -
    7. For a Notification, make sure you have the type of Notification - set to "Yes" in the user's Preferences.
    8. -
    9. For a Reminder: +
      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. +
      3. In WebCalendar's System Settings, you have set the "Email Enabled" setting to "Yes".
      4. +
      5. 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.
      6. +
      7. For a Notification, make sure you have the type of Notification set to "Yes" in the user's Preferences.
      8. +
      9. 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.
        • +
        +
      10. +
      +
      +
      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
      + +
      + +
    + ↑ top +
    + +

    Getting Help

    +

    WebCalendar development is hosted on Github.com. You can try the following resources available there:

    - + ↑ top +
    + +

    Licensing

    +

    WebCalendar is distributed under the open source GNU General Public License. If you have questions about this license, please read their GPL FAQ.

    + ↑ top +
    + +

    Glossary

    +
    +
    Activity Log
    +
    A summary of recent updates to calendar data
    +
    Assistant
    +
    A calendar user that has been designated by another calendar user (the Boss) to help manage their calendar
    +
    Boss
    +
    A calendar user that has designated another calendar user (the Assistant) to help manage his calendar
    +
    External User
    +
    A calendar participant that does not have a calendar user account
    +
    Group
    +
    A mechanism of dividing up a large set of users into smaller sets of users
    +
    IMAP
    +
    Internet Message Access Protocol, an optional method of user authentication.
    +
    Layer
    +
    A function that allows a user to overlay another user's calendar on top of his own calendar so that the standard day, week and month pages show both his own and the layered user's events
    +
    LDAP
    +
    LDAP (Lightweight Directory Access Protocol) is an Internet protocol used to maintain user directories
    +
    Multi-User Mode
    +
    When WebCalendar is configured in Multi-User Mode, there can be multiple user accounts, each with his own calendar. Unless Public Access is enabled, all users will be required to login before they can access the system.
    +
    NIS
    +
    NIS (Network Information Service) is a UNIX-based user authentication system for managing user directories in a network
    +
    NonUser Calendar
    +
    A participant to a calendar event that is not a calendar user. This is typically used either as a resource (conference room, laptop computer) that needs to be shared or as a shared calendar that other users overlay onto their own calendar using layers (company-wide calendar, holiday calendar, etc.)
    +
    Notification
    +
    An email message that is sent when an event is added, removed or updated in the user's calendar by another user
    +
    Preferred View
    +
    The standard page (day, week, month or year) that will be presented to the user after logging in (set in user Preferences)
    +
    Public Access
    +
    A System Setting that will allow anonymous users to access the calendar. See the simple instructions for setting this up in the FAQ section. (Requires WebCalendar to be configured in Multi-User Mode).
    +
    Reminder
    +
    An email message that is sent before an event to remind the participant
    +
    Single-User Mode
    +
    When WebCalendar is configured in Single-User Mode, there is no concept of users. You will be managing a single calendar and no login will be required. Anyone accessing this calendar will have full privileges to view, add, edit and delete all events.
    +
    Time Interval
    +
    The amount of time each "block" will represent in either the day or week view (set in user Preferences)
    +
    User Access Control (UAC)
    +
    The fully configurable feature to allow extremely granular access control to user. This control applies to system options and features as well as other user's calendars.
    +
    View
    +
    A customized page that presents the events of selected users
    +
    Work Hours
    +
    The default hours to show in the week and day view where events are displayed in blocks of time (set in user Preferences)
    +
    + ↑ top +
    + +

    Appendix A: Using phpMyAdmin

    +

    If you have phpMyAdmin installed and configured to manage your MySQL database, use the following steps to setup WebCalendar. (The following information is based on phpMyAdmin version 2.6.1.)

    +
      +
    1. On the initial phpMyAdmin page, under the "MySQL" heading, the first option should be "Create new database." Enter the name you have chosen for the database and press the "Create" button. (The default database name used by WebCalendar is "intranet".) After pressing the "Create" button, it should say: "Database <your database name here> has been created."
    2. +
    3. Click on the home icon (the small house) in the left-side navigation. This will bring you back to your phpMyAdmin home page.
    4. +
    5. (Optional) Create new MySQL user. If you already have a MySQL login that you would like to use, you can skip this step.
    6. +
    7. +
        +
      • Click on the "Privileges" link under the "MySQL" heading.
      • +
      • Below any existing users listed, click on the link "Add a new User."
      • +
      • Fill in the details of your new database user. The default username for WebCalendar is "webcalendar" with a password of "webcal01". Leave the "Host" field set to "Any host".
      • +
      • From the list of "Global privileges", be sure to select: SELECT, INSERT, UPDATE, DELETE, FILE, CREATE, ALTER, INDEX, DROP
      • +
      • Click on the "Go" button.
      • +
      • You should see a page that says "You have added a new user."
      • +
      +
    8. +
    9. Click on the "Databases" tab at the top of the page.
    10. +
    11. From the list of databases on the page, click on the name of the database that you created.
    12. +
    13. Click on the "SQL" tab at the top of the page.
    14. +
    15. At the bottom of the page, there is an area to upload a SQL file. Click on the "Browse" button and select the tables-mysql.sql file in the WebCalendar toplevel directory. Then, press the "Go" button.
    16. +
    17. The top of the page should say "Your SQL-query has been executed successfully."
    18. +
    19. You have now finished creating the WebCalendar database tables.
    - -
    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: - -
    -
    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 -
    - -
    - - - -
    ↑ top
    -
    - - -

    Getting Help

    -

    WebCalendar development is hosted on Github.com. You can try - the following resources available there:

    - -
    ↑ top
    -
    - - -

    Licensing

    -

    WebCalendar is distributed under the open source - GNU General Public License new. - If you have questions about this license, please - read their GPL FAQ new.

    -
    ↑ top
    -
    - - -

    Glossary

    -
    -
    Activity Log
    -
    A summary of recent updates to calendar data
    -
    Assistant
    -
    A calendar user that has been designated by another calendar user - (the Boss) to help manage their calendar
    -
    Boss
    -
    A calendar user that has designated another calendar user - (the Assistant) to help manage his calendar
    -
    External User
    -
    A calendar participant that does not have a calendar user account
    -
    Group
    -
    A mechanism of dividing up a large set of users into smaller sets of users
    -
    IMAP
    -
    Internet Message Access Protocol, an optional method of user authentication.
    -
    Layer
    -
    A function that allows a user to overlay another user's calendar - on top of his own calendar so that the standard day, week and month - pages show both his own and the layered user's events
    -
    LDAP
    -
    LDAP (Lightweight Directory Access Protocol) is an Internet protocol - used to maintain user directories
    -
    Multi-User Mode
    -
    When WebCalendar is configured in Multi-User Mode, - there can be multiple user accounts, each with his - own calendar. Unless Public Access is enabled, all users - will be required to login before they can access the system.
    -
    NIS
    -
    NIS (Network Information Service) is a UNIX-based user authentication - system for managing user directories in a network
    -
    NonUser Calendar
    -
    A participant to a calendar event that is not a calendar user. This is typically used either as a resource (conference room, - laptop computer) that needs to be shared or as a shared calendar - that other users overlay onto their own calendar using layers (company-wide calendar, - holiday calendar, etc.)
    -
    Notification
    -
    An email message that is sent when an event is added, removed - or updated in the user's calendar by another user
    -
    Preferred View
    -
    The standard page (day, week, month or year) that will - be presented to the user after logging in - (set in user Preferences)
    -
    Public Access
    -
    A System Setting that will allow anonymous users - to access the calendar. - See the simple instructions for - setting this up in the FAQ section. - (Requires WebCalendar to be configured in Multi-User Mode).
    -
    Reminder
    -
    An email message that is sent before an event to remind - the participant
    -
    Single-User Mode
    -
    When WebCalendar is configured in Single-User Mode, - there is no concept of users. You will be managing a single - calendar and no login will be required. - Anyone accessing this calendar will have full privileges to - view, add, edit and delete all events.
    -
    Time Interval
    -
    The amount of time each "block" will represent in - either the day or week view - (set in user Preferences)
    -
    User Access Control (UAC)
    -
    The fully configurable feature to allow extremely granular - access control to user. This control applies to system options and - features as well as other user's calendars.
    -
    View
    -
    A customized page that presents the events of selected users
    -
    Work Hours
    -
    The default hours to show in the week and day view where - events are displayed in blocks of time (set in - user Preferences)
    -
    -
    ↑ top
    -
    - - -

    Appendix A: Using phpMyAdmin

    -

    -If you have phpMyAdmin -installed and configured to manage your MySQL database, use the -following steps to setup WebCalendar. -(The following information is based on phpMyAdmin version 2.6.1.)

    -
      -
    1. On the initial phpMyAdmin page, under the "MySQL" heading, the first - option should be "Create new database." Enter the name you have - chosen for the database and press the "Create" button. - (The default database name used by WebCalendar is "intranet".) - After pressing the "Create" button, it should say: - "Database <your database name here> has been created."
    2. -
    3. Click on the home icon (the small house) in the left-side - navigation. This will bring you back to your phpMyAdmin home page.
    4. -
    5. (Optional) Create new MySQL user. If you already have - a MySQL login that you would like to use, you can skip this step.
    6. -
      • -
      • Click on the "Privileges" link under the "MySQL" heading.
      • -
      • Below any existing users listed, click on the link "Add a new User."
      • -
      • Fill in the details of your new database user. - The default username for WebCalendar is "webcalendar" - with a password of "webcal01". - Leave the "Host" field set to "Any host".
      • -
      • From the list of "Global privileges", be sure to select: - SELECT, INSERT, UPDATE, DELETE, FILE, CREATE, ALTER, INDEX, DROP
      • -
      • Click on the "Go" button.
      • -
      • You should see a page that says "You have added a new user."
      • -
    7. -
    8. Click on the "Databases" tab at the top of the page.
    9. -
    10. From the list of databases on the page, click on the name - of the database that you created.
    11. -
    12. Click on the "SQL" tab at the top of the page.
    13. -
    14. At the bottom of the page, there is an area to upload a SQL file. - Click on the "Browse" button and select the tables-mysql.sql - file in the WebCalendar toplevel directory. - Then, press the "Go" button.
    15. -
    16. The top of the page should say "Your SQL-query has been executed - successfully."
    17. -
    18. You have now finished creating the WebCalendar database tables.
    19. - -
    - -
    ↑ top
    -
    - - -

    Appendix B: Database Setup

    -

    There are three steps in setting up the database:

    -
      -
    1. Creating the database
    2. -
    3. Creating the user
    4. -
    5. Creating the required tables
    6. -
    -

    There are SQL files provided for each of the supported databases. - These files are typically used during the web-based installation process. - However, you can also manually populate your database using the files - which can be found in the install/sql directory. - Most of the commands below assume you are starting from this directory - so that the SQL files (e.g. tables-oracle.sql) are in your - current directory.

    -

    Follow the steps outlined below for the database you are using. - When complete, a single user account will be created - with the login "admin" and password "admin", which you are encouraged - to use to create your own account.

    -

    Note: In the examples below, text in bold - represents text that you must type in.

    -

    Security: The default values for database, login, and - password (intranet, webcalendar, and webcal01) are for demonstration purposes only - and should never be used in a production environment.

    -

    MySQL

    -

    The following will create a database named "intranet".

    -
    mysqladmin create intranet
    -

    Next, create the database user account that will be used to access the database.

    -
    mysql --user=root mysql
    -mysql> GRANT ALL PRIVILEGES ON *.* TO webcalendar@localhost
    -IDENTIFIED BY 'webcal01' WITH GRANT OPTION;
    +    ↑ top
    +    
    + +

    Appendix B: Database Setup

    +

    There are three steps in setting up the database:

    +
      +
    1. Creating the database
    2. +
    3. Creating the user
    4. +
    5. Creating the required tables
    6. +
    +

    There are SQL files provided for each of the supported databases. These files are typically used during the web-based installation process. However, you can also manually populate your database using the files which can be found in the install/sql directory. Most of the commands below assume you are starting from this directory so that the SQL files (e.g. tables-oracle.sql) are in your current directory.

    +

    Follow the steps outlined below for the database you are using. When complete, a single user account will be created with the login "admin" and password "admin", which you are encouraged to use to create your own account.

    +

    Note: In the examples below, text in bold represents text that you must type in.

    +

    Security: The default values for database, login, and password (intranet, webcalendar, and webcal01) are for demonstration purposes only and should never be used in a production environment.

    +

    MySQL

    +

    The following will create a database named "intranet".

    >mysqladmin create intranet

    +

    Next, create the database user account that will be used to access the database. +

    mysql --user=root mysql
    +mysql> GRANT ALL PRIVILEGES ON *.* TO webcalendar@localhost IDENTIFIED BY 'webcal01' WITH GRANT OPTION;
     mysql> FLUSH PRIVILEGES;
    -mysql> QUIT
    -

    If you will be accessing MySQL from a different machine than - the one running the web server, repeat the command above - and replace 'localhost' with the hostname of the other machine.

    -

    Create the calendar tables using the supplied tables-mysql.sql file:

    -
    mysql intranet < tables-mysql.sql
    -

    In the above example, "intranet" is the name of your database.

    - -

    Note: If you are using - phpMyAdmin to - manage your MySQL database, follow the - instructions in Appendix A.

    - -

    Oracle

    -

    The following will create a tablespace named "webcalendar". - From the command line, startup sqlplus and - issue the following command:

    -
    sqlplus
    +mysql> QUIT
    +      
    +

    +

    If you will be accessing MySQL from a different machine than the one running the web server, repeat the command above and replace 'localhost' with the hostname of the other machine.

    +

    Create the calendar tables using the supplied tables-mysql.sql file:

    mysql intranet < tables-mysql.sql

    +

    In the above example, "intranet" is the name of your database.

    +

    Note: If you are using phpMyAdmin to manage your MySQL database, follow the instructions in Appendix A.

    +

    Oracle

    +

    The following will create a tablespace named "webcalendar". From the command line, startup sqlplus and issue the following command: +

    sqlplus
     SQL> CREATE TABLESPACE webcalendar
     DATAFILE 'webcalendar.dat' SIZE 10M
    -AUTOEXTEND ON NEXT 10M MAXSIZE 40M;
    -

    Next, create the database user account that will be used to access the database.

    -
    sqlplus
    -SQL> CREATE USER webcalendar IDENTIFIED BY webcal01
    -DEFAULT TABLESPACE webcalendar;
    +AUTOEXTEND ON NEXT 10M MAXSIZE 40M;
    +      
    +

    +

    Next, create the database user account that will be used to access the database. +

    sqlplus
    +SQL> CREATE USER webcalendar IDENTIFIED BY webcal01 DEFAULT TABLESPACE webcalendar;
     SQL> GRANT dba TO webcalendar;
    -SQL> quit
    -

    Create the calendar tables using the supplied tables-oracle.sql file:

    -
    sqlplus webcalendar/webcal01
    +SQL> quit
    +      
    +

    +

    Create the calendar tables using the supplied tables-oracle.sql file: +

    sqlplus webcalendar/webcal01
     SQL> @tables-oracle;
    -SQL> quit
    - -

    PostgreSQL

    -

    The following will create a database named "webcalendar". - From the command line as the psql user: issue the following commands:

    -
    $ su postgres
    +SQL> quit
    +      
    +

    +

    PostgreSQL

    +

    The following will create a database named "webcalendar". From the command line as the psql user: issue the following commands: +

    $ su postgres
     # createdb webcalendar
     # createuser --no-createdb --no-adduser -P webcalendar
    -# psql webcalendar webcalendar
    -\i tables-postgres.sql
    -\q
    - -

    Interbase

    -

    The following will create a database named "WEBCAL.gdb". - From the command line, startup usql and - issue the following command:

    -
    CREATE DATABASE 'WEBCAL.gdb';
    - -

    Create the calendar tables using the supplied tables-ibase.sql file:

    -
    isql
    +# psql webcalendar webcalendar
    +\i tables-postgres.sql
    +\q
    +      
    +

    +

    Interbase

    +

    The following will create a database named "WEBCAL.gdb". From the command line, startup usql and issue the following command:

    >CREATE DATABASE 'WEBCAL.gdb';

    +

    Create the calendar tables using the supplied tables-ibase.sql file: +

    isql
     connect /path/WEBCAL.gdb;
    -input path/table-ibase.sql;
    - -

    ODBC

    -

    Setup will depend on which database you are using. - When it comes time to create the tables, - the tables-postgres.sql file should work for most - databases.

    -

    Microsoft SQL Server

    -

    Create a database, intranet, and add a user, webcalendar, to access this database. The user should be granted public, db_datareader, - and db_datawriter privileges. Open SQL Query Analyzer then open - the file tables-mssql.sql. Make sure you have identified intranet as the target database and Execute the contents of the sql file.

    - - - -

    Appendix C: Setting Up Reminders on Windows

    - -

    You have two options to choose from when setting up email - reminders on a Windows platform. - You can either install a cron package for Windows, - or you can use the Windows Task Scheduler.

    - -

    Installing a Cron Package

    -

    -If you install a cron package for Windows, you will need to setup -to setup a cron job. -(UNIX cron is a tool for used to run tasks as specified times anywhere -from every minute to once a year.)

    -

    -First, you should create a sendreminders.bat file -that contains a single line:

    -
    C:\your\path\to\php.exe C:\your\path\to\webcalendar\tools\send_reminders.php
    -

    You can place this sendreminders.bat file anywhere on your -file system.

    -

    Next, you need to setup the cron job. -The crontab entry should look like -the following (replace with the correct path to your -newly created sendreminders.bat file):

    - -
    1 * * * * C:\your\path\to\sendreminders.bat
    - -

    The "1 * * * *" will tell the cron schedule to run this task -at 1 after the hour all day long (12:01am, 1:01am, 2:01am, etc.) -If you only want to run it once per day, you could use:

    -
    1 4 * * * C:\your\path\to\sendreminders.bat
    -

    This would tell the cron scheduler to run the task at 4:01am -every day. -For more information about the syntax of cron, check the documentation -for the package you have installed or -view the UNIX man page for crontab - -

    There are many cron packages for Windows available. - Try searching Github for one this is currently maintained.

    - -

    Using the Windows Task Schedule

    - -

    Follow the steps listed below to setup a new task - in the Windows Task Scheduler. - (These instructions were created with Windows XP Professional. - Other versions of Windows might be different.)

    - -
      - -
    1. Create a new batch file called sendreminders.bat. - The contents of this file should be a single line: -
      C:\your\path\to\php.exe C:\your\path\to\webcalendar\tools\send_reminders.php
      -
    2. - -
    3. On Windows XP, go to Control Panel
    4. -
    5. Double-click on "Scheduled Tasks." - This brings up a window that says "Scheduled Task Wizard"
    6. - -
    7. Click on "Browse..."
    8. - -
    9. Select the location of your newly created - sendreminders.bat file.
    10. -
    11. Click on "Open"
    12. - -
    13. Change the name of the task. "WebCalendar Reminders" is a good name. -
    14. - -
    15. Select how often to perform this task. Select "Daily."
    16. -
    17. Click on "Next"
    18. - -
    19. Select the start time, then click "Next". - If you are planning on sending out reminders throughout the - day, pick a time shortly after midnight.
    20. - -
    21. Enter your user password as required. Click on "Next."
    22. - -
    23. Select the checkbox "Open advanced properties".
    24. -
    25. Click on "Finish."
    26. - -
    27. Under the "Schedule" tab, click on "Advanced."
    28. - -
    29. Click on "Repeat Task" and fill in the details of how often - the job should run. - For example, you can set it to run "every 15 minutes", then - click on "until" and set that time to 11:30pm. -
    30. -
    - - -
    - - -

    Appendix D: Displaying Upcoming Events on Your Site

    - -

    -If you would like to list upcoming events somewhere on a page on your site -(someplace other than the WebCalendar pages), -you can use the upcoming.php page to do this. -This page is intended to be included in other pages using the -iframe tag.

    -

    You may need to modify some of the variables near the top of -upcoming.php with a text editor:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    $public_must_be_enabled - Specifies if Public Access must be enabled in System Settings - for this page to be viewed. -
    Default setting: false -
    $display_link - Specifies if events should have a link to the URL - within WebCalendar to view the event. -
    Default setting: true -
    $link_target - Specifies the name of the window that be used for - the link target. -
    Default setting: _top -
    $numDays - Specifies how many days of events should be listed. -
    Can override this by passing "num" in within the URL - with "upcoming.php?num=60" -
    Default setting: 30 -
    $maxEvents - Specifies the maximum number of events to list. -
    Default setting: 10 -
    $username - The login of the calendar to display upcoming events for. - If you want to see upcoming events for user login "joe", - then you would change this to "joe". -
    Default setting: __public__ (The public calendar) -
    $allow_user_override - Specifies whether the calendar user can be specified in the URL - (in which case the $username setting will be ignored) using - a URL like "upcoming.php?user=joe". -
    Default setting: true -
    $load_layers - Specifies if the calendar user's layers should also be - included in the upcoming events. -
    Note: Layers must be enabled in the user's preferences. -
    Default setting: true -
    $cat_id - Specifies a category id to filter events on. -
    Note: Categories must be enabled in System Settings. -
    Default setting: (empty) -
    - -

    Below is an example of how you would include upcoming.php - in a simple HTML page.

    -
    -<html><head><title>ACME Home Page</title></head>
    -<body>
    -<h1>Welcome to the ACME Home Page</h1>
    -<h2>News</h2>
    -<p>No news....</p>
    -<h2>Upcoming Events</h2>
    -<iframe src="upcoming.php" width="400" height="400" name="califrame"></iframe>
    -</body>
    +    

    +

    There are many cron packages for Windows available. Try searching Github for one this is currently maintained.

    +

    Using the Windows Task Schedule

    +

    Follow the steps listed below to setup a new task in the Windows Task Scheduler. (These instructions were created with Windows XP Professional. Other versions of Windows might be different.)

    +
      +
    1. Create a new batch file called sendreminders.bat. The contents of this file should be a single line:
      C:\your\path\to\php.exe C:\your\path\to\webcalendar\tools\send_reminders.php
    2. +
    3. On Windows XP, go to Control Panel
    4. +
    5. Double-click on "Scheduled Tasks." This brings up a window that says "Scheduled Task Wizard"
    6. +
    7. Click on "Browse..."
    8. +
    9. Select the location of your newly created sendreminders.bat file.
    10. +
    11. Click on "Open"
    12. +
    13. Change the name of the task. "WebCalendar Reminders" is a good name.
    14. +
    15. Select how often to perform this task. Select "Daily."
    16. +
    17. Click on "Next"
    18. +
    19. Select the start time, then click "Next". If you are planning on sending out reminders throughout the day, pick a time shortly after midnight.
    20. +
    21. Enter your user password as required. Click on "Next."
    22. +
    23. Select the checkbox "Open advanced properties".
    24. +
    25. Click on "Finish."
    26. +
    27. Under the "Schedule" tab, click on "Advanced."
    28. +
    29. Click on "Repeat Task" and fill in the details of how often the job should run. For example, you can set it to run "every 15 minutes", then click on "until" and set that time to 11:30pm.
    30. +
    + ↑ top +
    + +

    Appendix D: Displaying Upcoming Events on Your Site

    +

    If you would like to list upcoming events somewhere on a page on your site (someplace other than the WebCalendar pages), you can use the upcoming.php page to do this. This page is intended to be included in other pages using the iframe tag.

    +

    You may need to modify some of the variables near the top of upcoming.php with a text editor:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    $public_must_be_enabled + Specifies if Public Access must be enabled in System Settings for this page to be viewed.
    Default setting: false
    $display_linkSpecifies if events should have a link to the URL within WebCalendar to view the event.
    Default setting: true
    $link_targetSpecifies the name of the window that be used for the link target.
    Default setting: _top
    $numDaysSpecifies how many days of events should be listed.
    Can override this by passing "num" in within the URL with "upcoming.php?num=60"
    Default setting: 30
    $maxEventsSpecifies the maximum number of events to list.
    Default setting: 10
    $usernameThe login of the calendar to display upcoming events for. If you want to see upcoming events for user login "joe", then you would change this to "joe".
    Default setting: __public__ (The public calendar)
    $allow_user_overrideSpecifies whether the calendar user can be specified in the URL (in which case the $username setting will be ignored) using a URL like "upcoming.php?user=joe".
    Default setting: true
    $load_layersSpecifies if the calendar user's layers should also be included in the upcoming events.
    Note: Layers must be enabled in the user's preferences.
    Default setting: true
    $cat_idSpecifies a category id to filter events on.
    Note: Categories must be enabled in System Settings.
    Default setting: (empty)
    +

    Below is an example of how you would include upcoming.php in a simple HTML page. +

    +<html>
    +  <head>
    +    <title>ACME Home Page</title>
    +  </head>
    +  <body>
    +    <h1>Welcome to the ACME Home Page</h1>
    +    <h2>News</h2>
    +    <p>No news....</p>
    +    <h2>Upcoming Events</h2>
    +    <iframe src="upcoming.php" name="califrame" width="400" height="400"></iframe>
    +  </body>
     </html>
    -
    - -

    TIP - The W3 Schools site provides documentation - about the different options that you can use - with the iframe tag.

    - - -
    - - -

    Appendix E: How To Configure for LDAP

    - -

    Configuring WebCalendar to use an existing LDAP directory is fairly -simple. It is know to work with OpenLDAP and Novell Edirectory and -should work with other systems as well. -
    -Note: -If you use LDAP, the group functionality of WebCalendar does not yet work.

    - -

    To configure WebCalendar to use LDAP, do the following:

    -
      -
    1. Verify that your PHP install supports LDAP.
    2. -
    3. Configure settings.php
    4. -
    5. Configure includes/user-ldap.php
    6. -
    - -

    The first step is to verify that your install of PHP supports LDAP. The -simplest way to do this is to view the output of phpinfo(). If you -can't easily call phpinfo() from another page, consider pasting the following -into a new page (e.g. phpinfo.php):

    - -
    -<html><head><title>PHP Info page</title></head>
    -<body>
    -<?php
    -  phpinfo()
    -?>
    -</body>
    +      
    +

    +

    TIP The W3 Schools site provides documentation about the different options that you can use with the iframe tag.

    + ↑ top +
    + +

    Appendix E: How To Configure for LDAP

    +

    Configuring WebCalendar to use an existing LDAP directory is fairly simple. It is know to work with OpenLDAP and Novell Edirectory and should work with other systems as well.
    Note: If you use LDAP, the group functionality of WebCalendar does not yet work.

    +

    To configure WebCalendar to use LDAP, do the following:

    +
      +
    1. Verify that your PHP install supports LDAP.
    2. +
    3. Configure settings.php
    4. +
    5. Configure includes/user-ldap.php
    6. +
    +

    The first step is to verify that your install of PHP supports LDAP. The simplest way to do this is to view the output of phpinfo(). If you can't easily call phpinfo() from another page, consider pasting the following into a new page (e.g. phpinfo.php): +

    +<html>
    +  <head>
    +    <title>PHP Info page</title>
    +  </head>
    +  <body>
    +    <?php
    +      phpinfo()
    +    ?>
    +  </body>
     </html>
    -
    - -

    When you load the page in your browser, the resulting output will begin with -general PHP information and then include an alphabetical list of enabled PHP -modules. If you aren't sure where to put the file so you can load it via your -web server, place it in the webcalendar directory and add "phpinfo.php" -to the URL for your webcalendar install. If your PHP supports LDAP, it will be -listed as a module and version information will be given. If "ldap" is -not listed anywhere in the output of phpinfo(), then your PHP install -does not support LDAP. You may need to install additional packages, depending on -your OS and version; under Debian Linux, for example, the "php4" -package does not include support but, "php4-ldap" does.

    - -

    The second step is to set WebCalendar to use LDAP authentication in -settings.php. Instructions on to do this can be found in the -Application Installation section above. -In summary, the following should be set:
    -use_http_auth = false
    -user_inc = user-ldap.php

    - -

    The next step is a little more work and involves editing the -includes/user-ldap.php file with a text editor. You will have -to set several configuration variables. If you don't know what to set -the variables to, consult your LDAP system administrator. Documentation -exists for all variables in the file. Finally, users have gotten LDAP -working with OpenLDAP and Novell Edirectory by just changing the -following:

    - - - - - - - - - - - - -
    $ldap_server - FQDN or IP address of the LDAP server (or localhost). -
    ex. 'ldapserver.company.com' -
    $ldap_base_dn - Specifies the base DN used to search for users -
    ex. 'ou=people,dc=company,dc=com' or 'o=context,ou=subcontext' -
    $ldap_admin_group_name - Specifies a group (complete DN) with admin rights for WebCalendar -
    You might have to create one in LDAP -
    ex. 'cn=it,ou=group,dc=company,dc=com' -
    - -

    Using SSL with LDAP

    -

    If the LDAP server will accept connections over SSL, simply add 'ldaps://' -to the beginning of $ldap_server.
    Example: ldaps://ldapserver.company.com

    - -

    Using TLS with LDAP

    -

    If the LDAP server is set up to use TLS, set $ldap_start_tls = true.

    - -

    Using LDAPv3

    -

    If the LDAP server uses protocol version 3, set -$set_ldap_version = true -and $ldap_version = '3'.

    - - -
    - - -
    - +
    +

    +

    When you load the page in your browser, the resulting output will begin with general PHP information and then include an alphabetical list of enabled PHP modules. If you aren't sure where to put the file so you can load it via your web server, place it in the webcalendar directory and add "phpinfo.php" to the URL for your webcalendar install. If your PHP supports LDAP, it will be listed as a module and version information will be given. If "ldap" is not listed anywhere in the output of phpinfo(), then your PHP install does not support LDAP. You may need to install additional packages, depending on your OS and version; under Debian Linux, for example, the "php4" package does not include support but, "php4-ldap" does.

    +

    The second step is to set WebCalendar to use LDAP authentication in settings.php. Instructions on to do this can be found in the Application Installation section above. In summary, the following should be set:
    use_http_auth = false
    user_inc = user-ldap.php

    +

    The next step is a little more work and involves editing the includes/user-ldap.php file with a text editor. You will have to set several configuration variables. If you don't know what to set the variables to, consult your LDAP system administrator. Documentation exists for all variables in the file. Finally, users have gotten LDAP working with OpenLDAP and Novell Edirectory by just changing the following:

    + + + + + + + + + + + + + +
    $ldap_serverFQDN or IP address of the LDAP server (or localhost).
    ex. 'ldapserver.company.com'
    $ldap_base_dnSpecifies the base DN used to search for users
    ex. 'ou=people,dc=company,dc=com' or 'o=context,ou=subcontext'
    $ldap_admin_group_nameSpecifies a group (complete DN) with admin rights for WebCalendar
    You might have to create one in LDAP
    ex. 'cn=it,ou=group,dc=company,dc=com'
    +

    Using SSL with LDAP

    +

    If the LDAP server will accept connections over SSL, simply add 'ldaps://' to the beginning of $ldap_server.
    Example: ldaps://ldapserver.company.com

    +

    Using TLS with LDAP

    +

    If the LDAP server is set up to use TLS, set $ldap_start_tls = true.

    +

    Using LDAPv3

    +

    If the LDAP server uses protocol version 3, set $set_ldap_version = true and $ldap_version = '3'.

    + ↑ top +
    + diff --git a/docs/WebCalendar-UserManual.html b/docs/WebCalendar-UserManual.html index d919c4f10..ea2c6c0d5 100644 --- a/docs/WebCalendar-UserManual.html +++ b/docs/WebCalendar-UserManual.html @@ -7,823 +7,519 @@

    WebCalendar User Manual

    - -

    WebCalendar Version: 1.3.0

    - -

    Table of Contents

    - -
    - -

    Introduction

    -

    WebCalendar is a calendar system. It is intended to be easy to setup and -use while still providing advanced features and flexibility to serve the -purposes of a widely varied user base. It can also be used as an events -calendar for an organization or as a scheduling system for an intranet.

    - -

    WebCalendar is an open source application. What does this mean for you? -You get to use the application free of charge. (See the -licensing section for more information on licensing.) -Additionally, you have access to the WebCalendar developer community. You -can post questions to various forums and have knowledgeable developers -respond.

    - -

    The primary site for WebCalendar development is at SourceForge.net:

    -
    http://sourceforge.net/projects/webcalendar/
    - -

    The first public release of WebCalendar was in December of 1999.

    - -
    - -

    Users and Events

    -

    WebCalendar can be configured to operate in either single-user or -multi-user mode.
    - -Note: If your WebCalendar is a single-user -configuration, a large portion of this document will not apply.

    - -

    All events in WebCalendar must be associated with one or more users. There -is no limit to the number of users that can use WebCalendar (aside from -system resources such as database space). - -Each participant will have a status for the event: "Waiting for Approval," -"Approved" or "Rejected."
    - -Note: If your WebCalendar is configured to not -require approvals, then participants will always appear as "Approved" for -all events.

    - -

    If you add an event with yourself as a participant, your status -will be "Approved" by default. If you include any other users, then -their status will be "Waiting for Approval" until they either approve or -reject the event. If configured to do so, WebCalendar will email participants -notifying them that there is a new event waiting for approval on his/her -calendar.
    - -Note: As the creator of the event, you will not -receive this email notification because your status for the event is -automatically set to "Approved."

    - -

    When viewing the details of an event, the status of event participants will be designated as shown below:

    - -Event Status Screenshot -

    - -Notes: - - -
    - -

    Repeating Events

    - -

    Repeating events may be used to create recurring event entries -on your calendar. This version of WebCalendar has adding many new features for -specifying repeating events in an attempt to become more compliant with RFC2445 (ical). -There are two mode of operation, Normal and Expert Mode. -These modes are selectable when creating and event, but will be automatically selected based -on the values of existing events. Please refer to -RFC2445 for a detailed discussion of complex recurrence rules.

    - -

    Ending

    -

    You may elect to have an event repeat Forever, Use end date or -have the event repeat a set Number of times.

    - -

    Frequency

    -

    The "Frequency" field allows you to -specify how often the event occurs. Typing "0" or "1" in the "Frequency" -field tells WebCalendar the event occurs every time (every day for daily, -every month for monthly, etc.). Typing "2" in the "Frequency" field will -indicate the event should occur every other time (i.e. every other day for -daily, every other month for monthly, etc.).

    - -

    Daily

    -

    If you select "Daily", the event will repeat at the same time -every day until the end date (if specified) or the Number of times is reached. You can also -select Weekdays Only to cause the event to skip weekends.
    -Expert Mode: Adds the option to specify individual days of the week (ByDay) as -well as selecting specific months (ByMonth) that the event will repeat.

    - -

    Weekly

    -

    If you select "Weekly", the event will repeat every week on the day(s) -selected until the end date (if specified) or until the End. You may select specific ByDay values to -have your event repeat more than one day per week.
    -Expert Mode: Adds the option to specify specific months (ByMonth) that -the event will repeat.

    - -

    Monthly (by day)

    -

    If you select "Monthly (by day)", the event will repeat on the same -weekday of the month every month until the specified End. -For example, if the initial date is the second Monday of the month, -the event will repeat on the second Monday of each month.
    -Expert Mode: Adds the option to specify individual days of the month (ByDay) as -well as selecting specific months that the event will repeat. You have the option to select any -combination of days within the month using the triple-state buttons, for example, you -could select the the 1st Sunday (1SA), 3rd Thursday (3TH), and 5th Friday (5FR) of the month. -You can also select days from the end of the month, for example -2SA would be the next to -the last Saturday of the month. Any value that doesn't exist within the month will be ignored, -like in the example above, not every month has a fifth Friday. In addition, specific months (ByMonth) -within the year can be specified.

    - -

    Monthly (by day (from end))

    -

    This option is no longer valid, as it is now rolled into Monthly ( by Day) using negative -day (ByDay) values.

    - -

    Monthly (by date)

    -

    If you select "Monthly (by date)", the event will repeat on the -same date of the month every month until the End. -For example, if you the initial date is May 12th, then the event -will repeat on June 12th and so on.
    -Expert Mode: Adds the options to select days of the week (ByDay), -specific months ByMonthDay to repeat and an option to select specific dates within the -month (ByMonthDay). With this option you can select any combination of dates within -the month, for example, the 3rd of each month (3), the 31st (31), the second from the end of the month -(-2) using the triple-state buttons.

    - -

    Monthly (by position)

    -

    If you select "Monthly (by position)", the event repeats will be calculated for the month -using the End and ByDay, then the option (BySetPos) will be applied. -For example, if you selected MO,TU,WE the normal habit would be to repeat every Monday, Tuesday, -and Wednesday within the month. Specifying (BySetPos) 7 would narrow the final selection -to the 7th element of the original set of dates. It's sounds confusing I know...just try programming it :)
    -Expert Mode: Adds the option to specify specific months to repeat. Please note that -(BySetPos) is applied after all other ByXXX values, so selecting (ByMonth) may yield unexpected -results.

    - -

    Yearly

    -

    If you select "Yearly", the event will repeat on the same date every -year until the End.
    -Expert Mode: Adds the (ByDay), (ByMonth), and (ByMonthDay) as described above. -These settings are applied to each month specified by the (ByMonth)...basically like the Monthly -(by Day/Date) options. Also, two user entered values are available. ByWeekNo allows one or -more week numbers to be entered separated by commas (1,2...53,-53,-52...-1). ByYearDay -allows the user to enter days of the year to repeat separated by commas (1,2,...366,-366,-365...-1).

    - -

    Please Note: All ByXXX values are evaluated by ANDing the values together with the following precedence. - BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, and BYSETPOS

    - -

    Exclusions/Inclusions

    -

    This option allows the exclusion or inclusion of dates for the repeat sequence. This setting is applied -after all ByXXX values are evaluated.

    -

     

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Available Repeat Option Matrix
    Repeat / Repeat
      Type   / Options
    EndingFrequencyWeekdays
    Only
    Week
    Start
    ByDayByMonthByMonthDayBySetPosByWeekNoByYearDayExclusions/
    Inclusions
    None          
    DailyXX        X
    Daily ( Expert ) XX  XX    X
    WeeklyXX  X     X
    Weekly (Expert ) XX XXX    X
    Monthly by Day XX        X
    Monthly by Day
    (Expert )
    XX XX*X    X
    Monthly by DateXX        X
    Monthly by Date
    (Expert )
    XX  XXX   X
    Monthly by
    Position
    XX     X  X
    Monthly by
    - Position
    ( Expert )
    XX  XX X  X
    YearlyXX        X
    Yearly ( Expert ) XX  X*XX XXX
    Manual          X
    * Expanded ByDay Option allowing more granular selection
    - -
    - -

    Public Access

    -

    If your system is not configured to allow Public Access, you may skip -this section.

    - -

    Public Access is useful if you want to publish part of the calendar to -a larger user base that isn't allowed to edit it.

    - -

    If Public Access is enabled, an extra user will show up when -creating a new event: the 'Public Access' user. To make an event visible -to users that aren't logged in, simply select the 'Public Access' user as -a participant for the event(s).

    - - -
    - -

    Remote Subscriptions

    -

    If your system is not configured to allow Remote Subscriptions, -you may skip this section.

    - -

    If your administrator has enabled Remote Subscriptions, you may enable -it for your personal account by clicking 'Admin' => 'Preferences' => 'Subscribe/Publish' -and selecting 'Yes' & save.

    - -

    If a user has this option enabled, the URL for accessing the calendar via an -external iCalendar-aware application (such as Mozilla Calendar -or Apple's iCal) will be displayed.

    - -

    If the 'Public Access' calendar is enabled, the Remote Subscriptions service can be -enabled by following the same procedure as above in the Public Access preferences panel.

    - -
    - -

    External Users

    -

    If your system is not configured to allow External Users, you may skip this section.

    - -

    External Users* allow you to add -participants to an event that are not WebCalendar users. When adding -or editing an event, you will see a free text area titled "External -Participants." In this area you can enter names of participants. -If your system is configured to allow it, the External Participants -will be notified via email when the event is created, and updated. In addition, -external users will be reminded of an upcoming event via email, if the event -has a reminder set. They will not be provided a URL to access the calendar but -will receive and ics file as an attachment for inclusion in their own calendar -client.

    -

    External Participants should be specified one name per line (email address optional). -All of the following would be legal entries:

    -
    Joe Smith
    +    

    WebCalendar Version: 1.9.9

    +

    Table of Contents

    + +
    +

    Introduction

    +

    WebCalendar is a calendar system. It is intended to be easy to setup and use while still providing advanced features and flexibility to serve the purposes of a widely varied user base. It can also be used as an events calendar for an organization or as a scheduling system for an intranet.

    +

    WebCalendar is an open source application. What does this mean for you? You get to use the application free of charge. (See the licensing section for more information on licensing.) Additionally, you have access to the WebCalendar developer community. You can post questions to various forums and have knowledgeable developers respond.

    + +

    The first public release of WebCalendar was in December of 1999.

    + ↑ top +
    +

    Users and Events

    +

    WebCalendar can be configured to operate in either single-user or multi-user mode.
    Note: If your WebCalendar is a single-user configuration, a large portion of this document will not apply.

    +

    All events in WebCalendar must be associated with one or more users. There is no limit to the number of users that can use WebCalendar (aside from system resources such as database space). Each participant will have a status for the event: "Waiting for Approval," "Approved" or "Rejected."
    Note: If your WebCalendar is configured to not require approvals, then participants will always appear as "Approved" for all events.

    +

    If you add an event with yourself as a participant, your status will be "Approved" by default. If you include any other users, then their status will be "Waiting for Approval" until they either approve or reject the event. If configured to do so, WebCalendar will email participants notifying them that there is a new event waiting for approval on his/her calendar.
    Note: As the creator of the event, you will not receive this email notification because your status for the event is automatically set to "Approved."

    +

    When viewing the details of an event, the status of event participants will be designated as shown below:

    + Event Status Screenshot +

    + Notes: +
      +
    • If you did not create the event, then you can only delete the event from your own calendar. Other users will still have the event on their calendar.
    • +
    • If you did not create the event, you will not be able to edit the event. Only the user who created the event can edit it.
    • +
    • If you see an event on another user's calendar that is not on your calendar, the event details page will provide a link to add the event to your calendar.
    • +
    • All changes to an event (accepting/rejecting, updating, deleting) are logged and are viewable by the system administrator.
    • +
    + ↑ top +
    +

    Repeating Events

    +

    Repeating events may be used to create recurring event entries on your calendar. This version of WebCalendar has added many new features for specifying repeating events in an attempt to become more compliant with RFC2445 (ical). There are two modes of operation; Normal and Expert. These modes are selectable when creating an event, but can be automatically selected based on the values of existing events. Please refer to RFC2445 for a detailed discussion of complex recurrence rules.

    +

    Ending

    +

    You may elect to have an event repeat Forever, Use end date or have the event repeat a set Number of times.

    +

    Frequency

    +

    The "Frequency" field allows you to specify how often the event occurs. Typing "0" or "1" in the "Frequency" field tells WebCalendar the event occurs every time (every day for daily, every month for monthly, etc.). Typing "2" in the "Frequency" field will indicate the event should occur every other time (i.e. every other day for daily, every other month for monthly, etc.).

    +

    Daily

    +

    If you select "Daily", the event will repeat at the same time every day until the end date (if specified) or the Number of times is reached. You can also select Weekdays Only to cause the event to skip weekends.
    Expert Mode: Adds the option to specify individual days of the week (ByDay) as well as selecting specific months (ByMonth) that the event will repeat.

    +

    Weekly

    +

    If you select "Weekly", the event will repeat every week on the day(s) selected until the end date (if specified) or until the End. You may select specific ByDay values to have your event repeat more than one day per week.
    Expert Mode: Adds the option to specify specific months (ByMonth) that the event will repeat.

    +

    Monthly (by day)

    +

    If you select "Monthly (by day)", the event will repeat on the same weekday of the month every month until the specified End. For example, if the initial date is the second Monday of the month, the event will repeat on the second Monday of each month.
    Expert Mode: Adds the option to specify individual days of the month (ByDay) as well as selecting specific months that the event will repeat. You have the option to select any combination of days within the month using the triple-state buttons, for example, you could select the the 1st Sunday (1SA), 3rd Thursday (3TH), and 5th Friday (5FR) of the month. You can also select days from the end of the month, for example -2SA would be the next to the last Saturday of the month. Any value that doesn't exist within the month will be ignored, like in the example above, not every month has a fifth Friday. In addition, specific months (ByMonth) within the year can be specified.

    +

    Monthly (by day (from end))

    +

    This option is no longer valid, as it is now rolled into Monthly ( by Day) using negative day (ByDay) values.

    +

    Monthly (by date)

    +

    If you select "Monthly (by date)", the event will repeat on the same date of the month every month until the End. For example, if you the initial date is May 12th, then the event will repeat on June 12th and so on.
    Expert Mode: Adds the options to select days of the week (ByDay), specific months ByMonthDay to repeat and an option to select specific dates within the month (ByMonthDay). With this option you can select any combination of dates within the month, for example, the 3rd of each month (3), the 31st (31), the second from the end of the month (-2) using the triple-state buttons.

    +

    Monthly (by position)

    +

    If you select "Monthly (by position)", the event repeats will be calculated for the month using the End and ByDay, then the option (BySetPos) will be applied. For example, if you selected MO,TU,WE the normal habit would be to repeat every Monday, Tuesday, and Wednesday within the month. Specifying (BySetPos) 7 would narrow the final selection to the 7th element of the original set of dates. It's sounds confusing I know...just try programming it :)
    Expert Mode: Adds the option to specify specific months to repeat. Please note that (BySetPos) is applied after all other ByXXX values, so selecting (ByMonth) may yield unexpected results.

    +

    Yearly

    +

    If you select "Yearly", the event will repeat on the same date every year until the End.
    Expert Mode: Adds the (ByDay), (ByMonth), and (ByMonthDay) as described above. These settings are applied to each month specified by the (ByMonth)...basically like the Monthly (by Day/Date) options. Also, two user entered values are available. ByWeekNo allows one or more week numbers to be entered separated by commas (1,2...53,-53,-52...-1). ByYearDay allows the user to enter days of the year to repeat separated by commas (1,2,...366,-366,-365...-1).

    +

    Please Note: All ByXXX values are evaluated by ANDing the values together with the following precedence. BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, and BYSETPOS

    +

    Exclusions/Inclusions

    +

    This option allows the exclusion or inclusion of dates for the repeat sequence. This setting is applied after all ByXXX values are evaluated.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Available Repeat Option Matrix
    Repeat / Repeat
      Type   / Options
    EndingFrequencyWeekdays
    Only
    Week
    Start
    ByDayByMonthByMonthDayBySetPosByWeekNoByYearDayExclusions/
    Inclusions
    None          
    DailyXX        X
    Daily (Expert)XX  XX    X
    WeeklyXX  X     X
    Weekly (Expert)XX XXX    X
    Monthly by DayXX        X
    Monthly by Day
    (Expert)
    XX XX*X    X
    Monthly by DateXX        X
    Monthly by Date
    (Expert)
    XX  XXX   X
    Monthly by
    Position
    XX     X  X
    Monthly by
    Position
    (Expert)
    XX  XX X  X
    YearlyXX        X
    Yearly (Expert)XX  X*XX XXX
    Manual          X
    * Expanded ByDay Option allowing more granular selection
    + ↑ top +
    +

    Public Access

    +

    If your system is not configured to allow Public Access, you may skip this section.

    +

    Public Access is useful if you want to publish part of the calendar to a larger user base that isn't allowed to edit it.

    +

    If Public Access is enabled, an extra user will show up when creating a new event: the 'Public Access' user. To make an event visible to users that aren't logged in, simply select the 'Public Access' user as a participant for the event(s).

    + ↑ top +
    +

    Remote Subscriptions

    +

    If your system is not configured to allow Remote Subscriptions, you may skip this section.

    +

    If your administrator has enabled Remote Subscriptions, you may enable it for your personal account by clicking 'Admin' => 'Preferences' => 'Subscribe/Publish' and selecting 'Yes' & save.

    +

    If a user has this option enabled, the URL for accessing the calendar via an external iCalendar-aware application + + will be displayed. +

    +

    If the 'Public Access' calendar is enabled, the Remote Subscriptions service can be enabled by following the same procedure as above in the Public Access preferences panel.

    + ↑ top +
    +

    External Users

    +

    If your system is not configured to allow External Users, you may skip this section.

    +

    External Users* allow you to add participants to an event that are not WebCalendar users. When adding or editing an event, you will see a free text area titled "External Participants." In this area you can enter names of participants. If your system is configured to allow it, the External Participants can be notified via email when the event is created, and updated. In addition, external users can be reminded of an upcoming event via email, if the event has a reminder set. They will not be provided a URL to access the calendar but will receive an ics file as an attachment for inclusion in their own calendar client.

    +

    External Participants should be specified one name per line (email address required for email communication). All of the following would be legal entries:

    +
    Joe Smith
     Smith, Joe
     Joe Smith <jsmith@xxx.com>
    -<jsmith@xxx.com>
    - -

    Email addresses within '<' and '>' characters will receive email notifications -and reminders.

    - -
    - -

    NonUser Calendars

    -

    NonUser Calendars* allow you to -maintain a calendar that is not associated with a user. Users can then -either view the NonUser Calendar (if the system settings allow it) or -add the NonUser Calendar as a layer to their own calendar. For additional -information on layers, see the layers documentation.

    - -

    This can be used for resource management such as scheduling usage -of a conference room. If used in combination with views, -you can quickly & easily view the availability of multiple conference rooms -on the same page.

    - -
    - -

    Categories

    -

    If your system is not configured to use categories, you may skip this -section.

    - -

    Events may be associated with one or more categories, but it is not required. -Categories can be user-level or global. Each user maintains his/her -own list of user-level categories, while the system administrator -maintains the list of global categories.

    -

    When creating or editing event, you may specify the categories for the event. -If the category you select isn't a global category, and you select participants -other than yourself for that event, other users will see "None" as the category. -If you selected a global category, all users will be able to see the same category.

    - -

    When viewing the calendar (month, week or day), a selection box is -displayed near the top of the page that allows you to filter events based -on a category. When you select a category from this menu, only events associated -with that category will appear on your calendar.

    - -

    If enabled, icons can also be uploaded and assigned to categories to be displayed -before the event name. You will also be able to choose an icon from existing icons that have already been uploaded. This requires that a folder named icons exist in the WebCalendar directory.

    - -
    - -

    Views

    -

    Views* allow you to look at the calendar of one or -more users (or NonUser Calendars) at the same time. You can create a new -view by clicking "Views" in the admin panel.

    - - -
    - -

    Groups

    -

    If you system is not configured to use Groups*, you may skip this -section.

    - -

    Groups allow systems with many users to divide users into smaller groups of -users. Additionally, if configured to do so, users can only access calendars of -users in the same group(s) (both when viewing the list of available calendars or when -selecting participants for an event.

    - -

    When adding or editing events, a "Select..." button will be available. -This button will popup a user selection window that will allow -event participants to be selected by group.

    - -
    - -

    Layers

    -

    Layers* allow you to overlay one or more calendars -on top of your own. You can add a new layer to your calendar by clicking -"Layers" in the admin panel.

    - -

    When adding the layer, you can choose a color. When an event -from that layer is displayed on your calendar, the text of the event will -appear in the specified color.

    - -

    TIP: On slow servers, you may find that layers -cause the month view to be considerably slower. Set your default view -to "Week" rather than "Month" in your Preferences.

    - -

    TIP: If you have more than one configuration of -users that you would like to use with layers, you can create more than one -"Daily" View.

    - -
    - -

    Assistant/Boss

    -

    If your system is not configured to allow Assistant Mode, then you may skip -this section.

    - -

    Assistant Mode allows one user (the Assistant*) -to help manage the calendar of another user (the Boss*). -The Boss creates the relationship in the calendar by clicking "Assistants" in -the admin panel.

    - -

    When the Boss has selected one or more assistants, each assistant -will see a new "Manage Calendar of" link at the bottom of the page. -This link will quickly bring the Assistant to a view of the Boss' calendar. -When adding an event from this page, the default participant will -be only the Boss.

    - -
    - -

    User Access Control

    -

    If your system is not configured to use User Access Control, then you may skip -this section.

    - -

    If enabled, you may now set very detailed access controls to your calendar for -other WebCalendar users. You can specify their access view,edit, and approve entries on your calendar and can further specify access to events, tasks, and journals (coming soon).

    - -

    Access can also be granted/restricted to allow invitations, emails, and a very restrictive -setting Can See Time Only that prevents the other user from viewing any details -of your events.

    - -

    The DEFAULT CONFIGURATION selection will set the access for all users not otherwise granted/restricted access to your calendar.

    - -
    - -

    Preferences

    -

    Various components of WebCalendar can be customized by modifying your user preferences.

    -

    Settings

    -
    -
    Language
    -
    Specify the language you would like to use in WebCalendar
    - -
    Timezone Selection
    -
    Specify your local timezone.
    - -
    Fonts
    -
    Your preferred font family.
    - -
    Preferred View
    -
    Select the view you wish to see after logging in. Available options -include day view, week view, month view, or year view.
    - -
    Display weekends in view
    -
    Specify whether you want Saturdays and Sundays to appear in month and -week views, as well as in mini-calendars.
    - -
    Display description in printer day view
    -
    Specify whether you want to see descriptions in printer day view.
    - -
    Date format
    -
    Specify how you would like dates to be displayed
    - -
    Time format
    -
    Specify either 12-hour (3:45pm) or 24-hour (15:14) time format
    - -
    Time interval
    -
    Specify how many minutes each time block represents in the day and week display
    - -
    Auto-refresh calendars
    -
    If set to "yes," the day, week, and month views will automatically -reload after the duration specified in the Auto-refresh time textbox.
    - -
    Auto-refresh time
    -
    Specify the number of minutes WebCalendar will wait before automatically -refreshing pages.
    - -
    Display unapproved
    -
    Specify whether events that have been added to your calendar but not -yet approved should display on your calendar (in a different color)
    - -
    Display week number
    -
    Specify whether the week number should be displayed in month and week views, as well as mini-calendars
    - -
    Week starts on
    -
    Specify whether you want the week to start on Sunday or Monday
    - -
    Work hours
    -
    Specify the default time range to display in day and week views
    - -
    Specify timed event length by
    -
    Specify the preferred event end time format, Duration or End Time.
    - -
    Display small task list
    -
    Specify whether small Tasks windows are visible in calendars.
    - -
    Display tasks in Calendars
    -
    Specify whether Tasks are displayed in-line with events. The task will -be displayed on the due date. If the due date has passed without task -completion, the task will move to the current day until completed.
    - -
    Export VTIMEZONE in ics files
    -
    Specify whether VTIMEZONE elements are exported with ics files. This can -have a negative impact on performance, so it's recommended that this option -only be enabled if needed.
    - -
    Default Category
    -
    Specify the default category that should be selected when adding a new event
    -
    - -

    Email

    -
    -
    Event reminders
    -
    Specify if you wish to receive an email reminder for events that specify a reminder should be sent
    - -
    Events added to my calendar
    -
    Specify if you wish to receive email when another user adds an event to your calendar
    - -
    Events updated on my calendar
    -
    Specify if you wish to receive an email when another user updates -an event on your calendar
    - -
    Events removed from my calendar
    -
    Specify if you wish to receive an email when another user removes an event -from your calendar
    - -
    Event rejected by participant
    -
    Specify if you with to be notified if a participant of an event on your calendar has -rejected the event
    -
    - -

    When I am the boss

    -
    -
    Email me event notifications
    -
    Specify if you wish to receive email when one of your assistants adds an -event to your calendar
    - -
    I want to approve events
    -
    Specify if you want to approve events added by any or your assistants
    - -
    Display if created by Assistant
    -
    If enabled, the 'Created By' field in view_entry will -include assistant's name in addition to the Boss' name.
    -
    - -

    Subscribe/Publish

    -
    -
    Allow remote subscriptions
    -
    If enabled, allows users to publish their calendars out to an external -Calendar client such as Sunbird or Apple Ical using the URL displayed.
    - -
    Allow remote publishing
    -
    If enabled, allows users to two-way synchronize their calendars with an external Calendar client such as Sunbird or Apple Ical using the URL displayed.
    - -
    Enable FreeBusy publishing
    -
    If enabled, allows users to publish their FreeBusy schedule using the -URL displayed.
    -
    - -

    Colors

    -
    -
    Document background
    -
    Specify the page background color
    - -
    Document title
    -
    Specify the color of the page title
    - -
    Table cell background
    -
    Specify the default background color for table cells
    - -
    Table cell background for current day
    -
    Specify the background color for the table cell containing the current date
    - -
    Table cell background for weekends
    -
    Specify the background color for table cells that represent a Saturday or Sunday
    -
    - -
    - -

    FAQ

    +<jsmith@xxx.com> +
    +

    Email addresses within '<' and '>' characters will receive email notifications and reminders.

    + ↑ top +
    +

    NonUser Calendars

    +

    NonUser Calendars* allow you to maintain a calendar that is not associated with a user. Users can then either view the NonUser Calendar (if the system settings allow it) or add the NonUser Calendar as a layer to their own calendar. For additional information on layers, see the layers documentation.

    +

    This can be used for resource management such as scheduling usage of a conference room. If used in combination with views, you can quickly & easily view the availability of multiple conference rooms on the same page.

    + ↑ top +
    +

    Categories

    +

    If your system is not configured to use categories, you may skip this section.

    +

    Events may be associated with one or more categories, but it is not required. Categories can be user-level or global. Each user maintains his/her own list of user-level categories, while the system administrator maintains the list of global categories.

    +

    When creating or editing event, you may specify the categories for the event. If the category you select isn't a global category, and you select participants other than yourself for that event, other users will see "None" as the category. If you selected a global category, all users will be able to see the same category.

    +

    When viewing the calendar (month, week or day), a selection box is displayed near the top of the page that allows you to filter events based on a category. When you select a category from this menu, only events associated with that category will appear on your calendar.

    +

    If enabled, icons can also be uploaded and assigned to categories to be displayed before the event name. You will also be able to choose an icon from existing icons that have already been uploaded. This requires that a folder named icons exist in the WebCalendar directory.

    + ↑ top +
    +

    Views

    +

    Views* allow you to look at the calendar of one or more users (or NonUser Calendars) at the same time. You can create a new view by clicking "Views" in the admin panel.

    + ↑ top +
    +

    Groups

    +

    If you system is not configured to use Groups*, you may skip this section.

    +

    Groups allow systems with many users to divide users into smaller sets. Additionally, if configured to do so, users can only access calendars of users in the same group(s) (both when viewing the list of available calendars or when selecting participants for an event.

    +

    When adding or editing events, a "Select..." button will be available. This button will popup a user selection window that will allow event participants to be selected by group.

    + ↑ top +
    +

    Layers

    +

    Layers* allow you to overlay one or more calendars on top of your own. You can add a new layer to your calendar by clicking "Layers" in the admin panel.

    +

    When adding the layer, you can choose a text color to be used when that event is displayed on your calendar.

    +

    TIP: On slow servers, you may find that layers cause the month view to be considerably slower. Set your default view to "Week" rather than "Month" in your Preferences.

    +

    TIP: If you have more than one configuration of users that you would like to use with layers, you can create more than one "Daily" View.

    + ↑ top +
    +

    Assistant/Boss

    +

    If your system is not configured to allow Assistant Mode, then you may skip this section.

    +

    Assistant Mode allows one user (the Assistant*) to help manage the calendar of another user (the Boss*). The Boss creates the relationship in the calendar by clicking "Assistants" in the admin panel.

    +

    When the Boss has selected one or more assistants, each assistant will see a new "Manage Calendar of" link at the bottom of the page. This link will quickly bring the Assistant to a view of the Boss' calendar. When adding an event from this page, the default participant will be only the Boss.

    + ↑ top +
    +

    User Access Control

    +

    If your system is not configured to use User Access Control, then you may skip this section.

    +

    If enabled, you may now set very detailed access controls to your calendar for other WebCalendar users. You can specify their access view,edit, and approve entries on your calendar and can further specify access to events, tasks, and journals (coming soon).

    +

    Access can also be granted/restricted to allow invitations, emails, and a very restrictive setting Can See Time Only that prevents the other user from viewing any details of your events.

    +

    The DEFAULT CONFIGURATION selection will set the access for all users not otherwise granted/restricted access to your calendar.

    + ↑ top +
    +

    Preferences

    +

    Various components of WebCalendar can be customized by modifying your user preferences.

    +

    Settings

    +
    +
    Language
    +
    Specify the language you would like to use in WebCalendar
    +
    Timezone Selection
    +
    Specify your local timezone.
    +
    Fonts
    +
    Your preferred font family.
    +
    Preferred View
    +
    Select the view you wish to see after logging in. Available options include day view, week view, month view, or year view.
    +
    Display weekends in view
    +
    Specify whether you want Saturdays and Sundays to appear in month and week views, as well as in mini-calendars.
    +
    Display description in printer day view
    +
    Specify whether you want to see descriptions in printer day view.
    +
    Date format
    +
    Specify how you would like dates to be displayed
    +
    Time format
    +
    Specify either 12-hour (3:45pm) or 24-hour (15:45) time format
    +
    Time interval
    +
    Specify how many minutes each time block represents in the day and week display
    +
    Auto-refresh calendars
    +
    If set to "yes," the day, week, and month views will automatically reload after the duration specified in the Auto-refresh time textbox.
    +
    Auto-refresh time
    +
    Specify the number of minutes WebCalendar will wait before automatically refreshing pages.
    +
    Display unapproved
    +
    Specify whether events that have been added to your calendar but not yet approved should display on your calendar (in a different color)
    +
    Display week number
    +
    Specify whether the week number should be displayed in month and week views, as well as mini-calendars
    +
    Week starts on
    +
    Specify whether you want the week to start on Sunday or Monday
    +
    Work hours
    +
    Specify the default time range to display in day and week views
    +
    Specify timed event length by
    +
    Specify the preferred event end time format, Duration or End Time.
    +
    Display small task list
    +
    Specify whether small Tasks windows are visible in calendars.
    +
    Display tasks in Calendars
    +
    Specify whether Tasks are displayed in-line with events. The task will be displayed on the due date. If the due date has passed without task completion, the task will move to the current day until completed.
    +
    Export VTIMEZONE in ics files
    +
    Specify whether VTIMEZONE elements are exported with ics files. This can have a negative impact on performance, so it's recommended that this option only be enabled if needed.
    +
    Default Category
    +
    Specify the default category that should be selected when adding a new event
    +
    +

    Email

    +
    +
    Event reminders
    +
    Specify if you wish to receive an email reminder for events that specify a reminder should be sent
    +
    Events added to my calendar
    +
    Specify if you wish to receive email when another user adds an event to your calendar
    +
    Events updated on my calendar
    +
    Specify if you wish to receive an email when another user updates an event on your calendar
    +
    Events removed from my calendar
    +
    Specify if you wish to receive an email when another user removes an event from your calendar
    +
    Event rejected by participant
    +
    Specify if you with to be notified if a participant of an event on your calendar has rejected the event
    +
    +

    When I am the boss

    +
    +
    Email me event notifications
    +
    Specify if you wish to receive email when one of your assistants adds an event to your calendar
    +
    I want to approve events
    +
    Specify if you want to approve events added by any or your assistants
    +
    Display if created by Assistant
    +
    If enabled, the 'Created By' field in view_entry will include assistant's name in addition to the Boss' name.
    +
    +

    Subscribe/Publish

    +
    +
    Allow remote subscriptions
    +
    If enabled, allows users to publish their calendars out to an external Calendar client such as Sunbird or Apple Ical using the URL displayed.
    +
    Allow remote publishing
    +
    If enabled, allows users to two-way synchronize their calendars with an external Calendar client such as Sunbird or Apple Ical using the URL displayed.
    +
    Enable FreeBusy publishing
    +
    If enabled, allows users to publish their FreeBusy schedule using the URL displayed.
    +
    +

    Colors

    +
    +
    Document background
    +
    Specify the page background color
    +
    Document title
    +
    Specify the color of the page title
    +
    Table cell background
    +
    Specify the default background color for table cells
    +
    Table cell background for current day
    +
    Specify the background color for the table cell containing the current date
    +
    Table cell background for weekends
    +
    Specify the background color for table cells that represent a Saturday or Sunday
    +
    + ↑ top +
    +

    FAQ

    -
    -
    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 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.
    -
    - -

    TIP: WebCalendar setup and configuration issues are documented in the "WebCalendar System Administrator's Guide".

    - -
    - -

    Licensing

    -

    WebCalendar is distributed under the open source -GNU General Public License. -If you have questions about this license, please read their -GPL FAQ.

    - -
    - -

    Getting Help

    -

    Try the Help/Troubleshooting forum for WebCalendar, hosted at SourceForge.net:

    -
    http://sourceforge.net/forum/?forum_id=11588
    - -

    If you encounter a bug, please check the -list of open and pending bugs. If you do not see anything similar, submit a new bug.

    - -
    - -

    Glossary

    -
    -
    Activity Log
    -
    A summary of recent updates to calendar data
    - -
    Assistant
    -
    A calendar user that has been designated by another calendar user (the Boss) -to help manage their calendar
    - -
    Boss
    -
    A calendar user that has designated another calendar user (the Assistant) -to help manage his calendar
    - -
    External User
    -
    A calendar participant that does not have a calendar user account
    - -
    Group
    -
    A mechanism of dividing up a large set of users into smaller sets of users
    - -
    Layer
    -
    A function that allows a user to overlay another user's calendar - on top of his own calendar so that the standard day, week and month - pages show both his own and the layered user's events
    - -
    NonUser Calendar
    -
    A participant to a calendar event that is not a user
    - -
    Notification
    -
    An email message that is sent when an event is added, removed - or updated in the user's calendar by another user
    - -
    Preferred View
    -
    The standard page (day, week, month or year) that will be presented to the user -after logging in (set in user Preferences)
    - -
    Reminder
    -
    An email message that is sent before an event to remind the participant
    - -
    Time Interval
    -
    The amount of time each "block" will represent in either the day or week view -(set in user Preferences)
    - -
    View
    -
    A customized page that presents the events of selected users
    - -
    Work Hours
    -
    The default hours to show in the week and day view where events are -displayed in blocks of time (set in user Preferences)
    -
    - - +
    +

    TIP: WebCalendar setup and configuration issues are documented in the "WebCalendar System Administrator's Guide".

    + ↑ top +
    +

    Licensing

    +

    WebCalendar is distributed under the open source GNU General Public License. If you have questions about this license, please read their GPL FAQ.

    + ↑ top +
    +

    Getting Help

    +

    Try the Help/Troubleshooting forum for WebCalendar, hosted at github.com:

    +
    https://github.com/craigk5n/webcalendar/issues
    +

    If you encounter a bug, please check the list of open and pending "patches". If you do not see anything similar, submit a new pull request.

    + ↑ top +
    +

    Glossary

    +
    +
    Activity Log
    +
    A summary of recent updates to calendar data
    +
    Assistant
    +
    A calendar user that has been designated by another calendar user (the Boss) to help manage their calendar
    +
    Boss
    +
    A calendar user that has designated another calendar user (the Assistant) to help manage his calendar
    +
    External User
    +
    A calendar participant that does not have a calendar user account
    +
    Group
    +
    A mechanism of dividing up a large set of users into smaller sets of users
    +
    Layer
    +
    A function that allows a user to overlay another user's calendar on top of his own calendar so that the standard day, week and month pages show both his own and the layered user's events
    +
    NonUser Calendar
    +
    A participant to a calendar event that is not a user
    +
    Notification
    +
    An email message that is sent when an event is added, removed or updated in the user's calendar by another user
    +
    Preferred View
    +
    The standard page (day, week, month or year) that will be presented to the user after logging in (set in user Preferences)
    +
    Reminder
    +
    An email message that is sent before an event to remind the participant
    +
    Time Interval
    +
    The amount of time each "block" will represent in either the day or week view (set in user Preferences)
    +
    View
    +
    A customized page that presents the events of selected users
    +
    Work Hours
    +
    The default hours to show in the week and day view where events are displayed in blocks of time (set in user Preferences)
    +
    + ↑ top + From 17032285fa8e4005d67519f79d3456f9cfd7305b Mon Sep 17 00:00:00 2001 From: Bruce Bannon Date: Mon, 25 Sep 2023 16:44:14 -0600 Subject: [PATCH 2/2] rework docs.css and css in sql2html.pl --- docs/Makefile | 13 +- docs/sql2html.pl | 87 +++++------ includes/css/docs.css | 337 ++++++++++++++++++++++++++---------------- 3 files changed, 264 insertions(+), 173 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index 928468212..63cba61bb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -2,11 +2,11 @@ # If you have phpdoc installed, you can use that to # generate additional documentation. - all: WebCalendar-Database.html faqs.html # List include files that will be searched for function documentation INCLUDES = \ + ../about.php \ ../access.php \ ../admin.php \ ../category_handler.php \ @@ -15,9 +15,12 @@ INCLUDES = \ ../edit_layer_handler.php \ ../edit_remotes_handler.php \ ../edit_report.php \ + ../events_ajax.php \ + ../export.php \ ../export_handler.php \ ../icalclient.php \ ../import.php \ + ../import_gitlog.php \ ../import_outlookcsv.php \ ../import_palmdesktop.php \ ../includes/access.php \ @@ -27,7 +30,6 @@ INCLUDES = \ ../includes/classes/Doc.php \ ../includes/classes/DocList.php \ ../includes/classes/Event.php \ - ../includes/classes/hkit/hcal.profile.php \ ../includes/classes/RptEvent.php \ ../includes/classes/WebCalendar.php \ ../includes/classes/WebCalMailer.php \ @@ -48,12 +50,19 @@ INCLUDES = \ ../includes/xcal.php \ ../install/default_config.php \ ../install/install_functions.php \ + ../layers_ajax.php \ ../list_unapproved.php \ + ../login-app.php \ + ../pref.php \ ../purge.php \ ../register.php \ ../report.php \ + ../rss_activity_log.php \ + ../rss_unapproved.php \ + ../security_audit.php \ ../tools/send_reminders.php \ ../upcoming.php \ + ../users_ajax.php \ ../view_entry.php \ ../view_r.php \ ../view_t.php \ diff --git a/docs/sql2html.pl b/docs/sql2html.pl index 0533ca8dd..76ecdab62 100755 --- a/docs/sql2html.pl +++ b/docs/sql2html.pl @@ -3,12 +3,12 @@ # sql2html.pl # # Description: -# Create HTML documentation from a sql file. +# Create HTML documentation from an SQL file. # # Usage: # perl sql2html.pl < ../install/sql/tables-mysql.sql > WebCalendar-Database.html # -####################################################################### +################################################################################ $verbose = 0; @@ -26,11 +26,10 @@ sub td { sub print_table { $out{ $name } = ' -

    ' . $name . '

    +

    $name" . '

    '; $out{ $name } .= ' - ' . $description . '

    ' - if ( defined ( $description ) ); + ' . $description . '

    ' if ( defined ( $description ) ); $out{ $name } .= ' ' @@ -64,8 +63,7 @@ sub print_table { } # first, get WebCalendar version -open ( F, '../includes/config.php' ) - || die 'Error reading config.php:' . "$!\n"; +open ( F, '../includes/config.php' ) || die "Error reading config.php: $!\n"; while ( ) { if ( /PROGRAM_VERSION =/ ) { if ( /'/ ) { @@ -192,56 +190,59 @@ sub print_table { WebCalendar Database Documentation -

    WebCalendar Database Documentation

    -

    - http://k5n.us/webcalendar.php

    -

    Craig Knudsen, - Craig@k5n.us

    -

    $v

    +

    http://k5n.us/webcalendar

    +

    Craig Knudsen,Craig@k5n.us

    +

    $v

    -

    This file is generated from tables-mysql.sql. Below are the - definitions of all WebCalendar tables, along with some descriptions of how - each table is used. Column names shown in red are the primary keys for - that table.

    -

    If you update the SQL for WebCalendar, use the sql2html.pl script to - regenerate this file.

    +

    This file is generated from tables-mysql.sql. Below are the definitions of all WebCalendar tables, along with some descriptions of how each table is used. Column names shown in red are the primary keys for that table.

    +

    If you update the SQL for WebCalendar, use the sql2html.pl script to regenerate this file.



    List of Tables

    diff --git a/includes/css/docs.css b/includes/css/docs.css index df126dc47..a8719a827 100644 --- a/includes/css/docs.css +++ b/includes/css/docs.css @@ -1,247 +1,328 @@ +:root { + --blk: rgb(0, 0, 0); + --wht: rgb(255, 255, 255); + + --red: rgb(255, 0, 0); + --grn: rgb(0, 255, 0); + --blu: rgb(0, 0, 255); +} + +html, body { - background-color: #FFFFFF; - color: #000000; - font:16px/1.15 Arial, Helvetica, sans-serif; + margin: 0; + border: 0; + padding: 0; +} + +body { + background-color: var(--wht); + color: var(--blk); + font: 16px/1.15 Arial, Helvetica, sans-serif; +} + +* + * { + margin-block-start: 0; } + a { text-decoration: none; } + +a[target="_top"], +#upgrading th { + margin-inline-start: 95%; +} + +b, +dt, +.note, +.tip, +#styling code, +#funcs .prompt, +#wc_db table th { + font-weight: bold; +} + dl, ul { - margin-left: 10px; + margin-inline-start: 10px; } + dt { - margin-top: 10px; - font-weight: bold; + margin-block-start: 10px; } + h2 { - background-color: #191970; - color: #FFFFFF; + background-color: rgb(25, 25, 112); + color: var(--wht); } + h2, -h3 { +h3, +.ptip, +#funcs h3, +#guide h2 { padding: 5px; } + hr { - margin-bottom: 7px; + margin-block-end: 7px; } -img { + +img, +table { border: 0; } + p { margin: 10px; } + pre { - background-color: #EEEEFF; - margin-right: 25px; - margin-left: 25px; - border: 1px solid #0000FF; + background-color: rgb(238, 238, 255); + margin-inline-start: 25px; + border: 1px solid var(--blu); padding: 4px; font: 0.875rem courier, monospace; } -table { - border: 0; + +ol, +ul { + margin-block-end: 1rem; } + .colorheader { - background-color: #000000; - color: #FFFFFF; - margin-right: 3px; - margin-left: 3px; + background-color: var(--blk); + color: var(--wht); + margin-inline-end: 3px; +} + +.colorheader, +.note, +.tip { padding: 2px; } + .hide { display: none; } -.newwin { - border: 0; -} + .note { - background-color: #87CEFA; - padding: 2px; - border: 1px solid #000000; - font-weight: bold; + background-color: rgb(135, 206, 250); + border: 1px solid var(--blk); } + .nowrap { white-space: nowrap; } + .ptip { - background: #DDDDDD; - border: 1px solid #AAAAAA; - padding: 5px; + background: rgb(221, 221, 221); + border: 1px solid rgb(170, 170, 170); } + .tip { - background-color: #FFFF00; - padding: 2px; - font-weight: bold; -} -.top { - text-align: right; + background-color: rgb(255, 255, 0); } + .tt { - font: .85rem monospace; -} -.vbottom { - vertical-align: bottom; + font: 0.85rem monospace; } + .vtop { vertical-align: top; } + +.vbottom { + vertical-align: bottom; +} + #funcs blockquote { - margin-top: 5px; - margin-bottom: 5px; + margin-block: 5px; } + #funcs h3 { - background-color: #191970; - color: #FFFFFF; - padding: 5px; + background-color: rgb(25, 25, 112); + color: var(--wht); } + #funcs p { - margin-top: 2px; + margin-block-start: 2px; } + #funcs ul { - margin-top: 2px; - margin-bottom: 2px; + margin-block: 2px; } + #funcs .note { - background-color: #CCCCCC; - color: #000000; + background-color: rgb(204, 204, 204); + color: var(--blk); padding: 1px; } -#funcs .prompt { - font-weight: bold; -} + #funcs .tip { - margin-right: 10px; - border: 1px solid #000000; + margin-inline-end: 10px; + border: 1px solid var(--blk); padding: 1px 5px; } -#guide dt { - margin-left: 25px; + +:where(#guide, #sysadmin) .note { + background-color: var(--blu); + color: var(--wht); } -#guide h2 { - padding: 5px; + +#guide dt { + margin-inline-start: 25px; } + #guide tr { - background-color: #606080; - color: #F0F0F0; + background-color: rgb(96, 96, 128); + color: rgb(240, 240, 240); } + #guide th { - background-color: #000000; + background-color: var(--blk); } + #guide td { vertical-align: top; } -#guide .note, -#sysadmin .note { - background-color: blue; - color: #FFFFFF; -} + #guide .tip { - margin-right: 10px; - border: 1px solid #000000; + margin-inline-end: 10px; + border: 1px solid var(--blk); padding: 1px 5px; } -#rpt_matrix td { - text-align: center; + +#manual h3 + dl dt { + padding-inline-start: 20px; } -#styling body { - padding: 0 40px; + +#rpt_matrix { + margin-block-start: 1rem; } -#styling code { - font-weight: bold; -} -#styling div.example { - width: 350px; - margin: 0 auto; + +#rpt_matrix tr:nth-of-type(2) { + margin-inline: auto; } -#styling div.example p { - margin: 0px; - font-style: italic; - font-size: small; + +#rpt_matrix :where(th, td) { + inline-size: 100%; + margin: 1px; + border: 1px; + padding: 3px; text-align: center; } -#styling div.example pre { - background-color: #EEEEFF; - margin: 0; - border: 1px solid blue; - padding: 5px; + +#rpt_matrix td:last-of-type { + text-align: start; } + +#styling body { + padding: 0 40px; +} + #styling dt { font-family: monospace; } -#styling h1, -#styling h2 { - margin-left: -20px; + +#styling :where(h1, h2) { + margin-inline-start: -20px; } + #styling p { text-indent: 3ex; } + #styling table { margin: 0 auto; border-collapse: collapse; } -#styling td { - background-color: #DDDDDD; - color: #000000; - border: 1px solid #BBBBBB; - vertical-align: top; -} -#styling th, -#styling td { - border: 1px solid gray; + +#styling :where(th, td) { + border: 1px solid rgb(128, 128, 128); padding: 3px; } + #styling td { + background-color: rgb(221, 221, 221); + color: var(--blk); + border-color: rgb(187, 187, 187); font-family: monospace; + vertical-align: top; } + +#styling div.example { + inline-size: 350px; + margin: 0 auto; +} + +#styling div.example p { + margin: 0; + font-style: italic; + font-size: small; + text-align: center; +} + +#styling div.example pre { + background-color: rgb(238, 238, 255); + margin: 0; + border: 1px solid var(--blu); + padding: 5px; +} + #sysadmin dt { - margin-top: 20px; - margin-left: 25px; + margin-block-start: 20px; + margin-inline-start: 25px; } + #sysadmin th { - background-color: #EEEEEE; - color: #000000; - border: 1px solid #CCCCCC; + background-color: rgb(238, 238, 238); + color: var(--blk); + border: 1px solid rgb(204, 204, 204); } + #sysadmin .tip { - margin-right: 10px; - border: 1px solid #000000; + margin-inline-end: 10px; + border: 1px solid var(--blk); padding: 1px 5px; } -#upgrading table { - margin-left: 50px; -} -#upgrading th { - text-align: right; -} + #upgrading p:first-of-type { - margin-bottom: 0; + margin-block-end: 0; } + +#upgrading table { + margin-inline-start: 50px; +} + #upgrading tr { - background-color: #606080; - color: #F0F0F0; + background-color: rgb(96, 96, 128); + color: rgb(240, 240, 240); } + #upgrading td { vertical-align: top; } + #upgrading ul:first-of-type { - margin-top: 0; + margin-block-start: 0; } + #wc_db table { - width: 100%; + inline-size: 100%; border-collapse: collapse; border-spacing: 0; } -#wc_db table table, -#wc_db table th, -#wc_db table td { - border: .1rem solid #000000; -} + #wc_db table th { - background-color: #E5E5E5; - font-weight: bold; + background-color: rgb(229, 229, 229); +} + +#wc_db table :where(table, th, td) { + border: 0.1rem solid var(--blk); } -#wc_db table th, -#wc_db table td { + +#wc_db table :where(th, td) { padding: 0.2rem; }