Server IP : 180.180.241.3 / Your IP : 216.73.216.252 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/AppServ/www/app/webroot/news/plugins/content/ |
Upload File : |
<?php /** * This is the jfusion content plugin file * * PHP version 5 * * @category JFusion * @package Plugins * @subpackage DiscussionBot * @author JFusion Team <webmaster@jfusion.org> * @copyright 2008 JFusion. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * @link http://www.jfusion.org */ // no direct access defined('_JEXEC' ) or die('Restricted access' ); /** * Load the JFusion framework */ jimport('joomla.plugin.plugin'); jimport('joomla.html.pagination'); require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'models' . DS . 'model.jfusion.php'; require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'models' . DS . 'model.factory.php'; /** * ContentPlugin Class for jfusion * * @category JFusion * @package Plugins * @subpackage DiscussionBot * @author JFusion Team <webmaster@jfusion.org> * @copyright 2008 JFusion. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * @link http://www.jfusion.org */ class plgContentJfusion extends JPlugin { var $params = false; var $mode = ''; var $valid = false; var $jname = ''; var $creationMode = ''; var $template = 'default'; /** * @var $article object */ var $article = null; var $output = array(); var $dbtask = ''; var $ajax_request = 0; var $validity_reason = ''; var $manual_plug = false; var $manual_threadid = 0; var $debug_mode = 0; var $helper = ''; /** * Constructor * * For php4 compatibility we must not use the __constructor as a constructor for * plugins because func_get_args ( void ) returns a copy of all passed arguments * NOT references. This causes problems with cross-referencing necessary for the * observer design pattern. * * @param object &$subject The object to observe * @param array|object $params An array or object that holds the plugin configuration * * @since 1.5 * @return void */ public function plgContentJfusion(&$subject, $params) { parent::__construct($subject, $params); $this->loadLanguage('plg_content_jfusion', JPATH_ADMINISTRATOR); //retrieve plugin software for discussion bot if ($this->params===false) { if (is_array($params)) { $this->params = new JParameter( $params[params]); } else { $this->params = new JParameter( $params->params); } } $this->jname =& $this->params->get('jname',false); if ($this->jname !== false) { //load the plugin language file $this->loadLanguage('com_jfusion.plg_' . $this->jname, JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion'); } //determine what mode we are to operate in if ($this->params->get('auto_create',0)) { $this->mode = ($this->params->get('test_mode',1)) ? 'test' : 'auto'; } else { $this->mode = 'manual'; } $this->creationMode =& $this->params->get('create_thread','load'); $this->debug_mode = $this->params->get('debug', JRequest::getInt('debug_discussionbot',0)); //define some constants $isJ16 = JFusionFunction::isJoomlaVersion('1.6'); if (!defined('DISCUSSION_TEMPLATE_PATH')) { $url_path = ($isJ16) ? 'jfusion/' : ''; define('DISCUSSBOT_URL_PATH', 'plugins/content/' . $url_path . 'discussbot/'); $path = ($isJ16) ? 'jfusion' . DS : ''; define('DISCUSSBOT_PATH', JPATH_SITE . DS . 'plugins' . DS . 'content' . DS . $path . 'discussbot' . DS); //let's first check for customized files in Joomla template directory $app = JFactory::getApplication(); $JoomlaTemplateOverride = JPATH_BASE.DS.'templates'. DS .$app->getTemplate() . DS. 'html' . DS . 'plg_content_jfusion' . DS; if (file_exists($JoomlaTemplateOverride)) { define('DISCUSSION_TEMPLATE_PATH', $JoomlaTemplateOverride); define('DISCUSSION_TEMPLATE_URL', JFusionFunction::getJoomlaURL() . 'templates/' . $app->getTemplate() . '/html/plg_content_jfusion/'); } else { define('DISCUSSION_TEMPLATE_PATH',JPATH_BASE.DS.'plugins'.DS.'content'.DS.$path.'discussbot'.DS.'tmpl'.DS.$this->template.DS); define('DISCUSSION_TEMPLATE_URL',JFusionFunction::getJoomlaURL().'plugins/content/'.$url_path.'discussbot/tmpl/'.$this->template.'/'); } } //load the helper file $helper_path = DISCUSSBOT_PATH . 'helper.php'; include_once $helper_path; $this->helper = new JFusionDiscussBotHelper($this->params, $this->jname, $this->mode, $this->debug_mode); //set option $this->helper->option = JRequest::getCmd('option'); } /** * @param $subject * @param $isNew * @return bool */ public function onAfterContentSave(&$subject, $isNew) { //check to see if a valid $content object was passed on $result = true; if (!is_object($subject)){ JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('NO_CONTENT_DATA_FOUND'), 1); $result = false; } else { $this->article =& $subject; $this->helper->setArticle($this->article); //make sure there is a plugin if (empty($this->jname)) { $result = false; } else { $this->helper->debug('onAfterContentSave called'); //validate the article $this->helper->getThreadStatus(); // changed _validate to pass the $isNew flag, so that it will only check will happen depending on this flag list($this->valid, $this->validity_reason) = $this->helper->validate($isNew); $this->helper->debug('Validity: ' . $this->valid . '; ' . $this->validity_reason); //ignore auto mode if the article has been manually plugged $manually_plugged = preg_match('/\{jfusion_discuss (.*)\}/U', $this->article->introtext . $this->article->fulltext); $this->helper->debug('Checking mode...'); if ($this->mode=='auto' && empty($manually_plugged)) { $this->helper->debug('In auto mode'); if ($this->valid) { $threadinfo = $this->helper->getThreadInfo(); $JFusionForum = JFusionFactory::getForum($this->jname); $forumid = $JFusionForum->getDefaultForum($this->params, $this->article); if (($this->creationMode=='load') || ($this->creationMode=='new' && ($isNew || (!$isNew && $this->helper->thread_status))) || ($this->creationMode=='reply' && $this->helper->thread_status)) { //update/create thread $this->helper->checkThreadExists(); } else { $this->helper->debug('Article did not meet requirements to update/create thread'); } } elseif ($this->creationMode=='new' && $isNew) { $this->helper->debug('Failed validity test but creationMode is set to new and this is a new article'); $mainframe = JFactory::getApplication(); $publish_up = JFactory::getDate($this->article->publish_up)->toUnix(); $now = JFactory::getDate('now', $mainframe->getCfg('offset'))->toUnix(); if ($now < $publish_up || !$this->article->state) { $this->helper->debug('Article set to be published in the future or is unpublished thus creating an entry in the database so that the thread is created when appropriate.'); //the publish date is set for the future so create an entry in the //database so that the thread is created when the publish date arrives $placeholder = new stdClass(); $placeholder->threadid = 0; $placeholder->forumid = 0; $placeholder->postid = 0; JFusionFunction::updateDiscussionBotLookup($this->article->id, $placeholder, $this->jname); } } } elseif ($this->mode=='test' && empty($manually_plugged)) { //recheck validity without stipulation $this->helper->debug('In test mode thus not creating the article'); $threadinfo = $this->helper->getThreadInfo(); $JFusionForum = JFusionFactory::getForum($this->jname); $content = '<u>' . $this->article->title . '</u><br />'; if (!empty($threadinfo)) { $content .= JText::_('DISCUSSBOT_TEST_MODE') . '<img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/check.png" style="margin-left:5px;"><br/>'; if ($threadinfo->published) { $content .= JText::_('STATUS') . ': ' . JText::_('INITIALIZED_AND_PUBLISHED') . '<br />'; } else { $content .= JText::_('STATUS') . ': ' . JText::_('INITIALIZED_AND_UNPUBLISHED') . '<br />'; } $content .= JText::_('THREADID') . ': ' . $threadinfo->threadid . '<br />'; $content .= JText::_('FORUMID') . ': ' . $threadinfo->forumid . '<br />'; $content .= JText::_('FIRST_POSTID') . ': ' . $threadinfo->postid. '<br />'; $forumlist = $this->helper->getForumList(); if (!in_array($threadinfo->forumid, $forumlist)) { $content .= '<span style="color:red; font-weight:bold;">' . JText::_('WARNING') . '</span>: ' . JText::_('FORUM_NOT_EXIST') . '<br />'; } $forumthread = $JFusionForum->getThread($threadinfo->threadid); if (empty($forumthread)) { $content .= '<span style="color:red; font-weight:bold;">' . JText::_('WARNING') . '</span>: ' . JText::_('THREAD_NOT_EXIST') . '<br />'; } } else { $valid = ($this->valid) ? JText::_('JYES') : JText::_('JNO'); if (!$this->valid) { $content .= JText::_('DISCUSSBOT_TEST_MODE') . '<img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/x.png" style="margin-left:5px;"><br/>'; $content .= JText::_('VALID') . ': ' . $valid . '<br />'; $content .= JText::_('INVALID_REASON') . ': ' . $this->validity_reason . '<br />'; } else { $content .= '<b>' . JText::_('DISCUSSBOT_TEST_MODE') . '</b><img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/check.png" style="margin-left:5px;2><br/>'; $content .= JText::_('VALID_REASON') . ': ' . $this->validity_reason . '<br />'; $content .= JText::_('STATUS') . ': ' . JText::_('UNINITIALIZED_THREAD_WILL_BE_CREATED') . '<br />'; $forumid = $JFusionForum->getDefaultForum($this->params, $this->article); $content .= JText::_('FORUMID') . ': ' . $forumid . '<br />'; $author = $JFusionForum->getThreadAuthor($this->params, $this->article); $content .= JText::_('AUTHORID') . ': ' . $author . '<br />'; } } JError::raiseNotice('500', $content); } else { $this->helper->debug('In manual mode...checking to see if article has been initialized'); $threadinfo = $this->helper->getThreadInfo(); if (!empty($threadinfo) && $threadinfo->published == 1 && $threadinfo->manual == 1) { $this->helper->debug('Article has been initialized...updating thread'); //update thread $this->helper->checkThreadExists(); } else { $this->helper->debug('Article has not been initialized'); } } $this->helper->debug('onAfterContentSave complete', true); } } return $result; } /** * @param $subject * @param $params * @return bool */ public function onPrepareContent(&$subject, $params) { $result = true; $this->article =& $subject; $this->helper->setArticle($this->article); //reset some vars $this->manual_plug = false; $this->manual_threadid = 0; $this->validity_reason = ''; $this->helper->getThreadStatus(); $this->helper->debug('onPrepareContent called'); //check to see if a valid $content object was passed on if (!is_object($subject)){ JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('NO_CONTENT_DATA_FOUND'), 1); $result = false; } else { //make sure there is a plugin if (empty($this->jname)) { $result = false; } else { //do nothing if this is a K2 category object if ($this->helper->option == 'com_k2' && get_class($this->article) == 'TableK2Category') { $result = false; } else { //set some variables needed throughout $this->template = $this->params->get('template','default'); //make sure we have an actual article if (!empty($this->article->id)) { $this->dbtask = JRequest::getVar('dbtask', null, 'post'); $skip_new_check = ($this->dbtask=='create_thread') ? true : false; $skip_k2_check = ($this->helper->option == 'com_k2' && in_array($this->dbtask, array('unpublish_discussion', 'publish_discussion'))) ? true : false; list($this->valid, $this->validity_reason) = $this->helper->validate($skip_new_check, $skip_k2_check); $this->helper->debug('Validity: ' . $this->valid . "; " . $this->validity_reason); $this->ajax_request = JRequest::getInt('ajax_request',0); $ajax = $this->prepareAjaxResponce(); if ($this->ajax_request) { //get and set the threadinfo $threadid = JRequest::getInt('threadid', 0, 'post'); $threadinfo = $this->helper->getThreadInfo(); if (empty($threadinfo)) { //could be a manual plug so let's get the thread info directly $JFusionForum = JFusionFactory::getForum($this->jname); $threadinfo = $JFusionForum->getThread($threadid); if (!empty($threadinfo)) { //let's set threadinfo $threadinfo->published = 1; $this->helper->getThreadInfo(false, $threadinfo); //override thread status $this->helper->thread_status = true; //set manual plug $this->manual_plug = true; } elseif ($this->dbtask != 'create_thread' && $this->dbtask != 'create_threadpost') { $ajax->message = JText::_('THREAD_NOT_FOUND'); $this->renderAjaxResponce($ajax); } } } if ($this->dbtask == 'create_thread') { //this article has been manually initiated for discussion $this->createThread(); } elseif (($this->dbtask == 'create_post' || $this->dbtask == 'create_threadpost') && $this->params->get('enable_quickreply',false)) { //a quick reply has been submitted so let's create the post $this->createPost(); } elseif ($this->dbtask == 'unpublish_discussion') { //an article has been "uninitiated" $this->unpublishDiscussion(); } elseif ($this->dbtask == 'publish_discussion') { //an article has been "reinitiated" $this->publishDiscussion(); $threadinfo = $this->helper->getThreadInfo(); if (!empty($threadinfo->published)) { //content is now published so display it $ajax->posts = $this->renderDiscussionContent($threadinfo); } else { $ajax->posts = null; } $ajax->status = true; } //save the visibility of the posts if applicable $show_discussion = JRequest::getVar('show_discussion',''); if ($show_discussion!=='') { $JSession = JFactory::getSession(); $JSession->set('jfusion.discussion.visibility',(int) $show_discussion); } //check for some specific ajax requests if ($this->ajax_request) { //check to see if this is an ajax call to update the pagination if ($this->params->get('show_posts',1) && $this->dbtask == 'update_posts') { $this->updatePosts(); } else if ($this->dbtask == 'update_debug_info') { $ajax->status = true; } else if ($show_discussion!=='') { $ajax->status = true; $ajax->message = 'jfusion.discussion.visibility set to '.$show_discussion; } else { $ajax->message = 'Discussion bot ajax request made but it doesn\'t seem to have been picked up'; } $this->renderAjaxResponce($ajax); } //add scripts to header $this->helper->loadScripts(); if (empty($this->article->params) && !empty($this->article->parameters)) { $this->article->params =& $this->article->parameters; } if (!empty($this->article->params)) { $this->prepareContent(); } } } } } return $result; } /** * joomla 1.6 compatibility layer * * @param $context * @param $article * @param $isNew */ public function onContentAfterSave($context, &$article, $isNew) { $this->onAfterContentSave($article, $isNew); } /** * @param $context * @param $article * @param $params * @param int $limitstart */ public function onContentPrepare($context, &$article, &$params, $limitstart=0) { if ( $context != 'com_content.featured' && $context != 'com_content.category' ) { //seems syntax has completely changed :( $this->onPrepareContent($article, $params); } } /** * @param $context * @param $article * @param $params * @param int $limitstart */ public function onContentAfterDisplay($context, &$article, &$params, $limitstart=0) { $view = JRequest::getVar('view'); $layout = JRequest::getVar('layout'); if ($this->helper->option == 'com_content') { if ($view == 'featured' || ($view == 'category' && $layout == 'blog')) { $article->text = $article->introtext; $this->onPrepareContent($article, $params); $article->introtext = $article->text; } } } /** * @param mixed $error * @return string */ public function ajaxError($error) { //output the error $result = null; if (is_array($error)) { foreach($error as $err) { if ($result) { $result .= '<br /> - ' . $err; } else { $result = ' - ' . $err; } } } else { $result = $error; } return $result; } /** * @return stdClass */ public function prepareAjaxResponce() { $output = new stdClass; $output->debug = null; $output->posts = null; $output->buttons = null; $output->pagination = null; $output->status = false; $output->message = null; return $output; } /** * @param stdClass $ajax */ public function renderAjaxResponce($ajax) { $ajax->debug = $this->renderDebugOutput(); $ajax->buttons = $this->renderButtons(true); if ($this->params->get('enable_pagination',1)) { $ajax->pagination = $this->updatePagination(); } die(json_encode($ajax)); } /** * Returns the view for compare * * @return string */ public function view() { return ($this->helper->option == 'com_k2') ? 'item' : 'article'; } /* * prepareContent */ public function prepareContent() { JHTML::_( 'behavior.mootools' ); $this->helper->debug('Preparing content'); $content = ''; //get the jfusion forum object $JFusionForum = JFusionFactory::getForum($this->jname); //find any {jfusion_discuss...} to manually plug $this->helper->debug('Finding all manually added plugs'); preg_match_all('/\{jfusion_discuss (.*)\}/U',$this->article->text,$matches); $this->helper->debug(count($matches[1]) . ' matches found'); foreach($matches[1] as $id) { //only use the first and get rid of the others if (empty($this->manual_plug)) { $this->manual_plug = true; $this->helper->debug('Plugging for thread id ' . $id); //get the existing thread information $threadinfo = $JFusionForum->getThread($id); if (!empty($threadinfo)) { //manually plugged so definitely published $threadinfo->published = 1; //$threadinfo->manual = 1; //set threadinfo $this->helper->getThreadInfo(false, $threadinfo); $this->helper->debug('Thread info found.'); //override thread status $this->helper->thread_status = true; $content = $this->render($threadinfo); $this->article->text = str_replace("{jfusion_discuss $id}",$content,$this->article->text); } else { $this->helper->debug('Thread info not found!'); $this->article->text = str_replace("{jfusion_discuss $id}",JText::_("THREADID_NOT_FOUND"),$this->article->text); } } else { $this->helper->debug('Removing plug for thread ' . $id); $this->article->text = str_replace("{jfusion_discuss $id}",'',$this->article->text); } } //check to see if the fulltext has a manual plug if we are in a blog view if (isset($this->article->fulltext)) { if (!$this->manual_plug && JRequest::getVar('view') != $this->view()) { preg_match('/\{jfusion_discuss (.*)\}/U',$this->article->fulltext,$match); if (!empty($match)) { $this->helper->debug('No plugs in text but found plugs in fulltext'); $this->manual_plug = true; $this->manual_threadid = $match[1]; //get the existing thread information $threadinfo = $JFusionForum->getThread($this->manual_threadid); if (!empty($threadinfo)) { //manually plugged so definitely published $threadinfo->published = 1; //$threadinfo->manual = 1; //create buttons for the manually plugged article //set threadinfo $this->helper->getThreadInfo(false, $threadinfo); $content = $this->renderButtons(false); //append the content $this->article->text .= $content; } else { $this->article->text .= JText::_('THREADID_NOT_FOUND'); } } } } //check for auto mode if not already manually plugged if (!$this->manual_plug) { $this->helper->debug('Article not manually plugged...checking for other mode'); $threadinfo = $this->helper->getThreadInfo(); //create the thread if this article has been validated if ($this->mode=='auto') { $this->helper->debug('In auto mode'); if ($this->valid) { if ($threadinfo || $this->creationMode=='load' || ($this->creationMode=='view' && JRequest::getVar('view') == $this->view()) ) { $status = $this->helper->checkThreadExists(); if ($status['action'] == 'created') { $threadinfo = $status['threadinfo']; } } } if ($this->validity_reason != JText::_('REASON_NOT_IN_K2_ARTICLE_TEXT')) { //a catch in case a plugin does something wrong if (!empty($threadinfo->threadid) || $this->creationMode == 'reply') { $content = $this->render($threadinfo); } } } elseif ($this->mode=='test') { $this->helper->debug('In test mode'); //get the existing thread information $content = '<div class="jfusionclearfix" style="border:1px solid #ECF8FD; background-color:#ECF8FD; margin-top:10px; margin-bottom:10px;">'; if (!empty($threadinfo)) { $content .= '<b>' . JText::_('DISCUSSBOT_TEST_MODE') . '</b><img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/check.png" style="margin-left:5px;"><br/>'; if ($threadinfo->published) { $content .= JText::_('STATUS') . ': ' . JText::_('INITIALIZED_AND_PUBLISHED') . '<br />'; } else { $content .= JText::_('STATUS') . ': ' . JText::_('INITIALIZED_AND_UNPUBLISHED') . '<br />'; } $content .= JText::_('THREADID') . ': ' . $threadinfo->threadid . '<br />'; $content .= JText::_('FORUMID') . ': ' . $threadinfo->forumid . '<br />'; $content .= JText::_('FIRST_POSTID') . ': ' . $threadinfo->postid. '<br />'; $forumlist = $this->helper->getForumList(); if (!in_array($threadinfo->forumid, $forumlist)) { $content .= '<span style="color:red; font-weight:bold;">' . JText::_('WARNING') . '</span>: ' . JText::_('FORUM_NOT_EXIST') . '<br />'; } $forumthread = $JFusionForum->getThread($threadinfo->threadid); if (empty($forumthread)) { $content .= '<span style="color:red; font-weight:bold;">' . JText::_('WARNING') . '</span>: ' . JText::_('THREAD_NOT_EXIST') . '<br />'; } } else { $valid = ($this->valid) ? JText::_('JYES') : JText::_('JNO'); if (!$this->valid) { $content .= '<b>' . JText::_('DISCUSSBOT_TEST_MODE') . '</b><img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/x.png" style="margin-left:5px;"><br/>'; $content .= JText::_('VALID') . ': ' . $valid . '<br />'; $content .= JText::_('INVALID_REASON') . ': ' . $this->validity_reason . '<br />'; } else { $content .= '<b>' . JText::_('DISCUSSBOT_TEST_MODE') . '</b><img src="'.JFusionFunction::getJoomlaURL().DISCUSSBOT_URL_PATH.'images/check.png" style="margin-left:5px;"><br/>'; $content .= JText::_('VALID_REASON') . ': ' . $this->validity_reason . '<br />'; $content .= JText::_('STATUS') . ': ' . JText::_('UNINITIALIZED_THREAD_WILL_BE_CREATED') . '<br />'; $forumid = $JFusionForum->getDefaultForum($this->params, $this->article); $content .= JText::_('FORUMID') . ': ' . $forumid . '<br />'; $author = $JFusionForum->getThreadAuthor($this->params, $this->article); $content .= JText::_('AUTHORID') . ': ' . $author . '<br />'; } } $content .= '</div>'; } elseif (!empty($threadinfo->manual)) { if (!empty($threadinfo->published)) { $this->helper->debug('In manual mode but article has been initialized'); //this article was generated by the initialize button $content = $this->render($threadinfo); } else { $this->helper->debug('In manual mode but article was initialized then uninitialized'); $content = $this->renderButtons(); } } else { $this->helper->debug('In manual mode'); //in manual mode so just create the buttons if ($this->validity_reason != JText::_('REASON_NOT_IN_K2_ARTICLE_TEXT')) { $content = $this->renderButtons(); } } //append the content $this->article->text .= $content; } static $taskFormLoaded; if (empty($taskFormLoaded)) { $this->helper->debug('Adding task form'); //tak on the task form; it only needs to be added once which will be used for create_thread $uri = JFactory::getURI(); $url = $uri->toString(array('path', 'query', 'fragment')); $url = str_replace('&', '&', $url); $content = <<<HTML <form style="display:none;" id="JFusionTaskForm" name="JFusionTaskForm" method="post" action="{$url}"> <input type="hidden" name="articleId" value="" /> <input type="hidden" name="dbtask" value="" /> </form> HTML; $this->article->text .= $content; $taskFormLoaded = 1; } $this->renderDebugOutput(); } /** * renderDebugOutput * * @return string */ public function renderDebugOutput() { $debug_contents = ''; if ($this->debug_mode) { require_once(JPATH_ADMINISTRATOR .DS.'components'.DS.'com_jfusion'.DS.'models'.DS.'model.debug.php'); if ($this->ajax_request) { debug::$toggleScriptInited = true; debug::$colorSchemeInited[0] = true; } ob_start(); debug::show($this->helper->debug_output, 'Discussion bot debug info',1); $debug_contents = ob_get_contents(); ob_end_clean(); if (!$this->ajax_request) { $this->article->text .= <<<HTML <div id="jfusionDebugContainer{$this->article->id}"> {$debug_contents} </div> HTML; } } return $debug_contents; } /* * createThread */ public function createThread() { $JoomlaUser = JFactory::getUser(); $mainframe = JFactory::getApplication(); $return = JRequest::getVar('return'); if ($return) { $url = base64_decode($return); } else { $uri = JFactory::getURI(); $url = $uri->toString(array('path', 'query', 'fragment')); $url = JRoute::_($url, false); if ($uri->getVar('view')=='article') { //tak on the discussion jump to $url .= '#discussion'; $JSession = JFactory::getSession(); $JSession->set('jfusion.discussion.visibility',1); } } //make sure the article submitted matches the one loaded $submittedArticleId = JRequest::getInt('articleId', 0, 'post'); if (JFusionFunction::isJoomlaVersion()) { $editAccess = $JoomlaUser->authorise('core.edit', 'com_content'); } else { $editAccess = $JoomlaUser->authorize('com_content', 'edit', 'content', 'all'); } $ajaxEnabled = ($this->params->get('enable_ajax',1) && $this->ajax_request); $ajax = $this->prepareAjaxResponce(); if ($editAccess && $this->valid && $submittedArticleId == $this->article->id) { $status = $this->helper->checkThreadExists(1); if (!empty($status['error'])) { if ($ajaxEnabled) { $ajax->message = JText::_('DISCUSSBOT_ERROR') . ': ' . $this->ajaxError($status['error']); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), $status['error'], 1); } } else { $ajax->status = true; $msg = JText::sprintf('THREAD_CREATED_SUCCESSFULLY',$this->article->title); if ($ajaxEnabled) { $ajax->message = $msg; } else { JFusionFunction::raiseWarning(JText::_('SUCCESS'), $msg, 1); } } } else { $msg = JText::_('ACCESS_DENIED'); if ($ajaxEnabled) { $ajax->message = $msg; } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), $msg, 1); } } if ($ajaxEnabled) { $this->renderAjaxResponce($ajax); } else { $mainframe->redirect($url); } } /* * createPost * @return void */ public function createPost() { $ajax = $this->prepareAjaxResponce(); $JoomlaUser = JFactory::getUser(); $JFusionForum = JFusionFactory::getForum($this->jname); //define some variables $allowGuests =& $this->params->get('quickreply_allow_guests',0); $ajaxEnabled = ($this->params->get('enable_ajax',1) && $this->ajax_request); $jumpto = ''; $url = $this->helper->getArticleUrl($jumpto,'',false); $msg = ''; //process quick replies if (($allowGuests || !$JoomlaUser->guest) && !$JoomlaUser->block) { //make sure something was submitted $quickReplyText = JRequest::getVar('quickReply', '', 'POST'); if (!empty($quickReplyText)) { //retrieve the userid from forum software if ($allowGuests && $JoomlaUser->guest) { $userinfo = new stdClass(); $userinfo->guest = 1; $captcha_verification = $JFusionForum->verifyCaptcha($this->params); } else { $JFusionUser = JFusionFactory::getUser($this->jname); $userinfo = $JFusionUser->getUser($JoomlaUser); $userinfo->guest = 0; //we have a user logged in so ignore captcha $captcha_verification = true; } if ($captcha_verification) { $threadinfo = null; if ($this->dbtask=='create_threadpost') { $status = $this->helper->checkThreadExists(); $threadinfo = $status['threadinfo']; } elseif ($this->dbtask=="create_post") { $threadinfo = $this->helper->getThreadInfo(); } //create the post if (!empty($threadinfo) && !empty($threadinfo->threadid) && !empty($threadinfo->forumid)) { $status = $JFusionForum->createPost($this->params, $threadinfo, $this->article, $userinfo); if (!empty($status['error'])){ if ($ajaxEnabled) { $ajax->message = JText::_('DISCUSSBOT_ERROR') . ': ' . $this->ajaxError($status['error']); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), $status['error'],1); } } else { if ($ajaxEnabled) { //if pagination is set, set $limitstart so that we go to the added post if ($this->params->get('enable_pagination',true)) { $replyCount = $JFusionForum->getReplyCount($threadinfo); $application = JFactory::getApplication(); $limit = $application->getUserStateFromRequest( 'global.list.limit', 'limit_discuss', 5, 'int' ); if ($this->params->get('sort_posts','ASC')=='ASC') { $limitstart = floor(($replyCount-1)/$limit) * $limit; } else { $limitstart = 0; } JRequest::setVar('limitstart_discuss',$limitstart); } $posts = $JFusionForum->getPosts($this->params, $threadinfo); $this->helper->output = array(); $this->helper->output['posts'] = $this->preparePosts($posts); //take note of the created post $this->helper->output['submitted_postid'] = $status['postid']; if (isset($status['post_moderated'])) { $this->helper->output['post_moderated'] = $status['post_moderated']; } else { $this->helper->output['post_moderated'] = 0; } //output only the new post div $this->helper->threadinfo =& $threadinfo; $ajax->posts = $this->helper->renderFile('default_posts.php'); $ajax->status = true; } else { if ($this->params->get('jumpto_new_post',0)) { $jumpto = (isset($status['postid'])) ? "post" . $status['postid'] : ''; } $url = $this->helper->getArticleUrl($jumpto,'',false); } if (isset($status['post_moderated'])) { $msg = ($status['post_moderated']) ? 'SUCCESSFUL_POST_MODERATED' : 'SUCCESSFUL_POST'; } else { $msg = 'SUCCESSFUL_POST'; } if ($ajaxEnabled) { $ajax->message = JText::_($msg); } else { JFusionFunction::raiseWarning(JText::_('SUCCESS'), JText::_($msg),1); } } } else { if ($ajaxEnabled) { $ajax->message = JText::_('DISCUSSBOT_ERROR') . ': ' . JText::_('THREADID_NOT_FOUND'); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('THREADID_NOT_FOUND'),1); } } } else { if ($ajaxEnabled) { $ajax->message = JText::_('DISCUSSBOT_ERROR') . ': ' . JText::_('CAPTCHA_INCORRECT'); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('CAPTCHA_INCORRECT'),1); } } } else { if ($ajaxEnabled) { $ajax->message = JText::_('DISCUSSBOT_ERROR') . ': ' . JText::_('QUICKEREPLY_EMPTY'); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('QUICKEREPLY_EMPTY'),1); } } } else { $msg = JText::_('ACCESS_DENIED'); if ($ajaxEnabled) { $ajax->message = $msg; } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), $msg, 1); } } if ($ajaxEnabled) { $this->renderAjaxResponce($ajax); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect($url); } } /* * unpublishDiscussion */ public function unpublishDiscussion() { $JoomlaUser = JFactory::getUser(); //make sure the article submitted matches the one loaded $submittedArticleId = JRequest::getInt('articleId', 0, 'post'); if (JFusionFunction::isJoomlaVersion()) { $editAccess = $JoomlaUser->authorise('core.edit', 'com_content'); } else { $editAccess = $JoomlaUser->authorize('com_content', 'edit', 'content', 'all'); } $ajax = $this->prepareAjaxResponce(); if ($editAccess && $this->valid && $submittedArticleId == $this->article->id) { $threadinfo = $this->helper->getThreadInfo(); if (!empty($threadinfo)) { //created by discussion bot thus update the look up table JFusionFunction::updateDiscussionBotLookup($this->article->id, $threadinfo, $this->jname, 0, $threadinfo->manual); } else { //manually plugged thus remove any db plugin tags $jdb = JFactory::getDBO(); //retrieve the original text $query = 'SELECT `introtext`, `fulltext` FROM #__content WHERE id = ' . $this->article->id; $jdb->setQuery($query); $texts = $jdb->loadObject(); //remove any {jfusion_discuss...} $fulltext = preg_replace('/\{jfusion_discuss (.*)\}/U','',$texts->fulltext, -1, $fullTextCount); $introtext = preg_replace('/\{jfusion_discuss (.*)\}/U','',$texts->introtext, -1, $introTextCount); if (!empty($fullTextCount) || !empty($introTextCount)) { $query = 'UPDATE #__content SET `fulltext` = ' . $jdb->Quote($fulltext) . ', `introtext` = ' .$jdb->Quote($introtext) . ' WHERE id = ' . (int) $this->article->id; $jdb->setQuery($query); $jdb->query(); } } $ajax->status = true; $this->helper->getThreadStatus(); } else { if ($this->ajax_request) { $ajax->message = JText::_('ACCESS_DENIED'); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('ACCESS_DENIED'), 1); } } if ($this->ajax_request) { $this->renderAjaxResponce($ajax); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect($this->helper->getArticleUrl('','',false)); } } /* * publishDiscussion */ public function publishDiscussion() { $JoomlaUser = JFactory::getUser(); //make sure the article submitted matches the one loaded $submittedArticleId = JRequest::getInt('articleId', 0, 'post'); if (JFusionFunction::isJoomlaVersion()) { $editAccess = $JoomlaUser->authorise('core.edit', 'com_content'); } else { $editAccess = $JoomlaUser->authorize('com_content', 'edit', 'content', 'all'); } $ajax = $this->prepareAjaxResponce(); if ($editAccess && $this->valid && $submittedArticleId == $this->article->id) { $threadinfo = $this->helper->getThreadInfo(); JFusionFunction::updateDiscussionBotLookup($this->article->id, $threadinfo, $this->jname, 1, $threadinfo->manual); $ajax->status = true; $this->helper->getThreadStatus(); } else { if ($this->ajax_request) { $ajax->message = JText::_('ACCESS_DENIED'); } else { JFusionFunction::raiseWarning(JText::_('DISCUSSBOT_ERROR'), JText::_('ACCESS_DENIED'), 1); } } if ($this->ajax_request) { $this->renderAjaxResponce($ajax); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect($this->helper->getArticleUrl('','',false)); } } /** * @param $threadinfo * * @return bool|string */ public function render(&$threadinfo) { $this->helper->debug('Beginning rendering content'); if (!empty($threadinfo)) { $JFusionForum = JFusionFactory::getForum($this->jname); $this->helper->reply_count = $JFusionForum->getReplyCount($threadinfo); } $view = JRequest::getVar('view'); //let's only show quick replies and posts on the article view if ($view == $this->view()) { $JSession = JFactory::getSession(); if (empty($threadinfo->published) && $this->creationMode != 'reply') { $this->helper->debug('Discussion content not displayed as this discussion is unpublished'); $display = 'none'; $generate_guts = false; } else { if ($JSession->get('jfusion.discussion.visibility',0) || empty($threadinfo) && $this->creationMode == 'reply') { //show the discussion area if no replies have been made and creationMode is set to on first reply OR if user has set it to show $display = 'block'; } else { $display = ($this->params->get('show_toggle_posts_link',1) && $this->params->get('collapse_discussion',1)) ? 'none' : 'block'; } $generate_guts = true; } if ($display == 'none') { $JSession->set('jfusion.discussion.visibility',0); } else { $JSession->set('jfusion.discussion.visibility',1); } $content = '<div style="float:none; display:'.$display.';" id="discussion">'; if ($generate_guts) { $content .= $this->renderDiscussionContent($threadinfo); } $content .= '</div>'; //now generate the buttons in case the thread was just created $button_content = $this->renderButtons(); $content = $button_content . $content; } else { $content = $this->renderButtons(); } return $content; } /** * @param $threadinfo * * @return bool|string */ public function renderDiscussionContent(&$threadinfo) { $this->helper->debug('Rendering discussion content'); //setup parameters $JFusionForum = JFusionFactory::getForum($this->jname); $allowGuests =& $this->params->get('quickreply_allow_guests',0); $JoomlaUser = JFactory::getUser(); //make sure the user exists in the software before displaying the quick reply $JFusionUser = JFusionFactory::getUser($this->jname); $JFusionUserinfo = $JFusionUser->getUser($JoomlaUser); $action_url = $this->helper->getArticleUrl(); $this->helper->output = array(); $this->helper->output['reply_count'] = ''; $show_form = ($allowGuests || (!$JoomlaUser->guest && !empty($JFusionUserinfo)) && !$JoomlaUser->block) ? 1 : 0; $this->helper->output['post_pagination'] = ''; $this->helper->output['posts'] = ''; $this->helper->output['reply_form'] = ''; $this->helper->output['reply_form_error'] = ''; if (!empty($threadinfo)) { if ($this->helper->reply_count === false || $this->helper->reply_count === null) { $this->helper->reply_count = $JFusionForum->getReplyCount($threadinfo); } //prepare quick reply box if enabled if ($this->params->get('enable_quickreply')){ $threadLocked = $JFusionForum->getThreadLockedStatus($threadinfo->threadid); if ($threadLocked) { $this->helper->output['reply_form_error'] = $this->params->get('locked_msg'); } elseif ($show_form) { if (!$JoomlaUser->guest && empty($JFusionUserinfo)) { $this->helper->output['reply_form_error'] = $this->jname . ': ' . JText::_('USER_NOT_EXIST'); } else { $showGuestInputs = ($allowGuests && $JoomlaUser->guest) ? true : false; $this->helper->output['reply_form'] = '<form id="jfusionQuickReply'.$this->article->id.'" name="jfusionQuickReply'.$this->article->id.'" method="post" action="'.$action_url.'">'; $this->helper->output['reply_form'] .= '<input type="hidden" name="dbtask" value="create_post" />'; $this->helper->output['reply_form'] .= '<input type="hidden" name="threadid" id="threadid" value="'.$threadinfo->threadid.'"/>'; $page_limitstart = JRequest::getInt('limitstart', 0); if ($page_limitstart) { $this->helper->output['reply_form'] .= '<input type="hidden" name="limitstart" value="'.$page_limitstart.'" />'; } $this->helper->output['reply_form'] .= $JFusionForum->createQuickReply($this->params,$showGuestInputs); $this->helper->output['reply_form'] .= '</form>'; } } else { $this->helper->output['reply_form_error'] = $this->params->get('must_login_msg'); } } //add posts to content if enabled if ($this->params->get('show_posts')) { //get the posts $posts = $JFusionForum->getPosts($this->params, $threadinfo); if (!empty($posts)){ $this->helper->output['posts'] = $this->preparePosts($posts); } if ($this->params->get('enable_pagination',1)) { $application = JFactory::getApplication() ; $limitstart = JRequest::getInt( 'limitstart_discuss', 0 ); $limit = (int) $application->getUserStateFromRequest( 'global.list.limit', 'limit_discuss', 5, 'int' ); if (!empty($this->helper->reply_count) && $this->helper->reply_count > 5) { $pageNav = new JFusionPagination($this->helper->reply_count, $limitstart, $limit, '_discuss' ); $this->helper->output['post_pagination'] = '<form method="post" id="jfusionPaginationForm" name="jfusionPaginationForm" action="'.$action_url.'">'; $this->helper->output['post_pagination'] .= '<input type="hidden" name="jumpto_discussion" value="1" />'; $this->helper->output['post_pagination'] .= $pageNav->getListFooter(); $this->helper->output['post_pagination'] .= '</form>'; } } } } elseif ($this->creationMode=='reply') { //prepare quick reply box if enabled if ($show_form) { if (!$JoomlaUser->guest && empty($JFusionUserinfo)) { $this->helper->output['reply_form_error'] = $this->jname . ': ' . JText::_('USER_NOT_EXIST'); } else { $showGuestInputs = ($allowGuests && $JoomlaUser->guest) ? true : false; $this->helper->output['reply_form'] = '<form id="jfusionQuickReply'.$this->article->id.'" name="jfusionQuickReply'.$this->article->id.'" method="post" action="'.$action_url.'">'; $this->helper->output['reply_form'] .= '<input type="hidden" name="dbtask" value="create_threadpost"/>'; $page_limitstart = JRequest::getInt('limitstart', 0); if ($page_limitstart) { $this->helper->output['reply_form'] .= '<input type="hidden" name="limitstart" value="'.$page_limitstart.'" />'; } $this->helper->output['reply_form'] .= $JFusionForum->createQuickReply($this->params,$showGuestInputs); $this->helper->output['reply_form'] .= '</form>'; } } else { $this->helper->output['reply_form_error'] = $this->params->get('must_login_msg'); } } //populate the template $this->helper->threadinfo =& $threadinfo; $content = $this->helper->renderFile('default.php'); return $content; } /** * @param bool $innerhtml * * @return bool|string */ public function renderButtons($innerhtml = false) { $this->helper->debug('Rendering buttons'); //setup some variables $threadinfo = $this->helper->getThreadInfo(); $JUser = JFactory::getUser(); $itemid =& $this->params->get('itemid'); $link_text =& $this->params->get('link_text'); $link_type=& $this->params->get('link_type','text'); $link_mode=& $this->params->get('link_mode','always'); $blog_link_mode=& $this->params->get('blog_link_mode','forum'); $linkHTML = ($link_type=='image') ? '<img style="border:0;" src="'.$link_text.'">' : $link_text; $linkTarget =& $this->params->get('link_target','_parent'); if ($this->helper->isJ16) { if ($this->helper->option == 'com_content') { $article_access = $this->article->params->get('access-view'); } elseif ($this->helper->option == 'com_k2') { $article_access = (in_array($this->article->access, $JUser->authorisedLevels()) && in_array($this->article->category->access, $JUser->authorisedLevels())); } else { $article_access = 1; } } else { if ($this->helper->option == 'com_content') { $article_access = ($this->article->access <= $JUser->get('aid', 0)); } elseif ($this->helper->option == 'com_k2') { $article_access = ($this->article->access <= $JUser->get('aid', 0) && $this->article->category->access <= $JUser->get('aid', 0)); } else { $article_access = 1; } } //prevent notices and warnings in default_buttons.php if there are no buttons to display $this->helper->output = array(); $this->helper->output['buttons'] = array(); /** * @ignore * @var $article_params JParameter */ $attribs = $readmore_param = $article_params = null; $show_readmore = $readmore_catch = 0; if ($this->helper->option == 'com_content') { $attribs = new JParameter($this->article->attribs); if (isset($this->article->params)) { //blog view $article_params =& $this->article->params; $show_readmore = $article_params->get('show_readmore'); $readmore_catch = ($this->helper->isJ16) ? $show_readmore : ((isset($this->article->readmore)) ? $this->article->readmore : 0); } elseif (isset($this->article->parameters)) { //article view $article_params =& $this->article->parameters; $readmore_catch = JRequest::getInt('readmore'); $override = JRequest::getInt('show_readmore',false); $show_readmore = ($override!==false) ? $override : $article_params->get('show_readmore'); } $readmore_param = 'show_readmore'; } elseif ($this->helper->option == 'com_k2' && JRequest::getVar('view') == 'itemlist') { $article_params =& $this->article->params; $layout = JRequest::getVar('layout'); if ($layout == 'category') { $readmore_param = 'catItemReadMore'; } elseif ($layout == 'user') { $readmore_param = 'userItemReadMore'; } else { $readmore_param = 'genericItemReadMore'; } $show_readmore = $readmore_catch = $article_params->get($readmore_param); } //let's overwrite the read more link with our own //needed as in the case of updating the buttons via ajax which calls the article view $view = ($override = JRequest::getVar('view_override')) ? $override : JRequest::getVar('view'); if ($view != $this->view() && $this->params->get('overwrite_readmore',1)) { //make sure the read more link is enabled for this article if (!empty($show_readmore) && !empty($readmore_catch)) { if ($article_access) { $readmore_link = $this->helper->getArticleUrl(); if ($this->helper->option == 'com_content') { if ($this->helper->isJ16) { if (!empty($this->article->alternative_readmore)) { $readmore = $this->article->alternative_readmore; if ($this->article->params->get('show_readmore_title', 0) != 0) { $readmore.= JHtml::_('string.truncate', ($this->article->title), $this->article->params->get('readmore_limit')); } } elseif ($this->article->params->get('show_readmore_title', 0) == 0) { $readmore = JText::_('READ_MORE'); } else { $readmore = JText::_('READ_MORE') . ': '; $readmore.= JHtml::_('string.truncate', ($this->article->title), $this->article->params->get('readmore_limit')); } } else { if ($attribs) { $readmore = $attribs->get('readmore'); } } } if (!empty($readmore)) { $readmore_text = $readmore; } else { $readmore_text = JText::_('READ_MORE'); } } else { $return_url = base64_encode($this->helper->getArticleUrl()); $readmore_link = JRoute::_('index.php?option=com_users&view=login&return='.$return_url); $readmore_text = JText::_('READ_MORE_REGISTER'); } $this->helper->output['buttons']['readmore']['href'] = $readmore_link; $this->helper->output['buttons']['readmore']['text'] = $readmore_text; $this->helper->output['buttons']['readmore']['target'] = '_self'; //set it so that Joomla does not show its read more link if (isset($this->article->readmore)) { $this->article->readmore = 0; } //hide the articles standard read more if ($readmore_param && $article_params) { $article_params->set($readmore_param, 0); } } } //create a link to manually create the thread if it is not already $show_button = $this->params->get('enable_initiate_buttons',false); if ($show_button && empty($this->manual_plug)) { $user = JFactory::getUser(); if (JFusionFunction::isJoomlaVersion()) { $editAccess = $user->authorise('core.edit', 'com_content'); } else { $editAccess = $user->authorize('com_content', 'edit', 'content', 'all'); } if ($editAccess) { if ($this->helper->thread_status) { //discussion is published $dbtask = 'unpublish_discussion'; $text = 'UNINITIATE_DISCUSSION'; } elseif (isset($threadinfo->published)) { //discussion is unpublished $dbtask = 'publish_discussion'; $text = 'INITIATE_DISCUSSION'; } else { //discussion is uninitiated $dbtask = 'create_thread'; $text = 'INITIATE_DISCUSSION'; } $this->helper->output['buttons']['initiate']['href'] = 'javascript: void(0);'; $vars = '&view_override='.$view; $vars .= ($this->params->get('overwrite_readmore',1)) ? '&readmore='.$readmore_catch.'&show_readmore='.$show_readmore : ''; $this->helper->output['buttons']['initiate']['js']['onclick'] = 'confirmThreadAction('.$this->article->id.",'$dbtask', '$vars', '{$this->helper->getArticleUrl()}');"; $this->helper->output['buttons']['initiate']['text'] = JText::_($text); $this->helper->output['buttons']['initiate']['target'] = '_self'; } } /* <a class="jfusionRefreshLink" href="javascript:void(0);" onclick=""><?php echo JText::_('REFRESH_POSTS');?></a> <br/> */ if($view==$this->view() && $this->params->get('show_refresh_link',1) && $threadinfo) { //class="jfusionRefreshLink" $this->helper->output['buttons']['refresh']['href'] = 'javascript:void(0);'; $this->helper->output['buttons']['refresh']['js']['onclick'] = 'refreshPosts('.$threadinfo->threadid.');'; $this->helper->output['buttons']['refresh']['text'] = JText::_('REFRESH_POSTS'); $this->helper->output['buttons']['refresh']['target'] = $linkTarget; } //create the discuss this link if ($this->helper->thread_status || $this->manual_plug) { if ($link_mode!="never") { $JFusionForum = JFusionFactory::getForum($this->jname); if ($this->helper->reply_count === false || $this->helper->reply_count === null) { $this->helper->reply_count = $JFusionForum->getReplyCount($threadinfo); } if ($view==$this->view()) { if ($link_mode=="article" || $link_mode=="always") { $this->helper->output['buttons']['discuss']['href'] = JFusionFunction::routeURL($JFusionForum->getThreadURL($threadinfo->threadid), $itemid, $this->jname); $this->helper->output['buttons']['discuss']['text'] = $linkHTML; $this->helper->output['buttons']['discuss']['target'] = $linkTarget; if ($this->params->get('enable_comment_in_forum_button',0)) { $commentLinkText = $this->params->get('comment_in_forum_link_text', JText::_('ADD_COMMENT')); $commentLinkHTML = ($this->params->get('comment_in_forum_link_type')=='image') ? '<img style="border:0;" src="'.$commentLinkText.'">' : $commentLinkText; $this->helper->output['buttons']['comment_in_forum']['href'] = JFusionFunction::routeURL($JFusionForum->getReplyURL($threadinfo->forumid, $threadinfo->threadid), $itemid, $this->jname); $this->helper->output['buttons']['comment_in_forum']['text'] = $commentLinkHTML; $this->helper->output['buttons']['comment_in_forum']['target'] = $linkTarget; } } } elseif ($link_mode=="blog" || $link_mode=="always") { if ($blog_link_mode=="joomla") { //see if there are any page breaks $joomla_text = (isset($this->article->fulltext)) ? $this->article->fulltext : $this->article->text; $pagebreaks = substr_count($joomla_text, 'system-pagebreak'); $query = ($pagebreaks) ? "&limitstart=$pagebreaks" : ''; if ($article_access) { $discuss_link = $this->helper->getArticleUrl('discussion', $query); } else { $return_url = base64_encode($this->helper->getArticleUrl('discussion', $query)); $discuss_link = JRoute::_('index.php?option=com_user&view=login&return='.$return_url); } $this->helper->output['buttons']['discuss']['href'] = 'javascript: void(0);'; $this->helper->output['buttons']['discuss']['js']['onclick'] = 'toggleDiscussionVisibility(1,\''.$discuss_link.'\');'; $this->helper->output['buttons']['discuss']['target'] = '_self'; } else { $this->helper->output['buttons']['discuss']['href'] = JFusionFunction::routeURL($JFusionForum->getThreadURL($threadinfo->threadid), $itemid, $this->jname); $this->helper->output['buttons']['discuss']['target'] = $linkTarget; } $this->helper->output['buttons']['discuss']['text'] = $linkHTML; if ($this->params->get('enable_comment_in_forum_button',0)) { $commentLinkText = $this->params->get('comment_in_forum_link_text', JText::_('ADD_COMMENT')); $commentLinkHTML = ($this->params->get('comment_in_forum_link_type')=='image') ? '<img style="border:0;" src="'.$commentLinkText.'">' : $commentLinkText; $this->helper->output['buttons']['comment_in_forum']['href'] = JFusionFunction::routeURL($JFusionForum->getReplyURL($threadinfo->forumid, $threadinfo->threadid), $itemid, $this->jname); $this->helper->output['buttons']['comment_in_forum']['text'] = $commentLinkHTML; $this->helper->output['buttons']['comment_in_forum']['target'] = $linkTarget; } } } //show comments link if ($view==$this->view() && $this->params->get('show_toggle_posts_link',1)) { $this->helper->output['buttons']['showreplies']['href'] = 'javascript: void(0);'; $this->helper->output['buttons']['showreplies']['js']['onclick'] = 'toggleDiscussionVisibility();'; $JSession = JFactory::getSession(); $show_replies = $JSession->get('jfusion.discussion.visibility',0); $text = (empty($show_replies)) ? 'SHOW_REPLIES' : 'HIDE_REPLIES'; $this->helper->output['buttons']['showreplies']['text'] = JText::_($text); $this->helper->output['buttons']['showreplies']['target'] = '_self'; } } $this->helper->threadinfo =& $threadinfo; if ($innerhtml) { $button_output = $this->helper->renderFile('default_buttons.php'); } else { $button_output = <<<HTML <div class="jfusionclearfix" id="jfusionButtonArea{$this->article->id}"> {$this->helper->renderFile('default_buttons.php')} </div> <div class="jfusionclearfix jfusionButtonConfirmationBox" id="jfusionButtonConfirmationBox{$this->article->id}"> </div> HTML; } return $button_output; } /** * @param $posts * * @return array|string */ public function preparePosts(&$posts) { $this->helper->debug('Preparing posts output'); //get required params defined('_DATE_FORMAT_LC2') or define('_DATE_FORMAT_LC2','%A, %d %B %Y %H:%M'); $date_format = $this->params->get('custom_date', _DATE_FORMAT_LC2); $showdate = intval($this->params->get('show_date')); $showuser = intval($this->params->get('show_user')); $showavatar = $this->params->get('show_avatar'); $avatar_software = $this->params->get('avatar_software',false); $resize_avatar = $this->params->get('avatar_keep_proportional', false); $userlink = intval($this->params->get('user_link')); $link_software = $this->params->get('userlink_software',false); $userlink_custom = $this->params->get('userlink_custom',false); $character_limit = (int) $this->params->get('character_limit'); $itemid = $this->params->get('itemid'); $JFusionPublic = JFusionFactory::getPublic($this->jname); $JFusionForum = JFusionFactory::getForum($this->jname); $columns = $JFusionForum->getDiscussionColumns(); if (empty($columns)) return ''; $post_output = array(); for ($i=0; $i<count($posts); $i++) { $p =& $posts[$i]; $userid =& $p->{$columns->userid}; $username = ($this->params->get('display_name') && isset($p->{$columns->name})) ? $p->{$columns->name} : $p->{$columns->username}; $dateline =& $p->{$columns->dateline}; $posttext =& $p->{$columns->posttext}; $posttitle =& $p->{$columns->posttitle}; $postid =& $p->{$columns->postid}; $threadid =& $p->{$columns->threadid}; $guest =& $p->{$columns->guest}; $threadtitle = (isset($columns->threadtitle)) ? $p->{$columns->threadtitle} : ''; $post_output[$i] = new stdClass(); $post_output[$i]->postid = $postid; $post_output[$i]->guest = $guest; //get Joomla id $userlookup = JFusionFunction::lookupUser($JFusionForum->getJname(),$userid,false,$p->{$columns->username}); //avatar if ($showavatar){ if (!empty($avatar_software) && $avatar_software!='jfusion' && !empty($userlookup)) { $post_output[$i]->avatar_src = JFusionFunction::getAltAvatar($avatar_software, $userlookup->id); } else { $post_output[$i]->avatar_src = $JFusionForum->getAvatar($userid); } if (empty($post_output[$i]->avatar_src)) { $post_output[$i]->avatar_src = JFusionFunction::getJoomlaURL().'components/com_jfusion/images/noavatar.png'; } $size = ($resize_avatar) ? @getimagesize($post_output[$i]->avatar_src) : false; $maxheight = $this->params->get('avatar_height',80); $maxwidth = $this->params->get('avatar_width',60); //size the avatar to fit inside the dimensions if larger if ($size!==false && ($size[0] > $maxwidth || $size[1] > $maxheight)) { $wscale = $maxwidth/$size[0]; $hscale = $maxheight/$size[1]; $scale = min($hscale, $wscale); $post_output[$i]->avatar_width = floor($scale*$size[0]); $post_output[$i]->avatar_height = floor($scale*$size[1]); } elseif ($size!==false) { //the avatar is within the limits $post_output[$i]->avatar_width = $size[0]; $post_output[$i]->avatar_height = $size[1]; } else { //getimagesize failed $post_output[$i]->avatar_width = $maxwidth; $post_output[$i]->avatar_height = $maxheight; } } else { $post_output[$i]->avatar_src = ''; $post_output[$i]->avatar_height = ''; $post_output[$i]->avatar_width = ''; } //post title $post_output[$i]->subject_url = JFusionFunction::routeURL($JFusionForum->getPostURL($threadid,$postid), $itemid); if (!empty($posttitle)) { $post_output[$i]->subject = $posttitle; } elseif (!empty($threadtitle)) { $post_output[$i]->subject = 'Re: '.$threadtitle; } else { $post_output[$i]->subject = JText::_('NO_SUBJECT'); } //user info if ($showuser) { $post_output[$i]->username_url = ''; if ($userlink && empty($guest) && !empty($userlookup)) { if ($link_software=='custom' && !empty($userlink_custom) && !empty($userlookup)) { $post_output[$i]->username_url = $userlink_custom.$userlookup->id; } else { $post_output[$i]->username_url = JFusionFunction::routeURL($JFusionForum->getProfileURL($userid, $username), $itemid); } } $post_output[$i]->username = $username; } else { $post_output[$i]->username = ''; $post_output[$i]->username_url = ''; } //post date if ($showdate){ jimport('joomla.utilities.date'); $tz_offset =& JFusionFunction::getJoomlaTimezone(); $dateline += ($tz_offset * 3600); $date = gmstrftime($date_format, (int) $dateline); $post_output[$i]->date = $date; } else { $post_output[$i]->date = ''; } //post body $post_output[$i]->text = $posttext; $status = $JFusionPublic->prepareText($post_output[$i]->text,'joomla', $this->params, $p); $original_text = '[quote="'.$username.'"]'."\n".$posttext."\n".'[/quote]'; $post_output[$i]->original_text = $original_text; $JFusionPublic->prepareText($post_output[$i]->original_text, 'discuss', $this->params, $p); //apply the post body limit if there is one if (!empty($character_limit) && empty($status['limit_applied']) && JString::strlen($post_output[$i]->text) > $character_limit) { $post_output[$i]->text = JString::substr($post_output[$i]->text,0,$character_limit) . '...'; } $toolbar = array(); if ($this->params->get('enable_quickreply')){ $JoomlaUser = JFactory::getUser(); if ($this->params->get('quickreply_allow_guests',0) || !$JoomlaUser->guest) { $toolbar[] = '<a href="javascript:void(0);" onclick="jfusionQuote('.$postid.');">'.JText::_('QUOTE').'</a>'; } } if (!empty($toolbar)) { $post_output[$i]->toolbar = '| ' . implode(' | ', $toolbar) . ' |'; } else { $post_output[$i]->toolbar = ''; } } return $post_output; } /** * updatePagination * * @return string */ public function updatePagination() { $this->helper->reply_count = JRequest::getVar('reply_count',''); if ($this->helper->reply_count == '') { $JFusionForum = JFusionFactory::getForum($this->jname); $threadinfo = $this->helper->getThreadInfo(); if (!empty($threadinfo)) { $this->helper->reply_count = $JFusionForum->getReplyCount($threadinfo); } else { $this->helper->reply_count = 0; } } $action_url = $this->helper->getArticleUrl('','',false); $application = JFactory::getApplication() ; $limit = (int) $application->getUserStateFromRequest( 'global.list.limit', 'limit_discuss', 5, 'int' ); //set $limitstart so that the created post is shown if ($this->params->get('sort_posts','ASC')=='ASC') { $limitstart = floor(($this->helper->reply_count - 1)/$limit) * $limit; } else { $limitstart = 0; } //keep pagination from changing limit to all if ($limit == $this->helper->reply_count) { $reply_count = $this->helper->reply_count - 1; } else { $reply_count =& $this->helper->reply_count; } if (!empty($reply_count) && $reply_count > 5) { $pageNav = new JFusionPagination($reply_count, $limitstart, $limit, '_discuss'); $pagination = '<form method="post" id="jfusionPaginationForm" name="jfusionPaginationForm" action="'.$action_url.'">'; $pagination .= '<input type="hidden" name="jumpto_discussion" value="1"/>'; $pagination .= $pageNav->getListFooter(); $pagination .= '</form>'; } else { $pagination = ''; } return $pagination; } /* * updatePosts */ public function updatePosts() { $ajax = $this->prepareAjaxResponce(); if ($this->helper->thread_status) { $JFusionForum = JFusionFactory::getForum($this->jname); $threadinfo = $this->helper->getThreadInfo(); $posts = $JFusionForum->getPosts($this->params, $threadinfo); $this->helper->output = array(); $this->helper->output['posts'] = $this->preparePosts($posts); $ajax->posts = $this->helper->renderFile('default_posts.php'); $ajax->status = true; } else { $ajax->message = JText::_('NOT_PUBLISHED'); } $this->renderAjaxResponce($ajax); } }