3 function SurveyQuestion(question, poll) {
4 debug("Creating new survey question " + question.question() );
5 this.question = question;
6 this.node = createAppElement("div");
7 this.node.id = "survey_question_" + question.id();
8 add_css_class( this.node, "survey_question" );
9 var div = createAppElement("div");
10 add_css_class(div, "survey_question_question");
12 createAppTextNode(question.question()));
13 this.node.appendChild(div);
16 this.selector = createAppElement("div");
18 this.selector = createAppElement("select");
21 add_css_class( this.selector, "survey_answer_selector" );
22 this.selector.name = "survey_question_" + question.id();
23 this.selector.value = "survey_question_" + question.id();
24 this.node.appendChild(this.selector);
25 this.answers = new Array();
29 SurveyQuestion.prototype.getNode = function() {
33 SurveyQuestion.prototype.addAnswer = function(answer,poll) {
35 var ans = new SurveyAnswer(answer, poll);
36 this.answers.push(ans);
37 this.selector.appendChild(
38 createAppTextNode(answer.answer()));
39 this.selector.appendChild(ans.getNode());
41 var ans = new SurveyAnswer(answer);
42 this.answers.push(ans);
43 this.selector.options[ this.selector.options.length ] = ans.getNode();
48 function SurveyAnswer(answer,poll) {
54 this.node = createAppElement(
55 "<input name='answer_" + answer.id() + "' type='radio' value='" + answer.id() + "'></input>" );
58 this.node = createAppElement("input");
59 this.node.type = "radio";
60 this.node.setAttribute("type", "radio");
61 this.node.setAttribute("name", "survey_answer_" + answer.id());
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() {
76 function Survey(survey, onclick) {
78 debug("Creating new survey " + survey.name() );
81 this.node = createAppElement("div");
82 this.node.id = "survey_" + survey.id();
84 this.wrapperNode = createAppElement("div");
85 this.wrapperNode.appendChild(this.node);
86 this.nameNode = createAppElement("div");
87 this.nameNode.appendChild(createAppTextNode(survey.name()));
88 this.descNode = createAppElement("div");
89 this.descNode.appendChild( createAppTextNode(survey.description()));
91 if( survey.poll() == 0 )
93 if( survey.poll() == 1 )
97 this.qList = createAppElement("ul");
99 this.qList = createAppElement("ol");
101 this.questions = new Array();
102 this.submittedNode = createAppElement("div");
104 add_css_class(this.submittedNode, "survey_submitted" );
105 add_css_class(this.nameNode, "survey_name");
106 add_css_class(this.descNode, "survey_description");
107 add_css_class(this.node, "survey" );
109 this.node.appendChild( this.nameNode );
110 this.node.appendChild( this.descNode );
111 this.node.appendChild( this.qList );
113 for( var i in survey.questions() ) {
114 this.addQuestion( survey.questions()[i] );
117 this.buttonDiv = createAppElement("div");
118 add_css_class( this.buttonDiv, "survey_button");
119 this.button = createAppElement("input");
120 this.button.setAttribute("type", "submit");
121 this.button.value = "Submit Survey";
123 this.button.onclick = onclick;
124 this.buttonDiv.appendChild(this.button);
125 this.node.appendChild(this.buttonDiv);
126 this.node.appendChild( this.submittedNode );
127 this.node.appendChild(createAppElement("hr"));
130 this.setAction( function() { obj.submit(); });
133 Survey.prototype.setUserSession = function(userSession) {
134 this.userSession = userSession;
137 Survey.prototype.setAnswerDate = function(date) {
138 this.answerDate = date;
141 Survey.prototype.setEffectiveDate = function(date) {
142 this.effectiveDate = date;
145 Survey.prototype.setAction = function(onclick) {
146 this.button.onclick = onclick;
149 Survey.prototype.getName = function() {
150 debug("getting name for " + this.survey.name() );
151 return this.survey.name();
154 Survey.prototype.toString = function() {
155 return this.wrapperNode.innerHTML;
158 Survey.prototype.getNode = function() {
162 Survey.prototype.addQuestion = function(question) {
163 var questionObj = new SurveyQuestion(question, this.survey.poll());
164 this.questions.push(questionObj);
165 for( var i in question.answers() ) {
166 questionObj.addAnswer(question.answers()[i], this.survey.poll());
169 var item = createAppElement("li");
170 item.appendChild(questionObj.getNode());
171 this.qList.appendChild(item);
174 Survey.prototype.submit = function() {
176 var responses = this.buildSurveyResponse();
177 var request = new RemoteRequest(
179 "open-ils.circ.survey.submit",
183 /* there is nothing to return, just check for exceptions */
184 request.getResultObject();
185 this.buttonDiv.innerHTML = "";
186 this.submittedNode.appendChild(
187 createAppTextNode("* Submitted *"));
190 Survey.prototype.buildSurveyResponse = function() {
192 var responses = new Array();
194 for( var index in this.questions ) {
195 var que = this.questions[index];
197 for( var ansindex in que.answers ) {
198 ansobj = que.answers[ansindex];
199 if( ansobj.getNode().selected || ansobj.getNode().checked ) {
200 ans = ansobj.answer.id();
201 debug("User selected answer " + ans );
205 var qid = que.question.id()
206 var sur = new asvr();
207 sur.usr(this.userSession);
208 sur.survey(this.survey.id());
211 sur.answer_date(this.answerDate);
212 sur.effective_date(this.effectiveDate);
219 /* Global survey retrieval functions. In each case, if recvCallback
220 is not null, the retrieval will be asynchronous and will
221 call recvCallback(survey) on each survey retrieved. Otherwise
222 an array of surveys is returned.
225 Survey._retrieve = function(user_session, method, recvCallback) {
227 var request = new RemoteRequest(
228 "open-ils.circ", method, user_session );
232 debug("Retrieving random survey asynchronously");
233 var c = function(req) {
234 var surveys = req.getResultObject();
235 for( var i in surveys ) {
237 debug("Retrieved survey " + s.name() );
238 var surv = new Survey(s);
239 surv.setUserSession(user_session);
244 request.setCompleteCallback(c);
250 var surveys = new Array();
251 var results = request.getResultObject();
252 for(var index in results) {
253 var s = results[index];
254 debug("Retrieved survey " + s.name());
255 var surv = new Survey(s);
256 surv.setUserSession(user_session);
264 /* this needs a different method for retrieving the correct survey */
265 Survey.retrieveRandom = function(user_session, recvCallback) {
266 return Survey._retrieve(user_session,
267 "open-ils.circ.survey.retrieve.all", recvCallback );
272 Survey.retrieveAll = function(user_session, recvCallback) {
273 return Survey._retrieve(user_session,
274 "open-ils.circ.survey.retrieve.all", recvCallback );
278 Survey.retrieveRequired = function(user_session, recvCallback) {
279 return Survey._retrieve(user_session,
280 "open-ils.circ.survey.required.retrieve", recvCallback );