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,
];
}