uLogin. Токены и нетекстовые поля

Главные вкладки

Аватар пользователя Megajack Megajack 14 декабря 2012 в 0:58

Всем привет. Хочу перенести данные полей, которые собирает юлогин из соцсетей в кастомные поля профиля пользователя.
Понял, что это делается с помощью Rules, удалось сохранить поля с именем и фамилией (к слову сказать, токены из юлогин в обычное отекстовое поле выводятся без проблем).
Но есть такие поля, как например: Пол, Страна, Дата рождения. Все они имеют разные типы полей (булевое, термин словаря, дата), и при создании правила, Rules выдает мне ошибку: "Data selector account:ulogin:sex for parameter value is invalid."

Можно ли из токенов юлогин перенести данные в нетекстовое поле? Если да, то каким образом, как правильно написать правило?
Заранее спасибо.

Комментарии

Аватар пользователя creshez creshez 22 января 2013 в 11:29

Подписываюсь, такая же проблема.
Вот код

{ "rules_user_ulogin" : {
    "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 ставит
Женский|Женский
Мужской|Мужской

Аватар пользователя duozersk duozersk 22 января 2013 в 14:45

Да, все токены от uLogin текстовые.

Для передачи данных в нетекстовые поля (в общем случае) надо писать Rules action, которые бы переводили эти данные в нужные вам форматы.

Спасибо
AndyB

Аватар пользователя drakmor drakmor 28 января 2013 в 20:07

Я использую action с PHP кодом примерно такого вида: mymodule_copyfromsocial($account);

function 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);
}