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

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

Base for all databases done. not tested. Need frontend to properly test.

File size: 6.7 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->checkQuestionIDExists($qID))
97        {
98            $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qID,"null","null",$qAnswers);
99        }
100    }
101
102    public function getSurveyInfo()
103    {
104        $surveyInfo = array();
105
106        $this->questionRDFReader->loadQuestions();
107       
108        $resultSurvey = $this->surveyRDFReader->getSurveyInfo();
109       
110        $surveyInfo['surveyID'] = $resultSurvey['info'][0]['?uid']->label;
111        $surveyInfo['surveyTitle'] = $resultSurvey['info'][0]['?title']->label;
112        $surveyInfo['surveyDescription'] = $resultSurvey['info'][0]['?description']->label;
113        $surveyInfo['surveyCreator'] = $resultSurvey['info'][0]['?creator']->label;
114        $surveyQuestionIDs = $resultSurvey['questionIDs'];
115       
116        if($surveyQuestionIDs != false)
117        {
118            $qNumber = 1;
119            foreach($surveyQuestionIDs as $qID)
120            {
121                $questionID = $qID['?questionID']->label;
122                $surveyInfo['questionID'.$qNumber] = $questionID;
123
124                $questionTitleObject = $this->questionRDFReader->readQuestionTitle($questionID);
125                $surveyInfo['questionTitle'.$qNumber] = $questionTitleObject[0]['?questionTitle']->label;
126
127                $questionDescriptionObject = $this->questionRDFReader->readQuestionDescription($questionID);
128                $surveyInfo['questionDescription'.$qNumber] = $questionDescriptionObject[0]['?questionDescription']->label;
129
130                $questionTypeObject = $this->questionRDFReader->readQuestionType($questionID);
131                $surveyInfo['questionType'.$qNumber] = $questionTypeObject[0]['?questionType']->label;
132
133                $resultAnswers = $this->questionRDFReader->readQuestionAnswers($questionID);
134
135                if ($resultAnswers != null)
136                {
137                    for($aNumber = 1;$aNumber<=sizeof($resultAnswers);$aNumber++)
138                    {
139                        $surveyInfo['q'.$qNumber.'ans'.$aNumber] = $resultAnswers[$aNumber-1]['?answerDescription']->label;
140                    }
141                }
142                $resultAnswers = null;
143                $qNumber++;
144            }
145        }
146       
147        return $surveyInfo;
148    }
149   
150    public function getExistingSurveys()
151    {
152        $surveyIDs = array();
153        $surveys = array();
154
155        if($handle = opendir('data/surveys/'))
156        {
157            while (false !== ($file = readdir($handle))) {
158                if(strstr($file, 'survey_') && strstr($file, '.rdf'))
159                    $surveyIDs[] = substr($file,7,strlen($file)-11);
160            }
161        }
162       
163        foreach($surveyIDs as $surveyID)
164        {
165            $surveyTitle = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
166            $surveys[$surveyID] = $surveyTitle[0]['?title']->label;
167        }
168
169        return $surveys;
170    }
171   
172    public function getSurveyTitleByID($surveyID)
173    {
174        $surveyTitleLiteral = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
175        $surveyTitle = $surveyTitle[0]['?title']->label;
176       
177        return $surveyTitle;
178    }
179
180   
181   
182    public function checkQuestionIDExists($qID)
183    {
184        $result = false;
185
186        $questionIDs = $this->questionRDFReader->readQuestionIDs();
187       
188        if ($questionIDs != null)
189        {
190            foreach($questionIDs as $questionID)
191            {
192                $id = $questionID['?questionID']->label;
193                if(!strcmp($id ,$qID))
194                {
195                    $result = true;
196                    break;
197                }
198            }
199        }
200
201        return $result;
202    }
203}
204?>
Note: See TracBrowser for help on using the repository browser.