[LON-CAPA-cvs] cvs: loncom /interface londocs.pm

albertel lon-capa-cvs-allow@mail.lon-capa.org
Sat, 14 Jul 2007 00:10:14 -0000


This is a MIME encoded message

--albertel1184371814
Content-Type: text/plain

albertel		Fri Jul 13 20:10:14 2007 EDT

  Modified files:              
    /loncom/interface	londocs.pm 
  Log:
  - trying to make the code cleaner
  
  
--albertel1184371814
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20070713201014.txt"

Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.291 loncom/interface/londocs.pm:1.292
--- loncom/interface/londocs.pm:1.291	Fri Jul 13 19:08:07 2007
+++ loncom/interface/londocs.pm	Fri Jul 13 20:10:13 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.291 2007/07/13 23:08:07 albertel Exp $
+# $Id: londocs.pm,v 1.292 2007/07/14 00:10:13 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1243,7 +1243,10 @@
 }
 
 sub do_paste_from_buffer {
-    my ($coursenum,$coursedom,$folder,$container) = @_;
+    my ($coursenum,$coursedom) = @_;
+
+    return 0 if (!$env{'form.pastemarked'});
+
 # paste resource to end of list
     my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url'});
     my $title=&LONCAPA::map::qtescape($env{'docs.markedcopy_title'});
@@ -1285,18 +1288,90 @@
     $LONCAPA::map::resources[$newidx]= 	$title.':'.$url.':'.$ext.':normal:res';
     push(@LONCAPA::map::order, $newidx);
 # Store the result
-    return &storemap($coursenum,$coursedom,$folder.'.'.$container);
+}
+
+my %parameter_type = ( 'randompick'     => 'int_pos',
+		       'hiddenresource' => 'string_yesno',
+		       'encrypturl'     => 'string_yesno',);
+my $valid_parameters_re = join('|',keys(%parameter_type));
+# set parameters
+sub update_parameter {
+
+    return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/);
+
+    my $which = $env{'form.changeparms'};
+    my $idx = $env{'form.setparms'};
+    if ($env{'form.'.$which.'_'.$idx}) {
+	my $value = ($which eq 'randompick') ? $env{'form.'.$which.'_'.$idx}
+	                                     : 'yes';
+	&Apache::lonnet::logthis("val $value");
+	&LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value,
+				      $parameter_type{$which});
+	&remember_parms($idx,$which,'set',$value);
+    } else {
+	&LONCAPA::map::delparameter($idx,'parameter_'.$which);
+	
+	&remember_parms($idx,$which,'del');
+    }
+    return 1;
+}
+
+
+sub handle_edit_cmd {
+    my ($coursenum,$coursedom) =@_;
+
+    my ($cmd,$idx)=split('_',$env{'form.cmd'});
+
+    my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
+    my ($title, $url, @rrest) = split(':', $ratstr);
+
+    if ($cmd eq 'del') {
+	if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
+	    ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
+	    &Apache::lonnet::removeuploadedurl($url);
+	} else {
+	    &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
+	}
+	splice(@LONCAPA::map::order, $idx, 1);
+
+    } elsif ($cmd eq 'cut') {
+	&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
+	splice(@LONCAPA::map::order, $idx, 1);
+
+    } elsif ($cmd eq 'up' 
+	     && ($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
+	@LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1];
+
+    } elsif ($cmd eq 'down'
+	     && defined($LONCAPA::map::order[$idx+1])) {
+	@LONCAPA::map::order[$idx+1,$idx] = @LONCAPA::map::order[$idx,$idx+1];
+
+    } elsif ($cmd eq 'rename') {
+
+	my $comment = &LONCAPA::map::qtunescape($env{'form.title'});
+	if ($comment=~/\S/) {
+	    $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
+		$comment.':'.join(':', $url, @rrest);
+	}
+# Devalidate title cache
+	my $renamed_url=&LONCAPA::map::qtescape($url);
+	&Apache::lonnet::devalidate_title_cache($renamed_url);
+    } else {
+	return 0;
+    }
+    return 1;
 }
 
 sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$which)=@_;
-    my $errtext='';
-    my $fatal=0;
-    my $container='sequence';
-    if ($env{'form.pagepath'}) {
-        $container='page';
-    }
-    ($errtext,$fatal) = &mapread($coursenum,$coursedom,$folder.'.'.$container);
+
+    my $container= ($env{'form.pagepath'}) ? 'page'
+		                           : 'sequence';
+
+    my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
+				    $folder.'.'.$container);
+    return $errtext if ($fatal);
+
     if ($#LONCAPA::map::order<1) {
 	my $idx=&LONCAPA::map::getresidx();
 	if ($idx<=0) { $idx=1; }
@@ -1304,235 +1379,109 @@
         $LONCAPA::map::resources[$idx]='';
     }
     
-    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder);
+    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=
+	&breadcrumbs($folder);
     $r->print($breadcrumbtrail);
-    if ($fatal) {
-	   $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-    } else {
+    
 # ------------------------------------------------------------ Process commands
 
 # ---------------- if they are for this folder and user allowed to make changes
-	if (($allowed) && ($env{'form.folder'} eq $folder)) {
+    if (($allowed) && ($env{'form.folder'} eq $folder)) {
 # set parameters and change order
-            &snapshotbefore();
-	    if ($env{'form.changeparms'}) {
-		my $idx=$env{'form.setparms'};
-# set parameters
-		if ($env{'form.changeparms'} eq 'randompick') {
-		    if ($env{'form.randpick_'.$idx}) {
-			&LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
-			&remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
-		    } else {
-			&LONCAPA::map::delparameter($idx,'parameter_randompick');
-			&remember_parms($idx,'randompick','del');
-		    }
-		}
-		if ($env{'form.changeparms'} eq 'hiddenresource') {
-		    if ($env{'form.hidprs_'.$idx}) {
-			&LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
-			&remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
-		    } else {
-			&LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
-			&remember_parms($idx,'hiddenresource','del');
-		    }
-		}
-		if ($env{'form.changeparms'} eq 'encrypturl') {
-		    if ($env{'form.encprs_'.$idx}) {
-			&LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
-			&remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
-		    } else {
-			&LONCAPA::map::delparameter($idx,'parameter_encrypturl');
-			&remember_parms($idx,'encrypturl','del');
-		    }
-		}
-# store the changed version
-		($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
-		if ($fatal) {
-		    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		    return;
-		}
-	    }
+	&snapshotbefore();
 
-	    if ($env{'form.newpos'}) {
+	if (&update_parameter()) {
+	    ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
+	    return $errtext if ($fatal);
+	}
+
+	if ($env{'form.newpos'} && $env{'form.currentpos'}) {
 # change order
-		my $newpos=$env{'form.newpos'}-1;
-		my $currentpos=$env{'form.currentpos'}-1;
-		my $i;
-		my @neworder=();
-		if ($newpos>$currentpos) {
-# moving stuff up
-		    for ($i=0;$i<$currentpos;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i];
-		    }
-		    for ($i=$currentpos;$i<$newpos;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i+1];
-		    }
-		    $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
-		    for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i];
-		    }
-		} else {
-# moving stuff down
-		    for ($i=0;$i<$newpos;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i];
-		    }
-		    $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
-		    for ($i=$newpos+1;$i<$currentpos+1;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i-1];
-		    }
-		    for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {
-			$neworder[$i]=$LONCAPA::map::order[$i];
-		    }
-		}
-		@LONCAPA::map::order=@neworder;
-# store the changed version
-		($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
-		if ($fatal) {
-		    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		    return;
-		}
-	    }
+	    my $res = splice(@LONCAPA::map::order,$env{'form.currentpos'}-1,1);
+	    splice(@LONCAPA::map::order,$env{'form.newpos'}-1,0,$res);
+
+	    ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
+	    return $errtext if ($fatal);
+	}
 	    
-	    if ($env{'form.pastemarked'}) {
-		my ($errtext,$fatal) =
-		    &do_paste_from_buffer($coursenum,$coursedom,$folder,
-					  $container);
-		if ($fatal) {
-		    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		    return;
+	if ($env{'form.pastemarked'}) {
+	    &do_paste_from_buffer($coursenum,$coursedom);
+	    ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container);
+	    return $errtext if ($fatal);
+	}
+
+	$r->print($upload_output);
+
+	if (&handle_edit_cmd()) {
+	    ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
+	    return $errtext if ($fatal);
+	}
+# Group import/search
+	if ($env{'form.importdetail'}) {
+	    my @imports;
+	    foreach (split(/\&/,$env{'form.importdetail'})) {
+		if (defined($_)) {
+		    my ($name,$url,$residx)=
+			map {&unescape($_)} split(/\=/,$_);
+		    push(@imports, [$name, $url, $residx]);
 		}
 	    }
-            $r->print($upload_output);
-	    if ($env{'form.cmd'}) {
-                my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});
-                if ($cmd eq 'del') {
-		    my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
-		    if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
-			($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
-			&Apache::lonnet::removeuploadedurl($url);
-		    } else {
-			&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
-		    }
-		    for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
-                        $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
-                    }
-                    $#LONCAPA::map::order--;
-                } elsif ($cmd eq 'cut') {
-		    my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
-		    &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
-		    for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
-                        $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
-                    }
-                    $#LONCAPA::map::order--;
-                } elsif ($cmd eq 'up') {
-		  if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
-                    my $i=$LONCAPA::map::order[$idx-1];
-                    $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];
-                    $LONCAPA::map::order[$idx] = $i;
-		   }
-                } elsif ($cmd eq 'down') {
-		   if (defined($LONCAPA::map::order[$idx+1])) {
-                    my $i=$LONCAPA::map::order[$idx+1];
-                    $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];
-                    $LONCAPA::map::order[$idx] = $i;
-		   }
-                } elsif ($cmd eq 'rename') {
-                    my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
-                    my ($rtitle,@rrest)=split(/\:/,
-                       $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
-                    my $comment=$env{'form.title'};
-                    $comment = &LONCAPA::map::qtunescape($comment);
-		    if ($comment=~/\S/) {
-			$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
-			    $comment.':'.join(':',@rrest);
-		    }
-# Devalidate title cache
-                    my $renamed_url=&LONCAPA::map::qtescape($rrest[0]);
-		    &Apache::lonnet::devalidate_title_cache($renamed_url);
-                }
-# Store the changed version
+	    ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,
+					    $container,'londocs',@imports);
+	    return $errtext if ($fatal);
+	}
+# Loading a complete map
+	if ($env{'form.loadmap'}) {
+	    if ($env{'form.importmap'}=~/\w/) {
+		foreach my $res (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
+		    my ($title,$url,$ext,$type)=split(/\:/,$res);
+		    my $idx=&LONCAPA::map::getresidx($url);
+		    $LONCAPA::map::resources[$idx]=$res;
+		    $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
+		}
 		($errtext,$fatal)=&storemap($coursenum,$coursedom,
 					    $folder.'.'.$container);
-		if ($fatal) {
-		    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		    return;
-		}
-            }
-# Group import/search
-	    if ($env{'form.importdetail'}) {
-		my @imports;
-		foreach (split(/\&/,$env{'form.importdetail'})) {
-		    if (defined($_)) {
-			my ($name,$url,$residx)=
-			    map {&unescape($_)} split(/\=/,$_);
-			push(@imports, [$name, $url, $residx]);
-		    }
-		}
-# Store the changed version
-		($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,
-					       $container,'londocs',@imports);
-		if ($fatal) {
-		    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		    return;
-		}
-            }
-# Loading a complete map
-	   if ($env{'form.loadmap'}) {
-               if ($env{'form.importmap'}=~/\w/) {
-	          foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
-		      my ($title,$url,$ext,$type)=split(/\:/,$_);
-                      my $idx=&LONCAPA::map::getresidx($url);
-                      $LONCAPA::map::resources[$idx]=$_;
-                      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
-	          }
-# Store the changed version
-  	          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
-					   $folder.'.'.$container);
-	          if ($fatal) {
-		      $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');
-		      return;
-	          }
-               } else {
-		    $r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');
-
-               }
-           }
-           &log_differences($plain);
+		return $errtext if ($fatal);
+	    } else {
+		$r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');
+		
+	    }
 	}
+	&log_differences($plain);
+    }
 # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen
-        my $idx=0;
-	my $shown=0;
-        if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
-           $r->print('<p>'.&mt('Parameters').':<ul>'.
-                     ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
-                     ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
-                     ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
-                     '</ul></p>');
-        }                                                                                                     
-        if ($randompick>=0) {
-           $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');
-        }
-        $r->print('<table class="LC_docs_editor">');
-        foreach my $res (@LONCAPA::map::order) {
-           my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
-	   $name=&LONCAPA::map::qtescape($name);
-	   $url=&LONCAPA::map::qtescape($url);
-           unless ($name) {  $name=(split(/\//,$url))[-1]; }
-           unless ($name) { $idx++; next; }
-           $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,
-				$coursenum));
-           $idx++;
-	   $shown++;
-        }
-	unless ($shown) {
-	    $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');
-	}
-        $r->print("\n</table>\n");
-
-	&print_paste_buffer($r,$container);
-
+    my $idx=0;
+    my $shown=0;
+    if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
+	$r->print('<p>'.&mt('Parameters').':<ul>'.
+		  ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
+		  ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
+		  ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
+		  '</ul></p>');
+    }                                                                                                     
+    if ($randompick>=0) {
+	$r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');
+    }
+    $r->print('<table class="LC_docs_editor">');
+    foreach my $res (@LONCAPA::map::order) {
+	my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
+	$name=&LONCAPA::map::qtescape($name);
+	$url=&LONCAPA::map::qtescape($url);
+	unless ($name) {  $name=(split(/\//,$url))[-1]; }
+	unless ($name) { $idx++; next; }
+	$r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,
+			     $coursenum));
+	$idx++;
+	$shown++;
+    }
+    unless ($shown) {
+	$r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');
     }
+    $r->print("\n</table>\n");
+    
+    &print_paste_buffer($r,$container);
+    return;
 }
 
 sub process_file_upload {
@@ -1951,7 +1900,7 @@
                                               'parameter_encrypturl'))[0]=~/^yes$/i);
 	$url.='folderpath='.&escape($folderpath).$cpinfo;
 	$parameterset='<label>'.&mt('Randomly Pick: ').
-	    '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'.
+	    '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randompick_'.$orderidx.'" value="'.
 	    (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].
                                               '" />'.
@@ -2000,12 +1949,12 @@
 	$line.=(<<ENDPARMS);
   <td class="LC_docs_entry_parameter">
     $form_start
-    <label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>
+    <label><input type="checkbox" name="hiddenresource_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>
     $form_end
   </td>
   <td class="LC_docs_entry_parameter">
     $form_start
-    <label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>
+    <label><input type="checkbox" name="encrypturl_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>
     $form_end
   </td>
   <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td>
@@ -2801,7 +2750,11 @@
            #$postexec='self.close();';
        }
        $hadchanges=0;
-       &editor($r,$coursenum,$coursedom,$folder,$allowed,$upload_output);
+       my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,
+			   $upload_output);
+       if ($error) {
+	   $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+       }
        if ($hadchanges) {
 	   &mark_hash_old()
        }
@@ -3039,7 +2992,10 @@
 	   $env{'form.folderpath'}='supplemental&'.
 	       &escape(&mt('Supplemental '.$type.' Documents'));
        }
-       &editor($r,$coursenum,$coursedom,$folder,$allowed);
+       my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed);
+       if ($error) {
+	   $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+       }
        if ($allowed) {
 	   my $folderseq=
 	       '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.

--albertel1184371814--