/*
** display comments on specified article ($ArticleID)
** $ParentID - 0 - to display top level comments, non 0 value to display comments on specified comment
** $StartingPos - from which comment (default = 0 , from the first )
*/
$MAXCOMMENTSPERPAGE = 10;
function ShowArticleComments_List($ArticleID, $ParentID, $COMMENT_ID, $StartingPos, $lineprefix, $ForumClass, $VIEWTYPE, $ItemID, $NoNewMessageLink=0){
global $DB;
global $MAXCOMMENTSPERPAGE;
global $PHP_SELF;
global $cat;
global $UserID;
$MAXCOMMENTSPERPAGE = 20;
$ArticleID = intval($ArticleID);
$ForumClass = addslashes($ForumClass);
$StartingPos = intval($StartingPos);
$SQL = "select count(*) as totalonlevel from AIV_COMMENTS where COMMENTS_ORIGINATOR_ID='$ArticleID' and COMMENTS_ORIGINATOR_TYPE = '$ForumClass'";
$result = getArray($DB, $SQL);
$TotalOnLevel = $result[0][totalonlevel];
// list view...
$SQL = "select AIV_COMMENTS.*, AIV_MEMBER.login, AIV_MEMBER.id from AIV_COMMENTS left join AIV_MEMBER on AIV_COMMENTS.COMMENTS_WRITER_ID=AIV_MEMBER.id where COMMENTS_ORIGINATOR_ID='$ArticleID' and COMMENTS_ORIGINATOR_TYPE='$ForumClass' order by COMMENTS_PUBDATE desc limit $StartingPos, $MAXCOMMENTSPERPAGE";
$result = getArray($DB, $SQL);
$numrecs = count($result);
if (!$result) $numrecs=0;
if( $StartingPos>0 ){
$PrevPos = $StartingPos - $MAXCOMMENTSPERPAGE;
if( $PrevPos < 0 ){
$PrevPos = 0;
}
$prevlink = "предыдущая";
$firstlink = "первая";
}else{
$prevlink = "предыдущая";
$firstlink = "первая";
}
if( $StartingPos+$MAXCOMMENTSPERPAGE < $TotalOnLevel){
$NextPos = $StartingPos + $MAXCOMMENTSPERPAGE;
$nextlink = "следующая";
$lastlink = "последняя";
} else {
$nextlink = "следующая";
$lastlink = "последняя";
}
$T = new TheTemplate();
$T->LoadTemplate("FORUM.HEADER");
if( !$NoNewMessageLink ){
$HASH["NEWMESSAGE"] = "новое сообщение";
}else{
$HASH["NEWMESSAGE"] = "";
}
// $HASH["LISTVIEW"] = "показать в виде списка";
// $HASH["TREEVIEW"] = "показать в виде дерева";
$HASH["LISTVIEW"] = "показать в виде списка";
$HASH["TREEVIEW"] = "показать в виде дерева";
echo $T->PrepareTemplate($HASH, 0, 1);
$T = new TheTemplate();
$T->LoadTemplate("FORUM.NAVIGATOR");
$HASH["FIRSTLINK"] = $firstlink;
$HASH["PREVLINK"] = $prevlink;
$HASH["NEXTLINK"] = $nextlink;
$HASH["LASTLINK"] = $lastlink;
$HASH["STARTTHREAD"] = $StartingPos + 1;
$HASH["ENDTHREAD"] = $StartingPos+$numrecs;
$HASH["TOTALTHREAD"] = $TotalOnLevel;
$HASH["PAGENUMBER"] = (floor($StartingPos/$MAXCOMMENTSPERPAGE) + 1);
$HASH["NUMPAGES"] = ceil($TotalOnLevel/$MAXCOMMENTSPERPAGE);
if ($numrecs > 0) echo $T->PrepareTemplate($HASH, 0, 1);
$T->LoadTemplate("FORUM.NAVIGATOR.BOTTOM");
$BOTTOM_NAVIGATOR = $T->PrepareTemplate($HASH, 0, 1);
if ( $numrecs > 0 ) {
$T = new TheTemplate();
$T->LoadTemplate("FORUM.MAINTABLE.HEADER");
$HASH["DATEMODE"] = "";
echo $T->PrepareTemplate($HASH, 0, 1);
}
$T = new TheTemplate();
$T->LoadTemplate("FORUM.ROW");
for ($i = 0; $i < $numrecs; $i++) {
$COMMID = $result[$i]["COMMENTS_ID"];
$HASH["NEW"] = "";
if (IsCE($UserID)) {
$HASH["NEW"] .= "[delete]";
}
$HASH["OFFSET"] = $lineprefix;
$HASH["SUBJECT"] = $result[$i]["COMMENTS_SUBJ"];
$HASH["AUTHOR"] = "" . $result[$i]["login"] . "";
$HASH["REPLIES"] = $result[$i]["anscount"];
$HASH["DATE"] = str_replace(" ", " ", FetchDate($result[$i]["COMMENTS_PUBDATE"], "d.m.y H:i"));
$HASH["ITEM.LINK"] = basename($PHP_SELF)."?id=$ArticleID&CLI=$StartingPos&COMMENT_ID=$COMMID&VIEWTYPE=$VIEWTYPE&ItemID=$CurItemID&fclass=$ForumClass";
echo $T->PrepareTemplate($HASH, 0, 1);
if ($COMMID == $COMMENT_ID) {
$TT = new TheTemplate();
$TT->LoadTemplate("FORUM.SELECTED.ITEM");
$HASH["MESSAGE.TEXT"] = nl2br($result[$i]["COMMENTS_TEXT"]);
$HASH["ANSWER.LINK"] = "writecomment.html?id=$ArticleID&CLI=$StartingPos&COMMENT_ID=$COMMID&VIEWTYPE=$VIEWTYPE&ItemID=$ItemID";
switch( $ForumClass ){
case "CATEGORY":
$HASH["ANSWER.LINK"] .= "&fclass=CATEGORY";
break;
case "ARTICLE":
$HASH["ANSWER.LINK"] .= "&fclass=ARTICLE";
break;
case "PERSONALITY":
$HASH["ANSWER.LINK"] .= "&fclass=PERSONALITY";
break;
/*
case "":
$HASH["ANSWER.LINK"] .= "&fclass=";
break;
*/
default:
break;
}
if( $NoNewMessageLink ){
$HASH["ANSWER.LINK"] = "#PZ";
}
echo $TT->PrepareTemplate($HASH, 0, 1);
}
}
if ( $numrecs > 0 ) {
echo $BOTTOM_NAVIGATOR;
}
} // ShowArticleComments_List
$PreloadedROW = false ;
$TheROW = false;
function ShowArticleComments($ArticleID, $ParentID=0, $COMMENT_ID=0, $StartingPos=0, $lineprefix="1", $ForumClass="ARTICLE", $VIEWTYPE = "T", $ItemID = 0, $NoNewMessageLink=0){
global $DB;
global $MAXCOMMENTSPERPAGE;
global $PHP_SELF;
global $cat;
global $UserID;
global $PreloadedROW;
global $TheROW;
if( !$PreloadedROW ){
$PreloadedROW = true;
$TheROW = new TheTemplate();
$TheROW->LoadTemplate("FORUM.ROW");
}
if( $VIEWTYPE == "L" ){
ShowArticleComments_List($ArticleID, $ParentID, $COMMENT_ID, $StartingPos, $lineprefix, $ForumClass, $VIEWTYPE, $ItemID, $NoNewMessageLink);
return;
}
if( $VIEWTYPE != "T" ){
echo "---> VIEW?";
return;
}
$ArticleID = intval($ArticleID);
$ParentID = intval($ParentID);
$ForumClass = addslashes($ForumClass);
$StartingPos = intval($StartingPos);
// tree view
$SQL = "select count(*) as totalonlevel from AIV_COMMENTS where COMMENTS_ORIGINATOR_ID='$ArticleID' and COMMENTS_PARENT_ID='$ParentID' and COMMENTS_ORIGINATOR_TYPE = '$ForumClass'";
$result = getArray($DB, $SQL);
$TotalOnLevel = $result[0][totalonlevel];
// if( ($TotalOnLevel == 0) && ($ParentID == 0) ){
// }
// tree view...
$SQL = "select AIV_COMMENTS.*, AIV_MEMBER.login, AIV_MEMBER.id from AIV_COMMENTS left join AIV_MEMBER on AIV_COMMENTS.COMMENTS_WRITER_ID=AIV_MEMBER.id where COMMENTS_ORIGINATOR_ID='$ArticleID' and COMMENTS_PARENT_ID='$ParentID' and COMMENTS_ORIGINATOR_TYPE='$ForumClass' order by COMMENTS_PUBDATE desc";
if( $ParentID == 0 ){
// limit number of simultaneously displayed articles on the top level
$SQL = $SQL . " limit $StartingPos, $MAXCOMMENTSPERPAGE";
}
$result = getArray($DB, $SQL);
$numrecs = count($result);
if (!$result) $numrecs=0;
if( $ParentID == 0 ){
if (!($VIEWTYPE == "L" && $ItemID != 0)) {
if( $result ){
if( $StartingPos>0 ){
$PrevPos = $StartingPos - $MAXCOMMENTSPERPAGE;
if( $PrevPos < 0 ){
$PrevPos = 0;
}
$prevlink = "предыдущая";
$firstlink = "первая";
}else{
$prevlink = "предыдущая";
$firstlink = "первая";
}
if( $StartingPos+$MAXCOMMENTSPERPAGE < $TotalOnLevel){
$NextPos = $StartingPos + $MAXCOMMENTSPERPAGE;
$nextlink = "следующая";
$lastlink = "последняя";
} else {
$nextlink = "следующая";
$lastlink = "последняя";
}
}
} else { // if VIEWTYPE == L and ItemID != 0
}
if ($nextlink == "") {
$nextlink = "следующая";
$lastlink = "последняя";
$prevlink = "предыдущая";
$firstlink = "первая";
}
$T = new TheTemplate();
$T->LoadTemplate("FORUM.HEADER");
if( !$NoNewMessageLink ){
$HASH["NEWMESSAGE"] = "новое сообщение";
}else{
$HASH["NEWMESSAGE"] = "";
}
$HASH["LISTVIEW"] = "показать в виде списка";
$HASH["TREEVIEW"] = "показать в виде дерева";
echo $T->PrepareTemplate($HASH, 0, 1);
$T = new TheTemplate();
$T->LoadTemplate("FORUM.NAVIGATOR");
$HASH["FIRSTLINK"] = $firstlink;
$HASH["PREVLINK"] = $prevlink;
$HASH["NEXTLINK"] = $nextlink;
$HASH["LASTLINK"] = $lastlink;
$HASH["STARTTHREAD"] = $StartingPos + 1;
$HASH["ENDTHREAD"] = $StartingPos+$numrecs;
$HASH["TOTALTHREAD"] = $TotalOnLevel;
$HASH["PAGENUMBER"] = (floor($StartingPos/$MAXCOMMENTSPERPAGE) + 1);
$HASH["NUMPAGES"] = ceil($TotalOnLevel/$MAXCOMMENTSPERPAGE);
if ($numrecs > 0) echo $T->PrepareTemplate($HASH, 0, 1);
$T->LoadTemplate("FORUM.NAVIGATOR.BOTTOM");
$BOTTOM_NAVIGATOR = $T->PrepareTemplate($HASH, 0, 1);
}
if ($ParentID == 0 && $numrecs > 0) {
$T = new TheTemplate();
$T->LoadTemplate("FORUM.MAINTABLE.HEADER");
$HASH["DATEMODE"] = "";
echo $T->PrepareTemplate($HASH, 0, 1);
}
// use preloaded!!!
$T = $TheROW;
for ($i = 0; $i < $numrecs; $i++) {
$COMMID = $result[$i]["COMMENTS_ID"];
if ($ParentID == 0 && $VIEWTYPE == L) {
if ($ItemID) {
if ($COMMID != $ItemID) {
continue;
}
}
}
if ($ParentID == 0) {
$CurItemID = $COMMID;
} else {
$CurItemID = $ItemID;
}
$HASH["NEW"] = "";
if (IsCE($UserID)) {
$HASH["NEW"] .= "[delete]";
}
$HASH["OFFSET"] = $lineprefix;
$HASH["SUBJECT"] = $result[$i]["COMMENTS_SUBJ"];
$HASH["AUTHOR"] = "" . $result[$i]["login"] . "";
$HASH["REPLIES"] = $result[$i]["anscount"];
$HASH["DATE"] = str_replace(" ", " ", FetchDate($result[$i]["COMMENTS_PUBDATE"], "d.m.y H:i"));
$HASH["ITEM.LINK"] = basename($PHP_SELF)."?id=$ArticleID&CLI=$StartingPos&COMMENT_ID=$COMMID&VIEWTYPE=$VIEWTYPE&ItemID=$CurItemID&fclass=$ForumClass";
echo $T->PrepareTemplate($HASH, 0, 1);
if ($COMMID == $COMMENT_ID) {
$TT = new TheTemplate();
$TT->LoadTemplate("FORUM.SELECTED.ITEM");
$HASH["MESSAGE.TEXT"] = nl2br($result[$i]["COMMENTS_TEXT"]);
$HASH["ANSWER.LINK"] = "writecomment.html?id=$ArticleID&CLI=$StartingPos&COMMENT_ID=$COMMID&VIEWTYPE=$VIEWTYPE&ItemID=$ItemID";
switch( $ForumClass ){
case "CATEGORY":
$HASH["ANSWER.LINK"] .= "&fclass=CATEGORY";
break;
case "ARTICLE":
$HASH["ANSWER.LINK"] .= "&fclass=ARTICLE";
break;
case "PERSONALITY":
$HASH["ANSWER.LINK"] .= "&fclass=PERSONALITY";
break;
/*
case "":
$HASH["ANSWER.LINK"] .= "&fclass=";
break;
*/
default:
break;
}
if( $NoNewMessageLink ){
$HASH["ANSWER.LINK"] = "#PZ";
}
echo $TT->PrepareTemplate($HASH, 0, 1);
}
if (!($VIEWTYPE == "L" && $ItemID == 0)) {
ShowArticleComments($ArticleID, $COMMID, $COMMENT_ID, $StartingPos, $lineprefix + 10, $ForumClass, $VIEWTYPE, $CurItemID, $NoNewMessageLink);
}
} // for(all messages loop)
if ($ParentID == 0 && $numrecs > 0) {
$T = new TheTemplate();
$T->LoadTemplate("FORUM.MAINTABLE.FOOTER");
echo $T->PrepareTemplate($HASH, 0, 1);
echo $BOTTOM_NAVIGATOR;
}
} // ShowArticleComments
/*
** create new comment. arguments are: the article ID, the writer (member ) ID, text, and the last is ID of parent comment
** default value is 0 - means top level comment. non 0 value mean that it's a comment on specified comment.
*/
function AddArticleComment($ArticleID, $MemberID, $CommSubj, $CommentText, $ParentCommentID = 0, $CommentClass='ARTICLE', $allowautoreply='N', $systemmessage='N'){
global $TOTAL_LOGGING;
global $DB ;
global $SERVER_NAME;
global $EMAIL_SERVER_NAME;
global $UserID;
// some sanity checks
$RemoteHost = getenv("REMOTE_ADDR");
if( $allowautoreply!='Y' ){
$allowautoreply='N';
}
if( $systemmessage!='Y' ){
$systemmessage='N';
}
$ArticleErrors = "";
$CommSubj = trim($CommSubj);
$CommentText = trim($CommentText);
$AllInput = $CommSubj . " " . $CommentText ;
if( $CommSubj == "" ){
$ArticleErrors = "Тема должна быть заполнена!";
return $ArticleErrors;
}
// $ErrLinks = CheckForLinks( $AllInput );
// if( $ErrLinks != "" ){
// $ArticleErrors .= "$ErrLinks
";
// }
$ArticleWordsCount = SpaceCount( $AllInput );
if ( $ArticleWordsCount<5 ) $ArticleErrors .= "Слишком короткий комментарий ~ $ArticleWordsCount (минимум - 5 слов).
";
$BadWordList = IsArticleVulgar( $AllInput );
if ( $BadWordList != "" ) $ArticleErrors .= "Нецензурные или запрещенные конструкции! Слова типа $BadWordList недопустимы!
";
$CommSubj = wordwrap($CommSubj, 80, "\n", 1);
$CommentText = wordwrap($CommentText, 80, "\n", 1);
//
//
// Spell checking temporary turned off!!!
//
// $SpellErrors = SpellCheck( $AllInput );
//
// if ($SpellErrors!="") $ArticleErrors .= "Ваш комментарий содержит грамматические ошибки: $SpellErrors.";
$ArticleID = intval($ArticleID);
$CommentClass = addslashes($CommentClass);
$CommSubj = addslashes($CommSubj);
$CommentText = addslashes($CommentText);
$ParentCommentID= intval($ParentCommentID);
$RemoteHost = addslashes($RemoteHost);
$allowautoreply = addslashes($allowautoreply);
$systemmessage = addslashes($systemmessage);
$comid = intval($comid);
$SQLDouble = "select count(*) as cnt from AIV_COMMENTS where COMMENTS_ORIGINATOR_ID = '$ArticleID' and " .
"COMMENTS_ORIGINATOR_TYPE = '$CommentClass' and " .
"( SOUNDEX(COMMENTS_SUBJ) = SOUNDEX('$CommSubj') and COMMENTS_TEXT = '$CommentText' ) and " .
"( TO_DAYS( NOW() ) - TO_DAYS( COMMENTS_PUBDATE ) < 1 )";
// echo $SQLDouble;
$resultDouble = getArray($DB, $SQLDouble);
$cntDouble = $resultDouble[0]["cnt"];
if ($cntDouble != 0) $ArticleErrors .= "Вы не можете послать одно и то же сообщение дважды в день";
if( $ArticleErrors == "" ){
$SQL = "insert into AIV_COMMENTS (COMMENTS_ORIGINATOR_ID, COMMENTS_ORIGINATOR_TYPE, COMMENTS_PARENT_ID, ".
"COMMENTS_WRITER_ID, COMMENTS_SUBJ, COMMENTS_TEXT,COMMENTS_PUBDATE,COMMENTS_PUBHOST,COMMENTS_ISAUTOREPLY,COMMENTS_ISSYSTEM ) values " .
"('$ArticleID', '$CommentClass', '$ParentCommentID', ".
"'$MemberID', '$CommSubj', '$CommentText', now(), '$RemoteHost', '$allowautoreply', '$systemmessage')";
// echo $SQL;
$result = DBExec($DB, $SQL);
$FORUMMSG_ID = mysql_insert_id();
IndexifyForumMessage($FORUMMSG_ID);
// autoreply section...
$curruser = GetUserByID($UserID);
$comid = $ParentCommentID;
while (true) {
$SQL = "update AIV_COMMENTS set anscount = (anscount + 1) where COMMENTS_ID = '$comid'";
DBExec($DB, $SQL);
$SQL = "select COMMENTS_PARENT_ID from AIV_COMMENTS where COMMENTS_ID = '$comid'";
$result = getArray($DB, $SQL);
if ($result) $comid = $result[0]["COMMENTS_PARENT_ID"];
else $comid = 0;
if ($comid == 0) break;
}
if( !is_object($curruser) ){
$WriterEmail = "webmaster@" . $EMAIL_SERVER_NAME;
}else{
$WriterEmail = $curruser->member_email;
}
// echo "CU:$WriterEmail:EM";
if( $ParentCommentID > 0 ){
$SQL = "select COMMENTS_WRITER_ID, COMMENTS_ISAUTOREPLY, login, prime_email from AIV_COMMENTS LEFT JOIN AIV_MEMBER on (AIV_MEMBER.id = AIV_COMMENTS.COMMENTS_WRITER_ID) where COMMENTS_ID = '$ParentCommentID' and COMMENTS_ORIGINATOR_TYPE='$CommentClass'";
$res = getArray($DB, $SQL);
if ($res) {
$AllowAutoreply = $res[0]["COMMENTS_ISAUTOREPLY"];
if( $AllowAutoreply == "Y" ){
$public_email = $res[0]["public_email"];
$prime_email = $res[0]["prime_email"];
if( $public_email == "" ){
$SendTo = $public_email;
}else{
$SendTo = $prime_email;
}
mailreply($SendTo,
"$SERVER_NAME alert. Ответ на Ваше сообщение:" . ($CommSubj),
($CommentText), $WriterEmail);
}
}
}
// Those line is for debug porpouses only!!!!
// and control of supervizor!!!
if( $TOTAL_LOGGING ){
//
// Next line for DEBUG&SPY purpouses ONLY
//
CEAlerter(
"New message on $SERVER_NAME at (AID:$ArticleID MSGID:$FORUMMSG_ID CLASS:$CommentClass) : " . ($CommSubj),
($CommentText)
);
}
}
return $ArticleErrors;
}
/*
** count total number of comments on specified article
*/
function CountArticleComment($ArticleID, $CommentClass='ARTICLE'){
global $DB ;
$ArticleID = intval($ArticleID);
$CommentClass = addslashes($CommentClass);
$SQL = "select count(*) as cnt from AIV_COMMENTS where COMMENTS_ORIGINATOR_ID = '$ArticleID' and COMMENTS_ORIGINATOR_TYPE='$CommentClass'";
$result = GetObject($DB, $SQL);
return $result ? $result["cnt"] : 0;
}
function getEnoughGt($Gt) {
$ret = "";
for ($i = 0; $i < $Gt; $i++) {
$ret .= "> ";
}
return $ret;
}
function CountGt($text) {
$count = count(explode(">", $text));
return $count;
}
function DoQuoting($text) {
$ret = "";
$curText = explode("\n", $text);
for ($i = 0; $i < count($curText); $i++) {
$ret .= "> " . wordwrap($curText[$i], 70, "\n> ");
}
return $ret . "\n>\n";
}
function splitText($text) {
$textt = split("[ \t]", $text);
$ret = "";
for ($i = 0; $i < count($textt); $i++) {
if (strlen($textt[$i]) > 30) {
$ttextt = $textt[$i];
while ($ttextt != "") {
$ret .= substr($ttextt, 0, 30) . "\n";
$ttextt = substr($ttextt, 30);
}
} else $ret .= $textt[$i] . " ";
}
return $ret;
}
function deleteMessage($COMMENT_ID) {
global $DB;
$COMMENT_ID = intval($COMMENT_ID);
$comid = $COMMENT_ID;
while (true) {
$SQL = "update AIV_COMMENTS set anscount = (anscount - 1) where COMMENTS_ID = '$comid'";
DBExec($DB, $SQL);
$SQL = "select COMMENTS_PARENT_ID from AIV_COMMENTS where COMMENTS_ID = '$comid'";
$result = getArray($DB, $SQL);
if ($result) $comid = $result[0]["COMMENTS_PARENT_ID"];
else $comid = 0;
if ($comid == 0) break;
}
$SQL = "update AIV_COMMENTS set anscount = '0' where anscount < 0";
DBExec($DB, $SQL);
$SQL = "select * from AIV_ASSET where RESOURCE_ID = '$COMMENT_ID' and ASSET_TYPE = 'O'";
$result = getArray($DB, $SQL);
if ($result) {
$assid = $result[0]["ASSET_ID"];
$SQL = "delete from AIV_KEYWORD_ASSET where asset_id = '$assid'";
DBExec($DB, $SQL);
$SQL = "delete from AIV_ASSET where ASSET_ID = '$assid'";
DBExec($DB, $SQL);
}
$SQL = "select * from AIV_COMMENTS where COMMENTS_PARENT_ID = '$COMMENT_ID'";
$result = getArray($DB, $SQL);
if ($result) {
for ($i = 0; $i < count($result); $i++) {
deleteMessage($result[$i]["COMMENTS_ID"]);
}
}
$SQL = "delete from AIV_COMMENTS where COMMENTS_ID = '$COMMENT_ID'";
DBExec($DB, $SQL);
$SQL = "delete from AIV_ASSET where ASSET_TYPE='FORUM_MESSAGE' and RESOURCE_ID='$COMMENT_ID'";
DBExec($DB, $SQL);
}
?>