+20.99
333 читателя, 271 топик

Чиним Пост-Опрос, Пост-Фотосет и Пост-Ссылка

Как вы уже заметили на 1.0.3 не работают «Пост-Опрос, Пост-Фотосет и Пост-Ссылка»

Чиним так. В файле: /classes/modules/topic/entity/Topic.entity.class.php

Заменить функции на вот эти:(Извеняйте, что не описал что именно менять, тут лимит стоит 15000. Но там всё идёт по порядку. Найдите начало и конец, и замените на этот код)
/**
     * Извлекает сериализованные данные топика
     */
    protected function extractExtra() {

        if (null === $this->aExtra) {
            $aData = @unserialize($this->getExtra());
            if (is_array($aData)) {
                $this->aExtra = $aData;
            }
        }
    }

    /**
     * Устанавливает значение нужного параметра
     *
     * @param string $sName    Название параметра/данных
     * @param mixed  $data     Данные
     */
    protected function setExtraValue($sName, $data) {

        $this->extractExtra();
        $this->aExtra[$sName] = $data;
        $this->setExtra($this->aExtra);
    }

    /**
     * Извлекает значение параметра
     *
     * @param string $sName    Название параметра
     *
     * @return null|mixed
     */
    protected function getExtraValue($sName) {

        $this->extractExtra();
        if (isset($this->aExtra[$sName])) {
            return $this->aExtra[$sName];
        }
        return null;
    }

    /* *** ******************** *** */
    /* *** SOURCE LINK OF TOPIC *** */

    /**
     * Returns URL of topic's source link
     *
     * @param bool $bShort    Shorten URL
     *
     * @return null|string
     */
    public function getSourceLink($bShort = false) {

        if ($sUrl = $this->getExtraValue('url')) {
            if ($bShort) {
                $sUrl = htmlspecialchars($sUrl);
                if (preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
                    $sUrl = $aMatch[1];
                }
                $sUrlShort = substr($sUrl, 0, 30);
                if (strlen($sUrlShort) != strlen($sUrl)) {
                    return $sUrlShort . '...';
                }
                return $sUrl;
            } else {
                if (!preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
                    $sUrl = 'http://' . $sUrl;
                }
            }
            return $sUrl;
        }
        return null;
    }

    /**
     * Set URL of topic's source link
     *
     * @param string $data
     */
    public function setSourceLink($data) {

        $this->setExtraValue('url', strip_tags($data));
    }

    /**
     * Возвращает количество переходов по ссылке в топике-ссылке
     *
     * @return int
     */
    public function getSourceLinkCountJump() {

        return (int)$this->getExtraValue('count_jump');
    }

    /**
     * Устанавливает количество переходов по ссылке в топике-ссылке
     *
     * @param string $data
     */
    public function setSourceLinkCountJump($data) {

        $this->setExtraValue('count_jump', $data);
    }

    /* *** ********************** *** */
    /* *** QUESTIONNAIRE OF TOPIC *** */

    /**
     * Устанавливает вопрос
     *
     * @param string $data
     */
    public function setQuestionTitle($data) {

        $this->setExtraValue('question_title', $data);
    }

    /**
     * Возвращает вопрос, если вопрос не указан - заголовок топика
     *
     * @return int|null
     */
    public function getQuestionTitle() {

        if ($this->getExtraValue('question_title')) {
            return $this->getExtraValue('question_title');
        }
        return $this->getTitle();
    }

    /**
     * Добавляет вариант ответа в опросе топика
     *
     * @param string $data
     */
    public function addQuestionAnswer($data) {

        $this->extractExtra();
        $this->aExtra['answers'][] = array('text' => $data, 'count' => 0);
        $this->setExtra($this->aExtra);
    }

    /**
     * Очищает варианты ответа в опросе топика
     */
    public function clearQuestionAnswer() {

        $this->setExtraValue('answers', array());
    }

    /**
     * Возвращает варианты ответа в опросе топика
     *
     * @param bool $bSortVote
     *
     * @return array|null
     */
    public function getQuestionAnswers($bSortVote = false) {

        $aAnswers = $this->getExtraValue('answers');
        if ($aAnswers && $bSortVote) {
            uasort(
                $aAnswers, create_function(
                    '$a,$b',
                    "if (\$a['count'] == \$b['count']) { return 0; } return (\$a['count'] < \$b['count']) ? 1 : -1;"
                )
            );
        }
        return $aAnswers ? $aAnswers : array();
    }

    /**
     * Увеличивает количество ответов на данный вариант в опросе топика
     *
     * @param int $sIdAnswer  ID варианта ответа
     */
    public function increaseQuestionAnswerVote($sIdAnswer) {

        if ($aAnswers = $this->getQuestionAnswers()) {
            if (isset($aAnswers[$sIdAnswer])) {
                $aAnswers[$sIdAnswer]['count']++;
                $this->aExtra['answers'] = $aAnswers;
                $this->setExtra($this->aExtra);
            }
        }
    }

    /**
     * Возвращает максимально количество ответов на вариант в опросе топика
     *
     * @return int
     */
    public function getQuestionAnswerMax() {

        $aAnswers = $this->getQuestionAnswers();
        $iMax = 0;
        foreach ($aAnswers as $aAns) {
            if ($aAns['count'] > $iMax) {
                $iMax = $aAns['count'];
            }
        }
        return $iMax;
    }

    /**
     * Возвращает в процентах количество проголосовавших за конкретный вариант
     *
     * @param int $sIdAnswer ID варианта
     *
     * @return int|string
     */
    public function getQuestionAnswerPercent($sIdAnswer) {

        if ($aAnswers = $this->getQuestionAnswers()) {
            if (isset($aAnswers[$sIdAnswer])) {
                $iCountAll = $this->getQuestionCountVote() - $this->getQuestionCountVoteAbstain();
                if (!$iCountAll == 0) {
                    return number_format(round($aAnswers[$sIdAnswer]['count'] * 100 / $iCountAll, 1), 1, '.', '');
                }
            }
        }
        return 0;
    }

    /**
     * Возвращает общее число принявших участие в опросе в опросе топика
     *
     * @return int
     */
    public function getQuestionCountVote() {

        return (int)$this->getExtraValue('count_vote');
    }

    /**
     * Устанавливает общее число принявших участие в опросе в опросе топика
     *
     * @param int $data
     */
    public function setQuestionCountVote($data) {

        $this->setExtraValue('count_vote', $data);
    }

    /**
     * Возвращает число воздержавшихся от участия в опросе
     *
     * @return int
     */
    public function getQuestionCountVoteAbstain() {

        return (int)$this->getExtraValue('count_vote_abstain');
    }

    /**
     * Устанавливает число воздержавшихся от участия в опросе
     *
     * @param int $data
     *
     * @return mixed
     */
    public function setQuestionCountVoteAbstain($data) {

        $this->setExtraValue('count_vote_abstain', $data);
    }
/**
	 * Возвращает фотографии из топика-фотосета
	 *
	 * @param int|null $iFromId	ID с которого начинать  выборку
	 * @param int|null $iCount	Количество
	 * @return array
	 */
	public function getPhotosetPhotos($iFromId = null, $iCount = null) {
		return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount);
	}
	/**
	 * Возвращает количество фотографий в топике-фотосете
	 *
	 * @return int|null
	 */
	public function getPhotosetCount() {
		return $this->getExtraValue('count_photo');
	}
	/**
	 * Возвращает ID главной фото в топике-фотосете
	 *
	 * @return int|null
	 */
	public function getPhotosetMainPhotoId() {

        $oImage = $this->getPhotosetMainPhoto();
        if ($oImage) {
            return $oImage->getMresourceId();
        }

        return $this->getExtraValue('main_photo_id');
    }
	/**
	 * Устанавливает ID главной фото в топике-фотосете
	 *
	 * @param int $data
	 */
	public function setPhotosetMainPhotoId($iPhotoId) {

        $this->setExtraValue('main_photo_id', $iPhotoId);
        $this->setProp('_photoset_photos', null);
    }
	/**
	 * Устанавливает количество фотографий в топике-фотосете
	 *
	 * @param int $data
	 */
	public function setPhotosetCount($iCount) {

        $this->setExtraValue('count_photo', $iCount);
        $this->setProp('_photoset_photos', null);
    }

Не дадим 1.0.3 умереть!

Не работают некоторые inline onclick с новой версией jQuery (LS 1.0.3)

Обновил jQuery до версии 2.2.4 и перестали работать некоторые инлайновые onclick-и.

Например, кнопка загрузки изображения в топик (как я понял вызывается эта функция)

Или кнопка предпросмотра топика (вызов этой функции)

Может кто поможет «починить»?

Добавление подобного кода в .tpl не помогает:
<button class="js-topic-preview" name="submit_preview" type="button">{$aLang.topic_create_submit_preview}</button>

<script>
    $(document).on('click', '.js-topic-preview', function (e) {
        ls.topic.preview('form-topic-add', 'text_preview');
    });
</script>

Не работает поиск на этом сайте

Не уверен, что правильный блог выбрал для публикации… Если так то Ort перенеси пожалуйста. Поиск не работает на этом сайте:( Вообще что то совсем все загибается, ни один файл скачать не получается с каталога, пишет «файл поврежден», поиск перестал работать… Максим — что все? Конец?

ДОЖДАЛИСЬ...

Еще года два назад обсуждал проблему спама на ЛС. Для меня было совсем неочевидным, почему спамеры делают основной упор на публикации топиков. Вполне возможно, это идет от технологии распространения спама на других CMS. В ЛС гораздо удобнее спамить в коменты и личные сообщения. И, наконец, спамеры поняли это и начали спамить в коменты. Сегодня весь ЛС загажен рекламой казино.

спам, сообщество

Уверен, что завтра все пользователи сообщества получат в личку и в почтовый ящик множество сообщений.
Уважаемые авторы ЛС. Примите срочные меры.

Мобильная версия

С недавнего времени заметил, что сайты с подключенным мобильным шаблоном, отображают его по дефолту на всех десктопных браузерах (но можно переключиться по ссылке в футере).

Для воспроизведения нужно почистить куки браузера.

Не может нормально поставиться движок ошибки и глюки

Здравствуйте! Создаю вторую тему, т.к. думал, что вся проблема только в одном изначально (войти под своим логином на сайт), а оказывается — вообще все не работает.

Установка последней версии ls проходит без проблем в целом (только нужно на англ переключить установщик, а то кракозябры пишет), но после установки ни войти в свой админский логин, ни зарегистрировать нового пользователя — пишет, что страница не создана site.domain/registration/
На фтп соответственно тоже нет такой директории.
Вот скриншот настройки php функций на хостинге (NIC — на нем сайт стоит)


Права на tmp папку 755

Подскажите плиз, а то уже вторые сутки мозг себе насилую…

После установки не могу войти пользователем

Здравствуйте! Решил сменить свой движок сайта на LiveStreet, приобрел крутой шаблон, но тут на тебе!
После установки (конечно же самой последней версии с этого сайта), ввода всех данных — почему-то не могу зайти под логином админа, который указывал. В базе он есть, а когда ввожу данные, и нажимаю кнопку «Войти» — просто висит на загрузке, и все, никаких дальнейших шагов.
Располагаюсь на NIC, может какие-то дополнительно модули отключить/включить нужно? Подскажите пожалуйста, кто сталкивался.

Cut-тег разрывает пост в середине списка , как исправить?

Где можно пронаблюдать ошибку:
Хттп://imaginaria.ru/Trollfjorden/trollfjorden-index.html

Отчеты, южная партия

    Троллячьи фьорды — расшифровки Живого Дневника — обновляемая статья;
    №1, Витязь в ежовой шкуре
    <li >№2, Дварфы в тумане

№3. Ёлки, палки и собаки№4. Кто с бревном к нам придёт, тот от бревна и погибнет.№5. Посеял тотем – выросли дварфы!
Наши герои
Перловочка — обновляемая статья.


Долго и безуспешно боролся со странным тегом , разрывающим список… потом глянул в файрбаг и понял — это не я идиот, это движок косячит:



У меня сложилось впечатление, что позицию от-cut-ивания текста в топике движок рассчитывает по числу всех символов в сообщении, включая теги (атрибуты итд).

То есть ему ничего не стоит вставить разрыв текста «под кат» посреди тега или атрибута. Что собственно и произошло:

<ul><li><a href="...." rel="nofollow">Троллячьи фьорды — расшифровки Живого Дневника</a> — обновляемая статья;</li><li><a href="..." rel="nofollow">№1, Витязь в ежовой шкуре</a></li>


<li <a name="cut" rel="nofollow"></a> ><a href="..." rel="nofollow">№2, Дварфы в тумане</a><strong></ul>


</strong>№3. Ёлки, палки и собаки№4. Кто с бревном к нам придёт, тот от бревна и погибнет.№5. Посеял тотем – выросли дварфы!


Для удобства восприятия я разделил код на три места, проблемное второе.

Вопрос: кто виноват и главное, что делать?

P.S.
В топике должно быть больше ссылок на проблему, но ваш движок посылает меня нафиг с аргументацией «Ошибка: Спам защита! Вам нельзя писать топики с активными ссылками. „

Не пора ли переводить DB на utf8mb4?

Собстевнно, сабж.

UPD.
Одна из причин — при создании плагина столкнулся с проблемой сохранения emoji объектов, присутстующих в некотором контенте.
Вторая причина — невозможность сохранения тех же emoji самой нативной LS в текстовых полях, таких как: комментарии, текст топика, названия тегов и т.п.

Например, при создании комменатрия с вставленным символом emoji — после сохранения комментарий будет отображаться пустым.