Example #1
0
 /**
  * проверяет массив файлов и ресайзит их
  *
  * @param array() $fld
  * @param class $parent
  */
 function putFiles(&$fld, &$parent)
 {
     $main_root_id = defined('MAIN_ROOT_ID') ? MAIN_ROOT_ID : 100;
     $root_id = domainRootId();
     $module =& Registry::get('T' . $parent->name);
     $selector = $module ? (bool) $module->selector : true;
     foreach ($parent->elem_fields['columns'] as $k => $v) {
         if (($v['type'] == 'input_image' || $v['type'] == 'input_file') && !empty($fld[$k])) {
             if (substr($fld[$k], 0, 5) == '@temp') {
                 //перекладываем папку в нужную директорию
                 //определяем директорию использую id и folder для филда или общую
                 $source_file = substr($fld[$k], 5);
                 /*// пока закомментировала создание подпапок root_id, т.к. хотим от них отказаться
                   // позже введем какие-нибудь настройки
                    * if ($main_root_id == $root_id || !$selector) {
                       $folder = FILES_DIR;
                   }
                   else {
                       $folder = FILES_DIR . $root_id . '/';
                       if (!is_dir($folder)) {
                           mkdir($folder);
                           chmod($folder, DIRS_MOD);
                       }
                   }*/
                 $folder = FILES_DIR;
                 if (isset($v['display']['folder'])) {
                     $folder .= $v['folder'] . '/';
                     //Директория для закачивания собственная
                 } elseif ($parent->elem_fields['folder']) {
                     $folder .= $parent->elem_fields['folder'] . '/';
                     //Директория для закачивания глобальная
                 }
                 verifyDir($folder);
                 $id = get('id', '0', 'p');
                 $is_fancy = get('is_fancy', '', 'gp');
                 if ($is_fancy) {
                     $id = get('pid', '0', 'gp');
                 }
                 //иногда почему-то теряется id :)
                 if (is_array($id)) {
                     $id = $_POST['fld']['id'];
                 }
                 //@todo сделать проверку, что объект создан и id!=0 иначе как-нить раскладывать в другие папкив таких случаях,
                 //можно оставлять где попало и всо второго раза все будет ок..но тоже тупо:)
                 if ($id) {
                     $folder .= $id;
                 }
                 verifyDir($folder);
                 $dest_file = $folder . '/' . basename($source_file);
                 $dest_file = file_getUniName(path($dest_file));
                 //перемещаем
                 rename($source_file, $dest_file);
                 /*
                 copy($source_file, $dest_file);
                 unlink($source_file);
                 */
                 $fld[$k] = substr($dest_file, 2);
             } elseif ($fld[$k] == FILE_NO_SELECT_STR) {
                 $fld[$k] = "";
             }
         }
     }
 }
Example #2
0
/**
 * Закачивает файлы в указанную папку
 *
 * @param string $dir
 * @return bool
 */
function download_files($dir = TEMP_FILE_PATH)
{
    if (isset($_POST['page']) && ($_POST['page'] == 'fm2' || $_POST['page'] == 'fmr')) {
        return;
    }
    // лог файлов
    global $files_log;
    //проверяем, нужно ли что-нить закачать
    if (empty($_FILES)) {
        $files_log['notice'][] = "There are no files to load...";
        return false;
    }
    //название темповой папки
    $temp_dirname = $dir . "/" . $_COOKIE[session_name()];
    path($temp_dirname);
    //создаем коневую папку
    if (!verifyDir($dir)) {
        return false;
    }
    //создаем временную папку для закачивания == названию сессии
    if (!verifyDir($temp_dirname)) {
        return false;
    }
    if (!is_file($temp_dirname . '/.htaccess')) {
        $handle = fopen($temp_dirname . '/.htaccess', 'w');
        fwrite($handle, 'Allow from all');
        fclose($handle);
    }
    $files = array();
    //определяем массив файлов для закачивания
    foreach ($_FILES as $name => $data) {
        if (is_array($data['name'])) {
            foreach ($data['name'] as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $name2 => $value) {
                        if (!empty($value)) {
                            if (array_key_exists($name2, $_POST[$name][$k])) {
                                $files[] = array('post' => &$_POST[$name][$k][$name2], 'name' => current($value), 'size' => current($data['size'][$k][$name2]), 'type' => current($data['type'][$k][$name2]), 'tmp_name' => current($data['tmp_name'][$k][$name2]), 'error' => current($data['error'][$k][$name2]), 'error_str' => file_uploder_error(current($data['error'][$k][$name2])));
                            } else {
                                if (count($data['size'][$k]) == 1) {
                                    $files[] = array('post' => &$_POST[$name][$k], 'name' => $value, 'size' => current($data['size'][$k]), 'type' => current($data['type'][$k]), 'tmp_name' => current($data['tmp_name'][$k]), 'error' => current($data['error'][$k]), 'error_str' => file_uploder_error(current($data['error'][$k])));
                                } else {
                                    $files[] = array('post' => &$_POST[$name][$k][$name2], 'name' => $value, 'size' => $data['size'][$k][$name2], 'type' => $data['type'][$k][$name2], 'tmp_name' => $data['tmp_name'][$k][$name2], 'error' => $data['error'][$k][$name2], 'error_str' => file_uploder_error($data['error'][$k][$name2]));
                                }
                            }
                        }
                    }
                } else {
                    $files[] = array('post' => &$_POST[$name][$k], 'name' => $data['name'][$k], 'size' => $data['size'][$k], 'type' => $data['type'][$k], 'tmp_name' => $data['tmp_name'][$k], 'error' => $data['error'][$k], 'error_str' => file_uploder_error($data['error'][$k]));
                }
            }
        } else {
            if (!empty($data['name'])) {
                $files[] = array('post' => &$_POST[$name], 'name' => $data['name'], 'size' => $data['size'], 'type' => $data['type'], 'tmp_name' => $data['tmp_name'], 'error' => $data['error'], 'error_str' => file_uploder_error($data['error']));
            }
        }
    }
    if (empty($files)) {
        $files_log['fatal'][] = "There are no files to load...";
        return false;
    }
    //закачиваем
    foreach ($files as $k => $v) {
        if ($v['error'] == 0) {
            $files[$k]['path'] = file_getUniName($temp_dirname . "/" . GetPureName($v['name']));
            //проверяем на совпадение имен файла в кэше
            if (!move_uploaded_file($v['tmp_name'], $files[$k]['path'])) {
                unset($files[$k]['path']);
                $files_log['warning'][] = "Cann't upload the file '" . $v['name'] . "' in function 'move_uploaded_file'";
            } else {
                chmod($files[$k]['path'], FILES_MOD);
                chown($files[$k]['path'], fileowner($_SERVER['SCRIPT_FILENAME']));
                chgrp($files[$k]['path'], filegroup($_SERVER['SCRIPT_FILENAME']));
                //возвращаем пути на файлы в указанной папке
                $files[$k]['post'] = "@temp" . $files[$k]['path'];
            }
        }
    }
    $_FILES = null;
    return true;
}
Example #3
0
 /**
  * Накладывание водяного знака
  * @param array $fld
  * @param int $id
  * @return array|bool
  */
 function ElemRedactAfter($fld, $id)
 {
     $id = $id ? $id : (int) $_POST['id'];
     if (!$id) {
         return true;
     }
     global $watermark_img, $watermark_position;
     $watermark = (int) get('watermark', 0, 'p');
     if (isset($watermark_img) && !empty($watermark_img) && $watermark) {
         if (!getimagesize($watermark_img)) {
             return array('error' => "Не найден водяной знак " . $watermark_img);
         }
         $row = sql_getRow("SELECT * FROM {$this->elem_table} WHERE id={$id}");
         if (!$row) {
             return array('error' => "Неправильный идентификатор галереи");
         }
         if ($row['image_large']) {
             $file = '..' . $row['image_large'];
             $file = urldecode($file);
             $wmark_info = getimagesize($watermark_img);
             $file_info = getimagesize($file);
             if ($wmark_info[0] > $file_info[0]) {
                 return array('error' => "Ширина изображения меньше чем ширина водяного знака");
             }
             if ($wmark_info[1] > $file_info[1]) {
                 return array('error' => "Высота изображения меньше чем высота водяного знака");
             }
             $copy = file_getUniName($file);
             if (!copy($file, $copy)) {
                 return array('error' => "Ошибка копирования из " . $file . " в " . $copy);
             }
             include_once ENGINE_VERSION . '/admin/modules/fm2/watermark.php';
             $handle = new RWatermark($file_info[2], $copy);
             if (!isset($watermark_position)) {
                 $watermark_position = "CM";
             }
             $handle->SetPosition($watermark_position);
             $handle->SetTransparentColor(255, 0, 255);
             $handle->SetTransparency(100);
             switch ($wmark_info[2]) {
                 case '1':
                     $handle->AddWatermark(FILE_GIF, $watermark_img);
                     break;
                 case '2':
                     $handle->AddWatermark(FILE_JPEG, $watermark_img);
                     break;
                 case '3':
                     $handle->AddWatermark(FILE_PNG, $watermark_img);
                     break;
             }
             if ($file_info[2] == 1) {
                 imagegif($handle->marked_image, $copy);
             } elseif ($file_info[2] == 2) {
                 // Определяем примерно, с каким качеством сохранять картинки
                 $size = filesize($copy);
                 if ($size <= '10000') {
                     $quality = '90';
                 } else {
                     if ($size > '10000' && $size <= '30000') {
                         $quality = '90';
                     } else {
                         $quality = '85';
                     }
                 }
                 imagejpeg($handle->marked_image, $copy, $quality);
             } elseif ($file_info[2] == 3) {
                 imagepng($handle->marked_image, $copy);
             }
             $handle->Destroy();
             sql_updateId($this->elem_table, array('image_large' => substr($copy, 2)), $id);
         }
     }
     return true;
 }