浏览代码

group 初步完成

visuddhinanda 5 年之前
父节点
当前提交
acf5c984fe

+ 75 - 25
app/group/group.js

@@ -6,9 +6,15 @@ function group_list_init() {
 	if (typeof gGroupId == "undefined") {
 		my_group_list();
 		group_add_dlg_init("group_add_div");
+		$("#button_new_group").show();
 	} else {
+		$("#button_new_sub_group").show();
 		group_list(gGroupId, gList);
-		team_add_dlg_init("group_add_div");
+		team_add_dlg_init("sub_group_add_div");
+		$("#member_list_shell").css("visibility", "visible");
+		member_list(gGroupId);
+		//初始化用户选择对话框
+		user_select_dlg_init("user_select_div");
 	}
 }
 function channal_list() {
@@ -86,6 +92,7 @@ function group_list(id, list) {
 					html += "<h2>" + gLocal.gui.introduction + "</h2>";
 					html += result.info.description;
 					html += "</div>";
+					$("#curr_group").html("/ <a>" + result.info.name + "</a>");
 					if (result.parent) {
 						$("#parent_group").html(
 							" / <a href='../group/index.php?id=" +
@@ -94,40 +101,39 @@ function group_list(id, list) {
 								result.parent.name +
 								"</a> "
 						);
-					}
-					$("#curr_group").html("/ <a>" + result.info.name + "</a>");
-					//子小组列表
-					html += "<div class='info_block'>";
-					html += "<h2>" + gLocal.gui.sub_group + "</h2>";
-					if (result.children && result.children.length > 0) {
-						for (const iterator of result.children) {
-							html += '<div class="file_list_row" style="padding:5px;">';
-							html += '<div style="max-width:2em;flex:1;"><input type="checkbox" /></div>';
-							html += "<div style='flex:1;'>" + key++ + "</div>";
-							html += "<div style='flex:2;'>" + iterator.name + "</div>";
-							html += "<div style='flex:2;'>";
-							if (iterator.power == 1) {
-								html += "拥有者";
+					} else {
+						//子小组列表
+						html += "<div class='info_block'>";
+						html += "<h2>" + gLocal.gui.sub_group + "</h2>";
+						if (result.children && result.children.length > 0) {
+							for (const iterator of result.children) {
+								html += '<div class="file_list_row" style="padding:5px;">';
+								html += "<div style='flex:1;'>" + key++ + "</div>";
+								html += "<div style='flex:2;'>" + iterator.name + "</div>";
+								html += "<div style='flex:2;'>";
+								if (iterator.power == 1) {
+									html += "拥有者";
+								}
+								html += "</div>";
+								html +=
+									"<div style='flex:1;'><a href='../group/index.php?id=" +
+									iterator.id +
+									"&list=file'>进入</a></div>";
+								html += "</div>";
 							}
-							html += "</div>";
-							html +=
-								"<div style='flex:1;'><a href='../group/index.php?id=" +
-								iterator.id +
-								"&list=file'>进入</a></div>";
-							html += "</div>";
+						} else {
+							html += "尚未设置小组";
 						}
-					} else {
-						html += "尚未设置小组";
+						html += "</div>";
 					}
-					html += "</div>";
 
 					//共享文件列表
+					key = 1;
 					html += "<div class='info_block'>";
 					html += "<h2>" + gLocal.gui.collaborate + "</h2>";
 					if (result.file && result.file.length > 0) {
 						for (const iterator of result.file) {
 							html += '<div class="file_list_row" style="padding:5px;">';
-							html += '<div style="max-width:2em;flex:1;"><input type="checkbox" /></div>';
 							html += "<div style='flex:1;'>" + key++ + "</div>";
 							html += "<div style='flex:2;'>" + iterator.title + "</div>";
 							html += "<div style='flex:2;'>";
@@ -166,6 +172,50 @@ function group_list(id, list) {
 		}
 	);
 }
+
+function member_list(id) {
+	$.get(
+		"../group/list_member.php",
+		{
+			id: id,
+		},
+		function (data, status) {
+			if (status == "success") {
+				try {
+					let html = "";
+					let result = JSON.parse(data);
+					$("#member_number").html("(" + result.length + ")");
+					//子小组列表
+					html += "<div class='info_block'>";
+					if (result && result.length > 0) {
+						for (const iterator of result) {
+							html += '<div class="file_list_row" style="padding:5px;">';
+							html += "<div style='flex:2;'>" + iterator.user_info.nickname + "</div>";
+							html += "<div style='flex:2;'>";
+							if (iterator.power == 1) {
+								html += "拥有者";
+							}
+							html += "</div>";
+							html += "<div style='flex:1;'>";
+							html += "</div>";
+							html += "</div>";
+						}
+					} else {
+						html += "这是一个安静的地方";
+					}
+					html += "</div>";
+
+					$("#member_list").html(html);
+				} catch (e) {
+					console.error(e);
+				}
+			} else {
+				console.error("ajex error");
+			}
+		}
+	);
+}
+
 /*
 编辑channel信息
 */

+ 19 - 0
app/group/group.sql

@@ -0,0 +1,19 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周五 2月 19 16:39:06 2021
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:group_info
+CREATE TABLE group_info (id CHAR (36) PRIMARY KEY, parent CHAR (36), name CHAR (32) NOT NULL, description TEXT, create_time INTEGER NOT NULL, status INTEGER, owner CHAR (36));
+
+-- 表:group_member
+CREATE TABLE group_member (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id CHAR (36) NOT NULL, group_id INTEGER NOT NULL, power INTEGER NOT NULL DEFAULT (1), group_name CHAR (32), level INTEGER DEFAULT (0), status INTEGER DEFAULT (1));
+
+-- 表:group_roles
+CREATE TABLE group_roles (id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER NOT NULL, name CHAR (32) NOT NULL, power TEXT NOT NULL);
+
+COMMIT TRANSACTION;
+PRAGMA foreign_keys = on;

+ 2 - 2
app/group/group_add_dlg.js

@@ -4,7 +4,7 @@ function group_add_dlg_init(div) {
 	let html = "";
 	html += "<div id='group_add_dlg'>";
 	html += "<div >";
-	html += "<div >" + gLocal.gui.group + gLocal.gui.name + "</div>";
+	html += "<div >" + gLocal.gui.name + "</div>";
 	html += "<input type='text' id='group_add_title' maxlength='32' placeholder='" + gLocal.gui.name + "'/>";
 	html += "</div>";
 	html += "<div>";
@@ -26,7 +26,7 @@ function team_add_dlg_init(div) {
 	let html = "";
 	html += "<div id='group_add_dlg'>";
 	html += "<div >";
-	html += "<div >小组" + gLocal.gui.name + "</div>";
+	html += "<div >" + gLocal.gui.name + "</div>";
 	html += "<input type='text' id='group_add_title' maxlength='32' placeholder='" + gLocal.gui.name + "'/>";
 	html += "</div>";
 	html += "<div>";

+ 67 - 6
app/group/index.php

@@ -5,6 +5,7 @@ require_once '../studio/index_head.php';
 
 	<script language="javascript" src="../ucenter/name_selector.js"></script>
 	<script language="javascript" src="../group/group_add_dlg.js"></script>
+	<script language="javascript" src="../group/user_select_dlg.js"></script>
 	<script language="javascript" src="../group/group.js"></script>
 	<script >
 	var gCurrPage="group_index";
@@ -36,14 +37,39 @@ require_once '../studio/index_head.php';
 		margin-bottom:2em;
 		padding-left:1em;
 	}
-
+	#fun_content{
+		display:flex;
+		margin-left: 16em;
+		margin-top: 5em;
+	}
+	#channal_list{
+		flex:8;
+	}
+	#member_list_shell{
+		flex: 4;
+    	min-width: 200px;
+		visibility: hidden;
+	}
+	.file_list_block{
+		margin-left:0;
+		margin-right:1em;
+	}
+	#button_new_group{
+		display:none;
+	}
+	#delete{
+		display:none;
+	}
+	#button_new_sub_group{
+		display:none;
+	}
 	</style>
 
 	<?php
 	require_once '../studio/index_tool_bar.php';
 	?>
 		
-	<div class="index_inner" style="    margin-left: 18em;margin-top: 5em;">
+	<div id="fun_content" class="index_inner" >
 		<div id="channal_list"  class="file_list_block">
 
 			<div class="tool_bar">
@@ -54,8 +80,8 @@ require_once '../studio/index_head.php';
 				</div>
 
 				<div>
-					<span class="icon_btn_div">
-						<span class="icon_btn_tip"><?php echo "Add";?></span>
+					<span id="button_new_group" class="icon_btn_div">
+						<span class="icon_btn_tip"><?php echo $_local->gui->new_group;?></span>
 						<button id="file_add" type="button" class="icon_btn" title=" "  onclick="group_add_dlg_show()">
 							<svg class="icon">
 								<use xlink:href="../studio/svg/icon.svg#ic_add_circle"></use>
@@ -63,8 +89,18 @@ require_once '../studio/index_head.php';
 						</button>
 						<div id='group_add_div' class="float_dlg"></div>
 					</span>
-					
-					<span class="icon_btn_div">				
+
+					<span id="button_new_sub_group" class="icon_btn_div">
+						<span class="icon_btn_tip"><?php echo $_local->gui->new_sub_group;?></span>
+						<button id="file_add" type="button" class="icon_btn" title=" "  onclick="group_add_dlg_show()">
+							<svg class="icon">
+								<use xlink:href="../studio/svg/icon.svg#ic_add_circle"></use>
+							</svg>
+						</button>
+						<div id='sub_group_add_div' class="float_dlg"></div>
+					</span>
+
+					<span id="delete" class="icon_btn_div">				
 						<span class="icon_btn_tip"><?php echo $_local->gui->recycle_bin;?></span>
 						<button id="to_recycle" type="button" class="icon_btn" onclick="file_del()" title=" ">
 							<svg class="icon">
@@ -78,6 +114,31 @@ require_once '../studio/index_head.php';
 			<div id="my_group_list">		</div>
 			
 		</div>
+		<div id="member_list_shell"  class="file_list_block">
+
+			<div class="tool_bar">
+				<div>
+					<span><?php echo $_local->gui->member; ?><span id ="member_number"></span></span>
+					<span id="parent_group"></span>
+					<span id="curr_group"></span>
+				</div>
+
+				<div>
+					<span class="icon_btn_div">
+						<span class="icon_btn_tip"><?php echo "Add";?></span>
+						<button id="member_add" type="button" class="icon_btn" title=" "  onclick="user_select_dlg_show()">
+							<svg class="icon">
+								<use xlink:href="../studio/svg/icon.svg#ic_add_person"></use>
+							</svg>
+						</button>
+						<div id='user_select_div' class="float_dlg"></div>
+					</span>
+				</div>
+			</div>
+
+			<div id="member_list">		</div>
+			
+		</div>
 		
 	</div>
 	

+ 23 - 0
app/group/list_member.php

@@ -0,0 +1,23 @@
+<?php
+//查询group member 列表
+
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../public/function.php';
+require_once '../ucenter/function.php';
+
+$output = array();
+if(isset($_GET["id"])){
+    PDO_Connect("sqlite:"._FILE_DB_GROUP_);
+    $id=$_GET["id"];
+    $query = "SELECT user_id FROM group_member  WHERE group_id = ? ";
+	$output = PDO_FetchAll($query,array($id));
+	$userinfo = new UserInfo();
+	foreach ($output as $key => $value) {
+		# code...
+        $user = $userinfo->getName($value["user_id"]);
+        $output[$key]["user_info"] = $user;
+	}
+}
+echo json_encode($output, JSON_UNESCAPED_UNICODE);
+?>

+ 49 - 0
app/group/member_put.php

@@ -0,0 +1,49 @@
+<?php
+require_once "../path.php";
+require_once "../public/_pdo.php";
+require_once '../public/function.php';
+
+$respond=array("status"=>0,"message"=>"");
+if(isset($_COOKIE["userid"]) && isset($_POST["groupid"])){
+	PDO_Connect("sqlite:"._FILE_DB_GROUP_);
+	#先查是否有加人权限
+	$query="SELECT * from group_info where id=?";
+	$fc = PDO_FetchRow($query,array($_POST["groupid"]));
+	if($fc){
+		if($fc["parent"]==0){
+			$level = 0;
+		}
+		else{
+			$level = 1;
+			#子小组要插入两条记录 第一条插入父层级
+			$query="SELECT * from group_info where id=?";
+			$g_parent = PDO_FetchRow($query,array($fc["id"]));
+			$query="INSERT INTO group_member (  user_id  , group_id  , power , group_name , level ,  status )  
+			VALUES  (  ? , ? , ? , ? , ?  ,? ) ";
+			$sth = $PDO->prepare($query);
+			$sth->execute(array($_POST["userid"] ,$fc["parent"], 1 , $$g_parent["name"], 0 ,1 ));
+			$respond=array("status"=>0,"message"=>"");
+			if (!$sth || ($sth && $sth->errorCode() != 0)) {
+				$error = PDO_ErrorInfo();
+				$respond['status']=1;
+				$respond['message']=$error[2];
+			}	
+		}
+	}
+	#查询这个
+	$query="SELECT * from group_info where id=?";
+	$g_curr = PDO_FetchRow($query,array($_POST["groupid"]));
+
+	$query="INSERT INTO group_member (  user_id  , group_id  , power , group_name , level ,  status )  
+		VALUES  (  ? , ? , ? , ? , ?  ,? ) ";
+	$sth = $PDO->prepare($query);
+	$sth->execute(array($_POST["userid"] ,$_POST["groupid"], 1 , $g_curr["name"], $level ,1 ));
+	$respond=array("status"=>0,"message"=>"");
+	if (!$sth || ($sth && $sth->errorCode() != 0)) {
+		$error = PDO_ErrorInfo();
+		$respond['status']=1;
+		$respond['message']=$error[2];
+	}	
+}
+echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+?>

+ 1 - 1
app/group/my_group_put.php

@@ -33,7 +33,7 @@ if(isset($_COOKIE["userid"])){
 	$error = PDO_ErrorInfo();
 	$respond['status']=1;
 	$respond['message']=$error[2];
-	}	
+	}
 }
 echo json_encode($respond, JSON_UNESCAPED_UNICODE);
 ?>

+ 157 - 0
app/group/user_select_dlg.js

@@ -0,0 +1,157 @@
+var _user_select_dlg_div;
+function user_select_dlg_init(div) {
+	_user_select_dlg_div = div;
+	let html = "";
+	html += "<div id='user_select_dlg'>";
+	html += "<div >";
+	html += "<div >" + gLocal.gui.nick_name + "/" + gLocal.gui.group + "</div>";
+	html += "<input type='text' id='user_select_title' maxlength='32' placeholder='" + gLocal.gui.name + "' ";
+	html += 'onkeyup="username_search_keyup(event,this)"';
+	html += "/>";
+	html += "</div>";
+	html += "<div id='user_list'>";
+	html += "</div>";
+	html += "<div style='display:flex;justify-content: space-between;padding-top: 1em;'>";
+	html += "<div>";
+
+	html += "</div>";
+	html += "<div>";
+	html += "<button onclick='user_select_cancel()'>" + gLocal.gui.cancel + "</button>";
+	html += "</div>";
+	html += "</div>";
+	html += "</div>";
+	$("#" + div).append(html);
+}
+
+function user_select_dlg_show() {
+	$("#" + _user_select_dlg_div).show();
+}
+function user_select_dlg_hide() {
+	$("#" + _user_select_dlg_div).hide();
+}
+function user_select_cancel() {
+	user_select_dlg_hide();
+	$("#user_select_title").val("");
+}
+
+function username_search_keyup(e, obj) {
+	var keynum;
+	if (window.event) {
+		// IE
+		keynum = e.keyCode;
+	} else if (e.which) {
+		// Netscape/Firefox/Opera
+		keynum = e.which;
+	}
+	var keychar = String.fromCharCode(keynum);
+	if (keynum == 13) {
+		//dict_search(obj.value);
+	} else {
+		username_search(obj.value, 1);
+	}
+}
+
+function username_search(keyword, type) {
+	//let obj = document.querySelector("#cooperator_type_user");
+	if (type == 1) {
+		$.get(
+			"../ucenter/get.php",
+			{
+				username: keyword,
+			},
+			function (data, status) {
+				let result;
+				try {
+					result = JSON.parse(data);
+				} catch (error) {
+					console(error);
+				}
+				let html = "<ul id='user_search_list'>";
+				if (result.length > 0) {
+					for (x in result) {
+						html +=
+							"<li><a onclick=\"user_selected('" +
+							result[x].id +
+							"',0)\">" +
+							result[x].nickname +
+							"[" +
+							result[x].email +
+							"]</a></li>";
+					}
+				}
+				html += "</ul>";
+				$("#user_list").html(html);
+			}
+		);
+	} else {
+		$.get(
+			"../group/get_name.php",
+			{
+				name: keyword,
+			},
+			function (data, status) {
+				let result;
+				try {
+					result = JSON.parse(data);
+				} catch (error) {
+					console(error);
+				}
+				let html = "<ul id='user_search_list'>";
+				if (result.length > 0) {
+					for (const iterator of result) {
+						html +=
+							"<li><a onclick=\"coop_add('" +
+							iterator.id +
+							"',1)\">" +
+							iterator.name +
+							"[" +
+							iterator.username.nickname +
+							"]</a></li>";
+					}
+				}
+				html += "</ul>";
+				$("#search_result").html(html);
+			}
+		);
+	}
+}
+
+function user_selected(id) {
+	$.post(
+		"../group/member_put.php",
+		{
+			userid: id,
+			groupid: gGroupId,
+		},
+		function (data) {
+			let error = JSON.parse(data);
+			if (error.status == 0) {
+				alert("ok");
+				user_select_cancel();
+				location.reload();
+			} else {
+				alert(error.message);
+			}
+		}
+	);
+}
+
+function user_select_new() {
+	$.post(
+		"../group/my_group_put.php",
+		{
+			name: $("#user_select_title").val(),
+			parent: parentid,
+		},
+		function (data) {
+			let error = JSON.parse(data);
+			if (error.status == 0) {
+				alert("ok");
+				user_select_cancel();
+				location.reload();
+			} else {
+				alert(error.message);
+			}
+		}
+	);
+}

+ 4 - 1
app/public/lang/default.json

@@ -593,8 +593,11 @@
 		"cooperators": "Cooperators",
 		"person": "Person",
 		"write": "Write",
-		"sub_group": "Sub-Group",
+		"sub_group": "Project",
 		"your": "Your",
+		"member": "Member",
+		"new_group": "Create Group",
+		"new_sub_group": "Create Project",
 		"": ""
 	},
 	"grammastr": [

+ 4 - 1
app/public/lang/en.json

@@ -592,8 +592,11 @@
 		"cooperators": "Cooperators",
 		"person": "Person",
 		"write": "Write",
-		"sub_group": "Sub-Group",
+		"sub_group": "Project",
 		"your": "Your",
+		"member": "Member",
+		"new_group": "Create Group",
+		"new_sub_group": "Create Project",
 		"": ""
 	},
 	"grammastr": [

+ 4 - 1
app/public/lang/my.json

@@ -592,8 +592,11 @@
 		"cooperators": "Cooperators",
 		"person": "Person",
 		"write": "Write",
-		"sub_group": "Sub-Group",
+		"sub_group": "Project",
 		"your": "Your",
+		"member": "Member",
+		"new_group": "Create Group",
+		"new_sub_group": "Create Project",
 		"": ""
 	},
 	"grammastr": [

+ 4 - 1
app/public/lang/si.json

@@ -597,8 +597,11 @@
 		"cooperators": "Cooperators",
 		"person": "Person",
 		"write": "Write",
-		"sub_group": "Sub-Group",
+		"sub_group": "Project",
 		"your": "Your",
+		"member": "Member",
+		"new_group": "Create Group",
+		"new_sub_group": "Create Project",
 		"": ""
 	},
 	"grammastr": [

+ 10 - 7
app/public/lang/zh-cn.json

@@ -362,7 +362,7 @@
 		"": "",
 		"continue": "继续",
 		"account": "账户",
-		"new_to_wikipali": "wikipāḷi的新用",
+		"new_to_wikipali": "wikipāḷi的新用",
 		"create_account": "建立账户",
 		"have_account": "已有账户",
 		"join_wikipali": "创建您的wikipāḷi账户",
@@ -417,11 +417,11 @@
 		"folk": "复刻",
 		"and": "并",
 		"digest": "书摘",
-		"composition": "作",
+		"composition": "作",
 		"corpus_statistics": "语料统计",
 		"studio": "译经楼",
 		"library": "藏经阁",
-		"turbo_split": "力拆分",
+		"turbo_split": "力拆分",
 		"full_text": "全文",
 		"word_weight": "单词权重",
 		"characters": "个字符",
@@ -442,8 +442,8 @@
 		"abhidhamma": "阿毗达摩",
 		"anna": "其他",
 		"mula": "根本",
-		"atthakatha": "义",
-		"tika": "复",
+		"atthakatha": "义",
+		"tika": "复",
 		"times2": "次",
 		"co_doc": "协作文档",
 		"open": "打开",
@@ -567,7 +567,7 @@
 		"local": "本地",
 		"form_sent": "连词成句到剪切板",
 		"hot_topic": "热门主题",
-		"composition_intro": "依巴利而<b></b><br>为明法而<b>作</b>",
+		"composition_intro": "依巴利而<b></b><br>为明法而<b>作</b>",
 		"jump_to_this_sent": "跳转到此句",
 		"show_nissaya": "显示nissaya",
 		"related_para": "相应段落",
@@ -595,8 +595,11 @@
 		"cooperators": "协作者",
 		"person": "个人",
 		"write": "可编辑",
-		"sub_group": "组",
+		"sub_group": "项目组",
 		"your": "你的",
+		"member": "成员",
+		"new_group": "创建群组",
+		"new_sub_group": "创建项目组",
 		"": ""
 	},
 	"grammastr": [

+ 4 - 1
app/public/lang/zh-tw.json

@@ -594,8 +594,11 @@
 		"cooperators": "協作者",
 		"person": "個人",
 		"write": "可編輯",
-		"sub_group": "組",
+		"sub_group": "項目組",
 		"your": "你的",
+		"member": "成員",
+		"new_group": "創建群組",
+		"new_sub_group": "創建項目組",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 1
app/studio/index_tool_bar.php

@@ -43,7 +43,7 @@
 					<?php echo $_local->gui->collaborate;?>
 					</span>
 				</li>
-				<li id="group_index" style="display:none;" onclick="goto_url(this,'../group/group.php?language=<?php echo $currLanguage; ?>')">
+				<li id="group_index"  onclick="goto_url(this,'../group/index.php?language=<?php echo $currLanguage; ?>')">
 					<span  class="navi_icon">
 						<svg class="icon">
 							<use xlink:href="../studio/svg/icon.svg#ic_two_person"></use>

+ 1 - 1
app/ucenter/get.php

@@ -12,7 +12,7 @@ require_once '../path.php';
         $fUser = $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
     else if(isset($_GET["username"])){
-        $query = "select userid as id ,username,nickname,email from user where username like ? limit 0,5";
+        $query = "select userid as id ,username,nickname,email from user where  nickname like ? limit 0,8";
         $stmt = $dbh->prepare($query);
         $username = "%".$_GET["username"]."%";
         $stmt->execute(array($username));