diff --git a/config/zentaopms.php b/config/zentaopms.php
index 413c6474b7..a5044b7972 100644
--- a/config/zentaopms.php
+++ b/config/zentaopms.php
@@ -191,11 +191,13 @@ define('TABLE_BURN', '`' . $config->db->prefix . 'burn`');
define('TABLE_BUILD', '`' . $config->db->prefix . 'build`');
define('TABLE_ACL', '`' . $config->db->prefix . 'acl`');
-define('TABLE_DOCLIB', '`' . $config->db->prefix . 'doclib`');
-define('TABLE_DOC', '`' . $config->db->prefix . 'doc`');
-define('TABLE_API', '`' . $config->db->prefix . 'api`');
-define('TABLE_API_SPEC', '`' . $config->db->prefix . 'apispec`');
-define('TABLE_APISTRUCT', '`' . $config->db->prefix . 'apistruct`');
+define('TABLE_DOCLIB', '`' . $config->db->prefix . 'doclib`');
+define('TABLE_DOC', '`' . $config->db->prefix . 'doc`');
+define('TABLE_API', '`' . $config->db->prefix . 'api`');
+define('TABLE_API_SPEC', '`' . $config->db->prefix . 'apispec`');
+define('TABLE_APISTRUCT', '`' . $config->db->prefix . 'apistruct`');
+define('TABLE_APISTRUCT_SPEC', '`' . $config->db->prefix . 'apistruct_spec`');
+define('TABLE_API_LIB_RELEASE', '`' . $config->db->prefix . 'api_lib_release`');
define('TABLE_MODULE', '`' . $config->db->prefix . 'module`');
define('TABLE_ACTION', '`' . $config->db->prefix . 'action`');
diff --git a/db/update15.5.sql b/db/update15.5.sql
index 6b2e77fced..d370f15255 100644
--- a/db/update15.5.sql
+++ b/db/update15.5.sql
@@ -8,6 +8,7 @@ CREATE TABLE `zt_api_lib_release`
(
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`doclib` int UNSIGNED NOT NULL DEFAULT 0,
+ `desc` varchar(255) NOT NULL DEFAULT '',
`version` varchar(255) NOT NULL DEFAULT '',
`snap` mediumtext NOT NULL,
`addedBy` varchar(30) NOT NULL DEFAULT 0,
@@ -18,106 +19,84 @@ CREATE TABLE `zt_api_lib_release`
-- DROP TABLE IF EXISTS `zt_api`;
CREATE TABLE `zt_api`
(
- `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
- `product` varchar(255) NOT NULL DEFAULT '',
- `lib` int UNSIGNED NOT NULL DEFAULT 0,
- `module` int UNSIGNED NOT NULL DEFAULT 0,
- `title` varchar(100) NOT NULL DEFAULT '',
- `path` varchar(255) NOT NULL DEFAULT '',
- `protocol` varchar(10) NOT NULL DEFAULT '',
- `method` varchar(10) NOT NULL DEFAULT '',
- `requestType` varchar(100) NOT NULL DEFAULT '',
- `responseType` varchar(100) NOT NULL DEFAULT '',
- `status` varchar(20) NOT NULL DEFAULT '',
- `owner` varchar(30) NOT NULl DEFAULT 0,
- `desc` text NULL,
+ `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
+ `product` varchar(255) NOT NULL DEFAULT '',
+ `lib` int UNSIGNED NOT NULL DEFAULT 0,
+ `module` int UNSIGNED NOT NULL DEFAULT 0,
+ `title` varchar(100) NOT NULL DEFAULT '',
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `protocol` varchar(10) NOT NULL DEFAULT '',
+ `method` varchar(10) NOT NULL DEFAULT '',
+ `requestType` varchar(100) NOT NULL DEFAULT '',
+ `responseType` varchar(100) NOT NULL DEFAULT '',
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULl DEFAULT 0,
+ `desc` text NULL,
`version` smallint UNSIGNED NOT NULL DEFAULT 0,
- `params` text NULL,
- `paramsExample` text NUll,
- `responseExample` text NUll,
- `response` text NULL,
- `commonParams` text NULL,
- `addedBy` varchar(30) NOT NULL DEFAULT 0,
- `addedDate` datetime NOT NULL,
- `editedBy` varchar(30) NOT NULL DEFAULT 0,
- `editedDate` datetime NOT NULL,
- `deleted` enum ('0', '1') NOT NULL DEFAULT '0',
+ `params` text NULL,
+ `paramsExample` text NUll,
+ `responseExample` text NUll,
+ `response` text NULL,
+ `commonParams` text NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT 0,
+ `addedDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT 0,
+ `editedDate` datetime NOT NULL,
+ `deleted` enum ('0', '1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
-- DROP TABLE IF EXISTS `zt_apispec`;
CREATE TABLE `zt_apispec`
(
- `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
- `doc` int UNSIGNED NOT NULL DEFAULT 0,
- `module` int UNSIGNED NOT NULL DEFAULT 0,
- `title` varchar(100) NOT NULL DEFAULT '',
- `path` varchar(255) NOT NULL DEFAULT '',
- `protocol` varchar(10) NOT NULL DEFAULT '',
- `method` varchar(10) NOT NULL DEFAULT '',
- `requestType` varchar(100) NOT NULL DEFAULT '',
- `responseType` varchar(100) NOT NULL DEFAULT '',
- `status` tinyint UNSIGNED NOT NULL DEFAULT 0,
- `owner` varchar(255) NOT NULl DEFAULT 0,
- `desc` text NULL,
+ `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
+ `doc` int UNSIGNED NOT NULL DEFAULT 0,
+ `module` int UNSIGNED NOT NULL DEFAULT 0,
+ `title` varchar(100) NOT NULL DEFAULT '',
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `protocol` varchar(10) NOT NULL DEFAULT '',
+ `method` varchar(10) NOT NULL DEFAULT '',
+ `requestType` varchar(100) NOT NULL DEFAULT '',
+ `responseType` varchar(100) NOT NULL DEFAULT '',
+ `status` tinyint UNSIGNED NOT NULL DEFAULT 0,
+ `owner` varchar(255) NOT NULl DEFAULT 0,
+ `desc` text NULL,
`version` smallint UNSIGNED NOT NULL DEFAULT 0,
- `params` text NULL,
- `response` text NULL,
- `addedBy` varchar(30) NOT NULL DEFAULT 0,
- `addedDate` datetime NULL,
+ `params` text NULL,
+ `response` text NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT 0,
+ `addedDate` datetime NULL,
PRIMARY KEY (`id`)
);
-- DROP TABLE IF EXISTS `zt_apistruct`;
create table `zt_apistruct`
(
- `id` int unsigned NOT NULL AUTO_INCREMENT,
- `lib` int UNSIGNED NOT NULL DEFAULT 0,
- `name` varchar(30) NOT NULL DEFAULT '',
- `type` varchar(50) NOT NULL DEFAULT '',
- `desc` varchar(255) NOT NULL DEFAULT '',
- `attribute` text NULL,
- `addedBy` varchar(30) NOT NULL DEFAULT 0,
- `addedDate` datetime NOT NULL,
- `editEdBy` varchar(30) NOT NULL DEFAULT 0,
- `editedDate` datetime NOT NULL,
+ `id` int unsigned NOT NULL AUTO_INCREMENT,
+ `lib` int UNSIGNED NOT NULL DEFAULT 0,
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `type` varchar(50) NOT NULL DEFAULT '',
+ `desc` varchar(255) NOT NULL DEFAULT '',
+ `version` smallint unsigned NOT NULL DEFAULT 0,
+ `attribute` text NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT 0,
+ `addedDate` datetime NOT NULL,
+ `editEdBy` varchar(30) NOT NULL DEFAULT 0,
+ `editedDate` datetime NOT NULL,
`deleted` enum ('0', '1') NOT NULL DEFAULT '0',
primary key (`id`)
);
--- DROP TABLE IF EXISTS `zt_api_const`;
-create table `zt_api_const`
+-- DROP TABLE IF EXISTS `zt_apistruct_spec`;
+create table `zt_apistruct_spec`
(
- `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
- `doclib` int UNSIGNED NOT NULL DEFAULT 0,
- `field` varchar(50) NOT NULL DEFAULT '',
- `scope` varchar(50) NOT NULL DEFAULT '',
- `type` varchar(20) NOT NULL DEFAULT '',
- `default` varchar(1000) NOT NULL DEFAULT '',
- `required` tinyint UNSIGNED NOT NULL DEFAULT 0,
- `desc` varchar(255) NOT NULL DEFAULT 0,
- `version` smallint UNSIGNED NOT NULL DEFAULT 0,
- `addedBy` varchar(30) NOT NULL DEFAULT 0,
- `addedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
- `editEdBy` varchar(30) NOT NULL DEFAULT 0,
- `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
- `deletedDate` datetime NULL,
- PRIMARY KEY (`id`)
-);
-
--- DROP TABLE IF EXISTS `zt_api_const_spec`;
-create table `zt_api_const_spec`
-(
- `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
- `doclib` int UNSIGNED NOT NULL DEFAULT 0,
- `field` varchar(50) NOT NULL DEFAULT '',
- `scope` varchar(50) NOT NULL DEFAULT '',
- `type` varchar(20) NOT NULL DEFAULT '',
- `default` varchar(1000) NOT NULL DEFAULT '',
- `required` tinyint UNSIGNED NOT NULL DEFAULT 0,
- `desc` varchar(255) NOT NULL DEFAULT 0,
- `version` smallint UNSIGNED NOT NULL DEFAULT 0,
- `addedBy` varchar(30) NOT NULL DEFAULT 0,
- `addedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
- PRIMARY KEY (`id`)
-);
+ `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(50) NOT NULL DEFAULT '',
+ `desc` varchar(255) NOT NULL DEFAULT '',
+ `attribute` text NULL,
+ `version` smallint unsigned NOT NULL DEFAULT 0,
+ `addedBy` varchar(30) NOT NULL DEFAULT 0,
+ `addedDate` datetime NOT NULL,
+ primary key (`id`)
+)
diff --git a/framework/base/control.class.php b/framework/base/control.class.php
index 2f676d34c9..ca72720315 100644
--- a/framework/base/control.class.php
+++ b/framework/base/control.class.php
@@ -181,9 +181,9 @@ class baseControl
* 2. set the pathes of current module, and load it's model class.
* 3. auto assign the $lang and $config to the view.
*
- * @param string $moduleName
- * @param string $methodName
- * @param string $appName
+ * @param string $moduleName
+ * @param string $methodName
+ * @param string $appName
* @access public
* @return void
*/
@@ -253,7 +253,7 @@ class baseControl
* 设置方法名。
* Set the method name.
*
- * @param string $methodName 方法名,如果为空,则从$app中获取。The method name, if empty, get it from $app.
+ * @param string $methodName 方法名,如果为空,则从$app中获取。The method name, if empty, get it from $app.
* @access public
* @return void
*/
@@ -266,8 +266,8 @@ class baseControl
* 加载指定模块的model文件。
* Load the model file of one module.
*
- * @param string $moduleName 模块名,如果为空,使用当前模块。The module name, if empty, use current module's name.
- * @param string $appName The app name, if empty, use current app's name.
+ * @param string $moduleName 模块名,如果为空,使用当前模块。The module name, if empty, use current module's name.
+ * @param string $appName The app name, if empty, use current app's name.
* @access public
* @return object|bool 如果没有model文件,返回false,否则返回model对象。If no model file, return false, else return the model object.
*/
@@ -365,8 +365,8 @@ class baseControl
* 设置视图文件:主视图文件,扩展视图文件, 站点扩展视图文件,以及钩子脚本。
* Set view files: the main file, extension view file, site extension view file and hook files.
*
- * @param string $moduleName module name
- * @param string $methodName method name
+ * @param string $moduleName module name
+ * @param string $methodName method name
* @access public
* @return string the view file
*/
@@ -404,7 +404,7 @@ class baseControl
* 获取某一个视图文件的扩展。
* Get the extension file of an view.
*
- * @param string $viewFile
+ * @param string $viewFile
* @access public
* @return string|bool If extension view file exists, return the path. Else return fasle.
*/
@@ -440,8 +440,8 @@ class baseControl
* 获取适用于当前方法的css:该模块公用的css + 当前方法的css + 扩展的css。
* Get css codes applied to current method: module common css + method css + extension css.
*
- * @param string $moduleName
- * @param string $methodName
+ * @param string $moduleName
+ * @param string $methodName
* @access public
* @return string
*/
@@ -507,7 +507,7 @@ class baseControl
/**
* Get extension css and extension css with lang.
*
- * @param array $files
+ * @param array $files
* @access public
* @return string
*/
@@ -559,8 +559,8 @@ class baseControl
* 获取适用于当前方法的js:该模块公用的js + 当前方法的js + 扩展的js。
* Get js codes applied to current method: module common js + method js + extension js.
*
- * @param string $moduleName
- * @param string $methodName
+ * @param string $moduleName
+ * @param string $methodName
* @access public
* @return string
*/
@@ -609,8 +609,8 @@ class baseControl
* 向$view传递一个变量。
* Assign one var to the view vars.
*
- * @param string $name the name.
- * @param mixed $value the value.
+ * @param string $name the name.
+ * @param mixed $value the value.
* @access public
* @return void
*/
@@ -635,8 +635,8 @@ class baseControl
* 渲染视图文件。
* Parse view file.
*
- * @param string $moduleName module name, if empty, use current module.
- * @param string $methodName method name, if empty, use current method.
+ * @param string $moduleName module name, if empty, use current module.
+ * @param string $methodName method name, if empty, use current method.
* @access public
* @return string the parsed result.
*/
@@ -655,8 +655,8 @@ class baseControl
* 渲染json格式。
* Parse json format.
*
- * @param string $moduleName module name
- * @param string $methodName method name
+ * @param string $moduleName module name
+ * @param string $methodName method name
* @access public
* @return void
*/
@@ -683,8 +683,8 @@ class baseControl
* 默认渲染方法,适用于viewType = html的时候。
* Default parse method when viewType != json, like html.
*
- * @param string $moduleName module name
- * @param string $methodName method name
+ * @param string $moduleName module name
+ * @param string $methodName method name
* @access public
* @return void
*/
@@ -694,7 +694,7 @@ class baseControl
* 设置视图文件。(PHP7有一个bug,不能直接$viewFile = $this->setViewFile())。
* Set viewFile. (Can't assign $viewFile = $this->setViewFile() directly because one php7's bug.)
*/
- $results = $this->setViewFile($moduleName, $methodName);
+ $results = $this->setViewFile($moduleName, $methodName);
$viewFile = $results;
if(is_array($results)) extract($results);
@@ -740,9 +740,9 @@ class baseControl
* Get the output of one module's one method as a string, thus in one module's method, can fetch other module's content.
* If the module name is empty, then use the current module and method. If set, use the user defined module and method.
*
- * @param string $moduleName module name.
- * @param string $methodName method name.
- * @param array $params params.
+ * @param string $moduleName module name.
+ * @param string $methodName method name.
+ * @param array $params params.
* @access public
* @return string the parsed html.
*/
@@ -868,8 +868,8 @@ class baseControl
* 向浏览器输出内容。
* Print the content of the view.
*
- * @param string $moduleName module name
- * @param string $methodName method name
+ * @param string $moduleName module name
+ * @param string $methodName method name
* @access public
* @return void
*/
@@ -883,8 +883,8 @@ class baseControl
* 直接输出data数据,通常用于ajax请求中。
* Send data directly, for ajax requests.
*
- * @param mixed $data
- * @param string $type
+ * @param mixed $data
+ * @param string $type
* @access public
* @return void
*/
@@ -938,21 +938,23 @@ class baseControl
/**
* return error json
- * @param mixed $error
+ *
+ * @param mixed $error
+ * @return void
* @author thanatos thanatos915@163.com
*/
public function sendError($error)
{
$this->send([
- 'result' => 'fail',
- 'message' => $error,
- ]);
+ 'result' => 'fail',
+ 'message' => $error,
+ ]);
}
/**
* send success json
*
- * @param array $data
+ * @param array $data
* @return void
* @author thanatos thanatos915@163.com
*/
@@ -967,11 +969,11 @@ class baseControl
* 创建一个模块方法的链接。
* Create a link to one method of one module.
*
- * @param string $moduleName module name
- * @param string $methodName method name
- * @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
- * @param string $viewType the view type
- * @param string $onlybody remove header and footer or not in iframe
+ * @param string $moduleName module name
+ * @param string $methodName method name
+ * @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
+ * @param string $viewType the view type
+ * @param string $onlybody remove header and footer or not in iframe
* @access public
* @return string the link string.
*/
@@ -985,9 +987,9 @@ class baseControl
* 创建当前模块的一个方法链接。
* Create a link to the inner method of current module.
*
- * @param string $methodName method name
- * @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
- * @param string $viewType the view type
+ * @param string $methodName method name
+ * @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
+ * @param string $viewType the view type
* @access public
* @return string the link string.
*/
@@ -1000,7 +1002,7 @@ class baseControl
* 重定向到另一个页面。
* Location to another page.
*
- * @param string $url the target url.
+ * @param string $url the target url.
* @access public
* @return void
*/
diff --git a/module/api/config.php b/module/api/config.php
index a3670ada66..93e7e24660 100644
--- a/module/api/config.php
+++ b/module/api/config.php
@@ -15,7 +15,12 @@ $config->api->create->requiredFields = 'lib,title,path';
$config->api->edit = new stdclass();
$config->api->edit->requiredFields = 'lib,title,path';
+$config->api->publish = new stdclass();
+$config->api->publish->requiredFields = 'version';
+
$config->api->editor = new stdclass();
$config->api->editor->createlib = array('id' => 'desc', 'tools' => 'simpleTools');
$config->api->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
$config->api->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools');
+$config->api->editor->publish = array('id' => 'desc', 'tools' => 'simpleTools');
+
diff --git a/module/api/control.php b/module/api/control.php
old mode 100644
new mode 100755
index 5bc2ee2f02..cc74e5d890
--- a/module/api/control.php
+++ b/module/api/control.php
@@ -76,6 +76,38 @@ class api extends control
$this->display();
}
+ /**
+ * Publish a api doc lib.
+ *
+ * @param $libID
+ * @access public
+ * @return void
+ */
+ public function publish($libID)
+ {
+ $lib = $this->doc->getLibById($libID);
+
+ if(!empty($_POST)) {
+ $data = fixer::input('post')
+ ->add('lib', $libID)
+ ->add('addedBy', $this->app->user->account)
+ ->add('addedDate', helper::now())
+ ->get();
+
+ // check version is exist.
+ if($this->api->getReleaseByVersion($data->version))
+ {
+ return $this->sendError($this->lang->api->noUniqueVersion);
+ }
+ $this->api->publishLib($data);
+ if(dao::isError()) return $this->sendError(dao::getError());
+ return $this->sendSuccess(array('locate' => $this->createLink('api', 'index', "libID=$libID")));
+ }
+
+ $this->view->title = $this->lang->api->publish . $lib->name;
+ $this->display();
+ }
+
/**
* Api doc global struct page.
*
@@ -159,6 +191,7 @@ class api extends control
*/
public function editStruct($libID, $structID)
{
+ common::setMenuVars('doc', $libID);
$struct = $this->api->getStructByID($structID);
if(!empty($_POST))
@@ -321,7 +354,6 @@ class api extends control
return $this->sendError(dao::getError());
}
- $this->action->create('api', $apiID, 'Edited');
return $this->sendSuccess(array('locate' => helper::createLink('api', 'index', "libID=0&moduleID=0&apiID=$apiID")));
}
@@ -345,9 +377,9 @@ class api extends control
'value' => $key,
];
}
- $this->view->typeOptions = $options;
- $this->view->user = $this->app->user->account;
- $this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');;
+ $this->view->typeOptions = $options;
+ $this->view->user = $this->app->user->account;
+ $this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');;
$this->view->moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($api->lib, 'api', $startModuleID = 0);
$this->view->moduleID = $api->module ? (int)$api->module : (int)$this->cookie->lastDocModule;
$this->view->example = $example;
@@ -517,6 +549,7 @@ class api extends control
// global struct link
$menu = '';
+ $menu .= html::a(helper::createLink('api', 'publish', "libID=$libID"), $this->lang->api->publish, '', 'class="btn btn-link iframe"');
// page of index menu
if(intval($libID) > 0)
{
diff --git a/module/api/js/edit.js b/module/api/js/edit.js
index 090909f249..de0f1f2e55 100644
--- a/module/api/js/edit.js
+++ b/module/api/js/edit.js
@@ -3,9 +3,9 @@ var app = new Vue({
data: {
header: [],
queryP: [],
- body: [],
- params: "",
+ body: "",
response: "",
+ params: "",
defaultHeader: [
{ field: '', required: '', desc: '' }
],
@@ -33,7 +33,7 @@ var app = new Vue({
},
deep: true
},
- params: {
+ body: {
handler() {
this.setParams()
},
@@ -42,7 +42,7 @@ var app = new Vue({
},
methods: {
changeAttr(val) {
- this.params = JSON.stringify(val)
+ this.body = val
},
changeRes(val) {
this.response = JSON.stringify(val)
diff --git a/module/api/js/editstruct.js b/module/api/js/editstruct.js
index df2e265e2e..87705ecba6 100644
--- a/module/api/js/editstruct.js
+++ b/module/api/js/editstruct.js
@@ -1,3 +1,4 @@
+console.log(struct)
new Vue({
el: '#app',
data: function () {
diff --git a/module/api/js/publish.js b/module/api/js/publish.js
new file mode 100644
index 0000000000..4215cd9cf4
--- /dev/null
+++ b/module/api/js/publish.js
@@ -0,0 +1,13 @@
+$(document).ready(function()
+{
+ $('#apiForm').ajaxForm({
+ success: (data) => {
+ if (data.result == 'success') {
+ if (data.locate) {
+ window.parent.location.href = data.locate
+ }
+ $.zui.closeModal()
+ }
+ }
+ })
+});
\ No newline at end of file
diff --git a/module/api/lang/zh-cn.php b/module/api/lang/zh-cn.php
old mode 100644
new mode 100755
index 855df624f5..ba4ad29fa1
--- a/module/api/lang/zh-cn.php
+++ b/module/api/lang/zh-cn.php
@@ -14,6 +14,7 @@ $lang->api->common = 'API接口';
$lang->api->getModel = '超级model调用接口';
$lang->api->sql = 'SQL查询接口';
+$lang->api->publish = '发布';
$lang->api->edit = '编辑';
$lang->api->delete = '删除';
$lang->api->position = '位置';
@@ -29,6 +30,8 @@ $lang->api->noParam = 'GET方式调试不需要输入参数,';
$lang->api->noModule = '接口库下没有目录,请先维护目录';
$lang->api->post = 'POST方式调试请参照页面表单';
$lang->api->noUniqueName = '接口库名已存在。';
+$lang->api->noUniqueVersion = '版本已存在。';
+$lang->api->version = '版本';
$lang->api->createLib = '创建接口库';
$lang->api->createStruct = '创建数据结构';
$lang->api->editStruct = '修改数据结构';
diff --git a/module/api/model.php b/module/api/model.php
index 246bfb5235..08ce11a835 100644
--- a/module/api/model.php
+++ b/module/api/model.php
@@ -28,6 +28,59 @@ class apiModel extends model
/* Params. */
const PARAMS_TYPE_CUSTOM = 'custom';
+ /**
+ * @param object $data
+ * @access public
+ * @return int
+ */
+ public function publishLib($data)
+ {
+ /* Get lib modules list. */
+ $modules = $this->dao->select('*')->from(TABLE_MODULE)
+ ->where('root')->eq((int)$data->lib)
+ ->andWhere('type')->eq('api')
+ ->andWhere('deleted')->eq(0)
+ ->orderBy('grade desc, `order`')
+ ->fetchAll();
+
+ /* Get all api list. */
+ $apis = $this->dao->select('id,version')->from(TABLE_API)
+ ->where('lib')->eq($data->lib)
+ ->andWhere('deleted')->eq(0)
+ ->fetchAll();
+
+ /* Get all struct list. */
+ $structs = $this->dao->select('id,version')->from(TABLE_APISTRUCT)
+ ->where('lib')->eq($data->lib)
+ ->andWhere('deleted')->eq(0)
+ ->fetchAll();
+
+ $snap = array('modules' => $modules, 'apis' => $apis, 'structs' => $structs);
+
+ $data->snap = json_encode($snap);
+ $this->dao->insert(TABLE_API_LIB_RELEASE)->data($data)
+ ->autoCheck()
+ ->batchCheck($this->config->api->publish->requiredFields, 'notempty')
+ ->exec();
+
+ return dao::isError() ? false : $this->dao->lastInsertID();
+ }
+
+ /**
+ * Delete a lib publish.
+ *
+ * @param int $id
+ * @access public
+ * @return void
+ */
+ public function deletePublish($id)
+ {
+ $this->dao->update(TABLE_API_LIB_RELEASE)
+ ->set('deleted')->eq(1)
+ ->where('id')->eq($id)
+ ->exec();
+ }
+
/**
* Create an api doc.
*
@@ -54,11 +107,24 @@ class apiModel extends model
*/
public function createStruct($data)
{
+ $data->version = 1;
$this->dao->insert(TABLE_APISTRUCT)->data($data)
->autoCheck()
->batchCheck($this->config->api->struct->requiredFields, 'notempty')
->exec();
+ /* Create a struct version. */
+ $version = array(
+ 'name' => $data->name,
+ 'type' => $data->type,
+ 'desc' => $data->desc,
+ 'version' => $data->version,
+ 'attribute' => $data->attribute,
+ 'addedBy' => $data->addedBy,
+ 'addedDate' => $data->addedDate
+ );
+ $this->dao->insert(TABLE_APISTRUCT_SPEC)->data($version)->exec();
+
return dao::isError() ? 0 : $this->dao->lastInsertID();
}
@@ -77,6 +143,8 @@ class apiModel extends model
unset($data->addedBy);
unset($data->addedDate);
+ $data->version = $old->version + 1;
+
$this->dao->update(TABLE_APISTRUCT)
->data($data)->autoCheck()
->batchCheck($this->config->api->struct->requiredFields, 'notempty')
@@ -85,6 +153,18 @@ class apiModel extends model
if(dao::isError()) return false;
+ /* Create a struct version */
+ $version = array(
+ 'name' => $data->name,
+ 'type' => $data->type,
+ 'desc' => $data->desc,
+ 'version' => $data->version,
+ 'attribute' => $data->attribute,
+ 'addedBy' => $data->editedBy,
+ 'addedDate' => $data->editedDate
+ );
+ $this->dao->insert(TABLE_APISTRUCT_SPEC)->data($version)->exec();
+
return common::createChanges($old, $data);
}
@@ -170,6 +250,23 @@ class apiModel extends model
return $model;
}
+ /**
+ * Get release by version.
+ *
+ * @param $version
+ * @access public
+ * @return object
+ */
+ public function getReleaseByVersion($version)
+ {
+ $model = $this->dao->select('*')
+ ->from(TABLE_API_LIB_RELEASE)
+ ->where('version')->eq($version)
+ ->fetch();
+ if($model) $model->snap = json_decode(htmlspecialchars_decode($model->snap), true);
+ return $model;
+ }
+
/**
* Get api doc by id.
@@ -249,7 +346,7 @@ class apiModel extends model
public static function getApiStatusText($status)
{
global $lang;
- switch($status)
+ switch ($status)
{
case static::STATUS_DOING:
{
@@ -432,12 +529,12 @@ class apiModel extends model
}
else
{
- while($row = $stmt->fetch()) $rows[$row->$keyField] = $row;
+ while ($row = $stmt->fetch()) $rows[$row->$keyField] = $row;
}
$result['status'] = 'success';
$result['data'] = $rows;
- } catch(PDOException $e)
+ } catch (PDOException $e)
{
$result['status'] = 'fail';
$result['message'] = $e->getMessage();
diff --git a/module/api/view/content.html.php b/module/api/view/content.html.php
index b858b869f9..7506b0de5d 100644
--- a/module/api/view/content.html.php
+++ b/module/api/view/content.html.php
@@ -17,10 +17,10 @@
@@ -35,7 +35,7 @@
$deleteURL = $this->createLink('api', 'delete', "apiID=$api->id&confirm=yes");
echo html::a("javascript:ajaxDeleteApi(\"$deleteURL\", confirmDelete)", '', '', "title='{$lang->api->delete}' class='btn btn-link'");
}
- ;?>
+ ;?>
@@ -43,121 +43,133 @@
title;?>
desc;?>
params['header']):?>
- api->header;?>
-
-
-
- | api->req->name;?> |
- api->req->type;?> |
- api->req->required;?> |
- api->req->desc;?> |
-
-
-
- params['header'] as $param):?>
-
- |
-
- String
- |
- |
- |
-
-
-
-
+ api->header;?>
+
+
+
+ | api->req->name;?> |
+ api->req->type;?> |
+ api->req->required;?> |
+ api->req->desc;?> |
+
+
+
+ params['header'] as $param):?>
+
+ |
+
+ String
+ |
+ |
+ |
+
+
+
+
params['query']):?>
- api->query;?>
-
-
-
- | api->req->name;?> |
- api->req->type;?> |
- api->req->required;?> |
- api->req->desc;?> |
-
-
-
- params['query'] as $param):?>
-
- |
-
- String
- |
- |
- |
-
-
-
-
+ api->query;?>
+
+
+
+ | api->req->name;?> |
+ api->req->type;?> |
+ api->req->required;?> |
+ api->req->desc;?> |
+
+
+
+ params['query'] as $param):?>
+
+ |
+
+ String
+ |
+ |
+ |
+
+
+
+
';
- $str .= ''. $data['field'] .' | ';
- $str .= ''. $data['paramsType'] .' | ';
+ function parseTree($data, $level = 0)
+ {
+ $str = '';
+ $field = '';
+ for($i=0; $i < $level; $i++)
+ {
+ $field .= ' ';
+ }
+ $field .= $data['field'];
+ $str .= '| ' . $field . ' | ';
+ $str .= '' . $data['paramsType'] . ' | ';
$require = $data['required'] ? '是' : '否';
- $str .= ''. $require .' | ';
- $str .= ''. $data['desc'] .' | ';
- $str .= '
';
- if(isset($data['children']) && count($data['children']) > 0) {
- foreach($data['children'] as $item) {
- $str .= parseTree($item);
+ $str .= '' . $require . ' | ';
+ $str .= '' . $data['desc'] . ' | ';
+ $str .= '';
+ if(isset($data['children']) && count($data['children']) > 0)
+ {
+ $level++;
+ foreach($data['children'] as $item)
+ {
+ $str .= parseTree($item, $level);
}
}
return $str;
}
?>
params['params']):?>
- api->params;?>
-
-
-
- | api->req->name;?> |
- api->req->type;?> |
- api->req->required;?> |
- api->req->desc;?> |
-
-
-
- params['params'] as $item) {
- echo parseTree($item);
- }
- ?>
-
-
+ api->params;?>
+
+
+
+ | api->req->name;?> |
+ api->req->type;?> |
+ api->req->required;?> |
+ api->req->desc;?> |
+
+
+
+ params['params'] as $item)
+ {
+ echo parseTree($item);
+ }
+ ?>
+
+
paramsExample):?>
- api->paramsExample;?>
- paramsExample;?>
+ api->paramsExample;?>
+ paramsExample;?>
response):?>
- api->response;?>
-
-
-
- | api->req->name;?> |
- api->req->type;?> |
- api->req->required;?> |
- api->req->desc;?> |
-
-
-
- response as $item) {
- echo parseTree($item);
- }
- ?>
-
-
+ api->response;?>
+
+
+
+ | api->req->name;?> |
+ api->req->type;?> |
+ api->req->required;?> |
+ api->req->desc;?> |
+
+
+
+ response as $item)
+ {
+ echo parseTree($item);
+ }
+ ?>
+
+
responseExample):?>
- api->responseExample;?>
- responseExample;?>
+ api->responseExample;?>
+ responseExample;?>
@@ -166,7 +178,7 @@
createLink('action', 'comment', "objectType=doc&objectID=$api->id");
- ;?>
+ ;?>
@@ -180,30 +192,30 @@
-
- | api->lib;?> |
- libName;?> |
-
-
- | doc->module;?> |
- moduleName ? $api->moduleName : '/';?> |
-
-
- | doc->addedDate;?> |
- addedDate;?> |
-
-
- | api->owner;?> |
- owner, '');?> |
-
-
- | doc->editedBy;?> |
- editedBy, '');?> |
-
-
- | doc->editedDate;?> |
- editedDate;?> |
-
+
+ | api->lib;?> |
+ libName;?> |
+
+
+ | doc->module;?> |
+ moduleName ? $api->moduleName : '/';?> |
+
+
+ | doc->addedDate;?> |
+ addedDate;?> |
+
+
+ | api->owner;?> |
+ owner, '');?> |
+
+
+ | doc->editedBy;?> |
+ editedBy, '');?> |
+
+
+ | doc->editedDate;?> |
+ editedDate;?> |
+
diff --git a/module/api/view/publish.html.php b/module/api/view/publish.html.php
new file mode 100644
index 0000000000..8e34f1dff9
--- /dev/null
+++ b/module/api/view/publish.html.php
@@ -0,0 +1,44 @@
+
+ * @package doc
+ * @version $Id: createlib.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
+ * @link http://www.zentao.net
+ */
+?>
+
+
+
+
+
+
+
+
+
api->publish;?>
+
+
+
+
+
+
+