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