--- loncom/interface/londocs.pm 2012/07/31 23:38:13 1.484.2.7 +++ loncom/interface/londocs.pm 2012/12/13 00:51:34 1.484.2.12 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.484.2.7 2012/07/31 23:38:13 raeburn Exp $ +# $Id: londocs.pm,v 1.484.2.12 2012/12/13 00:51:34 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -322,7 +322,6 @@ sub breadcrumbs { @folders=split('&',$env{'form.folderpath'}); } my $folderpath; - my $cpinfo=''; my $plain=''; my $randompick=-1; my $isencrypted=0; @@ -355,7 +354,7 @@ sub breadcrumbs { $name = &mt('Supplemental '.$crstype.' Content'); } &Apache::lonhtmlcommon::add_breadcrumb( - {'href'=>$url.$cpinfo, + {'href'=>$url, 'title'=>$name, 'text'=>$name, 'no_mt'=>1, @@ -369,7 +368,7 @@ sub breadcrumbs { } sub log_docs { - return &Apache::lonnet::instructor_log('docslog',@_); + return &Apache::lonnet::write_log('course','docslog',@_); } { @@ -1744,7 +1743,7 @@ sub handle_edit_cmd { sub editor { my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype, - $supplementalflag,$orderhash,$iconpath)=@_; + $supplementalflag,$orderhash,$iconpath,$uploadtag)=@_; my $container= ($env{'form.pagepath'}) ? 'page' : 'sequence'; @@ -1900,7 +1899,8 @@ sub editor { unless ($name) { $name=(split(/\//,$url))[-1]; } unless ($name) { $idx++; next; } $output .= &entryline($idx,$name,$url,$folder,$allowed,$res, - $coursenum,$crstype); + $coursenum,$coursedom,$crstype, + $uploadtag,$supplementalflag); $idx++; $shown++; } @@ -2117,7 +2117,8 @@ sub is_supplemental_title { # --------------------------------------------------------------- An entry line sub entryline { - my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$crstype)=@_; + my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom, + $crstype,$uploadtag,$supplementalflag)=@_; my ($foldertitle,$pagetitle,$renametitle); if (&is_supplemental_title($title)) { ($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title); @@ -2131,7 +2132,6 @@ sub entryline { my $orderidx=$LONCAPA::map::order[$index]; - $renametitle=~s/\\/\\\\/g; $renametitle=~s/\"\;/\\\"/g; $renametitle=~s/ /%20/g; @@ -2150,9 +2150,18 @@ sub entryline { $type = $container = 'page'; $esc_path=&escape($env{'form.pagepath'}); $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"'); - $symb=&escape($env{'form.pagesymb'}); } - my $cpinfo=''; + if (!$supplementalflag && $residx) { + my $currurl = $url; + $currurl =~ s{^http(|s)(:|:)//}{/adm/wrapper/ext/}; + 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; if ($allowed) { my $incindex=$index+1; my $selectbox=''; @@ -2175,15 +2184,23 @@ sub entryline { } $selectbox.=''; } - my %lt=&Apache::lonlocal::texthash( + %lt=&Apache::lonlocal::texthash( 'up' => 'Move Up', 'dw' => 'Move Down', 'rm' => 'Remove', 'ct' => 'Cut', 'rn' => 'Rename', - 'cp' => 'Copy'); + 'cp' => 'Copy', + 'ex' => 'External Resource', + 'ed' => 'Edit', + 'pr' => 'Preview', + 'sv' => 'Save', + 'ul' => 'URL', + 'ti' => 'Title', + ); my $nocopy=0; my $nocut=0; + my $noremove=0; if ($url=~ m{^/res/.+\.(page|sequence)$}) { # no copy for published maps $nocopy=1; @@ -2192,8 +2209,58 @@ sub entryline { $nocopy=1; $nocut=1; } + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + if ($url eq "/uploaded/$cdom/$cnum/group_allfolders.sequence") { + if ($env{'form.folderpath'} =~ /^default&[^\&]+$/) { + my %curr_groups = &Apache::longroup::coursegroups(); + if (keys(%curr_groups) > 0) { + $noremove=1; + } + $nocut=1; + $nocopy=1; + } + } elsif ($url =~ m{^\Q/uploaded/$cdom/$cnum/group_folder_\E(\w+)\.sequence$}) { + my $group = $1; + if ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+$/) { + my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group); + if (keys(%curr_group) > 0) { + $noremove=1; + } + } + $nocut=1; + $nocopy=1; + } elsif ($url =~ m{^\Q/adm/$cdom/$cnum/\E(\w+)/smppg$}) { + my $group = $1; + if ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&\Qgroup_folder_$group\E\&[^\&]+$/) { + my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group); + my %groupsettings = &Apache::longroup::get_group_settings($curr_group{$group}); + if (keys(%groupsettings) > 0) { + $noremove=1; + } + $nocut=1; + $nocopy=1; + } + } elsif ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&group_folder_(\w+)\&/) { + my $group = $1; + my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group); + if ($url =~ /group_boards_\Q$group\E/) { + my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group); + my %groupsettings = &Apache::longroup::get_group_settings($curr_group{$group}); + if (keys(%groupsettings) > 0) { + if (ref($groupsettings{'functions'}) eq 'HASH') { + if ($groupsettings{'functions'}{'discussion'} eq 'on') { + $noremove=1; + } + } + } + $nocut=1; + $nocopy=1; + } + } my $copylink=' '; my $cutlink=' '; + my $removelink=' '; my $skip_confirm = 0; if ( $folder =~ /^supplemental/ @@ -2217,6 +2284,11 @@ ENDCOPY $lt{'ct'} ENDCUT } + if (!$noremove) { + $removelink=(<$lt{'rm'} +ENDREM + } $form_start = '
'; @@ -2230,13 +2302,13 @@ END $line.=(<
- - $lt{ + + $lt{'up'}
- - $lt{ + + $lt{'dw'}
@@ -2247,7 +2319,7 @@ END $form_end - $lt{'rm'} +$removelink $cutlink $lt{'rn'} $copylink @@ -2287,44 +2359,38 @@ END } } + my $editlink; 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( - &Apache::lonnet::declutter('uploaded/'. - $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. - $env{'course.'.$env{'request.course.id'}.'.num'}.'/'.$folder. - '.sequence'). - '___'.$residx.'___'. - &Apache::lonnet::declutter($url)); - (undef,undef,$url)=&Apache::lonnet::decode_symb($symb); - $url=&Apache::lonnet::clutter($url); - if ($url=~/^\/*uploaded\//) { - $url=~/\.(\w+)$/; - my $embstyle=&Apache::loncommon::fileembstyle($1); - if (($embstyle eq 'img') || ($embstyle eq 'emb')) { - $url='/adm/wrapper'.$url; - } elsif ($embstyle eq 'ssi') { - #do nothing with these - } elsif ($url!~/\.(sequence|page)$/) { - $url='/adm/coursedocs/showdoc'.$url; - } - } elsif ($url=~m|^/ext/|) { - $url='/adm/wrapper'.$url; - $external = 1; - } - if (&Apache::lonnet::symbverify($symb,$url)) { - $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); - } else { - $url=''; + 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); + if ($url=~/^\/*uploaded\//) { + $url=~/\.(\w+)$/; + my $embstyle=&Apache::loncommon::fileembstyle($1); + if (($embstyle eq 'img') || ($embstyle eq 'emb')) { + $url='/adm/wrapper'.$url; + } elsif ($embstyle eq 'ssi') { + #do nothing with these + } elsif ($url!~/\.(sequence|page)$/) { + $url='/adm/coursedocs/showdoc'.$url; + } + } elsif ($url=~m|^/ext/|) { + $url='/adm/wrapper'.$url; + $external = 1; + } + if (&Apache::lonnet::symbverify($symb,$url)) { + $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); + } else { + $url=''; + } } - if ($container eq 'page') { - my $symb=$env{'form.pagesymb'}; - - $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); - $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); - } } my ($rand_pick_text,$rand_order_text); if ($isfolder || $extension eq 'sequence') { @@ -2341,7 +2407,7 @@ END 'parameter_encrypturl'))[0]=~/^yes$/i) .':'.((&LONCAPA::map::getparameter($orderidx, 'parameter_randomorder'))[0]=~/^yes$/i); - $url.='folderpath='.&escape($folderpath).$cpinfo; + $url.='folderpath='.&escape($folderpath); my $rpicknum = (&LONCAPA::map::getparameter($orderidx, 'parameter_randompick'))[0]; my $rpckchk; @@ -2370,23 +2436,50 @@ $form_common.' my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $pagepath = $folderpath.'&' }; $pagepath.=$pagearg.'&'.$pagename; - my $symb=$env{'form.pagesymb'}; - if (!$symb) { - my $path='uploaded/'. - $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. - $env{'course.'.$env{'request.course.id'}.'.num'}.'/'; - $symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence', - $residx, - $path.$pagearg.'.page'); - } $url.='pagepath='.&escape($pagepath). - '&pagesymb='.&escape($symb).$cpinfo; + '&pagesymb='.&escape($symb); } - if (($external) && ($allowed)) { - my $form = ($folder =~ /^default/)? 'newext' : 'supnewext'; - $external = ' '.&mt('Edit').''; - } else { - undef($external); + if ($allowed) { + my $fileloc = + &Apache::lonnet::declutter(&Apache::lonnet::filelocation('',$orig_url)); + + if ($external) { + $editlink = <<"EXTLNK"; +   + + $lt{'ed'} + + + +EXTLNK + } else { + my ($cfile,$home,$switchserver,$uploaded) = + &Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom); + if (($cfile ne '') && ($symb ne '')) { + my $jscall = + &Apache::lonhtmlcommon::jump_to_editres($cfile,$home, + $switchserver, + $uploaded,$symb); + if ($jscall) { + $editlink = ' '.&mt('Edit').''; + } + } + } } my $reinit; if ($crstype eq 'Community') { @@ -2412,7 +2505,7 @@ $form_common.' } else { $line.=$title.' '.$reinit.''; } - $line.=$external.""; + $line.=$editlink.""; $rand_pick_text = ' ' if ($rand_pick_text eq ''); $rand_order_text = ' ' if ($rand_order_text eq ''); if (($allowed) && ($folder!~/^supplemental/)) { @@ -2808,7 +2901,8 @@ ENDHEADERS ''.&mt('History').''. ''); foreach my $key (sort(keys(%changes))) { - if ($changes{$key}>$starttime) { + #excludes not versionable problems from resource version history: + next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/); my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); my $currentversion=&Apache::lonnet::getversion($key); if ($currentversion<0) { @@ -2974,9 +3068,9 @@ sub init_breadcrumbs { sub create_list_elements { my @formarr = @_; my $list = ''; - for my $button (@formarr){ - for my $picture(keys %$button) { - $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'}); + foreach my $button (@formarr){ + foreach my $picture (keys(%{$button})) { + $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text', id => ''}); } } return $list; @@ -3045,7 +3139,8 @@ sub handler { 'Adding_External_Resource','Navigate_Content', 'Adding_Folders','Docs_Overview', 'Load_Map', 'Supplemental','Score_Upload_Form','Adding_Pages', - 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', + 'Importing_LON-CAPA_Resource','Importing_IMS_Course', + 'Uploading_From_Harddrive', 'Check_Resource_Versions','Verify_Content') { $help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); } @@ -3339,6 +3434,8 @@ sub handler { if ($env{'docs.markedcopy_url'}) { $script .= &paste_popup_js(); } + my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. + &mt('Switch server?'); } # -------------------------------------------------------------------- Body tag $script = '