Вход Регистрация
Файл: mg-core/lib/upload.php
Строк: 184
<?php

/**
 * Класс для загрузки изображений на сервер, в том числе и через ckeditor.
 *
 * @author Авдеев Марк <mark-avdeev@mail.ru>
 * @package moguta.cms
 * @subpackage Libraries
 */
class Upload {

  public 
$lang = array();

  public function 
__construct($ckeditMode true) {

    include(
'mg-admin/locales/'.MG::getOption('languageLocale').'.php');
    
$this->lang $lang;
    if (
$ckeditMode) {
      
$uploaddir 'uploads';
      
$arrData $this->addImage();
      
$msg $arrData['msg'];
      if (
$arrData['status'] == "error") {
        echo 
'<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction('.$_REQUEST['CKEditorFuncNum'].',  "'.$full_path.'","'.$arrData['msg'].'" );</script>';
      } else {
        
$full_path SITE.'/uploads/'.$arrData['actualImageName'];
        echo 
'<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction("'.$_REQUEST['CKEditorFuncNum'].'",  "'.$full_path.'","'.$arrData['msg'].'" );</script>';
      }
    }
  }

  
/**
   * Загружает картинку из формы на сервер
   * @return boolean
   */
  
public function addImage($productImg false$watermark false) {

    
$path 'uploads/';


    
$validFormats = array('jpeg''jpg''png''gif''JPG');
    if (
$watermark) {
      
$path.="watermark/";
      if (!
file_exists('uploads/watermark/')) {
        if (
is_writable('uploads/')) {
          
chdir('uploads/'); //путь где создавать папку        
          
mkdir('watermark'755); //имя папки и атрибуты на папку    
          
return array('msg' => "Папка для знака была восстановлена. Теперь можно загрузить картинку."'status' => 'success');
        }
      }
      
$validFormats = array('png');
    }

    if (isset(
$_POST) && 'POST' == $_SERVER['REQUEST_METHOD']) {

      if (!empty(
$_FILES['upload'])) {
        
$file_array $_FILES['upload'];
      } elseif (!empty(
$_FILES['photoimg'])) {
        
$file_array $_FILES['photoimg'];
      } else {
        
$file_array $_FILES['edit_photoimg'];
      }

      
$name $file_array['name'];
      
$size $file_array['size'];

      if (
strlen($name)) {
        
//list($txt, $ext) = explode('.', $name);
        
$fullName explode('.'$name);
        
$ext array_pop($fullName);
        
$name implode('.'$fullName);
        if (
in_array(strtolower($ext), $validFormats)) {
          if (
$size < (1024 1024) && !empty($file_array['tmp_name'])) { //$file_array['tmp_name'] будет пустым если размер загруженного файла превышает размер установленный параметром upload_max_filesize в php.ini
            
$name str_replace(" ""-"$name);
            
$name MG::translitIt($name);
            
$actualImageName $this->prepareName($name$ext);
            if (
$watermark) {
              
$actualImageName 'watermark.png';
            }
            
$tmp $file_array['tmp_name'];

            if (
move_uploaded_file($tmp$path.$actualImageName)) {

              if (
MG::getSetting("waterMark") == "true" && !$watermark) {
                if (empty(
$_POST['noWaterMark'])) {
                  
$this->addWatterMark($path.$actualImageName);
                }
              }

              
//если картинка заливаются для продукта, то делаем две миниатюры
              
if ($productImg && !$watermark) {
                
//подготовка миниатюр с заданными в настройках размерами
                // preview по заданным в настройках размерам
                
$widthPreview MG::getSetting('widthPreview') ? MG::getSetting('widthPreview') : 200;
                
$widthSmallPreview MG::getSetting('widthSmallPreview') ? MG::getSetting('widthSmallPreview') : 50;
                
$heightPreview MG::getSetting('heightPreview') ? MG::getSetting('heightPreview') : 100;
                
$heightSmallPreview MG::getSetting('heightSmallPreview') ? MG::getSetting('heightSmallPreview') : 50;
                
$this->_reSizeImage('70_'.$actualImageName$path.$actualImageName$widthPreview$heightPreview);
                
// миниатюра по размерам из БД (150*100)
                
$this->_reSizeImage('30_'.$actualImageName$path.$actualImageName$widthSmallPreview$heightSmallPreview);
              }

              return array(
'msg' => $this->lang['ACT_IMG_UPLOAD'], 'actualImageName' => $actualImageName'status' => 'success');
            } else {
              return array(
'msg' => $this->lang['ACT_IMG_NOT_UPLOAD'], 'status' => 'error');
            }
          } else {
            return array(
'msg' => $this->lang['ACT_IMG_NOT_UPLOAD1'], 'status' => 'error');
          }
        } else {
          return array(
'msg' => $this->lang['ACT_IMG_NOT_UPLOAD2'], 'status' => 'error');
        }
      } else {
        return array(
'msg' => $this->lang['ACT_IMG_NOT_UPLOAD3'], 'status' => 'error');
      }
    }
    return 
false;
  }

  
/**
   * Проверяет существует ли уже в папке uploads файл с таким же именем.
   * Чтобы не перезатереть его  имя текущего файла будет дополненно индексом.
   * @return boolean
   */
  
public function prepareName($name$ext) {
    if (
file_exists('uploads/'.$name.".".$ext)) {
      return 
$name.time().".".$ext;
    }
    return 
$name.".".$ext;
  }

  
/**
   * Функция для ресайза картинки
   * @param string $name имя файла без расширения
   * @param string $tmp исходный временный файл
   * @param int $widthSet заданная ширина изображения
   * @param int $heightSet заданная высота изображения
   * @paramint $koef коэффициент сжатия изображения
   * @return void
   */
  
public function _reSizeImage($name$tmp$widthSet$heightSet$dirUpload 'uploads/thumbs/') {
    
$fullName explode('.'$name);
    
$ext array_pop($fullName);
    
$name implode('.'$fullName);
    list(
$width_orig$height_orig) = getimagesize($tmp);

    if (
$widthSet $heightSet) {
      
$ratio $widthSet $width_orig;
      
$width $widthSet;
      
$height $height_orig $ratio;
    } else {
      
$ratio $heightSet $height_orig;
      
$width $width_orig $ratio;
      
$height $heightSet;
    }

    
// ресэмплирование
    
$image_p imagecreatetruecolor($width$height);


    
imageAlphaBlending($image_pfalse);
    
imageSaveAlpha($image_ptrue);


    
// вывод
    
switch ($ext) {
      case 
'png':
        
$image imagecreatefrompng($tmp);
        
//делаем фон изображения белым, иначе в png при прозрачных рисунках фон черный
        
$black imagecolorallocate($image000);

// Сделаем фон прозрачным
        
imagecolortransparent($image$black);

        
imagealphablending($image_pfalse);
        
$col imagecolorallocate($image_p000);
        
imagefilledrectangle($image_p00$width$height$col);
//imagealphablending( $image_p, true );



        
imagecopyresampled($image_p$image0000$width$height$width_orig$height_orig);
        
imagepng($image_p$dirUpload.$name.'.'.$ext);
        break;

      case 
'gif':
        
$image imagecreatefromgif($tmp);
        
imagecopyresampled($image_p$image0000$width$height$width_orig$height_orig);
        
imagegif($image_p$dirUpload.$name.'.'.$ext100);
        break;

      default:

        
$image imagecreatefromjpeg($tmp);
        
imagecopyresampled($image_p$image0000$width$height$width_orig$height_orig);
        
//imagefilter($image_p, IMG_FILTER_BRIGHTNESS, 15); 
        
imagejpeg($image_p$dirUpload.$name.'.'.$ext100);
      
// создаём новое изображение
    
}
    
imagedestroy($image_p);
    
imagedestroy($image);
  }

  
/**
   * Добавляет водяной знак к картинке
   * @param type $image - путь до картинки на сервере
   * @return boolean
   */
  
public function addWatterMark($image) {
    
$filename $image;
    if (!
file_exists('uploads/watermark/watermark.png')) {
      return 
false;
    }
    
$size_format getimagesize($image);
    
$format strtolower(substr($size_format['mime'], strpos($size_format['mime'], '/') + 1));

    
// создаём водяной знак
    
$watermark imagecreatefrompng('uploads/watermark/watermark.png');
    
imagealphablending($watermarkfalse);
    
imageSaveAlpha($watermarktrue);
    
// получаем значения высоты и ширины водяного знака
    
$watermark_width imagesx($watermark);
    
$watermark_height imagesy($watermark);

    
// создаём jpg из оригинального изображения
    
$image_path $image;



    switch (
$format) {
      case 
'png':
        
$image imagecreatefrompng($image_path);
        
$w imagesx($image);
        
$h imagesy($image);
        
$imageTrans imagecreatetruecolor($w$h);
        
imagealphablending($imageTransfalse);
        
imageSaveAlpha($imageTranstrue);


        
$col imagecolorallocate($imageTrans000);
        
imagefilledrectangle($imageTrans00$w$h$col);
        
imagealphablending($imageTranstrue);


        break;
      case 
'gif':
        
$image imagecreatefromgif($image_path);
        break;
      default:
        
$image imagecreatefromjpeg($image_path);
    }

    
//если что-то пойдёт не так
    
if ($image === false) {
      return 
false;
    }
    
$size getimagesize($image_path);
    
// помещаем водяной знак на изображение
    
$dest_x = (($size[0]) / 2) - (($watermark_width) / 2);
    
$dest_y = (($size[1]) / 2) - (($watermark_height) / 2);

    
imagealphablending($imagetrue);
    
imagealphablending($watermarktrue);

    
imageSaveAlpha($imagetrue);
    
// создаём новое изображение
    
imagecopy($image$watermark$dest_x$dest_y00$watermark_width$watermark_height);

    
$imageformat 'image'.$format;
    if (
$format 'png') {
      
$imageformat($image$filename);
    } else {
      
$imageformat($image$filename100);
    }

    
// освобождаем память
    
imagedestroy($image);
    
imagedestroy($watermark);
    return 
true;
  }

  
/**
   * Загружает CSV файл для импорта каталога
   * @return boolean
   */
  
public function addImportCatalogCSV() {

    
$path 'uploads/';
    
$validFormats = array('csv''zip');

    if (isset(
$_POST) && 'POST' == $_SERVER['REQUEST_METHOD']) {

      if (!empty(
$_FILES['upload'])) {
        
$file_array $_FILES['upload'];
      }

      
$name $file_array['name'];
      
$size $file_array['size'];

      if (
strlen($name)) {
        
$fullName explode('.'$name);
        
$ext array_pop($fullName);
        
$name implode('.'$fullName);
        if (
in_array(strtolower($ext), $validFormats)) {
          if (
$size < (1024 10 1024) && !empty($file_array['tmp_name'])) { //$file_array['tmp_name'] будет пустым если размер загруженного файла превышает размер установленный параметром upload_max_filesize в php.ini
            
if (strtolower($ext) == 'csv') {
              
$name 'importCatalog.csv';
            }
            if (
strtolower($ext) == 'zip') {
              
$name 'importCatalog.zip';
            }

            
$tmp $file_array['tmp_name'];

            if (
move_uploaded_file($tmp$path.$name)) {

              if (
strtolower($ext) == 'zip') {
                if (
file_exists($path.$name)) {
                  
$zip = new ZipArchive;
                  
$res $zip->open($path.$nameZIPARCHIVE::CREATE);
                  
                  if (
$res === TRUE) {
                    
//$realDocumentRoot = str_replace(DIRECTORY_SEPARATOR.'mg-core'.DIRECTORY_SEPARATOR.'lib', '', dirname(__FILE__));
                    
for($i 0$i $zip->numFiles$i++) {
                      
$filename $zip->getNameIndex($i);
                      
$fullName explode('.'$zip->getNameIndex($i));
                      
$ext array_pop($fullName);
                      if(
$ext=='csv'){
                        
$zip->extractTo('uploads/', array($filename));
                        
rename('uploads/'.$filename"uploads/importCatalog.csv");
                      }                      
                    }                
                    
$zip->close();
                    
unlink($path.$name);
                  }
                }
              }
              return array(
'msg' => $this->lang['ACT_FILE_UPLOAD'], 'actualImageName' => 'importCatalog.csv''status' => 'success');
            } else {
              return array(
'msg' => $this->lang['ACT_FILE_NOT_UPLOAD'], 'status' => 'error');
            }
          } else {
            return array(
'msg' => $this->lang['ACT_FILE_NOT_UPLOAD1'], 'status' => 'error');
          }
        } else {
          return array(
'msg' => $this->lang['ACT_FILE_NOT_UPLOAD2'], 'status' => 'error');
        }
      } else {
        return array(
'msg' => $this->lang['ACT_FILE_NOT_UPLOAD3'], 'status' => 'error');
      }
    }
    return 
false;
  }

}
Онлайн: 0
Реклама