Public Member Functions | Data Fields

SurveyOrdinalQuestion Class Reference

Ordinal survey question. More...

Inheritance diagram for SurveyOrdinalQuestion:
Collaboration diagram for SurveyOrdinalQuestion:

Public Member Functions

 SurveyOrdinalQuestion ($title="", $description="", $author="", $questiontext="", $owner=-1, $orientation=1)
 SurveyOrdinalQuestion constructor.
getAvailablePhrases ($useronly=0)
 Gets the available phrases from the database.
getCategoriesForPhrase ($phrase_id)
 Gets the available categories for a given phrase.
 addPhrase ($phrase_id)
 Adds a phrase to the question.
 _getQuestionDataArray ($id)
 Returns the question data fields from the database.
 loadFromDb ($id)
 Loads a SurveyOrdinalQuestion object from the database.
 isComplete ()
 Returns true if the question is complete for use.
 saveToDb ($original_id="", $withanswers=true)
 Saves a SurveyOrdinalQuestion object to a database.
 from_xml ($xml_text)
 Imports a question from XML.
 to_xml ($a_include_header=true, $obligatory_state="")
 Returns a QTI xml representation of the question.
 syncWithOriginal ()
 addStandardNumbers ($lower_limit, $upper_limit)
 Adds standard numbers as categories.
 savePhrase ($phrases, $title)
 Saves a set of categories to a default phrase.
 getQuestionType ()
 Returns the question type of the question.
 getAdditionalTableName ()
 Returns the name of the additional question data table in the database.
 checkUserInput ($post_data)
 saveUserInput ($post_data, $survey_id, $user_id, $anonymous_id)
getCumulatedResults ($survey_id, $nr_of_users)

Data Fields

 $categories

Detailed Description

Ordinal survey question.

The SurveyOrdinalQuestion class defines and encapsulates basic methods and attributes for ordinal survey question types.

Author:
Helmut Schottmüller <helmut.schottmueller@mac.com>
Version:
Id:
class.SurveyOrdinalQuestion.php 12610 2006-11-25 16:26:53Z hschottm

class.SurveyOrdinalQuestion.php Survey

Definition at line 38 of file class.SurveyOrdinalQuestion.php.


Member Function Documentation

SurveyOrdinalQuestion::_getQuestionDataArray ( id  ) 

Returns the question data fields from the database.

Returns the question data fields from the database

Parameters:
integer $id The question ID from the database
Returns:
array Array containing the question fields and data from the database public

Reimplemented from SurveyQuestion.

Definition at line 192 of file class.SurveyOrdinalQuestion.php.

References SurveyQuestion::$id, $query, and $result.

        {
                global $ilDB;
                
    $query = sprintf("SELECT survey_question.*, survey_question_ordinal.* FROM survey_question, survey_question_ordinal WHERE survey_question.question_id = %s AND survey_question.question_id = survey_question_ordinal.question_fi",
      $ilDB->quote($id)
    );
    $result = $ilDB->query($query);
                if ($result->numRows() == 1)
                {
                        return $result->fetchRow(DB_FETCHMODE_ASSOC);
                }
                else
                {
                        return array();
                }
        }

SurveyOrdinalQuestion::addPhrase ( phrase_id  ) 

Adds a phrase to the question.

Adds a phrase to the question

Parameters:
integer $phrase_id The database id of the given phrase public

Definition at line 160 of file class.SurveyOrdinalQuestion.php.

References $query, $result, and $row.

        {
                global $ilUser;
                global $ilDB;
                
    $query = sprintf("SELECT survey_category.* FROM survey_category, survey_phrase_category WHERE survey_phrase_category.category_fi = survey_category.category_id AND survey_phrase_category.phrase_fi = %s AND (survey_category.owner_fi = 0 OR survey_category.owner_fi = %s) ORDER BY survey_phrase_category.sequence",
      $ilDB->quote($phrase_id),
                        $ilDB->quote($ilUser->id)
    );
    $result = $ilDB->query($query);
                while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT))
                {
                        if (($row->defaultvalue == 1) and ($row->owner_fi == 0))
                        {
                                $this->categories->addCategory($this->lng->txt($row->title));
                        }
                        else
                        {
                                $this->categories->addCategory($row->title);
                        }
                }
        }

SurveyOrdinalQuestion::addStandardNumbers ( lower_limit,
upper_limit 
)

Adds standard numbers as categories.

Adds standard numbers as categories

Parameters:
integer $lower_limit The lower limit
integer $upper_limit The upper limit public

Definition at line 665 of file class.SurveyOrdinalQuestion.php.

        {
                for ($i = $lower_limit; $i <= $upper_limit; $i++)
                {
                        $this->categories->addCategory($i);
                }
        }

SurveyOrdinalQuestion::checkUserInput ( post_data  ) 

Definition at line 741 of file class.SurveyOrdinalQuestion.php.

References SurveyQuestion::getId(), and SurveyQuestion::getObligatory().

        {
                $entered_value = $post_data[$this->getId() . "_value"];
                
                if ((!$this->getObligatory()) && (strlen($entered_value) == 0)) return "";
                
                if (strlen($entered_value) == 0) return $this->lng->txt("ordinal_question_not_checked");

                return "";
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::from_xml ( xml_text  ) 

Imports a question from XML.

Sets the attributes of the question from the XML text passed as argument

Returns:
boolean True, if the import succeeds, false otherwise public

Definition at line 380 of file class.SurveyOrdinalQuestion.php.

References $idx, SurveyQuestion::$material, $result, domxml_open_mem(), SurveyQuestion::getId(), saveToDb(), SurveyQuestion::setAuthor(), SurveyQuestion::setDescription(), SurveyQuestion::setMaterial(), SurveyQuestion::setObligatory(), SurveyQuestion::setOrientation(), SurveyQuestion::setQuestiontext(), and SurveyQuestion::setTitle().

        {
                $result = false;
                if (!empty($this->domxml))
                {
                        $this->domxml->free();
                }
                $xml_text = preg_replace("/>\s*?</", "><", $xml_text);
                $this->domxml = domxml_open_mem($xml_text);
                if (!empty($this->domxml))
                {
                        $root = $this->domxml->document_element();
                        $item = $root->first_child();
                        $this->setTitle($item->get_attribute("title"));
                        $this->gaps = array();
                        $itemnodes = $item->child_nodes();
                        foreach ($itemnodes as $index => $node)
                        {
                                switch ($node->node_name())
                                {
                                        case "qticomment":
                                                $comment = $node->get_content();
                                                if (strpos($comment, "ILIAS Version=") !== false)
                                                {
                                                }
                                                elseif (strpos($comment, "Questiontype=") !== false)
                                                {
                                                }
                                                elseif (strpos($comment, "Author=") !== false)
                                                {
                                                        $comment = str_replace("Author=", "", $comment);
                                                        $this->setAuthor($comment);
                                                }
                                                else
                                                {
                                                        $this->setDescription($comment);
                                                }
                                                break;
                                        case "itemmetadata":
                                                $qtimetadata = $node->first_child();
                                                $metadata_fields = $qtimetadata->child_nodes();
                                                foreach ($metadata_fields as $index => $metadata_field)
                                                {
                                                        $fieldlabel = $metadata_field->first_child();
                                                        $fieldentry = $fieldlabel->next_sibling();
                                                        switch ($fieldlabel->get_content())
                                                        {
                                                                case "obligatory":
                                                                        $this->setObligatory($fieldentry->get_content());
                                                                        break;
                                                                case "orientation":
                                                                        $this->setOrientation($fieldentry->get_content());
                                                                        break;
                                                        }
                                                }
                                                break;
                                        case "presentation":
                                                $flow = $node->first_child();
                                                $flownodes = $flow->child_nodes();
                                                foreach ($flownodes as $idx => $flownode)
                                                {
                                                        if (strcmp($flownode->node_name(), "material") == 0)
                                                        {
                                                                $mattext = $flownode->first_child();
                                                                $this->setQuestiontext($mattext->get_content());
                                                        }
                                                        elseif (strcmp($flownode->node_name(), "response_lid") == 0)
                                                        {
                                                                $ident = $flownode->get_attribute("ident");
                                                                $shuffle = "";

                                                                $response_lid_nodes = $flownode->child_nodes();
                                                                foreach ($response_lid_nodes as $resp_lid_id => $resp_lid_node)
                                                                {
                                                                        switch ($resp_lid_node->node_name())
                                                                        {
                                                                                case "render_choice":
                                                                                        $render_choice = $resp_lid_node;
                                                                                        $labels = $render_choice->child_nodes();
                                                                                        foreach ($labels as $lidx => $response_label)
                                                                                        {
                                                                                                $material = $response_label->first_child();
                                                                                                $mattext = $material->first_child();
                                                                                                $shuf = 0;
                                                                                                $this->categories->addCategoryAtPosition($mattext->get_content(), $response_label->get_attribute("ident"));
                                                                                        }
                                                                                        break;
                                                                                case "material":
                                                                                        $matlabel = $resp_lid_node->get_attribute("label");
                                                                                        $mattype = $resp_lid_node->first_child();
                                                                                        if (strcmp($mattype->node_name(), "mattext") == 0)
                                                                                        {
                                                                                                $material = $mattype->get_content();
                                                                                                if ($material)
                                                                                                {
                                                                                                        if ($this->getId() < 1)
                                                                                                        {
                                                                                                                $this->saveToDb();
                                                                                                        }
                                                                                                        $this->setMaterial($material, true, $matlabel);
                                                                                                }
                                                                                        }
                                                                                        break;
                                                                        }
                                                                }
                                                        }
                                                }
                                                break;
                                }
                        }
                        $result = true;
                }
                return $result;
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::getAdditionalTableName (  ) 

Returns the name of the additional question data table in the database.

Returns the name of the additional question data table in the database

Returns:
string The additional table name public

Definition at line 736 of file class.SurveyOrdinalQuestion.php.

        {
                return "survey_question_ordinal";
        }

& SurveyOrdinalQuestion::getAvailablePhrases ( useronly = 0  ) 

Gets the available phrases from the database.

Gets the available phrases from the database

Parameters:
boolean $useronly Returns only the user defined phrases if set to true. The default is false.
Returns:
array All available phrases as key/value pairs public

Definition at line 85 of file class.SurveyOrdinalQuestion.php.

References $query, $result, and $row.

        {
                global $ilUser;
                global $ilDB;
                
                $phrases = array();
    $query = sprintf("SELECT * FROM survey_phrase WHERE defaultvalue = '1' OR owner_fi = %s ORDER BY title",
      $ilDB->quote($ilUser->id)
    );
    $result = $ilDB->query($query);
                while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT))
                {
                        if (($row->defaultvalue == 1) and ($row->owner_fi == 0))
                        {
                                if (!$useronly)
                                {
                                        $phrases[$row->phrase_id] = array(
                                                "title" => $this->lng->txt($row->title),
                                                "owner" => $row->owner_fi
                                        );
                                }
                        }
                        else
                        {
                                if ($ilUser->getId() == $row->owner_fi)
                                {
                                        $phrases[$row->phrase_id] = array(
                                                "title" => $row->title,
                                                "owner" => $row->owner_fi
                                        );
                                }
                        }
                }
                return $phrases;
        }

& SurveyOrdinalQuestion::getCategoriesForPhrase ( phrase_id  ) 

Gets the available categories for a given phrase.

Gets the available categories for a given phrase

Parameters:
integer $phrase_id The database id of the given phrase
Returns:
array All available categories public

Definition at line 130 of file class.SurveyOrdinalQuestion.php.

References $categories, $query, $result, and $row.

        {
                global $ilDB;
                $categories = array();
    $query = sprintf("SELECT survey_category.* FROM survey_category, survey_phrase_category WHERE survey_phrase_category.category_fi = survey_category.category_id AND survey_phrase_category.phrase_fi = %s ORDER BY survey_phrase_category.sequence",
      $ilDB->quote($phrase_id)
    );
    $result = $ilDB->query($query);
                while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT))
                {
                        if (($row->defaultvalue == 1) and ($row->owner_fi == 0))
                        {
                                $categories[$row->category_id] = $this->lng->txt($row->title);
                        }
                        else
                        {
                                $categories[$row->category_id] = $row->title;
                        }
                }
                return $categories;
        }

& SurveyOrdinalQuestion::getCumulatedResults ( survey_id,
nr_of_users 
)

Definition at line 770 of file class.SurveyOrdinalQuestion.php.

References $key, $query, $result, $row, SurveyQuestion::$survey_id, $total, and SurveyQuestion::getId().

        {
                global $ilDB;
                
                $question_id = $this->getId();
                
                $result_array = array();
                $cumulated = array();

                $query = sprintf("SELECT * FROM survey_answer WHERE question_fi = %s AND survey_fi = %s",
                        $ilDB->quote($question_id),
                        $ilDB->quote($survey_id)
                );
                $result = $ilDB->query($query);
                
                while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT))
                {
                        $cumulated["$row->value"]++;
                }
                asort($cumulated, SORT_NUMERIC);
                end($cumulated);
                $numrows = $result->numRows();
                $result_array["USERS_ANSWERED"] = $result->numRows();
                $result_array["USERS_SKIPPED"] = $nr_of_users - $result->numRows();

                $prefix = "";
                if (strcmp(key($cumulated), "") != 0)
                {
                        $prefix = (key($cumulated)+1) . " - ";
                }
                $result_array["MODE"] =  $prefix . $this->categories->getCategory(key($cumulated));
                $result_array["MODE_VALUE"] =  key($cumulated)+1;
                $result_array["MODE_NR_OF_SELECTIONS"] = $cumulated[key($cumulated)];
                for ($key = 0; $key < $this->categories->getCategoryCount(); $key++)
                {
                        $percentage = 0;
                        if ($numrows > 0)
                        {
                                $percentage = (float)((int)$cumulated[$key]/$numrows);
                        }
                        $result_array["variables"][$key] = array("title" => $this->categories->getCategory($key), "selected" => (int)$cumulated[$key], "percentage" => $percentage);
                }
                ksort($cumulated, SORT_NUMERIC);
                $median = array();
                $total = 0;
                foreach ($cumulated as $value => $key)
                {
                        $total += $key;
                        for ($i = 0; $i < $key; $i++)
                        {
                                array_push($median, $value+1);
                        }
                }
                if ($total > 0)
                {
                        if (($total % 2) == 0)
                        {
                                $median_value = 0.5 * ($median[($total/2)-1] + $median[($total/2)]);
                                if (round($median_value) != $median_value)
                                {
                                        $median_value = $median_value . "<br />" . "(" . $this->lng->txt("median_between") . " " . (floor($median_value)) . "-" . $this->categories->getCategory((int)floor($median_value)-1) . " " . $this->lng->txt("and") . " " . (ceil($median_value)) . "-" . $this->categories->getCategory((int)ceil($median_value)-1) . ")";
                                }
                        }
                        else
                        {
                                $median_value = $median[(($total+1)/2)-1];
                        }
                }
                else
                {
                        $median_value = "";
                }
                $result_array["ARITHMETIC_MEAN"] = "";
                $result_array["MEDIAN"] = $median_value;
                $result_array["QUESTION_TYPE"] = "SurveyOrdinalQuestion";
                return $result_array;
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::getQuestionType (  ) 

Returns the question type of the question.

Returns the question type of the question

Returns:
integer The question type of the question public

Reimplemented from SurveyQuestion.

Definition at line 723 of file class.SurveyOrdinalQuestion.php.

        {
                return 2;
        }

SurveyOrdinalQuestion::isComplete (  ) 

Returns true if the question is complete for use.

Returns true if the question is complete for use

Returns:
boolean True if the question is complete for use, otherwise false public

Reimplemented from SurveyQuestion.

Definition at line 271 of file class.SurveyOrdinalQuestion.php.

Referenced by saveToDb(), and syncWithOriginal().

        {
                if ($this->title and $this->author and $this->questiontext and $this->categories->getCategoryCount())
                {
                        return 1;
                }
                else
                {
                        return 0;
                }
        }

Here is the caller graph for this function:

SurveyOrdinalQuestion::loadFromDb ( id  ) 

Loads a SurveyOrdinalQuestion object from the database.

Loads a SurveyOrdinalQuestion object from the database

Parameters:
integer $id The database id of the ordinal survey question public

Reimplemented from SurveyQuestion.

Definition at line 218 of file class.SurveyOrdinalQuestion.php.

References $data, SurveyQuestion::$id, $query, $result, ilRTE::_replaceMediaObjectImageSrc(), and SurveyQuestion::loadMaterialFromDb().

        {
                global $ilDB;
    $query = sprintf("SELECT survey_question.*, survey_question_ordinal.* FROM survey_question, survey_question_ordinal WHERE survey_question.question_id = %s AND survey_question.question_id = survey_question_ordinal.question_fi",
      $ilDB->quote($id)
    );
    $result = $ilDB->query($query);
    if (strcmp(strtolower(get_class($result)), db_result) == 0) 
                {
      if ($result->numRows() == 1) 
                        {
                                $data = $result->fetchRow(DB_FETCHMODE_OBJECT);
                                $this->id = $data->question_id;
                                $this->title = $data->title;
                                $this->description = $data->description;
                                $this->obj_id = $data->obj_fi;
                                $this->orientation = $data->orientation;
                                $this->author = $data->author;
                                $this->owner = $data->owner_fi;
                                include_once("./Services/RTE/classes/class.ilRTE.php");
                                $this->questiontext = ilRTE::_replaceMediaObjectImageSrc($data->questiontext, 1);
                                $this->obligatory = $data->obligatory;
                                $this->complete = $data->complete;
                                $this->original_id = $data->original_id;
      }
      // loads materials uris from database
      $this->loadMaterialFromDb($id);

                        $this->categories->flushCategories();

      $query = sprintf("SELECT survey_variable.*, survey_category.title FROM survey_variable, survey_category WHERE survey_variable.question_fi = %s AND survey_variable.category_fi = survey_category.category_id ORDER BY sequence ASC",
        $ilDB->quote($id)
      );
      $result = $ilDB->query($query);
      if (strcmp(strtolower(get_class($result)), db_result) == 0) 
                        {
        while ($data = $result->fetchRow(DB_FETCHMODE_OBJECT)) 
                                {
                                        $this->categories->addCategory($data->title);
        }
      }
    }
                parent::loadFromDb($id);
  }

Here is the call graph for this function:

SurveyOrdinalQuestion::savePhrase ( phrases,
title 
)

Saves a set of categories to a default phrase.

Saves a set of categories to a default phrase

Parameters:
array $phrases The database ids of the seleted phrases
string $title The title of the default phrase public

Definition at line 682 of file class.SurveyOrdinalQuestion.php.

References $counter, $query, $result, and SurveyQuestion::$title.

        {
                global $ilUser;
                global $ilDB;
                
                $query = sprintf("INSERT INTO survey_phrase (phrase_id, title, defaultvalue, owner_fi, TIMESTAMP) VALUES (NULL, %s, %s, %s, NULL)",
                        $ilDB->quote($title . ""),
                        $ilDB->quote("1"),
                        $ilDB->quote($ilUser->id . "")
                );
    $result = $ilDB->query($query);
                $phrase_id = $ilDB->getLastInsertId();
                                
                $counter = 1;
          foreach ($phrases as $category) 
                {
                        $query = sprintf("INSERT INTO survey_category (category_id, title, defaultvalue, owner_fi, TIMESTAMP) VALUES (NULL, %s, %s, %s, NULL)",
                                $ilDB->quote($this->categories->getCategory($category) . ""),
                                $ilDB->quote("1"),
                                $ilDB->quote($ilUser->id . "")
                        );
                        $result = $ilDB->query($query);
                        $category_id = $ilDB->getLastInsertId();
                        $query = sprintf("INSERT INTO survey_phrase_category (phrase_category_id, phrase_fi, category_fi, sequence) VALUES (NULL, %s, %s, %s)",
                                $ilDB->quote($phrase_id . ""),
                                $ilDB->quote($category_id . ""),
                                $ilDB->quote($counter . "")
                        );
                        $result = $ilDB->query($query);
                        $counter++;
                }
        }

SurveyOrdinalQuestion::saveToDb ( original_id = "",
withanswers = true 
)

Saves a SurveyOrdinalQuestion object to a database.

Saves a SurveyOrdinalQuestion object to a database

public

Definition at line 290 of file class.SurveyOrdinalQuestion.php.

References $query, $result, ilRTE::_cleanupMediaObjectUsage(), ilRTE::_replaceMediaObjectImageSrc(), SurveyQuestion::getId(), isComplete(), SurveyQuestion::saveCategoriesToDb(), and SurveyQuestion::saveMaterialsToDb().

Referenced by from_xml().

  {
                global $ilDB;
                $complete = 0;
                if ($this->isComplete()) {
                        $complete = 1;
                }
                if ($original_id)
                {
                        $original_id = $ilDB->quote($original_id);
                }
                else
                {
                        $original_id = "NULL";
                }

                // cleanup RTE images which are not inserted into the question text
                include_once("./Services/RTE/classes/class.ilRTE.php");
                ilRTE::_cleanupMediaObjectUsage($this->questiontext, "spl:html",
                        $this->getId());

    if ($this->id == -1) 
                {
      // Write new dataset
      $now = getdate();
      $created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']);
      $query = sprintf("INSERT INTO survey_question (question_id, questiontype_fi, obj_fi, owner_fi, title, description, author, questiontext, obligatory, complete, created, original_id, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NULL)",
                                $ilDB->quote($this->getQuestionType()),
                                $ilDB->quote($this->obj_id),
                                $ilDB->quote($this->owner),
                                $ilDB->quote($this->title),
                                $ilDB->quote($this->description),
                                $ilDB->quote($this->author),
                                $ilDB->quote(ilRTE::_replaceMediaObjectImageSrc($this->questiontext, 0)),
                                $ilDB->quote(sprintf("%d", $this->obligatory)),
                                $ilDB->quote("$complete"),
                                $ilDB->quote($created),
                                $original_id
      );
      $result = $ilDB->query($query);
      if ($result == DB_OK) 
                        {
        $this->id = $ilDB->getLastInsertId();
                                $query = sprintf("INSERT INTO survey_question_ordinal (question_fi, orientation) VALUES (%s, %s)",
                                        $ilDB->quote($this->id . ""),
                                        $ilDB->quote(sprintf("%d", $this->orientation))
                                );
                                $ilDB->query($query);
      }
    } 
                else 
                {
      // update existing dataset
      $query = sprintf("UPDATE survey_question SET title = %s, description = %s, author = %s, questiontext = %s, obligatory = %s, complete = %s WHERE question_id = %s",
                                $ilDB->quote($this->title),
                                $ilDB->quote($this->description),
                                $ilDB->quote($this->author),
                                $ilDB->quote(ilRTE::_replaceMediaObjectImageSrc($this->questiontext, 0)),
                                $ilDB->quote(sprintf("%d", $this->obligatory)),
                                $ilDB->quote("$complete"),
                                $ilDB->quote($this->id)
      );
      $result = $ilDB->query($query);
                        $query = sprintf("UPDATE survey_question_ordinal SET orientation = %s WHERE question_fi = %s",
                                $ilDB->quote(sprintf("%d", $this->orientation)),
                                $ilDB->quote($this->id . "")
                        );
                        $result = $ilDB->query($query);
    }
    if ($result == DB_OK) 
                {
      // saving material uris in the database
      $this->saveMaterialsToDb();
                        if ($withanswers)
                        {
                                $this->saveCategoriesToDb();
                        }
    }
                parent::saveToDb($original_id);
  }

Here is the call graph for this function:

Here is the caller graph for this function:

SurveyOrdinalQuestion::saveUserInput ( post_data,
survey_id,
user_id,
anonymous_id 
)

Definition at line 752 of file class.SurveyOrdinalQuestion.php.

References $query, $result, SurveyQuestion::$survey_id, $user_id, and SurveyQuestion::getId().

        {
                global $ilDB;

                $entered_value = $post_data[$this->getId() . "_value"];
                if (strlen($entered_value) == 0) return;
                $entered_value = $ilDB->quote($entered_value . "");
                $query = sprintf("INSERT INTO survey_answer (answer_id, survey_fi, question_fi, user_fi, anonymous_id, value, textanswer, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, %s, NULL)",
                        $ilDB->quote($survey_id . ""),
                        $ilDB->quote($this->getId() . ""),
                        $ilDB->quote($user_id . ""),
                        $ilDB->quote($anonymous_id . ""),
                        $entered_value,
                        "NULL"
                );
                $result = $ilDB->query($query);
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::SurveyOrdinalQuestion ( title = "",
description = "",
author = "",
questiontext = "",
owner = -1,
orientation = 1 
)

SurveyOrdinalQuestion constructor.

The constructor takes possible arguments an creates an instance of the SurveyOrdinalQuestion object.

Parameters:
string $title A title string to describe the question
string $description A description string to describe the question
string $author A string containing the name of the questions author
integer $owner A numerical ID to identify the owner/creator public

Definition at line 60 of file class.SurveyOrdinalQuestion.php.

References SurveyQuestion::$author, SurveyQuestion::$description, SurveyQuestion::$orientation, SurveyQuestion::$owner, SurveyQuestion::$questiontext, SurveyQuestion::$title, and SurveyQuestion::SurveyQuestion().

  {
                $this->SurveyQuestion($title, $description, $author, $questiontext, $owner);
                include_once "./survey/classes/class.SurveyCategories.php";
                $this->orientation = $orientation;
                $this->categories = new SurveyCategories();
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::syncWithOriginal (  ) 

Reimplemented from SurveyQuestion.

Definition at line 607 of file class.SurveyOrdinalQuestion.php.

References $query, $result, isComplete(), and SurveyQuestion::saveCategoryToDb().

        {
                global $ilDB;
                if ($this->original_id)
                {
                        $complete = 0;
                        if ($this->isComplete()) {
                                $complete = 1;
                        }
                        $query = sprintf("UPDATE survey_question SET title = %s, description = %s, author = %s, questiontext = %s, obligatory = %s, complete = %s WHERE question_id = %s",
                                $ilDB->quote($this->title . ""),
                                $ilDB->quote($this->description . ""),
                                $ilDB->quote($this->author . ""),
                                $ilDB->quote($this->questiontext . ""),
                                $ilDB->quote(sprintf("%d", $this->obligatory) . ""),
                                $ilDB->quote($complete . ""),
                                $ilDB->quote($this->original_id . "")
                        );
                        $result = $ilDB->query($query);
                        $query = sprintf("UPDATE survey_question_ordinal SET orientation = %s WHERE question_fi = %s",
                                $ilDB->quote($this->getOrientation() . ""),
                                $ilDB->quote($this->original_id . "")
                        );
                        $result = $ilDB->query($query);
                        if ($result == DB_OK) {
                                // save categories
                                
                                // delete existing category relations
                                $query = sprintf("DELETE FROM survey_variable WHERE question_fi = %s",
                                        $ilDB->quote($this->original_id . "")
                                );
                                $result = $ilDB->query($query);
                                // create new category relations
                                for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
                                {
                                        $category_id = $this->saveCategoryToDb($this->categories->getCategory($i));
                                        $query = sprintf("INSERT INTO survey_variable (variable_id, category_fi, question_fi, value1, sequence, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, NULL)",
                                                $ilDB->quote($category_id . ""),
                                                $ilDB->quote($this->original_id . ""),
                                                $ilDB->quote(($i + 1) . ""),
                                                $ilDB->quote($i . "")
                                        );
                                        $answer_result = $ilDB->query($query);
                                }
                        }
                }
                parent::syncWithOriginal();
        }

Here is the call graph for this function:

SurveyOrdinalQuestion::to_xml ( a_include_header = true,
obligatory_state = "" 
)

Returns a QTI xml representation of the question.

Returns a QTI xml representation of the question and sets the internal domxml variable with the DOM XML representation of the QTI xml representation

Returns:
string The QTI xml representation of the question public

Definition at line 504 of file class.SurveyOrdinalQuestion.php.

References $pos, SurveyQuestion::addQTIMaterial(), SurveyQuestion::getAuthor(), SurveyQuestion::getDescription(), SurveyQuestion::getId(), SurveyQuestion::getObligatory(), SurveyQuestion::getOrientation(), SurveyQuestion::getQuestiontext(), SurveyQuestion::getTitle(), and SurveyQuestion::setObligatory().

        {
                include_once("./classes/class.ilXmlWriter.php");
                $a_xml_writer = new ilXmlWriter;
                // set xml header
                $a_xml_writer->xmlHeader();
                $a_xml_writer->xmlStartTag("questestinterop");
                $attrs = array(
                        "ident" => $this->getId(),
                        "title" => $this->getTitle()
                );
                $a_xml_writer->xmlStartTag("item", $attrs);
                // add question description
                $a_xml_writer->xmlElement("qticomment", NULL, $this->getDescription());
                $a_xml_writer->xmlElement("qticomment", NULL, "ILIAS Version=".$this->ilias->getSetting("ilias_version"));
                $a_xml_writer->xmlElement("qticomment", NULL, "Questiontype=".ORDINAL_QUESTION_IDENTIFIER);
                $a_xml_writer->xmlElement("qticomment", NULL, "Author=".$this->getAuthor());
                // add ILIAS specific metadata
                $a_xml_writer->xmlStartTag("itemmetadata");
                $a_xml_writer->xmlStartTag("qtimetadata");
                $a_xml_writer->xmlStartTag("qtimetadatafield");
                $a_xml_writer->xmlElement("fieldlabel", NULL, "obligatory");
                if (strcmp($obligatory_state, "") != 0)
                {
                        $this->setObligatory($obligatory_state);
                }
                $a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->getObligatory()));
                $a_xml_writer->xmlEndTag("qtimetadatafield");
                $a_xml_writer->xmlStartTag("qtimetadatafield");
                $a_xml_writer->xmlElement("fieldlabel", NULL, "orientation");
                $a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->getOrientation()));
                $a_xml_writer->xmlEndTag("qtimetadatafield");
                $a_xml_writer->xmlEndTag("qtimetadata");
                $a_xml_writer->xmlEndTag("itemmetadata");

                // PART I: qti presentation
                $attrs = array(
                        "label" => $this->getTitle()
                );
                $a_xml_writer->xmlStartTag("presentation", $attrs);
                // add flow to presentation
                $a_xml_writer->xmlStartTag("flow");
                // add material with question text to presentation
                $this->addQTIMaterial($a_xml_writer, $this->getQuestiontext());
                // add answers to presentation
                $attrs = array(
                        "ident" => "MCSR",
                        "rcardinality" => "Single"
                );
                $a_xml_writer->xmlStartTag("response_lid", $attrs);
                
                if (count($this->material))
                {
                        if (preg_match("/il_(\d*?)_(\w+)_(\d+)/", $this->material["internal_link"], $matches))
                        {
                                $attrs = array(
                                        "label" => $this->material["title"]
                                );
                                $a_xml_writer->xmlStartTag("material", $attrs);
                                $intlink = "il_" . IL_INST_ID . "_" . $matches[2] . "_" . $matches[3];
                                if (strcmp($matches[1], "") != 0)
                                {
                                        $intlink = $this->material["internal_link"];
                                }
                                $a_xml_writer->xmlElement("mattext", NULL, $intlink);
                                $a_xml_writer->xmlEndTag("material");
                        }
                }

                $attrs = array(
                        "shuffle" => "no"
                );
                $a_xml_writer->xmlStartTag("render_choice", $attrs);

                // add categories
                for ($index = 0; $index < $this->categories->getCategoryCount(); $index++)
                {
                        $category = $this->categories->getCategory($index);
                        $attrs = array(
                                "ident" => "$index"
                        );
                        $a_xml_writer->xmlStartTag("response_label", $attrs);
                        $a_xml_writer->xmlStartTag("material");
                        $a_xml_writer->xmlElement("mattext", NULL, $category);
                        $a_xml_writer->xmlEndTag("material");
                        $a_xml_writer->xmlEndTag("response_label");
                }
                $a_xml_writer->xmlEndTag("render_choice");
                $a_xml_writer->xmlEndTag("response_lid");
                $a_xml_writer->xmlEndTag("flow");
                $a_xml_writer->xmlEndTag("presentation");
                $a_xml_writer->xmlEndTag("item");
                $a_xml_writer->xmlEndTag("questestinterop");

                $xml = $a_xml_writer->xmlDumpMem(FALSE);
                if (!$a_include_header)
                {
                        $pos = strpos($xml, "?>");
                        $xml = substr($xml, $pos + 2);
                }
                return $xml;
        }

Here is the call graph for this function:


Field Documentation

SurveyOrdinalQuestion::$categories

Definition at line 47 of file class.SurveyOrdinalQuestion.php.

Referenced by getCategoriesForPhrase().


The documentation for this class was generated from the following file: