prefix(); $table = $pico.'_contents'; if (!MyDumpTool::tableExists($table)) { exit('pico('.$pico.') module not found'.PHP_EOL); } MyDumpTool::makeDirectory('public/'.$pico); MyDumpTool::makeDirectory('public/'.$pico.'/images'); $moduleHandler = xoops_gethandler('module'); $module = $moduleHandler->getByDirname($pico); $moduleConfigHandler = xoops_gethandler('config'); $moduleConfig = $moduleConfigHandler->getConfigsByDirname($pico); $permObj = PicoPermission::getInstance(); $perms = $permObj->getPermissions($pico); $categoryHandler = new PicoCategoryHandler($pico, $perms); $contentHandler = new PicoContentHandler($pico); $cats = $categoryHandler->getAllCategories(); $confContents = []; $confCategories = []; foreach ($cats as $cat) { $catData = $cat->getData(); $modConfig = $cat->getOverriddenModConfig(); $link = pico_common_make_category_link4html($modConfig, $catData, $pico); MyDumpTool::decode($catData); $confCategories[] = [ 'id' => $catData['id'], 'title' => $catData['cat_title'], 'desc' => (string) $catData['cat_desc'], 'pid' => (int) $catData['pid'], 'weight' => (int) $catData['cat_weight'], 'link' => $link, ]; $contents = $contentHandler->getCategoryContents($cat); foreach ($contents as $content) { $data = $content->getData(); $link = pico_common_make_content_link4html($modConfig, $data); MyDumpTool::decode($data); $content = MyDumpTool::fixHtml($data['body_cached']); $imageId = 1; $dataId = []; $content = preg_replace_callback('/]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use (&$imageId, $pico, $data, $link) { $url = $matches[2]; if (!preg_match('/^http/', $url)) { if (preg_match('/^\//', $url)) { $url = XOOPS_URL.$url; } else { $xpath = dirname($link); $url = XOOPS_URL.'/modules/'.$pico.'/'.$xpath.'/'.$url; } } $fname = '/'.$pico.'/images/'.$data['id'].'_'.$imageId.'.dat'; $fpath = MYDUMPTOOL_OUTPUTDIR.'/public'.$fname; MyDumpTool::fileDownload($url, $fpath); $mime = MyDumpTool::getMimeType($fpath); switch ($mime) { case 'image/gif': $fpath_ = preg_replace('/.dat$/', '.gif', $fpath); $fname = preg_replace('/.dat$/', '.gif', $fname); rename($fpath, $fpath_); $fpath = $fpath_; break; case 'image/png': $fpath_ = preg_replace('/.dat$/', '.png', $fpath); $fname = preg_replace('/.dat$/', '.png', $fname); rename($fpath, $fpath_); $fpath = $fpath_; break; case 'image/jpeg': $fpath_ = preg_replace('/.dat$/', '.jpeg', $fpath); $fname = preg_replace('/.dat$/', '.jpeg', $fname); rename($fpath, $fpath_); $fpath = $fpath_; break; default: exit('unknown mime type '.$mime.' found: '.$fname.' from '.$url.PHP_EOL); } ++$imageId; return ''; }, $content); $content = preg_replace_callback('/]*)href="([^"]+)"([^>]*)>/Us', function ($matches) use (&$dataId, $pico, $data, $link) { $url = $matches[2]; if (preg_match('/^(.+)\/([^\/]+\.pdf)(\?.+)?$/', $url, $m)) { if (!isset($dataId[$m[1]])) { $dataId[$m[1]] = count($dataId) + 1; } $id = $dataId[$m[1]]; $fname = '/'.$pico.'/data/'.$data['id'].'/'.$id.'/'.urldecode($m[2]); $fpath = MYDUMPTOOL_OUTPUTDIR.'/public'.$fname; if (!file_exists($fpath)) { MyDumpTool::makeDirectory('public/'.$pico.'/data'); MyDumpTool::makeDirectory('public/'.$pico.'/data/'.$data['id']); MyDumpTool::makeDirectory('public/'.$pico.'/data/'.$data['id'].'/'.$id); if (preg_match('/^\//', $url)) { $url = XOOPS_URL.$url; } MyDumpTool::fileDownload($url, $fpath); } $url = '/'.$pico.'/data/'.$data['id'].'/'.$id.'/'.$m[2]; } return ''; }, $content); $item = [ 'id' => $data['id'], 'title' => $data['subject_raw'], 'content' => $content, ]; MyDumpTool::saveJson('public/'.$pico.'/'.$data['id'].'.json', $item); $confContents[] = [ 'id' => $item['id'], 'title' => $data['subject_raw'], 'cat_id' => (int) $data['cat_id'], 'weight' => (int) $data['weight'], 'link' => $link, ]; } } $moduleinfo = [ 'name' => $module->get('name'), 'dirname' => $pico, 'message' => $moduleConfig['top_message'], 'show_menuinmoduletop' => (int) $moduleConfig['show_menuinmoduletop'], 'show_listasindex' => (int) $moduleConfig['show_listasindex'], 'show_breadcrumbs' => (int) $moduleConfig['show_breadcrumbs'], 'show_pagenavi' => (int) $moduleConfig['show_pagenavi'], ]; MyDumpTool::decode($moduleinfo); $config[] = [ 'module' => $moduleinfo, 'categories' => $confCategories, 'contents' => $confContents, ]; }