--- rat/lonratedt.pm 2008/09/11 14:47:24 1.89 +++ rat/lonratedt.pm 2016/01/15 19:13:04 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps # -# $Id: lonratedt.pm,v 1.89 2008/09/11 14:47:24 bisitz Exp $ +# $Id: lonratedt.pm,v 1.112 2016/01/15 19:13:04 damieng Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,141 +29,6 @@ package Apache::lonratedt; -=pod - -=head1 NAME - -Apache::lonratedt: simple resource assembly tool - -=head1 SYNOPSIS - -lonratedt provides the routines and the handler for the Advanced - Resource Assembly Tool (RAT), and ties the various pieces together - with Javascript. - -=head1 OVERVIEW - -=head2 Map Representation - -=begin latex - -% -\begin{figure} -\begin{center}\includegraphics[% - width=0.55\paperwidth,bb = 0 0 200 100, draft, type=eps]{Map_Example}\end{center} - - -\caption{\label{Map_In_Advanced_Editor}Example of a Map in the Advanced Editor} -\end{figure} -% -\begin{figure} -\begin{lyxcode} - - -~~ - -~~~~ - -~~ - -~~~~ - -~~ - -~~~~ - -~~ - -~~~~ - -~~ - -~~~~ - -~~ - -~~~~ - -~~ - -~~ - -~~ - -~~ - -~~ -\end{lyxcode} - -\caption{\label{XML}XML for Map in Figure \ref{Map_In_Advanced_Editor}} -\end{figure} - -=end latex - -Fig. "XML for Map in Figure" shows the XML representation of the -resource map shown in Fig. "Example of a Map in the Advanced Editor", -which is the format in which maps are stored. In the figure, however, -additional graphical map layout information generated by the Advanced -Resource Assembly Tool is not displayed. This graphical information is -optional to re-generate the same graphical layout when the map is -brought up again in the Resource Assembly Tool, and is not needed for -any other system functionality. - -Maps can be generated by tools other than the Resource Assembly -Tool. In particular, an author might have some other representation of -a course sequence, which can be converted into a map using scripts. If -this map then were to be brought up in the Resource Assembly Tool, the -Tool would automatically generate a graphical layout for it. Each -entry of the map (resources, conditions and links) is stored in a -separate tag. - -Resources and conditionsX have to have unique ID -numbers. These numbers are automatically generated by the Resource -Assembly Tool when the entry is first created, or added to the entries -when a map generated outside the Resource Assembly Tool is first -retrieved. They can also be assigned by custom scripts or added in by -hand. - -In the XML example, entry 1 is the start resource of the map. When -this map is accessed, the source (src) URL of this tag will be the -first resource rendered. Entry 2 is the finish resource of this -map. This resource will be the last resource in the sequence of -resources. Entry 6 is a problem resource with the given URL and title, -as well as the priority "mandatory". Entry 19 is a condition, which is -used by the link between entries 6, the problem, and 9, a -sequence. I - -=cut - use strict; use Apache::Constants qw(:common); use Apache::lonnet; @@ -178,31 +43,89 @@ use HTML::Entities(); # --------------------------------------------------------- Build up RAT screen sub ratedt { my ($r,$url)=@_; - my %layout = ('border' => "0"); - if ($env{'environment.remote'} eq 'off') { - $layout{'rows'} = "1,250,*"; - } else { - $layout{'rows'} = "1,70,*"; - } - my $js =' -'; - - my $start_page = - &Apache::loncommon::start_page('Edit Sequence',$js, - {'frameset' => 1, - 'add_entries' => \%layout}); - my $end_page = - &Apache::loncommon::end_page({'frameset' => 1}); - $r->print(< - - -$end_page + + + + Edit Sequence + + + + + + +
+
+ + + + + ENDDOCUMENT } @@ -210,19 +133,29 @@ ENDDOCUMENT sub buttons { my $adv=shift; - my $output='
'; + my $output=''; if ($adv==1) { - $output.=''. - &Apache::loncommon::help_open_topic('Sequence_Advanced_Editor_Creation');; + $output.= + '' + .&Apache::loncommon::help_open_topic( + 'Sequence_Advanced_Editor_Creation'); } else { unless ($adv==2) { - $output.=''. - &Apache::loncommon::help_open_topic('Sequence_Simple_Editor_Creation'); + $output.= + '' + .&Apache::loncommon::help_open_topic( + 'Sequence_Simple_Editor_Creation') + .' '; } - $output.=''. - &Apache::loncommon::help_open_topic('Sequence_Advanced_Editor_Creation'); + $output.= + '' + .&Apache::loncommon::help_open_topic( + 'Sequence_Advanced_Editor_Creation'); } - return $output.'

'; + return $output.''; } # ----------------------------------------------------------------- Edit script @@ -279,10 +212,10 @@ function idxopen(mode) { } // ------------------------------------------------------ Open groupsort window -function groupopen(url,recover,bookmarks) { +function groupopen(url,recover) { var options="scrollbars=1,resizable=1,menubar=0"; idxflag=1; - idx=open("/adm/groupsort?inhibitmenu=yes&mode=$mode&recover="+recover+"&readfile="+url+"&bookmarks="+bookmarks,"idxout",options); + idx=open("/adm/groupsort?inhibitmenu=yes&mode=$mode&recover="+recover+"&readfile="+url,"idxout",options); idx.focus(); } @@ -349,7 +282,6 @@ ENDSCRIPT sub smpedt { my ($r,$url,$errtext)=@_; - my $buttons=&buttons(2); my $tmpfn=&Apache::lonnet::filelocation('',$url).'.tmp'; my $targetmsg=''; if ($env{'form.save'}) { @@ -358,22 +290,27 @@ sub smpedt { my ($errtext,$fatal)= &LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$url),''); unless ($fatal) { - $targetmsg=''.&mt('Saved.').'
'; + $targetmsg=&Apache::lonhtmlcommon::confirm_success(&mt('Saved')); } else { - $targetmsg=''.&mt('An error occurred while saving.').'
'; + $targetmsg=&Apache::lonhtmlcommon::confirm_success( + &mt('An error occurred while saving.'),1); } } if ($env{'form.revert'}) { - $targetmsg=''.&mt('Reverted.').'
'; + $targetmsg=&Apache::lonhtmlcommon::confirm_success(&mt('Reverted')); unlink($tmpfn); my ($errtext,$fatal)= &LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$url),''); } + $targetmsg = &Apache::loncommon::confirmwrapper($targetmsg) if ($targetmsg); if (-e $tmpfn) { $targetmsg= - ''.&mt('You are working with an unsaved version of your map.').'
'; + '

' + .&mt('You are working with an unsaved version of your map.') + .'

'; my ($errtext,$fatal)=&LONCAPA::map::mapread($tmpfn,''); } + $errtext = '

'.$errtext.'

' if ($errtext); # ---------------------------------------------------------- Process form input my @importselect=&Apache::loncommon::get_env_multiple('form.importsel'); @@ -616,11 +553,12 @@ sub smpedt { my $editscript=&editscript('simple'); my %lt=&Apache::lonlocal::texthash( + 'sm' => 'Select Map', 'sa' => 'Save', 'nt' => 'New Title', 'se' => 'Search', 'im' => 'Import', - 'bk' => 'Import Bookmarks', + 'wl' => 'Import from Stored Links', 'vi' => 'View', 'lm' => 'Load Map', 'ds' => 'Discard Selected', @@ -637,9 +575,7 @@ sub smpedt { 'pas' => 'Paste after selected', 'reco' => 'Recover Deleted' ); - my $js=< - + my $js=&Apache::lonhtmlcommon::scripttag(" $editscript function openview(entry) { @@ -671,85 +607,102 @@ sub smpedt { document.forms.simpleedit.submit(); } } +"); - -ENDJS - - my $start_page = &Apache::loncommon::start_page(undef,$js). - &Apache::loncommon::help_open_menu('Sequence_Simple_Editor_Creation', - 'Sequence_Simple_Editor_Creation', - 6,'RAT'); + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb({ + text => 'Authoring Space', + href => &Apache::loncommon::authorspace($url), + faq => 6, + bug => 'RAT', + help => 'Sequence_Simple_Editor_Creation',}); + &Apache::lonhtmlcommon::add_breadcrumb({ + text => 'RAT', + title => 'Resource Assembly Tool', + href => '',}); + &Apache::lonhtmlcommon::add_breadcrumb({ + text => 'Editor', + title => 'Simple Editor', + href => '',}); + + # Breadcrumbs are included by &start_page + my $start_page = &Apache::loncommon::start_page('Authoring Space',$js) + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader() + .&buttons(2)); my $end_page = &Apache::loncommon::end_page(); + my $filetext = &mt('File: [_1]',''.$url.''); $r->print(<$errtext -
- - - - +$targetmsg +$errtext + + + + + - + - -
$lt{'ta'}  File: $url
$filetext
- - + + $lt{'as'} -
- -
- - - +
+ +
+ + +
  - - - - + + + + $lt{'as'} -
- - - -
$targetmsg - - - +
+ + + +
+ + +
-$lt{'cs'}
-

-


-$lt{'ps'}
-

-


-$lt{'pas'}
- +$lt{'cs'}
+ +
+$lt{'ps'}
+ +
+$lt{'pas'}
+
+
- - - - + + + +
$end_page ENDSMPHEAD @@ -758,38 +711,72 @@ ENDSMPHEAD # ----------------------------------------------------------------- No such dir sub nodir { my ($r,$dir)=@_; - $dir=~s{^/home/$LONCAPA::username_re/public_html}{}; - $r->print(&Apache::loncommon::start_page(undef,undef, - {'only_body' => 1, - 'bgcolor' => '#FFFFFF',}). - "

No such directory: $dir

". - &Apache::loncommon::end_page()); + my $londocroot = $r->dir_config('lonDocRoot'); + my ($path) = ($dir =~ m{^\Q$londocroot\E?(/priv/[^/]+/[^/]+/)}); + $dir=~s{^\Q$londocroot/priv/\E[^/]+/[^/]+}{}; + my $brcrum = [{'href' => &Apache::loncommon::authorspace($path), + 'text' => 'Authoring Space'}]; +# {'href' => '', +# 'text' => 'No such directory'}]; + $r->print(&Apache::loncommon::start_page('Authoring Space', + undef, + {'bread_crumbs' => $brcrum,}) + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader()) + .'

' + .&mt('No such directory: [_1]',''.$dir.'' + .'

' + .&Apache::loncommon::end_page()) + ); } # ---------------------------------------------------------------- View Handler sub viewmap { my ($r,$url,$adv,$errtext)=@_; - $r->print( - &Apache::loncommon::start_page('Edit Content of a Map'). - &Apache::loncommon::help_open_menu('','',6,'RAT'). - &buttons($adv)); + + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb({ + text => 'Authoring Space', + href => &Apache::loncommon::authorspace($url), + faq => 6, + bug => 'RAT', + help => 'Sequence_Simple_Editor_Creation',}); + &Apache::lonhtmlcommon::add_breadcrumb({ + text => 'RAT', + title => 'Resource Assembly Tool', + href => '',}); + + # Breadcrumbs are included by &start_page + $r->print(&Apache::loncommon::start_page('Edit Content of a Map') + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader() + .&buttons($adv)) + ); if ($errtext) { - $r->print($errtext.'
'); + $r->print('
' + .$errtext + .'
' + .'
' + ); } my $idx=0; - $r->print('

'.$url.'

'); + $r->print('

'.$url.'

'); if ($adv) { - $r->print('

'.&mt('Map contents are not shown in order.').'


'); + $r->print('

' + .&mt('Map contents are not shown in order.') + .'


' + ); } - $r->print( ''. - ''. - ''. - ''. - ''. - ''. - ''); - my @backgroundColors = ("#FFFFFF", "#F6F6F6"); + $r->print(&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .'' + .'' + .'' + .'' + .'' + .&Apache::loncommon::end_data_table_header_row() + ); foreach (&LONCAPA::map::attemptread(&Apache::lonnet::filelocation('',$url))) { if (defined($_)) { $idx++; @@ -806,24 +793,35 @@ sub viewmap { $filename = $1; } my $cstrurl = $resurl; - $cstrurl =~ s#^/res/[^/]+/([^/]+)/#/priv/$1/#; - my $bgcol = $idx%2; - $r->print('' + .'' + .'' + .''."\n"); + $r->print('' + .&Apache::loncommon::end_data_table_row() + ); } } - $r->print('
'.&mt('Type').''.&mt('Title in map').''.&mt('Filename of resource').''.&mt('Link to published resource').''.&mt('Link to resource in Construction Space').'
'.&mt('Type').''.&mt('Title in map').''.&mt('Filename of resource').''.&mt('Link to published resource').''.&mt('Link to resource in Authoring Space').'
'. - ''.&HTML::Entities::encode(&LONCAPA::map::qtescape($title)). - ''.$filename.''); + $cstrurl =~ s{^/res/}{/priv/}; + $r->print(&Apache::loncommon::start_data_table_row() + .'' + .'' + .'' + .&HTML::Entities::encode(&LONCAPA::map::qtescape($title)) + .''.$filename.'' + ); if ($url) { $r->print(''.&mt('Resource space').''); + } else { + $r->print(' '); } $r->print(''); if ($url) { $r->print(''. - &mt('Construction space').''); + &mt('Authoring Space').''); + } else { + $r->print(' '); } - $r->print('
'); + $r->print(&Apache::loncommon::end_data_table()); $r->print(&Apache::loncommon::end_page()); } @@ -888,7 +886,140 @@ __END__ +=pod + +=head1 NAME + +Apache::lonratedt: simple resource assembly tool + +=head1 SYNOPSIS + +lonratedt provides the routines and the handler for the Advanced + Resource Assembly Tool (RAT), and ties the various pieces together + with Javascript. + +=head1 OVERVIEW + +=head2 Map Representation + +=begin latex + +% +\begin{figure} +\begin{center}\includegraphics[% + width=0.55\paperwidth,bb = 0 0 200 100, draft, type=eps]{Map_Example}\end{center} + + +\caption{\label{Map_In_Advanced_Editor}Example of a Map in the Advanced Editor} +\end{figure} +% +\begin{figure} +\begin{lyxcode} + + +~~ + +~~~~ + +~~ + +~~~~ + +~~ + +~~~~ + +~~ + +~~~~ + +~~ + +~~~~ + +~~ + +~~~~ + +~~ + +~~ + +~~ + +~~ + +~~ +\end{lyxcode} + +\caption{\label{XML}XML for Map in Figure \ref{Map_In_Advanced_Editor}} +\end{figure} + +=end latex +Fig. "XML for Map in Figure" shows the XML representation of the +resource map shown in Fig. "Example of a Map in the Advanced Editor", +which is the format in which maps are stored. In the figure, however, +additional graphical map layout information generated by the Advanced +Resource Assembly Tool is not displayed. This graphical information is +optional to re-generate the same graphical layout when the map is +brought up again in the Resource Assembly Tool, and is not needed for +any other system functionality. + +Maps can be generated by tools other than the Resource Assembly +Tool. In particular, an author might have some other representation of +a course sequence, which can be converted into a map using scripts. If +this map then were to be brought up in the Resource Assembly Tool, the +Tool would automatically generate a graphical layout for it. Each +entry of the map (resources, conditions and links) is stored in a +separate tag. + +Resources and conditionsX have to have unique ID +numbers. These numbers are automatically generated by the Resource +Assembly Tool when the entry is first created, or added to the entries +when a map generated outside the Resource Assembly Tool is first +retrieved. They can also be assigned by custom scripts or added in by +hand. + +In the XML example, entry 1 is the start resource of the map. When +this map is accessed, the source (src) URL of this tag will be the +first resource rendered. Entry 2 is the finish resource of this +map. This resource will be the last resource in the sequence of +resources. Entry 6 is a problem resource with the given URL and title, +as well as the priority "mandatory". Entry 19 is a condition, which is +used by the link between entries 6, the problem, and 9, a +sequence. I + +=cut