Exemple #1
0
 /**
  * createWysiwygZip
  *
  * @param string $data wysiswyg editor content
  * @param string $fileName wysiwygのテキストをまとめるファイル名
  * @return string 作成したZIPファイルへのパス
  * @throws InternalErrorException
  */
 public function createWysiwygZip($data, $fileName = 'document.txt')
 {
     $zip = new ZipDownloader();
     // UPLOADされているファイル情報を取り出す
     $tmpStr = $data;
     $tmpStr = str_replace('<img', "\n<img", $tmpStr);
     $tmpStr = str_replace('<a', "\n<a", $tmpStr);
     $matchCount = preg_match_all(self::WYSIWYG_FILE_KEY_PATTERN, $tmpStr, $matches);
     if ($matchCount > 0) {
         // ファイルのUPLOAD_IDを取り出す
         foreach ($matches[3] as $uploadId) {
             // ファイル情報を取得してくる
             $uploadFile = $this->UploadFile->findById($uploadId);
             if ($uploadFile) {
                 $uploadFile = $uploadFile['UploadFile'];
                 // ルームチェック
                 if ($uploadFile['room_id']) {
                     $roomId = Current::read('Room.id');
                     if ($uploadFile['room_id'] != $roomId) {
                         CakeLog::error('Can not find wysiwyg file ' . $uploadId);
                         throw new InternalErrorException();
                     }
                 }
                 if ($uploadFile['block_key']) {
                     // block_keyによるガード
                     $Block = ClassRegistry::init('Blocks.Block');
                     $uploadFileBlock = $Block->findByKeyAndLanguageId($uploadFile['block_key'], Current::read('Language.id'));
                     if ($Block->isVisible($uploadFileBlock) === false) {
                         CakeLog::error('Can not find wysiwyg file ' . $uploadId);
                         throw new InternalErrorException();
                     }
                 }
                 // そのファイルをZIPに含める
                 $path = WWW_ROOT . trim($uploadFile['path'], '/') . '/' . $uploadId . '/' . $uploadFile['real_file_name'];
                 $zip->addFile($path, $uploadId . '.' . $uploadFile['extension']);
             }
         }
     }
     $zip->addFromString($fileName, $data);
     $zip->close();
     return $zip->path;
 }