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

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

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

Обсуждение первого хака с 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. Этот запрос надо сделать обязательно — без него хак работать не будет:

  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 можно безболезнено удалить, сделав запрос:
  1. ALTER TABLE `cms_user_profiles` DROP `allow_who`;
На всякий случай, если что то пошло не так, и после удаления поля все профили показывают 404 ошибку, вернуть поле можно запросом
  1. ALTER TABLE `cms_user_profiles` ADD `allow_who` VARCHAR(35) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'all' AFTER `imageurl`;

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

В админке администратор сайта найдет единственную регулировку (Админка->Компоненты->Профили пользователей, закладка Настройки профилей). Это группы, которым может быть показан профиль по умолчанию для каждого вновь регистрирующегося пользователя. Здесь указаны все группы, кроме незареганых гостей. При необходимости админ может изменить этот список.
Иллюстрация

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

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

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

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

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

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

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

Скачать

Удачи в сайтостроении!
+2
abasia abasia 4 года назад #
Спасибо за хак, будем тестировать.
+1
abasia abasia 4 года назад #
Ссылка на архив не активна, поправьте.
+1
abasia abasia 4 года назад #
Не могу скачать, ведёт на 404 страницу(((
+2
abasia abasia 4 года назад #
Скачал, спасибо.
+1
Странник Странник 4 года назад #
Вы правы, какой-то глюк. Переименовал архив, залил еще раз. Пробуйте.
+1
abasia abasia 4 года назад #
После хака, все профили стали вести на 404 страницу
+1
Странник Странник 4 года назад #
Вы sql- запрос сделали? Откройте таблицу cms_user_profiles и посмотрите, что с ней. Появились ли поля friends_view и groups_view?
+1
abasia abasia 4 года назад #
Установил сборку InstantCMS_Ver_1.10.7.006_from_10.01.2019 на Опенсервер, залил сверху хак с заменой, выполнил два запроса в базу, все ссылки на профили стали вести на 404, проверю на хосте.
+1
Странник Странник 4 года назад #
Может, второй запрос рано сделали? Где-то идет проверка на наличие поля allow_who. Верните поле на место, везде со значением all
+1
Странник Странник 4 года назад #
Проверка на наличие поля allow_who идет в ядерном классе core\classes\user.class.php, и модели компонента users.
Пока верните поле на место, везде со значением all.
Надо вникнуть, как это поле используется - и тогда либо вернем его на место, либо везде вычистим из движка.
+1
abasia abasia 4 года назад #
Если не делаю второго запроса в базу из прилагаемой к архиву инструкции
Код PHP:
  1. ALTER TABLE `cms_user_profiles` DROP `allow_who`;
то профили доступны и настройка приватности в них работает
+1
Странник Странник 4 года назад #
что и требовалось доказать.
оцените, пожалуйста, удобство интерфейса , все ли работает.
я в ближайшее время займусь выворчевыванием из движка этого поля.
+3
abasia abasia 4 года назад #
В общем, всё понятно и удобно, тестирую дальше.
+1
Странник Странник 4 года назад #
Коллеги, нашел и устранил причину, по которой возникала 404 ошибка после удаления поля allow_who из таблицы cms_user_profiles.
Причина заключалась в sql-запросе несуществующего поля в модели компонента users. Убрал поле из запроса - и все стало гладко.
Просьба всем заинтересованным скачать у меня архив заново.

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

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

В любом случае, все, что сейчас сделано, далеко ушло от оригинала, и обратной дороги не будет
+1
Андрей Андрей 4 года назад #
Кирилл, есть предложение, сделать отдельную вкладку "Приватность" и разместить все туда.
Вкладку саму разместить второй слева

Думаю, что надо перелопатить чутка структуру вкладок, сделать ее более логичной...
займусь и сделаю к 008 версии
+1
Андрей Андрей 4 года назад #
Скачать обновленный блок "Профили пользователей"

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

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.