Diff for /rat/lonsequence.pm between versions 1.28 and 1.43

version 1.28, 2006/11/02 21:15:22 version 1.43, 2012/12/19 05:21:13
Line 27 Line 27
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
   
   
   
 package Apache::lonsequence;  package Apache::lonsequence;
   
 use strict;  use strict;
Line 34  use Apache::lonnet; Line 36  use Apache::lonnet;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use GDBM_File;  use GDBM_File;
 use LONCAPA::map();  use LONCAPA::map();
 use Apache::lonratsrv();  use LONCAPA;
 use Apache::lonpageflip();  use Apache::lonpageflip();
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::groupsort();
 use Apache::lonlocal;  use Apache::lonlocal;
   use HTML::Entities();
   
 my %selhash;  my %selhash;
 my $successtied;  my $successtied;
Line 45  my $successtied; Line 49  my $successtied;
 # ----------------------------------------- Attempt to read from resource space  # ----------------------------------------- Attempt to read from resource space
   
 sub attemptread {  sub attemptread {
     my $fn=shift;      my ($fn,$unsorted)=@_;
     &Apache::lonnet::repcopy($fn);      &Apache::lonnet::repcopy($fn);
     if (-e $fn) {      if (-e $fn) {
  return &LONCAPA::map::attemptread($fn);   return &LONCAPA::map::attemptread($fn,$unsorted);
     } else {      } else {
         return ();          return ();
     }      }
Line 99  ENDSCRIPT Line 103  ENDSCRIPT
       '<h1>'.$url.'</h1>');        '<h1>'.$url.'</h1>');
 # ------------------ This is trying to select. Provide buttons and tie %selhash  # ------------------ This is trying to select. Provide buttons and tie %selhash
     if ($env{'form.forceselect'}) { $r->print(<<ENDSELECT);      if ($env{'form.forceselect'}) { $r->print(<<ENDSELECT);
 <form name=fileattr><input type=hidden name=acts value=''>  <form name="fileattr"><input type="hidden" name="acts" value="" />
 <input type="button" name="close" value='CLOSE' onClick="self.close()">  <input type="button" name="close" value="CLOSE" onClick="self.close()" />
 <input type="button" name="groupimport" value='GROUP IMPORT'  <input type="button" name="groupimport" value="GROUP IMPORT"
 onClick="javascript:select_group()">  onClick="javascript:select_group()" />
 </form>     </form>   
 ENDSELECT  ENDSELECT
     my $diropendb =       my $diropendb = 
     "/home/httpd/perl/tmp/$env{'user.domain'}\_$env{'user.name'}_sel_res.db";    LONCAPA::tempdir() .
       "$env{'user.domain'}\_$env{'user.name'}_sel_res.db";
         if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {          if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
     if ($env{'form.launch'} eq '1') {      if ($env{'form.launch'} eq '1') {
        &start_fresh_session();         &start_fresh_session();
Line 114  ENDSELECT Line 119  ENDSELECT
             $successtied=1;              $successtied=1;
   
 # - Evaluate actions from previous page (both cumulatively and chronologically)  # - Evaluate actions from previous page (both cumulatively and chronologically)
         if ($env{'form.catalogmode'} eq 'import') {      if ($env{'form.catalogmode'} eq 'import') {
     my $acts=$env{'form.acts'};   &Apache::groupsort::update_actions_hash(\%selhash);
     my @Acts=split(/b/,$acts);  
     my %ahash;  
     my %achash;  
     my $ac=0;  
     # some initial hashes for working with data  
     foreach (@Acts) {  
  my ($state,$ref)=split(/a/);  
  $ahash{$ref}=$state;  
  $achash{$ref}=$ac;  
  $ac++;  
     }      }
     # sorting through the actions and changing the tied database hash  
     foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {  
  my $key=$_;  
  if ($ahash{$key} eq '1') {  
     $selhash{'store_'.$selhash{'pre_'.$key.'_link'}}=  
  $selhash{'pre_'.$key.'_title'};  
     $selhash{'storectr_'.$selhash{'pre_'.$key.'_link'}}=  
  $selhash{'storectr'}+0;  
     $selhash{'storectr'}++;  
  }  
  if ($ahash{$key} eq '0') {  
     if ($selhash{'store_'.$selhash{'pre_'.$key.'_link'}}) {  
        delete $selhash{'store_'.$selhash{'pre_'.$key.'_link'}};  
     }  
  }  
     }  
     # deleting the previously cached listing  
     foreach (keys %selhash) {  
  if ($_ =~ /^pre_/ && $_ =~/link$/) {  
     my $key = $_;  
     $key =~ s/^pre_//;  
     $key =~ s/_[^_]*$//;  
     delete $selhash{'pre_'.$key.'_title'};  
     delete $selhash{'pre_'.$key.'_link'};  
  }  
     }  
  }  
 # -  # -
         }          }
     }      }
 # ----------------------------- successtied is now '1' if in working selectmode  # ----------------------------- successtied is now '1' if in working selectmode
     my ($errtext,$fatal)=&mapread(&Apache::lonnet::filelocation('',$url),'');      my ($errtext,$fatal)=&mapread(&Apache::lonnet::filelocation('',$url),'');
     if ($fatal==1) {      if ($fatal==1) {
        $r->print('<p><b><font color="red">'.&mt('Map contents are not shown in order.').'</font></b></p><br />');         $r->print('<p class="LC_warning">'
                   .&mt('Map contents are not shown in order.')
                   .'</p><br />');
     }      }
     my $idx=0;      my $idx=0;
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
Line 170  ENDSELECT Line 140  ENDSELECT
  $r->print('<form name="form'.$idx.'">');   $r->print('<form name="form'.$idx.'">');
             }              }
     my ($title,$url)=split(/\:/,$_);      my ($title,$url)=split(/\:/,$_);
             $title=~s/\&colon\;/\:/g;      $title = &LONCAPA::map::qtescape($title);
             $url=~s/\&colon\;/\:/g;      unless ($title) { $title=(split(/\//,$url))[-1] };
             unless ($title) { $title=(split(/\//,$url))[-1] };              my $enc_title = &HTML::Entities::encode($title,'\'"<>&');
             unless ($title) { $title='<i>'.&mt('Empty').'</i>'; }      unless ($title) {
    $title='<i>'.&mt('Empty').'</i>';
    $enc_title = &mt('Empty');
       }
       $url  = &LONCAPA::map::qtescape($url);
               my $enc_url = &HTML::Entities::encode($url,'\'"<>&');
             if ($url) {              if ($url) {
  if ($successtied) {   if ($successtied) {
     my $checked='';      my $checked='';
            if ($selhash{'store_'.$url}) {             if ($selhash{'store_'.$url}) {
             $checked=" checked";              $checked=' checked="checked"';
            }             }
            $selhash{"pre_${idx}_link"}=$url;             $selhash{"pre_${idx}_link"}=$url;
            $selhash{"pre_${idx}_title"}=$title;             $selhash{"pre_${idx}_title"}=$title;
       
       $url  = &HTML::Entities::encode($url, '\'"<>&');
     $r->print(<<ENDCHECKBOX);      $r->print(<<ENDCHECKBOX);
 <input type='checkbox' name='filelink'   <input type='checkbox' name='filelink' 
 value='$url' onClick='javascript:queue("form$idx")'$checked>  value='$enc_url' onClick='javascript:queue("form$idx")'$checked />
 <input type='hidden' name='title' value='$title'>  <input type='hidden' name='title' value='$enc_title' />
 ENDCHECKBOX  ENDCHECKBOX
                 }                  }
  $r->print('<a href="'.&Apache::lonratsrv::qtescape($url).'">');   $r->print('<a href="'.$enc_url.'">');
             }              }
             $r->print(&Apache::lonratsrv::qtescape($title));              $r->print($enc_title);
             if ($url) { $r->print('</a>'); }              if ($url) { $r->print('</a>'); }
             if ($successtied) {              if ($successtied) {
  $r->print('</form>');   $r->print('</form>');
             } else {              } else {
  $r->print('<br>');   $r->print('<br />');
             }              }
         }          }
     }      }
Line 243  sub handler { Line 219  sub handler {
   my $dismapid='';    my $dismapid='';
   my $exitdisid = '';    my $exitdisid = '';
   my $arrow_dir = '';    my $arrow_dir = '';
     my $is_encrypted = '';
   
   if (($env{'request.course.fn'}) && (!$env{'form.forceselect'})) {    if (($env{'request.course.fn'}) && (!$env{'form.forceselect'})) {
        my $last;         my $last;
Line 273  sub handler { Line 250  sub handler {
        if (!$env{'request.role.adv'}) {         if (!$env{'request.role.adv'}) {
    $randomout = $bighash{'randomout_'.$disid};     $randomout = $bighash{'randomout_'.$disid};
        }         }
                  if (!$env{'request.role.adv'}) {
                      $is_encrypted = $bighash{'encrypted_'.$disid};
                  }
            } elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',             } elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
                     &GDBM_READER(),0640)) {                      &GDBM_READER(),0640)) {
                $last=$hash{'last_known'};                 $last=$hash{'last_known'};
Line 292  sub handler { Line 272  sub handler {
    if (!$env{'request.role.adv'}) {     if (!$env{'request.role.adv'}) {
        $randomout = $bighash{'randomout_'.$disid};         $randomout = $bighash{'randomout_'.$disid};
    }     }
                      if (!$env{'request.role.adv'}) {
                          $is_encrypted = $bighash{'encrypted_'.$disid};
                      }
                }                 }
     }      }
            $exitdisid = $disid;             $exitdisid = $disid;
Line 305  sub handler { Line 288  sub handler {
 # now either disurl is set (going to first page), or we need another display  # now either disurl is set (going to first page), or we need another display
    if ($disurl) {     if ($disurl) {
 # -------------------------------------------------- Has first or last resource  # -------------------------------------------------- Has first or last resource
         my $showdisurl = $disurl;
         if ($is_encrypted) {
             $showdisurl = &Apache::lonenc::encrypted($disurl);
         }
       &Apache::lonnet::symblist($requrl,$disurl => [$disurl,$dismapid],        &Apache::lonnet::symblist($requrl,$disurl => [$disurl,$dismapid],
  'last_known' => [$disurl,$dismapid]);    'last_known' => [$disurl,$dismapid]); 
       &Apache::loncommon::content_type($r,'text/html');        &Apache::loncommon::content_type($r,'text/html');
       $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);        $r->header_out(Location => &Apache::lonnet::absolute_url($ENV{'SERVER_NAME'}).
                                    $showdisurl);
       return REDIRECT;        return REDIRECT;
    } else {     } else {
        &Apache::loncommon::content_type($r,'text/html');         &Apache::loncommon::content_type($r,'text/html');
        $r->send_http_header;         $r->send_http_header;
        if ($exitdisid eq '' && $arrow_dir ne '') {         if ($exitdisid eq '' && $arrow_dir ne '') {
            my %lt =&Apache::lonlocal::texthash(             my %lt =&Apache::lonlocal::texthash(
                    'back' => 'beginning',  
                    'forward' => 'end',  
                    'nere' => 'Next resource could not be displayed',                     'nere' => 'Next resource could not be displayed',
                    'goba' => 'Go Back',                     'goba' => 'Go Back',
                    'nacc' => 'Navigate Course Content',                     'nacc' => 'Navigate Course Content',
                           );                            );
            my $warnmsg = &mt('As all folders and sequences ');             my $warnmsg;
            if ($arrow_dir eq 'forward') {             if ($arrow_dir eq 'forward') {
                $warnmsg .= &mt('following the current resource were empty').',';                 $warnmsg = &mt('As all folders and sequences '
                                .'following the current resource were empty, '
                                .'you have now reached the end of the course.');
            } elsif ($arrow_dir eq 'back') {             } elsif ($arrow_dir eq 'back') {
                $warnmsg .= &mt('preceding the current resource were empty').',';                 $warnmsg = &mt('As all folders and sequences '
                                .'preceding the current resource were empty, '
                                .'you have now reached the beginning of the course.');
            }             }
            $warnmsg .= &mt('you have now reached the').' '.$lt{$arrow_dir}.' '.&mt('of the course.');  
            my $start_page=             my $start_page=
        &Apache::loncommon::start_page('Empty Folder/Sequence');         &Apache::loncommon::start_page('Empty Folder/Sequence');
            my $end_page=             my $end_page=
Line 352  ENDNONE Line 341  ENDNONE
 1;  1;
 __END__  __END__
   
   =head1 NAME
   
   Apache::lonsequence
   
   =head1 SYNOPSIS
   
   Handler for showing sequence objects of
   educational resources.
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 SUBROUTINES
   
   =over
   
   =item handler()
   
   =item viewmap()
   
   =item attemptread()
   
   =item mapread()
   
   =item start_fresh_session()
   
   =back
   
   =cut
   
   
   

Removed from v.1.28  
changed lines
  Added in v.1.43


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>