From: <ir...@us...> - 2012-10-11 08:41:50
|
Revision: 10212 http://sourceforge.net/p/xoops/svn/10212 Author: irmtfan Date: 2012-10-11 08:41:48 +0000 (Thu, 11 Oct 2012) Log Message: ----------- bug fix: viewpost.php?status=new was wrongly returned Modified Paths: -------------- XoopsModules/newbb/branches/irmtfan/newbb/changelog-rev10109.txt XoopsModules/newbb/branches/irmtfan/newbb/class/post.php XoopsModules/newbb/branches/irmtfan/newbb/viewpost.php Modified: XoopsModules/newbb/branches/irmtfan/newbb/changelog-rev10109.txt =================================================================== --- XoopsModules/newbb/branches/irmtfan/newbb/changelog-rev10109.txt 2012-10-10 11:01:37 UTC (rev 10211) +++ XoopsModules/newbb/branches/irmtfan/newbb/changelog-rev10109.txt 2012-10-11 08:41:48 UTC (rev 10212) @@ -1,3 +1,8 @@ +date 2012-10-11 +=================================== +1- bug fix: viewpost.php?status=new was wrongly return the new posts and new posts counts based on read_mode=1 (cookie) when the read_mode=2 (database) (important) +in newbb/viewpost.php and newbb/class/post.php + date 2012-10-10 =================================== 1- bug fix: in list.topic.php: remove empty arrays in getStatus function Modified: XoopsModules/newbb/branches/irmtfan/newbb/class/post.php =================================================================== --- XoopsModules/newbb/branches/irmtfan/newbb/class/post.php 2012-10-10 11:01:37 UTC (rev 10211) +++ XoopsModules/newbb/branches/irmtfan/newbb/class/post.php 2012-10-11 08:41:48 UTC (rev 10212) @@ -936,12 +936,31 @@ return true; } - - function getPostCount($criteria = null) +// START irmtfan enhance getPostCount when there is join (read_mode = 2) + function getPostCount($criteria = null, $join = null) { - return parent::getCount($criteria); + // If not join get the count from XOOPS/class/model/stats as before + if (empty($join)) + return parent::getCount($criteria); + + $sql = 'SELECT COUNT(*) as count'. + ' FROM ' . $this->db->prefix('bb_posts') . ' AS p'. + ' LEFT JOIN ' . $this->db->prefix('bb_posts_text') . " AS t ON t.post_id = p.post_id"; + // LEFT JOIN + $sql .= $join; + // WHERE + if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) { + $sql .= " ".$criteria->renderWhere(); + } + if (!$result = $this->db->query($sql)) { + //xoops_error($this->db->error().'<br />'.$sql); + return null; + } + $myrow = $this->db->fetchArray($result); + $count = $myrow['count']; + return $count; } - +// END irmtfan enhance getPostCount when there is join (read_mode = 2) /* * TODO: combining viewtopic.php */ Modified: XoopsModules/newbb/branches/irmtfan/newbb/viewpost.php =================================================================== --- XoopsModules/newbb/branches/irmtfan/newbb/viewpost.php 2012-10-10 11:01:37 UTC (rev 10211) +++ XoopsModules/newbb/branches/irmtfan/newbb/viewpost.php 2012-10-11 08:41:48 UTC (rev 10212) @@ -79,45 +79,49 @@ } $join = null; +// START irmtfan solve the status issues and specially status = new issue switch($status) { case "pending": - $criteria_status_count = new Criteria("approved", 0); - $criteria_status_post = new Criteria("p.approved", 0); + $criteria_count->add(new Criteria("approved", 0)); // irmtfan add new criteria + $criteria_post->add(new Criteria("p.approved", 0)); // irmtfan add new criteria break; case "deleted": - $criteria_status_count = new Criteria("approved", -1); - $criteria_status_post = new Criteria("p.approved", -1); + $criteria_count->add(new Criteria("approved", -1)); // irmtfan add new criteria + $criteria_post->add(new Criteria("p.approved", -1)); // irmtfan add new criteria break; case "new": - $criteria_status_count = new CriteriaCompo(new Criteria("post_time", intval($last_visit), ">")); - $criteria_status_post = new CriteriaCompo(new Criteria("p.post_time", intval($last_visit), ">")); - //$criteria_status_count->add(new Criteria("approved", 1)); - //$criteria_status_post->add(new Criteria("p.approved", 1)); - // following is for "unread" -- not finished + //$criteria_status_count = new CriteriaCompo(new Criteria("post_time", intval($last_visit), ">"));// irmtfan commented and removed + //$criteria_status_post = new CriteriaCompo(new Criteria("p.post_time", intval($last_visit), ">"));// irmtfan commented and removed + $criteria_count->add(new Criteria("approved", 1)); // irmtfan uncomment + $criteria_post->add(new Criteria("p.approved", 1)); // irmtfan uncomment + // following is for "unread" -- not finished -- irmtfan Now it is finished! if (empty($xoopsModuleConfig["read_mode"])) { - $criteria_status_count->add(new Criteria("approved", 1)); - $criteria_status_post->add(new Criteria("p.approved", 1)); + //$criteria_status_count->add(new Criteria("approved", 1));// irmtfan commented and removed + //$criteria_status_post->add(new Criteria("p.approved", 1));// irmtfan commented and removed } elseif ($xoopsModuleConfig["read_mode"] ==2) { - $join = ' LEFT JOIN ' . $xoopsDB->prefix('bb_reads_topic') . ' r ON r.read_item = p.topic_id'; - $criteria_status_post = new CriteriaCompo(new Criteria("p.post_id", "r.post_id", ">")); - $criteria_status_post->add(new Criteria("r.read_id", NULL, "IS"), "OR"); - $criteria_status_post->add(new Criteria("p.approved", 1)); + $join = ' LEFT JOIN ' . $xoopsDB->prefix('bb_reads_topic') . ' AS r ON r.read_item = p.topic_id'; // irmtfan corrected add AS + $criteria_status_post = new CriteriaCompo();// irmtfan new criteria + $criteria_status_post->add(new Criteria("p.post_id", "r.`post_id`", ">")); // irmtfan corrected - should use $value="r.``" to render in XOOPS/class/criteria.php + $criteria_status_post->add(new Criteria("r.read_id", NULL, "IS NULL"), "OR");// irmtfan corrected - should use "IS NULL" to render in XOOPS/class/criteria.php + //$criteria_status_post->add(new Criteria("p.approved", 1)); // irmtfan commented and removed //$criteria_status_count =& $criteria_status_post; + $criteria_post->add($criteria_status_post); // irmtfan add the status criteria to post criteria + $criteria_count =& $criteria_post;// irmtfan criteria count is equal to criteria post } elseif ($xoopsModuleConfig["read_mode"] == 1) { - $criteria_status_count = new CriteriaCompo(new Criteria("post_time", intval($last_visit), ">")); - $criteria_status_post = new CriteriaCompo(new Criteria("p.post_time", intval($last_visit), ">")); - $criteria_status_count->add(new Criteria("approved", 1)); - $criteria_status_post->add(new Criteria("p.approved", 1)); - } + $criteria_count->add(new Criteria("post_time", intval($last_visit), ">")); // irmtfan add new criteria + $criteria_post->add(new Criteria("p.post_time", intval($last_visit), ">")); // irmtfan add new criteria + //$criteria_status_count->add(new Criteria("approved", 1));// irmtfan commented and removed + //$criteria_status_post->add(new Criteria("p.approved", 1));// irmtfan commented and removed + } break; default: - $criteria_status_count = new Criteria("approved", 1); - $criteria_status_post = new Criteria("p.approved", 1); + $criteria_count->add(new Criteria("approved", 1)); // irmtfan add new criteria + $criteria_post->add(new Criteria("p.approved", 1)); // irmtfan add new criteria break; } -$criteria_count->add($criteria_status_count); -$criteria_post->add($criteria_status_post); - +//$criteria_count->add($criteria_status_count); // irmtfan commented and removed +//$criteria_post->add($criteria_status_post); // irmtfan commented and removed +// END irmtfan solve the status issues and specially status = new issue $karma_handler =& xoops_getmodulehandler('karma', 'newbb'); $user_karma = $karma_handler->getUserKarma(); @@ -135,8 +139,8 @@ ); $viewmode = in_array($viewmode, $valid_modes) ? $viewmode : $valid_modes[0]; -$postCount = $post_handler->getPostCount($criteria_count); -$posts = $post_handler->getPostsByLimit($criteria_post, $post_perpage, $start/*, $join*/); +$postCount = $post_handler->getPostCount($criteria_count, $join);// irmtfan add join for read_mode = 2 +$posts = $post_handler->getPostsByLimit($criteria_post, $post_perpage, $start, $join);// irmtfan add join for read_mode = 2 $poster_array = array(); if (count($posts)>0) foreach (array_keys($posts) as $id) { |