194 lines
7.0 KiB
PHP
194 lines
7.0 KiB
PHP
<?php
|
|
|
|
require_once __DIR__.'/common.inc.php';
|
|
|
|
if (!isset($XOOPS_MODULE_COSMODB) || empty($XOOPS_MODULE_COSMODB)) {
|
|
exit('Not configured for cosmodb module'.PHP_EOL);
|
|
}
|
|
|
|
foreach ($XOOPS_MODULE_COSMODB as $dirname) {
|
|
dumpCosmoDB($dirname);
|
|
}
|
|
|
|
function dumpCosmoDB($dirname)
|
|
{
|
|
global $xoopsDB;
|
|
$config = [];
|
|
if (!MyDumpTool::canModuleRead($dirname, 0)) {
|
|
echo 'No read permission for Guest user: '.$dirname.PHP_EOL;
|
|
return false;
|
|
}
|
|
echo $dirname.PHP_EOL;
|
|
MyDumpTool::makeDirectory('public/modules/'.$dirname);
|
|
// copy noimage
|
|
MyDumpTool::makeDirectory('public/modules/'.$dirname.'/images');
|
|
$spath = XOOPS_ROOT_PATH.'/modules/'.$dirname.'/images/noimage.gif';
|
|
$dpath = MYDUMPTOOL_OUTPUTDIR.'/public/modules/'.$dirname.'/images/noimage.gif';
|
|
MyDumpTool::fileCopy($spath, $dpath);
|
|
// component_master table
|
|
$sql = sprintf('SELECT * FROM `%s` ORDER BY `sort`,`comp_id`', $xoopsDB->prefix($dirname.'_component_master'));
|
|
$modKeys = ['comp_id' => 'i', 'type' => 'i', 'onoff' => 'i', 'sort' => 'i', 'nonull' => 'i', 'textmax' => 'i', 'onoff_refine' => 'i'];
|
|
// onoff: use for sort, onoff_refine: use for refine search, 0: means yes, 1: means no
|
|
$config['component'] = queryDatabase($sql, $modKeys);
|
|
// keyword table
|
|
$sql = sprintf('SELECT * FROM `%s` ORDER BY `kw_id`', $xoopsDB->prefix($dirname.'_keyword'));
|
|
$modKeys = ['kw_id' => 'i', 'sort' => 'i'];
|
|
$res = queryDatabase($sql, $modKeys);
|
|
foreach ($res as $idx => $row) {
|
|
$path = explode('/', trim($row['path'], '/'));
|
|
$parent = array_pop($path);
|
|
$res[$idx]['pid'] = ($parent == '') ? 0 : intval($parent);
|
|
unset($res[$idx]['path']);
|
|
}
|
|
$config['keyword'] = $res;
|
|
// detail table
|
|
$sql = sprintf('SELECT * FROM `%s` WHERE `detail_id`=1', $xoopsDB->prefix($dirname.'_detail'));
|
|
$modKeys = ['detail_id' => 'd', 'template' => 'h'];
|
|
$res = queryDatabase($sql, $modKeys);
|
|
$config['detail'] = $res[0]['template'];
|
|
// list table
|
|
$sql = sprintf('SELECT * FROM `%s` WHERE `onoff`=0 ORDER BY `sort`,`list_id`', $xoopsDB->prefix($dirname.'_list'));
|
|
$modKeys = ['list_id' => 'i', 'type' => 'i', 'onoff' => 'd', 'sort' => 'i'];
|
|
$config['list'] = queryDatabase($sql, $modKeys);
|
|
|
|
//var_dump($config);
|
|
$dHandler = Cosmoapi_Utils::getTrustModuleHandler('data', 'cosmoapi');
|
|
$dHandler->setDirname($dirname);
|
|
$ids = $dHandler->getIds();
|
|
foreach ($ids as $id => $label) {
|
|
$obj = $dHandler->get($id);
|
|
$keywords = [];
|
|
foreach ($obj->mKeywords as $kObj) {
|
|
$keywords[] = intval($kObj->mKeywordId);
|
|
}
|
|
$components = [];
|
|
foreach ($obj->mComponents as $cObj) {
|
|
$components[] = [
|
|
'name' => $cObj->mName,
|
|
'value' => $cObj->mValue,
|
|
];
|
|
}
|
|
$items = [];
|
|
foreach ($obj->mItems as $iObj) {
|
|
$items[] = [
|
|
'type' => $iObj->mType,
|
|
'name' => $iObj->mName,
|
|
'path' => $iObj->mPath,
|
|
'reg_date' => intval($iObj->mRegDate),
|
|
'reg_user' => getUserInfo($iObj->mRegUserId),
|
|
];
|
|
}
|
|
$thumbnails = [];
|
|
foreach ($obj->mThumbnails as $thumbnail) {
|
|
$thumbnails[] = [
|
|
'url' => preg_replace('/^'.preg_quote(XOOPS_URL.'/modules/'.$dirname.'/extract/'.$id.'/thumbnail/','/').'/', '', $thumbnail['url']),
|
|
'caption' => $thumbnail['caption'],
|
|
];
|
|
}
|
|
$commentTopics = [];
|
|
foreach ($obj->mComments as $ctObj) {
|
|
$comment = [
|
|
'subject' => $ctObj->mComment->mSubject,
|
|
'message' => $ctObj->mComment->mMessage,
|
|
'reg_date' => intval($ctObj->mComment->mRegDate),
|
|
'reg_user' => getUserInfo($ctObj->mComment->mRegUser),
|
|
];
|
|
$replies = [];
|
|
foreach ($ctObj->mReplies as $cObj) {
|
|
$replies[] = [
|
|
'subject' => $cObj->mSubject,
|
|
'message' => $cObj->mMessage,
|
|
'reg_date' => intval($cObj->mRegDate),
|
|
'reg_user' => getUserInfo($cObj->mRegUser),
|
|
];
|
|
}
|
|
$commentTopics[] = [
|
|
'topic_id' => intval($ctObj->mTopicId),
|
|
'com_id' => intval($ctObj->mComId),
|
|
'type' => $ctObj->mType,
|
|
'comment' => $comment,
|
|
'replies' => $replies,
|
|
];
|
|
}
|
|
$links = [];
|
|
foreach ($obj->mLinks as $lObj) {
|
|
$href = preg_replace(preg_replace('/https/', 'https?', '/'.preg_quote(XOOPS_URL, '/').'/'), '', $lObj->mHref);
|
|
if (strpos($href, 'invbrain') !== false) {
|
|
var_dump($href);
|
|
}
|
|
$links[] = [
|
|
'type' => (int) $lObj->mType,
|
|
'user' => getUserInfo($lObj->mUid),
|
|
'name' => $lObj->mName,
|
|
'href' => $href,
|
|
'note' => $lObj->mNote,
|
|
];
|
|
}
|
|
$basic = [
|
|
'id' => $id,
|
|
'label' => $obj->mLabel,
|
|
'reg_date' => intval($obj->mRegDate),
|
|
'author' => getUserInfo($obj->mAuthor),
|
|
'views' => intval($obj->mViews),
|
|
'components' => $components,
|
|
'thumbnails' => $thumbnails,
|
|
'items' => $items,
|
|
];
|
|
$detail = [
|
|
'id' => $id,
|
|
'users' => array_map('getUserInfo', $obj->mUserIds),
|
|
'keywords' => $keywords,
|
|
'comment_topics' => $commentTopics,
|
|
'links' => $links,
|
|
];
|
|
MyDumpTool::saveJson('public/modules/'.$dirname.'/'.$id.'.json', $detail);
|
|
$config['data'][] = $basic;
|
|
}
|
|
MyDumpTool::saveJson('public/modules/'.$dirname.'/index.json', $config);
|
|
}
|
|
|
|
function getUserInfo($uid) {
|
|
static $users = [];
|
|
if (!isset($users[$uid])) {
|
|
$memberHandler = xoops_gethandler('member');
|
|
$userObj = $memberHandler->getUser($uid);
|
|
if (is_object($userObj)) {
|
|
$name = trim($userObj->get('name'));
|
|
$uname = trim($userObj->get('uname'));
|
|
$users[$uid] = $uname; // $name !== '' ? $name.' ('.$uname.')' : $uname;
|
|
} else {
|
|
$users[$uid] = 'unknown';
|
|
}
|
|
}
|
|
return $users[$uid];
|
|
}
|
|
|
|
function queryDatabase($sql, $modKeys = []) {
|
|
global $xoopsDB;
|
|
$ret = [];
|
|
if (!($res = $xoopsDB->query($sql))) {
|
|
var_dump($xoopsDB);
|
|
exit();
|
|
}
|
|
while ($row = $xoopsDB->fetchArray($res)) {
|
|
MyDumpTool::decode($row);
|
|
foreach ($modKeys as $key => $type) {
|
|
switch ($type) {
|
|
case 'i':
|
|
$row[$key] = intval($row[$key]);
|
|
break;
|
|
case 'd':
|
|
unset($row[$key]);
|
|
break;
|
|
case 'h':
|
|
$row[$key] = preg_replace('/\s+([a-z]+)=\'([^\']*)\'/U', ' \1="\2"', MyDumpTool::fixHtml($row[$key]));
|
|
break;
|
|
}
|
|
}
|
|
$ret[] = $row;
|
|
}
|
|
$xoopsDB->freeRecordSet($res);
|
|
|
|
return $ret;
|
|
}
|