--- loncom/interface/londocs.pm	2005/08/30 15:41:32	1.203
+++ loncom/interface/londocs.pm	2005/12/22 20:23:39	1.215
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.203 2005/08/30 15:41:32 raeburn Exp $
+# $Id: londocs.pm,v 1.215 2005/12/22 20:23:39 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -155,9 +155,7 @@ sub dumpcourse {
 	my ($ca,$cd)=split(/\@/,$env{'form.authorspace'});
 	$r->print('<h3>'.&mt('Copying Files').'</h3>');
 	my $title=$env{'form.authorfolder'};
-	my ($ext)=($title=~s/\.(\w+)$//);
 	$title=&clean($title);
-	$title.='.'.$ext;
 	my %replacehash=();
 	foreach (keys %env) {
 	    if ($_=~/^form\.namefor\_(.+)/) {
@@ -168,7 +166,10 @@ sub dumpcourse {
 	$crs=~s/\_/\//g;
 	foreach (keys %replacehash) {
 	    my $newfilename=$title.'/'.$replacehash{$_};
+	    $newfilename=~s/\.(\w+)$//;
+	    my $ext=$1;
 	    $newfilename=&clean($newfilename);
+	    $newfilename.='.'.$ext;
 	    my @dirs=split(/\//,$newfilename);
 	    my $path='/home/'.$ca.'/public_html';
 	    my $makepath=$path;
@@ -253,7 +254,7 @@ sub dumpcourse {
 sub exportbutton {
     return '</td><td bgcolor="#DDDDCC">'.
             '<input type="submit" name="exportcourse" value="'.
-            &mt('Export Course to IMS').'" />';
+            &mt('Export Course to IMS').'" />'.
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
 }
 
@@ -1113,7 +1114,7 @@ sub editor {
                 if ($cmd eq 'del') {
 		    my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
 		    if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
-			($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library)$/)) {
+			($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
 			&Apache::lonnet::removeuploadedurl($url);
 		    } else {
 			&Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
@@ -1214,6 +1215,8 @@ sub editor {
         $r->print('<table>');
         foreach (@Apache::lonratedt::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
+	   $name=&Apache::lonratsrv::qtescape($name);
+	   $url=&Apache::lonratsrv::qtescape($url);
            unless ($name) {  $name=(split(/\//,$url))[-1]; }
            unless ($name) { $idx++; next; }
            $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
@@ -1450,7 +1453,24 @@ sub entryline {
                 'ct' => 'Cut',
 		'rn' => 'Rename',
 		'cp' => 'Copy');
+	my $nocopy=0;
+        if ($url=~/\.(page|sequence)$/) {
+	    foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {
+		my ($title,$url,$ext,$type)=split(/\:/,$_);
+		if (($url=~/\.(page|sequence)/) && ($type ne 'zombie')) {
+		    $nocopy=1;
+		    last;
+		}
+	    }
+	}
+        my $copylink='&nbsp;';
         if ($env{'form.pagepath'}) {
+           unless ($nocopy) {
+               $copylink=(<<ENDCOPY);
+<a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'>
+<font size="-2" color="#000099">$lt{'cp'}</font></a></td>
+ENDCOPY
+            }
             $line.=(<<END);
 <form name="entry_$index" action="/adm/coursedocs" method="post">
 <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" />
@@ -1474,10 +1494,15 @@ sub entryline {
 <font size="-2" color="#550044">$lt{'ct'}</font></a>
 <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'>
 <font size="-2" color="#009900">$lt{'rn'}</font></a>
-<a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'>
-<font size="-2" color="#000099">$lt{'cp'}</font></a></td>
+$copylink
 END
         } else {
+           unless ($nocopy) {
+               $copylink=(<<ENDCOPY);
+<a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'>
+<font size="-2" color="#000099">$lt{'cp'}</font></a></td>
+ENDCOPY
+            }
             $line.=(<<END); 
 <form name="entry_$index" action="/adm/coursedocs" method="post">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
@@ -1500,8 +1525,7 @@ END
 <font size="-2" color="#550044">$lt{'ct'}</font></a>
 <a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'>
 <font size="-2" color="#009900">$lt{'rn'}</font></a>
-<a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'>
-<font size="-2" color="#000099">$lt{'cp'}</font></a></td>
+$copylink
 END
         }
     }
@@ -1531,7 +1555,7 @@ END
 	    &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);
 	}
     }
-    $url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//;
+    $url=~s-^http(\&colon\;|:)//-/adm/wrapper/ext/-;
     if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
 	my $symb=&Apache::lonnet::symbclean(
           &Apache::lonnet::declutter('uploaded/'.
@@ -1598,7 +1622,7 @@ END
     }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.
 	'" border="0"></a></td>'.
-        "<td bgcolor='#FFFFBB'><a href='$url'>$title</a></td>";
+        "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>";
     if (($allowed) && ($folder!~/^supplemental/)) {
  	my %lt=&Apache::lonlocal::texthash(
  			      'hd' => 'Hidden',
@@ -1718,6 +1742,24 @@ sub checkonthis {
 
 
 #
+# ----------------------------------------------------------------- List Symbs
+# 
+sub list_symbs {
+   my $r=shift; 
+   my $html=&Apache::lonxml::xmlbegin();
+   $r->print($html.'<head><title>Symb List</title></head>'.
+              &Apache::loncommon::bodytag('Symb List'));
+   my $navmap = Apache::lonnavmaps::navmap->new();
+   $r->print("<pre>\n");
+   foreach my $res ($navmap->retrieveResources()) {
+       $r->print($res->compTitle()."\t".$res->symb()."\n");
+   }
+   $r->print("\n</pre>\n");
+   $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');
+}
+
+
+#
 # -------------------------------------------------------------- Verify Content
 # 
 sub verifycontent {
@@ -2061,14 +2103,14 @@ sub handler {
     return OK if $r->header_only;
 
 # --------------------------------------------- Initialize help topics for this
-  foreach ('Adding_Course_Doc','Main_Course_Documents',
-           'Adding_External_Resource','Navigate_Content',
-           'Adding_Folders','Docs_Overview', 'Load_Map',
-           'Supplemental','Score_Upload_Form','Adding_Pages',
-           'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
-	   'Check_Resource_Versions','Verify_Content') {
-      $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
-  }
+    foreach ('Adding_Course_Doc','Main_Course_Documents',
+	     'Adding_External_Resource','Navigate_Content',
+	     'Adding_Folders','Docs_Overview', 'Load_Map',
+	     'Supplemental','Score_Upload_Form','Adding_Pages',
+	     'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
+	     'Check_Resource_Versions','Verify_Content') {
+	$help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
+    }
     # Composite help files
     $help{'Syllabus'} = &Apache::loncommon::help_open_topic(
 		    'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
@@ -2082,13 +2124,18 @@ sub handler {
 		  'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
     $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
 
-  if ($env{'form.verify'}) {
+# does this user have privileges to modify docs
+    my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
+
+  if ($allowed && $env{'form.verify'}) {
       &verifycontent($r);
-  } elsif ($env{'form.versions'}) {
+  } elsif ($allowed && $env{'form.listsymbs'}) {
+      &list_symbs($r);
+  } elsif ($allowed && $env{'form.versions'}) {
       &checkversions($r);
-  } elsif ($env{'form.dumpcourse'}) {
+  } elsif ($allowed && $env{'form.dumpcourse'}) {
       &dumpcourse($r);
-  } elsif ($env{'form.exportcourse'}) {
+  } elsif ($allowed && $env{'form.exportcourse'}) {
       &exportcourse($r);
   } else {
 # is this a standard course?
@@ -2097,7 +2144,6 @@ sub handler {
     my $forcestandard = 0;
     my $forcesupplement;
     my $script='';
-    my $allowed;
     my $events='';
     my $showdoc=0;
     my $containertag;
@@ -2123,13 +2169,11 @@ sub handler {
     }
     unless ($showdoc) { # got called from remote
        if (($env{'form.folder'}=~/^default_/) || 
-          ($env{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) {
+          ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
            $forcestandard = 1;
        } 
        $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
 
-# does this user have privileges to post, etc?
-       $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
        if ($allowed) { 
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple'); 
@@ -2451,6 +2495,7 @@ ENDNEWSCRIPT
        my %lt=&Apache::lonlocal::texthash(
 					 'vc' => 'Verify Content',
 					 'cv' => 'Check/Set Resource Versions',
+					 'ls' => 'List Symbs',
 					  );
 
        my $folderpath=$env{'form.folderpath'};
@@ -2485,7 +2530,9 @@ $uploadtag
     <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}
 $dumpbut
 $exportbut
-</td></tr></table>
+</td><!-- <td bgcolor="#DDDDCC">
+    <input type="submit" name="listsymbs" value="$lt{'ls'}" />
+</td>--></tr></table>
 </form>
 ENDCOURSEVERIFY
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
@@ -2587,7 +2634,7 @@ $uploadtag
 value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
 </nobr>
 </form>
-<form action="/adm/imsimportdocs" method="post" name="ims">
+<br /><form action="/adm/imsimportdocs" method="post" name="ims">
 <input type="hidden" name="folder" value="$folder" />
 <input name="imsimport" type="button" value="$lt{'imsf'}" onClick="javascript:makeims();" />
 </nobr>
@@ -2597,7 +2644,7 @@ ENDFORM
        $r->print('</td><td bgcolor="#DDDDDD">');
        unless ($env{'form.pagepath'}) {
            $r->print(<<ENDFORM);
-<form action="/adm/coursedocs" method="post" name="newfolder">
+<br /><form action="/adm/coursedocs" method="post" name="newfolder">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2606,7 +2653,7 @@ onClick="javascript:makenewfolder(this.f
 value="$lt{'newf'}" />$help{'Adding_Folders'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newpage">
+<br /><form action="/adm/coursedocs" method="post" name="newpage">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2615,7 +2662,7 @@ onClick="javascript:makenewpage(this.for
 value="$lt{'newp'}" />$help{'Adding_Pages'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newsyl">
+<br /><form action="/adm/coursedocs" method="post" name="newsyl">
 $uploadtag
 <input type=hidden name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">
@@ -2624,7 +2671,7 @@ value="Syllabus=/public/$coursedom/$cour
  $help{'Syllabus'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newnav">
+<br /><form action="/adm/coursedocs" method="post" name="newnav">
 $uploadtag
 <input type=hidden name="importdetail" 
 value="Navigate Content=/adm/navmaps">
@@ -2633,7 +2680,7 @@ value="Navigate Content=/adm/navmaps">
 $help{'Navigate_Content'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newsmppg">
+<br /><form action="/adm/coursedocs" method="post" name="newsmppg">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2641,7 +2688,7 @@ $uploadtag
 onClick="javascript:makesmppage();" /> $help{'Simple Page'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newsmpproblem">
+<br /><form action="/adm/coursedocs" method="post" name="newsmpproblem">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2649,7 +2696,7 @@ $uploadtag
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newexamupload">
+<br /><form action="/adm/coursedocs" method="post" name="newexamupload">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2658,7 +2705,7 @@ onClick="javascript:makeexamupload();" /
 $help{'Score_Upload_Form'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newbul">
+<br /><form action="/adm/coursedocs" method="post" name="newbul">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2667,7 +2714,7 @@ onClick="javascript:makebulboard();" />
 $help{'Bulletin Board'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newaboutme">
+<br /><form action="/adm/coursedocs" method="post" name="newaboutme">
 $uploadtag
 <input type=hidden name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">
@@ -2676,7 +2723,7 @@ value="$plainname=/adm/$udom/$uname/abou
 $help{'My Personal Info'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newaboutsomeone">
+<br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2696,7 +2743,7 @@ $uploadtag
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="newexamupload">
+<br /><form action="/adm/coursedocs" method="post" name="newexamupload">
 $uploadtag
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2769,7 +2816,7 @@ onClick="javascript:makenewfolder(this.f
 value="$lt{'newf'}" /> $help{'Adding_Folders'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="supnewext">
+<br /><form action="/adm/coursedocs" method="post" name="supnewext">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">
 <nobr>
@@ -2778,7 +2825,7 @@ onClick="javascript:makenewext('supnewex
 value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="supnewsyl">
+<br /><form action="/adm/coursedocs" method="post" name="supnewsyl">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">
@@ -2787,7 +2834,7 @@ value="Syllabus=/public/$coursedom/$cour
 $help{'Syllabus'}
 </nobr>
 </form>
-<form action="/adm/coursedocs" method="post" name="subnewaboutme">
+<br /><form action="/adm/coursedocs" method="post" name="subnewaboutme">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">