i'm trying to write a feeds importer module plugin for quiz but therefore need some help regarding the starting-point for quiz.

could someone point out

  • which function actually adds the quiz functionalities to a node
  • which function adds the question functionalities to a node

my idea

  1. create new node
  2. [set general node settings]
  3. save node
  4. quiz_function_that_adds_settings_to_node( node, quiz_settings )

thanks in advance!



attisan’s picture

no-one? really? I could really use a helping hand. (in fact - "a pointing finger" would suffice).


joshf’s picture

Issue summary: View changes

It's basically just like any other node. Here's how I was able to accomplish this with a multichoice question:

global $user;

$quiz = new stdClass();
$quiz->title = 'Loyalty Test';
$quiz->type = 'quiz';
$quiz->language = LANGUAGE_NONE;
$quiz->uid = $user->uid; 
$quiz->status = 1;

$quiz = node_submit($quiz);

$question = new stdClass();
$question->title = 'User is a fan';
$question->type = 'multichoice';
$question->body = array(LANGUAGE_NONE => array(array('value' => 'Do you totally love this website or what?')));
$question->choice_multi = 0;
$question->choice_random = 0;
$question->choice_boolean = 0;
$question->language = LANGUAGE_NONE;
$question->uid = $user->uid; 
$question->status = 1;
$question->alternatives = array(
    'answer' => array(
      'value' => 'Yes',
    // All these values are necessary to avoid integrity constraint errors.
    'answer_format' => 'plain_text',
    'feedback_if_chosen_format' => 'plain_text',
    'feedback_if_not_chosen_format' => 'plain_text',
    'score_if_chosen' => 1,
    'answer' => array(
      'value' => 'No',
    'answer_format' => 'plain_text',
    'feedback_if_chosen_format' => 'plain_text',
    'feedback_if_not_chosen_format' => 'plain_text',
    'score_if_chosen' => 0,

$question = node_submit($question);

// This is how you add a question to a quiz.
module_load_include('inc', 'multichoice', 'multichoice.classes');
$question_wrapper = new MultichoiceQuestion($question);
$question_wrapper->saveRelationships($quiz->nid, $quiz->vid);

OliverColeman’s picture

I guess the API has changed as the arguments supplied to the saveRelationships function in the previous example are missing (at least from 7.x-4.0-beta3). I ended up doing the below (before node_save() on the question node).

    $question_node->add_directly = array(
      'latest' => array(
        $quiz_node->nid. '-'. $quiz_node->vid => $quiz_node->nid. '-'. $quiz_node->vid
djdevin’s picture

Status: Active » Closed (fixed)

Thanks, and for 5.x it is

$question = node_load($question_nid);
 _quiz_question_get_instance($question)->saveRelationships($quiz_nid, $quiz_vid);

See also quiz_add_question_to_quiz() as well which is the Views Bulk Operation for adding questions to quizzes.