CMS  Version 3.9
questionnaire_spreadsheet_view.inc
Go to the documentation of this file.
1 <?php
8 /*
9  * Show the results for one questionnaire in the format:
10  *
11  * Company Name Question 1 Question 2...
12  * Acme Answer 1 Answer 2
13  *
14  * Steps:
15  *
16  * 1) Get all response objects for this questionnaire. A response
17  * object is a record that links one person's set of answers
18  * to one questionnaire's set of questions.
19  *
20  * 2) For each response object, create a dummy data model
21  * object of class SpreadsheetResponse. This object will hold
22  * the response object's name (e.g., participant or company name)
23  * and the answers to each question in the questionnaire. Since the
24  * number of questions in a surey varies, we create the field list
25  * for SurveySpreadsheet dynamically and assign each field its
26  * formatted answer value, retrieved from the QuestionnaireForm class.
27  *
28  * 3) Give all the spreadsheet objects to DataListView to render
29  * the table.
30  *
31  * @param mgr - instance of SurveyResultsManager
32  * which can access array of response objects and
33  * get the question set for the questionnaire
34  */
36 {
37  var $mgr;
38  var $table;
39  var $spreadsheetResponses; // save this var in case needed for a custom output
40 
42  {
43  $this->mgr = $mgr;
44  $this->spreadsheetResponses = $this->getSpreadsheetResponses($mgr->Responses(), $mgr->getAnswers(), $mgr->getQuestionKey());
45  $this->table = $this->buildTable($this->spreadsheetResponses, $mgr->getQuestions());
46  }
47 
48  /*
49  * $responses - array of response objects that link a questionnaire to a set of answers.
50  *
51  * $questionnaireAnswers - array of all answers to this questionnaire.
52  *
53  * $qPk - the questionnaire question table primary key name (e.g., questionnaire_id)
54  */
55  function getSpreadsheetResponses($responses, $questionnaireAnswers, $qPk)
56  {
57  if(count($responses) == 0)
58  {
59  return;
60  }
61 
62  $pk = $responses[0]->primary_key;
63  $answers = reindexList($questionnaireAnswers, $pk);
64  $responseManager = $this->mgr->getResponseManager($responses[0]);
65 
66  $view = new QuestionnaireForm($responseManager);
67 
68  /*
69  * Reuse the same view obj for each response, replacing only the response
70  * obj and the set of answers, not re-retrieving the question set.
71  */
72  foreach($responses as $response)
73  {
74  // Don't reinstantiate the responseManager,
75  // just give it the new obj.
76  $responseManager->item = $response;
77  $responseAnswers = $answers[$response->$pk];
78  if(!is_array($responseAnswers))
79  $responseAnswers = array($responseAnswers);
80  $view->answers = reindexList($responseAnswers, $qPk);
81 
82  $idx = 1;
83  $spreadsheetResponse = new SpreadsheetResponse();
84 
85  $fields = $spreadsheetResponse->getFields();
86  $values = array();
87 
88  $values["name"] = $responseManager->getRespondent();
89  $fields[$pk] = Number;
90  $values[$pk] = $response->$pk;
91 
92  foreach($view->questions as $question)
93  {
94  $fields["answer_{$idx}"] = String;
95  $values["answer_{$idx}"] = $question->getSpreadSheetAnswer();
96  $idx++;
97  }
98  $spreadsheetResponse->fields = $fields;
99 
100  // Assign each field its value.
101  foreach($spreadsheetResponse->fields as $name => $type)
102  $spreadsheetResponse->$name = $values[$name];
103 
104  $spreadsheetResponses[] = $spreadsheetResponse;
105  }
106  return $spreadsheetResponses;
107  }
108 
110  {
111  $table = new DataListView($spreadsheetResponses, "questionnaireSpreadsheet");
112  $table->column($this->mgr->getRespondentColumnHeading(), $this->mgr->getRespondentColumnFormat(), true, "width: 40px");
113 
114  $this->mgr->addRespondentAdditionalColumns($table);
115 
116  if(count($questions) > 0)
117  {
118  $idx = 1;
119  foreach($questions as $question)
120  {
121  $title = ($question->question_name) ? ellipsis(stripHTML($question->question_name), 80) : ellipsis(stripHTML($question->question), 80);
122  $table->column("{$title}", "{answer_$idx}", false, "width: 120px");
123  $idx++;
124  }
125  }
126 
127  $width = (120 * $idx )+ 40;
128 
129  $table->emptyMessage = "There are no responses to this questionnaire.";
130  $table->sortable = true;
131  $table->paginate = false;
132  $table->dragColumnReorder = true;
133  $table->filter = false;
134  $table->cssStyle = "width: {$width}px; font-size: 10px; white-space: normal;";
135  $table->excelFile = "questionnaireSpreadsheet.xls";
136 
137  return $table;
138  }
139 
140  function writeScript()
141  {
142  return $this->table->writeScript();
143  }
144 
145  function drawView()
146  {
147  $this->table->drawView();
148  }
149 }
150 
151 
152 ?>
$view
Definition: help.inc:42
$name
Definition: upload.inc:54
getSpreadsheetResponses($responses, $questionnaireAnswers, $qPk)
buildTable($spreadsheetResponses, $questions)
Dummy datamodel for building SpreadsheetView.
$width
Definition: cover.inc:37
$question
$answers
if(! $user) if(! $response_id) $response