Сквозная авторизация и единая база пользователей для 1.10.3 (часть 2, общие аватарки)

+14
2.37K
Приветствую

В прошлом посте Сквозная авторизация и единая база пользователей для 1.10.3. Я написал как вести общую таблицу пользователей и как сделать сквозную авторизацию.

Сейчас добавлю, как сделать так, чтобы поменяв аватар на одном сайте (поддомене) он корректно отображался на других (по просьбе Шадринец ). А не отображается он потому что прописаны относительные пути (/images/users/avatars) — по которым аватар открывается только на том сайте, на котором его закинули.

Продолжим

Кратное описание изменений

1. добавляем колонку в таблицу профилей для хранения домена, на котором пользователь закидывает аватар
2. В функции получения аватара используем этот домен для формирования пути до картинки
3. В функцию установки нового аватара добавляем запись информации о домене

Подробная инструкция

1. Нужно добавить в таблицу cms_user_profiles новую колонку
  1. ALTER TABLE `cms_user_profiles` ADD `imageurl_host` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
Таблица для всех сайтов одна — добавляем только в нее. ЕСЛИ префиск таблиц отличается, вставляем вместо "cms" свой.

2. Открыть файл \core\classes\user.class.php.
Найти в нем функцию getUserAvatarUrl.

а) Вместо
  1. if (!$file_name || !file_exists(PATH.'/images/users/avatars/'.$file_name)){
Добавить
  1. if (!$file_name){
б) Вместо
  1.  
  2. if ($size == 'small'){
  3. return '/images/users/avatars/small/'.$file_name;
  4. } else {
  5. return '/images/users/avatars/'.$file_name;
  6. }
  7.  
Добавить
  1.  
  2. $inDB=cmsDatabase::getInstance();
  3. $host = $inDB->get_field('cms_user_profiles', 'user_id='.$user_id, 'imageurl_host');
  4. if (!$host) {$host = 'http://'.$_SERVER['HTTP_HOST'].'/';}
  5. if ($size == 'small'){
  6. return $host.'/images/users/avatars/small/'.$file_name;
  7. } else {
  8. return $host.'/images/users/avatars/'.$file_name;
  9. }
  10.  
3. Открыть файл \components\users\frontend.php
а) Вместо
  1. $sql = "UPDATE cms_user_profiles SET imageurl = '{$file['filename']}' WHERE user_id = '$id' LIMIT 1";
Добавить
  1.  
  2. $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
  3. $sql = "UPDATE cms_user_profiles SET imageurl = '{$file['filename']}', imageurl_host='$host' WHERE user_id = '$id' LIMIT 1";
  4.  
б) Вместо
  1. $sql = "UPDATE cms_user_profiles SET imageurl = '$filename' WHERE user_id = '$id' LIMIT 1";
Добавить
  1.  
  2. $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
  3. $sql = "UPDATE cms_user_profiles SET imageurl = '$filename', imageurl_host='$host' WHERE user_id = '$id' LIMIT 1";
  4.  

Файлы для 1.10.3

Скачать
Перед заменой — обязательно сделать копии своих файлов. Для других версий инстанта можно руками поменять код в файлах.
0
PolarOne PolarOne 10 лет назад #
Классно! +
А следующим шагом будут списки для модулей в админке? На каком поддомене показывать?) Хотя, наверное, это через позиции можно как-то попробовать...
+2
SJen SJen 10 лет назад #
Для меня следующим шагом будут компоненты для 2.0))

Магазин себе уже обновил для двойки, на очереди "Проблемы и решения" - на сайте уже есть версия для двойки (доделываю)
Посмотреть можно тут. А потом регистрация и тд..
0
SE7EN SE7EN 10 лет назад #
"Проблемы и решения" - для двойки очень ждёмс!!!
0
SJen SJen 10 лет назад #
это будет готово скорей всего после официального видео "как делать компоненты под 2.*", пока весь кодинг вслепую и наощупь))
0
Шадринец Шадринец 10 лет назад #
Спасибо Очень признателен.
0
Oleg Oleg 10 лет назад #
а как сделать статус пользователя, что бы он был онлайн! если он на другом сайте онлайн?
0
SJen SJen 10 лет назад #
статус "онлайн" определяется по таблице cms_online
нужно обращаться всего к одной табличке, смотрим первую инструкцию и после строки

Код PHP:
  1. $sql = trim(str_replace($prefix.'_user',$this->users_prefix.'_user',$sql));
добавляем
Код PHP:
  1. $sql = trim(str_replace($prefix.'_online',$this->users_prefix.'_online',$sql));
и проверить что получится)
0
Endroid Endroid 10 лет назад #
Проверил на чистой установке- не работает. Единая авторизация в норме, а аватары никак.

Еще от автора

Обновление компонента "Мне нравится"
Приветствую. Закончил версию с исправлением ошибок и багов, всем пользователям обновление выслано на электронку.
Обновление компонента  "Каталог дополнений в админку"
Приветствую. Обновление самого популярного аддона из официального каталога дополнений.
Обновленный парсер Яндекс.Карт
Приветствую Изменения довольно значительны, поэтому имеет смысл оформить их отдельным постом.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.