浏览代码

新增项目归档功能

star7th 8 年之前
父节点
当前提交
2b9486ff1a

+ 15 - 0
Application/Home/Controller/UpdateController.class.php

@@ -170,6 +170,21 @@ class UpdateController extends BaseController {
         )";
         )";
         D("UserToken")->execute($sql);
         D("UserToken")->execute($sql);
 
 
+        //item表增加is_archived字段
+        $columns = M("Item")->getDbFields();
+        if ($columns) {
+            $has_it = 0 ;//是否存在该字段
+            foreach ($columns as $key => $value) {
+                if ($value == 'is_archived') {
+                    $has_it = 1 ;
+                }
+            }
+            if ($has_it === 0) {
+                $sql = "ALTER TABLE ".C('DB_PREFIX')."item ADD is_archived INT( 1 ) NOT NULL DEFAULT '0'  ;";
+                D("Item")->execute($sql);
+            }
+        }
+
 
 
         echo 'OK!';
         echo 'OK!';
     }
     }

+ 28 - 254
Application/Home/View/Item/setting.html

@@ -82,6 +82,9 @@
         <p><button  id="attorn-btn" class="btn ">转让</button></p>
         <p><button  id="attorn-btn" class="btn ">转让</button></p>
         <p><small>你可以将项目转让给他人</small></p>
         <p><small>你可以将项目转让给他人</small></p>
         <hr>
         <hr>
+        <p><button  id="archive-item-btn" class="btn ">归档</button></p>
+        <p><small>归档后,项目将变为只读,无法再修改/新增内容</small></p>
+        <hr>
         <p><button  id="delete-item-btn" class="btn btn-danger">删除</button></p>
         <p><button  id="delete-item-btn" class="btn btn-danger">删除</button></p>
         <p><small>删除后将不可恢复</small></p>
         <p><small>删除后将不可恢复</small></p>
         <hr> 
         <hr> 
@@ -232,260 +235,31 @@
   </div>
   </div>
 </div>
 </div>
 
 
+<!-- 归档项目的弹窗 -->
+<div id="archive-item-modal" class="modal hide fade">
+  <div class="">
+    <div class="modal-header">
+      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+      <h4>归档项目</h4>
+    </div>
+    <div class="">
+      <form class="form-horizontal">
+        <div class="control-group">
+          <label class="control-label" for="inputEmail">{$Think.Lang.verify_identity}</label>
+          <div class="controls">
+            <input type="password" id="archive_item_password" placeholder="{$Think.Lang.your_password}" value="">
+          </div>
+        </div>
+        <div class="control-group">
+          <div class="controls">
+            <button type="submit" class="btn" id="archive_item_save">归档</button>
+          </div>
+        </div>
+      </form>
 
 
-<include file="Common/footer" />
-<script type="text/javascript">
-$(function(){
-  $('a[data-toggle="tab"]').on('shown', function (e) {
-          //e.target // activated tab
-          //e.relatedTarget // previous tab
-          console.log($(e.target).attr("href"));
-        })
-
-    //展示第一个tab
-    $("#myTab a:first").tab("show");
-
-    var item_id = $("#item_id").val() ;
-
-    
-
-    //获取基础信息
-    get_base_info() ;
-    function get_base_info(){
-      $.get(
-        DocConfig.server+"/api/item/detail",
-        {"item_id":item_id},
-        function(data){
-          if (data.error_code === 0 ) {
-            //console.log(data.data);
-            $("#item_name").val(data.data.item_name);
-            $("#item_description").val(data.data.item_description);
-            $("#item_domain").val(data.data.item_domain);
-            $("#password").val(data.data.password);
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-    }
-
-    //保存项目基础信息
-    $("#item_save").click(function(){
-
-      var item_name = $("#item_name").val();
-      var item_description = $("#item_description").val();
-      var item_domain = $("#item_domain").val();
-      var password = $("#password").val();
-      $.post(
-        DocConfig.server+"/api/item/update",
-        {"item_id":item_id,"item_name":item_name,"item_description":item_description,"item_domain":item_domain,"password":password},
-        function(data){
-          if (data.error_code === 0 ) {
-            layer.msg('保存成功',{"time":1000});
-            get_base_info() ;
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-        );
-
-      return false;
-    });
-
-    //点击转让按钮,弹出modal
-    $("#attorn-btn").click(function(){
-      $('#attorn-modal').modal({
-        "backdrop":'static'
-      });
-    });
-
-    //监听转让
-    $("#attorn_save").click(function(){
-      var username = $("#attorn_username").val();
-      var password = $("#attorn_password").val();
-      $.post(
-        DocConfig.server+"/api/item/attorn",
-        {"username": username ,"item_id": item_id , "password": password  },
-        function(data){
-          if (data.error_code == 0) {
-            layer.msg('转让成功,正在跳转回主页..',{"time":3000});
-            //跳转
-            setTimeout(function(){
-              window.location.href="?s=/home/item/index";
-            },3000)
-            
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-      return false;
-    });
-
-    //删除项目
-    $("#delete-item-btn").click(function(){
-      $('#delete-item-modal').modal({
-        "backdrop":'static'
-      });
-    });
-
-    //监听删除
-    $("#delete_item_save").click(function(){
-      var password = $("#delete_item_password").val();
-      $.post(
-        DocConfig.server+"/api/item/delete",
-        {"item_id": item_id , "password": password  },
-        function(data){
-          if (data.error_code == 0) {
-            layer.msg('删除成功,正在跳转回主页..',{"time":3000});
-            //跳转
-            setTimeout(function(){
-              window.location.href="?s=/home/item/index";
-            },3000)
-            
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-      return false;
-    });
-
-    //点击添加成员,弹出modal
-    $("#add-member-btn").click(function(){
-      $('#member-modal').modal({
-        "backdrop":'static'
-      });
-    });
-
-
-    //获取成员列表
-    get_member_list();
-    function get_member_list(){
-      $.get(
-        DocConfig.server+"/api/member/getList",
-        {"item_id":item_id},
-        function(data){
-          $("#member-list").html('');
-          if (data.error_code === 0 ) {
-            //console.log(data.data);
-            var json = data.data ;
-            if (json.length > 0 ) {
-              for (var i = 0; i < json.length; i++) {
-                var html = '<tr>'
-                  +'<td><div class="type-parent">'+json[i].username+'</div></td>'
-                  +'<td><div class="type-parent">'+json[i].addtime+'</div></td>'
-                  +'<td><div class="type-parent">'+json[i].member_group+'</div></td>'
-                  +'<td><a href="#" class="member-delete" data-id="'+json[i].item_member_id+'">删除</a></td>'
-                +'</tr>';
-                $("#member-list").append(html);
-                
-              };
-
-            };
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-    }
-
-    //添加成员
-    $("#member_save").click(function(){
-      var username = $("#member_username").val();
-      var member_group_id = $("#member_group_id").is(':checked') ? 0 : 1 ;
-      $.post(
-        DocConfig.server+"/api/member/save",
-        {"item_id": item_id , "username": username ,"member_group_id":member_group_id  },
-        function(data){
-          if (data.error_code == 0) {
-            $('#member-modal').modal('hide');
-            $("#member_username").val('');
-            $("#member_group_id").removeAttr("checked");
-            layer.msg('添加成功',{"time":1000});
-            get_member_list();
-            
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-      return false;
-    });
-
-    //删除成员
-    $("#member-list").on("click",'.member-delete',function(){
-      var item_member_id = $(this).data("id");
-      layer.confirm("确定删除成员吗",{},function(){
-          $.post(
-            DocConfig.server+"/api/member/delete",
-            {"item_id": item_id , "item_member_id": item_member_id  },
-            function(data){
-              if (data.error_code == 0) {
-                layer.msg('删除成功',{"time":1000});
-                get_member_list();
-                
-              }else{
-                layer.alert(data.error_message);
-              }
-            },
-            "json"
-
-            );
-      });
-      return false;
-    })
-
-    //获取item api_key信息
-    get_api_info() ;
-    function get_api_info(){
-      $.get(
-        DocConfig.server+"/api/item/getKey",
-        {"item_id":item_id},
-        function(data){
-          if (data.error_code === 0 ) {
-            //console.log(data.data);
-            $("#api_key").html(data.data.api_key);
-            $("#api_token").html(data.data.api_token);
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-    }
-
-    $("#reset_api_token").click(function(){
-      $.post(
-        DocConfig.server+"/api/item/resetKey",
-        {"item_id":item_id},
-        function(data){
-          if (data.error_code === 0 ) {
-            //console.log(data.data);
-            $("#api_key").html(data.data.api_key);
-            $("#api_token").html(data.data.api_token);
-          }else{
-            layer.alert(data.error_message);
-          }
-        },
-        "json"
-
-        );
-      return false;
-    });
+    </div>
+  </div>
 
 
-  });
-</script>
+<include file="Common/footer" />
+<script src="__PUBLIC__/js/item/setting.js?v=1"></script>
 
 

+ 2 - 2
Application/Home/View/Item/show_regular.html

@@ -92,7 +92,7 @@
       <!-- 新建栏 -->
       <!-- 新建栏 -->
       <div class="doc-left-newbar">
       <div class="doc-left-newbar">
 
 
-        <if condition="$ItemPermn">
+        <if condition="$ItemPermn && !$item['is_archived']">
           <div><a href="{:U('Home/Page/edit',array('item_id'=>$item['item_id'],'type'=>'new'))}" id="new-like"><i class="icon-plus"></i>&nbsp;{$Think.Lang.new_page}</a></div>
           <div><a href="{:U('Home/Page/edit',array('item_id'=>$item['item_id'],'type'=>'new'))}" id="new-like"><i class="icon-plus"></i>&nbsp;{$Think.Lang.new_page}</a></div>
           <div><a href="{:U('Home/Catalog/edit',array('item_id'=>$item['item_id']))}" id="dir-like" ><i class="icon-folder-open"></i>{$Think.Lang.new_catalog}</a></div>
           <div><a href="{:U('Home/Catalog/edit',array('item_id'=>$item['item_id']))}" id="dir-like" ><i class="icon-folder-open"></i>{$Think.Lang.new_catalog}</a></div>
 
 
@@ -112,7 +112,7 @@
       <div class='page-edit-link pull-right hide'>
       <div class='page-edit-link pull-right hide'>
         <ul class="inline">
         <ul class="inline">
             <li><a class="btn btn-link" href="" id="share-page" title="{$Think.Lang.share_address_to_your_friends}">{$Think.Lang.share}</a></li>
             <li><a class="btn btn-link" href="" id="share-page" title="{$Think.Lang.share_address_to_your_friends}">{$Think.Lang.share}</a></li>
-          <if condition="$ItemPermn">
+          <if condition="$ItemPermn && !$item['is_archived']">
                   <li><a class="btn btn-link" href="" id="edit-link" title="{$Think.Lang.edit_interface}">{$Think.Lang.edit}</a></li>
                   <li><a class="btn btn-link" href="" id="edit-link" title="{$Think.Lang.edit_interface}">{$Think.Lang.edit}</a></li>
             <li>
             <li>
               <div class="btn-group">
               <div class="btn-group">

+ 279 - 0
Public/js/item/setting.js

@@ -0,0 +1,279 @@
+$(function(){
+  $('a[data-toggle="tab"]').on('shown', function (e) {
+          //e.target // activated tab
+          //e.relatedTarget // previous tab
+          console.log($(e.target).attr("href"));
+        })
+
+    //展示第一个tab
+    $("#myTab a:first").tab("show");
+
+    var item_id = $("#item_id").val() ;
+
+    
+
+    //获取基础信息
+    get_base_info() ;
+    function get_base_info(){
+      $.get(
+        DocConfig.server+"/api/item/detail",
+        {"item_id":item_id},
+        function(data){
+          if (data.error_code === 0 ) {
+            //console.log(data.data);
+            $("#item_name").val(data.data.item_name);
+            $("#item_description").val(data.data.item_description);
+            $("#item_domain").val(data.data.item_domain);
+            $("#password").val(data.data.password);
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+    }
+
+    //保存项目基础信息
+    $("#item_save").click(function(){
+
+      var item_name = $("#item_name").val();
+      var item_description = $("#item_description").val();
+      var item_domain = $("#item_domain").val();
+      var password = $("#password").val();
+      $.post(
+        DocConfig.server+"/api/item/update",
+        {"item_id":item_id,"item_name":item_name,"item_description":item_description,"item_domain":item_domain,"password":password},
+        function(data){
+          if (data.error_code === 0 ) {
+            layer.msg('保存成功',{"time":1000});
+            get_base_info() ;
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+        );
+
+      return false;
+    });
+
+    //点击转让按钮,弹出modal
+    $("#attorn-btn").click(function(){
+      $('#attorn-modal').modal({
+        "backdrop":'static'
+      });
+    });
+
+    //监听转让
+    $("#attorn_save").click(function(){
+      var username = $("#attorn_username").val();
+      var password = $("#attorn_password").val();
+      $.post(
+        DocConfig.server+"/api/item/attorn",
+        {"username": username ,"item_id": item_id , "password": password  },
+        function(data){
+          if (data.error_code == 0) {
+            layer.msg('转让成功,正在跳转回主页..',{"time":3000});
+            //跳转
+            setTimeout(function(){
+              window.location.href="?s=/home/item/index";
+            },3000)
+            
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+      return false;
+    });
+
+    //删除项目
+    $("#delete-item-btn").click(function(){
+      $('#delete-item-modal').modal({
+        "backdrop":'static'
+      });
+    });
+
+    //监听删除
+    $("#delete_item_save").click(function(){
+      var password = $("#delete_item_password").val();
+      $.post(
+        DocConfig.server+"/api/item/delete",
+        {"item_id": item_id , "password": password  },
+        function(data){
+          if (data.error_code == 0) {
+            layer.msg('删除成功,正在跳转回主页..',{"time":3000});
+            //跳转
+            setTimeout(function(){
+              window.location.href="?s=/home/item/index";
+            },3000)
+            
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+      return false;
+    });
+
+    //点击添加成员,弹出modal
+    $("#add-member-btn").click(function(){
+      $('#member-modal').modal({
+        "backdrop":'static'
+      });
+    });
+
+
+    //获取成员列表
+    get_member_list();
+    function get_member_list(){
+      $.get(
+        DocConfig.server+"/api/member/getList",
+        {"item_id":item_id},
+        function(data){
+          $("#member-list").html('');
+          if (data.error_code === 0 ) {
+            //console.log(data.data);
+            var json = data.data ;
+            if (json.length > 0 ) {
+              for (var i = 0; i < json.length; i++) {
+                var html = '<tr>'
+                  +'<td><div class="type-parent">'+json[i].username+'</div></td>'
+                  +'<td><div class="type-parent">'+json[i].addtime+'</div></td>'
+                  +'<td><div class="type-parent">'+json[i].member_group+'</div></td>'
+                  +'<td><a href="#" class="member-delete" data-id="'+json[i].item_member_id+'">删除</a></td>'
+                +'</tr>';
+                $("#member-list").append(html);
+                
+              };
+
+            };
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+    }
+
+    //添加成员
+    $("#member_save").click(function(){
+      var username = $("#member_username").val();
+      var member_group_id = $("#member_group_id").is(':checked') ? 0 : 1 ;
+      $.post(
+        DocConfig.server+"/api/member/save",
+        {"item_id": item_id , "username": username ,"member_group_id":member_group_id  },
+        function(data){
+          if (data.error_code == 0) {
+            $('#member-modal').modal('hide');
+            $("#member_username").val('');
+            $("#member_group_id").removeAttr("checked");
+            layer.msg('添加成功',{"time":1000});
+            get_member_list();
+            
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+      return false;
+    });
+
+    //删除成员
+    $("#member-list").on("click",'.member-delete',function(){
+      var item_member_id = $(this).data("id");
+      layer.confirm("确定删除成员吗",{},function(){
+          $.post(
+            DocConfig.server+"/api/member/delete",
+            {"item_id": item_id , "item_member_id": item_member_id  },
+            function(data){
+              if (data.error_code == 0) {
+                layer.msg('删除成功',{"time":1000});
+                get_member_list();
+                
+              }else{
+                layer.alert(data.error_message);
+              }
+            },
+            "json"
+
+            );
+      });
+      return false;
+    });
+
+    //归档项目
+    $("#archive-item-btn").click(function(){
+      $('#archive-item-modal').modal({
+        "backdrop":'static'
+      });
+    });
+
+    //监听归档
+    $("#archive_item_save").click(function(){
+      var password = $("#archive_item_password").val();
+      $.post(
+        DocConfig.server+"/api/item/archive",
+        {"item_id": item_id , "password": password  },
+        function(data){
+          if (data.error_code == 0) {
+            layer.msg('归档成功',{"time":3000});
+            $('#archive-item-modal').modal('hide');
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+      return false;
+    });
+
+    //获取item api_key信息
+    get_api_info() ;
+    function get_api_info(){
+      $.get(
+        DocConfig.server+"/api/item/getKey",
+        {"item_id":item_id},
+        function(data){
+          if (data.error_code === 0 ) {
+            //console.log(data.data);
+            $("#api_key").html(data.data.api_key);
+            $("#api_token").html(data.data.api_token);
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+    }
+
+    $("#reset_api_token").click(function(){
+      $.post(
+        DocConfig.server+"/api/item/resetKey",
+        {"item_id":item_id},
+        function(data){
+          if (data.error_code === 0 ) {
+            //console.log(data.data);
+            $("#api_key").html(data.data.api_key);
+            $("#api_token").html(data.data.api_token);
+          }else{
+            layer.alert(data.error_message);
+          }
+        },
+        "json"
+
+        );
+      return false;
+    });
+
+  });

二进制
Sqlite/showdoc.db.php


+ 1 - 1
composer.json

@@ -5,7 +5,7 @@
     "description": "ShowDoc is a tool greatly applicable for an IT team to share documents online",
     "description": "ShowDoc is a tool greatly applicable for an IT team to share documents online",
     "keywords": ["showdoc","documents","Api"],
     "keywords": ["showdoc","documents","Api"],
     "homepage": "https://github.com/star7th/showdoc",
     "homepage": "https://github.com/star7th/showdoc",
-    "version":"v1.4.7",
+    "version":"v1.5.0",
     "license": "Apache-2.0",
     "license": "Apache-2.0",
     "authors": [
     "authors": [
         {
         {

+ 28 - 0
server/Application/Api/Controller/ItemController.class.php

@@ -132,7 +132,35 @@ class ItemController extends BaseController {
 
 
         $this->sendResult($return);
         $this->sendResult($return);
     }
     }
+    //归档项目
+    public function archive(){
+        $login_user = $this->checkLogin();
+
+        $item_id = I("item_id/d");
+        $password = I("password");
+
+        $item  = D("Item")->where("item_id = '$item_id' ")->find();
+
+        if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
+            $this->sendError(10303);
+            return ;
+        }
+
+        if(! D("User")-> checkLogin($item['username'],$password)){
+            $this->sendError(10208);
+            return ;
+        }
+
+        $return = D("Item")->where("item_id = '$item_id' ")->save(array("is_archived"=>1));
+
+        if (!$return) {
+            $this->sendError(10101);
+        }else{
+            $this->sendResult($return);
+        }
 
 
+        
+    }
     public function getKey(){
     public function getKey(){
         $login_user = $this->checkLogin();
         $login_user = $this->checkLogin();