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);
39 this.selector.appendChild(ans.getNode());
40 this.selector.appendChild(createAppTextNode(answer.answer()));
41 this.selector.appendChild(createAppElement("br"));
44 var ans = new SurveyAnswer(answer, this.question.id());
45 this.answers.push(ans);
46 this.selector.options[ this.selector.options.length ] = ans.getNode();
51 function SurveyAnswer(answer,qid, poll) {
57 this.node = createAppElement(
58 "<input name='survey_answer_" + qid + "' type='radio' value='" + answer.id() + "'></input>" );
61 this.node = createAppElement("input");
62 this.node.setAttribute("type", "radio");
63 this.node.setAttribute("name", "survey_answer_" + qid);
64 this.node.setAttribute("value", answer.id());
68 this.node = new Option( answer.answer(), answer.id() );
71 add_css_class( this.node, "survey_answer" );
74 SurveyAnswer.prototype.getNode = function() {
81 Survey.prototype = new ListBox();
82 Survey.prototype.constructor = Survey;
83 Survey.baseClass = ListBox.constructor;
85 function Survey(survey, onclick) {
88 debug("Creating new survey " + survey.name() );
90 if( survey.poll() == 0 ) survey.poll(false);
91 if( survey.poll() == 1 ) survey.poll(true);
94 this.listBoxInit( false, survey.name(), true, false );
96 this.listBoxInit( true, survey.name(), true, false );
99 this.questions = new Array();
101 this.addCaption( survey.description() );
103 for( var i in survey.questions() ) {
104 this.addQuestion( survey.questions()[i] );
108 this.button = createAppElement("input");
109 this.button.setAttribute("type", "submit");
110 this.button.value = "Submit Survey";
113 this.button.onclick = onclick;
114 this.addFooter(this.button);
117 this.setAction( function() { obj.submit(); });
120 Survey.prototype.setUserSession = function(userSession) {
121 this.userSession = userSession;
124 Survey.prototype.setAnswerDate = function(date) {
125 this.answerDate = date;
128 Survey.prototype.setEffectiveDate = function(date) {
129 this.effectiveDate = date;
132 Survey.prototype.setAction = function(onclick) {
133 this.button.onclick = onclick;
136 Survey.prototype.getName = function() {
137 debug("getting name for " + this.survey.name() );
138 return this.survey.name();
141 Survey.prototype.addQuestion = function(question) {
142 var questionObj = new SurveyQuestion(question, this.survey.poll());
143 this.questions.push(questionObj);
144 for( var i in question.answers() ) {
145 questionObj.addAnswer(question.answers()[i], this.survey.poll());
148 this.addItem(questionObj.getNode());
151 Survey.prototype.setUser = function(userid) {
152 this.userId = userid;
155 Survey.prototype.setSubmitCallback = function(callback) {
156 this.submitCallback = callback;
159 Survey.prototype.submit = function() {
161 var responses = this.buildSurveyResponse();
163 if( this.commitCallback) {
164 this.commitCallback(responses);
167 this.commit(responses);
171 if( this.submitCallback )
172 bool = this.submitCallback(this);
178 Survey.prototype.commit = function(responses) {
181 method = "open-ils.circ.survey.submit.user_id";
183 if( this.userSession )
184 method = "open-ils.circ.survey.submit.session";
186 method = "open-ils.circ.survey.submit.anon";
189 var request = new RemoteRequest(
190 "open-ils.circ", method, responses );
193 /* there is nothing to return, just check for exceptions */
194 request.getResultObject();
198 Survey.prototype.buildSurveyResponse = function() {
200 var responses = new Array();
202 for( var index in this.questions ) {
203 var que = this.questions[index];
205 for( var ansindex in que.answers ) {
206 ansobj = que.answers[ansindex];
207 if( ansobj.getNode().selected || ansobj.getNode().checked ) {
208 ans = ansobj.answer.id();
209 debug("User selected answer " + ans );
213 var qid = que.question.id()
214 var sur = new asvr();
216 sur.usr(this.userId);
218 sur.usr(this.userSession);
219 sur.survey(this.survey.id());
222 sur.answer_date(this.answerDate);
223 sur.effective_date(this.effectiveDate);
230 /* Global survey retrieval functions. In each case, if recvCallback
231 is not null, the retrieval will be asynchronous and will
232 call recvCallback(survey) on each survey retrieved. Otherwise
233 an array of surveys is returned.
236 Survey._retrieve = function(request, surveyTaker, recvCallback) {
241 debug("Retrieving random survey asynchronously");
242 var c = function(req) {
243 var surveys = req.getResultObject();
244 if(!surveys) return null;
246 if( typeof surveys != 'object' ||
247 surveys.constructor != Array )
250 for( var i in surveys ) {
252 debug("Retrieved survey " + s.name() );
253 var surv = new Survey(s);
254 surv.setUserSession(surveyTaker);
259 request.setCompleteCallback(c);
265 var surveys = new Array();
266 var results = request.getResultObject();
267 for(var index in results) {
268 var s = results[index];
269 debug("Retrieved survey " + s.name());
270 var surv = new Survey(s);
271 surv.setUserSession(surveyTaker);
279 /* this needs a different method for retrieving the correct survey */
280 Survey.retrieveOpacRandom = function(user_session, recvCallback) {
282 var request = new RemoteRequest(
284 "open-ils.circ.survey.retrieve.opac.random",
286 return Survey._retrieve(request, user_session, recvCallback );
290 Survey.retrieveAll = function(user_session, recvCallback) {
291 var request = new RemoteRequest(
293 "open-ils.circ.survey.retrieve.all",
295 return Survey._retrieve(request, user_session, recvCallback );
299 Survey.retrieveRequired = function(user_session, recvCallback) {
300 var request = new RemoteRequest(
302 "open-ils.circ.survey.retrieve.required",
304 return Survey._retrieve(request, user_session, recvCallback );
307 Survey.retrieveById = function(user_session, id, recvCallback) {
308 var request = new RemoteRequest(
310 "open-ils.circ.survey.fleshed.retrieve",
312 return Survey._retrieve(request, user_session, recvCallback );
315 Survey.retrieveOpacRandomGlobal = function(recvCallback) {
316 var request = new RemoteRequest(
318 "open-ils.circ.survey.retrieve.opac.random.global");
319 return Survey._retrieve(request, null, recvCallback );