File:  [LON-CAPA] / loncom / html / res / adm / pages / annotator / admannotations.pm
Revision 1.18: download - view: text, annotated - select for diffs
Mon Jun 23 18:54:37 2003 UTC (21 years, 2 months ago) by www
Branches: MAIN
CVS tags: version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, version_1_0_99, version_1_0_3, version_1_0_2, version_1_0_1, version_1_0_0, version_0_99_5, version_0_99_4, version_0_99_3, HEAD
Bug #1800: annotations cannot handle query strings.

# The LearningOnline Network with CAPA
# This will take annotations and then plug them into a page.
#
# $Id: admannotations.pm,v 1.18 2003/06/23 18:54:37 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
# 08/25/00 Ben Tyszka
#
# 10/17,10/18,10/20 Gerd Kortemeyer
#
#
##################

package Apache::admannotations;

use strict;
use Apache::Constants qw(:common);
use Apache::lonnet();

# --------------------------------------------------------------Put annotation

sub write_annotation {
    my $urlold=shift;
    my $annotation=shift;
    if ($annotation) { 
       &Apache::lonnet::put('nohist_annotations',{$urlold => $annotation});
    }
    return;
}

# --------------------------------------------------------------Get annotation

sub get_annotation {
    my $urlnew=shift;
    my %annotation=&Apache::lonnet::get('nohist_annotations',[$urlnew]);
    return %annotation;
}

# ------------------------------------------------------------Construct editor

sub construct_editor {
    my $annotation=shift;
    if ($annotation=~/^error:/) { $annotation=''; }
    my $urlnew=shift;
    return(<<END_HTML)
<html>
<head>
<title>Annotations</title>
<script>
var timeout;

function changed() {
    var urlnew=window.opener.clientwindow.location.href;
    if (urlnew!=document.annotInfo.urlold.value) {
	document.annotInfo.urlnew.value=urlnew;
        document.annotInfo.submit();
    }
    timeout=setTimeout('changed();','1000');
}
</script>
</head>
<body BGCOLOR="#555555" 
 onLoad="timeout=setTimeout('changed()','1000')"
 onUnload='clearTimeout(timeout);'>
 <center>
  <FORM name="annotInfo" method="post" action="/adm/annotations">
    <TEXTAREA NAME="annotation" WRAP=ON ROWS=12 COLS=36>$annotation</TEXTAREA><br>
    <INPUT TYPE="hidden" name="urlold" value="$urlnew">
    <INPUT TYPE="hidden" name="urlnew" value="">
    <INPUT TYPE=button name=send value="Save and Update"
  onClick=
"javascript:this.form.urlnew.value=window.opener.clientwindow.location.href;this.form.submit();">
    <INPUT TYPE=button name="close" value="Close (no save)" onClick="javascript:window.close();">
  </FORM>
 </center>
</body>
</html>
END_HTML
}

# ----------------------------------------------------Constructs error window

sub construct_error {
  my $annot_error=shift;
  my $button_name=shift;
  return(<<END_HTML2)
<html><head>
<title>Annotations</title>
</head>
<body BGCOLOR="#555555">
 <center>
  <FORM name="annotInfo" method="post" action="/adm/annotations">
<table bgcolor="#FFFFFF" width="100%" height="90%" align="center">
<td>
<font size=+1><i>
$annot_error
</i></font>
</td>
</table>
    <INPUT TYPE="hidden" name="urlold" value="">
    <INPUT TYPE="hidden" name="urlnew" value="">
    <INPUT TYPE=button name=send value="$button_name"
  onClick=
"javascript:this.form.urlnew.value=window.opener.clientwindow.location.href;this.form.submit();">
    <INPUT TYPE=button name="close" value="Close" onClick="javascript:window.close();">
  </FORM>
 </center>
</body>
</html>
END_HTML2
}

# ---------------------------------------------------------------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;
}

1;
__END__


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>