--- loncom/html/res/adm/pages/annotator/admannotations.pm 2006/04/10 23:26:48 1.20 +++ loncom/html/res/adm/pages/annotator/admannotations.pm 2007/04/24 23:26:26 1.27 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # This will take annotations and then plug them into a page. # -# $Id: admannotations.pm,v 1.20 2006/04/10 23:26:48 albertel Exp $ +# $Id: admannotations.pm,v 1.27 2007/04/24 23:26:26 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,40 +33,71 @@ use strict; use Apache::Constants qw(:common); use Apache::loncommon(); use Apache::lonnet; +use Apache::lonlocal; # --------------------------------------------------------------Put annotation sub write_annotation { - my $urlold=shift; - my $annotation=shift; - if ($annotation) { - &Apache::lonnet::put('nohist_annotations',{$urlold => $annotation}); + my ($symb, $enc, $annotation) = @_; + + return if (!$annotation); + + my $key = $symb; + if (!$enc) { + $key = + &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); } + + &Apache::lonnet::put('nohist_annotations',{$key => $annotation}); return; } # --------------------------------------------------------------Get annotation sub get_annotation { - my $urlnew=shift; - my %annotation=&Apache::lonnet::get('nohist_annotations',[$urlnew]); - return %annotation; + my ($symb,$enc) = @_; + + my $key = $symb; + if (!$enc) { + $key = + &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); + } + my %annotation=&Apache::lonnet::get('nohist_annotations',[$key]); + return $annotation{$key}; } # ------------------------------------------------------------Construct editor +sub js_get_symb { + return < var timeout; +$get_symb + function changed() { - var urlnew=window.opener.clientwindow.location.href; - if (urlnew!=document.annotInfo.urlold.value) { - document.annotInfo.urlnew.value=urlnew; + var symbnew=get_symb(); + if (symbnew!=document.annotInfo.symbold.value) { + document.annotInfo.symbnew.value=symbnew; document.annotInfo.submit(); } timeout=setTimeout('changed();','1000'); @@ -83,18 +114,23 @@ ENDJS my $end_page = &Apache::loncommon::end_page(); + + my %lt = ( 'close no save' => "Close (no save)", + 'save' => "Save and Update",); + %lt = &Apache::lonlocal::texthash(%lt); + return(< -
-
- - - - -
+
+
+ + + + +
$end_page END_HTML @@ -103,74 +139,89 @@ END_HTML # ----------------------------------------------------Constructs error window sub construct_error { - my ($annot_error,$button_name) = @_; - my $start_page = &Apache::loncommon::start_page('Annotations',undef, - {'only_body' => 1,}); - my $end_page = &Apache::loncommon::end_page(); + my ($annot_error,$button_name) = @_; + + my $get_symb = &js_get_symb(); + my $js = < +$get_symb + +ENDJS - return(< 1,}); + my $end_page = &Apache::loncommon::end_page(); + + my %lt = ( 'close' => "Close", + 'button' => $button_name,); + %lt = &Apache::lonlocal::texthash(%lt); + + return(< -
+
- + $annot_error
- - - - -
+ + + + + $end_page END_HTML2 } +sub clean_symb { + my ($symb) = @_; + + &Apache::lonenc::check_decrypt(\$symb); + my $enc = $env{'request.enc'}; + delete($env{'request.enc'}); + + return ($symb,$enc); +} + # ---------------------------------------------------------------Main Handler sub handler { - my $r=shift; - - $r->content_type('text/html'); - $r->send_http_header; - return OK if $r->header_only; - - - my $page; - my %annot_hash; - - my $urlold=$env{'form.urlold'}; - $urlold=~s/^http\:\/\///; - $urlold=~s/^[^\/]+//; - $urlold=~s/\?.*$//; - my $urlnew=$env{'form.urlnew'}; - $urlnew=~s/^http\:\/\///; - $urlnew=~s/^[^\/]+//; - $urlnew=~s/\?.*$//; - my $annotation=$env{'form.annotation'}; - - if ($urlold) { - write_annotation($urlold,$annotation); - } - if (exists($env{'form.urlnew'})) { - unless ($urlnew) { - $page=construct_error("Cannot annotate current window. Please point your browser to a LON-CAPA page and then 'continue'.","continue"); - } else { - if ($urlold eq $urlnew) { - $annot_hash{$urlnew}=$annotation; - } else { - %annot_hash=get_annotation($urlnew); - } - $page=construct_editor($annot_hash{$urlnew},$env{'form.urlnew'}); - } - } - $r->print($page); - return OK; + my ($r) = @_; + + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + return OK if $r->header_only; + + + my $page; + + my ($symb_old,$symb_old_enc) = &clean_symb($env{'form.symbold'}); + my ($symb_new,$symb_new_enc) = &clean_symb($env{'form.symbnew'}); + + my $annotation=$env{'form.annotation'}; + + if ($symb_old) { + &write_annotation($symb_old,$symb_old_enc,$annotation); + } + if (exists($env{'form.symbnew'})) { + unless ($symb_new) { + $page=&construct_error(&mt("Cannot annotate current window. Please point your browser to a LON-CAPA page and then 'continue'."),"continue"); + } else { + if ($symb_old ne $symb_new) { + $annotation=&get_annotation($symb_new,$symb_new_enc); + } + # pass same symb through. + $page=&construct_editor($annotation,$env{'form.symbnew'}); + } + } + $r->print($page); + return OK; } 1;