Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
quiz-3218427
Manage
Activity
Members
Labels
Plan
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Issue forks
quiz-3218427
Commits
62fc8879
Commit
62fc8879
authored
17 years ago
by
Joshua Ellinger
Browse files
Options
Downloads
Patches
Plain Diff
Revert to previous quiz.install to address quiz update flaws.
parent
a854892c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
quiz.install
+12
-258
12 additions, 258 deletions
quiz.install
with
12 additions
and
258 deletions
quiz.install
+
12
−
258
View file @
62fc8879
...
...
@@ -136,272 +136,26 @@ function quiz_uninstall() {
variable_del
(
'quiz_default_pass_rate'
);
}
/**
* Implementation of hook_update_N().
*
*/
function
quiz_update_2
()
{
function
quiz_update_1
()
{
$ret
=
array
();
//Use db_update to display which queries were run
switch
(
$GLOBALS
[
'db_type'
])
{
case
'mysql'
:
case
'mysqli'
:
/**
* Stores correct answers for multichoice quiz.
*/
// Creates the quiz node user answers multichoice table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_multichoice_user_answers
}
(
question_nid INTEGER UNSIGNED NOT NULL,
question_vid INTEGER UNSIGNED NOT NULL,
result_id INTEGER UNSIGNED NOT NULL,
answer_id INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(result_id, question_nid, question_vid, answer_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* Stores user answers for multichoice quiz.
*/
// Creates the quiz node answers multichoice table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_multichoice_answers
}
(
answer_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nid INTEGER UNSIGNED NOT NULL,
vid INTEGER UNSIGNED NOT NULL,
answer varchar(255) NOT NULL,
feedback LONGTEXT,
result_option INTEGER UNSIGNED DEFAULT 0,
is_correct TINYINT UNSIGNED DEFAULT 0,
PRIMARY KEY(answer_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* This connects all the quiz specific properties to the correct version of a quiz.
*/
// Creates the quiz node properties table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_properties
}
(
property_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
vid INTEGER UNSIGNED NOT NULL,
nid INTEGER UNSIGNED NOT NULL,
number_of_random_questions TINYINT UNSIGNED DEFAULT 0 NOT NULL,
pass_rate TINYINT UNSIGNED NOT NULL,
summary_pass LONGTEXT,
summary_default LONGTEXT,
shuffle TINYINT UNSIGNED NOT NULL,
backwards_navigation TINYINT UNSIGNED NOT NULL,
feedback_time TINYINT UNSIGNED NOT NULL,
quiz_open INTEGER UNSIGNED DEFAULT 0,
quiz_close INTEGER UNSIGNED DEFAULT 0,
takes TINYINT UNSIGNED NOT NULL,
time_limit INTEGER UNSIGNED DEFAULT 0 NOT NULL,
quiz_always TINYINT NOT NULL default 0,
tid INTEGER UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY(property_id),
KEY vid (vid, nid)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* Both a quiz and a quiz question are nodes with versions. A quiz is a parent node of a quiz question,
* making the quiz question the child.
*
* The quiz_node_relationship table stores this relationship in a way that allows a quiz question to be
* the child of multiple quizzes without losing version history.
*
* Future functionality will allow a quiz question to be a parent of another quiz question with the same
* data model. This will make adaptive quiz functionality possible without redesign.
*/
// Creates the quiz node relationship table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_relationship
}
(
parent_nid INTEGER UNSIGNED NOT NULL,
parent_vid INTEGER UNSIGNED NOT NULL,
child_nid INTEGER UNSIGNED NOT NULL,
child_vid INTEGER UNSIGNED NOT NULL,
question_status TINYINT UNSIGNED DEFAULT 1 NOT NULL,
PRIMARY KEY(parent_nid, parent_vid, child_nid, child_vid)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* This connects all the quiz question specific properties to the correct version of a quiz question.
*/
// Creates the quiz node question properties table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_question_properties
}
(
nid INTEGER UNSIGNED NOT NULL,
vid INTEGER UNSIGNED NOT NULL,
number_of_answers TINYINT UNSIGNED DEFAULT 1 NOT NULL
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
// add a result option to the answer table
$ret
[]
=
update_sql
(
"ALTER TABLE
{
quiz_question_answer
}
ADD result_option INTEGER UNSIGNED NULL"
);
/**
* Quiz specific options concerning availability and access to scores.
*/
// Creates the quiz node results table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_results
}
(
result_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
// Create the result options table
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_result_options
}
(
nid INTEGER UNSIGNED NOT NULL,
vid INTEGER UNSIGNED NOT NULL,
uid INTEGER UNSIGNED NOT NULL,
time_start INTEGER UNSIGNED DEFAULT 0,
time_end INTEGER UNSIGNED DEFAULT 0,
released INTEGER UNSIGNED DEFAULT 0,
score TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY(result_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* Information about a particular question in a result
*/
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_results_answers
}
(
result_id INT UNSIGNED NOT NULL ,
question_nid INT UNSIGNED NOT NULL ,
question_vid INT UNSIGNED NOT NULL ,
is_correct TINYINT UNSIGNED NOT NULL DEFAULT '0',
points_awarded TINYINT NOT NULL DEFAULT '0',
answer_timestamp INT UNSIGNED NOT NULL,
PRIMARY KEY(result_id, question_nid, question_vid)
option_id INTEGER UNSIGNED NOT NULL,
option_name VARCHAR(255) character set utf8 NOT NULL,
option_summary LONGTEXT character set utf8 NOT NULL,
option_start TINYINT UNSIGNED NULL,
option_end TINYINT UNSIGNED NULL,
PRIMARY KEY (nid, option_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
/**
* Allows custom feedback based on the results of a user completing a quiz.
*/
// Creates the quiz node result options table.
$ret
[]
=
update_sql
(
"CREATE TABLE
{
quiz_node_result_options
}
(
option_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nid INTEGER UNSIGNED NOT NULL,
vid INTEGER UNSIGNED NOT NULL,
option_name VARCHAR(255) NOT NULL,
option_summary LONGTEXT,
option_start INTEGER UNSIGNED DEFAULT 0,
option_end INTEGER UNSIGNED DEFAULT 0,
PRIMARY KEY(option_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
quiz_data_update_2
();
break
;
}
return
$ret
;
}
/**
* Updates data from quiz 1.1.
*
*/
function
quiz_data_update_2
()
{
$results
=
db_query
(
"SELECT * FROM
{
quiz
}
"
);
while
(
$row
=
db_fetch_object
(
$results
))
{
$nid
=
$row
->
nid
;
$number_of_random_questions
=
$row
->
number_of_questions
;
$pass_rate
=
$row
->
pass_rate
;
$summary_pass
=
$row
->
summary_pass
;
$summary_default
=
$row
->
summary_default
;
$shuffle
=
$row
->
shuffle
;
$backwards_navigation
=
$row
->
backwards_navigation
;
$feedback_time
=
$row
->
feedback_time
;
$quiz_open
=
$row
->
quiz_open
;
$quiz_close
=
$row
->
quiz_close
;
$takes
=
$row
->
takes
;
$time_limit
=
$row
->
time_limit
;
$quiz_alaways
=
$row
->
quiz_always
;
$node
=
node_load
(
$nid
);
$vid
=
$node
->
vid
;
$tid
=
$node
->
tid
;
$sql
=
"INSERT INTO
{
quiz_node_properties
}
"
.
"(vid, nid, number_of_random_questions, shuffle, quiz_open, quiz_close, takes, pass_rate, "
.
"summary_pass, summary_default, quiz_always, feedback_time, tid) "
.
"VALUES(%d, %d, %d, %d, %d, %d, %d, %d, '%s', '%s', %d, %d, %d)"
;
db_query
(
$sql
,
$vid
,
$nid
,
$number_of_random_questions
,
$shuffle
,
$quiz_open
,
$quiz_close
,
$takes
,
$pass_rate
,
$summary_pass
,
$summary_default
,
$quiz_always
,
$feedback_time
,
$tid
);
}
$results
=
db_query
(
"SELECT * FROM
{
quiz_question_answer
}
"
);
while
(
$row
=
db_fetch_object
(
$results
))
{
$question_nid
=
$row
->
question_nid
;
$answer
=
$row
->
answer
;
$feedback
=
$row
->
feedback
;
$points
=
$row
->
points
;
$result_option
=
$row
->
result_option
;
$node
=
node_load
(
$question_nid
);
$vid
=
$node
->
vid
;
$is_correct
=
$points
;
db_query
(
"INSERT INTO
{
quiz_multichoice_answers
}
(nid, vid, answer, feedback, result_option, is_correct) "
.
"VALUES(%d, %d, '%s', '%s', %d, %d)"
,
$question_nid
,
$vid
,
$answer
,
$feedback
,
$result_option
,
$is_correct
);
}
$results
=
db_query
(
"SELECT * FROM
{
quiz_questions
}
"
);
while
(
$row
=
db_fetch_object
(
$results
))
{
$parent_nid
=
$row
->
quiz_nid
;
$child_nid
=
$row
->
question_nid
;
$parent
=
node_load
(
$parent_nid
);
$parent_vid
=
$parent
->
vid
;
$child
=
node_load
(
$child_nid
);
$child_vid
=
$child
->
vid
;
$question_status
=
$row
->
question_status
;
db_query
(
"INSERT INTO
{
quiz_node_relationship
}
(parent_nid, parent_vid, child_nid, child_vid, question_status) "
.
"VALUES (%d, %d, %d, %d, %d)"
,
$parent_nid
,
$parent_vid
,
$child_nid
,
$child_vid
,
$question_status
);
}
$results
=
db_query
(
"SELECT nid, properties FROM
{
quiz_question
}
"
);
while
(
$row
=
db_fetch_object
(
$results
))
{
$count
=
0
;
$nid
=
$row
->
nid
;
$count
=
(
db_result
(
db_query
(
"SELECT COUNT(aid) FROM
{
quiz_question_answer
}
WHERE question_nid = %d AND points = 1 "
,
$nid
)));
db_query
(
"INSERT INTO
{
quiz_node_question_properties
}
(nid, vid, number_of_answers) "
.
"VALUES (%d, %d, %d)"
,
$nid
,
$vid
,
$count
);
}
$results
=
db_query
(
"SELECT * FROM
{
quiz_result
}
"
);
while
(
$row
=
db_fetch_object
(
$results
))
{
$rid
=
$row
->
rid
;
$quiz_nid
=
$row
->
quiz_nid
;
$quiz
=
node_load
(
$quiz_nid
);
$quiz_vid
=
$quiz
->
vid
;
$uid
=
$row
->
uid
;
$time_start
=
$row
->
time_start
;
$time_end
=
$row
->
time_end
;
$released
=
$row
->
released
;
$score
=
$row
->
score
;
db_query
(
"INSERT INTO
{
quiz_node_results
}
(nid, vid, uid, time_start, time_end, released, score) "
.
"VALUES (%d, %d, %d, %d, %d, %d, %d)"
,
$nid
,
$vid
,
$uid
,
$time_start
,
$time_end
,
$released
,
$score
);
$results2
=
db_query
(
"SELECT * FROM
{
quiz_question_results
}
WHERE result_rid=%d"
,
$rid
);
while
(
$row2
=
db_fetch_object
(
$results2
))
{
$result_rid
=
$row2
->
result_rid
;
$question_nid
=
$row2
->
question_nid
;
$answer
=
$row2
->
answer
;
$temp_answers
=
unserialize
(
$answer
);
$tried
=
$temp_answers
[
'tried'
][
0
];
foreach
(
$temp_answers
[
'answers'
]
as
$line
)
{
$aid
=
$line
[
'aid'
];
if
(
$aid
==
$tried
)
{
$question_nid
=
$line
[
'question_nid'
];
$question
=
node_load
(
$question_nid
);
$question_vid
=
$question
->
vid
;
$is_correct
=
$line
[
'points'
];
$points_awarded
=
$line
[
'points'
];
$answer_timestamp
=
time
();
db_query
(
"INSERT INTO
{
quiz_multichoice_user_answers
}
(question_nid, question_vid, result_id, answer_id) "
.
"VALUES (%d, %d, %d, %d)"
,
$question_nid
,
$question_vid
,
$rid
,
$aid
);
db_query
(
"INSERT INTO
{
quiz_node_results_answers
}
"
.
"(result_id, question_nid, question_vid, is_correct, points_awarded, answer_timestamp) "
.
"VALUES (%d, %d, %d, %d, %d, %d)"
,
$rid
,
$question_nid
,
$question_vid
,
$is_correct
,
$points_awarded
,
$answer_timestamp
);
}
/* endif */
}
/* end foreach */
}
/* end while */
}
/* end while */
$select_questionanswer
=
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'({quiz_multichoice_answers}_answer_id'
);
$results
=
db_fetch_object
(
$select_questionanswer
);
if
(
$results
->
id
>
0
)
{
$old_value
=
db_fetch_object
(
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'{quiz_question_answer}_aid'
));
$value
=
$results
->
id
+
$old_value
->
id
;
db_query
(
"UPDATE
{
sequences
}
SET id = %d, WHERE name = '%d'"
,
$value
,
'{quiz_multichoice_answers}_answer_id'
);
}
else
{
$old_value
=
db_fetch_object
(
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'{quiz_question_answer}_aid'
));
$value
=
$old_value
->
id
;
db_query
(
"INSERT INTO
{
sequences
}
(name,id) VALUES('%s',%d)"
,
'{quiz_multichoice_answers}_answer_id'
,
$value
);
}
$select_questionanswer
=
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'{quiz_node_results}_result_id'
);
$results
=
db_fetch_object
(
$select_questionanswer
);
if
(
$results
->
id
>
0
)
{
$old_value
=
db_fetch_object
(
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'{quiz_results}_rid'
));
$value
=
$results
->
id
+
$old_value
->
id
;
db_query
(
"UPDATE
{
sequences
}
SET id = %d, WHERE name = '%d'"
,
$value
,
'{quiz_node_results}_result_id'
);
}
else
{
$old_value
=
db_fetch_object
(
db_query
(
"SELECT name,id FROM
{
sequences
}
WHERE name='%s'"
,
'{quiz_results}_rid'
));
$value
=
$old_value
->
id
;
db_query
(
"INSERT INTO
{
sequences
}
(name,id) VALUES('%s',%d)"
,
'{quiz_node_results}_result_id'
,
$value
);
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment