<?php // $Id: class.forumposts.php,v 1.10.14.1 2005/08/15 15:04:59 skalpa Exp $ // ------------------------------------------------------------------------ // // XOOPS - PHP Content Management System // // Copyright (c) 2000 XOOPS.org // // <http://www.xoops.org/> // // ------------------------------------------------------------------------ // // 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. // // // // You may not change or alter any portion of this comment or credits // // of supporting developers from this source code or any supporting // // source code which is considered copyrighted (c) material of the // // original comment or credit authors. // // // // This program is distributed in the 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 // // ------------------------------------------------------------------------ // // Author: Kazumi Ono (AKA onokazu) // // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ // // Project: The XOOPS Project // // ------------------------------------------------------------------------- // if (!defined('XOOPS_ROOT_PATH')) { die("XOOPS root path not defined"); } include_once XOOPS_ROOT_PATH."/class/xoopstree.php"; class ForumPosts { var $post_id; var $topic_id; var $forum_id; var $post_time; var $poster_ip; var $order; var $subject; var $post_text; var $pid; var $nohtml = 0; var $nosmiley = 0; var $uid; var $icon; var $attachsig; var $prefix; var $db; var $istopic = false; var $islocked = false; function ForumPosts($id=null) { $this->db =& Database::getInstance(); if ( is_array($id) ) { $this->makePost($id); } elseif ( isset($id) ) { $this->getPost(intval($id)); } } function setTopicId($value){ $this->topic_id = $value; } function getTopicId() { return isset($this->topic_id) ? $this->topic_id : 0; } function setOrder($value){ $this->order = $value; } // 2004-1-12 GIJOE <gij@peak.ne.jp> Added routine to move to the correct // starting position within a topic thread function &getAllPosts($topic_id, $order="ASC", $perpage=0, &$start, $post_id=0){ $db =& Database::getInstance(); if( $order == "DESC" ) { $operator_for_position = '>' ; } else { $order = "ASC" ; $operator_for_position = '<' ; } if ($perpage <= 0) { $perpage = 10; } if (empty($start)) { $start = 0; } if (!empty($post_id)) { $result = $db->query("SELECT COUNT(post_id) FROM ".$db->prefix('bb_posts')." WHERE topic_id=$topic_id AND post_id $operator_for_position $post_id"); list($position) = $db->fetchRow($result); $start = intval($position / $perpage) * $perpage; } $sql = 'SELECT p.*, t.post_text FROM '.$db->prefix('bb_posts').' p, '.$db->prefix('bb_posts_text')." t WHERE p.topic_id=$topic_id AND p.post_id = t.post_id ORDER BY p.post_id $order"; $result = $db->query($sql,$perpage,$start); $ret = array(); while ($myrow = $db->fetchArray($result)) { $ret[] = new ForumPosts($myrow); } return $ret; } function setParent($value){ $this->pid=$value; } function setSubject($value){ $this->subject=$value; } function setText($value){ $this->post_text=$value; } function setUid($value){ $this->uid=$value; } function setForum($value){ $this->forum_id=$value; } function setIp($value){ $this->poster_ip=$value; } function setNohtml($value=0){ $this->nohtml=$value; } function setNosmiley($value=0){ $this->nosmiley=$value; } function setIcon($value){ $this->icon=$value; } function setAttachsig($value){ $this->attachsig=$value; } function store() { $myts =& MyTextSanitizer::getInstance(); $subject =$myts->censorString($this->subject); $post_text =$myts->censorString($this->post_text); $subject = $myts->makeTboxData4Save($subject); $post_text = $myts->makeTareaData4Save($post_text); if ( empty($this->post_id) ) { if ( empty($this->topic_id) ) { $this->topic_id = $this->db->genId($this->db->prefix("bb_topics")."_topic_id_seq"); $datetime = time(); $sql = "INSERT INTO ".$this->db->prefix("bb_topics")." (topic_id, topic_title, topic_poster, forum_id, topic_time) VALUES (".$this->topic_id.",'$subject', ".$this->uid.", ".$this->forum_id.", $datetime)"; if ( !$result = $this->db->query($sql) ) { return false; } if ( $this->topic_id == 0 ) { $this->topic_id = $this->db->getInsertId(); } } if ( !isset($this->nohtml) || $this->nohtml != 1 ) { $this->nohtml = 0; } if ( !isset($this->nosmiley) || $this->nosmiley != 1 ) { $this->nosmiley = 0; } if ( !isset($this->attachsig) || $this->attachsig != 1 ) { $this->attachsig = 0; } $this->post_id = $this->db->genId($this->db->prefix("bb_posts")."_post_id_seq"); $datetime = time(); $sql = sprintf("INSERT INTO %s (post_id, pid, topic_id, forum_id, post_time, uid, poster_ip, subject, nohtml, nosmiley, icon, attachsig) VALUES (%u, %u, %u, %u, %u, %u, '%s', '%s', %u, %u, '%s', %u)", $this->db->prefix("bb_posts"), $this->post_id, $this->pid, $this->topic_id, $this->forum_id, $datetime, $this->uid, $this->poster_ip, $subject, $this->nohtml, $this->nosmiley, $this->icon, $this->attachsig); if ( !$result = $this->db->query($sql) ) { return false; } else { if ( $this->post_id == 0 ) { $this->post_id = $this->db->getInsertId(); } $sql = sprintf("INSERT INTO %s (post_id, post_text) VALUES (%u, '%s')", $this->db->prefix("bb_posts_text"), $this->post_id, $post_text); if ( !$result = $this->db->query($sql) ) { $sql = sprintf("DELETE FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts"), $this->post_id); $this->db->query($sql); return false; } } if ( $this->pid == 0 ) { $sql = sprintf("UPDATE %s SET topic_last_post_id = %u, topic_time = %u WHERE topic_id = %u", $this->db->prefix("bb_topics"), $this->post_id, $datetime, $this->topic_id); if ( !$result = $this->db->query($sql) ) { } $sql = sprintf("UPDATE %s SET forum_posts = forum_posts+1, forum_topics = forum_topics+1, forum_last_post_id = %u WHERE forum_id = %u", $this->db->prefix("bb_forums"), $this->post_id, $this->forum_id); $result = $this->db->query($sql); if ( !$result ) { } } else { $sql = "UPDATE ".$this->db->prefix("bb_topics")." SET topic_replies=topic_replies+1, topic_last_post_id = ".$this->post_id.", topic_time = $datetime WHERE topic_id =".$this->topic_id.""; if ( !$result = $this->db->query($sql) ) { } $sql = "UPDATE ".$this->db->prefix("bb_forums")." SET forum_posts = forum_posts+1, forum_last_post_id = ".$this->post_id." WHERE forum_id = ".$this->forum_id.""; $result = $this->db->query($sql); if ( !$result ) { } } }else{ if ( $this->istopic() ) { $sql = "UPDATE ".$this->db->prefix("bb_topics")." SET topic_title = '$subject' WHERE topic_id = ".$this->topic_id.""; if ( !$result = $this->db->query($sql) ) { return false; } } if ( !isset($this->nohtml) || $this->nohtml != 1 ) { $this->nohtml = 0; } if ( !isset($this->nosmiley) || $this->nosmiley != 1 ) { $this->nosmiley = 0; } if ( !isset($this->attachsig) || $this->attachsig != 1 ) { $this->attachsig = 0; } $sql = "UPDATE ".$this->db->prefix("bb_posts")." SET subject='".$subject."', nohtml=".$this->nohtml.", nosmiley=".$this->nosmiley.", icon='".$this->icon."', attachsig=".$this->attachsig." WHERE post_id=".$this->post_id.""; $result = $this->db->query($sql); if ( !$result ) { return false; } else { $sql = "UPDATE ".$this->db->prefix("bb_posts_text")." SET post_text = '".$post_text."' WHERE post_id =".$this->post_id.""; $result = $this->db->query($sql); if ( !$result ) { return false; } } } return $this->post_id; } function getPost($id) { $sql = 'SELECT p.*, t.post_text, tp.topic_status FROM '.$this->db->prefix('bb_posts').' p LEFT JOIN '.$this->db->prefix('bb_posts_text').' t ON p.post_id=t.post_id LEFT JOIN '.$this->db->prefix('bb_topics').' tp ON tp.topic_id=p.topic_id WHERE p.post_id='.$id; $array = $this->db->fetchArray($this->db->query($sql)); $this->post_id = $array['post_id']; $this->pid = $array['pid']; $this->topic_id = $array['topic_id']; $this->forum_id = $array['forum_id']; $this->post_time = $array['post_time']; $this->uid = $array['uid']; $this->poster_ip = $array['poster_ip']; $this->subject = $array['subject']; $this->nohtml = $array['nohtml']; $this->nosmiley = $array['nosmiley']; $this->icon = $array['icon']; $this->attachsig = $array['attachsig']; $this->post_text = $array['post_text']; if ($array['pid'] == 0) { $this->istopic = true; } if ($array['topic_status'] == 1) { $this->islocked = true; } } function makePost($array){ foreach($array as $key=>$value){ $this->$key = $value; } } function delete() { $sql = sprintf("DELETE FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts"), $this->post_id); if ( !$result = $this->db->query($sql) ) { return false; } $sql = sprintf("DELETE FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts_text"), $this->post_id); if ( !$result = $this->db->query($sql) ) { echo "Could not remove posts text for Post ID:".$this->post_id.".<br />"; } if ( !empty($this->uid) ) { $sql = sprintf("UPDATE %s SET posts=posts-1 WHERE uid = %u", $this->db->prefix("users"), $this->uid); if ( !$result = $this->db->query($sql) ) { // echo "Could not update user posts."; } } if ($this->istopic()) { $sql = sprintf("DELETE FROM %s WHERE topic_id = %u", $this->db->prefix("bb_topics"), $this->topic_id); if ( !$result = $this->db->query($sql) ) { echo "Could not delete topic."; } } $mytree = new XoopsTree($this->db->prefix("bb_posts"), "post_id", "pid"); $arr = $mytree->getAllChild($this->post_id); $size = count($arr); if ( $size > 0 ) { for ( $i = 0; $i < $size; $i++ ) { $sql = sprintf("DELETE FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts"), $arr[$i]['post_id']); if ( !$result = $this->db->query($sql) ) { echo "Could not delete post ".$arr[$i]['post_id'].""; } $sql = sprintf("DELETE FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts_text"), $arr[$i]['post_id']); if ( !$result = $this->db->query($sql) ) { echo "Could not delete post text ".$arr[$i]['post_id'].""; } if ( !empty($arr[$i]['uid']) ) { $sql = "UPDATE ".$this->db->prefix("users")." SET posts=posts-1 WHERE uid=".$arr[$i]['uid'].""; if ( !$result = $this->db->query($sql) ) { // echo "Could not update user posts."; } } } } } function subject($format="Show") { $myts =& MyTextSanitizer::getInstance(); $smiley = 1; if ( $this->nosmiley() ) { $smiley = 0; } switch ( $format ) { case "Show": $subject= $myts->makeTboxData4Show($this->subject,$smiley); break; case "Edit": $subject = $myts->makeTboxData4Edit($this->subject); break; case "Preview": $subject = $myts->makeTboxData4Preview($this->subject,$smiley); break; case "InForm": $subject = $myts->makeTboxData4PreviewInForm($this->subject); break; } return $subject; } function text($format="Show"){ $myts =& MyTextSanitizer::getInstance(); $smiley = 1; $html = 1; $bbcodes = 1; if ( $this->nohtml() ) { $html = 0; } if ( $this->nosmiley() ) { $smiley = 0; } switch ( $format ) { case "Show": $text = $myts->makeTareaData4Show($this->post_text,$html,$smiley,$bbcodes); break; case "Edit": $text = $myts->makeTareaData4Edit($this->post_text); break; case "Preview": $text = $myts->makeTareaData4Preview($this->post_text,$html,$smiley,$bbcodes); break; case "InForm": $text = $myts->makeTareaData4PreviewInForm($this->post_text); break; case "Quotes": $text = $myts->makeTareaData4InsideQuotes($this->post_text); break; } return $text; } function postid() { return $this->post_id; } function posttime(){ return $this->post_time; } function uid(){ return $this->uid; } function uname(){ return XoopsUser::getUnameFromId($this->uid); } function posterip(){ return $this->poster_ip; } function parent(){ return $this->pid; } function topic(){ return $this->topic_id; } function nohtml(){ return $this->nohtml; } function nosmiley(){ return $this->nosmiley; } function icon(){ return $this->icon; } function forum(){ return $this->forum_id; } function attachsig(){ return $this->attachsig; } function prefix(){ return $this->prefix; } function istopic() { if ($this->istopic) { return true; } return false; } function islocked() { if ($this->islocked) { return true; } return false; } } ?>