/** * 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; }