Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

0 Пользователей и 1 Гость просматривают эту тему.
  • 18 Ответов
  • 2651 Просмотров
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Коллеги, доброго времени суток всем!

Потихоньку делаю своё расширение и встаёт такой вопрос:
Возможно ли на уровне PHP (допустим, системным плагином) задать гостю (и авторизованному пользователю) группу пользователей?
Уровень доступа?


То есть, если, к примеру, выполняется нужное мне условие (допустим время суток, геолокация, хост и т.д.) то всем гостям и авторизованным, для которых выполняется условие, добавить либо группу (в которой они якобы состоят), либо сразу уровень доступа.
Чтобы им, например, стал доступен материал с нужным уровнем доступа.

Как я понял, в этом разделе форума - в основном опытные вебмастера и разработчики.
Буду очень благодарен за ответы и советы!
Возможно, будет интересно: Интеграция с Ozon
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Не понял, что значит задать группу. Может переназначить, перенести в другую группу ?
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Я имел в виду: временно установить этому посетителю группу именно для данной загрузки страницы.
Не меняя настройки этого пользователя.

Сейчас понимаю, что наверно это вопрос из серии небезобидных и небезопасных, если кто-то воспользуется не из благих намерений.
Возможно, будет интересно: Интеграция с Ozon
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Я правильно понимаю, что требуется организовать в собственном расширении проверку для определенной группы пользователей некоторого условия для отображения контента.
Допустим группа "Гости" с 8:00 до 12:00 может видеть запись, а в остальное время - нет.
Я правильно понимаю логику вашей задумки?
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Я правильно понимаю логику вашей задумки?
Да, но точнее так: группа «7:00 -8:00» присваивается всем гостям и пользователям с 7 до 8 часов.
И им становятся доступны материалы/пункты меню/модули с уровнем доступа «Для тех, кто с 7 до 8»

Это пример по времени. На самом деле моя конкретная задумка связана не только с условием времени.
Возможно, будет интересно: Интеграция с Ozon
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Одно из основных назначений - в зависимости от хоста (домена/поддомена) дать доступ к материалам/модулям/пунктам меню
Возможно, будет интересно: Интеграция с Ozon
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Ну тогда не ясно в чем заключается проблема.  Группу назначать/менять не нужно, достаточно определиться каким группам - какие временные рамки доступны. Получаешь сведения о группе и работаешь с ней:
Код
$user = JFactory::getUser();
$groups = $user->groups;
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Ну тогда не ясно в чем заключается проблема.  Группу назначать/менять не нужно, достаточно определиться каким группам - какие временные рамки доступны. Получаешь сведения о группе и работаешь с ней
Получил сведения о группе, и? Это будет группа по умолчанию для гостей из настроек com_users.
А дальше что?

Не уловил мысль.
Возможно, будет интересно: Интеграция с Ozon
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Одно из основных назначений - в зависимости от хоста (домена/поддомена) дать доступ к материалам/модулям/пунктам меню
Если это касается не своего компонента, а стандартных, то тут нужно писать плагин. Короче тут я ничего не подскажу. Я думал все ограничения будут внутри своего компонента.
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Получил сведения о группе, и? Это будет группа по умолчанию для гостей из настроек com_users.
А дальше что?

Не уловил мысль.
Ну все как всегда. Написать класс с проверками. Как пример такой каркас
Код
class JUProtect //
{
private function time_protect() //проверка времени
{

}
private function geo_protect() // проверка геоданных
{

}

public function user_protect($ugroup) // входная переменная
{
//основной код проверок для каждой группы пользователей отдельно

result $protect; // ну и присвоить допустим булево значение, есть / нет доступа.
}
}
P.S. Вообще в теории это можно встроить прямо в шаблон и проводить проверки перед выводом позиции, сделать две позиции дублера, одна выводится когда есть доступ, другая когда нет. Но это костыль.
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Так, ну в принципе, со своей задачкой я разобрался )
Но пока что это хак ядра, что не гуд, конечно.
Может, кто предложит что поинтересней.

Тем не менее, уже и это решение, открывает совершенно другие возможности Joomla, прямо новые горизонты!
Например?..
У меня есть идеи, а у вас?  ;)

На уровне плагина, похоже, не получится это сделать, т.к. права посетителю в ходе генерации страницы задаются раньше, чем подгружаются плагины, по крайней мере я сравнивал с системным плагином на событие onAfterInitialise.
Группы задаются значительно раньше - в методе getGroupsByUser класса Access из /libraries/src/Access/Access.php
(Joomla 3.9)
Вот тут можно вставить посетителю (и гостю, и юзеру - как и хотел) дополнительные группы в зависимости от нужного условия.

Поделюсь, я, например, сделал так:
В указанном php файле перед закрытием метода вместо
Код
return self::$groupsByUser[$storeId];
вставил что-то типо:
Код
$arr = self::$groupsByUser[$storeId];
if (условие) {
  $arr[] = 10; // добавляем к массиву нужную группу
}
return $arr;
« Последнее редактирование: 16.12.2019, 08:20:07 от rsn »
Возможно, будет интересно: Интеграция с Ozon
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Хак ядра - нехорошо, лучше сделать плагин в связке с кроном, который присваивает юзеру временную группу в начале времени допуска и удаляет ее в конце.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
robert,
согласен с Вами. Сам хотел бы найти решение без хака.
Пока не получилось.

Юзеру (авторизованному) - пожалуй, да, есть вариант. Примерно так:
Код
$user = JFactory::getUser();
$user->groups = array(9, 11);
$user->save();
Конечно же, перед началом данной темы, всё это я перепробовал.

Но: после такого присвоения группы плагином новые права вступят в силу только уже при следующей загрузке страницы. А в этот раз не сработает.
Это не то, что нужно, совсем не то.

Кроме того, это работает только для юзера.
Для гостя, без id, это не работает.
А нужно, чтобы работало сразу и для всех!

Если Вы подразумевали какой-то другой способ, можете конкретизировать?
Возможно, будет интересно: Интеграция с Ozon
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Но: после такого присвоения группы плагином новые права вступят в силу только уже при следующей загрузке страницы.
Если сделаете
Код
$user->clearAccessRights();
, то вступят сразу.
Для гостя, без id, это не работает.
А нужно, чтобы работало сразу и для всех!
Тогда проще всего в плагине переопределять класс User и делать там нужные манипуляции, в этом случае даже не придется переписывать данные юзера в БД.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Набросал плагинчик, можете форкнуть и добавить свои условия.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Набросал плагинчик, можете форкнуть и добавить свои условия.
$instance же вроде JObject наследует? а у него ж есть метод set, которым можно приватное свойство установить. или я чего то недопонял?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
$instance же вроде JObject наследует?
Ага, точно ^-^.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Набросал плагинчик, можете форкнуть и добавить свои условия.
robert, большое спасибо!
Форкнуть - пока воздержусь, так как не всё ясно понимаю в Вашем коде, не так силён в PHP пока что (работаю над этим).
Зато увидел у Вас главное, что для меня было под вопросом:
Код
$user->set('_authLevels', $levels);
Ещё раз благодарю!
Возможно, будет интересно: Интеграция с Ozon
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться