LINUX.ORG.RU

Написал кусок кода для Joomla, над которым ковырялся 16 часов

 , seblod,


0

1

Задача была такая: нужно чтобы поле email (для модуля Seblod) отправляло письмо администратору сайта, не суперпользователю а одному пользователю который является админом для сайта созданного на одной и той же Joomla.

То есть Joomla + Seblod, обещают нам многосатовость (на базе одного экземпляра).

Поскольку данного кода в инете я не нашел, его пришлось писать самому, и в итоге получилось такое (поругайте):

$CurrentSiteGroups = JCckDatabase::loadColumn( 'SELECT groups FROM #__cck_core_sites WHERE name = "'.$_SERVER["HTTP_HOST"].'"' );
                        
$AdminsGroups = JCckDatabase::loadColumn( 'SELECT id FROM #__usergroups WHERE id in (' . implode(',', $CurrentSiteGroups) . ') AND title LIKE "%Administrator%"');
                        
$AdminsId = JCckDatabase::loadColumn( 'SELECT user_id FROM #__user_usergroup_map WHERE group_id in (' . implode(',', $AdminsGroups) . ')');
                        
foreach($AdminsId as $AdminId){
    $SiteAdmin = JCck::getUser($AdminId);
    array_push($dest,$SiteAdmin->email);
}     

JFactory::getMailer()->sendMail( $from, $fromName, $dest, $subject, $body, $format, $cc, $bcc, $attach, $reply_to, $reply_to_name );

Данный код вставляется в файл .../plugins/cck_field/email/email.php

Сейчас думаю как развязать мою вставку от чужого модуля (чтобы не модифицировать «заводские» файлы)



Последнее исправление: Shulman (всего исправлений: 1)

Я уже очень давно не работал с джумлой и не помню, как оно там устроено, но неужели там нет никакй ORM чтобы не писать SQL запросы вручную?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

не писать SQL запросы вручную?

Да есть. Но я не стал с этим разбираться. Все дело в том, что в этом Seblod куча таких вот строк. В нативном коде используют псевдокод. Но SQL и так примитивен, его уже не упростить, и мне так проще воспринимать.

Shulman
() автор топика

WHERE name = "'.$_SERVER["HTTP_HOST"].'"

Ох лооол. Даже несмотря не то, что в заголовке Host далеко не произвольный текст, всё равно выглядит как потенциальная дыра.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

По идее, Joomla на ранних этапах поймет что такого домена у нее нет, и обрабатывать что попало не станет.

Shulman
() автор топика
Ответ на: комментарий от eternal_sorrow

Нет флага для админов. Костыль и есть.

Вообще я когда то ковырялся в Drupal, для Joomla сталкиваюсь с проблемой описания и примеров кода на каждом шагу.

Мне кажется что DRUPAL намного лучше документирован.

Google по вопросам о Joomla выдавал мне старицы блогеров рассказывающих какая она Mistery

Shulman
() автор топика
Ответ на: комментарий от Shulman

по идее это даже на этапе вебсервера должно обрабатываться, но ты как разработчик не должен полагаться на это. если не уверен 100% (а это значит что ты весь код знаешь как свои 5 пальцев), пиши безопасно. если уверен - всё равно пиши безопасно, лучше перестраховаться

eternal_sorrow ★★★★★
()

в итоге получилось такое (поругайте)

Ты связался с php cms, да еще и что-то под неё пишешь. О чём тут вообще можно рассуждать.

crutch_master ★★★★★
()
Ответ на: комментарий от Shulman

Очень зависит от конкретики.

Например ты можешь получить что-то типа:

Host: my-website.com;DROP ALL

Обработка всяких escape последовательностей в Joomla и твоей БД может сильно отличаться. В итоге Joomla сможет понять верное имя домена, но ты подставишь полную строку в SQL целиком.

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

P.S. Никогда не собирай SQL запросы ручками из строк! Должен быть способ передать запрос с плейсхолдерами и отдельно передать значения.

trex6 ★★★★★
()

над которым ковырялся 16 часов

Жесть.

Как-то помню в магазин зашёл пива с орешкми купить, там полтора «тюленя» лениво по нему ползают разглядывая товары.

Открыто две кассы и у каждой по одному покупателю.

Я подхожу к одной не спеша выкладываю на ленту. Ко второй подбегает какой-то «студент» с парой пива, достаёт нофелет, быстро набирает «своих» и нетерпеливо бормочет - тут такая очередь, нужно идти в другой магазин, бросает всё на ленте и убегает.

Ога. Я тоже слышал как-то от своего бывшего сотрудника - если не можешь разобраться за 2 часа, то этим не стоит заниматься.

HIS
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.