opigno_assessment.module in Opigno 7.0
Contains all hook_implementations and module specific API.
File
modules/opigno_assessment/opigno_assessment.moduleView source
<?php
/**
* @file
* Contains all hook_implementations and module specific API.
*/
/**
* Implements hook_menu()
*/
function opigno_assessment_menu() {
$admin_root_path = opigno_get_admin_root_path('config', 'course');
return array(
"{$admin_root_path}/assessment" => array(
'title' => "Opigno Assessment",
'description' => "Set assessment scaling and rules.",
'access arguments' => array(
'administer opigno',
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'opigno_assessment_settings_form',
),
'file' => 'includes/opigno_assessment.admin.inc',
),
);
}
/**
* Implements hook_permission()
*/
function opigno_assessment_permission() {
return array(
'edit course assessment options' => array(
'title' => t("Edit course assessment options"),
),
'edit quiz assessment options' => array(
'title' => t("Edit quiz assessment options"),
),
);
}
/**
* Implements hook_node_insert()
*/
function opigno_assessment_node_insert($node) {
if ($node->type === 'course') {
opigno_assessment_node_update($node);
}
elseif ($node->type === 'quiz') {
opigno_assessment_node_update($node);
}
}
/**
* Implements hook_node_update()
*/
function opigno_assessment_node_update($node) {
if ($node->type === 'course') {
variable_set('opigno_assessment_nid_' . $node->nid, array(
'option' => $node->opigno_assessment['option'],
'quizzes' => $node->opigno_assessment['quizzes'],
'rule' => $node->opigno_assessment['rule'],
'average' => $node->opigno_assessment['average'],
'min' => $node->opigno_assessment['min'],
));
}
elseif ($node->type === 'quiz') {
variable_set('opigno_assessment_nid_' . $node->nid, array(
'ponderation' => $node->opigno_assessment['ponderation'],
));
}
}
/**
* Implements hook_node_load()
*/
function opigno_assessment_node_load($nodes, $types) {
if (!in_array('course', $types) && !in_array('quiz', $types)) {
return;
}
foreach ($nodes as $nid => $node) {
$node->opigno_assessment = array();
$options = variable_get("opigno_assessment_nid_{$nid}", NULL);
if ($options) {
if ($node->type == 'course') {
$node->opigno_assessment['option'] = $options['option'];
$node->opigno_assessment['quizzes'] = $options['quizzes'];
$node->opigno_assessment['rule'] = $options['rule'];
$node->opigno_assessment['average'] = $options['average'];
$node->opigno_assessment['min'] = $options['min'];
}
elseif ($node->type == 'quiz') {
$node->opigno_assessment['ponderation'] = $options['ponderation'];
}
}
}
}
/**
* Implements hook_action_info()
*/
function opigno_assessment_action_info() {
return array(
'opigno_assessment_action_assess_quiz' => array(
'type' => 'node',
'label' => t("Opigno Assessment: assess quiz results"),
'configurable' => FALSE,
'triggers' => array(
'quiz_scored',
),
),
);
}
/**
* Implements hook_form_course_node_form_alter()
*/
function opigno_assessment_form_course_node_form_alter(&$form, $form_state) {
if (user_access('edit course assessment options')) {
$node = $form['#node'];
$form['opigno_assessment'] = array(
'#type' => 'fieldset',
'#title' => t("Course assessment"),
'#weight' => 10,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'additional_settings',
'#attached' => array(
'js' => array(
drupal_get_path('module', 'opigno_assessment') . '/js/opigno_assessment.js',
),
),
'#attributes' => array(
'class' => array(
'opigno-assessment-form',
),
),
'#tree' => TRUE,
);
$form['opigno_assessment']['option'] = array(
'#type' => 'radios',
'#title' => t("Assessment options"),
'#options' => array(
'no' => t("No assessment for this course"),
'all' => t("Student must accomplish all assignments"),
'some' => t("Student must accomplish certain assignments"),
),
'#default_value' => isset($node->opigno_assessment['option']) ? $node->opigno_assessment['option'] : 'no',
);
$quizzes = opigno_assessment_get_quizzes($node);
$form['opigno_assessment']['quizzes'] = array(
'#type' => 'select',
'#title' => t("Select assignments to complete"),
'#description' => t("A student must accomplish all selected assignments in order to finish the course."),
'#options' => $quizzes,
'#multiple' => TRUE,
'#default_value' => isset($node->opigno_assessment['quizzes']) ? $node->opigno_assessment['quizzes'] : array(),
);
if (empty($quizzes)) {
$form['opigno_assessment']['quizzes'] = array_merge($form['opigno_assessment']['quizzes'], array(
'#options' => array(
t("This course has no assignments yet."),
),
'#multiple' => FALSE,
'#attributes' => array(
'disabled' => 'disabled',
),
));
}
$form['opigno_assessment']['rule'] = array(
'#type' => 'radios',
'#title' => t("Success rule"),
'#description' => t("A student successfully accomplishes this course if the following rule(s) is(are) met."),
'#options' => array(
'average' => t("The average grade is higher than X"),
'average_neg' => t("The average grade is higher than X AND no grade is lower than Y"),
),
'#default_value' => isset($node->opigno_assessment['rule']) ? $node->opigno_assessment['rule'] : 'average',
);
$form['opigno_assessment']['average'] = array(
'#type' => 'select',
'#title' => t("Minimum grade"),
'#options' => opigno_assessment_get_scale(),
'#default_value' => isset($node->opigno_assessment['average']) ? $node->opigno_assessment['average'] : round(variable_get('opigno_assessment_grade_scale', 10) / 2),
);
$form['opigno_assessment']['min'] = array(
'#type' => 'select',
'#title' => t("No grade lower than"),
'#options' => opigno_assessment_get_scale(),
'#default_value' => isset($node->opigno_assessment['min']) ? $node->opigno_assessment['min'] : round(variable_get('opigno_assessment_grade_scale', 10) / 2),
);
}
}
/**
* Implements hook_form_quiz_node_form_alter()
*/
function opigno_assessment_form_quiz_node_form_alter(&$form, $form_state) {
if (user_access('edit quiz assessment options')) {
$node = $form['#node'];
// @todo Check if in selected quiz list
// @todo Make quiz selectable for assessment from here ?
$form['opigno_assessment'] = array(
'#type' => 'fieldset',
'#title' => t("Assessment"),
'#weight' => 10,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'additional_settings',
'#attached' => array(
'js' => array(
drupal_get_path('module', 'opigno_assessment') . '/js/opigno_assessment.js',
),
),
'#attributes' => array(
'class' => array(
'opigno-assessment-form',
),
),
'#tree' => TRUE,
);
$form['opigno_assessment']['ponderation'] = array(
'#type' => 'textfield',
'#title' => t("Assessment ponderation"),
'#default_value' => isset($node->opigno_assessment['ponderation']) ? $node->opigno_assessment['ponderation'] : 1,
);
}
}
/**
*
*/
function opigno_assessment_get_scale() {
return array_keys(array_fill(1, variable_get('opigno_assessment_grade_scale', 10), 1));
}
/**
*
*/
function opigno_assessment_get_quizzes($og_node) {
$nodes = array();
if (isset($og_node->nid)) {
$query = db_select('node', 'n');
$query
->leftJoin('node_revision', 'v', 'v.vid = n.vid');
$query
->leftJoin('og_membership', 'om', 'om.etid = n.nid');
$query
->leftJoin('og', 'o', 'o.gid = om.gid');
$result = $query
->fields('n', array(
'nid',
))
->fields('v', array(
'title',
))
->condition('n.type', 'quiz')
->condition('om.state', 1)
->condition('o.entity_type', 'node')
->condition('o.etid', $og_node->nid)
->execute();
while ($node = $result
->fetchObject()) {
$nodes[$node->nid] = $node->title;
}
}
return $nodes;
}
function opigno_assessment_quiz_scored($quiz, $score, $rid) {
opigno_assessment_quiz_finished($quiz, $score, $rid);
}
/**
*
*/
function opigno_assessment_quiz_finished($quiz, $score, $session_data) {
if ($score['is_evaluated']) {
global $user;
module_load_include('inc', 'opigno_assessment', 'includes/opigno_assessment.assess');
opigno_assessment_assess_course($quiz->group_audience[LANGUAGE_NONE][0]['gid'], $user->uid);
}
}
Functions
Name![]() |
Description |
---|---|
opigno_assessment_action_info | Implements hook_action_info() |
opigno_assessment_form_course_node_form_alter | Implements hook_form_course_node_form_alter() |
opigno_assessment_form_quiz_node_form_alter | Implements hook_form_quiz_node_form_alter() |
opigno_assessment_get_quizzes | |
opigno_assessment_get_scale | |
opigno_assessment_menu | Implements hook_menu() |
opigno_assessment_node_insert | Implements hook_node_insert() |
opigno_assessment_node_load | Implements hook_node_load() |
opigno_assessment_node_update | Implements hook_node_update() |
opigno_assessment_permission | Implements hook_permission() |
opigno_assessment_quiz_finished | |
opigno_assessment_quiz_scored |