Всем привет. Хочу перенести данные полей, которые собирает юлогин из соцсетей в кастомные поля профиля пользователя.
Понял, что это делается с помощью Rules, удалось сохранить поля с именем и фамилией (к слову сказать, токены из юлогин в обычное отекстовое поле выводятся без проблем).
Но есть такие поля, как например: Пол, Страна, Дата рождения. Все они имеют разные типы полей (булевое, термин словаря, дата), и при создании правила, Rules выдает мне ошибку: "Data selector account:ulogin:sex for parameter value is invalid."
Можно ли из токенов юлогин перенести данные в нетекстовое поле? Если да, то каким образом, как правильно написать правило?
Заранее спасибо.
Комментарии
Подписываюсь, такая же проблема.
Вот код
"LABEL" : "New User via uLogin",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "ulogin", "rules" ],
"ON" : [ "user_presave" ],
"IF" : [ { "ulogin_user_created_ulogin" : { "account" : [ "account" ] } } ],
"DO" : [
{ "data_set" : {"data" : [ "account:field-first-name" ],"value" : "[account:ulogin:first_name]"}},
{ "data_set" : {"data" : [ "account:field-last-name" ],"value" : "[account:ulogin:last_name]"}},
{ "data_set" : {"data" : [ "account:field-gender" ],"value" : "[account:ulogin:sex]"}},
{ "data_set" : {"data" : [ "account:field-birthday" ],"value" : "[account:ulogin:bdate]"}},
{ "data_set" : {"data" : [ "account:field-country" ], "value" : "[account:ulogin:country]"}},
{ "data_set" : {"data" : [ "account:field-city" ], "value" : "[account:ulogin:city]"}}
]
}
}
Работает частично, записывает только Text.
Дата - [account:ulogin:bdate]
Список - [account:ulogin:sex]не работают
UPD
Частично разобрался.
Список - [account:ulogin:sex] передает 1-2. Т.е. в значениях поля нужно указывать:
key|label,
1|Женский
2|Мужской
по-умолчанию drupal ставит
Женский|Женский
Мужской|Мужской
Да, все токены от uLogin текстовые.
Для передачи данных в нетекстовые поля (в общем случае) надо писать Rules action, которые бы переводили эти данные в нужные вам форматы.
Спасибо
AndyB
Я использую action с PHP кодом примерно такого вида: mymodule_copyfromsocial($account);
$account->is_new = FALSE;
$ul = $account->data['ulogin'];
$edit['field_name'] = array ('und' => array ( 0 => array ('value' => $ul['first_name' ].' '.$ul['last_name' ])));
if (isset($ul['sex']) && $ul['sex'] > 0) $edit['field_gender'] = array ('und' => array ( 0 => array ('value' => $ul['sex'] == 1 ? 1 : 0)));
if (isset($ul['bdate']) && $ul['bdate']) $edit['field_birthday'] = array ('und' => array ( 0 => array ('value' => date('Y-m-d',strtotime($ul['bdate'])))));
$from = array();
if (isset($ul['country']) && $ul['country']) $from[] = $ul['country'];
if (isset ($ul['city']) && $ul['city']) $from[] = $ul['city'];
if (count($from)) $edit['field_city'] = array ('und' => array ( 0 => array ('value' => implode(", ",$from))));
if (isset($ul['network']) && isset($ul['profile']) && $ul['network'] && $ul['profile'])
switch($ul['network']) {
case 'facebook':
$edit['field_acc_facebook'] = array ('und' => array ( 0 => array ('value' => str_replace("http://www.facebook.com/",'',$ul['profile']))));
break;
case 'vkontakte':
$edit['field_acc_vk'] = array ('und' => array ( 0 => array ('value' => str_replace("http://vk.com/",'',$ul['profile']))));
break;
case 'google':
// 'profile' => 'https://plus.google.com/u/0/123487611747537940778/',
case 'yandex':
// 'profile' => 'http://username.ya.ru/',
case 'twitter':
// 'profile' => 'http://twitter.com/username',
$edit['field_acc_twitter'] = array ('und' => array ( 0 => array ('value' => str_replace("http://twitter.com/",'',$ul['profile']))));
break;
case 'odnoklassniki':
$edit['field_acc_ok'] = array ('und' => array ( 0 => array ('value' => str_replace("http://odnoklassniki.ru/",'',$ul['profile']))));
break;
case 'mailru':
$edit['field_acc_mir'] = array ('und' => array ( 0 => array ('value' => str_replace("http://my.mail.ru/mail/",'',$ul['profile']))));
break;
default: break;
}
user_save($account,$edit);
}