4 function SurveyQuestion(question, poll) {
5 debug("Creating new survey question " + question.question() );
6 this.question = question;
7 this.node = createAppElement("div");
8 this.node.id = "survey_question_" + question.id();
9 add_css_class( this.node, "survey_question" );
10 var div = createAppElement("div");
11 add_css_class(div, "survey_question_question");
13 createAppTextNode(question.question()));
14 this.node.appendChild(div);
17 this.selector = createAppElement("div");
19 this.selector = createAppElement("select");
22 add_css_class( this.selector, "survey_answer_selector" );
23 this.selector.name = "survey_question_" + question.id();
24 this.selector.value = "survey_question_" + question.id();
25 this.node.appendChild(this.selector);
26 this.answers = new Array();
30 SurveyQuestion.prototype.getNode = function() {
34 SurveyQuestion.prototype.addAnswer = function(answer,poll) {
36 var ans = new SurveyAnswer(answer, this.question.id(), poll);
37 this.answers.push(ans);
38 this.selector.appendChild(
39 createAppTextNode(answer.answer()));
40 this.selector.appendChild(ans.getNode());
42 var ans = new SurveyAnswer(answer, this.question.id());
43 this.answers.push(ans);
44 this.selector.options[ this.selector.options.length ] = ans.getNode();
49 function SurveyAnswer(answer,qid, poll) {
55 this.node = createAppElement(
56 "<input name='survey_answer_" + qid + "' type='radio' value='" + answer.id() + "'></input>" );
59 this.node = createAppElement("input");
60 this.node.setAttribute("type", "radio");
61 this.node.setAttribute("name", "survey_answer_" + qid);
62 this.node.setAttribute("value", answer.id());
66 this.node = new Option( answer.answer(), answer.id() );
69 add_css_class( this.node, "survey_answer" );
72 SurveyAnswer.prototype.getNode = function() {
79 Survey.prototype = new ListBox();
80 Survey.prototype.constructor = Survey;
81 Survey.baseClass = ListBox.constructor;
83 function Survey(survey, onclick) {
86 debug("Creating new survey " + survey.name() );
88 if( survey.poll() == 0 ) survey.poll(false);
89 if( survey.poll() == 1 ) survey.poll(true);
92 this.listBoxInit( false, survey.name(), true, false );
94 this.listBoxInit( true, survey.name(), true, false );
97 this.questions = new Array();
99 this.addCaption( survey.description() );
101 for( var i in survey.questions() ) {
102 this.addQuestion( survey.questions()[i] );
106 this.button = createAppElement("input");
107 this.button.setAttribute("type", "submit");
108 this.button.value = "Submit Survey";
111 this.button.onclick = onclick;
112 this.addFooter(this.button);
115 this.setAction( function() { obj.submit(); });
118 Survey.prototype.setUserSession = function(userSession) {
119 this.userSession = userSession;
122 Survey.prototype.setAnswerDate = function(date) {
123 this.answerDate = date;
126 Survey.prototype.setEffectiveDate = function(date) {
127 this.effectiveDate = date;
130 Survey.prototype.setAction = function(onclick) {
131 this.button.onclick = onclick;
134 Survey.prototype.getName = function() {
135 debug("getting name for " + this.survey.name() );
136 return this.survey.name();
139 Survey.prototype.addQuestion = function(question) {
140 var questionObj = new SurveyQuestion(question, this.survey.poll());
141 this.questions.push(questionObj);
142 for( var i in question.answers() ) {
143 questionObj.addAnswer(question.answers()[i], this.survey.poll());
146 this.addItem(questionObj.getNode());
149 Survey.prototype.setUser = function(userid) {
150 this.userId = userid;
153 Survey.prototype.setSubmitCallback = function(callback) {
154 this.submitCallback = callback;
157 Survey.prototype.submit = function() {
159 var responses = this.buildSurveyResponse();
162 method = "open-ils.circ.survey.submit.user_id";
164 method = "open-ils.circ.survey.submit.session";
166 var request = new RemoteRequest(
167 "open-ils.circ", method, responses );
170 /* there is nothing to return, just check for exceptions */
171 request.getResultObject();
174 if( this.submitCallback )
175 bool = this.submitCallback(this);
181 Survey.prototype.buildSurveyResponse = function() {
183 var responses = new Array();
185 for( var index in this.questions ) {
186 var que = this.questions[index];
188 for( var ansindex in que.answers ) {
189 ansobj = que.answers[ansindex];
190 if( ansobj.getNode().selected || ansobj.getNode().checked ) {
191 ans = ansobj.answer.id();
192 debug("User selected answer " + ans );
196 var qid = que.question.id()
197 var sur = new asvr();
199 sur.usr(this.userId);
201 sur.usr(this.userSession);
202 sur.survey(this.survey.id());
205 sur.answer_date(this.answerDate);
206 sur.effective_date(this.effectiveDate);
213 /* Global survey retrieval functions. In each case, if recvCallback
214 is not null, the retrieval will be asynchronous and will
215 call recvCallback(survey) on each survey retrieved. Otherwise
216 an array of surveys is returned.
219 Survey._retrieve = function(request, surveyTaker, recvCallback) {
224 debug("Retrieving random survey asynchronously");
225 var c = function(req) {
226 var surveys = req.getResultObject();
228 if( typeof surveys != 'object' ||
229 surveys.constructor != Array )
232 for( var i in surveys ) {
234 debug("Retrieved survey " + s.name() );
235 var surv = new Survey(s);
236 surv.setUserSession(surveyTaker);
241 request.setCompleteCallback(c);
247 var surveys = new Array();
248 var results = request.getResultObject();
249 for(var index in results) {
250 var s = results[index];
251 debug("Retrieved survey " + s.name());
252 var surv = new Survey(s);
253 surv.setUserSession(surveyTaker);
261 /* this needs a different method for retrieving the correct survey */
262 Survey.retrieveRandom = function(user_session, recvCallback) {
264 var request = new RemoteRequest(
266 "open-ils.circ.survey.retrieve.random",
268 return Survey._retrieve(request, user_session, recvCallback );
272 Survey.retrieveAll = function(user_session, recvCallback) {
273 var request = new RemoteRequest(
275 "open-ils.circ.survey.retrieve.all",
277 return Survey._retrieve(request, user_session, recvCallback );
281 Survey.retrieveRequired = function(user_session, recvCallback) {
282 var request = new RemoteRequest(
284 "open-ils.circ.survey.retrieve.required",
286 return Survey._retrieve(request, user_session, recvCallback );
289 Survey.retrieveById = function(user_session, id, recvCallback) {
291 var request = new RemoteRequest(
293 "open-ils.circ.survey.fleshed.retrieve",
295 return Survey._retrieve(request, user_session, recvCallback );