%#============================================================================
%# ePortal - WEB Based daily organizer
%# Author - S.Rusakov <rusakov_sa@users.sourceforge.net>
%#
%# Copyright (c) 2000-2003 Sergey Rusakov. All rights reserved.
%# This program is free software; you can redistribute it
%# and/or modify it under the same terms as Perl itself.
%#
%#
%#----------------------------------------------------------------------------
%# Parameters:
%# msg_id - start of topic or any message inside the topic
%# start - [0..xxx] number of first reply to show (pages)
%# days - get topics for <days> days on newer
%#----------------------------------------------------------------------------
<& navigator.mc, forum => $forum, message => $message &>
<b>
<% pick_lang(rus => "Òåìà îáñóæäåíèÿ", eng => "The subject") %>
<span style="color:green;"><% $message->Title |h %></span>
</b>
%#
%# Ôîðìà ïîèñêà
%#
<table width="100%" border="0">
<form name="topic" METHOD="GET">
<tr><td class="smallfont" align="right">
<% CGI::hidden({-name => 'msg_id', -value => $message->id}) %>
<% pick_lang(rus => 'Ïîêàçàòü ñîîáùåíèÿ çà ïîñëåäíèå', eng => 'Show messages for last') %>
<% CGI::textfield({-name => "days", -value => $ARGS{days} || 30, -size => 3}) %>
<% pick_lang(rus => 'äíåé', eng => 'days') %>
<% CGI::submit({-value => '>>'}) %>
</td></tr>
</form>
</table>
%#
%# Ñîîáùåíèÿ
%#
<Table border=0 width="99%" cellspacing=0 cellpadding=0>
<% empty_tr( black=>1, height => 1, colspan => 2) %>
%#
%# Èíèöèàòîð òîïèêà
%#
<& SELF:message, topic => 1, message => $message, bgcolor => '#FDEEFF' &>
%#
%# Åñëè íàäî, òî ïðåäûäóùèå ñîîáùåíèÿ
%#
% if ($ARGS{start} > 0) {
<& SELF:show_next_prev, prev => 1, start => $ARGS{start} - $messages_per_page &>
% }
%#
%# Îòâåòû
%#
% my $messages=0;
% while(++$messages <= $messages_per_page and $replies->restore_next) {
<& SELF:message, message => $replies &>
% }
%#
%# Ñëåäóþùèå ñîîáùåíèÿ
%#
% if ($replies->restore_next) {
<& SELF:show_next_prev, next => 1, start => $ARGS{start} + $messages_per_page &>
% }
</table>
%#
%# Ôîðìà îòâåòà
%#
% if ( $forum->xacl_check('xacl_reply') ) {
<p>
<& /message.mc &>
<% $dlg->dialog_start( width => 500,
title => pick_lang(
rus => "Îòâåò íà ñîîáùåíèå", eng => "Reply to message")) %>
% foreach (qw/msg_id days start/) {
<% CGI::hidden({-name => $_, -value => $ARGS{$_}}) %>
% }
<% $dlg->field("forum_id", hidden => 1) %>
<% $dlg->field("prev_id", hidden => 1) %>
<% $dlg->field("title", RO => 1) %>
<% $dlg->row(pick_lang({rus => 'Èêîíêà', eng => 'Icon'}),
$m->scomp('compose.htm:icons', obj => $dlg->{obj})) %>
<% $dlg->row('<hr>') %>
<% $dlg->field("body", vertical => 1) %>
<% $dlg->row($m->scomp('compose.htm:smiles')) %>
<% $dlg->buttons(cancel_button => 0) %>
% $dlg->{focus} = undef;
<% $dlg->dialog_end %>
<& compose.htm:javascript &>
<p>
% }
%#=== @metags init =========================================================
<%method onStartRequest><%perl>
$ARGS{start} = 0 if $ARGS{start} <= 0;
$msg_id = $ARGS{msg_id};
$forum = new ePortal::App::MsgForum::MsgForum;
$message = new ePortal::App::MsgForum::MsgItem;
$replies = new ePortal::App::MsgForum::MsgItem;
$app = $ePortal->Application('MsgForum');
while(1) {
if (!$message->restore($msg_id)) { return "message_not_found.htm"; }
if ( $message->prev_id) { $msg_id = $message->prev_id; next; }
last;
}
if (!$forum->restore( $message->forum_id )) { return "forum_not_found.htm"; }
#
# Dialog for new reply
#
if ( $forum->xacl_check('xacl_reply') ) {
my $newmessage = new ePortal::App::MsgForum::MsgItem;
$newmessage->forum_id( $forum->id );
$newmessage->prev_id( $message->id);
$newmessage->Title( $message->Title );
$dlg = new ePortal::HTML::Dialog( obj => $newmessage, method => 'GET' );
my $location = try {
$dlg->handle_request( );
} catch ePortal::Exception::DataNotValid with {
my $E = shift;
$session{ErrorMessage} = $E->text;
'';
};
}
# Get new topics
my $days_where;
if ( $ARGS{days} > 0) {
$ARGS{days} *= 1;
$days_where = "(msgdate >= subdate(current_date, interval $ARGS{days} day))";
}
#
# restore replies
#
$replies->restore_where(
where => $days_where,
limit_rows => $messages_per_page +1,
limit_offset => $ARGS{start}*1,
prev_id => $message->id,
order_by => "msgdate desc");
</%perl></%method>
%#=== @METAGS Title ====================================================
<%method Title><%perl>
return $message->Title;
</%perl></%method>
%#=== @metags once =========================================================
<%once>
my $messages_per_page = 20;
my ($app, $list, $obj, $search_object, $dlg);
my ($forum, $message, $replies, $msg_id);
</%once>
%#=== @metags cleanup =========================================================
<%cleanup>
($app, $list, $obj, $search_object, $dlg) = ();
($forum, $message, $replies, $msg_id)=();
</%cleanup>
%#=== @METAGS message ====================================================
<%method message><%perl>
my $msg = $ARGS{message};
my $topic = $ARGS{topic};
my $bgcolor = $ARGS{bgcolor} || $topic ? '#FDEEFF' : '#FDFFDD';
</%perl>
<tr>
<td class="smallfont" width="20%">
% if ($msg->picture) {
<% img(src=> '/images/MsgForum/msg/'. $msg->picture . '.gif') %>
% } else {
<% img(src=> "/images/MsgForum/msg.gif") %>
% }
Íàïèñàë:<br>
<b><% $msg->htmlValue('FromUser') %></b><br>
<span style="color:green;"><% $msg->msgdate %><br></span>
% if ( $ePortal->isAdmin ) {
<span style="color:#CCCCCC;">[<% $msg->useraddress %>]</span><br>
% }
</td>
<td width="80%">
<Table border=0 width="99%" cellspacing=0 cellpadding=0>
<tr><td class="smallfont" bgcolor="<% $bgcolor %>">
<& /htmlify.mc, content => $msg->Body,
highlightreply => 1,
allowsmiles => 1, allowphtml => 1, class=> 'smallfont' &>
</td></tr>
% if ($topic and $msg->TitleURL) {
<tr><td class="smallfont" bgcolor="<% $bgcolor %>" align="right">
<% plink({rus => "Ññûëêà ïî òåìå", eng => "Link"}, -href => $msg->titleurl) %>
</td></tr>
% }
<tr><td align="right" class="smallfont" bgcolor="#D3FEFA">
<%perl>
my $att = $msg->Attachment;
if ( $att ) {
</%perl>
<% plink(pick_lang(rus => "Çàãðóçèòü ", eng => "Download ").$att->filename,
-href => $att->download_href(download => 1)) %>
<%perl>
}
</%perl>
% if ($forum->xacl_check('xacl_reply')) {
<% plink(pick_lang(rus => "Îòâåòèòü", eng => "Reply"),
-href => href("compose.htm", prev_id => $message->id, reply_to=> $msg->id)) %>
% }
% if ($forum->xacl_check('xacl_edit')) {
<% plink(pick_lang(rus => "Ïðàâêà", eng => "Edit"),
-href => href("compose.htm", objid => $msg->id)) %>
% }
% if ($forum->xacl_check('xacl_delete')) {
<% plink(pick_lang(rus => "Óäàëèòü", eng => "Delete"),
-href => href("/delete.htm",
objid => $msg->id,
objtype => ref($msg),
done => $msg->prev_id? undef : href("/forum/topics.htm", forum_id => $forum->id))) %>
% }
</td></tr>
</table>
</td>
</tr>
% if ($topic) {
<tr><td class="smallfont" bgcolor="<% $bgcolor %>" align="center" colspan="2">
<% pick_lang(rus => "Îòâåòû íà äàííóþ òåìó (áîëåå ñâåæèå îòâåòû èäóò ïåðâûìè):",
eng => "Replies to this topic (newest are going first):") %>
</td></tr>
% }
<% empty_tr( black=>1, height => 1, colspan => 2) %>
</%method>
%#=== @metags show_next_prev ====================================================
<%method show_next_prev>
<tr><td colspan="2" class="g1" align="center">
% $ARGS{start} = 0 if $ARGS{start} <= 0;
% if ($ARGS{prev}) {
<% '<<<' |h %>
<a href="<% href("view_msg.htm", msg_id => $message->id, start => $ARGS{start}) %>">
<% pick_lang(rus => 'Ïîêàçàòü ïðåäûäóùèå ñîîáùåíèÿ', eng => 'Show prev messages') %>
</a>
<% '<<<' |h %>
% }
% if ($ARGS{next}) {
<% '>>>' |h %>
<a href="<% href("view_msg.htm", msg_id => $message->id, start => $ARGS{start}) %>">
<% pick_lang(rus => 'Ïîêàçàòü ñëåäóþùèå ñîîáùåíèÿ', eng => 'Show next messages') %>
<% '>>>' |h %>
% }
</td></tr>
</%method>