public static function getCommentsTree($object_id, $object_group = 'com_content', $page = 0) { $object_id = (int) $object_id; $object_group = trim($object_group); $user = JFactory::getUser(); $acl = JCommentsFactory::getACL(); $config = JCommentsFactory::getConfig(); $total = JComments::getCommentsCount($object_id, $object_group); if ($acl->canComment() == 0 && $total == 0) { return ''; } if ($total > 0) { $options = array(); $options['object_id'] = $object_id; $options['object_group'] = $object_group; $options['published'] = $acl->canPublish() || $acl->canPublishForObject($object_id, $object_group) ? null : 1; $options['votes'] = $config->getInt('enable_voting'); $rows = JCommentsModel::getCommentsList($options); } else { $rows = array(); } $tmpl = JCommentsFactory::getTemplate($object_id, $object_group); $tmpl->load('tpl_tree'); $tmpl->load('tpl_comment'); if (count($rows)) { $isLocked = $config->getInt('comments_locked', 0) == 1; $tmpl->addVar('tpl_tree', 'comments-refresh', intval(!$isLocked)); $tmpl->addVar('tpl_tree', 'comments-rss', intval($config->getInt('enable_rss') && !$isLocked)); $tmpl->addVar('tpl_tree', 'comments-can-subscribe', intval($user->id && $acl->check('enable_subscribe') && !$isLocked)); $tmpl->addVar('tpl_tree', 'comments-count', count($rows)); if ($user->id && $acl->check('enable_subscribe')) { require_once JCOMMENTS_SITE . '/jcomments.subscription.php'; $manager = JCommentsSubscriptionManager::getInstance(); $isSubscribed = $manager->isSubscribed($object_id, $object_group, $user->id); $tmpl->addVar('tpl_tree', 'comments-user-subscribed', $isSubscribed); } $i = 1; JCommentsEventHelper::trigger('onJCommentsCommentsPrepare', array(&$rows)); if ($acl->check('enable_gravatar')) { JCommentsEventHelper::trigger('onPrepareAvatars', array(&$rows)); } require_once JCOMMENTS_LIBRARIES . '/joomlatune/tree.php'; $tree = new JoomlaTuneTree($rows); $items = $tree->get(); foreach ($rows as $row) { // run autocensor, replace quotes, smilies and other pre-view processing JComments::prepareComment($row); // setup toolbar if (!$acl->canModerate($row)) { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 0); } else { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 1); $tmpl->addVar('tpl_comment', 'button-edit', $acl->canEdit($row)); $tmpl->addVar('tpl_comment', 'button-delete', $acl->canDelete($row)); $tmpl->addVar('tpl_comment', 'button-publish', $acl->canPublish($row)); $tmpl->addVar('tpl_comment', 'button-ip', $acl->canViewIP($row)); $tmpl->addVar('tpl_comment', 'button-ban', $acl->canBan($row)); } $tmpl->addVar('tpl_comment', 'comment-show-vote', $config->getInt('enable_voting')); $tmpl->addVar('tpl_comment', 'comment-show-email', $acl->canViewEmail($row)); $tmpl->addVar('tpl_comment', 'comment-show-homepage', $acl->canViewHomepage($row)); $tmpl->addVar('tpl_comment', 'comment-show-title', $config->getInt('comment_title')); $tmpl->addVar('tpl_comment', 'button-vote', $acl->canVote($row)); $tmpl->addVar('tpl_comment', 'button-quote', $acl->canQuote($row)); $tmpl->addVar('tpl_comment', 'button-reply', $acl->canReply($row)); $tmpl->addVar('tpl_comment', 'button-report', $acl->canReport($row)); $tmpl->addVar('tpl_comment', 'avatar', $acl->check('enable_gravatar') && !$row->deleted); if (isset($items[$row->id])) { $tmpl->addVar('tpl_comment', 'comment-number', ''); $tmpl->addObject('tpl_comment', 'comment', $row); $items[$row->id]->html = $tmpl->renderTemplate('tpl_comment'); $i++; } } $tmpl->addObject('tpl_tree', 'comments-items', $items); unset($rows); } return $tmpl->renderTemplate('tpl_tree'); }
/** * Delete all comments for given ids * * @param $ids Array of comments ids * @return void */ public static function deleteCommentsByIds($ids) { if (is_array($ids)) { if (count($ids)) { $db = JFactory::getDbo(); $db->setQuery("SELECT DISTINCT object_group, object_id FROM #__jcomments WHERE parent IN (" . implode(',', $ids) . ")"); $objects = $db->loadObjectList(); if (count($objects)) { require_once JCOMMENTS_LIBRARIES . '/joomlatune/tree.php'; $descendants = array(); foreach ($objects as $o) { $query = "SELECT id, parent" . "\nFROM #__jcomments" . "\nWHERE `object_group` = " . $db->Quote($o->object_group) . "\nAND `object_id` = " . $db->Quote($o->object_id); $db->setQuery($query); $comments = $db->loadObjectList(); $tree = new JoomlaTuneTree($comments); foreach ($ids as $id) { $descendants = array_merge($descendants, $tree->descendants((int) $id)); } unset($tree); $descendants = array_unique($descendants); } $ids = array_merge($ids, $descendants); } unset($descendants); $ids = implode(',', $ids); $db->setQuery("DELETE FROM #__jcomments WHERE id IN (" . $ids . ")"); $db->execute(); $db->setQuery("DELETE FROM #__jcomments_votes WHERE commentid IN (" . $ids . ")"); $db->execute(); $db->setQuery("DELETE FROM #__jcomments_reports WHERE commentid IN (" . $ids . ")"); $db->execute(); } } }
function getCommentsTree($object_id, $object_group = 'com_content', $search_text = '') { global $my; $object_id = (int) $object_id; $object_group = trim($object_group); $acl =& JCommentsFactory::getACL(); $dbo =& JCommentsFactory::getDBO(); $config =& JCommentsFactory::getConfig(); $canPublish = $acl->canPublish(); $canComment = $acl->canComment(); $where = ''; if ($search_text) { $words = explode(' ', $search_text); $wheres = array(); foreach ($words as $word) { $wheres2 = array(); $wheres2[] = "LOWER(name) LIKE '%{$word}%'"; $wheres2[] = "LOWER(comment) LIKE '%{$word}%'"; } if (isset($wheres2) && count($wheres2)) { $where .= ' AND ('; $where .= implode(' OR ', $wheres2); $where .= ' )'; } } if ($canComment == 0) { $total = JLMS_JComments::getCommentsCount($object_id, $object_group, $where); if ($total == 0) { return ''; } } $query = "SELECT c.id, c.parent, c.object_id, c.object_group, c.userid, c.name, c.username, c.title, c.comment" . "\n , c.email, c.homepage, c.date as datetime, c.ip, c.published, c.checked_out, c.checked_out_time" . "\n , c.isgood, c.ispoor" . "\n , v.value as voted" . "\n FROM #__jcomments AS c" . "\n LEFT JOIN #__jcomments_votes AS v ON c.id = v.commentid " . ($my->id ? " AND v.userid = " . $my->id : " AND v.ip = '" . $acl->getUserIP() . "'") . "\n WHERE c.object_id = " . $object_id . "\n AND c.object_group = '" . $object_group . "'" . (JCommentsMultilingual::isEnabled() ? "\nAND c.lang = '" . JCommentsMultilingual::getLanguage() . "'" : "") . ($canPublish == 0 ? "\nAND c.published = 1" : "") . $where . "\n ORDER BY c.parent, c.date ASC"; $dbo->setQuery($query); $rows = $dbo->loadObjectList(); $tmpl =& JCommentsFactory::getTemplate($object_id, $object_group); $tmpl->load('tpl_tree'); $tmpl->load('tpl_comment'); if (count($rows)) { $isLocked = $config->getInt('object_locked', 0) == 1; $tmpl->addVar('tpl_tree', 'comments-refresh', intval(!$isLocked)); $tmpl->addVar('tpl_tree', 'comments-rss', intval($config->getInt('enable_rss') && !$isLocked)); $tmpl->addVar('tpl_tree', 'comments-can-subscribe', intval($my->id && $acl->check('enable_subscribe') && !$isLocked)); if ($my->id && $acl->check('enable_subscribe')) { require_once JCOMMENTS_BASE . DS . 'jcomments.subscription.php'; $manager =& JCommentsSubscriptionManager::getInstance(); $isSubscribed = $manager->isSubscribed($object_id, $object_group, $my->id); $tmpl->addVar('tpl_tree', 'comments-user-subscribed', $isSubscribed); } $i = 1; if ($config->getInt('enable_mambots') == 1) { require_once JCOMMENTS_HELPERS . DS . 'plugin.php'; JCommentsPluginHelper::importPlugin('jcomments'); JCommentsPluginHelper::trigger('onBeforeDisplayCommentsList', array(&$rows)); if ($acl->check('enable_gravatar')) { JCommentsPluginHelper::trigger('onPrepareAvatars', array(&$rows)); } } require_once JCOMMENTS_LIBRARIES . DS . 'joomlatune' . DS . 'tree.php'; $tree = new JoomlaTuneTree($rows); $items = $tree->get(); foreach ($rows as $row) { if ($config->getInt('enable_mambots') == 1) { JCommentsPluginHelper::trigger('onBeforeDisplayComment', array(&$row)); } // run autocensor, replace quotes, smiles and other pre-view processing JComments::prepareComment($row); // setup toolbar if (!$acl->canModerate($row)) { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 0); } else { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 1); $tmpl->addVar('tpl_comment', 'button-edit', $acl->canEdit($row)); $tmpl->addVar('tpl_comment', 'button-delete', $acl->canDelete($row)); $tmpl->addVar('tpl_comment', 'button-publish', $acl->canPublish($row)); $tmpl->addVar('tpl_comment', 'button-ip', $acl->canViewIP($row)); } $tmpl->addVar('tpl_comment', 'comment-show-vote', $config->getInt('enable_voting')); $tmpl->addVar('tpl_comment', 'comment-show-email', $acl->canViewEmail($row)); $tmpl->addVar('tpl_comment', 'comment-show-homepage', $acl->canViewHomepage($row)); $tmpl->addVar('tpl_comment', 'comment-show-title', $config->getInt('comment_title')); $tmpl->addVar('tpl_comment', 'button-vote', $acl->canVote($row)); $tmpl->addVar('tpl_comment', 'button-quote', $acl->canQuote($row)); $tmpl->addVar('tpl_comment', 'button-reply', $acl->canReply($row)); $tmpl->addVar('tpl_comment', 'avatar', $acl->check('enable_gravatar')); if (isset($items[$row->id])) { $tmpl->addVar('tpl_comment', 'comment-number', ''); $tmpl->addObject('tpl_comment', 'comment', $row); $items[$row->id]->html = $tmpl->renderTemplate('tpl_comment'); $i++; } } $tmpl->addObject('tpl_tree', 'comments-items', $items); unset($rows); } return $tmpl->renderTemplate('tpl_tree'); }
public function delete($oid = null) { $k = $this->_tbl_key; $id = $oid ? $oid : $this->{$k}; $result = parent::delete($oid); if ($result) { // process nested comments (threaded mode) $query = "SELECT id, parent" . "\n FROM #__jcomments" . "\n WHERE `object_group` = " . $this->_db->Quote($this->object_group) . "\n AND `object_id`= " . $this->object_id; $this->_db->setQuery($query); $rows = $this->_db->loadObjectList(); require_once JCOMMENTS_LIBRARIES . '/joomlatune/tree.php'; $tree = new JoomlaTuneTree($rows); $descendants = $tree->descendants($id); unset($rows); if (count($descendants)) { $query = "DELETE FROM #__jcomments WHERE id IN (" . implode(',', $descendants) . ')'; $this->_db->setQuery($query); $this->_db->execute(); $descendants[] = $id; $query = "DELETE FROM #__jcomments_votes WHERE commentid IN (" . implode(',', $descendants) . ')'; $this->_db->setQuery($query); $this->_db->execute(); $query = "DELETE FROM #__jcomments_reports WHERE commentid IN (" . implode(',', $descendants) . ')'; $this->_db->setQuery($query); $this->_db->execute(); } else { // delete comment's vote info $query = "DELETE FROM #__jcomments_votes WHERE commentid = " . $id; $this->_db->setQuery($query); $this->_db->excute(); // delete comment's reports info $query = "DELETE FROM #__jcomments_reports WHERE commentid = " . $id; $this->_db->setQuery($query); $this->_db->execute(); } unset($descendants); } return $result; }
function getCommentsTree($object_id, $object_group = 'com_content') { global $my; $object_id = (int) $object_id; $object_group = trim($object_group); $acl =& JCommentsFactory::getACL(); $dbo =& JCommentsFactory::getDBO(); $config =& JCommentsFactory::getConfig(); $canPublish = $acl->canPublish(); $canComment = $acl->canComment(); if ($canComment == 0) { $total = JCommentsModel::getCommentsCount($object_id, $object_group); if ($total == 0) { return ''; } } $rows = JCommentsModel::getCommentsList($object_id, $object_group); $tmpl =& JCommentsFactory::getTemplate($object_id, $object_group); $tmpl->load('tpl_tree'); $tmpl->load('tpl_comment'); if (count($rows)) { $isLocked = $config->getInt('comments_locked', 0) == 1; $tmpl->addVar('tpl_tree', 'comments-refresh', intval(!$isLocked)); $tmpl->addVar('tpl_tree', 'comments-rss', intval($config->getInt('enable_rss') && !$isLocked)); $tmpl->addVar('tpl_tree', 'comments-can-subscribe', intval($my->id && $acl->check('enable_subscribe') && !$isLocked)); $tmpl->addVar('tpl_tree', 'comments-count', count($rows)); if ($my->id && $acl->check('enable_subscribe')) { require_once JCOMMENTS_BASE . DS . 'jcomments.subscription.php'; $manager =& JCommentsSubscriptionManager::getInstance(); $isSubscribed = $manager->isSubscribed($object_id, $object_group, $my->id); $tmpl->addVar('tpl_tree', 'comments-user-subscribed', $isSubscribed); } $i = 1; if ($config->getInt('enable_mambots') == 1) { require_once JCOMMENTS_HELPERS . DS . 'plugin.php'; JCommentsPluginHelper::importPlugin('jcomments'); JCommentsPluginHelper::trigger('onBeforeDisplayCommentsList', array(&$rows)); if ($acl->check('enable_gravatar')) { JCommentsPluginHelper::trigger('onPrepareAvatars', array(&$rows)); } } require_once JCOMMENTS_LIBRARIES . DS . 'joomlatune' . DS . 'tree.php'; $tree = new JoomlaTuneTree($rows); $items = $tree->get(); foreach ($rows as $row) { if ($config->getInt('enable_mambots') == 1) { JCommentsPluginHelper::trigger('onBeforeDisplayComment', array(&$row)); } // run autocensor, replace quotes, smiles and other pre-view processing JComments::prepareComment($row); // setup toolbar if (!$acl->canModerate($row)) { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 0); } else { $tmpl->addVar('tpl_comment', 'comments-panel-visible', 1); $tmpl->addVar('tpl_comment', 'button-edit', $acl->canEdit($row)); $tmpl->addVar('tpl_comment', 'button-delete', $acl->canDelete($row)); $tmpl->addVar('tpl_comment', 'button-publish', $acl->canPublish($row)); $tmpl->addVar('tpl_comment', 'button-ip', $acl->canViewIP($row)); } $tmpl->addVar('tpl_comment', 'comment-show-vote', $config->getInt('enable_voting')); $tmpl->addVar('tpl_comment', 'comment-show-email', $acl->canViewEmail($row)); $tmpl->addVar('tpl_comment', 'comment-show-homepage', $acl->canViewHomepage($row)); $tmpl->addVar('tpl_comment', 'comment-show-title', $config->getInt('comment_title')); $tmpl->addVar('tpl_comment', 'button-vote', $acl->canVote($row)); $tmpl->addVar('tpl_comment', 'button-quote', $acl->canQuote($row)); $tmpl->addVar('tpl_comment', 'button-reply', $acl->canReply($row)); $tmpl->addVar('tpl_comment', 'button-report', $acl->canReport($row)); $tmpl->addVar('tpl_comment', 'avatar', $acl->check('enable_gravatar')); if (isset($items[$row->id])) { $tmpl->addVar('tpl_comment', 'comment-number', ''); $tmpl->addObject('tpl_comment', 'comment', $row); $items[$row->id]->html = $tmpl->renderTemplate('tpl_comment'); $i++; } } $tmpl->addObject('tpl_tree', 'comments-items', $items); unset($rows); } return $tmpl->renderTemplate('tpl_tree'); }