--- loncom/interface/londocs.pm 2009/01/30 11:39:38 1.332 +++ loncom/interface/londocs.pm 2009/03/03 16:57:24 1.350 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.332 2009/01/30 11:39:38 tempelho Exp $ +# $Id: londocs.pm,v 1.350 2009/03/03 16:57:24 tempelho Exp $ # # Copyright Michigan State University Board of Trustees # @@ -133,7 +133,7 @@ sub dumpbutton { sub clean { my ($title)=@_; $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; - return $title; + return $title; } @@ -175,8 +175,8 @@ sub dumpcourse { my $fail=0; for (my $i=0;$i<$#dirs;$i++) { $makepath.='/'.$dirs[$i]; - unless (-e $makepath) { - unless(mkdir($makepath,0777)) { $fail=1; } + unless (-e $makepath) { + unless(mkdir($makepath,0777)) { $fail=1; } } } $r->print('
'.$item.' => '.$newfilename.': '); @@ -759,7 +759,7 @@ sub replicate_content { if ($caller eq 'templateupload') { $url = $symb; $url =~ s#//#/#g; - } else { + } else { ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); } my $content; @@ -799,9 +799,9 @@ sub replicate_content { $$message = 'Could not render '.$url.' server message - '.$rtncode."
\n"; } } elsif ($caller eq 'noedit') { -# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. +# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. $repstatus = 'ok'; - $content = 'Not the owner of this resource'; + $content = 'Not the owner of this resource'; } if ($repstatus eq 'ok') { print $copiedfile $content; @@ -852,8 +852,8 @@ sub extract_media { } } if ($caller eq 'resource') { - my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; - my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url); + my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; + my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url); $embed_content = &Apache::lonnet::getfile($embed_path); unless ($embed_content eq -1) { $repstatus = 'ok'; @@ -921,7 +921,7 @@ sub group_import { while (@files) { my ($name, $url, $residx) = @{ shift(@files) }; - if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) + if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) && ($caller eq 'londocs') && (!&Apache::lonnet::stat_file($url))) { @@ -944,7 +944,7 @@ sub group_import { } } if ($url) { - if (!$residx + if (!$residx || defined($LONCAPA::map::zombies[$residx])) { $residx = &LONCAPA::map::getresidx($url,$residx); push(@LONCAPA::map::order, $residx); @@ -953,7 +953,7 @@ sub group_import { if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; } $url = &LONCAPA::map::qtunescape($url); $name = &LONCAPA::map::qtunescape($name); - $LONCAPA::map::resources[$residx] = + $LONCAPA::map::resources[$residx] = join(':', ($name, $url, $ext, 'normal', 'res')); } } @@ -984,9 +984,9 @@ sub breadcrumbs { my $url='/adm/coursedocs?folderpath='. &escape($folderpath); my $name=&unescape($foldername); -# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername +# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//; - if ($1 ne '') { + if ($1 ne '') { $randompick=$1; } else { $randompick=-1; @@ -1125,7 +1125,7 @@ sub docs_change_log { foreach my $key (@changes) { $wholeentry.=':'.$docslog{$id}{'logentry'}{$key}; } - if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } + if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } } my $count = 0; my $time = @@ -1223,7 +1223,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(:|:)//https(:|:)//}{https$2//}; @@ -1327,7 +1327,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); @@ -1338,7 +1338,7 @@ sub do_paste_from_buffer { $db_name =~ s{_\d*$ }{_$now}x; my $result=&Apache::lonnet::put($db_name,\%contents, $coursedom,$coursenum); - $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x; + $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x; $title=&mt('Copy of').' '.$title; } } @@ -1352,7 +1352,7 @@ sub do_paste_from_buffer { if ($folder =~ /^supplemental/) { $title = $env{'docs.markedcopy_supplemental'}; } else { - (undef,undef,$title) = + (undef,undef,$title) = &parse_supplemental_title($env{'docs.markedcopy_supplemental'}); } } else { @@ -1376,7 +1376,7 @@ sub uniqueness_check { $url=&LONCAPA::map::qtescape($url); if ($newurl eq $url) { $unique = 0; - last; + last; } } return $unique; @@ -1430,7 +1430,7 @@ sub handle_edit_cmd { &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); splice(@LONCAPA::map::order, $idx, 1); - } elsif ($cmd eq 'up' + } elsif ($cmd eq 'up' && ($idx) && (defined($LONCAPA::map::order[$idx-1]))) { @LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1]; @@ -1497,7 +1497,7 @@ sub editor { } if ($env{'form.pastemarked'}) { - my $paste_res = + my $paste_res = &do_paste_from_buffer($coursenum,$coursedom,$folder); if ($paste_res eq 'ok') { ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container); @@ -1660,7 +1660,7 @@ sub process_file_upload { '; $phase_status = 'phasetwo'; - $$upload_output .= + $$upload_output .= 'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.
'. &Apache::loncommon::ask_for_embedded_content( '/adm/coursedocs',$state,$allfiles,$codebase); @@ -1763,12 +1763,12 @@ sub entryline { my $incindex=$index+1; my $selectbox=''; if (($folder!~/^supplemental/) && - ($#LONCAPA::map::order>0) && + ($#LONCAPA::map::order>0) && ((split(/\:/, - $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] - ne '') && + $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] + ne '') && ((split(/\:/, - $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] + $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] ne '')) { $selectbox= ''. @@ -1805,8 +1805,8 @@ sub entryline { } } } - if ($url=~/^\/res\/lib\/templates\//) { - $nocopy=1; + if ($url=~/^\/res\/lib\/templates\//) { + $nocopy=1; $nocut=1; } my $copylink=' '; @@ -1899,6 +1899,7 @@ END } my $orig_url = $url; + $orig_url=~s{http(:|:)//https(:|:)//}{https$2//}; my $external = ($url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/}); if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) { my $symb=&Apache::lonnet::symbclean( @@ -1920,7 +1921,7 @@ END } elsif ($url!~/\.(sequence|page)$/) { $url='/adm/coursedocs/showdoc'.$url; } - } elsif ($url=~m|^/ext/|) { + } elsif ($url=~m|^/ext/|) { $url='/adm/wrapper'.$url; $external = 1; } @@ -1941,7 +1942,7 @@ END my $foldername=&escape($foldertitle); my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $folderpath.='&' }; -# Append randompick number, hidden, and encrypted with ":" to foldername, +# Append randompick number, hidden, and encrypted with ":" to foldername, # so it gets transferred between levels $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx, 'parameter_randompick'))[0] @@ -1961,7 +1962,7 @@ END my $ro_set= ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); $rand_order_text =' -'; +'; } if ($ispage) { my $pagename=&escape($pagetitle); @@ -2252,7 +2253,7 @@ sub checkversions { if ($haschanged) { if (&Apache::lonnet::put('resourceversions',\%newsetversions, $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') { + $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') { $r->print('

'.&mt('Your Version Settings have been Saved').'

'); } else { $r->print('

'.&mt('An Error Occured while Attempting to Save your Version Settings').'

'); @@ -2404,7 +2405,7 @@ ENDHEADERS $entries_per_col = $num_entries/4 + 1; } my $entries_count = 0; - $r->print(''); + $r->print(''); my $cols_output = 1; for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { my $url=$root.'.'.$prevvers.'.'.$extension; @@ -2483,7 +2484,7 @@ sub changewarning { $message='Changes will become active for your current session after [_1], or the next time you log in.'; } $r->print("\n\n". -''."\n". +''."\n". '
'. '

'. @@ -2537,7 +2538,7 @@ sub handler { 'Option_Response_Simple'); $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic( 'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages'); - $help{'My Personal Info'} = &Apache::loncommon::help_open_topic( + $help{'My Personal Information Page'} = &Apache::loncommon::help_open_topic( 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); $help{'Group Files'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); @@ -2615,15 +2616,15 @@ sub handler { $showdoc='/'.$1; } unless ($showdoc) { # got called from remote - if (($env{'form.folder'}=~/^(?:group|default)_/) || + if (($env{'form.folder'}=~/^(?:group|default)_/) || ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) { $forcestandard = 1; } $forcesupplement=($env{'form.folder'}=~/^supplemental_/); - if ($allowed) { + if ($allowed) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']); - $script=&Apache::lonratedt::editscript('simple'); + $script=&Apache::lonratedt::editscript('simple'); } } else { # got called in sequence from course $allowed=0; @@ -2633,7 +2634,7 @@ sub handler { my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'}; my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'}; -# get personal data +# get personal data my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom)); @@ -2659,7 +2660,7 @@ sub handler { if ($allowed) { if (($env{'form.uploaddoc.filename'}) && ($env{'form.cmd'}=~/^upload_(\w+)/)) { -# Process file upload - phase one - upload and parse primary file. +# Process file upload - phase one - upload and parse primary file. undef($hadchanges); $upload_result = &process_file_upload(\$upload_output,$coursenum, $coursedom,\%allfiles, @@ -2684,8 +2685,8 @@ sub handler { $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx); $origname{$i} = &unescape($env{'form.embedded_orig_'.$i}); if (exists($env{'form.embedded_codebase_'.$i})) { - $javacodebase = &unescape($env{'form.embedded_codebase_'.$i}); - $origname{$i} =~ s#^\Q$javacodebase\E/##; + $javacodebase = &unescape($env{'form.embedded_codebase_'.$i}); + $origname{$i} =~ s#^\Q$javacodebase\E/##; } my @attributes = (); if ($env{'form.embedded_attrib_'.$i} =~ /:/) { @@ -2722,7 +2723,7 @@ sub handler { } if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) { } - $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi; + $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi; } if (exists($codebase{$item})) { $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs @@ -2734,7 +2735,7 @@ sub handler { my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult); } else { - &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus); + &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus); } } } @@ -2760,15 +2761,15 @@ 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', + 'bull' => 'Discussion Board', + 'mypi' => 'My Personal Information Page', 'grpo' => 'Group Files', 'rost' => 'Course Roster', - 'abou' => 'About User', + 'abou' => 'Personal Information Page for a User', 'imsf' => 'Import IMS package', 'file' => 'File', 'title' => 'Title', @@ -2832,7 +2833,7 @@ FUFORM

$lt{'copm'}

- $help{'Load_Map'} @@ -2872,18 +2873,49 @@ ERFORM $containertag = ''; $uploadtag = ''; } - - $r->print(&generate_admin_options($containertag,$uploadtag,\%lt,\%help,\%env)); - $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc', - &mt('Editing the Table of Contents for your '.$type))); + $r->print(< + + + + + $containertag + +

+ + $uploadtag +
+HIDDENFORM + } +# --------------------------------------------------------- Main tab structure + my $activeClass = 1; + $r->print('
'); # --------------------------------------------------------- Standard documents - $r->print(''); - if (($standard) && ($allowed) && (!$forcesupplement)) { - $r->print(' - -'."\n". -'
'); -# '

'.&mt('Main Course Documents'). -# ($allowed?' '.$help{'Main_Course_Documents'}:'').'

'); + my $active = 'style="display: none;"'; + if($activeClass == 0){ + $active = 'style="display: block;"'; + } + $r->print('
'); + $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc', + &mt('Editing the Table of Contents for your '.$type))); my $folder=$env{'form.folder'}; if ($folder eq '' || $folder eq 'supplemental') { $folder='default'; @@ -2897,16 +2929,6 @@ ERFORM } else { #$postexec='self.close();'; } - $hadchanges=0; - my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed, - $upload_output,$type); - if ($error) { - $r->print('

'.$error.'

'); - } - if ($hadchanges) { - &mark_hash_old(); - } - &changewarning($r,$postexec); my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. '.sequence'; my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. @@ -2968,13 +2990,13 @@ NSPROBFORM my $newdropboxform=(< - $uploadtag + $uploadtag - + - - + + NDBFORM my $newexuploadform=(< - $help{'My Personal Info'} + $help{'My Personal Information Page'} NAMFORM @@ -3037,38 +3059,11 @@ NASOFORM NROSTFORM - $r->print(< - -
-$fileuploadform - -$simpleeditdefaultform -
-$recoverform -ENDFORM - unless ($env{'form.pagepath'}) { - $r->print(< -$extresourcesform -
-$imspform -ENDFORM - } - $r->print('
'); unless ($env{'form.pagepath'}) { my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); - - my $newpageform=(< @@ -3117,73 +3112,56 @@ NSYLFORM NGFFORM - - my $specialdocumentsform=(< -$newfolderform -
-$newpageform -
-$newsylform -
-$newnavform -
-$newsmppageform -
-$newsmpproblemform -
-$newdropboxform -
-$newexuploadform -
-$newbulform -
-$newaboutmeform -
-$newaboutsomeoneform -
-$newgroupfileform -
-$newrosterform -ENDFORM - -$r->print($specialdocumentsform); + $specialdocumentsform="
$newfolderform
$newpageform
$newsylform
$newgroupfileform"; + } + $specialdocumentsform.="
$newnavform
$newsmppageform +
$newsmpproblemform
$newdropboxform +
$newexuploadform
$newbulform +
$newaboutmeform
$newaboutsomeoneform +
$newrosterform"; +if($env{'form.pagepath'}) { + $specialdocumentsform="
$newsmpproblemform
$newexuploadform"; +} my %orderhash = ( 'aa' => 'New Document', 'bb' => 'Published Documents', 'cc' => 'Special Documents', 'dd' => 'More Options', - 'zz' => 'Hide all Option', + 'zz' => 'Hide all Options', ); my %namehash = ( 'New Document' => $fileuploadform, 'Published Documents' => $simpleeditdefaultform, 'Special Documents' => $specialdocumentsform, 'More Options' => $extresourcesform.'
'.$imspform.'
'.$recoverform, - 'drei' => 'dr', ); -my $varcd = 'Course Documents'; -$r->print(&generate_edit_table($varcd,\%namehash,\%orderhash)); +my $tid='1'; +my $content='content'; +my $navigation='navigation'; +my $varcd = 'Main Course Documents'; +$r->print(&generate_edit_table($tid,$content,$navigation,$varcd,\%namehash,\%orderhash)); + $hadchanges=0; + my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type); + if ($error) { + $r->print('

'.$error.'

'); + } + if ($hadchanges) { + &mark_hash_old(); + } - } + &changewarning($r,''); +$r->print(''); if ($env{'form.pagepath'}) { - $r->print(< -$newexuploadform -ENDBLOCK } - $r->print('
'); -#$r->print(&generate_edit_table(\%namehash,\%orderhash)); - $r->print(''); } # ----------------------------------------------------- Supplemental documents if (!$forcestandard) { - $r->print(''); -# '

'.&mt('Supplemental Course Documents'). -# ($allowed?' '.$help{'Supplemental'}:'').'

'); + my $active = 'style="display: none;"'; + if($activeClass == 1){ + $active = 'style="display: block;"'; + } + $r->print('
'); my $folder=$env{'form.folder'}; unless ($folder=~/^supplemental/) { $folder='supplemental'; @@ -3193,10 +3171,6 @@ ENDBLOCK $env{'form.folderpath'} = 'supplemental&'. &escape(&mt('Supplemental '.$type.' Documents')); } - my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type); - if ($error) { - $r->print('

'.$error.'

'); - } if ($allowed) { my $folderseq= '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time. @@ -3270,35 +3244,41 @@ SNSFORM value="$plainname=/adm/$udom/$uname/aboutme" /> - $help{'My Personal Info'} + $help{'My Personal Information Page'} SNAMFORM - $r->print(< -
  • $lt{'nd'}
  • -
  • $lt{'sd'}
  • -
  • $lt{'hao'}
  • - - - - -
    -$supupdocform - -$supnewfolderform -
    -$supnewextform -
    -$supnewsylform -
    -$supnewaboutmeform -
    -ENDSUPFORM + + +my %suporderhash = ( + 'ee' => 'New Document', + 'ff' => 'Special Documents', + 'zz' => 'Hide all Options', + ); + +my %supnamehash = ( + 'New Document' => $supupdocform, + 'Special Documents' => $supnewfolderform.'
    '.$supnewextform.'
    '.$supnewsylform.'
    '.$supnewaboutmeform, + ); + +my $tid='2'; +my $content='content'; +my $navigation='navigation'; +my $varscd = 'Supplemental Course Documents'; + +$r->print(&generate_edit_table($tid,$content,$navigation,$varscd,\%supnamehash,\%suporderhash)); +my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type); + if ($error) { + $r->print('

    '.$error.'

    '); } - } - $r->print(''); +$r->print('
    '); + } + } +$r->print(''); +$r->print('
    '); if ($allowed) { $r->print('
    @@ -3308,7 +3288,6 @@ ENDSUPFORM
    '); } - } else { unless ($upload_result eq 'phasetwo') { # -------------------------------------------------------- This is showdoc mode @@ -3324,24 +3303,18 @@ ENDSUPFORM } sub generate_admin_options { - my ($containertag,$uploadtag,$lt_ref,$help_ref,$env_ref) = @_; - my %lt = %{$lt_ref}; + my ($containertag,$uploadtag,$help_ref,$env_ref) = @_; + my %lt=&Apache::lonlocal::texthash( + 'vc' => 'Verify Content', + 'cv' => 'Check/Set Resource Versions', + 'ls' => 'List Symbs', + 'sl' => 'Show Log' + ); my %help = %{$help_ref}; my %env = %{$env_ref}; my $dumpbut=&dumpbutton(); my $exportbut=&exportbutton(); return (< - - - - - $containertag - -
    - - $uploadtag -
    • @@ -3365,35 +3338,34 @@ sub generate_admin_options {
    -
     
    + ENDOPTIONFORM } sub generate_edit_table { - my ($varcd,$namehash_ref,$orderhash_ref) = @_; - my %namehash = %{$namehash_ref}; #name verlinkt mit id - my %orderhash = %{$orderhash_ref}; #name mit kürzel verlinkt mit name + my ($tid,$content,$navigation,$varcd,$namehash_ref,$orderhash_ref) = @_; + my %namehash = %{$namehash_ref}; + my %orderhash = %{$orderhash_ref}; my $form; - #foreach my $id (keys(%tablehash)){ - $form = '

    '.&mt('Upload '.$varcd).'

    '; - - $form .= '