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

1663
Приветствую

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

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

Продолжим

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

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

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

1. Нужно добавить в таблицу cms_user_profiles новую колонку
Код PHP:
  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.

а) Вместо
Код PHP:
  1. if (!$file_name || !file_exists(PATH.'/images/users/avatars/'.$file_name)){
Добавить
Код PHP:
  1. if (!$file_name){
б) Вместо
Код PHP:
  1.  
  2. if ($size == 'small'){
  3. return '/images/users/avatars/small/'.$file_name;
  4. } else {
  5. return '/images/users/avatars/'.$file_name;
  6. }
  7.  
Добавить
Код PHP:
  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
а) Вместо
Код PHP:
  1. $sql = "UPDATE cms_user_profiles SET imageurl = '{$file['filename']}' WHERE user_id = '$id' LIMIT 1";
Добавить
Код PHP:
  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.  
б) Вместо
Код PHP:
  1. $sql = "UPDATE cms_user_profiles SET imageurl = '$filename' WHERE user_id = '$id' LIMIT 1";
Добавить
Код PHP:
  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

Скачать
Перед заменой - обязательно сделать копии своих файлов. Для других версий инстанта можно руками поменять код в файлах.
Проблемы и решения: Версия 1.3 | Адаптивный шаблон Бангкок для InstantCMS 2.*
Комментарии (8)
PolarOne 18 мая 2014 в 09:28 0
Классно! +
А следующим шагом будут списки для модулей в админке? На каком поддомене показывать?) Хотя, наверное, это через позиции можно как-то попробовать...
SJen 18 мая 2014 в 10:20 +2
Для меня следующим шагом будут компоненты для 2.0))

Магазин себе уже обновил для двойки, на очереди "Проблемы и решения" - на сайте уже есть версия для двойки (доделываю)
Посмотреть можно тут. А потом регистрация и тд..
SE7EN 18 мая 2014 в 18:10 0
"Проблемы и решения" - для двойки очень ждёмс!!!
SJen 18 мая 2014 в 21:30 0
это будет готово скорей всего после официального видео "как делать компоненты под 2.*", пока весь кодинг вслепую и наощупь))
Шадринец 18 мая 2014 в 15:50 0
Спасибо Очень признателен.
Oleg 21 мая 2014 в 21:00 0
а как сделать статус пользователя, что бы он был онлайн! если он на другом сайте онлайн?
SJen 21 мая 2014 в 21:25 0
статус "онлайн" определяется по таблице 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));
и проверить что получится)
Endroid 14 июня 2014 в 13:00 0
Проверил на чистой установке- не работает. Единая авторизация в норме, а аватары никак.