--- loncom/interface/londocs.pm	2008/12/15 06:09:37	1.322
+++ loncom/interface/londocs.pm	2009/09/24 22:15:27	1.325.4.2
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.322 2008/12/15 06:09:37 raeburn Exp $
+# $Id: londocs.pm,v 1.325.4.2 2009/09/24 22:15:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -44,6 +44,7 @@ use HTML::Entities;
 use GDBM_File;
 use Apache::lonlocal;
 use Cwd;
+use Apache::londocsgci();
 use LONCAPA qw(:DEFAULT :match);
 
 my $iconpath;
@@ -280,6 +281,15 @@ sub exportcourse {
                                                $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
     my $numdisc = keys(%discussiontime);
     my $navmap = Apache::lonnavmaps::navmap->new();
+    if (!defined($navmap)) {
+        $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package').
+                  '<h2>IMS Export Failed</h2>'.
+                  '<div class="LC_error">'.
+                  &mt('Unable to retrieve information about course contents').
+                  '</div><a href="/adm/coursedocs">'.&mt('Return to Course Editor').'</a>');
+        &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+        return;
+    }
     my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
     my $curRes;
     my $outcome;
@@ -392,10 +402,10 @@ sub exportcourse {
                     $display .= '<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" /><img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" />'."\n";
                 }
                 if ($curRes->is_sequence()) {
-                    $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif">&nbsp;'."\n";
+                    $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";
                     $lastcontainer = $count + $startcount + $boards;
                 } elsif ($curRes->is_page()) {
-                    $display .= '<img src="/adm/lonIcons/navmap.page.open.gif">&nbsp;'."\n";
+                    $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";
                     $lastcontainer = $count + $startcount + $boards;
                 }
                 my $currelem = $count+$boards+$startcount;
@@ -469,10 +479,9 @@ function containerCheck(item) {
 						 $scripttag));
 	$r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package'));
 	$r->print($display.'</table>'.
-                  '<p><input type="hidden" name="finishexport" value="1">'.
+                  '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.
-                  &mt('Export '.$type.' DOCS').'" /></p></form>'.
-		  &Apache::loncommon::end_page());
+                  &mt('Export '.$type.' DOCS').'" /></p></form>');
     }
 }
 
@@ -1219,7 +1228,7 @@ sub update_paste_buffer {
         &Apache::lonnet::appenv({'docs.markedcopy_supplemental' => $title});
 	($title) = &parse_supplemental_title($title);
     } elsif ($env{'docs.markedcopy_supplemental'}) {
-        &Apache::lonnet::delenv('docs\\.markedcopy_supplemental');
+        &Apache::lonnet::delenv('docs.markedcopy_supplemental');
     }
     $url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
 
@@ -1280,7 +1289,7 @@ sub do_paste_from_buffer {
 # Maps need to be copied first
     if (($url=~/\.(page|sequence)$/) && ($url=~/^\/uploaded\//)) {
 	$title=&mt('Copy of').' '.$title;
-	my $newid=$$.time;
+	my $newid=$$.int(rand(100)).time;
 	my ($oldid,$ext) = ($url=~/^(.+)\.(\w+)$/);
         if ($oldid =~ m{^(/uploaded/\Q$coursedom\E/\Q$coursenum\E/)(\D+)(\d+)$}) {
             my $path = $1;
@@ -1323,7 +1332,7 @@ sub do_paste_from_buffer {
     }
 # published maps can only exists once, so remove it from paste buffer when done
     if (($url=~/\.(page|sequence)$/) && ($url=~m {^/res/})) {
-	&Apache::lonnet::delenv('docs\\.markedcopy');
+	&Apache::lonnet::delenv('docs.markedcopy');
     }
     if ($url=~ m{/smppg$}) {
 	my $db_name = &Apache::lonsimplepage::get_db_name($url);
@@ -1771,7 +1780,7 @@ sub entryline {
 		'<select name="newpos" onChange="this.form.submit()">';
 	    for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
 		if ($i==$incindex) {
-		    $selectbox.='<option value="" selected="1">('.$i.')</option>';
+		    $selectbox.='<option value="" selected="selected">('.$i.')</option>';
 		} else {
 		    $selectbox.='<option value="'.$i.'">'.$i.'</option>';
 		}
@@ -1895,6 +1904,7 @@ END
     }
     
     my $orig_url = $url;
+    $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
     my $external = ($url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/});
     if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
 	my $symb=&Apache::lonnet::symbclean(
@@ -1995,9 +2005,9 @@ END
  			      'hd' => 'Hidden',
  			      'ec' => 'URL hidden');
 	my $enctext=
-	    ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
+	    ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="checked"':'');
 	my $hidtext=
-	    ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
+	    ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="checked"':'');
 	$line.=(<<ENDPARMS);
   <td class="LC_docs_entry_parameter">
     $form_start
@@ -2089,7 +2099,7 @@ sub checkonthis {
                  if (($errorcount) ||
                      ($warningcount)) {
 		     if ($errorcount) {
-                        $r->print('<img src="/adm/lonMisc/bomb.gif" /><span class="LC_error">'.
+                        $r->print('<img src="/adm/lonMisc/bomb.gif" alt="" /><span class="LC_error">'.
                           &mt('[quant,_1,error]',$errorcount).'</span>');
                      }
 		     if ($warningcount) {
@@ -2114,7 +2124,7 @@ sub checkonthis {
 	      unless ($url=~/\$/) {
 		  $r->print('<span class="LC_error">'.&mt('not found').'</b></span>');
 	      } else {
-		  $r->print('<span class="LC_unknown">'.&mt('unable to verify variable URL').'</span>');
+		  $r->print('<span class="LC_error">'.&mt('unable to verify variable URL').'</span>');
 	      }
           } else {
              $r->print('<span class="LC_error">'.&mt('access denied').'</span>');
@@ -2136,19 +2146,27 @@ List Symbs
 sub list_symbs {
     my ($r) = @_;
 
+    my $type = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Symb List'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('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");
+    if (!defined($navmap)) {
+        $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.
+                  '<div class="LC_error">'.
+                  &mt('Unable to retrieve information about course contents').
+                  '</div>');
+        &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+    } else {
+        $r->print("<pre>\n");
+        foreach my $res ($navmap->retrieveResources()) {
+	    $r->print($res->compTitle()."\t".$res->symb()."\n");
+        }
+        $r->print("\n</pre>\n");
     }
-    $r->print("\n</pre>\n");
     $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');
 }
 
 
-
 sub verifycontent {
     my ($r) = @_;
     my $type = &Apache::loncommon::course_type();
@@ -2506,6 +2524,15 @@ sub handler {
     return OK if $r->header_only;
     my $type = &Apache::loncommon::course_type();
 
+    my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
+    if ($coursedom eq 'gcitest') {
+        my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
+        if ($allowed) {
+            &concept_test_builder($r);
+            return OK;
+        }
+    }
+
 # --------------------------------------------- Initialize help topics for this
     foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',
 	               'Adding_External_Resource','Navigate_Content',
@@ -2632,9 +2659,10 @@ sub handler {
     }
 # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n".$script."\n".'</script>';
-	my @brcrum = [{href=>"/adm/createuser",text=>"$type Documents"}];
+    my $brcrum = [{href=>"/adm/createuser",text=>"$type Documents"}];
     $r->print(&Apache::loncommon::start_page("$type Documents", $script,
-					     {'force_register' => $showdoc, bread_crumbs => @brcrum}).
+				    {'force_register' => $showdoc,
+                                     'bread_crumbs' => $brcrum}).
 	      &Apache::loncommon::help_open_menu('','',273,'RAT'));
   
   my %allfiles = ();
@@ -2745,13 +2773,13 @@ sub handler {
                 'extr' => 'External Resource',
                 'syll' => 'Syllabus',
                 'navc' => 'Navigate Contents',
-                'sipa' => 'Simple Page',
+                'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',
                 'scuf' => 'Score Upload Form',
-                'bull' => 'Bulletin Board',
-                'mypi' => 'My Personal Info',
-                'grpo' => 'Group Files',
+                'bull' => 'Discussion Board',
+                'mypi' => 'My Personal Information Page',
+                'grpo' => 'Group Portfolios',
                 'rost' => 'Course Roster',
 		'abou' => 'About User',
                 'imsf' => 'Import IMS package',
@@ -3121,7 +3149,7 @@ ENDBLOCK
 </span>
 <br /><br />
 $lt{'comment'}:<br />
-<textarea cols=50 rows=4 name='comment'>
+<textarea cols="50" rows="4" name="comment">
 </textarea>
 <br />
 <input type="hidden" name="folderpath" value="$path" />
@@ -3196,8 +3224,21 @@ ENDSUPFORM
  }
  $r->print(&Apache::loncommon::end_page());
  return OK;
-} 
+}
 
+sub concept_test_builder {
+    my ($r) = @_;
+    $r->print(&Apache::loncommon::start_page('Assemble Test'));
+    &Apache::londocsgci::setdefaults();
+    if ($env{'form.phase'} eq 'storemap') {
+          &Apache::londocsgci::evaluate();
+          &Apache::londocsgci::store($r);
+    }
+    &Apache::londocsgci::load();
+    &Apache::londocsgci::listresources($r);
+    $r->print(&Apache::loncommon::end_page());
+    return;
+}
 
 sub editing_js {
     my ($udom,$uname) = @_;
@@ -3208,10 +3249,10 @@ sub editing_js {
                                           p_mnp => 'Name of New Page',
                                           t_mnp => 'New Page',
                                           p_mxu => 'Title for the Uploaded Score',
-                                          p_msp => 'Title for the Page',
+                                          p_msp => 'Name of the Simple Course Page',
                                           p_msb => 'Title for the Problem',
                                           p_mdb => 'Title for the Drop Box',
-                                          p_mbb => 'Title for the Bulletin Board',
+                                          p_mbb => 'Title for the Discussion Board',
                                           p_mab => "Enter user:domain for User's 'About Me' Page",
                                           p_mab2 => "About [_99]",
                                           p_mab_alrt1 => 'Not a valid user:domain',