С помощью модуля Profile2 я добавил в учетку пользователя поля Фамилия, Имя, Email и хотел бы их заполнить данными, полученными из соцсетей через модуль uLogin. Пытаюсь состряпать соотвествующее правило в Rules, благо что поля Profile2 с ним дружат - но ничего не выходит...
Что мне сделать, чтобы все получилось?
Комментарии
Нужно в рулесах по событию создания нового пользователя, добавить кондишен, проверяющий, что пользователь создан через uLogin, потом добавить экшен создания энтити профиля для этого пользователя, и полям этой созданной энтити присвоить значения из токенов uLogin'a...
После того, как всё заработает, нужно написать статью в документацию на drupal.org со ссылкой на скринкаст
Это намек на то, что на самом деле еще ни у кого?..
Не, это намёк на то, что не первый раз вижу этот вопрос. Ну или хотя бы картинку с настроенным правилом в этот топик киньте.
Для начала я создал только одно поле в Profile2 - field-born. В него пытаюсь впихнуть содержимое с датой рождения из поля uLogin
Пока это выглядит так:
И не работает... После регистрации нового пользователя имеем пустое поле в Main_profile и примерно такую ошибку:
Как я уже писал, после создания нового профиля пользователь видит пару ошибок:
Notice: Undefined index: profile_born in profile_save_profile() (line 266 of /var/www/vhosts/upkommunalnik.by/httpdocs/modules/profile/profile.module).
На первую из них есть решение, помог патч для Token
Со второй пока не ясно. Поле profile_born - это дополнительное поле, созданное в модуле Profile, еще до установки Profile2. В своих Rules я никак не трогаю старый модуль и что от него хочет uLogin - совершенно не понятно!
Убрал вторую ошибку, напомню это
Это сообщение появляется только если вот здесь: admin/config/people/profile, есть поля с пометкой "Отображать в форме регистрации пользователя". В моем случае - это поле profile_born. Снимаем флаг, сохраняем, и при регистрации больше никаких предупреждений красных.
Просьба разработчиков Profile и uLogin как-то утрясти эту деталь!
Теперь можно отлаживать работу с полями uLogin.
Тесты показали, что из Rules нет доступа к токенам uLogin!
Они отсутсвуют в списках для выбора данных при настройке действия, и возвращают пустые строки - если указать их напрямую, вот так:
[user:ulogin:network]
или так[user:ulogin:bdate]
Возможно я неправильно обращаюсь к этим токенам, или чего-то не хватает, чтобы получить их. Никто не подскажет? Какой-то грустный монолог в этой ветке получается...
Ок, для танкистов, которые не способны сами сделать вот это:
работающий пример:
"LABEL" : "Update user info after creation through uLogin",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "ulogin", "rules" ],
"ON" : [ "user_insert" ],
"IF" : [ { "ulogin_user_created_ulogin" : { "account" : [ "account" ] } } ],
"DO" : [
{ "entity_create" : {
"USING" : {
"type" : "profile2",
"param_type" : "main",
"param_user" : [ "account" ]
},
"PROVIDE" : { "entity_created" : { "entity_created" : "Created entity" } }
}
},
{ "data_set" : {
"data" : [ "entity-created:field-name" ],
"value" : "[account:ulogin:first_name] [account:ulogin:last_name]"
}
}
]
}
}
Модуль Profile мёртв, если хотите - можете сами утрясать эту деталь с разработчиками модуля Profile.
И чего злимся? Мертв, так мертв. Сами просили, подробней обо всем писать, чтобы подобных проблем тут не возникало. Я просто ищу помощи в решении рабочих вопросов, и мне очень нелегко даётся интеграция uLogin - сказывается недостаток опыта и знаний. Но я его хочу, и продолжаю разбираться. Это плохо? Думаю, очень неплохо. Скорей бы еще...
Констатация фактов не является проявлением моей злости
Я бы еще долго копал. Очень долго. Плохо понимаю суть этих "энтити", надо будет где-то чего-то почитать. Желательно на русском.
Почему мне казалось, что раз профиль уже создан, то вызов экшен на создание еще чего-то там понаделает чего-то не того - дубликат профиля сотворит, или вообще чего неудобоваримое, а тут вот оно как! Видимо это больше виртуальная сущность, надстройка "над", через которую можно провести ниточки к реальным объектам.
А может все проще, и профиль на этом этапе еще не создан... А Rules вклинивается, создает, и данные втыкивает.
Всем утра! Оказывается, сущности - новая фишка Drupal 7, и почитать есть что, и на русском, и даже на Drupal.Org!
После краткого ликбеза в этой области и анализа примера от duozersk вижу, что мое предположение про некую "виртуальную сущность" гораздо ближе к истине, а про "вклинивание" - полный бред. Мы создаём сущность, которая объединяет в себе нужный профиль из Profile2 с полями пользователя, зарегистрированного через uLogin. И получается, что внутри этой сущности можно свободно иметь токены и Profile2 и uLogin. Как-то так... Поправьте, если неправ!
Для тех из танкистов, которые еще и в каске, советую использовать "Import Rule" для загрузки подобных примеров в свои правила. Это такой пункт меню на странице Rules.
Также нужно переписать для своих полей вот этот участок кода:
"data" : [ "entity-created:field-name" ],
"value" : "[account:ulogin:first_name] [account:ulogin:last_name]"
}
Но он мне понравился тем, что показывает как объединить в одном поле профиля сразу два токена из uLogin. Очень полезная информация на будущее.
Все переделал, проверил - действительно на 100% рабочий пример. Андрей, спасибо! В первую очередь за модуль, а за помощь - отдельная благодарность! Drupal реально правит вебом, особенно когда умеешь править Drupal...
Уже позже я попал в https://drupal.org/node/1646004. Там аналогичные вопросы, есть и рабочие варианты.
Ребят. По аналогии с данной темой реализовал правило, при помощи которого происходит автообновление полей Profile после заполнения формы Webform. Webform в свою очередь берёт токенами данные из профиля, если они есть. Получилось цикличное использование данных с перезаписью в профиле (если произошли какие то изменения).
Код правила:
"LABEL" : "\u0410\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u0437\u0430\u044f\u0432\u043a\u0438",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules" ],
"ON" : { "webform_rules_submit" : [] },
"DO" : [
{ "data_set" : { "data" : [ "user:field-nick" ], "value" : "[data:nick-value]" } },
{ "data_set" : { "data" : [ "user:field-name" ], "value" : "[data:name-value]" } },
{ "data_set" : { "data" : [ "user:field-surname" ], "value" : "[data:surname-value]" } },
{ "data_set" : { "data" : [ "user:field-phone" ], "value" : "[data:phone-value]" } },
{ "data_set" : { "data" : [ "user:field-vk" ], "value" : "[data:vk-value]" } },
{ "data_set" : { "data" : [ "user:field-icq" ], "value" : "[data:icq-value]" } },
{ "data_set" : { "data" : [ "user:field-skype" ], "value" : "[data:skype-value]" } }
]
}
}
Всё замечательно работает, но обнаружился серьезный косяк. После отправки формы поле в профиль записывается с пробелом в начале:
" данные_поля"
Чревато это последствиями... после десяти отправленных форм я имею уже десять пробелов перед данными в профиле. Во первых не красиво, во вторых когда длинна поля заканчивается (ограничение в 255 символов) начинают вылетать ошибки, что невозможно записать данные в БД.
До запуска проекта осталось всего ничего. Если кто может помочь - буду благодарен.
Drupal 7.24
Webform 7.x-4.0-beta1
Webform Rules 7.x-1.6
Rules 7.x-2.6
Проблема нашлась. Недодумка в модуле Webform Rules 7.x-1.6. Решилась патчем из поста:
https://drupal.org/comment/8268279#comment-8268279