Przeglądaj źródła

Added support for advance sharing in File Share Manager

Toby Chui 3 lat temu
rodzic
commit
519d4642b0

Plik diff jest za duży
+ 0 - 0
documents/cluster design/hardware block diagram


BIN
documents/cluster design/hardware block diagram.png


+ 12 - 8
web/SystemAO/file_system/file_explorer.html

@@ -1934,16 +1934,20 @@
             }
 
             function getThumbnailExtensionFromBase64String(base64String){
-                let tid = base64String.charAt(0);
                 let ext = "jpg";
-                if (tid == "i"){
-                    ext = "png";
-                }else if (tid == "R"){
-                    ext = "gif";
-                }else if (tid == "U"){
-                    ext = "webp";
+                if (typeof base64String === 'string' || base64String instanceof String){
+                    let tid = base64String.charAt(0);
+                    if (tid == "i"){
+                        ext = "png";
+                    }else if (tid == "R"){
+                        ext = "gif";
+                    }else if (tid == "U"){
+                        ext = "webp";
+                    }
+                }else{
+                    //Not string
                 }
-
+                
                 return ext;
             }
 

+ 127 - 1
web/SystemAO/file_system/file_share.html

@@ -68,6 +68,55 @@
                                     </div>
                                 </label>
                             </div>
+                            <br><br>
+                            <div class="ui accordion" id="advanceShare">
+                                <div class="title">
+                                    <i class="dropdown icon"></i>
+                                    <span locale="share/setting/advance/title">Advance Share Options</span>
+                                </div>
+                                <div class="content">
+                                    <div class="ui radio checkbox">
+                                        <input id="users" type="radio" class="shareoption" value="users" name="shareopt" onchange="updateSharePermission(this);">
+                                        <label for="users">
+                                            <div class="ui header">
+                                                <div class="content whiteTheme">
+                                                    <i class="clipboard check icon"></i> <span locale="share/setting/advance/users">Selected Users</span>
+                                                    <div class="sub header whiteTheme" locale="share/setting/advance/usersDesc">Selected users with matching user name</div>
+                                                </div>
+                                            </div>
+                                        </label>
+                                    </div>
+                                    <div id="userselector">
+                                        <p style="margin-top: 1em;" locale="share/setting/advance/usersInstruct"">Select target users from the list below</p>
+                                        <select id="targetUsersList" class="ui fluid search dropdown" multiple="">
+                                            <option value="">Users</option>
+                                        </select>
+                                        <div id="noUserWarning" class="ui yellow message"  style="display:none;">
+                                            <i class="caret up icon"></i> <span locale="share/setting/advance/addUserToSave">Add at least one target share user to save changes</span>
+                                        </div>
+                                    </div>
+                                    <div class="ui radio checkbox" style="margin-top: 1em;">
+                                        <input id="groups" type="radio" class="shareoption" value="groups" name="shareopt" onchange="updateSharePermission(this);">
+                                        <label for="groups">
+                                            <div class="ui header">
+                                                <div class="content whiteTheme">
+                                                    <i class="sitemap icon"></i> <span locale="share/setting/advance/groups">Selected Groups</span>
+                                                    <div class="sub header whiteTheme" locale="share/setting/advance/groupsDesc">All the users that has access to any one of the selected group(s)</div>
+                                                </div>
+                                            </div>
+                                        </label>
+                                    </div>
+                                    <div id="groupselector">
+                                        <p style="margin-top: 1em;" locale="share/setting/advance/groupsInstruct">Select target groups from the list below</p>
+                                        <select id="targetGroupList" class="ui fluid search dropdown" multiple="">
+                                            <option value="">Groups</option>
+                                        </select>
+                                        <div id="noGroupWarning" class="ui yellow message" style="display:none;">
+                                            <i class="caret up icon"></i> <span locale="share/setting/advance/addGroupToSave">Add at least one target share group to save changes</span>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
                         <br><br>
                         <div id="udpateNotification" style="display:none;" class="ui green inverted segment">
                                 <i class=" checkmark icon"></i> <span locale="share/setting/updated">Share Setting Updated</span>
@@ -118,6 +167,24 @@
                 if (initialized){
                     return;
                 }
+
+                //Load User & Group List
+                $.get(relpath + "../system/users/list", function(data){
+                    var groups = {};
+                    $("#targetUsersList").html(`<option value="">Users</option>`);
+                    data.forEach(user => {
+                        $("#targetUsersList").append(`<option value="${user[0]}">${user[0]}</option>`);
+                        var userGroups = user[1];
+                        userGroups.forEach(thisGroup => {
+                            groups[thisGroup] = true;
+                        });
+                    });
+                    $("#targetGroupList").html(`<option value="">Groups</option>`);
+                    for (var [key, value] of Object.entries(groups)) {
+                        $("#targetGroupList").append(`<option value="${key}">${key}</option>`);
+                    }
+                });
+
                 initialized = true;
                 //Do localization
                 applocale.init(relpath + "../SystemAO/locale/file_share.json", function(){
@@ -125,6 +192,8 @@
                 });
 
                 $(".checkbox").checkbox();
+                $(".dropdown").dropdown();
+                $(".accordion").accordion();
                 var inputFile = ao_module_loadInputFiles();
                 if (inputFile == null){
                     //No file selected
@@ -186,6 +255,7 @@
                         if (data.error !== undefined){
                             alert(data.error);
                         }else{
+                            console.log(data);
                             updateShareLinkInfo(data.UUID);
                             shareEditingUUID = data.UUID;
                             $(".shareoption").each(function(){
@@ -193,10 +263,32 @@
                                     $(this)[0].checked = false;
                                 }else{
                                     $(this)[0].checked = true;
+                                    if (data.Permission == "users"){
+                                        $("#advanceShare").accordion("open", 0);
+                                        $("#targetUsersList").dropdown("set selected", data.Accessibles);
+                                        $("#targetUsersList").parent().removeClass("disabled");
+                                        $("#targetGroupList").parent().addClass("disabled");
+                                    }else if (data.Permission == "groups"){
+                                        $("#advanceShare").accordion("open", 0);
+                                        $("#targetGroupList").dropdown("set selected", data.Accessibles);
+                                        $("#targetUsersList").parent().addClass("disabled");
+                                        $("#targetGroupList").parent().removeClass("disabled");
+                                    }
                                 }
                                
                             });
 
+                          
+                            $("#targetUsersList").on("change", function(evt){
+                                updateSharePermissionByType("users");
+                            });
+
+                            $("#targetGroupList").on("change", function(evt){
+                                updateSharePermissionByType("groups");
+                            });
+               
+                            
+
                             //If the file is from desktop, set share icon
                             if (ao_module_virtualDesktop == true){
                                 var fileDir = shareingFileData.filepath.split("/");
@@ -253,6 +345,40 @@
 
             function updateSharePermission(object){
                 var newPermission = $(object).attr('value');
+                updateSharePermissionByType(newPermission);
+            }   
+
+            function updateSharePermissionByType(newPermission){
+                if (newPermission == "users"){
+                    //Build the user list
+                    $("#targetUsersList").parent().removeClass("disabled");
+                    $("#targetGroupList").parent().addClass("disabled");
+                    var selectedUsers = $("#targetUsersList").val();
+                    if (selectedUsers.length == 0){
+                        //Show tips message
+                        $("#noUserWarning").slideDown("fast");
+                        return;
+                    }else{
+                        $("#noUserWarning").slideUp("fast");
+                    }
+                    //Rewrite it to permission handling description
+                    newPermission = "users:" + selectedUsers.join(",");
+                }else if (newPermission == "groups"){
+                    //Build the group list
+                    $("#targetUsersList").parent().addClass("disabled");
+                    $("#targetGroupList").parent().removeClass("disabled");
+                    var selectedGroups = $("#targetGroupList").val();
+                    if (selectedGroups.length == 0){
+                        //Show tips message
+                        $("#noGroupWarning").slideDown("fast");
+                        return;
+                    }else{
+                        $("#noGroupWarning").slideUp("fast");
+                    }
+                    //Rewrite it to permission handling description
+                    newPermission = "groups:" + selectedGroups.join(",");
+                }
+
                 $.ajax({
                     url: relpath + "../system/file_system/share/edit",
                     data: {uuid: shareEditingUUID, mode: newPermission},
@@ -264,7 +390,7 @@
                         $("#udpateNotification").slideDown("fast").delay(3000).slideUp("fast");
                     }
                 });
-            }   
+            }
 
             function updateShareLinkInfo(uuid){
                 $("#qrcode").html("");

+ 30 - 0
web/SystemAO/locale/file_share.json

@@ -22,6 +22,16 @@
                 "share/setting/sameGroup/desc":"任何擁有相同使用者權限的使用者皆可下載此檔案",
                 "share/setting/updated":"存取權限已更新",
 
+                "share/setting/advance/title":"進階分享選項",
+                "share/setting/advance/users":"指定使用者",
+                "share/setting/advance/usersDesc":"指定已登入之使用者帳戶名稱",
+                "share/setting/advance/usersInstruct":"於下方列表中選擇指定分享的用戶",
+                "share/setting/advance/addUserToSave":"新增最少一名使用者以儲存變更",
+                "share/setting/advance/groups":"指定權限群組",
+                "share/setting/advance/groupsDesc":"使用者只要擁有下述指定之任何一個群組權限皆可存取",
+                "share/setting/advance/groupsInstruct":"於下方列表中選擇指定分享的群組",
+                "share/setting/advance/addGroupToSave":"新增最少一個權限群組以儲存變更",
+
                 "message/removed": "分享已移除",
                 "qr/loading": "載入中"
                
@@ -53,6 +63,16 @@
                 "share/setting/sameGroup/desc":"任何擁有相同使用者權限的使用者皆可下載此檔案",
                 "share/setting/updated":"存取權限已更新",
 
+                "share/setting/advance/title":"進階分享選項",
+                "share/setting/advance/users":"指定使用者",
+                "share/setting/advance/usersDesc":"指定已登入之使用者帳戶名稱",
+                "share/setting/advance/usersInstruct":"於下方列表中選擇指定分享的用戶",
+                "share/setting/advance/addUserToSave":"新增最少一名使用者以儲存變更",
+                "share/setting/advance/groups":"指定權限群組",
+                "share/setting/advance/groupsDesc":"使用者只要擁有下述指定之任何一個群組權限皆可存取",
+                "share/setting/advance/groupsInstruct":"於下方列表中選擇指定分享的群組",
+                "share/setting/advance/addGroupToSave":"新增最少一個權限群組以儲存變更",
+
                 "message/removed": "分享已移除",
                 "qr/loading": "載入中"
             },
@@ -82,6 +102,16 @@
                 "share/setting/sameGroup/desc":"任何拥有相同使用者权限的使用者皆可下载此文件",
                 "share/setting/updated":"存取权限已更新",
 
+                "share/setting/advance/title":"进阶分享选项",
+                "share/setting/advance/users":"指定使用者",
+                "share/setting/advance/usersDesc":"指定已登入之使用者帐户名称",
+                "share/setting/advance/usersInstruct":"于下方列表中选择指定分享的用户",
+                "share/setting/advance/addUserToSave":"新增最少一名使用者以储存变更",
+                "share/setting/advance/groups":"指定权限群组",
+                "share/setting/advance/groupsDesc":"使用者只要拥有下述指定之任何一个群组权限皆可存取",
+                "share/setting/advance/groupsInstruct":"于下方列表中选择指定分享的群组",
+                "share/setting/advance/addGroupToSave":"新增最少一个权限群组以储存变更",
+                
                 "message/removed": "分享已移除",
                 "qr/loading": "载入中" 
             },

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików