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); } ?>