scale.install in Quiz 6.4
Sponsored by: Norwegian Centre for Telemedicine Code: falcon
Scale Install (a quiz question type)
File
question_types/scale/scale.installView source
<?php
/**
* Sponsored by: Norwegian Centre for Telemedicine
* Code: falcon
*
* @file
* Scale Install (a quiz question type)
*/
/**
* Implementation of hook_install()
*/
function scale_install() {
drupal_install_schema('scale');
_scale_insert_collection(array(
'Always',
'Very often',
'Some times',
'Rarely',
'Very rarely',
'Never',
));
_scale_insert_collection(array(
'Excellent',
'Very good',
'Good',
'Ok',
'Poor',
'Very poor',
));
_scale_insert_collection(array(
'Totally agree',
'Agree',
'Not sure',
'Disagree',
'Totally disagree',
));
_scale_insert_collection(array(
'Very important',
'Important',
'Moderately important',
'Less important',
'Least important',
));
variable_set('node_options_scale', array(
'status',
));
cache_clear_all('autoload:', 'cache');
}
/**
* Implementation of hook_schema().
*/
function scale_schema() {
$schema['quiz_scale_node_properties'] = array(
'description' => 'Properties specific to this question type. Holds information about what answer collection this node uses',
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'vid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'answer_collection_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
),
'primary key' => array(
'nid',
'vid',
),
);
// Stores the users answers to a question.
$schema['quiz_scale_user_answers'] = array(
'description' => 'Store the users answers',
'fields' => array(
'answer_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'result_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'question_nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'question_vid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
),
'primary key' => array(
'result_id',
'question_nid',
'question_vid',
),
);
$schema['quiz_scale_answer_collection'] = array(
'description' => 'Answer collection ids and properties',
'fields' => array(
'id' => array(
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'for_all' => array(
'description' => '1 for global presets, 0 otherwise',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array(
'id',
),
);
$schema['quiz_scale_user'] = array(
'description' => 'User settings, store what answer collections the user have as presets',
'fields' => array(
'uid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'answer_collection_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
),
'primary key' => array(
'uid',
'answer_collection_id',
),
);
/*
* Holds each answer in the answer_collections.
*/
$schema['quiz_scale_answer'] = array(
'description' => 'Holds all the possible answers and what answer collections they belong to',
'fields' => array(
'id' => array(
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'answer_collection_id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'answer' => array(
'type' => 'text',
),
),
'primary key' => array(
'id',
),
);
return $schema;
}
/**
* Implementation of hook_update_N().
*
* NOTE: We shouldn't create update hooks for rebuilding the theme registry, but since this is already here we can't remove it...
*/
function scale_update_6400() {
// drupal_rebuild_theme_registry();
return array();
}
/**
* Implementation of hook_update_N().
*
* Update max score for the scale questions in the database
*/
function scale_update_6401() {
$sql = 'UPDATE {quiz_question_properties} qqp
SET max_score = 1
WHERE qqp.nid IN(
SELECT n.nid
FROM {node} n
WHERE n.type = \'scale\'
)';
$to_return = array();
$to_return[] = update_sql($sql);
return $to_return;
}
/**
* Implementation of hook_uninstall()
*/
function scale_uninstall() {
drupal_uninstall_schema('scale');
variable_del('scale_max_num_of_alts');
cache_clear_all('variables', 'cache');
drupal_set_message(t("The Scale module has been uninstalled. Scale nodes may still exist, but they will not function properly."));
}
/**
* Inserts answer collections into the database
*
* @param $answers
* Array of answers to include in the answer collection
*/
function _scale_insert_collection($answers) {
// Save the collection as a global preset
$sql = 'INSERT INTO {quiz_scale_answer_collection}
(for_all) VALUES(1)';
db_query($sql);
// Save the collections as a preset collection for user 1
$collection_id = db_last_insert_id('{quiz_scale_answer_collection}', 'id');
$sql = 'INSERT INTO {quiz_scale_user}
(uid, answer_collection_id) VALUES(%d, %d)';
db_query($sql, 1, $collection_id);
// Save the answers belonging to the collection
for ($i = 0; $i < count($answers); $i++) {
$sql = 'INSERT INTO {quiz_scale_answer}
(answer_collection_id, answer)
VALUES(%d, \'%s\')';
db_query($sql, $collection_id, $answers[$i]);
}
}
Functions
Name![]() |
Description |
---|---|
scale_install | Implementation of hook_install() |
scale_schema | Implementation of hook_schema(). |
scale_uninstall | Implementation of hook_uninstall() |
scale_update_6400 | Implementation of hook_update_N(). |
scale_update_6401 | Implementation of hook_update_N(). |
_scale_insert_collection | Inserts answer collections into the database |