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; $content = preg_replace_callback('/]*)src="(.*)"([^>]*)\/>/Us', function ($matches) use (&$imageId, $pico, $data, $link) { $url = $matches[2]; if (!preg_match('/^http/', $url)) { $xpath = dirname($link); $wrap_fpath = XOOPS_TRUST_PATH._MD_PICO_WRAPBASE.'/'.$pico.'/'.$url; if (file_exists($wrap_fpath)) { $url = $wrap_fpath; } else { $url = XOOPS_URL.'/modules/'.$pico.'/'.($xpath === '.' ? '' : '/').$url; } } $fname = '/'.$pico.'/images/'.$data['id'].'_'.$imageId.'.dat'; $fpath = MYDUMPTOOL_OUTPUTDIR.'/public'.$fname; if (preg_match('/^\//', $url)) { if (!MyDumpTool::fileCopy($url, $fpath)) { exit('failed to copy file: '.$url.PHP_EOL); } } else { 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); $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, ]; }