package MyPageKit::MyModel; # $Id $ use vars qw(@ISA); @ISA = qw(MyPageKit::Common); use strict; # this is just a testcase, it counts a counter in a session # and redirect to the index page. # delete it in your application sub create_and_redirect { my $model = shift; $model->session->{counter}++; $model->pkit_redirect('/index'); } # customize site look-and-feel sub customize { my $model = shift; my $session = $model->session; my $change_flag; for (grep /color$/, $model->input){ $session->{$_} = $model->input($_); $model->output($_ => $model->input($_)); $change_flag = 1; } $model->pkit_gettext_message("Your changes have been made.") if $change_flag; } sub error_report { warn "test warning message"; } sub form_validation_done { my $model = shift; my $input_profile = { required => [ qw( email phone likes ) ], optional => [ qw( toppings ) ], constraints => { email => "email", phone => "phone", }, messages => { email => "The E-mail address, %%VALUE%%, is invalid.", phone => "The phone number, %%VALUE%%, is invalid.", }, }; # validate user input unless($model->pkit_validate_input($input_profile)){ $model->pkit_internal_redirect('form_validation'); return; } $model->pkit_redirect('index'); } sub index { my $model = shift; my $session_id = $model->pkit_get_session_id || '[Session not set]'; $model->output(session_id => $session_id); my $pkit_server_id = $model->pkit_get_server_id; $model->output(pkit_server_id => $pkit_server_id); } sub language { my $model = shift; my $pkit_lang = $model->pkit_lang; $model->output(model_pkit_lang => $pkit_lang); } sub media { my $model = shift; # just for laughs, we display the process number $model->output(process_number => $$); } sub media_xslt { return shift->media; } sub newacct2 { my $model = shift; my $dbh = $model->dbh; my $input_profile = { required => [ qw( email login passwd1 passwd2 ) ], constraints => { email => "email", login => { constraint => sub { my ($new_login) = @_; # check to make sure login isn't already used my $sql_str = "SELECT login FROM pkit_user WHERE login = ?"; # login is used, return false return 0 if $dbh->selectrow_array($sql_str,{},$new_login); # login isn't used, return true return 1; }, params => [ qw( login )] }, passwd1 => { constraint => sub { return $_[0] eq $_[1]; }, params => [ qw( passwd1 passwd2 ) ] }, passwd2 => { constraint => sub { return $_[0] eq $_[1]; }, params => [ qw( passwd1 passwd2 ) ] }, }, messages => { login => "The login, %%VALUE%%, has already been used.", email => "The E-mail address, %%VALUE%%, is invalid.", phone => "The phone number you entered is invalid.", passwd1 => "The passwords you entered do not match.", }, }; # validate user input unless($model->pkit_validate_input($input_profile)){ $model->pkit_internal_redirect('newacct1'); return; } my $login = $model->input('login'); my $passwd = $model->input('passwd1'); # page to return to after user is logged in my $pkit_done = $model->input('pkit_done'); # make up userID my $user_id = substr(Digest::MD5::md5_hex(Digest::MD5::md5_hex(time(). {}. rand(). $$)), 0, 8); my $sql_str = "INSERT INTO pkit_user (user_id,email,login,passwd) VALUES (?,?,?,?)"; $dbh->do($sql_str, {}, $user_id, $model->input('email'), $login, $passwd); # example of pkit_message being passed along with pkit_redirect $model->pkit_gettext_message("This message was passed throught pkit_redirect"); $model->pkit_gettext_message("Another message passed throught pkit_redirect"); $model->pkit_gettext_message("This ERROR message was passed throught pkit_redirect", is_error => 1); $model->pkit_redirect("/?login=$login&passwd=$passwd&pkit_done=$pkit_done&pkit_login=1"); } 1; __END__ =head1 NAME MyPageKit::MyModel - Example Derived Model Class implementing Backend Code for pagekit.org website =head1 DESCRIPTION This module provides a example of a Derived Model component (Business Logic) of a PageKit website. It is also the code used for old the http://www.pagekit.org/ web site. It contains two methods, one for customizing the look and feel for the website, and another for processing new account sign ups. It is a good starting point for building your backend for your PageKit website. =head1 AUTHORS T.J. Mather (tjmather@thoughtstore.com) Boris Zentner (bzm@2bz.de) =head1 COPYRIGHT Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005 AnIdea Corp. All rights Reserved. PageKit is a trademark of AnIdea, Corp. =head1 LICENSE 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 Ricoh Source Code Public License for more details. You can redistribute this module and/or modify it only under the terms of the Ricoh Source Code Public License. You should have received a copy of the Ricoh Source Code Public License along with this program; if not, obtain one at http://www.pagekit.org/license