2023-08-02 16:55:33 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
add project updating
diff --git a/data.lua b/data.lua index 78e1bca..ed6fac9 100644 --- a/data.lua +++ b/data.lua @@ -149,6 +149,13 @@ function Model:get_project(name) return self.db:execute("SELECT * FROM Project WHERE name = ?;", name)[1] end +function Model:get_user_project(user_id, proj_name) + return self.db:execute([[ + SELECT * FROM Project JOIN Membership ON Project.id = Membership.proj_id + WHERE Membership.user_id = ? AND Project.name = ? ORDER BY priority DESC; + ]], user_id, proj_name)[1] +end + function Model:get_user_projects(user_id) return self.db:execute([[ SELECT * FROM Project JOIN Membership ON Project.id = Membership.proj_id @@ -156,6 +163,14 @@ function Model:get_user_projects(user_id) ]], user_id) end +function Model:update_project(old_name, new_name, desc, goal, color, priority) + local query = [[ + UPDATE Project SET name = ?, desc = ?, goal = ?, color = ?, priority = ? + WHERE name = ?; + ]] + self.db:execute(query, new_name, desc, goal, color, priority, old_name) +end + function Model:del_project(proj_id) self.db:execute("DELETE FROM Membership WHERE proj_id = ?;", proj_id) self.db:execute("DELETE FROM Ticket WHERE proj_id = ?;", proj_id) diff --git a/skopos.lua b/skopos.lua index c354ee8..dfd93a8 100644 --- a/skopos.lua +++ b/skopos.lua @@ -161,6 +161,28 @@ function App:routes() self:log(LOG_INFO, "user "..user.nick.." created project "..name) return "/p", 303 end}, + {"GET", "/upd%-project/([-_%w]+)", + function (req, name) + local user = self:get_user(req) + if user == nil then return "/login", 303 end + local proj = self.model:get_user_project(user.id, name) + if proj == nil then return "not found", 404 end + local env = {title=self.title, user=user, proj=proj} + return lud.template.render_file("view/proj_form.html", env) + end}, + {"POST", "/upd%-project/([-_%w]+)", + function (req, old_name) + local user = self:get_user(req) + if user == nil then return "/login", 303 end + local new_name = req.form.name + local desc = req.form.desc + local goal = req.form.goal + local color = req.form.color + local priority = tonumber(req.form.priority or 0) + self.model:update_project(old_name, new_name, desc, goal, color, priority) + self:log(LOG_INFO, "user "..user.nick.." edited project "..old_name) + return "/p", 303 + end}, {"POST", "/del%-project/([-_%w]+)", function (req, name) local user = self:get_user(req) diff --git a/view/proj_form.html b/view/proj_form.html index e6480ab..9484b84 100644 --- a/view/proj_form.html +++ b/view/proj_form.html @@ -10,7 +10,15 @@ </head> <body> <h1 class="centered">Project</h1> - <form action="/new-project" method="post"> + % if $proj == nil then + % set action = "/new-project" + % set proj = {name="", desc="", goal="", color="#000000", priority=0} + % set submit_value = "Create" + % else + % set action = "/upd-project/" .. $proj.name + % set submit_value = "Save" + % end + <form action="{{$action}}" method="post"> <table class="field-list"> <tbody> <tr> @@ -20,7 +28,7 @@ <td> <input type="text" class="flat-field" id="name" name="name" required - pattern="[-_A-Za-z0-9]+" autofocus> + pattern="[-_A-Za-z0-9]+" value="{{$proj.name}}" autofocus> </td> </tr> <tr> @@ -28,7 +36,9 @@ <label for="desc">Description:</label> </td> <td> - <input type="text" class="flat-field" id="desc" name="desc" size="30"> + <input + type="text" class="flat-field" id="desc" name="desc" size="30" + value="{{$proj.desc}}"> </td> </tr> <tr> @@ -36,7 +46,9 @@ <label for="goal">Goal:</label> </td> <td> - <input type="text" class="flat-field" id="goal" name="goal" size="50"> + <input + type="text" class="flat-field" id="goal" name="goal" size="50" + value="{{$proj.goal}}"> </td> </tr> <tr> @@ -44,7 +56,9 @@ <label for="color">Color:</label> </td> <td> - <input type="color" class="flat-field" id="color" name="color" value="#000000"> + <input + type="color" class="flat-field" id="color" name="color" + value="{{$proj.color}}"> </td> </tr> <tr> @@ -52,13 +66,15 @@ <label for="priority">Priority:</label> </td> <td> - <input type="number" class="flat-field" id="priority" name="priority" required> + <input + type="number" class="flat-field" id="priority" name="priority" + required value="{{$proj.priority}}"> </td> </tr> </tbody> </table> <br> - <input type="submit" class="flat-button" value="Create"> + <input type="submit" class="flat-button" value="{{$submit_value}}"> </form> </body> </html> diff --git a/view/projs.html b/view/projs.html index f84996b..0a08b99 100644 --- a/view/projs.html +++ b/view/projs.html @@ -18,6 +18,7 @@ <th>description</th> <th>priority</th> <th>color</th> + <th>edit</th> <th>delete</th> </tr> % for proj in $projs do @@ -26,6 +27,7 @@ <td>{{$proj.desc}}</td> <td>{{$proj.priority}}</td> <td><span style="background-color:{{$proj.color}};">{{$proj.color}}</span></td> + <td><a href="/upd-project/{{$proj.name}}">edit</a></td> <td> <form action="/del-project/{{$proj.name}}" method="post"> <button type="submit">delete</button>