Изменение аватара

Надо сделать, чтоб пользователям которые не установили аватар присвоился аватар. Код:
...
$sFile = $this->UploadAvatar($sFileTmp, $oUser);
$oUser->setProfileAvatar($sFile);
$this->Update($oUser);
...
В ответ получаю такую ошибку:
SQL Error: Column 'user_id' cannot be null at /home/public_html/common/classes/modules/mresource/mapper/Mresource.mapper.class.php line 72
---
Array
(
    [code] => 1048
    [message] => Column 'user_id' cannot be null
    [query] => 
            INSERT INTO prefix_mresource
            (
                date_add,
                user_id,
                link,
                type,
                path_url,
                path_file,
                hash_url,
                hash_file,
                storage,
                uuid
            )
            VALUES (
                '2015-03-03 12:57:23',
                NULL,
                0,
                1,
                '@uploads/images/00/00/01/avatar/0u5e1d206a-1cfab955-9d80a270.png',
                '@uploads/images/00/00/01/avatar/0u5e1d206a-1cfab955-9d80a270.png',
                'a9fc20b9c54f6cfe1ce5792753b2161b',
                'edecae965f2b8af2284cecdc4834a3ca',
                'file',
                '0u5e1d206a-1cfab955-9d80a270'
            )
            
    [context] => /home/public_html/common/classes/modules/mresource/mapper/Mresource.mapper.class.php line 72
)
Проблема в том, что только авторизованный пользователь и только себе можно изменить аватар? Подскажите.

Похожие статьи

  • Настраиваемый профиль пользователя в Experience Simple
    В некоторых шаблонах ls, разработчики заменяют ссылку на профиль по умолчанию, например с «информации» http://demo.altocms.ru/new/profile/admin/ на «Публикации» http://demo.altocms....
  • Права в версии 1.1.0-b2
    Если вообще дело в правах... Но факт в том, что «гости» не видят фотографий пользователей (в одноименной вкладке на странице профиля), которые размещены в статьях.
  • 3 виджета «Social Profile» — Социальный профиль (концепт)
    Концепт набора виджетов для профиля пользователя. Решает сразу несколько задач: — показывает на стартовой странице профиля возможности движка — больше информативности и социальности — быстрый доступ к фотоальбому...
  • Неверно сохраняет фото в профиле
    После загрузки фото в профиле и нажатия сохранить — фото сохраняется с неверным именем. Ссылается на такое изображение uploads/images/00/00/01/2014/09/02/0u726bd8f9-fc59a820-ac109060.jpg-222x.jpg На самом деле по...

18 комментариев

0
Если не устраивают дефолтные аватары, то гораздо проще заменить сами картинки дефолтных аватар в шаблоне. Или я не понял замысла?
0
Мне не нужна дефолтная. Мне надо любому пользователю без аватара присвоить любой аватар из набора.
+1
Уже писал раз десять. Исправьте, чтоб не отсылало уведомление на почту о том, что я ответил на комментарий!
0
0
Немного не о том речь, тут на сайте приходит уведомление тебе о твоем же комментарии, что конечно забавно =)
0
Не надо умничать.
0
Грубить тоже не стоит
0
Вижу метод UploadAvatar уже не используется. Он не добавляет картинку в ресурс.
Как по другому загрузить аватар?
0
Как обычно разобрался сам.
Зачем пишется движок если никому не нужен…
+1
Вообще-то, можно было и поделиться решением, а то ведь от других ответов ждем, а сами…

Но да ладно. Хоть версия движка и не называлась, с которой проблема возникла, но экстрасенсов вызывать не пришлось, я догадался. И поправил код, дабы решить проблему. Механизм работы с изображениями в 1.1 только-только доведен более-менее до нужного состояния. И да, для загрузки изображений (в т.ч. и аватар) используются иные (универсальные) методы. Но для обеспечения совместимости метод UploadAvatar() я поправил. Теперь это работает вообще одной строкой:
$this->UploadAvatar($sFileTmp, $oUser);
Т.е. профиль можно не обновлять. Это если вызывается из наследника модуля User. Либо универсальный вызов (откуда угодно):
E::ModuleUser()->UploadAvatar($sFileTmp, $oUser);
0
Можно было спросить о какой версии идёт речь.
Можно было сказать, что ты посмотришь код.
И т.д.
В итоге мне пришлось писать такие костыли:
public function UploadRandomImageResource($xStoredFile, $sTargetId, $sTargetType, $bMulti = FALSE) {

        // Если одиночная загрузка, то предыдущий файл затрем
        // Иначе просто добавляем еще один.
        if (!$bMulti) {
            E::ModuleMresource()->UnlinkFile($sTargetType, $sTargetId, E::UserId());
        }

        /** @var ModuleMresource_EntityMresource $oResource */
        $oResource = E::ModuleMresource()->GetMresourcesByUuid($xStoredFile->getUuid());
        if ($oResource) {
//            $oRel = Engine::GetEntity('Mresource_MresourceRel');
            $oResource->setUrl(E::ModuleMresource()->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $sTargetId)));
            $oResource->setType($sTargetType);
            $oResource->setUserId(E::UserId());
            $oResource = array($oResource);

            E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $sTargetId);

            return $oResource;
        }

        return FALSE;
    }

    public function UploadRandomImage($sTmpFile, $sTargetId, $sTarget)
    {
        if (!$this->oUserCurrent or $this->oUserCurrent->getId() != $sTargetId) {
            return false;
        }
        E::ModuleMresource()->UnlinkFile($sTarget, $sTargetId, E::UserId());
        $oImg = E::ModuleImg()->Read($sTmpFile);
        $sExtension = strtolower(pathinfo($sTmpFile, PATHINFO_EXTENSION));
        // Сохраняем фото во временный файл
        if ($sTmpFile = $oImg->Save(F::File_UploadUniqname($sExtension))) {
            // Файл, куда будет записано фото
            $sPhoto = E::ModuleUploader()->Uniqname(E::ModuleUploader()->GetUploadDir($sTarget, $sTargetId), $sExtension);
            // Окончательная запись файла только через модуль Uploader
            if ($xStoredFile = E::ModuleUploader()->Store($sTmpFile, $sPhoto)) {
                if (is_object($xStoredFile)) {
                    $this->UploadRandomImageResource($xStoredFile, $sTargetId, $sTarget);
                    $sFile = $xStoredFile->GetUrl();
                } else {
                    $sFile = $xStoredFile->GetUrl();
                }
                return $sFile;
            }
        }
        return false;
    }

Теперь UploadAvatar работает корректно?
Что насчёт UploadPhoto?
0
Сейчас должны работать и UploadAvatar(), и UploadPhoto()
0
Проверка методом:
$this->hasAvatar();
$this->hasPhoto();
?
0
Сколько должно пройти времени или сколько раз надо написать, чтоб получить ответ на вопрос?!
+2
Да, халявная служба поддержки совсем от рук отбилась… Накажем, разберемся, поувольняем всех нафиг.

А какие проблемы? Что-то не работает? Что именно?
0
Наличие аватара и фото проверять методом:
$this->hasAvatar();
$this->hasPhoto();
?
0
Посмотрел на тестовом сайте. Да, данные методы отрабатывают корректно. А проблема то в чем?
0
Проблемы нет. Просто убедиться, что эти методы актуальны и меняться (пока) не будут.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.