<?php

/**
 * Sponsored by: Norwegian Centre for Telemedicine
 * Code: falcon
 *
 * @file
 * Scale Install (a quiz question type)
 */


/**
 * Implements hook_install().
 */
function scale_install() {
  // Add body field to scale node
  quiz_question_add_body_field('scale');

  // TODO The drupal_(un)install_schema functions are called automatically in D7.
  // 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');
}

/**
 * Implements 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;
}

/**
 * Implements hook_uninstall().
 */
function scale_uninstall() {
  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
  $collection_id = db_insert('quiz_scale_answer_collection')
    ->fields(array(
      'for_all' => 1
    ))
    ->execute();

  // Save the collections as a preset collection for user 1
  db_insert('quiz_scale_user')
    ->fields(array(
      'answer_collection_id' => $collection_id,
      'uid' => 1,
    ))
    ->execute();

  $insert = db_insert('quiz_scale_answer')->fields(array('answer_collection_id', 'answer'));
  $values = array();
  // Save the answers belonging to the collection
  for ($i = 0; $i < count($answers); $i++) {
    $values = array(
      'answer_collection_id' => $collection_id,
      'answer' => $answers[$i],
    );
    $insert->values($values);
  }
  $insert->execute();
}
