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 }