Не совсем логично использовать Firstname, т.к. в большинстве случаев это имя и оно будет уже неуникальное и тогда логином станет как я и писал "Artem4e9d96b188b8f" (имя с уникальным идентификатором)
Я немного усовершенствовал код на основе аналогичного плагина для phpBB
if ($version->RELEASE != '1.5') { //для 1.6 и 1.7
if($this->pluginEnable){
if(!empty($json['nickname'])){
$nickname = $json['nickname'];
}
elseif(!empty($json['email']) && preg_match('/^(.+)\@/i', $json['email'], $emailnick)){ //получаем логин из почты
$nickname = $emailnick[1];
}
elseif($name != $this->id){ //пусть логин будет полным именем, но только если имени не присвоили id
$nickname = $name;
}
else{
$patterns = array( //получаем ник из identity
'([^\.]+)\.ya\.ru',
'openid\.mail\.ru\/[^\/]+\/([^\/?]+)',
'openid\.yandex\.ru\/([^\/?]+)',
'([^\.]+)\.myopenid\.com'
);
foreach ($patterns as $pattern) {
if (preg_match('/^https?\:\/\/'.$pattern.'/i', $this->profile->identity, $result)) {
$nickname = $result[1];
}
}
if(!empty($nickname)){
$nickname = $this->id; //в крайнем случае логином будет id
}
}
Если ник не передаётся, то плагин попробует получить ник из названия email-ла, если не получается, тогда присваивает нику полное имя, а если и его нет, то пробует получить логин из строки openid. И в крайнем уже случае присваивает логину ID провайдера.
Но у меня остался нерешенный вопрос, который бы сделал этот плагин идеальным для меня.
Вот в этой проверке:
$query = 'SELECT * FROM `#__users`';
$query .= ' WHERE `username` = ' . $db->Quote($nickname). ' LIMIT 1';
$db->setQuery((string) $query);
$db->query();
if ($db->getNumRows()) {
//Replace email with a fake name to avoid Joomla user conflict
$nickname = $nickname.uniqid();
}
Если такой ник уже есть в базе, то к нему дописывается уникальный идентификатор uniqid(), вот в этот момент и получается этот длинный логин "Artem4e9d96b188b8f"
В идеале, конечно, хотелось бы, чтобы ему прибавлялась единичка и снова проверялось и т.д.
Т.е. получались бы логины "Artem2", "Artem3" и т.д.
Пытаюсь как-то придумать, чтобы так сделать.