instantsoft / icms2

Self-hosted Site Management System
https://instantcms.ru
GNU General Public License v2.0
295 stars 120 forks source link

Предложение: разрешить загрузку автатара при регистрации. #1188

Open Risgit opened 4 years ago

Risgit commented 4 years ago

Всю плешь уже проели этими аватарами при регистрации. Может на самом деле разрешить загрузку аватара именно при регистрации? То есть

if (!$this->cms_user->is_logged &&  cmsCore::getInstance()->uri_params[0] != 'avatar') {
            return $this->cms_template->renderJSON(array(
                'success' => false,
                'error'   => 'auth error'
            ));
        }

А потом, по завершении регистрации перемещать аватары в папку пользователя: То есть, к примеру, id нового юзера 2345. Генерим папку /upload/023/u2345 и перемещаем /upload/000/u0/5/c/f9bbf6db.jpg , который сформировался при загрузке от гостя в /upload/023/u2345/5/c/f9bbf6db.jpg. А папку /upload/000/u0 можно очищать по расписанию.

Вот такой хук нормально переносит файлы в свежесозданные папки нового юзера:

<?php

class onAuthUserRegistered extends cmsAction {

    public function run($user){

    $user_path = sprintf('%03d', intval($user['id']/100)).'/u'.$user['id'];

    $upload_path = cmsConfig::get('upload_path');

        foreach ($user['avatar'] as $key => $ava){

        $user_avatar = str_replace('000/u0', $user_path, $ava);

        mkdir($upload_path.dirname($user_avatar), 0777, true);

        rename($upload_path.$ava, $upload_path.$user_avatar);

        $user['avatar'][$key] = $user_avatar;

        }

        $this->model_users->updateUser($user['id'], $user);

        return $user;

}

}
vlad7090 commented 1 year ago

да, было бы отлично. Также аватарку желательно давать обрезать как в ВК, так как иначе грузят несмотря на размеры файлы по 10 мб.