login

<     >

2023-08-16 14:29:17 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

use select list to add project members

diff --git a/data.lua b/data.lua
index 18a0ea5..3382bef 100644
--- a/data.lua
+++ b/data.lua
@@ -195,6 +195,17 @@ function Model:get_members(proj_id)
     ]], proj_id)
 end
 
+function Model:get_non_members(proj_id)
+    return self.db:execute([[
+        SELECT User.nick, User.name
+        FROM User
+        LEFT JOIN Membership ON
+            User.id = Membership.user_id AND Membership.proj_id = ?
+        WHERE Membership.user_id IS NULL
+        ORDER BY User.nick;
+    ]], proj_id)
+end
+
 function Model:add_member(proj_id, nick)
     local user = self:get_user(nick)
     if user == nil then return false end

diff --git a/skopos.lua b/skopos.lua
index c74f65a..764dcdb 100644
--- a/skopos.lua
+++ b/skopos.lua
@@ -296,7 +296,10 @@ function App:routes()
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local members = self.model:get_members(proj.id)
-        local env = {title=self.title, user=user, proj=proj, members=members}
+        local rest = self.model:get_non_members(proj.id)
+        local env = {
+            title=self.title, user=user, proj=proj, members=members, rest=rest
+        }
         return {fname="view/members.html", env=env}
     end},
     {"POST", "/p/([-_%w]+)/m/add",

diff --git a/view/members.html b/view/members.html
index 48a5c3b..4e414ae 100644
--- a/view/members.html
+++ b/view/members.html
@@ -32,7 +32,12 @@
   </table>
   <br>
   <form class="centered" action="/p/{{$proj.name}}/m/add" method="post">
-    <input type="text" name="username" placeholder="Username" required pattern="[-_A-Za-z0-9]+">
+    <select name="username" required>
+      <option value="">--user--</option>
+      % for u in $rest do
+      <option value="{{$u.nick}}">{{$u.name}}</option>
+      % end
+    </select>
     <input type="submit" value="add"></li>
   </form>
 </body>