source: Dev/trunk/classes/SurveyCreationDatabaseInterface.php @ 112

Last change on this file since 112 was 105, checked in by basvannuland, 14 years ago

New question interfaces

File size: 6.4 KB
Line 
1<?php
2// Survey database interface class as intermediate for storing data from the site to the RDF database
3require_once 'rdfConstants.php';
4
5// Include RAP Library to write RDF files
6include(RDFAPI_INCLUDE_DIR . "RDFAPI.php");
7
8
9
10class SurveyCreationDatabaseInterface
11{               
12    protected $surveyRDFWriter;
13    protected $surveyRDFReader;
14    protected $questionRDFWriter;
15    protected $questionRDFReader;
16
17    public function __construct($surveyID)
18    {
19        if($surveyID == null)
20            $surveyUID = md5( uniqid(rand(), true) );
21        else
22            $surveyUID = $surveyID;
23
24        $this->surveyRDFWriter = new SurveyRDFWriter($surveyUID);
25        $this->surveyRDFReader = new SurveyRDFReader($surveyUID);
26        $this->questionRDFWriter = new QuestionRDFWriter();
27        $this->questionRDFReader = new QuestionRDFReader();
28    }
29
30    public function setSurveyInfo($survey,$user)
31    {
32        $sTitle = $survey['surveyTitle'];
33        $sDescription = $survey['surveyDescription'];
34
35        $this->surveyRDFWriter->createSurvey($sTitle,$sDescription);
36
37        $sUserID = $user['username'];
38
39        $this->surveyRDFWriter->setUserData($sUserID);
40
41        $qNumber = 1;
42        while (isset($survey['questionCode'.$qNumber]))
43        {
44            $qCode = $survey['questionCode'.$qNumber];         
45            $this->surveyRDFWriter->addQuestion($qCode);
46
47            $qNumber++;
48        }
49
50        $this->surveyRDFWriter->saveSurvey();
51        $this->questionRDFWriter->saveQuestions();
52    }
53   
54    public function saveQuestion($questionInfo)
55    {
56        $qCode = $question['questionCode'.$qNumber];
57        $qTitle = $question['questionTitle'.$qNumber];
58        $qDescription = $question['questionDescription'.$qNumber];
59        $qType = $question['questionType'.$qNumber];
60
61        $qAnswers = array();
62        $aNumber = 1;
63        while (isset($question['ans'.$aNumber]))
64        {
65            $qAnswers[] = $question['ans'.$aNumber];
66
67            $aNumber++;
68        }
69       
70        if($this->checkQuestionCodeExists($qCode))
71        {
72            return 'Question code (' . $qCode . ') already in use. Please try a new code.';
73        }
74        else
75        {
76            $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qCode,"null",$qAnswers);
77            return 'Question saved';
78        }
79    }
80
81    public function getSurveyInfo()
82    {
83        $surveyInfo = array();
84
85        $this->questionRDFReader->loadQuestions();
86       
87        $resultSurvey = $this->surveyRDFReader->getSurveyInfo();
88       
89        $surveyInfo['surveyID'] = $resultSurvey['info'][0]['?uid']->label;
90        $surveyInfo['surveyTitle'] = $resultSurvey['info'][0]['?title']->label;
91        $surveyInfo['surveyDescription'] = $resultSurvey['info'][0]['?description']->label;
92        $surveyInfo['surveyCreator'] = $resultSurvey['info'][0]['?creator']->label;
93        $surveyQuestionIDs = $resultSurvey['questionIDs'];
94       
95        if($surveyQuestionIDs != false)
96        {
97            $qNumber = 1;
98            foreach($surveyQuestionIDs as $qID)
99            {
100                $questionID = $qID['?questionID']->label;
101                $surveyInfo['questionID'.$qNumber] = $questionID;
102
103                $questionTitleObject = $this->questionRDFReader->readQuestionTitle($questionID);
104                $surveyInfo['questionTitle'.$qNumber] = $questionTitleObject[0]['?questionTitle']->label;
105
106                $questionDescriptionObject = $this->questionRDFReader->readQuestionDescription($questionID);
107                $surveyInfo['questionDescription'.$qNumber] = $questionDescriptionObject[0]['?questionDescription']->label;
108
109                $questionTypeObject = $this->questionRDFReader->readQuestionType($questionID);
110                $surveyInfo['questionType'.$qNumber] = $questionTypeObject[0]['?questionType']->label;
111
112                $resultAnswers = $this->questionRDFReader->readQuestionAnswers($questionID);
113
114                if ($resultAnswers != null)
115                {
116                    for($aNumber = 1;$aNumber<=sizeof($resultAnswers);$aNumber++)
117                    {
118                        $surveyInfo['q'.$qNumber.'ans'.$aNumber] = $resultAnswers[$aNumber-1]['?answerDescription']->label;
119                    }
120                }
121                $resultAnswers = null;
122                $qNumber++;
123            }
124        }
125       
126        return $surveyInfo;
127    }
128   
129    public function getExistingSurveys()
130    {
131        $surveyIDs = array();
132        $surveys = array();
133
134        if($handle = opendir('data/surveys/'))
135        {
136            while (false !== ($file = readdir($handle))) {
137                if(strstr($file, 'survey_') && strstr($file, '.rdf'))
138                    $surveyIDs[] = substr($file,7,strlen($file)-11);
139            }
140        }
141       
142        foreach($surveyIDs as $surveyID)
143        {
144            $surveyTitle = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
145            $surveys[$surveyID] = $surveyTitle[0]['?title']->label;
146        }
147
148        return $surveys;
149    }
150   
151    public function getExistingQuestions()
152    {
153        $questions = array();
154
155        $resultQuestions = $this->questionRDFReader->readQuestionCodes();
156        foreach ($resultQuestions as $questionCodeObject)
157        {
158            $questionCode = $questionCodeObject[0]['?questionCode']->label;
159            $questionTitle = $this->questionRDFReader->readQuestionTitle($questionCode);
160            $questions[$questionCode] = $questionTitle[0]['?questionTitle']->label;
161        }
162
163        return $questions;
164    }
165   
166    public function getSurveyTitleByID($surveyID)
167    {
168        $surveyTitleLiteral = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
169        $surveyTitle = $surveyTitle[0]['?title']->label;
170       
171        return $surveyTitle;
172    }
173   
174    public function checkQuestionCodeExists($qCode)
175    {
176        $result = false;
177
178        $questionCodes = $this->questionRDFReader->readQuestionCodes();
179       
180        if ($questionCodes != null)
181        {
182            foreach($questionCodes as $questionCode)
183            {
184                $code = $questionCode['?questionCode']->label;
185                if(!strcmp($code ,$qCode))
186                {
187                    $result = true;
188                    break;
189                }
190            }
191        }
192
193        return $result;
194    }
195}
196?>
Note: See TracBrowser for help on using the repository browser.