Помощь Помогите изменить переменную homepage в Jcomments

Статус
В этой теме нельзя размещать новые ответы.

MrBaron

Создатель
Заблокирован
Регистрация
27 Май 2012
Сообщения
34
Реакции
1
  • Автор темы
  • Заблокирован
  • #1
версия JComments 2.3.0 [20/02/2012]
Ситуация следующая: я изменил homepage на обычное текстовое поле. В шаблоне изменил так, чтобы при добавлении комментария в БД записывается именно строка, как я ее указываю. Также все корректно, когда я именяю комментарий в админке - оттуда тоже забирается текст из поля homepage и как надо записывается в БД.

Проблема: когда я из фронт-енда редактирую комментарий, записывая в homepage строку, она не проходит проверку (где-то в каком-то файле) на url адрес, т.е. если при редактировании пишу, например, Для просмотра ссылки Войди или Зарегистрируйся - то, проходит проверку, что это адрес + достраивается до Для просмотра ссылки Войди или Зарегистрируйся. А если я просто напишу туда русские буквы, то в БД ничего не записывается.

Помощь нужна только в подсказке: где искать эту проверку на URL, в каком файле? я их перелопачивал, ну никак не могу вычислить. Вообще классно было бы, если кто-нибудь подсказал в какой строке это менять надо))

я подозреваю, что это в jcomments.ajax.php, т.к. из jcomments-v2.3.js данные вроде туда передаются.

т.е. мне тупо надо чтобы было присваивание, типа: $component->homepage = $_POST['homepage']
 
Если я правильно понял твою задачу, то:
я подозреваю, что это в jcomments.ajax.php
совершенно верно, именно в этом файле строка 757
PHP:
$comment->homepage = JCommentsText::url($values['homepage']);
тут проверяется homepage функцией url() и если там просто текст, то $comment->homepage будет пустая строка.
Замени эту строку на
PHP:
$comment->homepage = stripslashes((string)$values['homepage']);
 
  • Автор темы
  • Заблокирован
  • #3
Если я правильно понял твою задачу, то:

совершенно верно, именно в этом файле строка 757
PHP:
$comment->homepage = JCommentsText::url($values['homepage']);
тут проверяется homepage функцией url() и если там просто текст, то $comment->homepage будет пустая строка.
Замени эту строку на
PHP:
$comment->homepage = stripslashes((string)$values['homepage']);

привет! спасибо за ответ, но это я тоже сделал, сразу же, забыл написать, т.к. сам забыл =) я подозреваю, что этот кусок из jcomments.ajax.php отвечает за загрузку данных комментария для редактирования.

PHP:
public static function editComment($id, $loadForm = 0)
{
if (JCommentsSecurity::badRequest() == 1) {
JCommentsSecurity::notAuth();
}
 
$user = JCommentsFactory::getUser();
$db = JCommentsFactory::getDBO();
$response = JCommentsFactory::getAjaxResponse();
$comment = new JCommentsTableComment($db);
 
if ($comment->load((int) $id)) {
$acl = JCommentsFactory::getACL();
 
if ($acl->isLocked($comment)) {
$response->addAlert(JText::_('ERROR_BEING_EDITTED'));
} else if ($acl->canEdit($comment)) {
$comment->checkout($user->id);
 
$name = ($comment->userid) ? '' : JCommentsText::jsEscape($comment->name);
$email = ($comment->userid) ? '' : JCommentsText::jsEscape($comment->email);
$homepage = JCommentsText::jsEscape($comment->homepage);
$text = JCommentsText::jsEscape(JCommentsText::br2nl($comment->comment));
$title = JCommentsText::jsEscape(str_replace("\n", '', JCommentsText::br2nl($comment->title)));
 
if (intval($loadForm) == 1) {
$form = JComments::getCommentsForm($comment->object_id, $comment->object_group, true);
$response->addAssign('comments-form-link', 'innerHTML', $form);
}
$response->addScript("jcomments.showEdit(" . $comment->id . ", '$name', '$email', '$homepage', '$title', '$text');");
} else {
$response->addAlert(JText::_('ERROR_CANT_EDIT'));
}
}
return $response;
}

а здесь он сохраняется - это я все поправил, как раз это и отвечает за сохранение везде, кроме, когда редактируешь, т.е. когда используется Ajax.

PHP:
    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']);
                        $comment->homepage = $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;
    }

собственно вопрос остался открытым. Я не могу найти место, куда именно передает данные Ajax передает. Как раз там и происходит проверка на корректность URL. прошу помощи!
 
Проблема: когда я из фронт-енда редактирую комментарий, записывая в homepage строку, она не проходит проверку
Я у себя тестировал. После замены этой строки все отлично именно при редактировании из фронтенда.
Может ты что-то перемудрил? Версия компонента у меня та же.
 
  • Автор темы
  • Заблокирован
  • #5
PHP:
$config->getInt('author_homepage') == 1
у меня почему-то равно 3м. грохнул эту дерективу и просто проверяю на существование, хотя она всегда будет ненулевая, и все заработало! Спасибо за помощь, Vitmar!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху