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
+ if mname == null or mdate == null or mplace == null then
+ if mname == null then mname = ""
+ if mdate == null then mdate = ""
+ if mplace == null then mplace = ""
+ var rsp = new HttpResponse(200)
+ var meetpage = new MeetupCreationPage
+ var meet = new Meetup(mname, mdate, mplace)
+ meetpage.ans = ansset
+ meetpage.meet = meet
+ meetpage.error = "Name, Date and Place are 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
+ 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 meetid = (mname + mdate + mplace).sha1_to_s
+ 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, there already seems to be a Meetup like yours <a href="/?meetup_id={{{meetid}}}">here</a>.</p>
+ <p>If this is not yours, 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
module meetup_creation
import boilerplate
+import opportunity_model
class MeetupCreationPage
super OpportunityPage
+ var meet: nullable Meetup = null is writable
+
+ var error: nullable String = null is writable
+
+ var ans: Set[String] = new HashSet[String] is writable
+
init do
header.page_js = """
function new_answer(sender){
ch.last().after('<label for="answer_' + nb + '">' + nb + '</label>');
}
"""
- body = """
+
+ end
+
+ redef fun rendering do
+ # Do stuff with body before rendering
+ var bdy = new Template
+
+ bdy.add "<center>"
+
+ if error != null then
+ bdy.add "<p></p>"
+ bdy.add """<div class="alert alert-danger alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ """
+ bdy.add error.as(not null)
+ bdy.add "</div>"
+ end
+
+ bdy.add """
<div class="page-header">
<center><h1>New meetup</h1></center>
</div>
- <center>
- <form action="meetup_create" method="POST" role="form">
+ """
+ bdy.add """<form action="meetup_create" method="POST" role="form">
<div class = "form-group">
<label for="meetup_name">Meetup Name : </label>
- <input name="meetup_name" id="meetup_name" type="text" class="form-control" placeholder="Meetup Name"/>
+ <input name="meetup_name" id="meetup_name" type="text" class="form-control" placeholder="Meetup Name" value="{{{if meet != null then meet.name else ""}}}" />
<label for="meetup_date">When ? </label>
- <input name="meetup_date" id="meetup_date" type="text" class="form-control" placeholder="Time of the event">
+ <input name="meetup_date" id="meetup_date" type="text" class="form-control" placeholder="Time of the event" value="{{{if meet != null then meet.date else ""}}}">
<label for="meetup=place">Where ? </label>
- <input name="meetup_place" id="meetup_place" type="text" class="form-control" placeholder="Place of the event">
+ <input name="meetup_place" id="meetup_place" type="text" class="form-control" placeholder="Place of the event" value="{{{if meet != null then meet.place else ""}}}">
</div>
<div id="answers" class="form-group">
<h2>Answers</h2>
- <label for="answer_1">1</label>
- <input name="answer_1" id="answer_1" type="text" class="form-control" placeholder="Answer">
- </div>
+"""
+
+ if ans.is_empty then
+ bdy.add """<label for="answer_1">1</label>
+ <input name="answer_1" id="answer_1" type="text" class="form-control" placeholder="Answer">"""
+ else
+ var cnt = 1
+ for v in ans do
+ bdy.add """
+ <label for="answer_{{{cnt}}}">{{{cnt}}}</label>
+ <input name="answer_{{{cnt}}}" id="answer_{{{cnt}}}" type="text" class="form-control" value="{{{v}}}"/>
+ """
+ cnt += 1
+ end
+ end
+
+ bdy.add """</div>
<div class="form-group">
<button type="button" class="btn btn-lg" onclick="new_answer(this)">Add answer</button>
</div>
</form>
</center>
"""
+ body = bdy
+ super
end
end