File:  [LON-CAPA] / loncom / html / res / adm / pages / annotator / admannotations.pm
Revision 1.13: download - view: text, annotated - select for diffs
Wed Oct 18 13:59:18 2000 UTC (23 years, 11 months ago) by www
Branches: MAIN
CVS tags: HEAD
Now catches error conditions

#
# This will take annotations and then plug them into a page.
#
# 08/25/00 Ben Tyszka
#
# 10/17,10/18 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("annotations",($urlold => $annotation));
    }
    return;
}

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

sub get_annotation {
    my $urlnew=shift;
    my %annotation=&Apache::lonnet::get("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/^[^\/]+//;
  my $urlnew=$ENV{'form.urlnew'};
  $urlnew=~s/^http\:\/\///;
  $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>