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

Last change on this file since 96 was 91, checked in by basvannuland, 14 years ago

start with dashboard database

File size: 7.6 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['questionTitle'.$qNumber]))
43        {
44            $qTitle = $survey['questionTitle'.$qNumber];
45            $qDescription = $survey['questionDescription'.$qNumber];
46            $qType = $survey['questionType'.$qNumber];
47            if (isset($survey['questionID'.$qNumber]))
48                $qID = $survey['questionID'.$qNumber];
49            else
50                $qID = md5( uniqid(rand(), true) );
51
52            $qAnswers = array();
53            $aNumber = 1;
54            while (isset($survey['q'.$qNumber.'ans'.$aNumber]))
55            {
56                $qAnswers[] = $survey['q'.$qNumber.'ans'.$aNumber];
57
58                $aNumber++;
59            }
60
61            if(!$this->checkQuestionIDExists($qID))
62            {
63                $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qID,"null","null",$qAnswers);
64            }           
65            $this->surveyRDFWriter->addQuestion($qID);
66
67            $qNumber++;
68        }
69
70        $this->surveyRDFWriter->saveSurvey();
71        $this->questionRDFWriter->saveQuestions();
72    }
73   
74    public function saveQuestion($questionInfo)
75    {
76        $qTitle = $survey['questionTitle'.$qNumber];
77        $qDescription = $survey['questionDescription'.$qNumber];
78        $qType = $survey['questionType'.$qNumber];
79        if (isset($survey['questionID'.$qNumber]))
80            $qID = $survey['questionID'.$qNumber];
81        else
82            $qID = md5( uniqid(rand(), true) );
83
84        $qAnswers = array();
85        $aNumber = 1;
86        while (isset($survey['q'.$qNumber.'ans'.$aNumber]))
87        {
88            $aArray = array();
89            $aArray['Title'] = 'q'.$qNumber.'ans'.$aNumber;
90            $aArray['Description'] = $survey['q'.$qNumber.'ans'.$aNumber];
91            $qAnswers[] = $aArray;
92
93            $aNumber++;
94        }
95       
96        if($this->checkQuestionCodeExists($qCode))
97        {
98            return 'Question code (' . $qCode . ') already in use. Please try a new code.';
99        }
100        else if($this->checkQuestionIDExists($qID))
101        {
102            return 'Question already exists';
103        }
104        else {
105            $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qID,"null","null",$qAnswers);
106            return 'Question saved';
107        }
108    }
109
110    public function getSurveyInfo()
111    {
112        $surveyInfo = array();
113
114        $this->questionRDFReader->loadQuestions();
115       
116        $resultSurvey = $this->surveyRDFReader->getSurveyInfo();
117       
118        $surveyInfo['surveyID'] = $resultSurvey['info'][0]['?uid']->label;
119        $surveyInfo['surveyTitle'] = $resultSurvey['info'][0]['?title']->label;
120        $surveyInfo['surveyDescription'] = $resultSurvey['info'][0]['?description']->label;
121        $surveyInfo['surveyCreator'] = $resultSurvey['info'][0]['?creator']->label;
122        $surveyQuestionIDs = $resultSurvey['questionIDs'];
123       
124        if($surveyQuestionIDs != false)
125        {
126            $qNumber = 1;
127            foreach($surveyQuestionIDs as $qID)
128            {
129                $questionID = $qID['?questionID']->label;
130                $surveyInfo['questionID'.$qNumber] = $questionID;
131
132                $questionTitleObject = $this->questionRDFReader->readQuestionTitle($questionID);
133                $surveyInfo['questionTitle'.$qNumber] = $questionTitleObject[0]['?questionTitle']->label;
134
135                $questionDescriptionObject = $this->questionRDFReader->readQuestionDescription($questionID);
136                $surveyInfo['questionDescription'.$qNumber] = $questionDescriptionObject[0]['?questionDescription']->label;
137
138                $questionTypeObject = $this->questionRDFReader->readQuestionType($questionID);
139                $surveyInfo['questionType'.$qNumber] = $questionTypeObject[0]['?questionType']->label;
140
141                $resultAnswers = $this->questionRDFReader->readQuestionAnswers($questionID);
142
143                if ($resultAnswers != null)
144                {
145                    for($aNumber = 1;$aNumber<=sizeof($resultAnswers);$aNumber++)
146                    {
147                        $surveyInfo['q'.$qNumber.'ans'.$aNumber] = $resultAnswers[$aNumber-1]['?answerDescription']->label;
148                    }
149                }
150                $resultAnswers = null;
151                $qNumber++;
152            }
153        }
154       
155        return $surveyInfo;
156    }
157   
158    public function getExistingSurveys()
159    {
160        $surveyIDs = array();
161        $surveys = array();
162
163        if($handle = opendir('data/surveys/'))
164        {
165            while (false !== ($file = readdir($handle))) {
166                if(strstr($file, 'survey_') && strstr($file, '.rdf'))
167                    $surveyIDs[] = substr($file,7,strlen($file)-11);
168            }
169        }
170       
171        foreach($surveyIDs as $surveyID)
172        {
173            $surveyTitle = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
174            $surveys[$surveyID] = $surveyTitle[0]['?title']->label;
175        }
176
177        return $surveys;
178    }
179   
180    public function getSurveyTitleByID($surveyID)
181    {
182        $surveyTitleLiteral = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
183        $surveyTitle = $surveyTitle[0]['?title']->label;
184       
185        return $surveyTitle;
186    }
187
188   
189   
190    public function checkQuestionIDExists($qID)
191    {
192        $result = false;
193
194        $questionIDs = $this->questionRDFReader->readQuestionIDs();
195       
196        if ($questionIDs != null)
197        {
198            foreach($questionIDs as $questionID)
199            {
200                $id = $questionID['?questionID']->label;
201                if(!strcmp($id ,$qID))
202                {
203                    $result = true;
204                    break;
205                }
206            }
207        }
208
209        return $result;
210    }
211   
212    public function checkQuestionCodeExists($qCode)
213    {
214        $result = false;
215
216        $questionCodes = $this->questionRDFReader->readQuestionCodes();
217       
218        if ($questionCodes != null)
219        {
220            foreach($questionCodes as $questionCode)
221            {
222                $code = $questionCode['?questionCode']->label;
223                if(!strcmp($code ,$qCode))
224                {
225                    $result = true;
226                    break;
227                }
228            }
229        }
230
231        return $result;
232    }
233}
234?>
Note: See TracBrowser for help on using the repository browser.