Beispiel #1
0
 public function douploadAction()
 {
     $this->noViewRenderer(true);
     $request = $this->getRequest();
     if (!JO_Session::get('user_id')) {
         JO_Session::set('msg_error', $this->translate('You must be logged to upload an item'));
         die(json_encode(array('logout' => WM_Router::create($request->getBaseUrl() . '?controller=users&action=login'))));
     }
     $file = $request->getFile('file');
     $result = array();
     if (!$file) {
         $result['msg_error'] = $this->translate('Invalid upload');
         die(json_encode($result));
     }
     $upload_folder = realpath(BASE_PATH . '/uploads');
     $upload_folder .= '/temporary/' . JO_Date::getInstance(JO_Session::get('register_datetime'), 'yy/mm', true) . '/';
     $upload = new JO_Upload();
     $types = array();
     $fileTypes = JO_Registry::get('upload_theme');
     if ($fileTypes) {
         foreach ($fileTypes as $type) {
             $tp = explode(',', $type);
             foreach ($tp as $t) {
                 $types[] = '.' . $t;
             }
         }
     }
     $allow_images = array();
     if (isset($fileTypes['images'])) {
         $ew = explode(',', $fileTypes['images']);
         foreach ($ew as $ar) {
             $allow_images[] = '.' . strtolower($ar);
         }
     }
     $upload->setFile($file)->setExtension($types)->setUploadDir($upload_folder);
     $new_name = md5(time() . serialize($file));
     if ($upload->upload($new_name)) {
         $file_extension = $upload->get_extension($file['name']);
         $info = $upload->getFileInfo();
         if ($file_extension == '.zip') {
             if ($info) {
                 $zip = new ZipArchive();
                 $fileArr = array();
                 $res = $zip->open($upload_folder . $upload->getNewFileName());
                 if ($res === true) {
                     for ($i = 0; $i < $zip->numFiles; $i++) {
                         $zip_file = $zip->statIndex($i);
                         if (in_array($upload->get_extension($zip_file['name']), $allow_images)) {
                             if (stripos($zip_file['name'], '_MACOSX') !== false) {
                                 continue;
                             }
                             $ext = $upload->get_extension($zip_file['name']);
                             $name = basename($zip_file['name'], $ext);
                             $fileArr[] = array('zip_filename' => $info['name'], 'zip_name' => $file['name'], 'filename' => md5($name) . $ext, 'name' => $name . $ext, 'size' => number_format($zip_file['size'], 2), 'uploaded' => time());
                         }
                     }
                     $zip->close();
                     if (!empty($fileArr)) {
                         if (JO_Session::get('uploaded_files')) {
                             $array = JO_Session::get('uploaded_files');
                         } else {
                             $array = array();
                         }
                         $array[] = $fileArr;
                         JO_Session::set('uploaded_files', $array);
                     } else {
                         $fileArr[] = array('zip_filename' => $info['name'], 'zip_name' => $file['name'], 'filename' => '', 'name' => '', 'size' => '', 'uploaded' => time());
                     }
                     if (JO_Session::get('uploaded_arhives')) {
                         $array = JO_Session::get('uploaded_arhives');
                     } else {
                         $array = array();
                     }
                     $array[] = array(array('filename' => $info['name'], 'name' => $file['name']));
                     JO_Session::set('uploaded_arhives', $array);
                 } else {
                     $result['msg_error'] = $this->translate('Theme preview should be ' . implode(', ', $allow_archives) . ' file');
                 }
             } else {
                 $result['msg_error'] = $this->translate('Invalid upload');
             }
         } else {
             if ($info) {
                 $fileArr[] = array('zip_filename' => '', 'zip_name' => '', 'filename' => $info['name'], 'name' => $file['name'], 'size' => number_format($info['size'] / 1024 / 1024, 2), 'uploaded' => time());
                 if (JO_Session::get('uploaded_files')) {
                     $array = JO_Session::get('uploaded_files');
                 } else {
                     $array = array();
                 }
                 $array[] = $fileArr;
                 JO_Session::set('uploaded_files', $array);
             } else {
                 $result['msg_error'] = $this->translate('Invalid upload');
             }
         }
     }
     if (is_array($fileArr)) {
         $result['msg_success'] = $this->translate('File was uploaded successful');
         $result['file'] = $fileArr;
         die(json_encode($result));
     } else {
         $result['msg_error'] = $this->translate('Invalid upload');
         die(json_encode($result));
     }
 }