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

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

New question interfaces

File size: 6.4 KB
RevLine 
[26]1<?php
[40]2// Survey database interface class as intermediate for storing data from the site to the RDF database
[44]3require_once 'rdfConstants.php';
[26]4
5// Include RAP Library to write RDF files
6include(RDFAPI_INCLUDE_DIR . "RDFAPI.php");
7
8
9
[83]10class SurveyCreationDatabaseInterface
[28]11{               
[62]12    protected $surveyRDFWriter;
13    protected $surveyRDFReader;
[82]14    protected $questionRDFWriter;
15    protected $questionRDFReader;
[26]16
[40]17    public function __construct($surveyID)
[26]18    {
[62]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);
[82]26        $this->questionRDFWriter = new QuestionRDFWriter();
27        $this->questionRDFReader = new QuestionRDFReader();
[26]28    }
29
[82]30    public function setSurveyInfo($survey,$user)
[62]31    {
32        $sTitle = $survey['surveyTitle'];
33        $sDescription = $survey['surveyDescription'];
[26]34
[62]35        $this->surveyRDFWriter->createSurvey($sTitle,$sDescription);
36
[82]37        $sUserID = $user['username'];
[62]38
39        $this->surveyRDFWriter->setUserData($sUserID);
40
41        $qNumber = 1;
[105]42        while (isset($survey['questionCode'.$qNumber]))
[62]43        {
[105]44            $qCode = $survey['questionCode'.$qNumber];         
45            $this->surveyRDFWriter->addQuestion($qCode);
[62]46
47            $qNumber++;
48        }
49
50        $this->surveyRDFWriter->saveSurvey();
[82]51        $this->questionRDFWriter->saveQuestions();
[62]52    }
[85]53   
54    public function saveQuestion($questionInfo)
55    {
[105]56        $qCode = $question['questionCode'.$qNumber];
57        $qTitle = $question['questionTitle'.$qNumber];
58        $qDescription = $question['questionDescription'.$qNumber];
59        $qType = $question['questionType'.$qNumber];
[62]60
[85]61        $qAnswers = array();
62        $aNumber = 1;
[105]63        while (isset($question['ans'.$aNumber]))
[85]64        {
[105]65            $qAnswers[] = $question['ans'.$aNumber];
[85]66
67            $aNumber++;
68        }
69       
[91]70        if($this->checkQuestionCodeExists($qCode))
[85]71        {
[91]72            return 'Question code (' . $qCode . ') already in use. Please try a new code.';
73        }
[105]74        else
[91]75        {
[105]76            $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qCode,"null",$qAnswers);
[91]77            return 'Question saved';
[85]78        }
79    }
80
[62]81    public function getSurveyInfo()
82    {
83        $surveyInfo = array();
84
[82]85        $this->questionRDFReader->loadQuestions();
86       
[62]87        $resultSurvey = $this->surveyRDFReader->getSurveyInfo();
[82]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;
[62]102
[82]103                $questionTitleObject = $this->questionRDFReader->readQuestionTitle($questionID);
104                $surveyInfo['questionTitle'.$qNumber] = $questionTitleObject[0]['?questionTitle']->label;
[62]105
[82]106                $questionDescriptionObject = $this->questionRDFReader->readQuestionDescription($questionID);
107                $surveyInfo['questionDescription'.$qNumber] = $questionDescriptionObject[0]['?questionDescription']->label;
[62]108
[82]109                $questionTypeObject = $this->questionRDFReader->readQuestionType($questionID);
110                $surveyInfo['questionType'.$qNumber] = $questionTypeObject[0]['?questionType']->label;
[62]111
[82]112                $resultAnswers = $this->questionRDFReader->readQuestionAnswers($questionID);
113
114                if ($resultAnswers != null)
[62]115                {
[82]116                    for($aNumber = 1;$aNumber<=sizeof($resultAnswers);$aNumber++)
117                    {
118                        $surveyInfo['q'.$qNumber.'ans'.$aNumber] = $resultAnswers[$aNumber-1]['?answerDescription']->label;
119                    }
[62]120                }
[82]121                $resultAnswers = null;
122                $qNumber++;
[62]123            }
124        }
[82]125       
[62]126        return $surveyInfo;
127    }
[85]128   
[62]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        }
[82]141       
[62]142        foreach($surveyIDs as $surveyID)
143        {
144            $surveyTitle = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
[82]145            $surveys[$surveyID] = $surveyTitle[0]['?title']->label;
[62]146        }
147
148        return $surveys;
149    }
[80]150   
[105]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   
[80]166    public function getSurveyTitleByID($surveyID)
167    {
168        $surveyTitleLiteral = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
[82]169        $surveyTitle = $surveyTitle[0]['?title']->label;
[80]170       
171        return $surveyTitle;
172    }
[82]173   
[91]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    }
[26]195}
196?>
Note: See TracBrowser for help on using the repository browser.