You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudreve/application/index/model/Avatar.php

146 lines
3.4 KiB

<?php
namespace app\index\model;
use think\Model;
use think\Db;
use \app\index\model\Option;
use \app\index\model\LocalAdapter;
class Avatar extends Model{
public $avatarObj;
public $errorMsg;
public $fileName;
public $avatarKey;
public $userData;
public $avatarType;
public function __construct($new=false,$obj){
$this->avatarObj = $obj;
if(!$new){
$userData = Db::name("users")->where('id',$obj)->find();
$this->userData = $userData;
if($userData["avatar"] == "default"){
$this->avatarType = "default";
}else{
$avatarPrarm = explode(".",$userData["avatar"]);
$this->avatarType = $avatarPrarm[0];
$this->fileName = ltrim(ltrim($userData["avatar"],"g."),"f.");
}
}
}
public function SaveAvatar(){
$info = $this->avatarObj->validate(['size'=>2097152,'ext'=>'jpg,png,gif.bmp'])->rule('uniqid')->move(ROOT_PATH . 'public' . DS . 'avatars');
if($info){
$_path = ROOT_PATH.'public/avatars/'.$info->getSaveName();
$_img = new Image($_path);
$_img->thumb(200, 200);
$_img->output();
$_img = new Image($_path);
$_img->thumb(130, 130);
$_img->output("_130");
$_img = new Image($_path);
$_img->thumb(50, 50);
$_img->output("_50");
$this->fileName = $info->getSaveName();
return true;
}else{
$this->errorMsg=["result"=>"error","msg"=>$this->avatarObj->getError()];
return false;
}
}
public function bindUser($uid){
$this->avatarKey = "f.".$this->fileName;
Db::name("users")->where('id',$uid)->update(["avatar" => $this->avatarKey]);
}
public function Out($size){
switch ($this->avatarType) {
case 'f':
$this->outPutFile($size);
exit();
break;
case 'default':
$this->defaultAvatar($size);
exit();
break;
case 'g':
return $this->outGravatar($size);
break;
default:
# code...
break;
}
}
public function outPutFile($size){
switch ($size) {
case 's':
$siezSuffix = "_50";
break;
case 'm':
$siezSuffix = "_130";
break;
default:
$siezSuffix = "";
break;
}
$filePath = ROOT_PATH . 'public/avatars/' . $this->fileName.$siezSuffix;
if(file_exists($filePath)){
ob_end_clean();
header('Content-Type: '.LocalAdapter::getMimetype($filePath));
$fileObj = fopen($filePath,"r");
while(!feof($fileObj)){
echo fread($fileObj,2097152);
}
}else{
$this->defaultAvatar($siezSuffix);
}
}
public function outGravatar($size){
switch ($size) {
case 's':
$siezSuffix = "50";
break;
case 'm':
$siezSuffix = "130";
break;
default:
$siezSuffix = "200";
break;
}
ob_end_clean();
$gravatarServer = Option::getValue("gravatar_server");
return $gravatarServer.$this->fileName."?d=mm&s=".$siezSuffix;
}
public function defaultAvatar($size){
switch ($size) {
case 's':
$siezSuffix = "_50";
break;
case 'm':
$siezSuffix = "_130";
break;
default:
$siezSuffix = "";
break;
}
ob_end_clean();
$filePath = ROOT_PATH . 'static/img/default.png' .$siezSuffix;
header('Content-Type: '.LocalAdapter::getMimetype($filePath));
$fileObj = fopen($filePath,"r");
while(!feof($fileObj)){
echo fread($fileObj,2097152);
}
}
public function setGravatar(){
$this->avatarKey="g.".md5($this->userData["user_email"]);
Db::name("users")->where('id',$this->userData["id"])->update(["avatar" => $this->avatarKey]);
}
}