--- loncom/interface/londocs.pm 2006/06/30 00:59:00 1.235 +++ loncom/interface/londocs.pm 2006/07/21 00:21:28 1.243 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.235 2006/06/30 00:59:00 albertel Exp $ +# $Id: londocs.pm,v 1.243 2006/07/21 00:21:28 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,6 @@ use HTML::Entities; use GDBM_File; use Apache::lonlocal; use Cwd; -use lib '/home/httpd/lib/perl/'; use LONCAPA; my $iconpath; @@ -961,6 +960,9 @@ sub breadcrumbs { '&markedcopy_title='. &escape($env{'form.markedcopy_title'}); } + my $randompick=-1; + my $isencrypted=0; + my $ishidden=0; while (@folders) { my $folder=shift(@folders); my $foldername=shift(@folders); @@ -968,17 +970,25 @@ sub breadcrumbs { $folderpath.=$folder.'&'.$foldername; my $url='/adm/coursedocs?folderpath='. &escape($folderpath); + my $name=&unescape($foldername); +# randompick number, hidden, encrypted is appended with ":"s to the foldername + $name=~s/\:(\d*)\:(\w*)\:(\w*)$//; + if ($1 ne '') { + $randompick=$1; + } else { + $randompick=-1; + } + if ($2) { $ishidden=1; } + if ($3) { $isencrypted=1; } &Apache::lonhtmlcommon::add_breadcrumb( {'href'=>$url.$cpinfo, - 'title'=>&unescape($foldername), + 'title'=>$name, 'text'=>''. - &unescape($foldername).'' + $name.'' }); - - } - return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', - 'LC_docs_path'); + return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', + 'LC_docs_path'),$randompick,$ishidden,$isencrypted); } sub editor { @@ -1003,7 +1013,8 @@ sub editor { $env{'form.markedcopy_title'}=$title; $env{'form.markedcopy_url'}=$url; } - $r->print(&breadcrumbs($folder)); + my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted)=&breadcrumbs($folder); + $r->print($breadcrumbtrail); if ($fatal) { $r->print('

'.$errtext.'

'); } else { @@ -1163,6 +1174,11 @@ sub editor { $Apache::lonratedt::order[$idx]]= $comment.':'.join(':',@rrest); } +# Devalidate title cache + my $renamed_url=$rrest[0]; +# Has the :-escaping + $renamed_url=~s/\&colon\;/\:/g; + &Apache::lonnet::devalidate_title_cache($renamed_url); } # Store the changed version ($errtext,$fatal)=&storemap($coursenum,$coursedom, @@ -1175,6 +1191,7 @@ sub editor { # Group import/search if ($env{'form.importdetail'}) { my @imports; +# &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'}); foreach (split(/\&/,$env{'form.importdetail'})) { if (defined($_)) { my ($name,$url)=split(/\=/,$_); @@ -1217,6 +1234,16 @@ sub editor { # ---------------------------------------------------------------- Print screen my $idx=0; my $shown=0; + if (($ishidden) || ($isencrypted) || ($randompick>=0)) { + $r->print('

'.&mt('Parameters').':

'); + } + if ($randompick>=0) { + $r->print('

'.&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.').'

'); + } $r->print(''); foreach (@Apache::lonratedt::order) { my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); @@ -1585,7 +1612,11 @@ END } elsif ($url=~m|^/ext/|) { $url='/adm/wrapper'.$url; } - $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); + if (&Apache::lonnet::symbverify($symb,$url)) { + $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); + } else { + $url=''; + } if ($container eq 'page') { my $symb=$env{'form.pagesymb'}; @@ -1598,7 +1629,14 @@ END my $foldername=&escape($foldertitle); my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $folderpath.='&' }; - $folderpath.=$folderarg.'&'.$foldername; +# Append randompick number, hidden, and encrypted with ":" to foldername, +# so it gets transferred between levels + $folderpath.=$folderarg.'&'.$foldername.':'.(&Apache::lonratedt::getparameter($orderidx, + 'parameter_randompick'))[0] + .':'.((&Apache::lonratedt::getparameter($orderidx, + 'parameter_hiddenresource'))[0]=~/^yes$/i) + .':'.((&Apache::lonratedt::getparameter($orderidx, + 'parameter_encrypturl'))[0]=~/^yes$/i); $url.='folderpath='.&escape($folderpath).$cpinfo; $parameterset='"; + ""; if (($allowed) && ($folder!~/^supplemental/)) { my %lt=&Apache::lonlocal::texthash( 'hd' => 'Hidden', @@ -2175,7 +2214,7 @@ sub handler { $showdoc='/'.$1; } unless ($showdoc) { # got called from remote - if (($env{'form.folder'}=~/^default_/) || + if (($env{'form.folder'}=~/^(?:group|default)_/) || ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) { $forcestandard = 1; } @@ -2726,7 +2765,7 @@ sub editing_js { function makenewfolder(targetform,folderseq) { var foldername=prompt('Name of New Folder','New Folder'); if (foldername) { - targetform.importdetail.value=foldername+"="+folderseq; + targetform.importdetail.value=escape(foldername)+"="+folderseq; targetform.submit(); } } @@ -2734,7 +2773,7 @@ function makenewfolder(targetform,folder function makenewpage(targetform,folderseq) { var pagename=prompt('Name of New Page','New Page'); if (pagename) { - targetform.importdetail.value=pagename+"="+folderseq; + targetform.importdetail.value=escape(pagename)+"="+folderseq; targetform.submit(); } } @@ -2748,7 +2787,7 @@ function makeexamupload() { var title=prompt('Listed Title for the Uploaded Score'); if (title) { this.document.forms.newexamupload.importdetail.value= - title+'=/res/lib/templates/examupload.problem'; + escape(title)+'=/res/lib/templates/examupload.problem'; this.document.forms.newexamupload.submit(); } } @@ -2757,7 +2796,7 @@ function makesmppage() { var title=prompt('Listed Title for the Page'); if (title) { this.document.forms.newsmppg.importdetail.value= - title+'=/adm/$udom/$uname/$now/smppg'; + escape(title)+'=/adm/$udom/$uname/$now/smppg'; this.document.forms.newsmppg.submit(); } } @@ -2766,7 +2805,7 @@ function makesmpproblem() { var title=prompt('Listed Title for the Problem'); if (title) { this.document.forms.newsmpproblem.importdetail.value= - title+'=/res/lib/templates/simpleproblem.problem'; + escape(title)+'=/res/lib/templates/simpleproblem.problem'; this.document.forms.newsmpproblem.submit(); } } @@ -2775,7 +2814,7 @@ function makedropbox() { var title=prompt('Listed Title for the Drop Box'); if (title) { this.document.forms.newdropbox.importdetail.value= - title+'=/res/lib/templates/DropBox.problem'; + escape(title)+'=/res/lib/templates/DropBox.problem'; this.document.forms.newdropbox.submit(); } } @@ -2784,26 +2823,26 @@ function makebulboard() { var title=prompt('Listed Title for the Bulletin Board'); if (title) { this.document.forms.newbul.importdetail.value= - title+'=/adm/$udom/$uname/$now/bulletinboard'; + escape(title)+'=/adm/$udom/$uname/$now/bulletinboard'; this.document.forms.newbul.submit(); } } function makeabout() { - var user=prompt("Enter user\@domain for User's 'About Me' Page"); + var user=prompt("Enter user:domain for User's 'About Me' Page"); if (user) { var comp=new Array(); - comp=user.split('\@'); + comp=user.split(':'); if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) { if ((comp[0]) && (comp[1])) { this.document.forms.newaboutsomeone.importdetail.value= - 'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme'; + 'About '+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme'; this.document.forms.newaboutsomeone.submit(); } else { - alert("Not a valid user\@domain"); + alert("Not a valid user:domain"); } } else { - alert("Please enter both user and domain in the format user\@domain"); + alert("Please enter both user and domain in the format user:domain"); } } }
$title".($url?"":'').$title. + ($url?'':' '.&mt('(re-initialize course to access)').'')."