Файл: core/classes/upload_photo.class.php
Строк: 97
<?php
/******************************************************************************/
// //
// InstantCMS v1.10 //
// http://www.instantcms.ru/ //
// //
// written by InstantCMS Team, 2007-2012 //
// produced by InstantSoft, (www.instantsoft.ru) //
// //
// LICENSED BY GNU/GPL v2 //
// //
/******************************************************************************/
class cmsUploadPhoto {
private static $instance;
public $upload_dir = ''; // директория загрузки
public $filename = ''; // имя файла
public $small_size_w = 96; // ширина миниатюры
public $small_size_h = ''; // высота миниатюры
public $medium_size_w = 480; // ширина среднего изображения
public $medium_size_h = ''; // высота среднего изображения
public $thumbsqr = true; // квадратное изображение, да по умолчанию
public $is_watermark = true; // накладывать ватермарк, да по умолчанию
public $is_saveorig = 0; // сохранять оригинал фото, нет по умолчанию
public $dir_small = 'small/'; // директория загрузки миниатюры
public $dir_medium = 'medium/'; // директория загрузки среднего изображения
public $only_medium = false; // загружать только среднее изображение, нет по умолчанию
public $input_name = 'Filedata'; // название поля загрузки файла
// ============================================================================ //
// ============================================================================ //
private function __construct(){}
private function __clone() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
// ============================================================================ //
/**
* Загружает фото файл
* @return array $file (filename, realfile)
*/
public function uploadPhoto($old_file=''){
// если каталог загрузки не определен, возвращаем ложь
if (!$this->upload_dir) { return false; }
if (!empty($_FILES[$this->input_name]['name'])){
cmsCore::includeGraphics();
$input_name = mb_strtolower(
preg_replace('/[^a-zA-Zа-яёЁА-Я0-9.-_]/ui', '',
mb_substr(basename(strval($_FILES[$this->input_name]['name'])), 0, 160)));
// расширение
$ext = mb_strtolower(pathinfo($input_name, PATHINFO_EXTENSION));
// имя файла без расширения
$realfile = str_replace('.'.$ext, '', $input_name);
if (!in_array($ext, array('jpg','jpeg','gif','png','bmp'))) { return false; }
$this->filename = $this->filename ? $this->filename : md5(time().$realfile).'.'.$ext;
$uploadphoto = $this->upload_dir . $this->filename;
$uploadthumb['small'] = $this->upload_dir . $this->dir_small . $this->filename;
$uploadthumb['medium'] = $this->upload_dir . $this->dir_medium . $this->filename;
$uploadphoto = $this->upload_dir . $this->filename;
$source = $_FILES[$this->input_name]['tmp_name'];
$errorCode = $_FILES[$this->input_name]['error'];
if (cmsCore::moveUploadedFile($source, $uploadphoto, $errorCode)) {
// удаляем предыдущий файл если необходимо
$this->deletePhotoFile($old_file);
if (!$this->isImage($uploadphoto)){
$this->deletePhotoFile($this->filename);
return false;
}
if (!$this->small_size_h) { $this->small_size_h = $this->small_size_w; }
if (!$this->medium_size_h) { $this->medium_size_h = $this->medium_size_w; }
// Гененрируем маленькое и среднее изображения
if(!$this->only_medium){
if(!is_dir($this->upload_dir . $this->dir_small)) { @mkdir($this->upload_dir . $this->dir_small); }
@img_resize($uploadphoto, $uploadthumb['small'], $this->small_size_w, $this->small_size_h, $this->thumbsqr);
}
if(!is_dir($this->upload_dir . $this->dir_medium)) { @mkdir($this->upload_dir . $this->dir_medium); }
@img_resize($uploadphoto, $uploadthumb['medium'], $this->medium_size_w, $this->medium_size_h, false, false);
// Накладывать ватермарк
if($this->is_watermark) { @img_add_watermark($uploadthumb['medium']); }
// сохранять оригинал
if(!$this->is_saveorig) { @unlink($uploadphoto); } elseif($this->is_watermark) { @img_add_watermark($uploadphoto); }
$file['filename'] = $this->filename;
$file['realfile'] = $realfile;
} else {
return false;
}
} else {
return false;
}
return $file;
}
// ============================================================================ //
public function isImage($src){
$size = getimagesize($src);
if ($size === false) return false;
return true;
}
// ============================================================================ //
/**
* Удаляет файл фото с папок загрузки
* @return bool
*/
public function deletePhotoFile($file=''){
if (!($file && $this->upload_dir)) { return false; }
@chmod($this->upload_dir . $file, 0777);
@unlink($this->upload_dir . $file);
@chmod($this->upload_dir . $this->dir_small . $file, 0777);
@unlink($this->upload_dir . $this->dir_small . $file);
@chmod($this->upload_dir . $this->dir_medium . $file, 0777);
@unlink($this->upload_dir . $this->dir_medium . $file);
return true;
}
// ============================================================================ //
}
?>