--- rat/lonratedt.pm 2007/01/16 21:10:55 1.87 +++ rat/lonratedt.pm 2012/12/16 16:09:02 1.105.2.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps # -# $Id: lonratedt.pm,v 1.87 2007/01/16 21:10:55 albertel Exp $ +# $Id: lonratedt.pm,v 1.105.2.4 2012/12/16 16:09:02 raeburn 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; @@ -179,7 +44,7 @@ use HTML::Entities(); sub ratedt { my ($r,$url)=@_; my %layout = ('border' => "0"); - if ($env{'environment.remote'} eq 'off') { + if ($env{'environment.remote'} eq 'off') { $layout{'rows'} = "1,250,*"; } else { $layout{'rows'} = "1,70,*"; @@ -193,6 +58,7 @@ sub ratedt { &Apache::loncommon::start_page('Edit Sequence',$js, {'frameset' => 1, 'add_entries' => \%layout}); + my $end_page = &Apache::loncommon::end_page({'frameset' => 1}); @@ -210,19 +76,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 @@ -274,15 +150,15 @@ function idxopen(mode) { var options="scrollbars=1,resizable=1,menubar=0,location=1,toolbar=1"; idxmode=mode; idxflag=1; - idx=open('$resurl/?launch=1&mode=$mode&catalogmode='+mode,'idxout',options); + idx=open('$resurl/?inhibitmenu=yes&launch=1&mode=$mode&catalogmode='+mode,'idxout',options); idx.focus(); } // ------------------------------------------------------ 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?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(); } @@ -291,7 +167,7 @@ function srchopen(mode) { var options="scrollbars=1,resizable=1,menubar=0"; srchmode=mode; srchflag=1; - srch=open("/adm/searchcat?launch=1&mode=$mode&catalogmode="+mode,"srchout",options); + srch=open("/adm/searchcat?inhibitmenu=yes&launch=1&mode=$mode&catalogmode="+mode,"srchout",options); srch.focus(); } // ----------------------------------------------------- launch indexer browser @@ -326,6 +202,7 @@ function idxcheck(mode) { if (editbrowser == null) { url += 'launch=1&'; } + url += 'inhibitmenu=yes&'; url += 'catalogmode=interactive&'; url += 'mode=edit&'; url += 'form=' + formname + '&'; @@ -348,7 +225,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'}) { @@ -359,7 +235,7 @@ sub smpedt { unless ($fatal) { $targetmsg=''.&mt('Saved.').'
'; } else { - $targetmsg=''.&mt('An error occured while saving.').'
'; + $targetmsg=''.&mt('An error occurred while saving.').'
'; } } if ($env{'form.revert'}) { @@ -370,7 +246,7 @@ sub smpedt { } 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,''); } # ---------------------------------------------------------- Process form input @@ -619,7 +495,7 @@ sub smpedt { 'nt' => 'New Title', 'se' => 'Search', 'im' => 'Import', - 'bk' => 'Import Bookmarks', + 'wl' => 'Import from Stored Links', 'vi' => 'View', 'lm' => 'Load Map', 'ds' => 'Discard Selected', @@ -674,81 +550,97 @@ sub smpedt { 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 => 'Construction 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('Construction Space',$js) + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader() + .&buttons(2)); my $end_page = &Apache::loncommon::end_page(); $r->print(<$errtext -
- - - - +$errtext + + + + + - -
$lt{'ta'}   File: $url
- - + + $lt{'as'} -
- -
- - - +
+ +
+ + +
  - - - - + + + + $lt{'as'} -
- - - -
$targetmsg - - - +
+ + + +
$targetmsg + + +
-$lt{'cs'}
-

-


-$lt{'ps'}
-

-


-$lt{'pas'}
- +$lt{'cs'}
+

+


+$lt{'ps'}
+

+ +$lt{'pas'}
+

- - - - + + + +
$end_page ENDSMPHEAD @@ -757,38 +649,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' => 'Construction Space'}]; +# {'href' => '', +# 'text' => 'No such directory'}]; + $r->print(&Apache::loncommon::start_page('Construction 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 => 'Construction 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++; @@ -805,24 +731,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 Construction 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').''); + } else { + $r->print(' '); } - $r->print('
'); + $r->print(&Apache::loncommon::end_data_table()); $r->print(&Apache::loncommon::end_page()); } @@ -887,7 +824,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