Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#joomla #расширения

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Подскажите, каким образом при помощи open_basedir отделить сайты (директории доменов) друг от друга? Чтобы если один сайт оказался зараженным, вредонос не смог ничего прочитать или записать в директории других сайтов по соседству.

Вариант с прописыванием в .htaccess не подойдет, так как потенциальный вредонос легко сможет данный .htaccess переписать. Толковых примеров для файла php.ini не нашел, соответственно не понимаю, как сразу несколько десятков хостов отделить / разграничить / изолировать.

Сайты на VPS, т. е. доступ к конфигам у меня полный.
« Последнее редактирование: 22.04.2019, 14:56:58 от dm-krv »
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Если у вас Apache, то необходимо заменить Apache MPM-Prefork на Apache MPM-ITK - это можно сделать в ISP Manager, если используете его (на вкладке "Возможности" в разделе ВЕб-сервера). Либо переустановить его вручную. Лучше потренироваться на отдельном ВПС. Если взять связку нгинкс+пхп-фпм (апач в этом случае можно полностью выпилить), то там по умолчанию так все настроено. Далее надо под каждый сайт создавать своего пользователя и переносить сайты из общего каталога в каталоги этих пользователей. После перехода на apache-itc надо будет подправить имеющиеся конфиги. Если будете делать - вышлю более подробные инструкции (остались со времен апача).
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Не ISP - использую панель BrainyCP, стоить классическая связка LAMP, без nginx. Там и так можно отдельных пользователей делать, да только это убиться можно будет в процессе - слишком муторно и напоминает стрельбу по воробьям из орбитального лазера.

Поэтому и хочу хоть какую-то изоляцию через open_basedir попробовать сделать.
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Поэтому и хочу хоть какую-то изоляцию через open_basedir попробовать сделать.
Понятно. Отпишитесь, если найдете решение.
Может разные юзеры на каждый сайт и выглядит как перебор... Но это тоже подстраховка. У нас когда-то все сайты лежали у одного юзера. А потом вирус на локальной машине одного из разработчиков слил фтп-пароль и получил доступ сразу ко всем сайтам. Но и описанный вами способ заражения имел место )
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Нашел инструкция на зарубежных сайтах о том, как правильно применять open_basedir к настройкам хост.
Дописал директиву в настройки сайта:

<VirtualHost 188.127.249.225:80 >
ServerName rvp74.ru
ServerAlias http://www.rvp74.ru 
DocumentRoot /home/optima/sites/rvp74.ru

php_admin_value open_basedir "/home/optima/sites/rvp74.ru:."

<IFModule proxy_fcgi_module>
ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/sites/rvp74.ru%{reqenv:SCRIPT_NAME}"
<FilesMatch \.php$>
#SetHandler "proxy:unix:/var/run/php-fpm/php56w-optima.sock|fcgi://rvp74.ru/sites/rvp74.ru"
SetHandler "proxy:unix:/var/run/php-fpm/php56w-optima.sock|fcgi://localhost/"
</FilesMatch>
</IFModule>

<Directory "/home/optima/sites/rvp74.ru">

AllowOverride All
Require all granted

</Directory>
           
           
CustomLog /etc/httpd/vhost_logs/rvp74.ru_access combined
ErrorLog /etc/httpd/vhost_logs/rvp74.ru_error
DirectoryIndex index.php index.html index.htm

</VirtualHost>


Однако у меня после этого упал apache ругаясь на вписанную строку:

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2019-04-22 13:19:37 +05; 24ms ago
Docs: man:httpd.service(8)
Process: 8538 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 8538 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."

Apr 22 13:19:36 rvp74.ru systemd[1]: Starting The Apache HTTP Server...
Apr 22 13:19:37 rvp74.ru httpd[8538]: AH00526: Syntax error on line 6 of /etc/httpd/vhost.d/rvp74.ru.conf:
Apr 22 13:19:37 rvp74.ru httpd[8538]: Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration

Apr 22 13:19:37 rvp74.ru systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Apr 22 13:19:37 rvp74.ru systemd[1]: Failed to start The Apache HTTP Server.
Apr 22 13:19:37 rvp74.ru systemd[1]: Unit httpd.service entered failed state.
Apr 22 13:19:37 rvp74.ru systemd[1]: httpd.service failed.


Подскажите, куда копать. Почему php_admin_value не сработала?
« Последнее редактирование: 22.04.2019, 11:44:04 от dm-krv »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
потому что у вас php не как модуль апача, а как php-fpm. добавляйте это в конфигах php-fmp, а не апача.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
потому что у вас php не как модуль апача, а как php-fpm. добавляйте это в конфигах php-fmp, а не апача.

Нашел ровно один конфиг внутри каталога:
Код
/etc/php56w/php-fpm.d
Но ведь он применяется ко всем сайтам использующим эту версию php, а мне надо конфиги к каждого отдельному хосту. Нельзя ли здесь ничего сделать? Предопределить конфиг к конкретному виртуальному хосту?
« Последнее редактирование: 22.04.2019, 12:43:49 от dm-krv »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
вы не поняли. или я неправильно выразился :) у вас есть блок
Код
<IFModule proxy_fcgi_module>
...
вот в нем и добавляйте
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.ru:."
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
вы не поняли. или я неправильно выразился :) у вас есть блок
Код
<IFModule proxy_fcgi_module>
...
вот в нем и добавляйте
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.ru:."

Работет  :D

Для проверки использовал небольшой скрипт, который показывает содержимое каталога на уровень и выше и там же создает тестовый файл:
Код
<?php

$files = scandir('../');

foreach ($files as $file) {
    echo $file . "<br>";
}

$test = "Проверка 7";

file_put_contents('../test.txt', $test);

?>

И если до установки директивы он все показывал и тестовый файл успешно создавал, то после установки директивы, как отрезало - ничего не показывает и запись на уровень выше тоже не идет.

Dmitry_stas, огромное спасибо, от души) Прям реально помог и сильно.
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Для тех, кто зашел сюда полюбопытствовать, информирую, что для нормальной работы Joomla кроме open_basedir нужно еще две директивы рядом вписать, а именно (ниже примеры):
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.rf"
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp"
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "session.save_path=/home/optima/sites/rvp74.rf/tmp"

Выяснилось все экспериментально, методом тыка и гугления.

upload_tmp_dir - определяет каталог для временного хранения загруженного файла. Если указан параметр open_basedir, то php будет пытаться открыть стандартную папку /tmp, то есть попытается выйти за пределы разрешённой директории и в результате будет выдавать ошибку, если захотите обновить Joomla.

session.save_path - все аналогично, только это папка для хранения сессий php.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
или можно в Информации о PHP посмотреть куда upload_tmp_dir и session.save_path ссылаются, и добавить этот каталог в open_basedir
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
или можно в Информации о PHP посмотреть куда upload_tmp_dir и session.save_path ссылаются, и добавить этот каталог в open_basedir

Тоже вариант, только смысл сайтам давать доступ к временный файлам и сессиям друг-друга?

Еще хочу добавить напоследок. В интернетах также пишут, что для обеспечения большей безопасности можно запретить некоторые потенциально опасные функции. Директива:

Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "disable_functions=dl,shell_exec,exec,system,passthru,proc_open,proc_nice,socket_create,socket_open,proc_get_status,proc_close,proc_terminate,posix_mkfifo,popen"

Попробовал, вроде бы все основное в Joomle работает нормально, ничего не отвалилось. Хотя допускаю, что некоторые вещи могут перестать работать после включения этой директивы.

Собственно считаю на этом тему закрытой. Все работает и теперь могу вздохнуть чуть более спокойно)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
смысл сайтам давать доступ к временный файлам и сессиям друг-друга?
а они не будут (по крайней мере не должны, если php-fpm настроен верно) его иметь в любом случае. но можно конечно и так, как сделали вы, указать разные.

В интернетах также пишут, что для обеспечения большей безопасности можно запретить некоторые потенциально опасные функции
имхо точно также не имеет смысла. всего "потенциально опасного" вы не запретите, иначе не будет работать многое, поэтому имхо это просто запрет ради запрета. имхо достаточно того, что вы ограничили выполнение open_basedir
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Блин, опять проблемы. Почему то использование директивы:
Код
ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp"

Полностью отменяет open_basedir - он банально прекращает работу, что я наблюдаю через тестовый скрипт. Не знает никто, в чем может быть проблема? Может запись неправильная?
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Все, нашел корень проблемы. Правильная запись выглядит так:

ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/home/optima/sites/rvp74.rf:. \n upload_tmp_dir=/home/optima/sites/rvp74.rf/tmp \n session.save_path=/home/optima/sites/rvp74.rf/tmp"

Директивы все пишутся внутри кавычек и разделяются символьным переносом строк \n
Только в таком виде все работает.
« Последнее редактирование: 22.04.2019, 17:50:05 от dm-krv »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Добавить класс при условии JS?

Автор warlocksp

Ответов: 21
Просмотров: 2780
Последний ответ 26.02.2020, 11:07:53
от robert
Программное создание материалов в Joomla 3.8+ [ РЕШЕНО ]

Автор dm-krv

Ответов: 36
Просмотров: 3580
Последний ответ 12.12.2019, 21:06:08
от MDenis
Бесплатный звонок с сайта, через интернет [РЕШЕНО]

Автор dm-krv

Ответов: 8
Просмотров: 872
Последний ответ 03.04.2019, 09:43:32
от dm-krv
JQuery: как проигнорировать cors при парсинге? [РЕШЕНО]

Автор dm-krv

Ответов: 20
Просмотров: 3513
Последний ответ 17.01.2019, 20:11:58
от fsv
Скроллинг к элементу с определенным классом [РЕШЕНО]

Автор dm-krv

Ответов: 1
Просмотров: 2113
Последний ответ 05.11.2018, 08:51:39
от dm-krv