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

websnap

  • Новичок
  • 5
  • 0 / 0
Здравствуйте

Подскажите пожалуйста как выполнить SQL запрос к базе данных которая подключена к Joomla 2.5.6 в плагине для события onUserAfterSave?
Я делаю так:
Код: php
$db = & JFactory::getDBO();
$query = "UPDATE #__user_usergroup_map SET group_id = 15 WHERE user_id = " . $userID;
$db->setQuery($query);
$db->query();

Этот запрос просто устанавливает в базе данных группу для пользователя который только регистрируется или редактирует свои данные.
Данный код срабатывает. Если после него дописать die, то выполнение скрипта оборвется и в таблице user_usergroup_map напротив ID редактируемого или добавляемого пользователя действительно будет значение 15.

Но вот если код не обрывать, то после сохранения данных о пользователе он относится к группе Registered у которой ID не 15.
Я так понял где-то после работы моего плагина происходит редактирование информации о группах пользователя.

В общем мне нужно иметь возможность с помощью плагина привязывать пользователей к группам когда они регистрируются или редактируют свой профиль. Как это можно сделать?

Спасибо!
*

Fedor Vlasenko

  • Живу я здесь
  • 3799
  • 709 / 7
  • Все начинается с Value
*

websnap

  • Новичок
  • 5
  • 0 / 0
Re: Выполнение sql запроса в плагине
« Ответ #2 : 16.01.2013, 15:00:08 »
Смотри  plugins/user/joomla/joomla.php значение $defaultUserGroup
Посмотрел, но признаться честно не понял как это мне может помочь)
Переменная $defaultUserGroup присутствует в функции protected function _getUser которая в свою очередь лишь формирует информацию о пользователе.
Также в этом плагине есть функция public function onUserAfterSave, но она лишь формирует и отправляет письмо зарегистрировавшемуся пользователю.

Я пробовал использовать в своем плагине такой код:
Код: php
$instance = JUser::getInstance($previousData["id"]);                    
jimport('joomla.application.component.helper');
$acl = JFactory::getACL();
$instance->set('groups', array($groupsArray));                   
$instance->save();

но он тоже не дал желаемого результата(
*

Fedor Vlasenko

  • Живу я здесь
  • 3799
  • 709 / 7
  • Все начинается с Value
Re: Выполнение sql запроса в плагине
« Ответ #3 : 16.01.2013, 15:07:52 »
Цитировать
Я пробовал использовать в своем плагине такой код
а стандартный? Про него забыл. Его то надо отключить, переписав нужные функции в своем плагине. У тебя получается два плагина обрабатывают регистрацию. Потому и выходит как ты писал выше. Еще ты можешь поигратся с порядком размещения плагинов в админке. То есть фактически задать порядок обработки
*

websnap

  • Новичок
  • 5
  • 0 / 0
Re: Выполнение sql запроса в плагине
« Ответ #4 : 16.01.2013, 16:20:36 »
Я отключил все плагины в User кроме своего и всё равно новый пользователь добавляется в группу Registered, а не в ту, которую я указываю. То есть после моих изменений данные пользователя еще где-то обрабатываются.
« Последнее редактирование: 16.01.2013, 16:27:44 от websnap »
*

Fedor Vlasenko

  • Живу я здесь
  • 3799
  • 709 / 7
  • Все начинается с Value
Re: Выполнение sql запроса в плагине
« Ответ #5 : 16.01.2013, 16:47:42 »
Должно быт как то так. И чего не создать группу пользователей. Дать им права какие нужно и сделать их авторизованными пр регистрации
Код: php-brief
$myUser = JFactory::getUser();
$myUser->set('usertype', 15);
*

websnap

  • Новичок
  • 5
  • 0 / 0
Re: Выполнение sql запроса в плагине
« Ответ #6 : 16.01.2013, 19:59:37 »
Проблема найдена. Оказывается виной всему Community Builder, который, неизвестно зачем, три раза инициирует сохранение данных о новом пользователе.
Мой плагин был рассчитан на то что данные о новом пользователе сохраняются один раз, после которого он прекращает свою работу. Вот и получалось, что после работы моего плагина данные снова редактировались.

Я ввел статик переменную в свой плагин:
Код: php
public static $saved = false;
public function onUserAfterSave($previousData, $isNew, $futureData, $error)
{
            if (!self::$saved = !self::$saved || !JFactory::getApplication()->isSite()) {
                return true;
             }
//Далее вызываю метод save
$curentUser = JFactory::getUser($previousData["id"]);
                    $curentUser->set('groups', $resultArray);
                    $curentUser->save(true);

Данные о новом пользователе, при работе плагина, сохраняются 6 раз, но лучше я ничего не придумал)))
« Последнее редактирование: 17.01.2013, 11:25:08 от websnap »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

выполнение php

Автор egyptus

Ответов: 1
Просмотров: 524
Последний ответ 30.01.2016, 21:37:25
от egyptus
Создание запроса к базе данных

Автор serrggeee

Ответов: 4
Просмотров: 556
Последний ответ 16.09.2015, 13:06:54
от Aleks.Denezh
Как найти выполнение команды или как заблокировать?

Автор svikt

Ответов: 6
Просмотров: 432
Последний ответ 12.05.2015, 17:07:41
от svikt
Фоновое выполнение

Автор motokraft

Ответов: 6
Просмотров: 395
Последний ответ 26.10.2014, 16:06:07
от zomby6888
После запроса сброса пароля пользователь деактивируется

Автор Maxum

Ответов: 1
Просмотров: 337
Последний ответ 04.05.2014, 03:02:27
от Maxum