--- loncom/LONCAPA.pm 2008/11/17 13:24:02 1.26 +++ loncom/LONCAPA.pm 2010/06/15 05:31:43 1.30 @@ -1,7 +1,7 @@ # The LearningOnline Network # Base routines # -# $Id: LONCAPA.pm,v 1.26 2008/11/17 13:24:02 jms Exp $ +# $Id: LONCAPA.pm,v 1.30 2010/06/15 05:31:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,41 +27,7 @@ # ### -=head1 NAME - -Apache::LONCAPA - -LONCAPA - Basic routines - -=head1 SYNOPSIS - -Generally useful routines - -=head1 EXPORTED SUBROUTINES - -=over 4 -=item * - -escape() : unpack non-word characters into CGI-compatible hex codes - -=item * - -unescape() : pack CGI-compatible hex codes into actual non-word ASCII character - -=item * - -add_get_param() : - Inputs: url (with or without exit GET from parameters), hash ref of - form name => value pairs - - Return: url with properly added the form name elements and values to the - the url doing proper escaping of the values and joining with ? or & - as needed - -=back - -=cut package LONCAPA; @@ -78,6 +44,7 @@ my $loncapa_max_wait_time = 13; use vars qw($match_domain $match_not_domain $match_username $match_not_username $match_courseid $match_not_courseid + $match_community $match_name $match_lonid $match_handle $match_not_handle); @@ -90,32 +57,20 @@ our @EXPORT = qw(&add_get_param &esca our @EXPORT_OK = qw($match_domain $match_not_domain $match_username $match_not_username $match_courseid $match_not_courseid + $match_community $match_name $match_lonid $match_handle $match_not_handle); our %EXPORT_TAGS = ( 'match' =>[qw($match_domain $match_not_domain $match_username $match_not_username $match_courseid $match_not_courseid + $match_community $match_name $match_lonid $match_handle $match_not_handle)],); my %perlvar; -=pod - -=head2 NOTE: - -add_get_param() - -Inputs are a url, and a hash ref of -form name => value pairs -takes care of properly adding the form name elements and values to the -the url doing proper escaping of the values and joining with ? or & as -needed - -=cut - sub add_get_param { my ($url,$form_data) = @_; my $needs_question_mark = ($url !~ /\?/); @@ -148,8 +103,8 @@ sub unescape { return $str; } -$match_domain = $LONCAPA::domain_re = qr{[\w\-.]+}; -$match_not_domain = $LONCAPA::not_domain_re = qr{[^\w\-.]+}; +$match_domain = $LONCAPA::domain_re = qr{[[:alnum:]\-.]+}; +$match_not_domain = $LONCAPA::not_domain_re = qr{[^[:alnum:]\-.]+}; sub clean_domain { my ($domain) = @_; $domain =~ s/$match_not_domain//g; @@ -167,6 +122,7 @@ sub clean_username { $match_courseid = $LONCAPA::courseid_re = qr{\d[\w\-.]+}; +$match_community =$LONCAPA::community_re = qr{0[\w\-.]+}; $match_not_courseid = $LONCAPA::not_courseid_re = qr{[^\w\-.]+}; sub clean_courseid { my ($courseid) = @_; @@ -209,39 +165,7 @@ sub propath { $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; return $proname; -} - - -#--------------------------------------------------------------- - -=pod - -=out - -=item tie_domain_hash() - -Manipulation of hash based databases (factoring out common code -for later use as we refactor. - - Ties a domain level resource file to a hash. - If requested a history entry is created in the associated hist file. - - Parameters: - domain - Name of the domain in which the resource file lives. - namespace - Name of the hash within that domain. - how - How to tie the hash (e.g. GDBM_WRCREAT()). - loghead - Optional parameter, if present a log entry is created - in the associated history file and this is the first part - of that entry. - logtail - Goes along with loghead, The actual logentry is of the - form $loghead::logtail. -Returns: - Reference to a hash bound to the db file or alternatively undef - if the tie failed. - -=back - -=cut +} sub tie_domain_hash { my ($domain,$namespace,$how,$loghead,$logtail) = @_; @@ -262,33 +186,6 @@ sub untie_domain_hash { return &_locking_hash_untie(@_); } -=pod - -=out - -=item tie_user_hash() - - Ties a user's resource file to a hash. - If necessary, an appropriate history - log file entry is made as well. - This sub factors out common code from the subs that manipulate - the various gdbm files that keep keyword value pairs. -Parameters: - domain - Name of the domain the user is in. - user - Name of the 'current user'. - namespace - Namespace representing the file to tie. - how - What the tie is done to (e.g. GDBM_WRCREAT(). - loghead - Optional first part of log entry if there may be a - history file. - what - Optional tail of log entry if there may be a history - file. -Returns: - hash to which the database is tied. It's up to the caller to untie. - undef if the has could not be tied. - -back - -=cut sub tie_user_hash { my ($domain,$user,$namespace,$how,$loghead,$what) = @_; @@ -304,18 +201,6 @@ sub untie_user_hash { return &_locking_hash_untie(@_); } -=pod - -=out - -=item locking_hash_tie() - -routines if you just have a filename -return tied hashref or undef - -=back - -=cut sub locking_hash_tie { my ($filename,$how)=@_; @@ -489,4 +374,103 @@ BEGIN { __END__ +=pod + +=head1 NAME + +Apache::LONCAPA + +LONCAPA - Basic routines + +=head1 SYNOPSIS + +Generally useful routines + +=head1 EXPORTED SUBROUTINES + +=over + +=item escape() + +unpack non-word characters into CGI-compatible hex codes + +=item unescape() + + pack CGI-compatible hex codes into actual non-word ASCII character + +=item add_get_param() + +Append escaped form elements (name=value etc.) to a url. + + Inputs: url (with or without exit GET from parameters), hash ref of + form name => value pairs + + Return: url with form name elements and values appended to the + the url, doing proper escaping of the values and joining with ? or & + as needed + +=item clean_handle() + +=item propath() + +=item untie_domain_hash() + +=item tie_domain_hash() + +Manipulation of hash based databases (factoring out common code +for later use as we refactor. + + Ties a domain level resource file to a hash. + If requested a history entry is created in the associated hist file. + + Parameters: + domain - Name of the domain in which the resource file lives. + namespace - Name of the hash within that domain. + how - How to tie the hash (e.g. GDBM_WRCREAT()). + loghead - Optional parameter, if present a log entry is created + in the associated history file and this is the first part + of that entry. + logtail - Goes along with loghead, The actual logentry is of the + form $loghead::logtail. +Returns: + Reference to a hash bound to the db file or alternatively undef + if the tie failed. + +=item tie_user_hash() + + Ties a user's resource file to a hash. + If necessary, an appropriate history + log file entry is made as well. + This sub factors out common code from the subs that manipulate + the various gdbm files that keep keyword value pairs. +Parameters: + domain - Name of the domain the user is in. + user - Name of the 'current user'. + namespace - Namespace representing the file to tie. + how - What the tie is done to (e.g. GDBM_WRCREAT(). + loghead - Optional first part of log entry if there may be a + history file. + what - Optional tail of log entry if there may be a history + file. +Returns: + hash to which the database is tied. It's up to the caller to untie. + undef if the has could not be tied. + +=item locking_hash_tie() + +routines if you just have a filename return tied hashref or undef + +=item locking_hash_untie() + +=item db_filename_parts() + +=head1 INTERNAL SUBROUTINES + +=item _do_hash_tie() + +=item _do_hash_untie() + +=back + +=cut