Update of /cvsroot/openinteract/SPOPS/doc/examples
In directory usw-pr-cvs1:/tmp/cvs-serv23731
Added Files:
object_example_allthemes object_example_misc
object_example_users object_fieldalter_asrule
object_fieldalter_config object_fieldalter_inmethod
object_fieldmap_config object_fieldmap_usage
object_lazyload_config object_lazyload_fetch
object_lazyload_usage object_multivalue_config
object_multivalue_usage object_simple_cgi_create
object_simple_cgi_display object_simple_cgi_fetchgroup
object_simple_cgi_related object_strictfield_define
object_strictfield_errormsg security_get_users_groups
serial_storable_user
Log Message:
added new examples from docs
--- NEW FILE: object_example_allthemes ---
# Retrieve all themes and print a description
my $themes = eval { $theme_class->fetch_group( { order => 'title' } ) };
if ( $@ ) { ... report error ... }
else {
foreach my $thm ( @{ $themes } ) {
print "Theme: $thm->{title}\n",
"Description: $thm->{description}\n";
}
}
--- NEW FILE: object_example_misc ---
# Create a new object with initial values, set another value and save
my $data = MyClass->new({ field1 => 'value1',
field2 => 'value2' });
print "The value for field2 is: $data->{field2}\n";
$data->{field3} = 'value3';
eval { $data->save };
if ( $@ ) { ... report error ... }
# Remove the object permanently
eval { $data->remove };
if ( $@ ) { ... report error ... }
# Call arbitrary object methods to get other objects
my $other_obj = eval { $data->call_to_get_other_object() };
if ( $@ ) { ... report error ... }
# Clone the object with an overridden value and save
my $new_data = $data->clone({ field1 => 'new value' });
eval { $new_data->save };
if ( $@ ) { ... report error ... }
# $new_data is now its own hashref of data --
# explore the fields/values in it
while ( my ( $k, $v ) = each %{ $new_data } ) {
print "$k == $v\n";
}
# Retrieve saved data
my $saved_data = eval { MyClass->fetch( $id ) };
if ( $@ ) { ... report error ... }
else {
while ( my ( $k, $v ) = each %{ $saved_data } ) {
print "Value for $k with ID $id is $v\n";
}
}
# Retrieve lots of objects, display a value and call a
# method on each
my $data_list = eval { MyClass->fetch_group({
where => "last_name like 'winter%'" }) };
if ( $@ ) { ... report error ... }
else {
foreach my $obj ( @{ $data_list } ) {
print "Username: $obj->{username}\n";
$obj->increment_login();
}
}
--- NEW FILE: object_example_users ---
# Create a new user, set some values and save
my $user = $user_class->new;
$user->{email} = 'my...@us...';
$user->{first_name} = 'My';
$user->{last_name} = 'User';
my $user_id = eval { $user->save };
if ( $@ ) {
print "There was an error: $SPOPS::Error::system_msg\n"
}
# Retrieve that same user from the database
my $user_id = $cgi->param( 'user_id' );
my $user = eval { $user_class->fetch( $user_id ) };
if ( $@ ) { ... report error ... }
else {
print "The user's first name is: $user->{first_name}\n";
}
--- NEW FILE: object_fieldalter_asrule ---
sub ruleset_add {
my ( $class, $rs_table ) = @_;
push @{ $rs_table->{post_fetch_action} }, \&manipulate_date;
return ref $class || $class;
}
sub manipulate_date {
my ( $self, $p ) = @_;
return 1 unless ( $self->{start_date} );
my $start_date_object = Class::Date->new( $self->{start_date} );
local $Class::Date::DATE_FORMAT = '%Y/%m/%d %I:%M %p';
$self->{start_date} = "$start_date_object";
}
--- NEW FILE: object_fieldalter_config ---
my $config = {
myobject => {
class => 'My::SPOPS',
field => [ qw/ my_id my_name my_date / ],
field_alter => { my_date => "DATE_FORMAT( my_date, '%Y/%m/%d %I:%i %p' )" },
...,
},
};
--- NEW FILE: object_fieldalter_inmethod ---
my $alter = { my_date => "DATE_FORMAT( my_date, '%Y/%m/%d %I:%i %p' )" };
my $object = My::SPOPS->fetch( $object_id, { field_alter => $alter } );
--- NEW FILE: object_fieldmap_config ---
field_map => { 'last_name' => 'sn',
'first_name' => 'givenname',
'password' => 'userpassword',
'login_name' => 'uid',
'email' => 'mail',
'user_id' => 'cn' }
--- NEW FILE: object_fieldmap_usage ---
sub display_user_data {
my ( $user ) = @_;
return <<INFO;
ID: $user->{user_id}
Name: $user->{first_name} $user->{last_name}
Login: $user->{login_name}
Email: $user->{email}
INFO
}
print display_user_data( $my_ldap_user );
print display_user_data( $my_dbi_user );
--- NEW FILE: object_lazyload_config ---
$spops = {
html_page => {
class => 'My::HTMLPage',
isa => [ qw/ SPOPS::DBI::Pg SPOPS::DBI / ],
field => [ qw/ page_id location title author content / ],
column_group => { listing => [ qw/ location title author / ] },
...
},
};
--- NEW FILE: object_lazyload_fetch ---
my $page_list = My::HTMLPage->fetch_group({ order => 'location',
column_group => 'listing' });
--- NEW FILE: object_lazyload_usage ---
foreach my $page ( @{ $page_list } ) {
# These properties are in the fetched object and are not
# lazy-loaded
print "Title: $page->{title}\n",
"Author: $page->{author}\n";
# When we access lazy-loaded properties like 'content', SPOPS goes
# and retrieves the value for each object property as it's
# requested.
if ( $title =~ /^OpenInteract/ ) {
print "Content\n\n$page->{content}\n";
}
}
--- NEW FILE: object_multivalue_config ---
multivalue => [ 'field1', 'field2' ]
--- NEW FILE: object_multivalue_usage ---
my $object = My::Object->new;
# Set field1 to [ 'a', 'b' ]
$object->{field1} = [ 'a', 'b' ];
# Replace the value of 'a' with 'z'
$object->{field1} = { replace => { a => 'z' } };
# Add the value 'c'
$object->{field1} = 'c';
# Find only the ones I want
my @ones = grep { that_i_want( $_ ) } @{ $object->{field1} };
--- NEW FILE: object_simple_cgi_create ---
my $q = new CGI;
my $obj = MyUserClass->new();
foreach my $field ( qw( f_name l_name birthdate ) ) {
$obj->{ $field } = $q->param( $field );
}
my $object_id = eval { $obj->save };
if ( $@ ) {
... report error information ...
}
else {
warn " Object saved with ID: $obj->{object_id}\n";
}
--- NEW FILE: object_simple_cgi_display ---
my $q = new CGI;
my $object_id = $q->param( 'object_id' );
my $obj = MyUserClass->fetch( $object_id );
print "First Name: $obj->{f_name}\n",
"Last Name: $obj->{l_name}\n",
"Birthday: $obj->{birthdate}\n";
--- NEW FILE: object_simple_cgi_fetchgroup ---
my $q = new CGI;
my $last_name = $q->param( 'last_name' );
my $user_list = MyUserClass->fetch_group({ where => 'l_name LIKE ?',
value => [ "%$last_name%" ],
order => 'birthdate' });
print "Users with last name having: $last_name\n";
foreach my $user ( @{ $user_list } ) {
print " $user->{f_name} $user->{l_name} -- $user->{birthdate}\n";
}
--- NEW FILE: object_simple_cgi_related ---
my $user_group = $obj->group;
print "Group Name: $user_group->{name}\n";
--- NEW FILE: object_strictfield_define ---
$spops = {
user => {
class => 'My::User',
isa => [ qw/ SPOPS::DBI::Pg SPOPS::DBI / ],
field => [ qw/ first_name last_name login / ],
strict_field => 1,
...
},
};
...
my $user = My::User->new;
$user->{firstname} = 'Chucky';
--- NEW FILE: object_strictfield_errormsg ---
Error setting value for field (firstname): it is not a valid field
at my_tie.pl line 9
--- NEW FILE: security_get_users_groups ---
# Note that 'login_name' is not required as a parameter; this is just
# an example
my $user_members = eval { $group->user };
foreach my $user ( @{ $user_members } ) {
print "Username is $user->{login_name}\n";
}
# Note that 'name' is not required as a parameter; this is just an
# example
my $groups = eval { $user->group };
foreach my $group ( @{ $groups } ) {
print "Group name is $group->{name}\n";
}
--- NEW FILE: serial_storable_user ---
# Fetch the user object and if retrieved, store it in the session
my $session = $session_class->create;
my $login_name = read_login_name();
my $user = eval { $user_class->fetch_by_login_name( $login_name ) };
if ( $@ ) { ... }
$session->{user_object} = $user->store;
# ... time passes ...
my $session = $session_class->fetch( $session_id );
my ( $user );
if ( $session->{user_object} ) {
$user = $user_class->retrieve( $session->{user_object} );
}
else {
my $login_name = read_login_name();
my $user = eval { $user_class->fetch_by_login_name( $login_name ) };
...
}
|