--- loncom/interface/londocs.pm 2012/11/16 23:37:15 1.509 +++ loncom/interface/londocs.pm 2012/12/07 17:04:01 1.523 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.509 2012/11/16 23:37:15 raeburn Exp $ +# $Id: londocs.pm,v 1.523 2012/12/07 17:04:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,6 +41,7 @@ use Apache::lonclonecourse; use Apache::lonnavmaps; use Apache::lonnavdisplay(); use Apache::lonuserstate(); +use Apache::lonextresedit(); use HTML::Entities; use HTML::TokeParser; use GDBM_File; @@ -390,18 +391,15 @@ sub docs_change_log { my %orderhash; my $container='sequence'; my $pathitem; - if ($env{'form.pagepath'}) { + if ($env{'form.folderpath'} =~ /\:1$/) { $container='page'; - $pathitem = '<input type="hidden" name="pagepath" value="'. - &HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'; - } else { - my $folderpath=$env{'form.folderpath'}; - if ($folderpath eq '') { - $folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Documents')); - } - $pathitem = '<input type="hidden" name="folderpath" value="'. - &HTML::Entities::encode($folderpath,'<>&"').'" />'; } + my $folderpath=$env{'form.folderpath'}; + if ($folderpath eq '') { + $folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Documents').':::::'); + } + $pathitem = '<input type="hidden" name="folderpath" value="'. + &HTML::Entities::encode($folderpath,'<>&"').'" />'; my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container"; my $jumpto = $readfile; $jumpto =~ s{^/}{}; @@ -760,16 +758,9 @@ sub print_paste_buffer { } } $r->print('<br /><input type="submit" name="pastemarked" value="'.&mt('Paste').'" />'.$othercrs); - if ($container eq 'page') { - $r->print(' - <input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" /> - <input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" /> -'); - } else { - $r->print(' + $r->print(' <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" /> '); - } $r->print('</form>'); } else { $r->print(&mt('Paste buffer contains:').' '.$buffer. @@ -1691,12 +1682,17 @@ sub handle_edit_cmd { sub editor { my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype, $supplementalflag,$orderhash,$iconpath,$pathitem)=@_; - my $container= ($env{'form.pagepath'}) ? 'page' - : 'sequence'; - - my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) = - &Apache::lonhtmlcommon::docs_breadcrumbs($allowed,$crstype,1); - $r->print($breadcrumbtrail); + my ($randompick,$ishidden,$isencrypted,$plain,$is_random_order,$container); + if ($allowed) { + (my $breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain, + $is_random_order,$container) = + &Apache::lonhtmlcommon::docs_breadcrumbs($allowed,$crstype,1); + $r->print($breadcrumbtrail); + } elsif ($env{'form.folderpath'} =~ /\:1$/) { + $container = 'page'; + } else { + $container = 'sequence'; + } my $jumpto = "uploaded/$coursedom/$coursenum/$folder.$container"; @@ -1859,35 +1855,67 @@ sub editor { unless ($name) { $idx++; next; } $output .= &entryline($idx,$name,$url,$folder,$allowed,$res, $coursenum,$coursedom,$crstype, - $pathitem,$supplementalflag); + $pathitem,$supplementalflag,$container); $idx++; $shown++; } &Apache::loncommon::end_data_table_count(); - - if ($shown) { - $to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') - .&Apache::loncommon::start_data_table(undef,'contentlist'); - if ($allowed) { - $to_show .= &Apache::loncommon::start_data_table_header_row() - .'<th colspan="2">'.&mt('Move').'</th>' - .'<th>'.&mt('Actions').'</th>' - .'<th colspan="2">'.&mt('Document').'</th>'; - if ($folder !~ /^supplemental/) { - $to_show .= '<th colspan="4">'.&mt('Settings').'</th>'; + + if (($allowed) || ($supplementalflag && $folder eq 'supplemental')) { + my $toolslink = '<table><tr><td>' + .&Apache::loncommon::help_open_menu('Navigation Screen', + 'Navigation_Screen',undef,'RAT') + .'</td><td class="LC_middle">'.&mt('Tools:').'</td>' + .'<td align="left"><ul id="LC_toolbar">' + .'<li><a href="/adm/coursedocs?forcesupplement=1" ' + .'id="LC_content_toolbar_edittoplevel" ' + .'class="LC_toolbarItem" ' + .'title="'.&mt('Supplemental Content Editor').'">' + .'</a></li></ul></td></tr></table><br />'; + if ($shown) { + if ($allowed) { + $to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') + .&Apache::loncommon::start_data_table(undef,'contentlist') + .&Apache::loncommon::start_data_table_header_row() + .'<th colspan="2">'.&mt('Move').'</th>' + .'<th>'.&mt('Actions').'</th>' + .'<th colspan="2">'.&mt('Document').'</th>'; + if ($folder !~ /^supplemental/) { + $to_show .= '<th colspan="4">'.&mt('Settings').'</th>'; + } + $to_show .= &Apache::loncommon::end_data_table_header_row() + .$output.' ' + .&Apache::loncommon::end_data_table() + .'<br style="line-height:2px;" />' + .&Apache::loncommon::end_scrollbox(); + } else { + $to_show .= $toolslink + .&Apache::loncommon::start_data_table('LC_tableOfContent') + .$output.' ' + .&Apache::loncommon::end_data_table(); } - $to_show .= &Apache::loncommon::end_data_table_header_row(); + } else { + if (!$allowed) { + $to_show .= $toolslink; + } + $to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll') + .'<div class="LC_info" id="contentlist">' + .&mt('Currently no documents.') + .'</div>' + .&Apache::loncommon::end_scrollbox(); } - $to_show .= $output.' ' - .&Apache::loncommon::end_data_table() - .'<br style="line-height:2px;" />' - .&Apache::loncommon::end_scrollbox(); } else { - $to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll') - .'<div class="LC_info" id="contentlist">' - .&mt('Currently no documents.') - .'</div>' - .&Apache::loncommon::end_scrollbox(); + if ($shown) { + $to_show = '<div>' + .&Apache::loncommon::start_data_table('LC_tableOfContent') + .$output + .&Apache::loncommon::end_data_table() + .'</div>'; + } else { + $to_show = '<div class="LC_info" id="contentlist">' + .&mt('Currently no documents.') + .'</div>' + } } my $tid = 1; if ($supplementalflag) { @@ -1899,19 +1927,6 @@ sub editor { $readfile)); &print_paste_buffer($r,$container,$folder,$coursedom,$coursenum); } else { - if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { - #Function Box for Supplemental Content for users with mdc priv. - my $funcname = &mt('Folder Editor'); - $r->print( - &Apache::loncommon::head_subbox( - &Apache::lonhtmlcommon::start_funclist(). - &Apache::lonhtmlcommon::add_item_funclist( - '<a href="/adm/coursedocs?command=direct&forcesupplement=1&'. - 'supppath='.&HTML::Entities::encode($env{'form.folderpath'}).'">'. - '<img src="/res/adm/pages/docs-22x22.png" alt="'.$funcname.'" class="LC_icon" />'. - '<span class="LC_menubuttons_inline_text">'.$funcname.'</span></a>'). - &Apache::lonhtmlcommon::end_funclist())); - } $r->print($to_show); } return; @@ -1932,7 +1947,7 @@ sub process_file_upload { my $errtext=''; my $fatal=0; my $container='sequence'; - if ($env{'form.pagepath'}) { + if ($env{'form.folderpath'} =~ /:1$/) { $container='page'; } ($errtext,$fatal)= @@ -2022,7 +2037,6 @@ sub process_file_upload { my $archiveurl = &HTML::Entities::encode($url,'<>&"'); my %archiveitems = ( folderpath => $env{'form.folderpath'}, - pagepath => $env{'form.pagepath'}, cmd => $nextphase, newidx => $newidx, position => $position, @@ -2077,16 +2091,14 @@ sub is_supplemental_title { sub entryline { my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom, - $crstype,$pathitem,$supplementalflag)=@_; - my ($foldertitle,$pagetitle,$renametitle); + $crstype,$pathitem,$supplementalflag,$container)=@_; + my ($foldertitle,$renametitle); if (&is_supplemental_title($title)) { ($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title); - $pagetitle = $foldertitle; } else { $title=&HTML::Entities::encode($title,'"<>&\''); $renametitle=$title; $foldertitle=$title; - $pagetitle=$title; } my $orderidx=$LONCAPA::map::order[$index]; @@ -2097,34 +2109,34 @@ sub entryline { my $line=&Apache::loncommon::start_data_table_row(); my ($form_start,$form_end,$form_common); # Edit commands - my ($container, $type, $esc_path, $path, $symb); + my ($type, $esc_path, $path, $symb); + if ($container eq 'page') { + $type = 'page'; + } else { + $type = 'folder'; + } if ($env{'form.folderpath'}) { - $type = 'folder'; - $container = 'sequence'; $esc_path=&escape($env{'form.folderpath'}); $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"'); } - if ($env{'form.pagepath'}) { - $type = $container = 'page'; - $esc_path=&escape($env{'form.pagepath'}); - $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"'); - } my $isexternal; - if (!$supplementalflag && $residx) { + if ($residx) { my $currurl = $url; $currurl =~ s{^http(|s)(:|:)//}{/adm/wrapper/ext/}; if ($currurl =~ m{^/adm/wrapper/ext/}) { $isexternal = 1; } - my $path = 'uploaded/'. - $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. - $env{'course.'.$env{'request.course.id'}.'.num'}.'/'; - $symb = &Apache::lonnet::encode_symb($path.$folder.".$container", - $residx, - &Apache::lonnet::declutter($currurl)); + if (!$supplementalflag) { + my $path = 'uploaded/'. + $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. + $env{'course.'.$env{'request.course.id'}.'.num'}.'/'; + $symb = &Apache::lonnet::encode_symb($path.$folder.".$container", + $residx, + &Apache::lonnet::declutter($currurl)); + } } - my %lt; + my ($renamelink,%lt); if ($allowed) { my $incindex=$index+1; my $selectbox=''; @@ -2221,7 +2233,7 @@ sub entryline { $nocopy=1; } } - my ($copylink,$cutlink,$removelink,$renamelink); + my ($copylink,$cutlink,$removelink); my $skip_confirm = 0; if ( $folder =~ /^supplemental/ || ($url =~ m{( /smppg$ @@ -2240,7 +2252,7 @@ sub entryline { ENDCOPY } else { $copylink=(<<ENDCOPY); -<a href="javascript:markcopy('$esc_path','$index','$renametitle','$container','$symb','$folder');" class="LC_docs_copy">$lt{'cp'}</a> +<a href="javascript:markcopy('$esc_path','$index','$renametitle','$container','$folder');" class="LC_docs_copy">$lt{'cp'}</a> ENDCOPY } if ($nocut) { @@ -2249,7 +2261,7 @@ ENDCOPY ENDCUT } else { $cutlink=(<<ENDCUT); -<a href="javascript:cutres('$esc_path','$index','$renametitle','$container','$symb','$folder',$skip_confirm);" class="LC_docs_cut">$lt{'ct'}</a> +<a href="javascript:cutres('$esc_path','$index','$renametitle','$container','$folder',$skip_confirm);" class="LC_docs_cut">$lt{'ct'}</a> ENDCUT } if ($noremove) { @@ -2258,12 +2270,14 @@ ENDCUT ENDREM } else { $removelink=(<<ENDREM); -<a href='javascript:removeres("$esc_path","$index","$renametitle","$container","$symb",$skip_confirm);' class="LC_docs_remove">$lt{'rm'}</a> +<a href='javascript:removeres("$esc_path","$index","$renametitle",$skip_confirm);' class="LC_docs_remove">$lt{'rm'}</a> ENDREM } - $renamelink=(<<ENDREN); -<a href='javascript:changename("$esc_path","$index","$renametitle","$container","$symb");' class="LC_docs_rename">$lt{'rn'}</a> + unless ($isexternal) { + $renamelink=(<<ENDREN); +<a href='javascript:changename("$esc_path","$index","$renametitle");' class="LC_docs_rename">$lt{'rn'}</a> ENDREN + } $form_start = ' <form action="/adm/coursedocs" method="post"> '; @@ -2295,7 +2309,6 @@ END </td> <td class="LC_docs_entry_commands"><span class="LC_nobreak"> $removelink -$renamelink $cutlink $copylink </span> @@ -2307,22 +2320,18 @@ END my ($extension)=($url=~/\.(\w+)$/); my $uploaded=($url=~/^\/*uploaded\//); my $icon=&Apache::loncommon::icon($url); - my $isfolder=0; - my $ispage=0; - my $folderarg; - my $pagearg; - my $pagefile; + my $isfolder; + my $ispage; + my $containerarg; if ($uploaded) { if (($extension eq 'sequence') || ($extension eq 'page')) { $url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/; - my $containerarg = $1; + $containerarg = $1; if ($extension eq 'sequence') { $icon=$iconpath.'navmap.folder.closed.gif'; - $folderarg=$containerarg; $isfolder=1; } else { $icon=$iconpath.'page.gif'; - $pagearg=$containerarg; $ispage=1; } if ($allowed) { @@ -2335,15 +2344,11 @@ END } } - my $editlink; + my ($editlink,$extresform); my $orig_url = $url; $orig_url=~s{http(:|:)//https(:|:)//}{https$2//}; - my $external = ($url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/}); + $url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/}; if (!$supplementalflag && $residx && $symb) { - if ($container eq 'page') { - $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); - $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); - } if ((!$isfolder) && (!$ispage)) { (undef,undef,$url)=&Apache::lonnet::decode_symb($symb); $url=&Apache::lonnet::clutter($url); @@ -2359,7 +2364,6 @@ END } } elsif ($url=~m|^/ext/|) { $url='/adm/wrapper'.$url; - $external = 1; } if (&Apache::lonnet::symbverify($symb,$url)) { $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); @@ -2369,113 +2373,93 @@ END } } my ($rand_pick_text,$rand_order_text); - if ($isfolder || $extension eq 'sequence') { + if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') { my $foldername=&escape($foldertitle); my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $folderpath.='&' }; + if (!$allowed && $supplementalflag) { + $folderpath.=$containerarg.'&'.$foldername; + $url.='folderpath='.&escape($folderpath); + } else { # Append randompick number, hidden, and encrypted with ":" to foldername, # so it gets transferred between levels - $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx, + $folderpath.=$containerarg.'&'.$foldername. + ':'.(&LONCAPA::map::getparameter($orderidx, 'parameter_randompick'))[0] .':'.((&LONCAPA::map::getparameter($orderidx, 'parameter_hiddenresource'))[0]=~/^yes$/i) .':'.((&LONCAPA::map::getparameter($orderidx, 'parameter_encrypturl'))[0]=~/^yes$/i) .':'.((&LONCAPA::map::getparameter($orderidx, - 'parameter_randomorder'))[0]=~/^yes$/i); - $url.='folderpath='.&escape($folderpath); - my $rpicknum = (&LONCAPA::map::getparameter($orderidx, - 'parameter_randompick'))[0]; - my $rpckchk; - if ($rpicknum) { - $rpckchk = ' checked="checked"'; - } - my $formname = 'edit_rpick_'.$orderidx; - $rand_pick_text = + 'parameter_randomorder'))[0]=~/^yes$/i) + .':'.$ispage; + $url.='folderpath='.&escape($folderpath); + my $rpicknum = (&LONCAPA::map::getparameter($orderidx, + 'parameter_randompick'))[0]; + my $rpckchk; + if ($rpicknum) { + $rpckchk = ' checked="checked"'; + } + my $formname = 'edit_rpick_'.$orderidx; + $rand_pick_text = '<form action="/adm/coursedocs" method="post" name="'.$formname.'">'."\n". $form_common."\n". '<span class="LC_nobreak"><label><input type="checkbox" name="randpickon_'.$orderidx.'" id="rpick_'.$orderidx.'" onclick="'."updatePick(this.form,'$orderidx','check');".'"'.$rpckchk.' /> '.&mt('Randomly Pick').'</label><input type="hidden" name="randompick_'.$orderidx.'" id="rpicknum_'.$orderidx.'" value="'.$rpicknum.'" />'; - if ($rpicknum ne '') { - $rand_pick_text .= ': <a href="javascript:updatePick('."document.$formname,'$orderidx','link'".')">'.$rpicknum.'</a>'; - } - $rand_pick_text .= '</span></form>'; - my $ro_set= - ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); - $rand_order_text = + if ($rpicknum ne '') { + $rand_pick_text .= ': <a href="javascript:updatePick('."document.$formname,'$orderidx','link'".')">'.$rpicknum.'</a>'; + } + $rand_pick_text .= '</span></form>'; + my $ro_set= + ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); + $rand_order_text = $form_start. $form_common.' <span class="LC_nobreak"><label><input type="checkbox" name="randomorder_'.$orderidx.'" onclick="'."this.form.changeparms.value='randomorder';this.form.submit()".'" '.$ro_set.' /> '.&mt('Random Order').' </label></span></form>'; + } } elsif ($supplementalflag && !$allowed) { - $url .= ($url =~ /\?/) ? 'amp;':'?'; + $url .= ($url =~ /\?/) ? '&':'?'; $url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"'); + if ($title) { + $url .= '&title='.&HTML::Entities::encode($renametitle,'<>&"'); + } + if ($isexternal && $orderidx) { + $url .= '&idx='.$orderidx; + } } - if ($ispage) { - my $pagename=&escape($pagetitle); - my $pagepath; - my $folderpath=$env{'form.folderpath'}; - if ($folderpath) { $pagepath = $folderpath.'&' }; - $pagepath.=$pagearg.'&'.$pagename; - $url.='pagepath='.&escape($pagepath). - '&pagesymb='.&escape($symb); - } + my ($tdalign,$tdwidth); if ($allowed) { my $fileloc = &Apache::lonnet::declutter(&Apache::lonnet::filelocation('',$orig_url)); - - if ($external) { - $editlink = <<"EXTLNK"; - - <a class="LC_docs_ext_edit" href="javascript:editext('$residx');"> - $lt{'ed'}</a> - <form action="/adm/coursedocs" method="post" name="editext_$residx"> - <fieldset id="uploadext$residx" style="display: none;" /> - <input type="hidden" name="active" value="aa" /> - <span class="LC_nobreak"> - <span class="LC_docs_ext_edit">$lt{'ul'} </span> - <input type="text" size="40" name="exturl" id="exturl_$residx" value="$orig_url" /> - <a class="LC_docs_ext_edit" href="javascript:extUrlPreview('exturl_$residx');">$lt{'pr'}</a></span> - </span><br /> - <span class="LC_nobreak"> - <span class="LC_docs_ext_edit">$lt{'ti'} </span> - <input type="text" size="40" name="exttitle" value="$title" /> - $pathitem - <input type="hidden" name="importdetail" value="" /> - <input type="button" value="$lt{'sv'}" onclick="javascript:setExternal(this.form,'$residx')" /> - </span> - </fieldset> - </form> -EXTLNK - } else { + if ($isexternal) { + ($editlink,$extresform) = + &Apache::lonextresedit::extedit_form(0,$residx,$orig_url,$title,$pathitem); + } elsif (!$isfolder && !$ispage) { my ($cfile,$home,$switchserver,$forceedit,$forceview) = &Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url); - my $geteditlink; - if ($supplementalflag) { - if ($orig_url eq "/adm/$env{'user.domain'}/$env{'user.name'}/aboutme") { - $geteditlink = 1; - } - } elsif (($cfile ne '') && ($symb ne '')) { - $geteditlink = 1; - } - if ($geteditlink) { + if (($cfile ne '') && ($symb ne '' || $supplementalflag)) { my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home, $switchserver, $forceedit, - undef,$symb); + undef,$symb, + &escape($env{'form.folderpath'}), + $renametitle); if ($jscall) { - $editlink = ' <a class="LC_docs_ext_edit" href="javascript:'. - $jscall.'" >'.&mt('Edit').'</a>'; + $editlink = '<a class="LC_docs_ext_edit" href="javascript:'. + $jscall.'" >'.&mt('Edit').'</a> '."\n"; } } } + $tdalign = ' align="right" valign="top"'; + $tdwidth = ' width="80%"'; } my $reinit; if ($crstype eq 'Community') { $reinit = &mt('(re-initialize community to access)'); } else { $reinit = &mt('(re-initialize course to access)'); - } - $line.='<td>'; + } + $line.='<td class="LC_docs_entry_commands"'.$tdalign.'><span class="LC_nobreak">'.$editlink.$renamelink; if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { $line.='<a href="'.$url.'"><img src="'.$icon.'" alt="" class="LC_icon" /></a>'; } elsif ($url) { @@ -2484,7 +2468,7 @@ EXTLNK } else { $line.='<img src="'.$icon.'" alt="" class="LC_icon" />'; } - $line.='</td><td>'; + $line.='</span></td><td'.$tdwidth.'>'; if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { $line.='<a href="'.$url.'">'.$title.'</a>'; } elsif ($url) { @@ -2493,7 +2477,7 @@ EXTLNK } else { $line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>'; } - $line.=$editlink."</td>"; + $line.="$extresform</td>"; $rand_pick_text = ' ' if ($rand_pick_text eq ''); $rand_order_text = ' ' if ($rand_order_text eq ''); if (($allowed) && ($folder!~/^supplemental/)) { @@ -2643,7 +2627,7 @@ sub checkonthis { $r->print('<span class="LC_error">'.&mt('connection down').'</span>'); } elsif ($result eq 'not_found') { unless ($url=~/\$/) { - $r->print('<span class="LC_error">'.&mt('not found').'</b></span>'); + $r->print('<span class="LC_error">'.&mt('not found').'</span>'); } else { $r->print('<span class="LC_error">'.&mt('unable to verify variable URL').'</span>'); } @@ -2689,7 +2673,7 @@ sub list_symbs { $r->print(&Apache::loncommon::start_data_table_row(). '<td>'.$res->compTitle().'</td>'. '<td>'.$res->symb().'</td>'. - &Apache::loncommon::start_data_table_row()); + &Apache::loncommon::end_data_table_row()); $count ++; } if (!$count) { @@ -2699,6 +2683,7 @@ sub list_symbs { } $r->print(&Apache::loncommon::end_data_table()); } + $r->print(&endContentScreen()); } @@ -2729,6 +2714,7 @@ sub verifycontent { } &untiehash(); $r->print('<p class="LC_success">'.&mt('Done').'</p>'); + $r->print(&endContentScreen()); } @@ -2808,7 +2794,7 @@ sub checkversions { if ($env{'form.timerange'} eq 'all') { # show all documents $header=&mt('All Documents in '.$crstype); - $allsel=1; + $allsel=' selected="selected"'; foreach my $key (keys(%hash)) { if ($key=~/^ids\_(\/res\/.+)$/) { my $src=$1; @@ -2829,19 +2815,19 @@ sub checkversions { .&mt('seconds'); if ($env{'form.timerange'}==-1) { $seltext='since start of course'; - $startsel='selected'; + $startsel=' selected="selected"'; $env{'form.timerange'}=time; } $starttime=time-$env{'form.timerange'}; if ($env{'form.timerange'}==2592000) { $seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; - $monthsel='selected'; + $monthsel=' selected="selected"'; } elsif ($env{'form.timerange'}==604800) { $seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; - $weeksel='selected'; + $weeksel=' selected="selected"'; } elsif ($env{'form.timerange'}==86400) { $seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; - $daysel='selected'; + $daysel=' selected="selected"'; } $header=&mt('Content changed').' '.$seltext; } else { @@ -2879,11 +2865,11 @@ sub checkversions { <fieldset> <legend>$lt{'cd'}</legend> <select name="timerange"> -<option value='all' $allsel>$lt{'al'}</option> -<option value="-1" $startsel>$lt{'st'}</option> -<option value="2592000" $monthsel>$lt{'lm'}</option> -<option value="604800" $weeksel>$lt{'lw'}</option> -<option value="86400" $daysel>$lt{'sy'}</option> +<option value='all'$allsel>$lt{'al'}</option> +<option value="-1"$startsel>$lt{'st'}</option> +<option value="2592000"$monthsel>$lt{'lm'}</option> +<option value="604800"$weeksel>$lt{'lw'}</option> +<option value="86400"$daysel>$lt{'sy'}</option> </select> <input type="submit" name="display" value="$lt{'sd'}" /> </fieldset> @@ -2899,111 +2885,93 @@ $lt{'sc'}: <input type="submit" name="se <hr /> <h4>$lt{'vers'}</h4> <input type="submit" name="setversions" value="$lt{'save'}" /> -<table border="0"> ENDHEADERS #number of columns for version history - my $num_ver_col = 1; $r->print( - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - '<th>'.&mt('Resources').'</th>'. - "<th>$lt{'mr'}</th>". - "<th>$lt{'ve'}</th>". - "<th>$lt{'vu'}</th>". - '<th colspan="'.$num_ver_col.'">'.&mt('History').'</th>'. - '</b>'); + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + '<th>'.&mt('Resources').'</th>'. + "<th>$lt{'mr'}</th>". + "<th>$lt{'ve'}</th>". + "<th>$lt{'vu'}</th>". + '<th>'.&mt('History').'</th>'. + &Apache::loncommon::end_data_table_header_row() + ); foreach my $key (sort(keys(%changes))) { #excludes not versionable problems from resource version history: - if ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/) { - my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); - my $currentversion=&Apache::lonnet::getversion($key); - if ($currentversion<0) { - $currentversion='<span class="LC_error">'.&mt('Could not be determined.').'</span>'; - } - my $linkurl=&Apache::lonnet::clutter($key); + next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/); + my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); + my $currentversion=&Apache::lonnet::getversion($key); + if ($currentversion<0) { + $currentversion='<span class="LC_error">'.&mt('Could not be determined.').'</span>'; + } + my $linkurl=&Apache::lonnet::clutter($key); $r->print( - &Apache::loncommon::end_data_table_header_row(). &Apache::loncommon::start_data_table_row(). - '<td><b>'.&Apache::lonnet::gettitle($linkurl).'</b><br>'. + '<td><b>'.&Apache::lonnet::gettitle($linkurl).'</b><br />'. '<a href="'.$linkurl.'" target="cat">'.$linkurl.'</a></td>'. - '<td align="right">'.$currentversion.'<span class="LC_fontsize_medium"><br>('. + '<td align="right">'.$currentversion.'<span class="LC_fontsize_medium"><br />('. &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate')).')</span></td>'. - '<td align="right">'); -# Used in course - my $usedversion=$hash{'version_'.$linkurl}; - if (($usedversion) && ($usedversion ne 'mostrecent')) { - if($usedversion != $currentversion){ + '<td align="right">' + ); + # Used in course + my $usedversion=$hash{'version_'.$linkurl}; + if (($usedversion) && ($usedversion ne 'mostrecent')) { + if ($usedversion != $currentversion) { $r->print('<span class="LC_warning">'.$usedversion.'</span>'); - }else{ + } else { $r->print($usedversion); } - } else { - $r->print($currentversion); - } - $r->print('</td><td title="'.$lt{'vu'}.'">'); -# Set version - $r->print(&Apache::loncommon::select_form($setversions{$linkurl}, - 'set_version_'.$linkurl, - {'select_form_order' => - ['',1..$currentversion,'mostrecent'], - '' => '', - 'mostrecent' => &mt('most recent'), - map {$_,$_} (1..$currentversion)})); - my $lastold=1; - for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { - my $url=$root.'.'.$prevvers.'.'.$extension; - if (&Apache::lonnet::metadata($url,'lastrevisiondate')< - $starttime) { - $lastold=$prevvers; - } - } - # - # Code to figure out how many version entries should go in - # each of the four columns - my $entries_per_col = 0; - my $num_entries = ($currentversion-$lastold); - if ($num_entries % $num_ver_col == 0) { - $entries_per_col = $num_entries/$num_ver_col; } else { - $entries_per_col = $num_entries/$num_ver_col + 1; + $r->print($currentversion); } - my $entries_count = 0; - $r->print('<td valign="top"><span class="LC_fontsize_medium">'); - my $cols_output = 1; - for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { - my $url=$root.'.'.$prevvers.'.'.$extension; - $r->print('<span class="LC_nobreak"><a href="'.&Apache::lonnet::clutter($url). - '">'.&mt('Version').' '.$prevvers.'</a> ('. - &Apache::lonlocal::locallocaltime( - &Apache::lonnet::metadata($url, - 'lastrevisiondate') - ). - ')'); - if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') { - $r->print(' <a href="/adm/diff?filename='. - &Apache::lonnet::clutter($root.'.'.$extension). - '&versionone='.$prevvers. - '" target="diffs">'.&mt('Diffs').'</a>'); - } - $r->print('</span><br />'); - if (++$entries_count % $entries_per_col == 0) { - $r->print('</span></td>'); - if ($cols_output != $num_ver_col) { - $r->print('<td valign="top"><span class="LC_fontsize_medium">'); - $cols_output++; - } - } - } - while($cols_output++ < $num_ver_col) { - $r->print('</span></td><td>'); + $r->print('</td><td title="'.$lt{'vu'}.'">'); + # Set version + $r->print(&Apache::loncommon::select_form( + $setversions{$linkurl}, + 'set_version_'.$linkurl, + {'select_form_order' => ['',1..$currentversion,'mostrecent'], + '' => '', + 'mostrecent' => &mt('most recent'), + map {$_,$_} (1..$currentversion)})); + my $lastold=1; + for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { + my $url=$root.'.'.$prevvers.'.'.$extension; + if (&Apache::lonnet::metadata($url,'lastrevisiondate')<$starttime) { + $lastold=$prevvers; + } + } + $r->print('</td>'); + # List all available versions + $r->print('<td valign="top"><span class="LC_fontsize_medium">'); + for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { + my $url=$root.'.'.$prevvers.'.'.$extension; + $r->print( + '<span class="LC_nobreak">' + .'<a href="'.&Apache::lonnet::clutter($url).'">' + .&mt('Version [_1]',$prevvers).'</a>' + .' ('.&Apache::lonlocal::locallocaltime( + &Apache::lonnet::metadata($url,'lastrevisiondate')) + .')'); + if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') { + $r->print( + ' <a href="/adm/diff?filename='. + &Apache::lonnet::clutter($root.'.'.$extension). + &HTML::Entities::encode('&versionone='.$prevvers,'"<>&'). + '" target="diffs">'.&mt('Diffs').'</a>'); } - } + $r->print('</span><br />'); + } + $r->print('</span></td>'.&Apache::loncommon::end_data_table_row()); } - $r->print('</td>'.&Apache::loncommon::end_data_table_row(). - &Apache::loncommon::end_data_table(). - '<input type="submit" name="setversions" value="'.$lt{'save'}.'" />'); + $r->print( + &Apache::loncommon::end_data_table(). + '<input type="submit" name="setversions" value="'.$lt{'save'}.'" />'. + '</form>' + ); &untiehash(); + $r->print(&endContentScreen()); } sub mark_hash_old { @@ -3035,11 +3003,6 @@ sub changewarning { my $pathvar='folderpath'; my $path=&escape($env{'form.folderpath'}); if (!defined($url)) { - if (defined($env{'form.pagepath'})) { - $pathvar='pagepath'; - $path=&escape($env{'form.pagepath'}); - $path.='&pagesymb='.&escape($env{'form.pagesymb'}); - } $url='/adm/coursedocs?'.$pathvar.'='.$path; } my $course_type = &Apache::loncommon::course_type(); @@ -3213,9 +3176,9 @@ sub handler { # Get the parameters that may be needed # &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['folderpath','pagepath', - 'pagesymb','forcesupplement','forcestandard', - 'tools','symb','command']); + ['folderpath', + 'forcesupplement','forcestandard', + 'tools','symb','command','supppath']); # standard=1: this is a "new-style" course with an uploaded map as top level # standard=2: this is a "old-style" course, and there is nothing we can do @@ -3229,7 +3192,7 @@ sub handler { my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/); - if (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'} eq "" || ($env{'form.pagepath'})) { + if (($env{'form.folderpath'}=~/^default/) || ($env{'form.folderpath'} eq "")) { $supplementalflag=0; } if ($env{'form.forcesupplement'}) { $supplementalflag=1; } @@ -3251,73 +3214,18 @@ sub handler { if ($env{'form.command'} eq 'direct') { my ($mapurl,$id,$resurl); if ($env{'form.symb'} ne '') { - ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($env{'form.symb'}); - if ($resurl=~/\.(sequence|page)$/) { - $mapurl=$resurl; - } elsif ($resurl eq 'adm/navmaps') { - $mapurl=$env{'course.'.$env{'request.course.id'}.'.url'}; - } - my $mapresobj; - my $navmap = Apache::lonnavmaps::navmap->new(); - if (ref($navmap)) { - $mapresobj = $navmap->getResourceByUrl($mapurl); - } - $mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1}; - my $type=$2; - my $path; - if (ref($mapresobj)) { - my $pcslist = $mapresobj->map_hierarchy(); - if ($pcslist ne '') { - foreach my $pc (split(/,/,$pcslist)) { - next if ($pc <= 1); - my $res = $navmap->getByMapPc($pc); - if (ref($res)) { - my $thisurl = $res->src(); - $thisurl=~s{^.*/([^/]+)\.\w+$}{$1}; - my $thistitle = $res->title(); - $path .= '&'. - &Apache::lonhtmlcommon::entity_encode($thisurl).'&'. - &Apache::lonhtmlcommon::entity_encode($thistitle). - ':'.$res->randompick(). - ':'.$res->randomout(). - ':'.$res->encrypted(). - ':'.$res->randomorder(); - } - } - } - $path .= '&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. - &Apache::lonhtmlcommon::entity_encode($mapresobj->title()). - ':'.$mapresobj->randompick(). - ':'.$mapresobj->randomout(). - ':'.$mapresobj->encrypted(). - ':'.$mapresobj->randomorder(); - } else { - my $maptitle = &Apache::lonnet::gettitle($mapurl); - $path = '&default&...::::'. - '&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. - &Apache::lonhtmlcommon::entity_encode($maptitle).'::::'; - } - $path = 'default&'. - &Apache::lonhtmlcommon::entity_encode('Main Course Documents'). - $path; - if ($type eq 'sequence') { - $env{'form.folderpath'}=$path; - $env{'form.pagepath'}=''; - } else { - $env{'form.pagepath'}=$path; - $env{'form.folderpath'}=''; - } + $env{'form.folderpath'}= + &Apache::loncommon::symb_to_docspath($env{'form.symb'}); } elsif ($env{'form.supppath'} ne '') { $env{'form.folderpath'}=$env{'form.supppath'}; } } elsif ($env{'form.command'} eq 'editdocs') { $env{'form.folderpath'} = 'default&'. - &Apache::lonhtmlcommon::entity_encode('Main Course Content'); - $env{'form.pagepath'}=''; + &Apache::lonhtmlcommon::entity_encode('Main Course Content'). + ':::::'; } elsif ($env{'form.command'} eq 'editsupp') { $env{'form.folderpath'} = 'default&'. &Apache::lonhtmlcommon::entity_encode('Supplemental Content'); - $env{'form.pagepath'}=''; } # Where do we store these for when we come back? @@ -3326,24 +3234,21 @@ sub handler { $stored_folderpath='docs_sup_folderpath'; } -# No folderpath, no pagepath, see if we have something stored - if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) { +# No folderpath, and in edit mode, see if we have something stored + if ((!$env{'form.folderpath'}) && $allowed) { &Apache::loncommon::restore_course_settings($stored_folderpath, - {'folderpath' => 'scalar'}); + {'folderpath' => 'scalar'}); + unless (&unescape($env{'form.folderpath'}) =~ m{^(default|supplemental)&}) { + undef($env{'form.folderpath'}); + } } # If we are not allowed to make changes, all we can see are supplemental docs if (!$allowed) { - $env{'form.pagepath'}=''; unless ($env{'form.folderpath'} =~ /^supplemental/) { $env{'form.folderpath'} = &supplemental_base(); } } -# If we still not have a folderpath, see if we can resurrect at pagepath - if (!$env{'form.folderpath'} && $allowed) { - &Apache::loncommon::restore_course_settings($stored_folderpath, - {'pagepath' => 'scalar'}); - } # Make the zeroth entry in supplemental docs page paths, so we can get to top level if ($env{'form.folderpath'} =~ /^supplemental_\d+/) { $env{'form.folderpath'} = &supplemental_base() @@ -3351,48 +3256,42 @@ sub handler { $env{'form.folderpath'}; } # If after all of this, we still don't have any paths, make them - unless (($env{'form.pagepath'}) || ($env{'form.folderpath'})) { + unless ($env{'form.folderpath'}) { if ($supplementalflag) { $env{'form.folderpath'}=&supplemental_base(); } else { - $env{'form.folderpath'}='default'; + $env{'form.folderpath'}='default'.&escape(&mt('Main '.$crstype.' Documents')). + ':::::'; } } # Store this unless ($toolsflag) { - &Apache::loncommon::store_course_settings($stored_folderpath, - {'pagepath' => 'scalar', - 'folderpath' => 'scalar'}); + if ($allowed) { + &Apache::loncommon::store_course_settings($stored_folderpath, + {'folderpath' => 'scalar'}); + } + my $folderpath; if ($env{'form.folderpath'}) { - my (@folderpath)=split('&',$env{'form.folderpath'}); - $env{'form.foldername'}=&unescape(pop(@folderpath)); - $env{'form.folder'}=pop(@folderpath); - $container='sequence'; - } - if ($env{'form.pagepath'}) { - my (@pagepath)=split('&',$env{'form.pagepath'}); - $env{'form.pagename'}=&unescape(pop(@pagepath)); - $env{'form.folder'}=pop(@pagepath); - $container='page'; - $containertag = '<input type="hidden" name="pagepath" value="" />'. - '<input type="hidden" name="pagesymb" value="" />'; - $pathitem = - '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'. - '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />'. - '<input type="hidden" name="folderpath" value="" />'; + $folderpath = $env{'form.folderpath'}; + my (@folders)=split('&',$env{'form.folderpath'}); + $env{'form.foldername'}=&unescape(pop(@folders)); + if ($env{'form.foldername'} =~ /\:1$/) { + $container = 'page'; + } else { + $container = 'sequence'; + } + $env{'form.folder'}=pop(@folders); } else { - my $folderpath=$env{'form.folderpath'}; - if (!$folderpath) { - if ($env{'form.folder'} eq '' || - $env{'form.folder'} eq 'supplemental') { - $folderpath='default&'. - &escape(&mt('Main '.$crstype.' Documents')); - } + if ($env{'form.folder'} eq '' || + $env{'form.folder'} eq 'supplemental') { + $folderpath='default&'. + &escape(&mt('Main '.$crstype.' Documents')). + ':::::'; } - $containertag = '<input type="hidden" name="folderpath" value="" />'; - $pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />'; } + $containertag = '<input type="hidden" name="folderpath" value="" />'; + $pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />'; if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { $showdoc='/'.$1; } @@ -3430,7 +3329,7 @@ sub handler { @tabids = ('002','ee2','ff2'); } else { @tabids = ('aa1','bb1','cc1','ff1'); - unless ($env{'form.pagepath'}) { + unless ($env{'form.folderpath'} =~ /\:1$/) { unshift(@tabids,'001'); push(@tabids,('dd1','ee1')); } @@ -3439,7 +3338,8 @@ sub handler { $script .= &editing_js($udom,$uname,$supplementalflag). &history_tab_js(). &inject_data_js(). - &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr); + &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr). + &Apache::lonextresedit::extedit_javascript(); $addentries = { onload => "javascript:resize_scrollbox('contentscroll','1','1');", }; @@ -3461,22 +3361,26 @@ sub handler { # Breadcrumbs &Apache::lonhtmlcommon::clear_breadcrumbs(); - unless ($showdoc) { + + if ($showdoc) { + $r->print(&Apache::loncommon::start_page("$crstype documents",undef, + {'force_register' => $showdoc,})); + } elsif ($r->uri eq '/adm/supplemental') { + my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype); + $r->print(&Apache::loncommon::start_page("Supplemental $crstype Content",undef, + {'bread_crumbs' => $brcrum,})); + } else { &Apache::lonhtmlcommon::add_breadcrumb({ href=>"/adm/coursedocs",text=>"$crstype Contents"}); $r->print(&Apache::loncommon::start_page("$crstype Contents", $script, - {'force_register' => $showdoc, - 'add_entries' => $addentries, - }) + {'add_entries' => $addentries} + ) .&Apache::loncommon::help_open_menu('','',273,'RAT') .&Apache::lonhtmlcommon::breadcrumbs( 'Editing '.$crstype.' Contents', 'Docs_Adding_Course_Doc') ); - } else { - $r->print(&Apache::loncommon::start_page("$crstype documents",undef, - {'force_register' => $showdoc,})); } my %allfiles = (); @@ -3577,10 +3481,6 @@ sub handler { 'prev' => 'Preview', 'lnk' => 'Add Link', 'parse' => 'Upload embedded images/multimedia files if HTML file', - 'nd' => 'Upload Document', - 'pm' => 'Published Map', - 'sd' => 'Special Document', - 'mo' => 'More Options', ); # ----------------------------------------------------------------------------- my $fileupload=(<<FIUP); @@ -3604,7 +3504,7 @@ CHBO <a class="LC_menubuttons_link" href="javascript:toggleUpload('ims');"> $lt{'imsf'}</a> $help{'Importing_IMS_Course'} <form name="uploadims" action="/adm/imsimportdocs" method="post" enctype="multipart/form-data" target="IMSimport"> - <fieldset id="uploadimsform" style="display: none;" /> + <fieldset id="uploadimsform" style="display: none;"> <legend>$lt{'imsf'}</legend> $fileupload <br /> @@ -3629,7 +3529,7 @@ IMSFORM <a class="LC_menubuttons_link" href="javascript:toggleUpload('doc');"> $lt{'upfi'}</a> $help{'Uploading_From_Harddrive'} <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data"> - <fieldset id="uploaddocform" style="display: none;" /> + <fieldset id="uploaddocform" style="display: none;"> <legend>$lt{'upfi'}</legend> <input type="hidden" name="active" value="aa" /> $fileupload @@ -3649,17 +3549,17 @@ IMSFORM FUFORM my $importpubform=(<<SEDFFORM); - <a class="LC_menubuttons_link" href="javascript:toggleMap();"> + <a class="LC_menubuttons_link" href="javascript:toggleMap('map');"> $lt{'impm'}</a>$help{'Load_Map'} <form action="/adm/coursedocs" method="post" name="mapimportform"> - <fieldset id="importmapform" style="display: none;" /> + <fieldset id="importmapform" style="display: none;"> <legend>$lt{'impm'}</legend> <input type="hidden" name="active" value="bb" /> $lt{'copm'}<br /> <span class="LC_nobreak"> <input type="text" name="importmap" size="40" value="" onfocus="this.blur();openbrowser('mapimportform','importmap','sequence,page','');" /> - <a href="javascript:openbrowser('mapimportform','importmap','sequence,page','');">$lt{'selm'}</a><br /> + <a href="javascript:openbrowser('mapimportform','importmap','sequence,page','');">$lt{'selm'}</a></span><br /> <input type="submit" name="loadmap" value="$lt{'load'}" /> </fieldset> </form> @@ -3669,30 +3569,12 @@ SEDFFORM { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'" onclick="javascript:groupsearch()" />' => $pathitem."<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" }, { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'" onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" }, { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{lnks}.'" onclick="javascript:open_StoredLinks_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_StoredLinks_Import();'>$lt{'lnks'}</a>" }, - { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap();" />' => $importpubform } + { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap(\'map\');" />' => $importpubform } ); $importpubform = &create_form_ul(&create_list_elements(@importpubforma)); - - my $extresourcesform=(<<ERFORM); - <a class="LC_menubuttons_link" href="javascript:toggleUpload('ext');">$lt{'extr'}</a>$help{'Adding_External_Resource'} - <form action="/adm/coursedocs" method="post" name="newext"> - <fieldset id="uploadextform" style="display: none;" /> - <legend>$lt{'extr'}</legend> - <input type="hidden" name="active" value="aa" /> - $lt{'url'}:<br /> - <input type="text" size="60" name="exturl" id="exturl" value="http://" /> - <input type="button" name="view" value="$lt{'prev'}" onclick="javascript:extUrlPreview('exturl');" /><br /> - $lt{'title'}:<br /> - <input type="text" size="60" name="exttitle" value="$lt{'extr'}" /> - $pathitem - <br /> - <input type="hidden" name="importdetail" value="" /> - <input type="button" value="$lt{'lnk'}" onclick="javascript:setExternal(this.form,0)" /> - </fieldset> - </form> -ERFORM - - + my $extresourcesform = + &Apache::lonextresedit::extedit_form(0,0,undef,undef,$pathitem, + $help{'Adding_External_Resource'}); if ($allowed) { my $folder = $env{'form.folder'}; if ($folder eq '') { @@ -3716,11 +3598,16 @@ HIDDENFORM } # Generate the tabs - my $mode; + my ($mode,$needs_end); if (($supplementalflag) && (!$allowed)) { - &Apache::lonnavdisplay::startContentScreen($r,'supplemental'); + my @folders = split('&',$env{'form.folderpath'}); + unless (@folders > 2) { + &Apache::lonnavdisplay::startContentScreen($r,'supplemental'); + $needs_end = 1; + } } else { $r->print(&startContentScreen(($supplementalflag?'suppdocs':'docs'))); + $needs_end = 1; } # @@ -3749,10 +3636,6 @@ HIDDENFORM } my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_new.sequence'; my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_new.page'; - my $container='sequence'; - if ($env{'form.pagepath'}) { - $container='page'; - } my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container; my $newnavform=(<<NNFORM); @@ -3910,10 +3793,16 @@ NGFFORM my @importdoc = ( - {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="toggleUpload(\'ext\');" />'=>$extresourcesform}, - {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:toggleUpload(\'ims\');" />'=>$imspform}, - {'<img class="LC_noBorder_LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'doc\');" />'=>$fileuploadform, - }); + {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="toggleUpload(\'ext\');" />'=>$extresourcesform} + ); + unless ($container eq 'page') { + push(@importdoc, + {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:toggleUpload(\'ims\');" />'=>$imspform} + ); + } + push(@importdoc, + {'<img class="LC_noBorder_LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'doc\');" />'=>$fileuploadform} + ); $fileuploadform = &create_form_ul(&create_list_elements(@importdoc)); @gradingforma=( @@ -3938,10 +3827,10 @@ my %orderhash = ( 'bb' => ['Published Content',$importpubform], 'cc' => ['Grading Resources',$gradingform], ); -unless ($env{'form.pagepath'}) { +unless ($container eq 'page') { $orderhash{'00'} = ['Newfolder',$newfolderform]; $orderhash{'dd'} = ['Collaboration',$communityform]; - $orderhash{'ee'} = ['Special Documents',$specialdocumentsform]; + $orderhash{'ee'} = ['Special Pages',$specialdocumentsform]; } $hadchanges=0; @@ -3971,7 +3860,6 @@ unless ($env{'form.pagepath'}) { } elsif ($allowed) { $env{'form.folderpath'} = $savefolderpath; } - $env{'form.pagepath'} = ''; $pathitem = '<input type="hidden" name="folderpath" value="'. &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />'; if ($allowed) { @@ -3982,7 +3870,7 @@ unless ($env{'form.pagepath'}) { <a class="LC_menubuttons_link" href="javascript:toggleUpload('suppdoc');"> $lt{'upfi'}</a> $help{'Uploading_From_Harddrive'} <form action="/adm/coursedocs" method="post" name="supuploaddocument" enctype="multipart/form-data"> - <fieldset id="uploadsuppdocform" style="display: none;" /> + <fieldset id="uploadsuppdocform" style="display: none;"> <legend>$lt{'upfi'}</legend> <input type="hidden" name="active" value="ee" /> $fileupload @@ -4011,24 +3899,9 @@ SUPDOCFORM </form> SNFFORM - my $supextform=(<<ERFORM); - <a class="LC_menubuttons_link" href="javascript:toggleUpload('suppext');">$lt{'extr'}</a>$help{'Adding_External_Resource'} - <form action="/adm/coursedocs" method="post" name="newsuppext"> - <fieldset id="uploadsuppextform" style="display: none;" /> - <legend>$lt{'extr'}</legend> - <input type="hidden" name="active" value="ee" /> - $lt{'url'}:<br /> - <input type="text" size="60" name="exturl" id="exturl" value="http://" /> - <input type="button" name="view" value="$lt{'prev'}" onclick="javascript:extUrlPreview('exturl');" /><br /> - $lt{'title'}:<br /> - <input type="text" size="60" name="exttitle" value="$lt{'extr'}" /> - <br /> - $pathitem - <input type="hidden" name="importdetail" value="" /> - <input type="button" value="$lt{'lnk'}" onclick="javascript:setExternal(this.form,0)" /> - </fieldset> - </form> -ERFORM + my $supextform = + &Apache::lonextresedit::extedit_form(1,0,undef,undef,$pathitem, + $help{'Adding_External_Resource'}); my $supnewsylform=(<<SNSFORM); <form action="/adm/coursedocs" method="post" name="supnewsyl"> @@ -4060,7 +3933,7 @@ my @specialdocs = ( =>$supnewaboutmeform}, ); my @supimportdoc = ( - {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="toggleUpload(\'suppext\')" />' + {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:toggleUpload(\'suppext\')" />' =>$supextform}, {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'suppdoc\');" />' =>$supupdocform}, @@ -4070,7 +3943,7 @@ $supupdocform = &create_form_ul(&create my %suporderhash = ( '00' => ['Supnewfolder', $supnewfolderform], 'ee' => ['Import Content',$supupdocform], - 'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))] + 'ff' => ['Special Pages',&create_form_ul(&create_list_elements(@specialdocs))] ); if ($supplementalflag) { my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, @@ -4087,7 +3960,9 @@ my %suporderhash = ( } } - $r->print(&endContentScreen()); + if ($needs_end) { + $r->print(&endContentScreen()); + } if ($allowed) { $r->print(' @@ -4153,12 +4028,9 @@ sub decompression_info { my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; my $container='sequence'; my ($pathitem,$hiddenelem); - my @hiddens = ('newidx','comment','position'); - if ($env{'form.pagepath'}) { + my @hiddens = ('newidx','comment','position','folderpath'); + if ($env{'form.folderpath'} =~ /\:1$/) { $container='page'; - $pathitem = 'pagepath'; - } else { - $pathitem = 'folderpath'; } unshift(@hiddens,$pathitem); foreach my $item (@hiddens) { @@ -4352,7 +4224,7 @@ sub generate_edit_table { $activetab = $env{'form.active'}; } my $backicon = $iconpath.'clickhere.gif'; - my $backtext = &mt('To Overview'); + my $backtext = &mt('Exit'); $form = '<div class="LC_Box" style="margin:0;">'. '<ul id="navigation'.$tid.'" class="LC_TabContent">'."\n". '<li class="goback">'. @@ -4445,14 +4317,11 @@ sub editing_js { my $crstype = &Apache::loncommon::course_type(); my $docs_folderpath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'},'<>&"'); - my $docs_pagepath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.pagepath'},'<>&"'); my $main_container_page; - if ($docs_folderpath eq '') { - if ($docs_pagepath ne '') { - $main_container_page = 1; - } + if (&HTML::Entities::decode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'}) =~ /\:1$/) { + $main_container_page = 1; } - my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents'; + my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents%3A%3A%3A%3A%3A'; my $toplevelsupp = &supplemental_base(); my $backtourl = '/adm/navmaps'; @@ -4460,15 +4329,14 @@ sub editing_js { $backtourl = '/adm/supplemental'; } - my $fieldsets = "'ext','doc','ims'"; + my $fieldsets = "'ext','doc'"; + unless ($main_container_page) { + $fieldsets .=",'ims'"; + } if ($supplementalflag) { $fieldsets = "'suppext','suppdoc'"; } - my $urlregexp = <<'ENDREGEXP'; -/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i -ENDREGEXP - return <<ENDNEWSCRIPT; function makenewfolder(targetform,folderseq) { var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}'); @@ -4486,20 +4354,6 @@ function makenewpage(targetform,folderse } } -function editext(residx) { - if (document.getElementById('uploadext'+residx)) { - var curr = document.getElementById('uploadext'+residx).style.display; - if (curr == 'none') { - disp = 'block'; - } else { - disp = 'none'; - } - document.getElementById('uploadext'+residx).style.display=disp; - } - resize_scrollbox('contentscroll','1','1'); - return; -} - function makeexamupload() { var title=prompt('$lt{"p_mxu"}'); if (title) { @@ -4580,28 +4434,19 @@ function toggleUpload(caller) { return; } -function toggleMap() { +function toggleMap(caller) { var disp = 'none'; - var curr = document.getElementById('importmapform').style.display; - if (curr == 'none') { - disp='block'; - } - document.getElementById('importmapform').style.display=disp; - resize_scrollbox('contentscroll','1','1'); - return; -} - - -function extUrlPreview(caller) { - if (document.getElementById(caller)) { - var url = document.getElementById(caller).value; - var regexp = $urlregexp; - if (regexp.test(url)) { - openMyModal(url,500,400,'yes'); - } else { - alert("$lt{'invurl'}"); + if (document.getElementById('importmapform')) { + if (caller == 'map') { + var curr = document.getElementById('importmapform').style.display; + if (curr == 'none') { + disp='block'; + } } + document.getElementById('importmapform').style.display=disp; + resize_scrollbox('contentscroll','1','1'); } + return; } function makeims(imsform) { @@ -4617,89 +4462,40 @@ function makeims(imsform) { imsform.submit(); } -function setExternal(extform,residx) { - var title=extform.exttitle.value; - if (!String.trim) { - String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");}; } - var url=extform.exturl.value; - var regexp = $urlregexp; - if (title == null || title.trim()=="") { - alert("$lt{'titbl'}"); - extform.exttitle.focus(); - return; - } - if (regexp.test(url)) { - url = escape(url); - if (residx > 0) { - eval("extform.importdetail.value=title+'='+url+'='+residx;extform.submit();"); - } else { - eval("extform.importdetail.value=title+'='+url;extform.submit();"); - } - } else { - alert("$lt{'invurl'}"); - extform.exturl.focus(); - return; - } -} - -function changename(folderpath,index,oldtitle,container,pagesymb) { +function changename(folderpath,index,oldtitle) { var title=prompt('$lt{"p_chn"}',oldtitle); if (title) { this.document.forms.renameform.markcopy.value=-1; this.document.forms.renameform.title.value=title; this.document.forms.renameform.cmd.value='rename_'+index; -if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; -} -if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; -} +this.document.forms.renameform.folderpath.value=folderpath; this.document.forms.renameform.submit(); } } -function removeres(folderpath,index,oldtitle,container,pagesymb,skip_confirm) { +function removeres(folderpath,index,oldtitle,skip_confirm) { if (skip_confirm || confirm('$lt{"p_rmr1"}\\n\\n$lt{"p_rmr2a"} "'+oldtitle+'" $lt{"p_rmr2b"}')) { this.document.forms.renameform.markcopy.value=-1; this.document.forms.renameform.cmd.value='del_'+index; -if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; -} -if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; -} +this.document.forms.renameform.folderpath.value=folderpath; this.document.forms.renameform.submit(); } } -function cutres(folderpath,index,oldtitle,container,pagesymb,folder,skip_confirm) { +function cutres(folderpath,index,oldtitle,container,folder,skip_confirm) { if (skip_confirm || confirm('$lt{"p_ctr1a"}\\n$lt{"p_ctr1b"}\\n\\n$lt{"p_ctr2a"} "'+oldtitle+'" $lt{"p_ctr2b"}')) { this.document.forms.renameform.cmd.value='cut_'+index; this.document.forms.renameform.markcopy.value=index; this.document.forms.renameform.copyfolder.value=folder+'.'+container; -if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; -} -if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; -} +this.document.forms.renameform.folderpath.value=folderpath; this.document.forms.renameform.submit(); } } -function markcopy(folderpath,index,oldtitle,container,pagesymb,folder) { +function markcopy(folderpath,index,oldtitle,container,folder) { this.document.forms.renameform.markcopy.value=index; this.document.forms.renameform.copyfolder.value=folder+'.'+container; -if (container == 'sequence') { this.document.forms.renameform.folderpath.value=folderpath; -} -if (container == 'page') { -this.document.forms.renameform.pagepath.value=folderpath; -this.document.forms.renameform.pagesymb.value=pagesymb; -} this.document.forms.renameform.submit(); } @@ -4797,9 +4593,6 @@ function showPage(current, pageId, nav, toggleMap(); if (nav == 'mainnav') { var storedpath = "$docs_folderpath"; - if (storedpath == '') { - storedpath = "$docs_pagepath"; - } var storedpage = "$main_container_page"; var reg = new RegExp("^supplemental"); if (pageId == 'mainCourseDocuments') {