| E2-Interface documentation | Contained in the E2-Interface distribution. |
E2::Scratchpad - A module for loading and setting a user's E2 Scratch Pad.
use E2::Scratchpad; use E2::User; # We need to get a user's user_id my $scratch = new E2::Scratchpad; # Load nate's scratchpad my $user = new E2::User; $user->load( 'nate' ) or die "Can't load nate's homenode"; $scratch->load( $user->id ) or die "Can't load nate's scratchpad"; ....... # Login and load your own scratchpad $scratch->login( "username", "password" ) or die "Unable to login"; $scratch->load or die "Can't load your scratchpad"; # Display your scratchpad print $scratch->user . "'s scratchpad:\n"; print "(Other users can " . ($scratch->shared ? '' : 'NOT ') . "view your scratchpad.)\n"; print "-------------------------------\n"; print $scratch->text; # Update your scratchpad $scratch->update( "Scratchpad text goes here\n" );
This module allows access to user's scratchpads (with read and write access to a user's own scratchpad and read access to the scratchpad of any user who chooses to share his publicly.
new creates a new E2::Scratchpad object.
This method fetches a user's scratchpad.
If USER_ID is specified, it attempts to fetch the scratchpad of that user (who may or may not have chosen to share it publicly). If USER_ID is not specified, it fetches the scratchpad of the currently-logged-in user.
This method returns true on success and undef on failure.
Exceptions: 'Unable to process request', 'Parse error:'
If TEXT is specified, this method updates the text of the currently-logged-in user's scratchpad. If SHARE is specified, it tells the server whether this scratchpad is to be publicly shared or not.
If either parameter is undefined, it is ignored. Pass an empty string as TEXT to clear the scratchpad, and 0 as SHARE to set the scratchpad as not shared.
Exceptions: 'Unable to process request'
These methods return, respectively, the boolean: "Is this scratchpad publicly shared?"; the username of the user to whom this scratchpad belongs, and the text of this scratchpad.
load must be called before any of these values will be defined.
Jose M. Weeks <jose@joseweeks.com> (Simpleton on E2)
This software is public domain.
| E2-Interface documentation | Contained in the E2-Interface distribution. |
# E2::Scratchpad # Jose M. Weeks <jose@joseweeks.com> # 17 June 2003 # # See bottom for pod documentation. package E2::Scratchpad; use 5.006; use strict; use warnings; use Carp; use E2::Ticker; our @ISA = ("E2::Ticker"); our $VERSION = "0.32"; our $DEBUG; *DEBUG = *E2::Interface::DEBUG; sub new { my $arg = shift; my $class = ref($arg) || $arg; my $self = $class->SUPER::new( @_ ); $self->{text} = undef; $self->{user} = undef; $self->{shared} = undef; return $self; } sub text { return $_[0]->{text} } sub user { return $_[0]->{user} } sub shared { return $_[0]->{shared} } sub load { my $self = shift or croak "Usage: scratch_pad E2SCRATCHPAD [, USER ]"; my $user_id = shift; my %opt; warn "E2::Scratchpad::load" if $DEBUG > 1; $opt{scratch} = $user_id if $user_id; my $handlers = { 'scratchtxt' => sub { (my $a, my $b) = @_; $self->{text} = $b->text; $self->{user} = $b->{att}->{user}; $self->{shared} = $b->{att}->{user}; } }; $self->{text} = undef; $self->{user} = undef; $self->{shared} = undef; return $self->thread_then( [ \&E2::Ticker::parse, $self, 'scratch', $handlers, [], # dummy value for array %opt ], sub { return $self->user ? 1 : 0 } ); } sub update { my $self = shift or croak "Usage: update E2SCRATCHPAD [ TEXT ] [, SHARE ]"; my $text = shift; my $share = shift; warn "E2::Scratchpad::update" if $DEBUG > 1; # Must be logged in AND either updating the text or the share # (or both) if( ! $self->logged_in ) { warn "Unable to update scratchpad: not logged in" if $DEBUG; return undef; } if( ! defined $text && ! defined $share ) { warn "Nothing to update" if $DEBUG; return undef; } my %req = ( node => 'E2 Scratch Pad', skratchsubmit => 1, sexisgood => 1, submit => 'Update!' ); if( defined $text ) { $req{skratch} = $text; } if( defined $share ) { # ... } $self->thread_then( [ \&E2::Interface::process_request, $self, %req ], sub { # FIXME: test for success return 1; } ); } 1; __END__