Note that there have been some improvements made around the way you install CGI Calendar as of version 2.5. Please read these instructions if you're used to previous versions!
IF YOU ARE UPGRADING FROM A PREVIOUS VERSION OF CGI CALENDAR, MAKE A BACKUP OF YOUR DATABASE FILES!!! calendar.db is the default database file. YOU WILL HAVE TO RUN AN UPGRADE SCRIPT ON YOUR BACKED-UP DATABASE BEFORE IT CAN BE USED WITH CGI CALENDAR 2.5. See step 6 below.
Setting up CGI Calendar is not that hard, but you can't be afraid to open a Perl script in a text editor to change the value of a few variables. Don't worry...I'll walk you through it.
/usr/bin/perl5.004 #!/usr/bin/perl5.004C:\Perl\Perl.exe, #!C:\\Perl\\Perl.exe (note the double \'s)#!Macintosh HD:Perl Folder:Perl#!(path to perl)
http://yourserver/path/to/index.cgi?db=filename?db=filename
to the end of the URL, it will use whatever you specified in jconfig.pm by default.
That's it! You've set up CGI Calendar to run on your server!
If it doesn't work:
Bug fix:
In order to allow users to minimize the size of their current calendar.db file, I have written a perl script (clean.pl) that will remove all orphan entries from the file (orphaned entries are those that have a key (like 19August1998), but no events or other data. BEFORE YOU USE THIS SCRIPT, MAKE A BACKUP COPY OF YOUR CALENDAR.DB FILE. USE THIS SCRIPT AT YOUR OWN RISK, AS YOU USE ALL OF THIS SOFTWARE AT YOUR OWN RISK. Please note that this script was written *and* tested in a total of about 10 minutes, so there are probably bugs/problems with it. I had to run the script twice on my calendar.db file to get rid of all orphan entries.
Bug Fix:
Features Added:
Also, now the add an event link is placed on this page with event information. If you click on the summary of an event from the calendar, a very similar page will be presented, but displaying only the information for that event, not all events as if you clicked on the date.
All this is accomplished by a new script, viewday.cgi.
Note on a feature not added:
If you would like to add this functionality yourself, it would be very easy to do by editing the cgi.pm code, modeling it after the code used to return html in index.cgi, viewday.cgi, or addevent.cgi.
Features Added:
An event is added or deleted depending on which radio button is checked on the form. Addevent.cgi always had the ability to deal with different modes (i.e., add or delete), I just hadn't added the code for it to do anything other than add. It now has a delete mode, and deletes an event by looking up the record, finding the summary of the event to be deleted, and then deletes all info pertinent to that summary.
Thanks to the people in comp.infosystems.www.authoring.cgi for pointing out the bugs and suggesting new features to add.
CGI Calendar is, as the name implies, a CGI program (or a group of scripts, rather) with the purpose of creating a monthly calendar in the form of an html table. This calendar includes events complete with summary and time by drawing from a calendar database. Events are added to and deleted from the calendar databse (and thus to and from the calendar) by means of one of the scripts in the package, addevent.cgi (using dnfunc.pm). The algorithm used to create the calendar itself (determining the day of week on which a month starts in a particular year and how many days are in the year) makes the calendar good for more years than you'll ever want to use it. It goes as far back as A.D. 1 I think and indefinitely into the future. The software is written to run on the UNIX platform (and I'm sure it'll do fine on any other flavor of UNIX including LINUX since it's a standard Perl script). It may or may not run on other platforms, but there's a real good chance it will work if the platform can run an http server and the Perl interpreter.
This software is distributed under the GNU General Public Licence. A copy of this licence can be found at the Free Software Foundation's GNU Project website, http://www.gnu.org, and a copy is attached to the end of this file. All that I ask from people who modify the code is that they make sure that they send me a copy of any code they change so that I can see what they've done/come up with in order that I may incorporate good modifications into my version. Also, if you know others who would like to use or work with CGI Calendar, please have them come to the www.jayeckles.com server to pick up a copy, don't give them a copy of yours. This will ensure that they have the most up-to-date version, that it is the one designed to be configured for different servers easily, and that I know how many people are using it.
That being said, here's a little info on the files that comprise the software:
CGI Calendar is a collection of Perl scripts, modules, and html files, all of which I created from scratch. The only exception to this is that I based the calendar.pm module in part on a calendar program written by an old computer science professor of mine, Brian Stuart. I decided to create my own jcgi.pm module because I wanted to know exactly how it worked, I wanted to keep it small by including only features that I need, and I wanted it to be as easy to use as possible. The dnfunc.pm module is a small Perl DBMS (database management system) designed to be used as the back end to CGI programs. It contains functions to open, select from, and add to a pipe ( | ) delimited flat file database. Again, this module was built to be small, minimally functional, and very easy to use. It is entirely self-sufficient and can be used with other CGI's besides CGI Calendar.
Index.cgi is the bread-and-butter script in this package. It's the one that actually creates the table and uses the dnfunc functions to get information from the calendar database (calendar.db). It also reads to files, top.html and bot.html. The contents of these two files contain html that should go above the calendar table code and the html that should go below the calendar table code. Minimally, top.html should include the following:
<html>
<head>
<link rel="stylesheet" type="text/css" href="/calendar.css">
<title>(whatever you want here)</title>
</head>
<body>
Likewise, bot.html should minimally include the following:
</body>
</html>
However, as you can see by the top.html and bot.html examples given, you can make them
much more complex for a design more fitting to your individual website. All you need
to remember is that the table that is the calendar goes in between the code from these
two files.
Addevent.cgi is the second most important script in the package after index.cgi. This is the script that allows users to add events to the calendar by using the dnfunc functions to add stuff to the databse. Month, date, year, and summary are required by this script for the purpose of adding events, but all the rest of the information from the form generated by addevent.cgi in gen mode (when you click on the add an event link from a day-view page) is optional. Please note that the same top.html and bot.html files used to style the calendar are used to style the addevent form. I recommend using .htaccess or some other method to protect the addevent directory. That way you won't have every yahoo that comes along adding crap to your calendar. Events can be deleted from the calendar using addevent.cgi by clicking on the "delete event" link on the page with the event info.
Editevent.cgi is a script very similar to Addevent.cgi. It allows users to edit events. It is protected by the same HTTP Basic authentication as Addevent.cgi.
Viewday.cgi is a script used to view all of the information on one or all of the events on a given day. It has two modes, one and all. In one mode, it displays all the information for just the event indicated. In all mode, it displays the information for all events on the date specified. It also provides the links to add, edit, and delete an event.
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and
change it. By contrast, the GNU General Public License is intended to guarantee your
freedom to share and change free software--to make sure the software is free for all
its users. This General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to using it. (Some
other Free Software Foundation software is covered by the GNU Library General Public
License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute
copies of free software (and charge for this service if you wish), that you receive
source code or can get it if you want it, that you can change the software or use
pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you
these rights or to ask you to surrender the rights. These restrictions translate to
certain responsibilities for you if you distribute copies of the software, or if you
modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee,
you must give the recipients all the rights that you have. You must make sure that
they, too, receive or can get the source code. And you must show them these terms so
they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you
this license which gives you legal permission to copy, distribute and/or modify the
software.
Also, for each author's protection and ours, we want to make certain that everyone
understands that there is no warranty for this free software. If the software is
modified by someone else and passed on, we want its recipients to know that what they
have is not the original, so that any problems introduced by others will not reflect
on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to
avoid the danger that redistributors of a free program will individually obtain patent
licenses, in effect making the program proprietary. To prevent this, we have made it
clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING,
DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by
the copyright holder saying it may be distributed under the terms of this General
Public License. The "Program", below, refers to any such program or work, and a "work
based on the Program" means either the Program or any derivative work under copyright
law: that is to say, a work containing the Program or a portion of it, either verbatim
or with modifications and/or translated into another language. (Hereinafter,
translation is included without limitation in the term "modification".) Each licensee
is addressed as "you".
Activities other than copying, distribution and modification are not covered by this
License; they are outside its scope. The act of running the Program is not restricted,
and the output from the Program is covered only if its contents constitute a work
based on the Program (independent of having been made by running the Program). Whether
that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and appropriately publish
on each copy an appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any warranty; and
give any other recipients of the Program a copy of this License along with the
Program.
You may charge a fee for the physical act of transferring a copy, and you may at your
option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus
forming a work based on the Program, and copy and distribute such modifications or
work under the terms of Section 1 above, provided that you also meet all of these
conditions:
a) You must cause the modified files to carry prominent notices stating that you
changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in
part contains or is derived from the Program or any part thereof, to be
licensed as a whole at no charge to all third parties under the terms of this
License.
c) If the modified program normally reads commands interactively when run, you
must cause it, when started running for such interactive use in the most
ordinary way, to print or display an announcement including an appropriate
copyright notice and a notice that there is no warranty (or else, saying that
you provide a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this License.
(Exception: if the Program itself is interactive but does not normally print
such an announcement, your work based on the Program is not required to print
an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of
that work are not derived from the Program, and can be reasonably considered
independent and separate works in themselves, then this License, and its terms, do not
apply to those sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based on the Program,
the distribution of the whole must be on the terms of this License, whose permissions
for other licensees extend to the entire whole, and thus to each and every part
regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to
work written entirely by you; rather, the intent is to exercise the right to control
the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the
Program (or with a work based on the Program) on a volume of a storage or distribution
medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in
object code or executable form under the terms of Sections 1 and 2 above provided that
you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code,
which must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any
third party, for a charge no more than your cost of physically performing
source distribution, a complete machine-readable copy of the corresponding
source code, to be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute
corresponding source code. (This alternative is allowed only for noncommercial
distribution and only if you received the program in object code or executable
form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all the
source code for all modules it contains, plus any associated interface definition
files, plus the scripts used to control compilation and installation of the
executable. However, as a special exception, the source code distributed
need not include anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the operating system
on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a
designated place, then offering equivalent access to copy the source code from the
same place counts as distribution of the source code, even though third parties are
not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly
provided under this License. Any attempt otherwise to copy, modify, sublicense or
distribute the Program is void, and will automatically terminate your rights under
this License. However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such parties remain in
full compliance.
5. You are not required to accept this License, since you have not signed it. However,
nothing else grants you permission to modify or distribute the Program or its
derivative works. These actions are prohibited by law if you do not accept this
License. Therefore, by modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and all its terms and
conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the
recipient automatically receives a license from the original licensor to copy,
distribute or modify the Program subject to these terms and conditions. You may not
impose any further restrictions on the recipients' exercise of the rights granted
herein. You are not responsible for enforcing compliance by third parties to this
License.
7. If, as a consequence of a court judgment or allegation of patent infringement or
for any other reason (not limited to patent issues), conditions are imposed on you
(whether by court order, agreement or otherwise) that contradict the conditions of
this License, they do not excuse you from the conditions of this License. If you
cannot distribute so as to satisfy simultaneously your obligations under this License
and any other pertinent obligations, then as a consequence you may not distribute the
Program at all. For example, if a patent license would not permit royalty-free
distribution of the Program by all those who receive copies directly or indirectly
through you, then the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular
circumstance, the balance of the section is intended to apply and the section as a
whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other
property right claims or to contest validity of any such claims; this section has the
sole purpose of protecting the integrity of the free software distribution system,
which is implemented by public license practices. Many people have made generous
contributions to the wide range of software distributed through that system in
reliance on consistent application of that system; it is up to the author/donor to
decide if he or she is willing to distribute software through any other system and a
licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence
of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries
either by patents or by copyrighted interfaces, the original copyright holder who
places the Program under this License may add an explicit geographical distribution
limitation excluding those countries, so that distribution is permitted only in or
among countries not thus excluded. In such case, this License incorporates the
limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General
Public License from time to time. Such new versions will be similar in spirit to the
present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a
version number of this License which applies to it and "any later version", you have
the option of following the terms and conditions either of that version or of any
later version published by the Free Software Foundation. If the Program does not
specify a version number of this License, you may choose any version ever published by
the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose
distribution conditions are different, write to the author to ask for permission. For
software which is copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our decision will be
guided by the two goals of preserving the free status of all derivatives of our free
software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.