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

"Чудом" удалось залогиниться (проблема логина решена)

Друзья, товарисчи!

Уже недели 3-4 на этот сайт практически невозможно залогиниться.
Сейчас каким-то чудом залогинился через Yandex браузер. Пользуясь случаем, пишу этот топик.

Большая просьба ко всем — у кого есть проблемы с логином, отпишитесь pls в этом тикете

Upd (23.06.2021)

В Chrome v91 убрали флаг same-site-by-default-cookies
Но можно запустить Chrome с командной строки.
Для Win10:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-features=SameSiteByDefaultCookies
Для OSX:
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --disable-features=SameSiteByDefaultCookies

Upd (25.02.2021)
Вобщем выяснил наконец причину!

Дело в том, что начиная с 80-й версии chrome-based браузеров появилась защита от межсайстовой передачи куков (межсайтовых POST-запросов). А на LS сейчас именно такая система используется: passport.livestreetcms.com редиректит на livestreet.ru, передавая куки

«Вылечить» можно так:
1. Заходим по адресу chrome://flags/#same-site-by-default-cookies
2. Устанавливаем для свойства SameSite by default cookies значение Disabled
3. Перезапускаем браузер и все работает

Иными славами для файлов (в т.ч. куков) добавлено новое свойство: SameSite. У которого возможно 3 значения:
SameSite=Strict — куки передаются только в пределах одного сайта
SameSite=Lax (именно такое значение задается кукам по дефолту, если оно не задано явно) — куки передаются между сайтами только в пределах одного домена
SameSite=None — ограничения на передачу куков отсутствуют

Подробнее здесь и здесь.

Глобально решить проблему можно, задав для куков авторизации свойство SameSite со значением None (SameSite=None; Secure). И при этом необходимо чтобы и livestreet.ru также был на https.

Сделать это можно примерно так:
Для php < 7.3 (через установку заголовков):
header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');
Для php ≥ 7.3:
setcookie('cross-site-cookie', 'name', ['samesite' => 'None', 'secure' => true]);

Или поставить примерно такую либу.

Но это может сделать только Макс, если захочет ;)

Решение — кросс-пост с тикета на github

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

Как вы уже заметили на 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>


UPD: проблема возникла после обновления jQuery.form
После отката все заработало

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

Не уверен, что правильный блог выбрал для публикации… Если так то 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.
В топике должно быть больше ссылок на проблему, но ваш движок посылает меня нафиг с аргументацией «Ошибка: Спам защита! Вам нельзя писать топики с активными ссылками. „