openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

FileExtractAction.class.php (1930B)


      1 <?php
      2 namespace cms\action\file;
      3 use cms\action\FileAction;
      4 use cms\action\Method;
      5 use cms\model\File;
      6 use cms\model\Folder;
      7 use language\Messages;
      8 use util\ArchiveTar;
      9 use util\ArchiveUnzip;
     10 
     11 
     12 class FileExtractAction extends FileAction implements Method {
     13     public function view() {
     14 		$this->setTemplateVars( $this->file->getProperties() );
     15     }
     16 
     17 
     18     public function post() {
     19 		switch( $this->file->extension )
     20 		{
     21 			case 'tar':
     22 				$folder = new Folder();
     23 				$folder->parentid = $this->file->parentid;
     24 				$folder->filename = $this->file->filename;
     25 				$folder->persist();
     26 				
     27 				$tar = new ArchiveTar();
     28 				$tar->openTAR( $this->file->loadValue() );
     29 				
     30 				foreach( $tar->files as $file )
     31 				{
     32 					$newFile = new File();
     33 					$newFile->parentid = $folder->objectid;
     34 					$newFile->value    = $file['file'];
     35 					$newFile->parse_filename( $file['name'] );
     36 					$newFile->lastchangeDate = $file['time'];
     37 					$newFile->persist();
     38 
     39 					$this->addNoticeFor( $newFile, Messages::ADDED );
     40 				}
     41 				
     42 				unset($tar);
     43 				
     44 				break;
     45 
     46 			case 'zip':
     47 			
     48 				$folder = new Folder();
     49 				$folder->parentid    = $this->file->parentid;
     50 				$folder->filename    = $this->file->filename;
     51 				$folder->persist();
     52 				
     53 				$zip = new ArchiveUnzip();
     54 				$zip->open( $this->file->loadValue() );
     55 
     56 				$lista = $zip->getList();
     57 
     58 				if(sizeof($lista)) foreach($lista as $fileName=>$trash){
     59 					
     60 
     61 					$newFile = new File();
     62 					$newFile->parentid    = $folder->objectid;
     63 					$newFile->parse_filename( basename($fileName) );
     64 
     65 					$newFile->value       = $zip->unzip($fileName);
     66 					$newFile->persist();
     67 					$newFile->copyNamesFrom( $this->file->objectid );
     68 
     69 					$this->addNoticeFor( $newFile, Messages::ADDED);
     70 					unset($newFile);
     71 				}
     72 
     73 				$zip->close();
     74 				unset($zip);
     75 				
     76 				break;
     77 
     78 			default:
     79 				throw new \util\exception\UIException('cannot extract file with extension: ' . $this->file->extension);
     80 		}
     81     }
     82 }