lib: Update sha1 and base64 to use Bytes instead of String
[nit.git] / contrib / opportunity / src / opportunity_controller.nit
index 032b7d3..26a4ef6 100644 (file)
@@ -16,7 +16,6 @@
 module opportunity_controller
 
 import nitcorn
-import sha1
 import templates
 import opportunity_model
 
@@ -46,34 +45,70 @@ class OpportunityWelcome
                var get = request.get_args
                var rq = url.split("/")
                if rq.has("meetup_create") then
+                       var ansset = new HashSet[String]
+                       var ans_tmp = "answer_"
+                       var cnt = 1
+                       loop
+                               var anss = request.string_arg(ans_tmp + cnt.to_s)
+                               cnt += 1
+                               if anss == null then break
+                               if ansset.has(anss) then continue
+                               ansset.add anss
+                       end
+
                        var mname = request.string_arg("meetup_name")
                        var mdate = request.string_arg("meetup_date")
                        var mplace = request.string_arg("meetup_place")
-                       if mname == null or mdate == null or mplace == null then return bad_req
+                       var mmodestr = request.string_arg("meetup_mode")
+                       var mmode = 0
+                       if mdate == null then mdate = ""
+                       if mplace == null then mplace = ""
+                       if mmodestr != null then
+                               mmode = 1
+                       end
+                       if mname == null then
+                               mname = ""
+                               var rsp = new HttpResponse(200)
+                               var meetpage = new MeetupCreationPage
+                               var meet = new Meetup(mname, mdate, mplace, mmode)
+                               meetpage.ans = ansset
+                               meetpage.meet = meet
+                               meetpage.error = "'Meetup name' is a mandatory fields."
+                               rsp.body = meetpage.write_to_string
+                               return rsp
+
+                       end
                        var db = new OpportunityDB.open(db_path)
-                       var meet = new Meetup(mname, mdate, mplace)
-                       if meet == null then
+                       var meet = new Meetup(mname, mdate, mplace, mmode)
+                       if ansset.is_empty then
                                db.close
-                               return bad_req
+                               var rsp = new HttpResponse(200)
+                               var meetpage = new MeetupCreationPage
+                               meetpage.meet = meet
+                               meetpage.error = "You need to input at least one answer."
+                               rsp.body = meetpage.write_to_string
+                               return rsp
                        end
-                       meet.commit(db)
-                       var ans_tmp = "answer_"
-                       var cnt = 1
-                       loop
-                               var anss = request.string_arg(ans_tmp + cnt.to_s)
-                               if anss == null then break
-                               var ans = new Answer(anss)
+                       if not meet.commit(db) then
+                               db.close
+                               var rsp = new HttpResponse(200)
+                               var meetpage = new MeetupCreationPage
+                               meetpage.meet = meet
+                               meetpage.ans = ansset
+                               meetpage.error = """<p>Could not create Meetup.</p>
+                               <p>Hmm, that's embarassing, the database indicates that your meetup already exists.</p>
+                               <p>If this is not a duplicated submission, please contact the mainainers of the website, you might have found a bug !</p>"""
+                               rsp.body = meetpage.write_to_string
+                               return rsp
+                       end
+                       for v in ansset do
+                               var ans = new Answer(v)
                                ans.meetup = meet
                                ans.commit(db)
-                               cnt += 1
                        end
                        db.close
                        var rsp = new HttpResponse(200)
-                       if meet.id == "" then
-                               rsp.body = (new MeetupCreationPage).write_to_string
-                       else
-                               rsp.body = (new MeetupConfirmation(meet)).write_to_string
-                       end
+                       rsp.body = (new MeetupConfirmation(meet)).write_to_string
                        return rsp
                end
                if rq.has("new_meetup") then
@@ -100,7 +135,6 @@ class OpportunityRESTAction
 
        redef fun answer(request, uri) do
                print "Received REST request from {uri}"
-               var get = request.get_args
                var req = uri.split("/")
                if req.has("people") then
                        return (new OpportunityPeopleREST).answer(request, uri)
@@ -145,7 +179,7 @@ class OpportunityAnswerREST
        redef fun answer(request, uri) do
                var persid = request.int_arg("pers_id")
                var ansid = request.int_arg("answer_id")
-               var ans = request.bool_arg("answer")
+               var ans = request.int_arg("answer")
                if persid == null or ansid == null or ans == null then return bad_req
                var db = new OpportunityDB.open(db_path)
                db.change_answer(ansid, persid, ans)
@@ -163,15 +197,14 @@ class OpportunityMeetupREST
                if args.has("new_pers") then
                        var name = request.string_arg("persname")
                        var m_id = request.string_arg("meetup_id")
-                       var ans = request.string_arg("answers").split("&")
-                       if name == null or m_id == null then return bad_req
-                       print ans
-                       var ansmap = new HashMap[Int, Bool]
+                       var ans_str = request.string_arg("answers")
+                       if name == null or m_id == null or ans_str == null then return bad_req
+                       var ans = ans_str.split("&")
+                       var ansmap = new HashMap[Int, Int]
                        for i in ans do
                                var mp = i.split("=")
-                               var b = false
-                               if mp.last == "true" then b = true
                                var id = mp.first.split("_").last
+                               var b = mp.last.to_i
                                if not id.is_numeric then continue
                                ansmap[id.to_i] = b
                        end
@@ -189,7 +222,7 @@ class OpportunityMeetupREST
                        var p = new People(rname, rsurname)
                        for i in m.answers(db) do
                                if not ansmap.has_key(i.id) then
-                                       p.answers[i] = false
+                                       p.answers[i] = 0
                                else
                                        p.answers[i] = ansmap[i.id]
                                end