Сабж. Домен и хостинг предлагаю так и оставить у сосича, что это не было каким-то перетягиванием аудитории и т.д. Предлагаю поднять его на субдомене, если вам понравится, дальше разговор к сосичу, если нет, то ладно, но хотел бы, чтобы вы попробовали.

Скриншот: https://imgur.com/a/avU1sv2

Что реализовал:

  1. Имена участников хешируются (8 символов из sha-1). Вы конечно быстро поймете кто есть кто, но в целом я не знаю, как объяснить эту фичу правильно. Это такая некоторая защита вас друг от друга, тут некоторые любят (особенно это остро ощущается на ЛОРе) обсирать по личным обидам, а не по контексту сообщения.

  2. Управление досками (подобно как здесь tdg, community, club)

  3. Приватность досок (подобно как здесь клуб)

  4. Регистрация по инвайтам (чтобы это было для своих, как тут)

  5. Треды и ответы в них (есть тред и ответы, не ветки, как здесь)

  6. Возможность удалять посты и редактировать их.

  7. Базовая разметка (курсив, жирный, цитирование, блок кода)

  8. Ссылки на соообщения вида >>123

  9. Предпросмотр при наведнении на такие ссылки

  10. Под постом на который сослались выводятся все такие сообщение, также с предпросмотром.

  11. Вордфильтр (на случай вайпа, например, можно банить и добавлять слова в ворд-фильтр)

Пока протестировал как смог, вроде минимально готово.

Чего нет:

  1. Аватарок (не нужно, детский сад), это часть пункта 0.
  2. Вставки всяких картинок, телеграмов и всего такого. Изначально думал взять полностью концепт имиджборды, но по сути картинку можно вставить обычной ссылкой, не вижу проблемы, как и ютуб, как и телегу. Но если все очень сильно скажут, что это нужно, то я сделаю.
  3. Нет какой-то страницы профиля, рейтинга, звезд, статистики пользователя и все такое. В целом это даже на ЛОРе неактуально, здесь темболее (у всех миллион звезд).

Что есть, но иначе:

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

То до:

  1. Ну вот это с новостями доделать
  2. Сделать возможность выбора способа просмотра (как на имиджбордах / как на форумах), пока только первое, но второе сделать нетрудно, просто хочу сделать это как настройку у пользователя.

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

  • Anoxemian
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Этот код берет строковую переменную, кастует ее к int, после чего конкатенирует ее к строке, кастуя ее обратно к строке. Это шизофрения чистейшая. Если уж работать трактористом, то вот чистый код:

    $user = $db->querySingle("SELECT * FROM users WHERE id = {$_SESSION['user_id']}");
    

    И да, так делать не стоит уже по соображениям безопасности. Для этого у каждой dsl библиотеки есть соответствующий api в виде bind/prepare с проверкой на инъекции.

    • Anoxemian
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Ну и там по простыне такого много, при этом есть и правильное использование, видно, что не человек писал:

      $ip = $_GET['ip'];
      $db->exec("DELETE FROM bans WHERE ip = '" . SQLite3::escapeString($ip) . "'");
      

      Вместо:

      // prepare/bindValue _уже_ включает SQLite3::escapeString
      // Зачем лишнее выделение памяти и ненужное копирование $ip?
      
      $stmt = $db->prepare("DELETE FROM bans WHERE ip = :ip");
      $stmt->bindValue(":ip", $_GET['ip'], SQLITE3_TEXT);
      $res = $stmt->execute();
      
      • Anoxemian
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago
        $parentIdDefault = isset($_GET['thread']) ? intval($_GET['thread']) : '';
        

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

        Какую нейронку насиловал?

        • Anoxemian
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago
          function getReplies($db, $parentId, $limit = 3) {
          

          Ты уж определись, $db, начиная с 22 строки имеет глобальную видимость.

        • Anoxemian
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Квантование никак не срастается, теперь еще и булево:

          $editId = isset($_GET['editmsg']) ? intval($_GET['editmsg']) : null;
          
          • Anoxemian
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago
            if ($parentCheck && $parentCheck != 0) {
            

            Ну это уже, видимо, автор дунул. Нейронка не может выдать такое совсем.