public function update($id, FolderEloquentRepository $folder_repo, Request $request)
 {
     $attrs = $request->except('_method');
     // dd($attrs);
     $folder = $folder_repo->update(['id' => $id, 'attributes' => $attrs]);
     return \Response::json(['status' => 1, 'msg' => 'folder updated']);
 }
 public function store(FileEloquentRepository $file_repo, FolderEloquentRepository $folder_repo, Request $request)
 {
     // needs refactoring
     $folder = $folder_repo->get(['id' => $request->input('folder_id')]);
     $ds = DIRECTORY_SEPARATOR;
     $cleanup_files = [];
     $ret = ['files' => [], 'msg' => '', 'log' => []];
     $cleanup_files = [];
     foreach (array_get($_FILES, 'files.error', []) as $_file_idx => $_file) {
         if ($_FILES['files']['error'][$_file_idx] != UPLOAD_ERR_OK) {
             $ret['log'][] = $_file_idx . ' not good upload';
             continue;
         }
         // get document type
         $shorttype = array_get(FileTypes::$mime_to_short_type, $_FILES['files']['type'][$_file_idx], false);
         // check if mime is correct type
         if (!$shorttype) {
             $ret['msg'] .= 'File not recognized as image, video or document.';
             $ret['log'][] = $_file_idx . ' not good filetype (' . $_FILES['files']['type'][$_file_idx] . ')';
             continue;
         }
         $file_info = ['original_filename' => $_FILES['files']['name'][$_file_idx]];
         try {
             // create new entry in media
             $file = $file_repo->create(['name' => ['sl' => 'partial'], 'description' => [], 'folder_id' => $folder->id, 'type' => $shorttype, 'mime_type' => $_FILES['files']['type'][$_file_idx], 'file_info' => $file_info, 'disk' => 'rackspace', 'location_path' => '', 'public_url' => '', 'created_by' => 0, 'updated_by' => 0]);
         } catch (\Exception $e) {
             $ret['msg'] .= 'File can not be created.';
             $ret['log'][] = $_file_idx . ' ' . $e->getMessage();
             continue;
         }
         $ret['log'][] = 'new file id: ' . $file->id;
         // generate cloud filename
         $pi = pathinfo($_FILES['files']['name'][$_file_idx]);
         $filename = preg_replace('/[^a-z0-9\\._-]+/', '', $pi['filename']) . '.' . array_get($pi, 'extension', 'unkn');
         $filename = $file->id . '_' . time() . '_' . $filename;
         $file->name = ['sl' => preg_replace('/[^a-z0-9\\._-]+/', '', $pi['filename'])];
         // move file to new temporary location
         $temporary_file_path = storage_path() . $ds . 'app' . $ds . 'tmp_' . $filename;
         move_uploaded_file($_FILES['files']['tmp_name'][$_file_idx], $temporary_file_path);
         $file_info['filesize'] = filesize($temporary_file_path);
         // add this file to be cleaned at the end of this script
         $cleanup_files[] = $temporary_file_path;
         $ret['log'][] = 'new filename: ' . $filename;
         // define storage folder (rackspace, other cloud providers)
         $storage_folder = 'u/' . date('Y') . '/' . date('m') . '/';
         try {
             // $file_upload = \Storage::put(
             // 	$storage_folder . $filename,
             // 	file_get_contents($temporary_file_path)
             // 	);
             // $ret['storage_response'] = $file_upload;
             // upload file
             $fileData = fopen($temporary_file_path, 'r');
             $ret['log'][] = 'uploaded to cloud:';
             $object = $this->get_container_connection()->uploadObject($storage_folder . $filename, $fileData);
             $ret['log'][] = 'OK';
             $ret['log'][] = $object->getPublicUrl();
             // update and persist public url
             $file->location_path = $storage_folder . $filename;
             $file->public_url = $object->getPublicUrl();
             $file->save();
             // if once needed file can put in session
             // \Session::push('uploaded_files', $file->id);
         } catch (\Exception $e) {
             fclose($fileData);
             $ret['msg'] .= 'File can not be stored on storage.';
             $ret['log'][] = $_file_idx . ' ' . $e->getMessage();
             continue;
         }
         fclose($fileData);
         $ret['files'][] = $file;
     }
     // clear tmp files
     foreach ($cleanup_files as $_cf) {
         $_cf = str_replace('\\', $ds, $_cf);
         $_cf = str_replace('/', $ds, $_cf);
         $ret['log'][] = 'Cleaning up ' . $_cf;
         unlink($_cf);
     }
     return \Response::json($ret);
 }