| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- <?php
- /**
- * The api view file of dev module of ZenTaoPMS.
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
- * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Wang Yidong<yidong@easycorp.ltd>
- * @package dev
- * @link https://www.zentao.net
- */
- namespace zin;
- $featureBarItems = array();
- foreach($lang->dev->featureBar['api'] as $key => $label)
- {
- $featureBarItems[] = array
- (
- 'text' => $label,
- 'active' => ($selectedModule == $key || ($key == 'index' and $selectedModule != 'restapi')),
- 'url' => inlink('api', "module=$key")
- );
- }
- $parseTree = function($data, $typeList, $level = 0) use (&$parseTree)
- {
- global $lang;
- $trList = array();
- $tdList = array();
- $field = '';
- for($i = 0; $i < $level; $i++) $field .= ' '. ($i == $level - 1 ? '∟' : ' ') . ' ';
- $field .= $data['field'];
- $tdList[] = h::td($field);
- $tdList[] = h::td(zget($typeList, $data['paramsType'], ''));
- $tdList[] = h::td(setClass('text-center'), zget($lang->api->boolList, $data['required'], ''));
- $tdList[] = h::td(html($data['desc']));
- $trList[] = h::tr($tdList);
- if(isset($data['children']) && count($data['children']) > 0)
- {
- $level++;
- foreach($data['children'] as $item) $trList = array_merge($trList, $parseTree($item, $typeList, $level));
- }
- return $trList;
- };
- $fnGetHeaderContent = function($api)
- {
- if(empty($api->params['header'])) return null;
- global $lang;
- $headerTr = array();
- foreach($api->params['header'] as $param)
- {
- $headerTr[] = h::tr
- (
- h::td($param['field']),
- h::td('String'),
- h::td($lang->api->boolList[$param['required']]),
- h::td(html($param['desc']))
- );
- }
- $content = array();
- $content[] = h3(setClass('title'), $lang->api->header);
- $content[] = h::table
- (
- setClass('table bordered paramsTable'),
- h::thead
- (
- h::tr
- (
- h::th($lang->api->req->name),
- h::th($lang->api->req->type),
- h::th($lang->api->req->required),
- h::th($lang->api->req->desc)
- )
- ),
- h::tbody($headerTr)
- );
- return $content;
- };
- $fnGetQueryContent = function($api)
- {
- if(empty($api->params['query'])) return null;
- global $lang;
- $queryTr = array();
- foreach($api->params['query'] as $param)
- {
- $queryTr[] = h::tr
- (
- h::td($param['field']),
- h::td('String'),
- h::td($lang->api->boolList[$param['required']]),
- h::td(html($param['desc']))
- );
- }
- $content = array();
- $content[] = h3(setClass('title'), $lang->api->query);
- $content[] = h::table
- (
- setClass('table bordered paramsTable'),
- h::thead
- (
- h::tr
- (
- h::th($lang->api->req->name),
- h::th($lang->api->req->type),
- h::th($lang->api->req->required),
- h::th($lang->api->req->desc)
- )
- ),
- h::tbody($queryTr)
- );
- return $content;
- };
- $fnGetParamsContent = function($api) use(&$parseTree, $typeList)
- {
- if(empty($api->params['params'])) return null;
- global $lang;
- $paramsTr = array();
- foreach($api->params['params'] as $item) $paramsTr = array_merge($paramsTr, $parseTree($item, $typeList));
- $content = array();
- $content[] = h3(setClass('title'), $lang->api->params);
- $content[] = h::table
- (
- setClass('table bordered paramsTable'),
- h::thead
- (
- h::tr
- (
- h::th($lang->api->req->name),
- h::th($lang->api->req->type),
- h::th($lang->api->req->required),
- h::th($lang->api->req->desc)
- )
- ),
- h::tbody($paramsTr)
- );
- if(!empty($api->paramsExample))
- {
- $content[] = h3(setClass('title'), $lang->api->paramsExample);
- $content[] = h::pre(h::code(html($api->paramsExample)));
- }
- return $content;
- };
- $fnGetResponseContent = function($api) use($parseTree, $typeList)
- {
- if(empty($api->response)) return null;
- global $lang;
- $responseTr = array();
- foreach($api->response as $item) $responseTr = array_merge($responseTr, $parseTree($item, $typeList));
- $content = array();
- $content[] = h3(setClass('title'), $lang->api->response);
- $content[] = h::table
- (
- setClass('table bordered paramsTable'),
- h::thead
- (
- h::tr
- (
- h::th($lang->api->req->name),
- h::th($lang->api->req->type),
- h::th($lang->api->req->required),
- h::th($lang->api->req->desc)
- )
- ),
- h::tbody($responseTr)
- );
- if(!empty($api->responseExample))
- {
- $content[] = h3(setClass('title'), $lang->api->responseExample);
- $content[] = h::pre(h::code(html($api->responseExample)));
- }
- return $content;
- };
- $fnBuildAPIContent = function() use($api, $fnGetHeaderContent, $fnGetQueryContent, $fnGetParamsContent, $fnGetResponseContent)
- {
- global $lang, $app;
- $content = array();
- $content[] = div
- (
- setClass('pb-3 font-bold'),
- $lang->dev->apiBaseUrl . ': ' . commonModel::getSysURL() . $app->config->webRoot . 'api.php/v1'
- );
- $content[] = div
- (
- setClass('panel-heading'),
- div(setClass('http-method label'), $api->method),
- div(setClass('path'), set::title($api->path), $api->path)
- );
- $content[] = div
- (
- setClass('panel-body'),
- h2(setClass('title'), set::title($api->title), $api->title),
- div(setClass('desc'), html($api->desc)),
- div
- (
- $fnGetHeaderContent($api),
- $fnGetQueryContent($api),
- $fnGetParamsContent($api),
- $fnGetResponseContent($api)
- )
- );
- return $content;
- };
- $activeGroup = '';
- foreach($moduleTree as $module)
- {
- if($module->active) $activeGroup = $module->id;
- }
- h::css("
- .sidebar .tree [data-level=\"0\"][id=\"{$activeGroup}\"] {color: var(--color-primary-600); font-weight:bolder}
- .sidebar .tree [data-level=\"1\"][id=\"{$apiID}\"] {color: var(--color-primary-600); font-weight:bolder}
- ");
- featureBar
- (
- set::items($featureBarItems),
- icon(set('title', $lang->dev->apiTips), 'help')
- );
- sidebar
- (
- setClass('bg-white'),
- h::header
- (
- setClass('h-10 flex items-center pl-4 flex-none gap-3'),
- div(setClass('text-lg font-semibold flex items-center'), icon(setClass('pr-2'), 'list'), span($lang->dev->moduleList))
- ),
- treeEditor(set(array('className' => 'pl-3', 'items' => $moduleTree, 'canEdit' => false, 'canDelete' => false, 'canSplit' => false))),
- set::toggleBtn(false)
- );
- div
- (
- setClass('bg-white p-3 panel'),
- $selectedModule ? $fnBuildAPIContent() : null
- );
|