#!/usr/bin/perl -wT # Copyright (C) 1994 - 2001 eXtropia.com # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. use strict; BEGIN{ use vars qw(@dirs); @dirs = qw(Modules Modules/CPAN .); } use lib @dirs; unshift @INC, @dirs unless $INC[0] eq $dirs[0]; my $APP_NAME = "guestbook"; my $GLOBAL_DATAFILES_DIRECTORY = "Datafiles"; my $TEMPLATES_CACHE_DIRECTORY = "$GLOBAL_DATAFILES_DIRECTORY/TemplatesCache"; my $APP_DATAFILES_DIRECTORY = "Datafiles/GuestBook"; my @VIEWS_SEARCH_PATH = qw(Modules/Extropia/View/GuestBook Modules/Extropia/View/Default); my @TEMPLATES_SEARCH_PATH = qw(HTMLTemplates/GuestBook HTMLTemplates/Default); use CGI qw(-debug); #Carp commented out due to Perl 5.60 bug. Uncomment when using Perl 5.61. #use CGI::Carp qw(fatalsToBrowser); use Extropia::Core::App::DBApp; use Extropia::Core::View; use Extropia::Core::SessionManager; my $CGI = new CGI() or die("Unable to construct the CGI object" . ". Please contact the webmaster."); my $VIEW_LOADER = new Extropia::Core::View (\@VIEWS_SEARCH_PATH,\@TEMPLATES_SEARCH_PATH) or die("Unable to construct the VIEW LOADER object in " . $CGI->script_name() . ". Please contact the webmaster."); foreach ($CGI->param()) { $CGI->param($1,$CGI->param($_)) if (/(.*)\.x/); } ###################################################################### # DATA HANDLER SETUP # ###################################################################### my @ADD_FORM_DHM_CONFIG_PARAMS = ( -TYPE => 'CGI', -CGI_OBJECT => $CGI, -DATAHANDLERS => [qw( Email Exists HTML String )], -FIELD_MAPPINGS => { 'fname' => 'First Name', 'lname' => 'Last Name', 'email' => 'Email', 'location' => 'Location', 'comments' => 'Comments', }, -RULES => [ -ESCAPE_HTML_TAGS => [ -FIELDS => [qw( * )], ], -DOES_NOT_CONTAIN => [ -FIELDS => [qw( * )], -CONTENT_TO_DISALLOW => '\\', -ERROR_MESSAGE => "You may not have a '\\' character in the " . "%FIELD_NAME% field." ], -SUBSTITUTE_ONE_STRING_FOR_ANOTHER => [ -FIELDS => [qw( * )], -ORIGINAL_STRING => '"', -NEW_STRING => "''" ], -IS_EMAIL => [qw( email )], -IS_FILLED_IN => [ -FIELDS => [qw( comments )] ] ] ); my @DATA_HANDLER_MANAGER_CONFIG_PARAMS = ( -ADD_FORM_DHM_CONFIG_PARAMS => \@ADD_FORM_DHM_CONFIG_PARAMS ); ###################################################################### # DATASOURCE SETUP # ###################################################################### my @DATASOURCE_FIELD_NAMES = qw( record_id fname lname location email comments reviewed_by_admin date_time_posted ); my %BASIC_INPUT_WIDGET_DEFINITIONS = ( lname => [ -DISPLAY_NAME => 'Last Name', -TYPE => 'textfield', -NAME => 'lname', -SIZE => 30, -MAXLENGTH => 80 ], fname => [ -DISPLAY_NAME => 'First Name', -TYPE => 'textfield', -NAME => 'fname', -SIZE => 30, -MAXLENGTH => 80 ], location => [ -DISPLAY_NAME => 'Location', -TYPE => 'textfield', -NAME => 'location', -SIZE => 30, -MAXLENGTH => 80 ], email => [ -DISPLAY_NAME => 'Email', -TYPE => 'textfield', -NAME => 'email', -SIZE => 30, -MAXLENGTH => 80 ], comments => [ -DISPLAY_NAME => 'Comments', -TYPE => 'textarea', -NAME => 'comments', -ROWS => 6, -COLS => 30, -WRAP => 'VIRTUAL' ] ); my @BASIC_INPUT_WIDGET_DISPLAY_ORDER = qw( fname lname location email comments ); my @INPUT_WIDGET_DEFINITIONS = ( -BASIC_INPUT_WIDGET_DEFINITIONS => \%BASIC_INPUT_WIDGET_DEFINITIONS, -BASIC_INPUT_WIDGET_DISPLAY_ORDER => \@BASIC_INPUT_WIDGET_DISPLAY_ORDER ); my @BASIC_DATASOURCE_CONFIG_PARAMS = ( -TYPE => 'File', -CREATE_FILE_IF_NONE_EXISTS => 1, -FILE => "$APP_DATAFILES_DIRECTORY/$APP_NAME.dat", -COMMENT_PREFIX => '#', -FIELD_DELIMITER => '|', -FIELD_NAMES => \@DATASOURCE_FIELD_NAMES, -KEY_FIELDS => ['record_id'], -FIELD_TYPES => { record_id => 'Autoincrement' } ); my @DATASOURCE_CONFIG_PARAMS = ( -BASIC_DATASOURCE_CONFIG_PARAMS => \@BASIC_DATASOURCE_CONFIG_PARAMS, ); ###################################################################### # MAILER SETUP # ###################################################################### my @MAIL_CONFIG_PARAMS = ( -TYPE => 'Sendmail' ); my @EMAIL_DISPLAY_FIELDS = qw( fname lname location email comments ); my @ADD_EVENT_MAIL_SEND_PARAMS = ( -FROM => $CGI->param('email'), -TO => 'a@orgue.com', -REPLY_TO => 'a@orgue.com', -SUBJECT => 'Guestbook Addition' ); my @MAIL_SEND_PARAMS = ( -ADD_EVENT_MAIL_SEND_PARAMS => \@ADD_EVENT_MAIL_SEND_PARAMS, ); ################################################################## # LOGGING SETUP # ################################################################## my @LOG_CONFIG_PARAMS = ( -TYPE => 'File', -LOG_FILE => "$APP_DATAFILES_DIRECTORY/$APP_NAME.log", -LOG_ENTRY_SUFFIX => '|' . _generateEnvVarsString() . '|', -LOG_ENTRY_PREFIX => 'Guestbook|' ); sub _generateEnvVarsString { my @env_values; my $key; foreach $key (keys %ENV) { push (@env_values, "$key=" . $ENV{$key}); } return join ("\|", @env_values); } ###################################################################### # VIEW SETUP # ###################################################################### my @VALID_VIEWS = qw( CSSView AddAcknowledgementView AddRecordConfirmationView SessionTimeoutErrorView AddRecordView BasicDataView OptionsView PowerSearchFormView ); my @VIEW_DISPLAY_PARAMS = ( -APPLICATION_LOGO => 'logo.gif', -APPLICATION_LOGO_HEIGHT => '40', -APPLICATION_LOGO_WIDTH => '353', -APPLICATION_LOGO_ALT => 'Guestbook', -HTTP_HEADER_PARAMS => [-EXPIRES => '-1d'], -DOCUMENT_ROOT_URL => '/', -IMAGE_ROOT_URL => '/linux_organ/guest_book/Images/Extropia', -LINK_TARGET => '_self', -SCRIPT_DISPLAY_NAME => 'Guestbook', -SCRIPT_NAME => $CGI->script_name(), -EMAIL_DISPLAY_FIELDS => \@EMAIL_DISPLAY_FIELDS, -HOME_VIEW => 'BasicDataView', -FIELD_NAME_MAPPINGS => { fname => "First Name", lname => "Last Name", email => "Email", location => "Location", comments => "Comments" }, -DISPLAY_FIELDS => [qw( fname lname email location comments )], -SELECTED_DISPLAY_FIELDS => [qw( fname lname email location comments )], -SORT_FIELDS => [qw( fname lname email location comments )], -FIELDS_TO_BE_DISPLAYED_AS_MULTI_LINE_TEXT => [qw( comments )], ); ###################################################################### # FILTER SETUP # ###################################################################### my @HTMLIZE_FILTER_CONFIG_PARAMS = ( -TYPE => 'HTMLize', -CONVERT_DOUBLE_LINEBREAK_TO_P => 1, -CONVERT_LINEBREAK_TO_BR => 1, ); my @CHARSET_FILTER_CONFIG_PARAMS = ( -TYPE => 'CharSet' ); my @EMBED_FILTER_CONFIG_PARAMS = ( -TYPE => 'Embed', -ENABLE => 0 ); my @VIEW_FILTERS_CONFIG_PARAMS = ( \@HTMLIZE_FILTER_CONFIG_PARAMS, \@CHARSET_FILTER_CONFIG_PARAMS, \@EMBED_FILTER_CONFIG_PARAMS ); ###################################################################### # ACTION/WORKFLOW SETUP # ###################################################################### my @ACTION_HANDLER_LIST = qw( Default::DisplayCSSViewAction Default::DisplaySessionTimeoutErrorAction Default::DownloadFileAction Default::DisplayAddFormAction Default::DisplayAddRecordConfirmationAction Default::ProcessAddRequestAction Default::DisplayOptionsFormAction Default::DisplayPowerSearchFormAction Default::DisplayBasicDataViewAction Default::DefaultAction ); my @ACTION_HANDLER_ACTION_PARAMS = ( -ACTION_HANDLER_LIST => \@ACTION_HANDLER_LIST, -ADD_ACKNOWLEDGEMENT_VIEW_NAME => 'AddAcknowledgementView', -ADD_RECORD_CONFIRMATION_VIEW_NAME => 'AddRecordConfirmationView', -ALLOW_ADDITIONS_FLAG => 1, -ADD_FORM_VIEW_NAME => 'AddRecordView', -ADD_EMAIL_BODY_VIEW => 'AddEventEmailView', -BASIC_DATA_VIEW_NAME => 'BasicDataView', -APPLICATION_SUB_MENU_VIEW_NAME => 'ApplicationSubMenuView', -CGI_OBJECT => $CGI, -CSS_VIEW_URL => $CGI->script_name() . "?display_css_view=on", -CSS_VIEW_NAME => "CSSView", -DATA_HANDLER_MANAGER_CONFIG_PARAMS => \@DATA_HANDLER_MANAGER_CONFIG_PARAMS, -DEFAULT_SORT_FIELD1 => 'fname', -DEFAULT_SORT_FIELD2 => 'lname', -DISPLAY_ACKNOWLEDGEMENT_ON_ADD_FLAG => 1, -DISPLAY_CONFIRMATION_ON_ADD_FLAG => 1, -DATASOURCE_CONFIG_PARAMS => \@DATASOURCE_CONFIG_PARAMS, -HIDDEN_ADMIN_FIELDS_VIEW_NAME => 'HiddenAdminFieldsView', -URL_ENCODED_ADMIN_FIELDS_VIEW_NAME => 'URLEncodedAdminFieldsView', -LOG_CONFIG_PARAMS => \@LOG_CONFIG_PARAMS, -MAIL_CONFIG_PARAMS => \@MAIL_CONFIG_PARAMS, -MAIL_SEND_PARAMS => \@MAIL_SEND_PARAMS, -SEND_EMAIL_ON_ADD_FLAG => 1, -SESSION_TIMEOUT_VIEW_NAME => 'SessionTimeoutErrorView', -VIEW_FILTERS_CONFIG_PARAMS => \@VIEW_FILTERS_CONFIG_PARAMS, -VIEW_DISPLAY_PARAMS => \@VIEW_DISPLAY_PARAMS, -TEMPLATES_CACHE_DIRECTORY => $TEMPLATES_CACHE_DIRECTORY, -VALID_VIEWS => \@VALID_VIEWS, -VIEW_LOADER => $VIEW_LOADER, -RECORDS_PER_PAGE_OPTS => [5, 10, 25, 50, 100], -MAX_RECORDS_PER_PAGE => $CGI->param('records_per_page') || 10, -SORT_FIELD1 => $CGI->param('sort_field1') || 'fname', -SORT_FIELD2 => $CGI->param('sort_field2') || 'lname', -SORT_DIRECTION => $CGI->param('sort_direction') || 'DESC', -ENABLE_SORTING_FLAG => 1, -SIMPLE_SEARCH_STRING => $CGI->param('simple_search_string') || "", -FIRST_RECORD_ON_PAGE => $CGI->param('first_record_to_display') || 0, -LAST_RECORD_ON_PAGE => $CGI->param('first_record_to_display') || "0", -KEY_FIELD => 'record_id', -PAGE_TOP_VIEW => 'PageTopView', -PAGE_BOTTOM_VIEW => 'PageBottomView', -INPUT_WIDGET_DEFINITIONS => \@INPUT_WIDGET_DEFINITIONS, -BASIC_INPUT_WIDGET_DISPLAY_COLSPAN => 2, -OPTIONS_FORM_VIEW_NAME => 'OptionsView', -POWER_SEARCH_VIEW_NAME => 'PowerSearchFormView', ); ###################################################################### # LOAD APPLICATION # ###################################################################### my $APP = new Extropia::Core::App::DBApp( -ROOT_ACTION_HANDLER_DIRECTORY => "ActionHandler", -ACTION_HANDLER_ACTION_PARAMS => \@ACTION_HANDLER_ACTION_PARAMS, -ACTION_HANDLER_LIST => \@ACTION_HANDLER_LIST, -VIEW_DISPLAY_PARAMS => \@VIEW_DISPLAY_PARAMS ) or die("Unable to construct the application object in " . $CGI->script_name() . ". Please contact the webmaster."); print $APP->execute();