Хак #2 "Добавление настройки приватности профиля - показывать профиль только назначенным группам" для v. 1.10.7.006 от 10 января 2019 г. 1.X

359
Коллеги. Я уже публиковал запись с таким названием. Функционал того хака был точно таким же.
В чем же отличие? В том, что в первом хаке я старался сохранить код движка как можно ближе к коробочной версии. Однако, в процессе обкатки хака оказалось, что многие введенные мои регулировки дублируют или даже противоречат коробочным. Стало ясно, что без кардинального изменения движка не обойтись. Второй хак как раз и является таким кардинальным изменением.

Постановка задачи

Обсуждение первого хака с abasia выявило непонимание пользователями принципов регулировок. Многие регулировки дублировали или противоречили коробочным. Была поставлена задача сделать управление показом профиля как можно более понятным.

Часть регулировок пришлось "забрать" у админа и "отдать" пользователю. Теперь админ лишь назначает по умолчанию группы, которым можно показывать профиль. Каждый новый регистрирующийся получает эти группы выделенными в настройках своего профиля. Однако он всегда может изменить показ профиля группам так, как считает нужным. Следует пояснить, что даже если пользователь исключит админов из показа, профиль этого пользователя админам все равно будет показан.

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

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

Измененные файлы движка

Помимо компонента users пришлось копнуть и компонент registration. Это сделано для того, чтобы каждый вновь регающийся получал перечень групп по умолчанию, которые ему назначил админ. Кроме того, было затронуто ядро - класс user.class.php получил новый метод. Были переписаны все перечисленные модули. Принцип работы хака в модулях один и тот же: аватар пользователя скрывается, вместо него показывается картинка "нет аватара". Никнейм пользователя заменяется на логин (который и так можно увидеть в адресной строке браузера).
В целом код вычисления показа профиля группам получился проще и легче для понимания.

admin\components\users\backend.php
components\users\frontend.php
components\registration\frontend.php
components\blogs\frontend.php

languages\ru\admin\components\users.php
languages\ru\components\users.php

core\classes\user.class.php

modules\mod_respect\module.php
modules\mod_comments\module.php
modules\mod_lastreg\module.php
modules\mod_blogs\module.php
modules\mod_whoonline\module.php
modules\mod_actions\module.php
modules\mod_bestcontent\module.php
modules\mod_latest\module.php

templates\_default_\components\com_users_edit_profile.tpl
templates\_default_\components\com_users_not_allow.tpl
templates\_default_\components\com_registration.tpl
templates\_default_\modules\mod_respect.tpl
templates\_default_\modules\mod_comments.tpl
templates\_default_\modules\mod_lastreg.tpl
templates\_default_\modules\mod_blogs.tpl
templates\_default_\modules\mod_whoonline.tpl
templates\_default_\modules\mod_actions.tpl
templates\_default_\modules\mod_bestcontent.tpl
templates\_default_\modules\mod_latest.tpl

Изменение БД

В таблице cms_user_profiles добавлены два новых поля friends_view и groups_view. Этот запрос надо сделать обязательно - без него хак работать не будет:

Код SQL:
  1. ALTER TABLE `cms_user_profiles` ADD `friends_view` TINYINT(4) NOT NULL AFTER `imageurl`, ADD `groups_view` VARCHAR(400) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'admin, moderators, registered, editors' AFTER `friends_view`;
Кроме того, поле allow_who больше не используется во фронтенде компонента users, хотя проверки на наличие и содержание этого поля остались модели этого компонента и в ядерном классе core\classes\user.class.php. Огромное спасибо abasia за обнаружение этой проблемы.
Я нашел и обнаружил, в чем дело. Теперь поле allow_who из таблицы cms_user_profiles можно безболезнено удалить, сделав запрос:
Код SQL:
  1. ALTER TABLE `cms_user_profiles` DROP `allow_who`;
На всякий случай, если что то пошло не так, и после удаления поля все профили показывают 404 ошибку, вернуть поле можно запросом
Код SQL:
  1. ALTER TABLE `cms_user_profiles` ADD `allow_who` VARCHAR(35) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'all' AFTER `imageurl`;

Вид движка после установки хака

В админке администратор сайта найдет единственную регулировку (Админка->Компоненты->Профили пользователей, закладка Настройки профилей). Это группы, которым может быть показан профиль по умолчанию для каждого вновь регистрирующегося пользователя. Здесь указаны все группы, кроме незареганых гостей. При необходимости админ может изменить этот список.
Хак #2  \"Добавление настройки приватности профиля - показывать профиль только назначенным группам\" для v. 1.10.7.006 от 10 января 2019 г.

Каждый пользователь в настройках своего профиля (Мои настройки, закладка Приватность) увидит две настройки:
Хак #2  \"Добавление настройки приватности профиля - показывать профиль только назначенным группам\" для v. 1.10.7.006 от 10 января 2019 г.
На приведенном примере пользователь выбрал две группы - "редакторы" и "администраторы". Как видим, этот список отличается от того рекомендованного списка, который предлагает администратор. Поэтому профиль данного пользователя будет показываться только редакторам и админам.

Коробочная регулировка "Показать профиль всем" в данном хаке эквивалентна выбору всех групп.
Регулировка "Не показывать профиль никому" в данном хаке эквивалентна выбору для показа только администраторам (админы все равно ваш профиль увидят, даже если вы их исключите).

Что еще предстоит сделать на движке

Естественно, я не считаю, что сделал все, что нужно было сделать. Например:
1. Не все модули допилены, чтобы отражать регулировки скрытия/показа аватара и никнейма.
2. Компоненты Форум, Статьи и другие тоже требуют допиливания. Тут, как говорится, конь не валялся.

Я выложил эту версию хака для того, чтобы пользователи могли оценить удобство регулировок. Буду благодарен всем коллегам, если они мне покажут, какие еще компоненты и модули требуют доработки.

Как скачать хак

Как водится, из моего профиля даром, то есть бесплатно.

Скачать

Удачи в сайтостроении!
Хак "Принять правила сайта при регистрации" для v. 1.10.7.006 от 10 января 2019 г. | Модуль поиска по контенту сайта в зависимости от установленных пользователем куков
Комментарии (19)
abasia 28 апреля 2019 в 14:02 +1
Спасибо за хак, будем тестировать.
abasia 28 апреля 2019 в 14:02 0
Ссылка на архив не активна, поправьте.
abasia 28 апреля 2019 в 14:16 0
Не могу скачать, ведёт на 404 страницу(((
abasia 28 апреля 2019 в 14:17 +1
Скачал, спасибо.
Вы правы, какой-то глюк. Переименовал архив, залил еще раз. Пробуйте.
abasia 28 апреля 2019 в 15:35 0
После хака, все профили стали вести на 404 страницу
Вы sql- запрос сделали? Откройте таблицу cms_user_profiles и посмотрите, что с ней. Появились ли поля friends_view и groups_view?
abasia 29 апреля 2019 в 07:11 0
Установил сборку InstantCMS_Ver_1.10.7.006_from_10.01.2019 на Опенсервер, залил сверху хак с заменой, выполнил два запроса в базу, все ссылки на профили стали вести на 404, проверю на хосте.
Может, второй запрос рано сделали? Где-то идет проверка на наличие поля allow_who. Верните поле на место, везде со значением all
Проверка на наличие поля allow_who идет в ядерном классе core\classes\user.class.php, и модели компонента users.
Пока верните поле на место, везде со значением all.
Надо вникнуть, как это поле используется - и тогда либо вернем его на место, либо везде вычистим из движка.
abasia 29 апреля 2019 в 10:41 0
Если не делаю второго запроса в базу из прилагаемой к архиву инструкции
Код PHP:
  1. ALTER TABLE `cms_user_profiles` DROP `allow_who`;
то профили доступны и настройка приватности в них работает
что и требовалось доказать.
оцените, пожалуйста, удобство интерфейса , все ли работает.
я в ближайшее время займусь выворчевыванием из движка этого поля.
abasia 29 апреля 2019 в 12:54 +2
В общем, всё понятно и удобно, тестирую дальше.
Коллеги, нашел и устранил причину, по которой возникала 404 ошибка после удаления поля allow_who из таблицы cms_user_profiles.
Причина заключалась в sql-запросе несуществующего поля в модели компонента users. Убрал поле из запроса - и все стало гладко.
Просьба всем заинтересованным скачать у меня архив заново.

Еще поле allow_who используется в альбомах и фотографиях. Поэтому в текущем хаке возможно, альбомы и фотографии будут видеть все, в том числе незареганые. Ближайшие несколько дней займусь этим вопросом.

Удачи в программировании.
Андрей 1 мая 2019 в 10:19 +1
Кирилл, благодарю за разработки smile Ждем финального релиза хака!
Андрей, я подозреваю, что пора уже называть эту мою разработку форком, а не хаком. Слишком много несовместимого кода получилось.
Хотя код читается легче, чем в моем предыдущем хаке.
Думаю, коллеги - когда посмотрят код - оценят, что это: всего лишь еще хак или уже форк.
Надо обсуждать.
Андрей 1 мая 2019 в 11:13 0
Кирилл, да хоть горшком назови, суть то не в этом.
Код не может стоять на месте, и с каждым разом все будет проще и совершеннее...

В любом случае, все, что сейчас сделано, далеко ушло от оригинала, и обратной дороги не будет
Андрей 11 мая 2019 в 09:34 0
Кирилл, есть предложение, сделать отдельную вкладку "Приватность" и разместить все туда.
Вкладку саму разместить второй слева

Думаю, что надо перелопатить чутка структуру вкладок, сделать ее более логичной...
займусь и сделаю к 008 версии
Андрей 11 мая 2019 в 10:51 0
Скачать обновленный блок "Профили пользователей"

собственно, просто перезалить файлы...