/** * Salva um arquivo dentro da pasta específica * @param $file * @param $file_name * @param $directory * @return boolean */ public function upload(CUploadedFile $file, $file_name = NULL, $directory = NULL) { /** * Para cada item do array de configuração de corte * o método tratará a imagem como configurado */ try { Yii::log("CApiFileManager ::: INICIANDO O ARMAZENAMENTO DO ARQUIVO "); if (!is_dir($this->upload_path)) { $const_path = ABSOLUTE_PATH_UPLOAD; throw new CHttpException(500, "O diretório de upload de arquivo é inválido {$const_path} | {$this->upload_path}"); } $caminho = $this->upload_path; if (!is_null($directory)) { // $array_directory= explode('/', $directory); // @todo Testar código abaixo para garantir integridade das pastas /** * foreach($array_directory as $dir_name) * $dir_name= normalize($dir_name) * * $directory= implode('/', $array_directory); */ /* * Verificar se o diretório não existe: Caso não exista, criar este diretório */ if (!is_dir("{$caminho}/{$directory}/")) { $novo_caminho = @mkdir("{$caminho}/{$directory}/", 0777, true); if (!$novo_caminho) { throw new Exception("Falha ao criar diretorio {$caminho}/{$directory}/"); } $caminho = "{$caminho}/{$directory}/"; } else { $caminho = "{$caminho}/{$directory}/"; } } // Atualizar a variavel com o novo caminho de upload $this->upload_path = $caminho; if (is_null($file_name)) { $nome_do_arquivo = $this->getNewFileName($file); } else { $nome_do_arquivo = $this->normalize($file_name); } $caminho_para_salvar_arquivo = "{$caminho}/{$nome_do_arquivo}"; if (!$file->saveAs($caminho_para_salvar_arquivo)) { throw new Exception("Falha ao salvar arquivo como {$caminho}/{$nome_do_arquivo}"); } // A rotina abaixo deve ser realizada somente em casos de imagem if (in_array($file->getType(), array("image/gif", "image/png", "image/bmp", "image/jpeg", "image/tiff"))) { Yii::import("application.components.SystemService.lib.*"); foreach ($this->image_crop_configuration as $crop_configuration) { $thumb = new imageUpload("{$caminho}/{$nome_do_arquivo}"); if (array_key_exists("width", $crop_configuration)) { $thumb->size_auto($crop_configuration["width"]); } $thumb->jpeg_quality($crop_configuration["quality"]); $thumb->save("{$caminho}/{$crop_configuration['prefix']}{$nome_do_arquivo}"); Yii::log("CApiFileManager ::: O arquivo {$crop_configuration['prefix']}{$nome_do_arquivo} foi mantido no disco"); } if (!$this->keep_original_image_file) { // A imagem original deve ser removida após os cortes serem executados $this->delete($nome_do_arquivo, $directory); } } else { Yii::log("CApiFileManager ::: O arquivo nao possui um tipo permitido"); } } catch (Exception $e) { Yii::log("CApiFileManager ::: {$e->getMessage()} "); return false; } $this->file_name = $nome_do_arquivo; return true; }