=head1 NAME
YAPCOM - Yet Another Perl COnference Manager
=head1 DESCRIPTION
Software to manage conferences. Especially Perl Conferences.
=head1 UPGRADE
After the "make test" of the INSTALLATION process
see the bin/upgrade.pl file.
1) create file called db/db_closed
2) run the appropriate bin/upgrade_.... file
3) remove the db/db_closed file
=head1 INSTALLATION
tar xzf Yapcom-x.xx.tar.gz
cd Yapcom-x.xx/
perl Build.PL
./Build
./Build test
check the path of perl in cgi/yapcom
- perl bin/install.pl
- In the virtual host in the apache configuration file write something like this:
Configuration used on 2006.08.06: Still need to be further simplified
ServerName yapcom.local
DirectoryIndex index.html
DocumentRoot /home/gabor/work/yapcom/somewhere_else
RedirectMatch ^/(\w[^/]+)$ http://yapcom.local/$1/
ScriptAliasMatch ^/(\w[^/]+)/$ /home/gabor/work/yapcom/cgi/yapcom
ScriptAliasMatch ^/(\w[^/]+)/[\w-]*.html$ /home/gabor/work/yapcom/cgi/yapcom
Alias /2006/html /home/gabor/work/yapcom/html
Alias /osdc2007/html /home/gabor/work/yapcom/html
Alias /conference/html /home/gabor/work/yapcom/html
Older configurations:
DocumentRoot /home/gabor/work/yapcom/somewhere_else
RedirectMatch ^/conference$ http://yapcom/conference/
ScriptAliasMatch ^/conference/$ /home/gabor/work/yapcom/cgi/yapcom
ScriptAliasMatch ^/conference/[\w-]*.html$ /home/gabor/work/yapcom/cgi/yapcom
Alias /conference/html /home/gabor/work/yapcom/html
ScriptAlias /virtual_path_to_application/ /path/to/installation/cgi/
Alias /docs /path/to/installation/docs
Alias /files /path/to/installation/files
Alias /html /path/to/installation/html
Options FollowSymLinks
AllowOverride None
Deny from all
Deny from all
=head1 TEMPLATES
You can change any of the templates in the templates directory.
The best way to do this is to create a directory next to the templates
directory.
Copy any templates you want to change from templates into this new
directory and change them.
Add a 'templates_dirs' entry to the conference configuration
(via the site_admin interface)
Any templates you do not change will be taken from the default templates
directory.
=head1 DEVELOPMENT
Check out the 'trunk' from the Subversion repository
perl Build.PL (install prerequisites)
./Build
./Build test
Install Apache (or your favorite web server) and configure it
as described above.
See the L list below
=head1 CHANGES
=over 4
=item next 2006.08...
Add logging via CGI::Application::Plugin::LogDispatch
Remove the need for external configuration file, fetch configuration from database
Add set of pages for site_admin that should work out of the box on any system
=item 0.13 2005.12...
- remove the html_path and other unnecessary entries
- remove skins_dir
- enable multiple directories in templates_dirs
- enable closing the web site
- add list of speakers
- Added keywords table so for each talk people can fill in some coma list of words
The list of keywords is free text but we will also supply the users a way to see all
the currently used keywords
Add "admin" and "editor" to person table rename the one in the configuration to be
"root" for now, "root" can do anything, "editor" can approve/reject and edit talks of
other people. "admin" will have the same rights as the site_admins in the configuration
file but from now on I don't need to change the configuration file in order to
add a new admin or remove an old one.
Add "disabled" to person - administrator should be able to set a person as disabled.
I think we need this as some people will subscribe just for their own
fun and taint our database.
Start using the ISEditor and Disabled flags
Add ADMIN/EDITOR/DISABLED flags to the admin list of users
Let the administrator set these flags (0/1)
Make sure disabled user cannot login and is not shown in the list of users
Make EDITOR accounts be able to accept/reject talks, see info about speakers
=item 0.12 2004.
- replace Makefile.PL by Build.PL
- start using 3.32 of CGI::Application - don't need to catch warnings any more, we'll be able to test
for warnings
- remove the cgi_path and html_path and similar unnecessary variables
- change templates for YAPC::Israel::2005
=item 0.11 ????.??.??
- probably there were a number of changes but noone had time to write them down
=item 0.10 2003.12.03
- show more information about the registered people
- After anadministrator logs in s/he gets back a regular MyYAPC page without the extra
link. Only after pressing the 'Personal Inoramtion' link (login.html) do these links
show up.
- In I think related issue, if regular user tries to access the proposal.html page
then she gets login. One se logs in she gets a Timeline error even though the URL
in the navigation bar seem to be correct.
- Improve the interface of the administrators: Show all the proposals
2003.12.09
- Added fax, cell and hide to database. Existing databases will need to add these fields
Updated code and templates to support these fields.
To update database:
echo '.dump' | sqlite yapc.db > out
vi out [ add fields to tables matching db.sql, and to all rows in correct location ]
my yapc.db yapc.db.bak; sqlite yapc.db < out
You do not need to stop/restart the web server.
=item 0.09 2003.11.27
- create XML compilant HTML pages
- enable logged in users to change their proposals
=item 0.08_03 2003.11.26
- Enable the use of a local configuration file.
- fix minor issues
=item 0.08_01 2003.11.26
- form (for logged in user) to change the personal information registerd
=item 0.08 2003.11.25
- refactoring: using Class::DBI more in the way it should be used
- refactoring: moving run_mode dispatching, cleaning up the run_modes and authentication
- eliminate the 'run' field and base all the actions (run_mode) on the name of the file.
=item 0.07_02 2003.11.24
- further refactoring the tests
- add pages to get back lost password and get validation code again
if e-mail was not yet validated.
- make list of proposal lengths configurable and add 180 min too
- make list of languages configurable
- create admin interface to list all the people with all their properties.
- interface for the users to change password
=item 0.07_01 2003.11.15
- send e-mail on every registration to administrator
- start adding tests for changing user info
- refactoring the tests a bit
=item 0.07 2003.11.14
- cookie will expire only after 1d (insted of 1h)
=item 0.06_05 2003.11.14
- recreating the test file that was lost earlier.
=item 0.06_04 2003.11.14
- add missing files to the MANIFEST file
- add lots of tests for the new features
- logged in users will be able to submit proposals
- one of the test file were lost due to lack of connetction to the cvs respository
and a bad 'rm' command on my side.
=item 0.06_03 2003.11.13
- replaced form submission methods to be POST methods
- add logout mechanism
=item 0.06_02 2003.11.13
Partial release, not installed
- add login mechanism
- logged in users will be able to access the proposal.html page
=item 0.06_01 2003.11.12
Partial release, not installed.
- in 0.06 some of the tests failed on the target system because they
took the template directory from the YAPC::Config file which was pointing
to the development directory on the dev machine.
fix in t/lib/YAPC/Test.pm :
use Cwd;
$YAPC::Config::templates_dir = cwd . "/templates";
fixed in 0.07
- in 0.06 the bin/setup.pl should also chmod a+w the db directory and the database file
fixed in 0.07
- Fix some of the pages as suggested by Offer Kaye
- improve the installation and upgrade method
- on the form mark the field which are required
- make the phone field required
- search.cpan link did not have the PAUSEID after it.
- random string generator should give characters from bigger range
- list only ppl who have validated registration.
- show statistcs about registrants (how many have registered/authenticated etc.)
- on the list_people page make sure url without http:// will get it automatically
=item 0.06 2003.11.11
add the web interface to the database functions,
add registration form
add sending e-mail after registration (use Mail::Sendmail)
check all fields if they really exist,
check that e-mail is a reasonable address [\w\d_+=@.] [@]
add more fields to the registration form
added more tests to the existing system
=item 0.05 2003.11.10
add the CGI::Application framework to the existing 'static' site.
=item 0.04 2003.11.09
add bin/install.pl script that will do the installation process
later this script will be changed so it will be able to also
upgrade by skipping local files.
=item 0.03 2003.11.09
intermediate release - I don't know why did I make this.
=item 0.02 2003.11.07
add dependency list to make file
add basic test script
add -T to the yapc.pl cript
add download directory and link to it from the navigator page
add the separate tree of data manegement but no web interface for it yet.
This version will probably not be released
=item 0.01 2003.11.03
original release with script to handle the templates of the simple web site.
=back
=head1 TODO (not necessarily in order of importance)
=over 4
=item Allow management of several conferences
Up till now yapcom needed a separate installation
(and thus user registration, etc) for each conference.
I would like to keep the users from OSDC::Israel::2006
and let them login and say they would like to participate
in OSDC::Israel::2007 too.
Currently working on the site_admin tools.
See L
=item Add more test, check coverage, clean code
make code pass Perl::Critic (see t/99-critic.t)
=item Create levels of administrators
=item Interface for administrators to change configuration
Started to work on the web interface for this but discontinued for now.
See "configuration" run mode and configuration.tmpl
=item Move all configuration information into database
See L L
=item Add categories (and streams ?)
=back
=head1 DESIGN
=head2 Configuration
In the current version we just unzip the distribution
(or during development we work off the checked out version)
This allows us to use a configurqation file relative to the
executable.
Even when we allow installation as a CPAN module or just anywhere
in the filesystem we would like to have a basic configuration
file relative to the executable or to let people provide the
path to the central config file in the executable.
The basic installation should create the database with a default
account for site administrators. From that point every configuration
can be made via web browser.
Start with one user who is the site_admin with default username/password
When logged in with default values prompt to change them and then logout.
When site_admin logs in, let her add new sites.
=head2 Database Layout
Will be moved to the schema db/db.sql once it seems to be good.
=over 4
=item List of conferences
ID
NAME
=item Conference URIs
Conference ID
URIs (a conference will be recognized by the URI it was accessed
so any page that is under either of these
www.osdc.org.il/2006
osdc.org.il/2006
will be mapped to OSDC2006
www.osdc.org.il/2007
osdc.org.il/2007
will be mapped to OSDC2007
=item People
Probably is_admin should be moved to a separate table as we have more roles now
Somehow list for each Person what role she has in each one of the conferences
(And if she is a site admin)
The all kinds of other issues for each person/conferenc pair (if she participated
all the accounting stuff)
=back
=head2 Roles, Administration
=over 4
=item Site Admin
Can add new "confrences" or disable existing ones
These people are not connected to any specific conference
Set other user as Conference Administrator
Set other user as Site Admin
=item Conference Administrator
Each conference has its own admistrator(s)
Set other users for all the roles (except site admin)
Disable registered users
(There are a few registrations that are obviously bogus.
I don't want to send them e-mail every time.)
=item Content managers
(For now I think we can let all the content managers work
with every proposal, no need for separate managers of Streams)
List all proposals
Accept / Reject proposals.
=item Accounting
See and update the accounting information about a person
(how much and when paid, invoice status, etc.)
=item Who should do these?
Decide on schedule of a talk
Allow the display the schedule to the general public
Prepare and send a personalized e-mail to a group of people.
(include name, title of proposals, etc.)
Grouping:
1) Everyone in the system
2) Everyone in this conference
3) Those who sumitted a proposal.
4) Accepted speakers.
5) Accepted speaker but have not sent paper yet.
6) People who have already paid
7) People who have not yet paid
8) everyone including disabled users (?)
Open / Close the interface to confirm talk.
(I am not sure why did I want this)
Capability to lock a submission - so they cannot be changed
after they were accepted.
Paper pre-processor.
(Take the submitted paper and try to create the relevant part
of the book from it and return error code if the file was not
well formatted).
=head2 Categories and Streams
Administrator(?) should be able to create list of categories
A person submitting a proposal will be able to select 1 or more
categories for his/her talk. Categories are Perl, MySQL, etc...
Streams: The person who organizes the schedule should be able to
create streams and put each talk in one (?) stream.
Business, C/C++, Databases, Education, Java, Linux/Unix,
PHP, Perl, Python, Security, Web - XML/HTML/Javascript
There is some overlap betwen the categorization and the stream so
I am not sure we need two separate systems.
=back
=head1 OLD TODO
(things will be moved up to the real TODO step by step.
When sending e-mail escape the characters in the e-mail address (e.g. the
otherwise valid + character)
Add table for payments
date
type (check, credit card, cash, wire transfer)
amount
who - user from the database or maybe not registered yet?
Form to send e-mail to (all/acked/not acked) participants
form to send e-mail to all confirmed speakers
Define the time of the days of the conference
TABLE days: YYYY MM DD StartHH StartMM EndHH EndMM
Define Rooms: TABLE Rooms: name, size, comment
Users can select a day for the visit (the "daypass" is enaled)
Show schedule should be a flag if we want to show them to the general public
or only the editors.
Schedule:
Each talk has a starting date YYYY MM DD HH MM (and a length)
Each talk has a room
Remove hard coded strings from the code.
- remove most(?) of the default values from Config.pm and where they show up
- remove any Perl specific entries (e.g. PAUSE id)
- levels? for now we can have separate categories for the different levels
"beginner-perl" or "intro-perl", "perl"
- When the administrator accepts a talk let him press another key and by that
send an e-mail to the speaker that the talk was accepted.
- handle error gracefully when there is no database created yet
(or if it was accidentally created corrupted) and give nice error message on HTML
- enable central templates directory and several (probably language specific)
customized templets directory.
- Upgrade underlying modules (CGI::Application and stuff has made some
progress so we should also use the new stuff)
Urgent
- Add some "privacy guidlines" statement, i.e. which of the entered info (if
any) will be shared with the world. (this is text only)
- improve error messages on the web site
- give error message on validation form if something went wrong
- Shall we use Error.pm for exception handling ?
- Shall we use some Form Validator module ?
WWW::Form, CGI::Formmagick , else ?
- Improve the installation process.
- in the installation process change the content of the configuration file.
including the installation directory. (or should it be a PREFIX ?)
Intermediate
- allow registrant to be anonymous (not to show in the public interface, but
only if they don't give presentations)
- ask for mobile phone number as well.
Later
- on the list_people page show stat of how many people have paid already.
- enable logged in user to delete their proposal(s)
- separate the code (with simple templates) and the templates needed for
YAPC::Israel::2004. Put the former in the distribution, move the
latter to manual change and upload.
This will also bear the advantage that we don't have to deal with the
question, where to put the image files and the css files as the simple
template version will not have any.
- user should be able to delete his account ?? I am not sure
- user should be able to change e-mail address but the new
e-mail address should be unique and should be validate before it takes effect.
- indicate on the navigation bar who is logged in
- change the directory tree after the installation so the data files, cgi scripts
and library files will not be in the reachable path.
- Improve the use of a local configuration file based on Timesink of Richard
http://unixbeard.net/svn/richardc/timesink/lib/Timesink/Config.pm
- Implement the timeout of the logins
- Make the code platform independent
(replacing Mail::Sendmail with MIME::Lite maybe ?)
- Make sure the code works with mod_perl
????
- testing the various e-mail sending routines
- write tests that test the real forms with a real web server infront of them.
In the far future
- Add way to update the news without uploading new files
- Add discussion board
- Add Wiki
=head1 BUGS
=over 4
=item *
use YAPC::Organizer crashes if used if there is no database
it can be seen when running the cgi/yapc.pl script
actually I think non of the pages will respond
=item *
When running the tests sometimes I stop them in the middle by Ctrl-C.
In such cases the database usually becomes corrupted.
I get an error message like this when I try to run the tests again:
Ima::DBI connect('t/test.db','',...) failed: database disk image is
malformed
How can we make sure that this will not happen in the real system ?
How can we write a test that will cause the above problem (even if that
test has to run 10 times to have good chances to one corruption)
so we can see when our script is good enough ?
=item *
there are more bugs listed in the TODO list.
=back
=head1 MORE DESIGN
The primary objective of this software is to manage *our* conference(s)
but I'd be glad if it was used in other conferences too.
So the order of importance when deciding on design and implementation
is the following:
It should be used in....
- YAPC::Israel::2004
- YAPC::Israel
- YAPC
- Any Perl conference.
- Any conference.
=head2 User Interface
Double opt-in registration (confirm e-mail address)
Manage information about oneself.
(but make sure s/he cannot delete himself or part of
the important information after registration. E.g. at least
we need to have the valid e-mail address)
Details:
(Actually this should be configurable so other conferences
could also use it)
Username
First name
Last name
Title (Mr/Ms/...)
E-mail address
Personal URL
City
(State)
Country (list)
A full address for billing purposes.
Bio
Upload picture
Perl specific
PAUSE/CPAN id
Monger Group (list)
PerlMonks id
use Perl.org name
Tool to submit proposals on the web interface.
Tool to submit papers on the web interface
Tool to Modify te proposal/paper? Till when ?
Confirm presentation (after it was accepted).
A GANT like tool for milestones and progress.
Accounting?
=head2 Public Interface
List all registered users
(Group them according to country, pm group, whatever else)
List of accepted speakers
List of accepted talks, including their
List of proposals before accepting them (?)
=head2 Implementation Requirements
Using templates to make it customizable.
Hebrew and other language enabled.
Simple intsallation as CGI
Compatible with mod_perl
Database independent backend.
=head2 Features
Lightweight database using SQLite
Other, heavier SQL servers are supposed to work but were not tested (yet)
Language support ? Unicode ?
=head1 Payment and Credit Card Processing
=head2 Automatic way
Interface to an automatic payment gateway.
We should provide easy intergration with CC processing companies like:
http://www.2checkout.com/
or
http://www.clickbank.net/
We should implement integration with the CC processor of The Perl Foundation.
As it is very inconvenient for people in other countries to pay in USD or EURO we have to find a CC processing company
that will let us display prices in any currency and will be able to send the collected money in that currency without
charging for 2 conversions.
=head2 Manual way
Some people will not want to pay by CC over the Internet.
They might pay in cash or by check.
We should prepare an interface so the admin will be able to
mark who and when paid manually.
Some companies have a separate person for paying such fees
and it is not done by the registrant. We should create some facility to handle this case as well.
Manual way (for the admin to update payment information)
Reason: Some companies will have another person,
not the registrant who arranges the payment,
we should create some facility for this as well.
Some people will want to pay cash. We should prepare
an interface for this.
=head1 THANKS
Many thanks to the Siesta project.
While not related a large part of the code outline was copied from there.
Thanks for the help of
Richard Clamp and
Shlomi Fish
Yuval Yaari
=head1 COPYRIGHT
(c) 2003-2006 Gabor Szabo
http://www.pti.co.il/
Licensed under the same terms as Perl itself.
No warranty whatsoever.
=cut