package WebGUI::Widget::MessageBoard; our $namespace = "MessageBoard"; #------------------------------------------------------------------- # WebGUI is Copyright 2001 Plain Black Software. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use strict; use Tie::CPHash; use WebGUI::DateTime; use WebGUI::Discussion; use WebGUI::International; use WebGUI::Macro; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Utility; use WebGUI::Widget; #------------------------------------------------------------------- sub _getBoardProperties { my (%board); tie %board, 'Tie::CPHash'; %board = WebGUI::SQL->quickHash("select * from widget, MessageBoard where widget.widgetId=MessageBoard.widgetId and widget.widgetId=$_[0]",$session{dbh}); return %board; } #------------------------------------------------------------------- sub purge { WebGUI::SQL->write("delete from discussion where widgetId=$_[0]",$_[1]); WebGUI::SQL->write("delete from MessageBoard where widgetId=$_[0]",$_[1]); purgeWidget($_[0],$_[1]); } #------------------------------------------------------------------- sub widgetName { return WebGUI::International::get(223); } #------------------------------------------------------------------- sub www_add { my ($output, %hash, @array); tie %hash, "Tie::IxHash"; if (WebGUI::Privilege::canEditPage()) { $output = ''; $output .= '

'.WebGUI::International::get(222).'

'; $output .= '
'; $output .= WebGUI::Form::hidden("widget",$namespace); $output .= WebGUI::Form::hidden("func","addSave"); $output .= ''; $output .= ''; $output .= ''; $output .= ''; %hash = WebGUI::Widget::getPositions(); $output .= ''; $output .= ''; %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName",$session{dbh}); $array[0] = 2; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
'.WebGUI::International::get(99).''.WebGUI::Form::text("title",20,128,'Message Board').'
'.WebGUI::International::get(174).''.WebGUI::Form::checkbox("displayTitle",1,1).'
'.WebGUI::International::get(175).''.WebGUI::Form::checkbox("processMacros",1).'
'.WebGUI::International::get(363).''.WebGUI::Form::selectList("position",\%hash).'
'.WebGUI::International::get(85).''.WebGUI::Form::textArea("description",'',50,5,1).'
'.WebGUI::International::get(224).''.WebGUI::Form::selectList("groupToPost",\%hash,\@array).'
'.WebGUI::International::get(225).''.WebGUI::Form::text("messagesPerPage",20,2,30).'
'.WebGUI::International::get(226).''.WebGUI::Form::text("editTimeout",20,3,1).'
'.WebGUI::Form::submit(WebGUI::International::get(62)).'
'; return $output; } else { return WebGUI::Privilege::insufficient(); } return $output; } #------------------------------------------------------------------- sub www_addSave { my ($widgetId); if (WebGUI::Privilege::canEditPage()) { $widgetId = create(); WebGUI::SQL->write("insert into MessageBoard values ($widgetId, $session{form}{groupToPost}, '$session{form}{messagesPerPage}', '$session{form}{editTimeout}')",$session{dbh}); return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_edit { my ($output, %board, %hash, @array); tie %hash, "Tie::IxHash"; if (WebGUI::Privilege::canEditPage()) { tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); $output = ''; $output .= '

'.WebGUI::International::get(227).'

'; $output .= '
'; $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); $output .= WebGUI::Form::hidden("func","editSave"); $output .= ''; $output .= ''; $output .= ''; $output .= ''; %hash = WebGUI::Widget::getPositions(); $array[0] = $board{position}; $output .= ''; $output .= ''; %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName",$session{dbh}); $array[0] = $board{groupToPost}; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
'.WebGUI::International::get(99).''.WebGUI::Form::text("title",20,128,$board{title}).'
'.WebGUI::International::get(174).''.WebGUI::Form::checkbox("displayTitle","1",$board{displayTitle}).'
'.WebGUI::International::get(175).''.WebGUI::Form::checkbox("processMacros","1",$board{processMacros}).'
'.WebGUI::International::get(363).''.WebGUI::Form::selectList("position",\%hash,\@array).'
'.WebGUI::International::get(85).''.WebGUI::Form::textArea("description",$board{description},50,5,1).'
'.WebGUI::International::get(224).''.WebGUI::Form::selectList("groupToPost",\%hash,\@array,1).'
'.WebGUI::International::get(225).''.WebGUI::Form::text("messagesPerPage",20,2,$board{messagesPerPage}).'
'.WebGUI::International::get(226).''.WebGUI::Form::text("editTimeout",20,2,$board{editTimeout}).'
'.WebGUI::Form::submit(WebGUI::International::get(62)).'
'; return $output; } else { return WebGUI::Privilege::insufficient(); } return $output; } #------------------------------------------------------------------- sub www_editSave { if (WebGUI::Privilege::canEditPage()) { update(); WebGUI::SQL->write("update MessageBoard set groupToPost=$session{form}{groupToPost}, messagesPerPage=$session{form}{messagesPerPage}, editTimeout=$session{form}{editTimeout} where widgetId=$session{form}{wid}",$session{dbh}); return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_editMessage { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { return WebGUI::Discussion::editMessage(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_editMessageSave { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { WebGUI::Discussion::editMessageSave(); return www_showMessage(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_postNewMessage { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { return WebGUI::Discussion::postNewMessage(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_postNewMessageSave { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { return WebGUI::Discussion::postNewMessageSave(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_postReply { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { return WebGUI::Discussion::postReply(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_postReplySave { my (%board); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($session{form}{wid}); if (WebGUI::Privilege::isInGroup($board{groupToPost},$session{user}{userId})) { WebGUI::Discussion::postReplySave(); return www_showMessage(); } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- sub www_showMessage { my (@data, $html, %board, %message); tie %message, 'Tie::CPHash'; tie %board, 'Tie::CPHash'; %message = WebGUI::Discussion::getMessage($session{form}{mid}); %board = _getBoardProperties($session{form}{wid}); $html .= '

'.$message{subject}.'

'; $html .= ''; $html .= '
'; $html .= ''.WebGUI::International::get(238).' '.$message{username}.'
'; $html .= "".WebGUI::International::get(239)." ".epochToHuman($message{dateOfPost},"%w, %c %D, %y at %H:%n%p")."
"; $html .= "".WebGUI::International::get(240)." ".$message{widgetId}."-".$message{rid}."-".$message{pid}."-".$message{messageId}."
"; $html .= '
'; $html .= ''.WebGUI::International::get(236).'
'; if ((time()-$message{dateOfPost}) < 3600*$board{editTimeout} && $message{'userId'} eq $session{user}{userId}) { $html .= ''.WebGUI::International::get(235).'
'; } $html .= ''.WebGUI::International::get(242).'
'; @data = WebGUI::SQL->quickArray("select max(messageId) from discussion where widgetId=$message{widgetId} and pid=0 and messageId<$message{rid}",$session{dbh}); if ($data[0] ne "") { $html .= '« '.WebGUI::International::get(241).'
'; # } else { # $html .= '« '.WebGUI::International::get(241).'
'; } @data = WebGUI::SQL->quickArray("select min(messageId) from discussion where widgetId=$message{widgetId} and pid=0 and messageId>$message{rid}",$session{dbh}); if ($data[0] ne "") { $html .= ''.WebGUI::International::get(243).' »
'; # } else { # $html .= WebGUI::International::get(243).' »
'; } $html .= '
'; $html .= $message{message}; $html .= '
'; $html .= ''; $html .= ''; @data = WebGUI::SQL->quickArray("select messageId,subject,username,dateOfPost,userId from discussion where messageId=$message{rid}",$session{dbh}); $html .= ''.substr($data[1],0,30).''; $html .= WebGUI::Discussion::traverseReplyTree($message{rid},1); $html .= "
'.WebGUI::International::get(229).''.WebGUI::International::get(244).''.WebGUI::International::get(245).'
'.$data[2].''.epochToHuman($data[3],"%M/%D %H:%n%p").'
"; return $html; } #------------------------------------------------------------------- sub www_view { my ($sth, @data, $html, %board, $itemsPerPage, $i, $pn, $lastId, @last, $replies); tie %board, 'Tie::CPHash'; %board = _getBoardProperties($_[0]); $itemsPerPage = $board{messagesPerPage}; if ($session{form}{pn} < 1) { $pn = 0; } else { $pn = $session{form}{pn}; } if ($board{displayTitle}) { $html = '

'.$board{title}.'

'; } if ($board{description} ne "") { $html .= $board{description}.'

'; } if ($board{processMacros}) { $html = WebGUI::Macro::process($html); } $html .= '
'.WebGUI::International::get(246).'
'; $html .= ''; $html .= ''; #$sth = WebGUI::SQL->read("select messageId,subject,count(*)-1,username,dateOfPost,max(dateOfPost),max(messageId) from discussion where widgetId=$_[0] group by rid order by messageId desc", $session{dbh}); $sth = WebGUI::SQL->read("select messageId,subject,username,dateOfPost,userId from discussion where widgetId=$_[0] and pid=0 order by messageId desc", $session{dbh}); while (@data = $sth->array) { if ($i >= ($itemsPerPage*$pn) && $i < ($itemsPerPage*($pn+1))) { @last = WebGUI::SQL->quickArray("select messageId,dateOfPost,username,subject,userId from discussion where widgetId=$_[0] and rid=$data[0] order by dateOfPost desc",$session{dbh}); ($replies) = WebGUI::SQL->quickArray("select count(*)-1 from discussion where rid=$data[0]",$session{dbh}); $html .= ''; } $i++; } $html .= '
'.WebGUI::International::get(229).''.WebGUI::International::get(244).''.WebGUI::International::get(247).''.WebGUI::International::get(248).''.WebGUI::International::get(249).'
'.substr($data[1],0,30).''.$data[2].''.epochToHuman($data[3],"%M/%D %H:%n%p").''.$replies.''.substr($last[3],0,30).' @ '.epochToHuman($last[1],"%M/%D %H:%n%p").' by '.$last[2].'
'; $html .= '

'; return $html; } 1;