Diff for /loncom/LONCAPA.pm between versions 1.18 and 1.26

version 1.18, 2006/12/06 22:22:36 version 1.26, 2008/11/17 13:24:02
Line 27 Line 27
 #  #
 ###  ###
   
   =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;  package LONCAPA;
   
 use strict;  use strict;
Line 43  use vars qw($match_domain   $match_not_d Line 79  use vars qw($match_domain   $match_not_d
     $match_username $match_not_username      $match_username $match_not_username
     $match_courseid $match_not_courseid      $match_courseid $match_not_courseid
     $match_name      $match_name
               $match_lonid
     $match_handle   $match_not_handle);      $match_handle   $match_not_handle);
   
 require Exporter;  require Exporter;
Line 54  our @EXPORT_OK = qw($match_domain   $mat Line 91  our @EXPORT_OK = qw($match_domain   $mat
     $match_username $match_not_username      $match_username $match_not_username
     $match_courseid $match_not_courseid      $match_courseid $match_not_courseid
     $match_name      $match_name
       $match_lonid
     $match_handle   $match_not_handle);      $match_handle   $match_not_handle);
 our %EXPORT_TAGS = ( 'match' =>[qw($match_domain   $match_not_domain  our %EXPORT_TAGS = ( 'match' =>[qw($match_domain   $match_not_domain
    $match_username $match_not_username     $match_username $match_not_username
    $match_courseid $match_not_courseid     $match_courseid $match_not_courseid
    $match_name     $match_name
      $match_lonid
    $match_handle   $match_not_handle)],);     $match_handle   $match_not_handle)],);
 my %perlvar;  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
   
 # Inputs are a url, and a hash ref of  =cut
 # 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  
   
 sub add_get_param {  sub add_get_param {
     my ($url,$form_data) = @_;      my ($url,$form_data) = @_;
Line 110  sub clean_domain { Line 156  sub clean_domain {
     return $domain;      return $domain;
 }  }
   
 $match_username     = $LONCAPA::username_re     = qr{[a-zA-Z\_][\w\-.]+};  $match_username     = $LONCAPA::username_re     = qr{\w[\w\-.@]+};
 $match_not_username = $LONCAPA::not_username_re = qr{[^\w\-.]+};  $match_not_username = $LONCAPA::not_username_re = qr{[^\w\-.@]+};
 sub clean_username {  sub clean_username {
     my ($username) = @_;      my ($username) = @_;
     $username =~ s/^\d+//;      $username =~ s/^\W+//;
     $username =~ s/$match_not_username//g;      $username =~ s/$match_not_username//g;
     return $username;      return $username;
 }  }
Line 122  sub clean_username { Line 168  sub clean_username {
   
 $match_courseid     = $LONCAPA::courseid_re     = qr{\d[\w\-.]+};  $match_courseid     = $LONCAPA::courseid_re     = qr{\d[\w\-.]+};
 $match_not_courseid = $LONCAPA::not_courseid_re = qr{[^\w\-.]+};  $match_not_courseid = $LONCAPA::not_courseid_re = qr{[^\w\-.]+};
 sub is_courseid {  sub clean_courseid {
     my ($courseid) = @_;      my ($courseid) = @_;
     return ($courseid =~ m/^$match_courseid$/);      $courseid =~ s/^\D+//;
       $courseid =~ s/$match_not_courseid//g;
       return $courseid;
 }  }
   
 $match_name         = $LONCAPA::name = qr{$match_username|$match_courseid};  $match_name         = $LONCAPA::name_re = qr{$match_username|$match_courseid};
 sub clean_name {  sub clean_name {
     my ($name) = @_;      my ($name) = @_;
     $name =~ s/$match_not_username//g;      $name =~ s/$match_not_username//g;
     return $name;      return $name;
 }  }
   
   $match_lonid     = $LONCAPA::lonid_re     = qr{[\w\-.]+};
   
 sub split_courseid {  sub split_courseid {
     my ($courseid) = @_;      my ($courseid) = @_;
     my  ($domain,$coursenum) =       my  ($domain,$coursenum) = 
Line 141  sub split_courseid { Line 191  sub split_courseid {
     return ($domain,$coursenum);      return ($domain,$coursenum);
 }  }
   
 $match_handle     = $LONCAPA::handle_re     = qr{[\w\-.]+};  $match_handle     = $LONCAPA::handle_re     = qr{[\w\-.@]+};
 $match_not_handle = $LONCAPA::not_handle_re = qr{[^\w\-.]+};  $match_not_handle = $LONCAPA::not_handle_re = qr{[^\w\-.@]+};
 sub clean_handle {  sub clean_handle {
     my ($handle) = @_;      my ($handle) = @_;
     $handle =~ s/$match_not_handle//g;      $handle =~ s/$match_not_handle//g;
Line 163  sub propath { Line 213  sub propath {
   
   
 #---------------------------------------------------------------  #---------------------------------------------------------------
 #  
 # Manipulation of hash based databases (factoring out common code  =pod
 # for later use as we refactor.  
 #  =out
 #  Ties a domain level resource file to a hash.  
 #  If requested a history entry is created in the associated hist file.  =item tie_domain_hash()
 #  
 #  Parameters:  Manipulation of hash based databases (factoring out common code
 #     domain    - Name of the domain in which the resource file lives.  for later use as we refactor.
 #     namespace - Name of the hash within that domain.  
 #     how       - How to tie the hash (e.g. GDBM_WRCREAT()).   Ties a domain level resource file to a hash.
 #     loghead   - Optional parameter, if present a log entry is created   If requested a history entry is created in the associated hist file.
 #                 in the associated history file and this is the first part  
 #                  of that entry.   Parameters:
 #     logtail   - Goes along with loghead,  The actual logentry is of the      domain    - Name of the domain in which the resource file lives.
 #                 form $loghead:<timestamp>:logtail.      namespace - Name of the hash within that domain.
 # Returns:      how       - How to tie the hash (e.g. GDBM_WRCREAT()).
 #    Reference to a hash bound to the db file or alternatively undef      loghead   - Optional parameter, if present a log entry is created
 #    if the tie failed.                  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:<timestamp>:logtail.
   Returns:
      Reference to a hash bound to the db file or alternatively undef
      if the tie failed.
   
   =back
   
   =cut
   
 sub tie_domain_hash {  sub tie_domain_hash {
     my ($domain,$namespace,$how,$loghead,$logtail) = @_;      my ($domain,$namespace,$how,$loghead,$logtail) = @_;
           
Line 201  sub tie_domain_hash { Line 261  sub tie_domain_hash {
 sub untie_domain_hash {  sub untie_domain_hash {
     return &_locking_hash_untie(@_);      return &_locking_hash_untie(@_);
 }  }
 #  
 #   Ties a user's resource file to a hash.    =pod
 #   If necessary, an appropriate history  
 #   log file entry is made as well.  =out
 #   This sub factors out common code from the subs that manipulate  
 #   the various gdbm files that keep keyword value pairs.  =item tie_user_hash()
 # Parameters:  
 #   domain       - Name of the domain the user is in.    Ties a user's resource file to a hash.  
 #   user         - Name of the 'current user'.    If necessary, an appropriate history
 #   namespace    - Namespace representing the file to tie.    log file entry is made as well.
 #   how          - What the tie is done to (e.g. GDBM_WRCREAT().    This sub factors out common code from the subs that manipulate
 #   loghead      - Optional first part of log entry if there may be a    the various gdbm files that keep keyword value pairs.
 #                  history file.  Parameters:
 #   what         - Optional tail of log entry if there may be a history    domain       - Name of the domain the user is in.
 #                  file.    user         - Name of the 'current user'.
 # Returns:    namespace    - Namespace representing the file to tie.
 #   hash to which the database is tied.  It's up to the caller to untie.    how          - What the tie is done to (e.g. GDBM_WRCREAT().
 #   undef if the has could not be tied.    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 {  sub tie_user_hash {
     my ($domain,$user,$namespace,$how,$loghead,$what) = @_;      my ($domain,$user,$namespace,$how,$loghead,$what) = @_;
   
Line 234  sub untie_user_hash { Line 304  sub untie_user_hash {
     return &_locking_hash_untie(@_);      return &_locking_hash_untie(@_);
 }  }
   
 # routines if you just have a filename  =pod
 # return tied hashref or undef  
   =out
   
   =item locking_hash_tie()
   
   routines if you just have a filename
   return tied hashref or undef
   
   =back
   
   =cut
   
 sub locking_hash_tie {  sub locking_hash_tie {
     my ($filename,$how)=@_;      my ($filename,$how)=@_;
Line 409  BEGIN { Line 489  BEGIN {
   
 __END__  __END__
   
 =pod  
   
 =head1 NAME  
   
 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  

Removed from v.1.18  
changed lines
  Added in v.1.26


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.