/
GroupsController.php
108 lines (91 loc) · 4.43 KB
/
GroupsController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
class GroupsController extends LSYii_Controller
{
public function actionPreview($id, $language = 'en')
{
App()->setLang(new Limesurvey_lang($language));
$group = Groups::model()->findByAttributes(array(
'gid' => $id
));
$renderedQuestions = array();
if (isset($group))
{
App()->getSurveySession()->create($group->sid, true);
if (!isset($language))
{
$language = Survey::model()->findFieldByPk($group->sid, 'language');
}
$questions = Questions::model()->findAllByAttributes(array(
'gid' => $id,
'parent_id' => null
));
Yii::import('ext.ExpressionManager.ExpressionManager');
$em = new ExpressionManager(array(
'isValidVariable' => function($name) {
//echo 'isvalid:<br>'; var_dump($name);
return true;
},
'GetVarAttribute' => function($name, $attr, $default) {
//echo 'getattr:<br>'; var_dump(func_get_args());
switch ($attr) {
case 'code': return $name;
case 'jsName' : return 'JS' . $name;
default: return $default;
}
}
));
$renderedQuestions = array();
$data = array();
$i = 0;
foreach ($questions as $question)
{
$questionObject = App()->getPluginManager()->constructQuestionFromGUID($question->questiontype, $question->qid);
if (!isset($data[$questionObject->getGUID()]))
{
$data[$questionObject->getGUID()] = $questionObject->getJavascript();
}
$name = "{$group->group_name}-{$question->qid}";
$renderedQuestions[] = $questionObject->render($name, $language, true);
App()->getLimeScript()->add("p.questions.{$question->code}.type", $questionObject->getGUID());
App()->getLimeScript()->add("p.questions.{$question->code}.div", "question$i");
// Register variables.
$code = $question->code;
// More variables shoudl be added here.
App()->getLimeScript()->add("p.VariableToCode.$code", $code);
App()->getLimeScript()->add("p.questions.{$question->code}.id", $name);
if ($question->relevance != null)
{
$em->ProcessBooleanExpression($question->relevance);
$js = $em->GetJavaScriptEquivalentOfExpression();
App()->getLimeScript()->add("p.questions.{$question->code}.relevanceStatus", new CJavaScriptExpression('function() { return ' . $js . '; }'));
}
foreach ($questionObject->getVariables() as $variable)
{
App()->getLimeScript()->add("p.VariableToCode.{$code}_{$variable}", $code);
}
$i++;
}
App()->getLimeScript()->add("p.QuestionTypes", $data);
}
$template = Survey::model()->findFieldByPk($group->sid, 'template');
$this->layout = 'survey';
/*
var_dump($em->ProcessBooleanExpression('q1 == 1'));
echo '---------------------';
var_dump($em->GetJavaScriptEquivalentOfExpression());
echo '---------------------';
var_dump($em->sProcessStringContainingExpressions('test123 {1+2}'));
*/
$this->render('/groups/preview', compact('renderedQuestions', 'template'));
}
public function actionView($id)
{
$group = Groups::model()->findByAttributes(array(
'gid' => $id
));
$this->navData['groupId'] = $id;
$this->navData['surveyId'] = $group['sid'];
$this->render('/groups/view', compact('group'));
}
}
?>