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

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

Start with new separate question db

File size: 5.9 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 SurveyDatabaseInterface
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                $aArray = array();
57                $aArray['Title'] = 'q'.$qNumber.'ans'.$aNumber;
58                $aArray['Description'] = $survey['q'.$qNumber.'ans'.$aNumber];
59                $qAnswers[] = $aArray;
60
61                $aNumber++;
62            }
63
64            if(!$this->checkQuestionIDExists($qID))
65            {
66                $this->questionRDFWriter->createQuestion($qTitle,$qDescription,$qType,$qID,"null","null",$qAnswers);
67            }           
68            $this->surveyRDFWriter->addQuestion($qID);
69
70            $qNumber++;
71        }
72
73        $this->surveyRDFWriter->saveSurvey();
74        $this->questionRDFWriter->saveQuestions();
75    }
76
77    public function getSurveyInfo()
78    {
79        $surveyInfo = array();
80
81        $this->questionRDFReader->loadQuestions();
82       
83        $resultSurvey = $this->surveyRDFReader->getSurveyInfo();
84       
85        $surveyInfo['surveyID'] = $resultSurvey['info'][0]['?uid']->label;
86        $surveyInfo['surveyTitle'] = $resultSurvey['info'][0]['?title']->label;
87        $surveyInfo['surveyDescription'] = $resultSurvey['info'][0]['?description']->label;
88        $surveyInfo['surveyCreator'] = $resultSurvey['info'][0]['?creator']->label;
89        $surveyQuestionIDs = $resultSurvey['questionIDs'];
90       
91        if($surveyQuestionIDs != false)
92        {
93            $qNumber = 1;
94            foreach($surveyQuestionIDs as $qID)
95            {
96                $questionID = $qID['?questionID']->label;
97                $surveyInfo['questionID'.$qNumber] = $questionID;
98
99                $questionTitleObject = $this->questionRDFReader->readQuestionTitle($questionID);
100                $surveyInfo['questionTitle'.$qNumber] = $questionTitleObject[0]['?questionTitle']->label;
101
102                $questionDescriptionObject = $this->questionRDFReader->readQuestionDescription($questionID);
103                $surveyInfo['questionDescription'.$qNumber] = $questionDescriptionObject[0]['?questionDescription']->label;
104
105                $questionTypeObject = $this->questionRDFReader->readQuestionType($questionID);
106                $surveyInfo['questionType'.$qNumber] = $questionTypeObject[0]['?questionType']->label;
107
108                $resultAnswers = $this->questionRDFReader->readQuestionAnswers($questionID);
109
110                if ($resultAnswers != null)
111                {
112                    for($aNumber = 1;$aNumber<=sizeof($resultAnswers);$aNumber++)
113                    {
114                        $surveyInfo['q'.$qNumber.'ans'.$aNumber] = $resultAnswers[$aNumber-1]['?answerDescription']->label;
115                    }
116                }
117                $resultAnswers = null;
118                $qNumber++;
119            }
120        }
121       
122        return $surveyInfo;
123    }
124
125    public function getExistingSurveys()
126    {
127        $surveyIDs = array();
128        $surveys = array();
129
130        if($handle = opendir('data/surveys/'))
131        {
132            while (false !== ($file = readdir($handle))) {
133                if(strstr($file, 'survey_') && strstr($file, '.rdf'))
134                    $surveyIDs[] = substr($file,7,strlen($file)-11);
135            }
136        }
137       
138        foreach($surveyIDs as $surveyID)
139        {
140            $surveyTitle = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
141            $surveys[$surveyID] = $surveyTitle[0]['?title']->label;
142        }
143
144        return $surveys;
145    }
146   
147    public function getSurveyTitleByID($surveyID)
148    {
149        $surveyTitleLiteral = $this->surveyRDFReader->getSurveyTitleByID($surveyID);
150        $surveyTitle = $surveyTitle[0]['?title']->label;
151       
152        return $surveyTitle;
153    }
154
155   
156   
157    public function checkQuestionIDExists($qID)
158    {
159        $result = false;
160
161        $questionIDs = $this->questionRDFReader->readQuestionIDs();
162       
163        if ($questionIDs != null)
164        {
165            foreach($questionIDs as $questionID)
166            {
167                $id = $questionID['?questionID']->label;
168                if(!strcmp($id ,$qID))
169                {
170                    $result = true;
171                    break;
172                }
173            }
174        }
175
176        return $result;
177    }
178}
179?>
Note: See TracBrowser for help on using the repository browser.