CMS  Version 3.9
abstract_questionnaire_dashboard_manager.inc
Go to the documentation of this file.
1 <?php
7 Fakoli::using("questionnaire");
8 Fakoli::usingFile("/cms/components/questionnaire/abstract_questionnaire_manager.inc");
9 
16 abstract class AbstractQuestionnaireDashboardManager extends AbstractQuestionnaireManager
17 {
18  var $item;
19 
20  function AbstractQuestionnaireDashboardManager($item)
21  {
22  $this->item = $item;
23  }
24 
28  abstract function getComponentName();
29 
36  abstract function getCreateManager($item);
37 
38  abstract function getResultsManager($item);
39 
40  // can return null
41  abstract function getSendManager($item);
42 
46  function getTitleField()
47  {
48  return "title";
49  }
50 
55  function getCloneFields()
56  {
57  return null;
58  }
59 
70  function getQuestionnaireFormIdentifier()
71  {
72  return "{$this->item->table}_form";
73  }
74 
75 
90  function getCloneDialog()
91  {
92  return "clone_{$this->item->table}_dialog";
93  }
94 
95  function getQuestionnaireViewDialog()
96  {
97  return "{$this->item->table}_view";
98  }
99 
100 
110  function getQuestionnaireDeleteHandler()
111  {
112  $class = codify(strtolower($this->item->prettifyClassName()));
113  return "{$class}_delete";
114  }
115 
116  function getResponseFormIdentifier()
117  {
118  return "{$this->item->table}_response_form";
119  }
120 
121  function getResultsPageIdentifier()
122  {
123  return "{$this->item->table}_responses";
124  }
125 
126  function buildCloneForm()
127  {
128  $item = $this->item;
129  $title_field = $this->getTitleField();
130  $itemPk = $item->getPrimaryKey();
131  $cloneDialog = $this->getCloneDialog();
132  $component_name = $this->getComponentName();
133 
134  $item->$title_field = preg_replace("/'/","''", $item->$title_field);
135 
136  do
137  {
138  $item->$title_field = "Copy of " .$item->$title_field;
139  } while ($item->exists("WHERE {$title_field}='{$item->$title_field}'"));
140 
141  $item->title = preg_replace("/''/","'", $item->$title_field);
142 
143  $item->filter = new InclusionFilter($title_field);
144  $form = new AutoForm($item, "POST", "/action/{$component_name}/{$cloneDialog}?{$itemPk}={$item->$itemPk}", "CloneQuestionnaire_form");
145  $form->ajaxSubmit("function(result) {questionnaireMgr.cloneQuestionnaireResult(result);}", "function() {document.id('{$form->id}_error').set('text','Failed to communicate with server'); }");
146  $form->required($title_field);
147  $form->unique($title_field);
148  $form->button("Cancel", "questionnaireMgr.closeDialog()", null, true);
149 
150  return $form;
151  }
152 
153 
154  function getDashboardActions()
155  {
156  return array(
157  "" => "",
158  "view" => "View",
159  "edit" => "Edit",
160  "public_view" => "Respondent's View",
161  "clone" => "Save As...",
162  "view_results" => "View Results",
163  "delete" => "Delete",
164  );
165 
166  }
167 
168 
176  function cloneQuestionnaire()
177  {
178  $mgr = $this->getCreateManager($this->item);
179  return $mgr->cloneQuestionnaire($this->getTitleField(), $this->getCloneFields());
180  }
181 
182 
183  /*
184  *
185  * Called from dashboard data list view.
186  * Actions:
187  * View
188  * Edit
189  * Clone
190  *
191  * @param unknown_type $item
192  *
193  * Child classes may with to implement additional actions
194  */
195  function formatActions($item)
196  {
197  $mgr = $this->getResultsManager($item);
198  $pk = $item->getPrimaryKey();
199 
200  $responseCount = $mgr->getResponseCount();
201 
202  $mgr = $this->getCreateManager($item);
203  $actions = $this->getDashboardActions();
204  $mgr->filterActions($actions);
205 
206  $sendMgr = $this->getSendManager($item);
207  if($sendMgr)
208  {
209  $sendActions = $sendMgr->getSendActions();
210  if(count($sendActions))
211  {
212  foreach($sendActions as $code => $name)
213  {
214  $actions[$code] = $name;
215  }
216  }
217  }
218 
219  if($responseCount == 0)
220  {
221  unset($actions["view_results"]);
222  }
223 
224  $itemPk = $item->getPrimaryKey();
225 
226  $html .= $item->format("<span id='action_result_{{$pk}}' class='dashboard_action_result'></span><select id='action_{{$pk}}' style='width: 80px' onchange=\"questionnaireMgr.handleQuestionnaireAction(this, {{$pk}}); return false;\">");
227 
228  foreach($actions as $identifier => $label)
229  {
230  $value = htmlSafe($identifier);
231  $html .= "<option value='$value'>$label</option>";
232  }
233  $html .= "</select>\n";
234 
235  return $html;
236  }
237 
238  function formatTitleLink($item)
239  {
240  $form_id = $this->getQuestionnaireFormIdentifier($item);
241  $itemPk = $item->getPrimaryKey();
242  $title_field = $this->getTitleField();
243 
244  return $item->format("<a href=\"{$form_id}?$itemPk={$item->$itemPk}\">{{$title_field}}</a>\n");
245  }
246 
254  function getProgressBar($item)
255  {
256  $resultsMgr = $this->getResultsManager($item);
257  return $resultsMgr->getProgressBar();
258  }
259 
270  function writeScript()
271  {
272  $item = $this->item;
273  $itemPk = $item->getPrimaryKey();
274  $component_name = $this->getComponentName();
275  $item_label = $item->prettifyClassName();
276  $clone_dialog = $this->getCloneDialog();
277  $questionnaire_form_identifier = $this->getQuestionnaireFormIdentifier();
278  $item_delete_handler = $this->getQuestionnaireDeleteHandler();
279  $item_view_dialog = $this->getQuestionnaireViewDialog();
280  $response_form_identifier = $this->getResponseFormIdentifier();
281  $results_page_identifier = $this->getResultsPageIdentifier();
282 
283  $sendMgr = $this->getSendManager($this->item);
284  if($sendMgr)
285  {
286  $script .= $sendMgr->writeScript();
287  }
288 
289  ob_start();
290  ?>
291 <script type="text/javascript" src="/components/questionnaire/js/questionnaire_dashboard.js"></script>
292 <script type="text/javascript">
293 
294 var questionnaireMgr;
295 
296 window.addEvent('domready', function()
297 {
298  questionnaireMgr = new QuestionnaireDashboardManager(
299  '<?php echo $itemPk ?>',
300  '<?php echo $component_name ?>',
301  '<?php echo $item_label ?>',
302  '<?php echo $clone_dialog ?>',
303  '<?php echo $questionnaire_form_identifier ?>',
304  '<?php echo $item_delete_handler ?>',
305  '<?php echo $item_view_dialog ?>',
306  '<?php echo $response_form_identifier ?>',
307  '<?php echo $results_page_identifier ?>');
308 
309  if(questionnaireSendMgr)
310  {
311  questionnaireMgr.questionnaireSendMgr = questionnaireSendMgr;
312  }
313 });
314 
315 </script>
316 <?
317  $script .= ob_get_contents();
318  ob_end_clean();
319 
320  return $script;
321  }
322 } // AbstractQuestionnaireDashboardManager
323 ?>
$form
$name
Definition: upload.inc:54
Questionnaire/Survey Implementation instructions.
static using()
Import the datamodels, views and manifest for the specified component(s).
Definition: core.inc:116
static usingFile()
Uses the specified framework file(s) from the framework directory.
Definition: core.inc:369
$code
Definition: hide_hint.inc:36
$identifier
Definition: rss.inc:37
$sendMgr