мультисайтинг на 2 сайта с модулем domain (т.е. БД общая).
таблица users_roles для каждого сайта своя для первого users_roles, для второго domain_2_users_roles
Цель присваивать на каждом сайте роль с rid = 4 новому пользователю сразу при создании учетной записи.
Создал свой модуль, назвал его startaddrole, в нем единственная функция, отрабатывающая хук user
<?php
function startaddrole_user($op, &$edit, &$account, $category = NULL){
if ($op=='insert'){
db_query( 'INSERT INTO users_roles (uid, rid) VALUES (%d, %d)', $account->uid, 4);
db_query( 'INSERT INTO domain_2_users_roles (uid, rid) VALUES (%d, %d)', $account->uid, 4);
}
}
?>
Первый запрос к БД отрабатывает, а второй нет (без всяких сообщений об ошибках).
Для проверки заменил $op=='insert' на $op=='login' - стабильно и без всяких проблем отрабатывают оба запроса! Ничего не понимаю, уже всю голову сломал. Кто нибудь может объяснить почему так? И самое главное как сделать правильно?
Комментарии
Неужели никто не подскажет?
db_set_active()
Смысл? БД одна. И обращаюсь я уже напрямую к нужным таблицам в базе. И почему при повешении этой функции на вход существующего пользователя в систему, она работает, а при добавлении нового пользователя отказывается?
Поскольку когда эта функция повешена на операцию login всё работает, а когда на insert то отрабатывает только запрос к "чужой" таблице, решил посмотреть чем эти операции отличаются.
http://api.drupal.ru/api/function/hook_user/6
«'login': Пользователь логинится. »
«'insert': Создается учетная запись пользователя. Модуль должен сохранить свои дополнительные данные в объект пользователя в базе данных и установить сохраненные значения из массива $edit в NULL. »
Вот этого: «и установить сохраненные значения из массива $edit в NULL.» я не понял, что в моем случае надо в NULL установить и как??? Может кто нибудь это понятно объяснить? Что то мне кажется, что именно в этом проблема.
Добавил в конец функции строку
<?php $edit['roles'] = NULL;?>
и всё заработало...
блин, теперь с удалением фигня
Задумывается и отваливается по таймауту...