#!/usr/bin/perl # MimerDesk # Web based groupware and eLearning environment # www.mimerdesk.org # # Copyright (C) 2001 Ionstream Ltd. # www.ionstream.fi # # This program 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. # # This program is distributed with a 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 this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: shortmsg_popup.html,v 1.19 2002/07/14 09:07:24 inf Exp $ ########################################### # # # MimerDesk: Communication - Messages # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # (c) Ionstream OY 1999-2001 # # # # Programmed by: Teemu Arina # # Heavily modified by: Hannes Muurinen # # # ########################################### # Asetukset ################################## # Begin ################################## use strict; use vars qw ($APPLICATION $ACTIVEGRP @users $USER $close $IP $LAST_ACT $FORWARDED $TIME_USED $IDLE $form $ref $sth $length $cellcolors $numbercolor $myDB $trans); use lib::MimerDesk; use CGI::Carp "fatalsToBrowser"; $APPLICATION = 'Communication - Short messages'; $length = 45; $cellcolors = "FFFFFF"; $numbercolor = "E7EBF1"; # Ohjelma ################################## read_config('../config/mimerdesk.cfg'); initialize(); $form = decode_multipart(); $form->{'ID'} =~ tr/0-9//cd; $form->{'auth'} =~ tr/0-9a-z//cd; ($USER, $IP, $LAST_ACT, $FORWARDED, $TIME_USED, $IDLE, $ACTIVEGRP) = authenticate($form->{'ID'}, $form->{'auth'}, $form->{'changeGroup'}); $trans = lib::MimerDesk->new_gettext(program => 'shortmsg_popup',language => $config{'language'}); $APPLICATION = $trans->gettext('Communication - Short messages'); $close = qq[].$trans->gettext('Close this window').qq[]; #get the user id lock_tables('READ', 'users'); my($ref) = db_select('UID','users',"nimi = '$USER'"); $myDB = "$ref->{'UID'}_messages"; # the user's table name db_end(); unlock_tables(); if ($form->{'messageID'} =~ /^\d+$/) {show_message();} elsif ($form->{'reply'} || $form->{'forward'}) {show_message2();} elsif ($form->{'send'} && $form->{'type'}) {send_message2();} elsif ($form->{'delete'}) {delete_message();} ########################## # Show requested message # ########################## sub show_message { my ($sender,$nimi,$sendtime,$message,$topic,$button,$target); $form->{'messageID'} = prepare_fordb($form->{'messageID'}); lock_tables('READ','users',$myDB); db_list("select $myDB.sender,$myDB.target,$myDB.message,$myDB.time,users.info from users,$myDB where $myDB.IDnumber = '$form->{'messageID'}' and $myDB.sender = users.nimi"); while (my $ref = $sth->fetchrow_hashref()) { $sender = $ref->{'sender'}; $target = $ref->{'target'}; $nimi = $ref->{'info'}; $sendtime = $ref->{'time'}; $message = $ref->{'message'}; } db_end(); unlock_tables(); my (undef,$m,$h,$md,$mo,$y,undef,undef,undef) = utc_epoch2date($sendtime); $sendtime = "$y/$mo/$md $h:$m"; $message = html_escape($message); $message =~ s/\r?\n/
/gm; $message = itag_replacer($message); my $shown_target_text = $target; $shown_target_text = $trans->gettext('[ Undefined ]') if $shown_target_text eq ''; $topic = tagged('div', {class => 'small',content => $sendtime}). tagged('div', {class => 'blackTitle',content => sprintf($trans->gettext('From %s (%s)'),$sender,$nimi)}); $button .= tagged('a',{href => "shortmsg_popup.html?auth=$form->{'auth'}&ID=$form->{'ID'}&reply=$sender&forward=$form->{'messageID'}", class => 'content', content => image(src => "$config{'loc_pictures'}/reply.gif", border => '0', alt => $trans->gettext('Reply to message'))})."  " if $sender ne $USER; $button .= tagged('a',{href => "shortmsg_popup.html?auth=$form->{'auth'}&ID=$form->{'ID'}&reply=$target&forward=$form->{'messageID'}", class => 'content', content => image(src => "$config{'loc_pictures'}/forward.gif", border => '0', alt => $trans->gettext('Forward message'))})."  " .tagged('a',{href => "shortmsg_popup.html?auth=$form->{'auth'}&ID=$form->{'ID'}&delete=$form->{'messageID'}", class => 'content', content => image(src => "$config{'loc_pictures'}/delete.gif", border => '0', alt => $trans->gettext('Delete message'))}) ."  $close"; lock_tables('WRITE',$myDB); my $time = time(); db_list("update $myDB set status = 'Read' where IDnumber = '$form->{'messageID'}' and status = 'Not read'"); db_end(); unlock_tables(); $ref = get_template("$config{'theme'}_shortmessage"); my $fulltemplate = $ref->{"$config{'theme'}_shortmessage"}; $fulltemplate =~ s/<>/$topic/ms; $fulltemplate =~ s/<>/$button/ms; $fulltemplate =~ s/<>/$message/ms; $fulltemplate = replace_tags($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}, $TIME_USED); print_header('pragma'); print $fulltemplate; db_end('disconnect'); exit; } ########################## # Show requested message # ########################## sub show_message2 { my $nimi; ($form->{'reply'}) = prepare_fordb($form->{'reply'}); fetch_forward_stuff() if $form->{'forward'}; my @dropitems = (''); my %dropvalues = ('' => '[ Select user from My Friends ]'); lock_tables('READ', 'users', 'friends'); db_list("select distinct users.nimi,users.info from users,friends where friends.user = '$USER' and users.nimi = friends.friend or users.nimi = '$form->{'reply'}' order by users.nimi"); while (my $ref = $sth->fetchrow_hashref()) { push(@dropitems, $ref->{'nimi'}); $dropvalues{$ref->{'nimi'}} = "$ref->{'nimi'} ($ref->{'info'})"; } db_end(); unlock_tables(); my %dropargs = (name => 'target_user', order => \@dropitems, 'values' => \%dropvalues, default => $form->{'reply'} ); my $target_dropdown = dropdownmenu(%dropargs); $ref = get_template("$config{'theme'}_shortmessage"); my $fulltemplate = $ref->{"$config{'theme'}_shortmessage"}; my $topic = qq[].$trans->gettext('Send a message to ') .qq[$target_dropdown]; my $button = qq[].$trans->gettext('Send message').qq[  ].$trans->gettext('Clear text area').qq[  ]; my $html = "\n"; $html .= "\n"; $html .= "
$form->{'errortext'}

\n" if $form->{'errortext'}; $html .= "
\n"; $html .= "\n"; $fulltemplate =~ s/<>/$topic/ms; $fulltemplate =~ s/<>/$button$close/ms; $fulltemplate =~ s/<>/$html/ms; $fulltemplate = replace_tags($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}, $TIME_USED); print_header('pragma'); print $fulltemplate; db_end('disconnect'); exit; } sub send_message2 { my ($nimi, $warning, $targetDB, $info); if (length ($form->{'message'}) > 800 || !$form->{'target_user'} || $form->{'message'} =~ /^\s*$/) { my $excesslength = length($form->{'message'})-800; $form->{'reply'} = $form->{'target_user'}; $form->{'errortext'} .= tagged('div',{ class => 'error', content => sprintf($trans->gettext('The message is too long! You must remove %s characters.'),$excesslength)}).tag('br') if $excesslength > 0; $form->{'errortext'} .= tagged('div',{ class => 'error', content => $trans->gettext('You must select user!')}).tag('br') if !$form->{'target_user'}; $form->{'errortext'} .= tagged('div',{ class => 'error', content => $trans->gettext('You must write a message!')}).tag('br') if $form->{'message'} =~ /^\s*$/; show_message2(); } ($form->{'target_user'},$form->{'message'}) = prepare_fordb($form->{'target_user'},$form->{'message'}); lock_tables('READ', 'users'); db_list("select nimi,UID,info from users where nimi = '$form->{target_user}'"); while (my $ref = $sth->fetchrow_hashref()) {$info = $ref->{'info'}; $nimi = $ref->{'nimi'}; $targetDB = "$ref->{'UID'}_messages";} db_end(); unlock_tables(); if(!$nimi){$warning = tagged('font',{color => 'red', content => $trans->gettext('A valid target must be chosen!')});} elsif ($form->{'message'} =~ /^\s*$/){$warning = tagged('font',{color => 'red', content => $trans->gettext('No message!')});} else { lock_tables('WRITE', $myDB,$targetDB); my $time = time(); my %db = ( folder => 'Inbox', sender => $USER, target => $form->{'target_user'}, 'time' => $time, status => 'Not read', message => $form->{'message'} ); db_insert($targetDB,\%db); $db{'folder'} = 'Outbox'; $db{'status'} = 'Sent'; db_insert($myDB,\%db); db_end(); unlock_tables(); $warning = $trans->gettext('The message was sent.'); } $ref = get_template("$config{'theme'}_shortmessage"); my $fulltemplate = $ref->{"$config{'theme'}_shortmessage"}; my $topic = qq[].$trans->gettext('Send a message to ').qq[$form->{'target_user'} ($info)]; $fulltemplate =~ s/<>/$topic/ms; $fulltemplate =~ s/<>/$close/ms; $fulltemplate =~ s/<>/$warning/ms; $fulltemplate = replace_tags($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}, $TIME_USED); print_header('pragma'); print $fulltemplate; db_end('disconnect'); exit; } # delete_message() deletes the selected shown message from users own message table sub delete_message { my ($nimi, $warning, $targetDB); ($form->{'delete'}) = prepare_fordb($form->{'delete'}); lock_tables('WRITE', $myDB); db_delete($myDB,"IDnumber = $form->{'delete'}"); db_end(); unlock_tables(); $warning = $trans->gettext('The message was removed.'); $ref = get_template("$config{'theme'}_shortmessage"); my $fulltemplate = $ref->{"$config{'theme'}_shortmessage"}; my $topic = qq[].$trans->gettext('Message removed').qq[]; $fulltemplate =~ s/<>/$topic/ms; $fulltemplate =~ s/<>/$close/ms; $fulltemplate =~ s/<>/$warning/ms; $fulltemplate = replace_tags($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}, $TIME_USED); print_header('pragma'); print $fulltemplate; db_end('disconnect'); exit; } ######################################################################### # fetch_forward_stuff - fetches stuff from the database # #-----------------------------------------------------------------------# # # # modifies $form -hash # # # ######################################################################### sub fetch_forward_stuff { lock_tables('READ', $myDB); my($ref) = db_select('*',$myDB,"IDnumber = '$form->{'forward'}'"); $form->{'target_user'} = $ref->{'target'}; $form->{'message'} = $ref->{'message'}; if($ref->{'sender'} ne $USER) { $form->{'message'} =~ s/ .+?\:.+?\[QUOTE\].+?\[\/QUOTE\]//gmis; # $form->{'message'} =~ s/\[QUOTE\].+\[\/QUOTE\]//gmis; $form->{'message'} = sprintf($trans->gettext("[B]%s [/B]:\n[QUOTE]%s [/QUOTE]\n"),$ref->{'sender'},$form->{'message'}); } db_end(); unlock_tables(); }