Example #1
0
 public static function saveComment($values = array())
 {
     if (JCommentsSecurity::badRequest() == 1) {
         JCommentsSecurity::notAuth();
     }
     $db = JCommentsFactory::getDBO();
     $config = JCommentsFactory::getConfig();
     $response = JCommentsFactory::getAjaxResponse();
     $values = self::prepareValues($_POST);
     $comment = new JCommentsTableComment($db);
     $id = (int) $values['id'];
     if ($comment->load($id)) {
         $acl = JCommentsFactory::getACL();
         if ($acl->canEdit($comment)) {
             if ($values['comment'] == '') {
                 self::showErrorMessage(JText::_('ERROR_EMPTY_COMMENT'), 'comment');
             } else {
                 if ($config->getInt('comment_maxlength') != 0 && $acl->check('enable_comment_length_check') == 1 && JCommentsText::strlen($values['comment']) > $config->getInt('comment_maxlength')) {
                     self::showErrorMessage(JText::_('ERROR_TOO_LONG_COMMENT'), 'comment');
                 } else {
                     if ($config->getInt('comment_minlength') != 0 && $acl->check('enable_comment_length_check') == 1 && JCommentsText::strlen($values['comment']) < $config->getInt('comment_minlength')) {
                         self::showErrorMessage(JText::_('ERROR_YOUR_COMMENT_IS_TOO_SHORT'), 'comment');
                     } else {
                         $bbcode = JCommentsFactory::getBBCode();
                         $comment->comment = $values['comment'];
                         $comment->comment = $bbcode->filter($comment->comment);
                         $comment->published = $acl->check('autopublish');
                         if ($config->getInt('comment_title') != 0 && isset($values['title'])) {
                             $comment->title = stripslashes((string) $values['title']);
                         }
                         if ($config->getInt('author_homepage') == 1 && isset($values['homepage'])) {
                             $comment->homepage = JCommentsText::url($values['homepage']);
                         } else {
                             $comment->homepage = '';
                         }
                         $result = JCommentsEvent::trigger('onJCommentsCommentBeforeChange', array(&$comment));
                         if (in_array(false, $result, true)) {
                             return $response;
                         }
                         $comment->store();
                         $comment->checkin();
                         JCommentsEvent::trigger('onJCommentsCommentAfterChange', array(&$comment));
                         if ($config->getInt('enable_notification') == 1) {
                             if ($config->check('notification_type', 1) == true) {
                                 JComments::sendNotification($comment, false);
                             }
                         }
                         $html = JCommentsText::jsEscape(JComments::getCommentItem($comment));
                         $response->addScript("jcomments.updateComment(" . $comment->id . ", '{$html}');");
                     }
                 }
             }
         } else {
             $response->addAlert(JText::_('ERROR_CANT_EDIT'));
         }
     }
     return $response;
 }
Example #2
0
 function saveComment($values = array())
 {
     if (JCommentsSecurity::badRequest() == 1) {
         JCommentsSecurity::notAuth();
     }
     $db =& JCommentsFactory::getDBO();
     $config =& JCommentsFactory::getConfig();
     $response =& JCommentsFactory::getAjaxResponse();
     $values = JCommentsAJAX::prepareValues($_POST);
     $comment = new JCommentsDB($db);
     $id = (int) $values['id'];
     if ($comment->load($id)) {
         $acl =& JCommentsFactory::getACL();
         if ($acl->canEdit($comment)) {
             if ($values['comment'] == '') {
                 JCommentsAJAX::showErrorMessage(JText::_('ERROR_EMPTY_COMMENT'), 'comment');
             } else {
                 if ($config->getInt('comment_maxlength') != 0 && $acl->check('enable_comment_length_check') == 1 && JCommentsText::strlen($values['comment']) > $config->getInt('comment_maxlength')) {
                     JCommentsAJAX::showErrorMessage(JText::_('ERROR_TOO_LONG_COMMENT'), 'comment');
                 } else {
                     if ($config->getInt('comment_minlength') != 0 && $acl->check('enable_comment_length_check') == 1 && JCommentsText::strlen($values['comment']) < $config->getInt('comment_minlength')) {
                         JCommentsAJAX::showErrorMessage(JText::_('Your comment is too short'), 'comment');
                     } else {
                         $bbcode =& JCommentsFactory::getBBCode();
                         $comment->comment = $values['comment'];
                         $comment->comment = $bbcode->filter($comment->comment);
                         $comment->published = $acl->check('autopublish');
                         if ($config->getInt('comment_title') != 0 && isset($values['title'])) {
                             $comment->title = stripslashes((string) $values['title']);
                         }
                         if ($config->getInt('author_homepage') == 1 && isset($values['homepage'])) {
                             $comment->homepage = JCommentsText::url($values['homepage']);
                         } else {
                             $comment->homepage = '';
                         }
                         $allowed = true;
                         if ($config->getInt('enable_mambots') == 1) {
                             require_once JCOMMENTS_HELPERS . DS . 'plugin.php';
                             JCommentsPluginHelper::importPlugin('jcomments');
                             JCommentsPluginHelper::trigger('onBeforeCommentChanged', array(&$comment, &$response, &$allowed));
                         }
                         if ($allowed == false) {
                             return $response;
                         }
                         $comment->store();
                         $comment->checkin();
                         $comment->datetime = $comment->date;
                         if ($config->getInt('enable_mambots') == 1) {
                             JCommentsPluginHelper::importPlugin('jcomments');
                             JCommentsPluginHelper::trigger('onAfterCommentChanged', array(&$comment, &$response));
                         }
                         if ($config->getInt('enable_notification') == 1) {
                             if ($config->check('notification_type', 1) == true) {
                                 JComments::sendNotification($comment, false);
                             }
                         }
                         JComments::prepareComment($comment);
                         $tmpl =& JCommentsFactory::getTemplate();
                         $tmpl->load('tpl_comment');
                         $tmpl->addVar('tpl_comment', 'get_comment_body', 1);
                         $tmpl->addObject('tpl_comment', 'comment', $comment);
                         $html = $tmpl->renderTemplate('tpl_comment');
                         $html = JCommentsText::jsEscape($html);
                         $response->addScript("jcomments.updateComment(" . $comment->id . ", '{$html}');");
                     }
                 }
             }
         } else {
             $response->addAlert(JText::_('ERROR_CANT_EDIT'));
         }
     }
     unset($comment);
     return $response;
 }
 /**
  * onJCommentsCommentBeforeAdd trigger
  * @access public
  * @param JCommentsDB $comment
  * @return bolean true
  * @since 1.5
  */
 public function onJCommentsCommentBeforeAdd(&$comment)
 {
     $config = $this->getCTConfig();
     $session = JFactory::getSession();
     $submit_time = $this->submit_time_test();
     // set new time because onJCommentsFormAfterDisplay worked only once
     // and formtime in session need to be renewed between ajax posts
     $session->set($this->form_load_label, time());
     $checkjs = $this->get_ct_checkjs(true);
     $sender_info = $this->get_sender_info();
     $sender_info = json_encode($sender_info);
     if ($sender_info === false) {
         $sender_info = '';
     }
     $post_info['comment_type'] = 'jcomments_comment';
     $post_info['post_url'] = $session->get($this->current_page);
     $post_info = json_encode($post_info);
     if ($post_info === false) {
         $post_info = '';
     }
     $plugin_groups = array();
     $param_groups = $this->params->get('groups');
     if (is_array($param_groups)) {
         foreach ($param_groups as $group) {
             array_push($plugin_groups, (int) $group);
         }
     } else {
         array_push($plugin_groups, (int) $param_groups);
     }
     $user = JFactory::getUser();
     if (method_exists($user, 'getAuthorisedGroups')) {
         // 1.6+
         $user_groups = $user->getAuthorisedGroups();
     } else {
         // 1.5
         $user_groups = array();
         if ($user->guest) {
             array_push($user_groups, 29);
         } else {
             array_push($user_groups, $user->gid);
         }
     }
     foreach ($user_groups as $group) {
         if (in_array($group, $plugin_groups)) {
             $example = null;
             if ($config['relevance_test'] !== '') {
                 switch ($comment->object_group) {
                     case 'com_content':
                         $article = JTable::getInstance('content');
                         $article->load($comment->object_id);
                         $baseText = $article->introtext . '<br>' . $article->fulltext;
                         break;
                     default:
                         $baseText = '';
                 }
                 $db = JCommentsFactory::getDBO();
                 $query = "SELECT comment " . "\nFROM #__jcomments " . "\nWHERE published = 1 " . "\n  AND object_group = '" . $db->getEscaped($comment->object_group) . "'" . "\n  AND object_id = " . $comment->object_id . (JCommentsMultilingual::isEnabled() ? "\nAND lang = '" . JCommentsMultilingual::getLanguage() . "'" : "") . " ORDER BY id DESC " . " LIMIT 10 ";
                 $db->setQuery($query);
                 $prevComments = $db->loadResultArray();
                 $prevComments = $prevComments == NULL ? '' : implode("\n\n", $prevComments);
                 $example = $baseText . "\n\n\n\n" . $prevComments;
             }
             self::getCleantalk();
             $ctResponse = self::ctSendRequest('check_message', array('example' => $example, 'message' => $comment->comment, 'sender_nickname' => $comment->name, 'sender_email' => $comment->email, 'sender_ip' => self::$CT->ct_session_ip($_SERVER['REMOTE_ADDR']), 'js_on' => $checkjs, 'submit_time' => $submit_time, 'sender_info' => $sender_info, 'post_info' => $post_info));
             if (!empty($ctResponse) && is_array($ctResponse)) {
                 if ($ctResponse['stop_queue'] == 1) {
                     JCommentsAJAX::showErrorMessage($ctResponse['comment'], 'comment');
                     return false;
                 } else {
                     if ($ctResponse['allow'] == 0) {
                         $comment->published = false;
                         // Send notification to administrator
                         if ($config['jcomments_unpublished_nofications'] != '') {
                             JComments::sendNotification($comment, true);
                         }
                     }
                 }
             }
             return true;
         }
         //if(in_array($group, $plugin_groups))
     }
     //foreach
 }