Public Member Functions | Data Fields

SurveyMetricQuestion Class Reference

Metric survey question. More...

Inheritance diagram for SurveyMetricQuestion:
Collaboration diagram for SurveyMetricQuestion:

Public Member Functions

 SurveyMetricQuestion ($title="", $description="", $author="", $questiontext="", $owner=-1, $subtype=0)
 SurveyMetricQuestion constructor.
 setSubtype ($subtype=SUBTYPE_NON_RATIO)
 Sets the question subtype.
 setMinimum ($minimum=0)
 Sets the minimum value.
 setMaximum ($maximum="")
 Sets the maximum value.
 getSubtype ()
 Gets the question subtype.
 getMinimum ()
 Returns the minimum value of the question.
 getMaximum ()
 Returns the maximum value of the question.
 loadFromDb ($id)
 Loads a SurveyMetricQuestion object from the database.
 isComplete ()
 Returns true if the question is complete for use.
 saveToDb ($original_id="")
 Saves a SurveyMetricQuestion 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 ()
 getQuestionType ()
 Returns the question type of the question.

Data Fields

 $subtype
 $minimum
 $maximum

Detailed Description

Metric survey question.

The SurveyMetricQuestion class defines and encapsulates basic methods and attributes for metric survey question types.

Author:
Helmut Schottmüller <helmut.schottmueller@mac.com>
Version:
Id:
class.SurveyMetricQuestion.php 10671 2006-04-22 15:07:21Z hschottm

class.SurveyMetricQuestion.php Survey

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


Member Function Documentation

SurveyMetricQuestion::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 378 of file class.SurveyMetricQuestion.php.

References $idx, SurveyQuestion::$material, $result, domxml_open_mem(), SurveyQuestion::getId(), saveToDb(), SurveyQuestion::setAuthor(), SurveyQuestion::setDescription(), SurveyQuestion::setMaterial(), setMaximum(), setMinimum(), SurveyQuestion::setObligatory(), SurveyQuestion::setQuestiontext(), setSubtype(), 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 "subtype":
                                                                        $this->setSubtype($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_num") == 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_fib":
                                                                                        $render_choice = $resp_lid_node;
                                                                                        $minnumber = $render_choice->get_attribute("minnumber");
                                                                                        $this->setMinimum($minnumber);
                                                                                        $maxnumber = $render_choice->get_attribute("maxnumber");
                                                                                        $this->setMaximum($maxnumber);
                                                                                        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:

SurveyMetricQuestion::getMaximum (  ) 

Returns the maximum value of the question.

Returns the maximum value of the question

Returns:
double The maximum value of the question public
See also:
$maximum

Definition at line 177 of file class.SurveyMetricQuestion.php.

Referenced by to_xml().

        {
                return $this->maximum;
        }

Here is the caller graph for this function:

SurveyMetricQuestion::getMinimum (  ) 

Returns the minimum value of the question.

Returns the minimum value of the question

Returns:
double The minimum value of the question public
See also:
$minimum

Definition at line 159 of file class.SurveyMetricQuestion.php.

References getSubtype().

Referenced by to_xml().

        {
                if ((strlen($this->minimum) == 0) && ($this->getSubtype() > 3))
                {
                        $this->minimum = 0;
                }
                return $this->minimum;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

SurveyMetricQuestion::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 664 of file class.SurveyMetricQuestion.php.

Referenced by saveToDb().

        {
                return 3;
        }

Here is the caller graph for this function:

SurveyMetricQuestion::getSubtype (  ) 

Gets the question subtype.

Gets the question subtype

Returns:
integer The question subtype public
See also:
$subtype

Definition at line 145 of file class.SurveyMetricQuestion.php.

Referenced by getMinimum(), and to_xml().

        {
    return $this->subtype;
  }

Here is the caller graph for this function:

SurveyMetricQuestion::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 247 of file class.SurveyMetricQuestion.php.

Referenced by saveToDb(), and syncWithOriginal().

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

Here is the caller graph for this function:

SurveyMetricQuestion::loadFromDb ( id  ) 

Loads a SurveyMetricQuestion object from the database.

Loads a SurveyMetricQuestion object from the database

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

Reimplemented from SurveyQuestion.

Definition at line 190 of file class.SurveyMetricQuestion.php.

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

        {
    $query = sprintf("SELECT * FROM survey_question WHERE question_id = %s",
      $this->ilias->db->quote($id)
    );
    $result = $this->ilias->db->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->obligatory = $data->obligatory;
        $this->author = $data->author;
                                $this->subtype = $data->subtype;
                                $this->original_id = $data->original_id;
        $this->owner = $data->owner_fi;
        $this->questiontext = $data->questiontext;
        $this->complete = $data->complete;
      }
      // loads materials uris from database
      $this->loadMaterialFromDb($id);

      $query = sprintf("SELECT survey_variable.* FROM survey_variable WHERE survey_variable.question_fi = %s",
        $this->ilias->db->quote($id)
      );
      $result = $this->ilias->db->query($query);
      if (strcmp(strtolower(get_class($result)), db_result) == 0) 
                        {
        if ($data = $result->fetchRow(DB_FETCHMODE_OBJECT)) 
                                {
          $this->minimum = $data->value1;
                                        if (($data->value2 < 0) or (strcmp($data->value2, "") == 0))
                                        {
                                                $this->maximum = "";
                                        }
                                        else
                                        {
                                                $this->maximum = $data->value2;
                                        }
        }
      }
    }
                parent::loadFromDb($id);
  }

Here is the call graph for this function:

SurveyMetricQuestion::saveToDb ( original_id = ""  ) 

Saves a SurveyMetricQuestion object to a database.

Saves a SurveyMetricQuestion object to a database

public

Reimplemented from SurveyQuestion.

Definition at line 266 of file class.SurveyMetricQuestion.php.

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

Referenced by from_xml().

  {
                $complete = 0;
                if ($this->isComplete()) 
                {
                        $complete = 1;
                }
                if ($original_id)
                {
                        $original_id = $this->ilias->db->quote($original_id);
                }
                else
                {
                        $original_id = "NULL";
                }
    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, subtype, 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, %s, NULL)",
                                $this->ilias->db->quote("$this->subtype"),
                                $this->ilias->db->quote($this->getQuestionType()),
                                $this->ilias->db->quote($this->obj_id),
                                $this->ilias->db->quote($this->owner),
                                $this->ilias->db->quote($this->title),
                                $this->ilias->db->quote($this->description),
                                $this->ilias->db->quote($this->author),
                                $this->ilias->db->quote($this->questiontext),
                                $this->ilias->db->quote(sprintf("%d", $this->obligatory)),
                                $this->ilias->db->quote("$complete"),
                                $this->ilias->db->quote($created),
                                $original_id
      );
      $result = $this->ilias->db->query($query);
      if ($result == DB_OK) 
                        {
        $this->id = $this->ilias->db->getLastInsertId();
      }
    } 
                else 
                {
      // update existing dataset
      $query = sprintf("UPDATE survey_question SET title = %s, subtype = %s, description = %s, author = %s, questiontext = %s, obligatory = %s, complete = %s WHERE question_id = %s",
                                $this->ilias->db->quote($this->title),
                                $this->ilias->db->quote("$this->subtype"),
                                $this->ilias->db->quote($this->description),
                                $this->ilias->db->quote($this->author),
                                $this->ilias->db->quote($this->questiontext),
                                $this->ilias->db->quote(sprintf("%d", $this->obligatory)),
                                $this->ilias->db->quote("$complete"),
                                $this->ilias->db->quote($this->id)
      );
      $result = $this->ilias->db->query($query);
    }
    if ($result == DB_OK) 
                {
      // saving material uris in the database
      $this->saveMaterialsToDb();

      // save categories
                        
                        // delete existing category relations
      $query = sprintf("DELETE FROM survey_variable WHERE question_fi = %s",
        $this->ilias->db->quote($this->id)
      );
      $result = $this->ilias->db->query($query);
      // create new category relations
                        if (strcmp($this->minimum, "") == 0)
                        {
                                $min = "NULL";
                        }
                        else
                        {
                                $min = $this->ilias->db->quote($this->minimum);
                        }
                        if (preg_match("/[\D]/", $this->maximum) or (strcmp($this->maximum, "&infin;") == 0))
                        {
                                $max = -1;
                        }
                        else
                        {
                                if (strcmp($this->maximum, "") == 0)
                                {
                                        $max = "NULL";
                                }
                                else
                                {
                                        $max = $this->ilias->db->quote($this->maximum);
                                }
                        }
                        $query = sprintf("INSERT INTO survey_variable (variable_id, category_fi, question_fi, value1, value2, sequence, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, NULL)",
                                $this->ilias->db->quote(0),
                                $this->ilias->db->quote($this->id),
                                $min,
                                $max,
                                $this->ilias->db->quote(0)
                        );
                        $answer_result = $this->ilias->db->query($query);
    }
                parent::saveToDb($original_id);
  }

Here is the call graph for this function:

Here is the caller graph for this function:

SurveyMetricQuestion::setMaximum ( maximum = ""  ) 

Sets the maximum value.

Sets the maximum value

Parameters:
double $maximum The maximum value public
See also:
$maximum

Definition at line 131 of file class.SurveyMetricQuestion.php.

References $maximum.

Referenced by from_xml().

        {
    $this->maximum = $maximum;
  }

Here is the caller graph for this function:

SurveyMetricQuestion::setMinimum ( minimum = 0  ) 

Sets the minimum value.

Sets the minimum value

Parameters:
double $minimum The minimum value public
See also:
$minimum

Definition at line 117 of file class.SurveyMetricQuestion.php.

References $minimum.

Referenced by from_xml().

        {
    $this->minimum = $minimum;
  }

Here is the caller graph for this function:

SurveyMetricQuestion::setSubtype ( subtype = SUBTYPE_NON_RATIO  ) 

Sets the question subtype.

Sets the question subtype

Parameters:
integer $subtype The question subtype public
See also:
$subtype

Definition at line 103 of file class.SurveyMetricQuestion.php.

References $subtype.

Referenced by from_xml().

        {
    $this->subtype = $subtype;
  }

Here is the caller graph for this function:

SurveyMetricQuestion::SurveyMetricQuestion ( title = "",
description = "",
author = "",
questiontext = "",
owner = -1,
subtype = 0 
)

SurveyMetricQuestion constructor.

The constructor takes possible arguments an creates an instance of the SurveyMetricQuestion 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 78 of file class.SurveyMetricQuestion.php.

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

  {
                $this->SurveyQuestion($title, $description, $author, $questiontext, $owner);
                $this->subtype = $subtype;
                $this->minimum = "";
                $this->maximum = "";
        }

Here is the call graph for this function:

SurveyMetricQuestion::syncWithOriginal (  ) 

Reimplemented from SurveyQuestion.

Definition at line 590 of file class.SurveyMetricQuestion.php.

References $query, $result, and isComplete().

        {
                if ($this->original_id)
                {
                        $complete = 0;
                        if ($this->isComplete()) 
                        {
                                $complete = 1;
                        }
                        $query = sprintf("UPDATE survey_question SET title = %s, subtype = %s, description = %s, author = %s, questiontext = %s, obligatory = %s, complete = %s WHERE question_id = %s",
                                $this->ilias->db->quote($this->title . ""),
                                $this->ilias->db->quote($this->subtype . ""),
                                $this->ilias->db->quote($this->description . ""),
                                $this->ilias->db->quote($this->author . ""),
                                $this->ilias->db->quote($this->questiontext . ""),
                                $this->ilias->db->quote(sprintf("%d", $this->obligatory) . ""),
                                $this->ilias->db->quote($complete . ""),
                                $this->ilias->db->quote($this->original_id . "")
                        );
                        $result = $this->ilias->db->query($query);
                        if ($result == DB_OK) 
                        {
                                // save categories
                                
                                // delete existing category relations
                                $query = sprintf("DELETE FROM survey_variable WHERE question_fi = %s",
                                        $this->ilias->db->quote($this->original_id)
                                );
                                $result = $this->ilias->db->query($query);
                                // create new category relations
                                if (strcmp($this->minimum, "") == 0)
                                {
                                        $min = "NULL";
                                }
                                else
                                {
                                        $min = $this->ilias->db->quote($this->minimum . "");
                                }
                                if (preg_match("/[\D]/", $this->maximum) or (strcmp($this->maximum, "&infin;") == 0))
                                {
                                        $max = -1;
                                }
                                else
                                {
                                        if (strcmp($this->maximum, "") == 0)
                                        {
                                                $max = "NULL";
                                        }
                                        else
                                        {
                                                $max = $this->ilias->db->quote($this->maximum . "");
                                        }
                                }
                                $query = sprintf("INSERT INTO survey_variable (variable_id, category_fi, question_fi, value1, value2, sequence, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, NULL)",
                                        $this->ilias->db->quote("0"),
                                        $this->ilias->db->quote($this->original_id . ""),
                                        $min,
                                        $max,
                                        $this->ilias->db->quote("0")
                                );
                                $answer_result = $this->ilias->db->query($query);
                        }
                }
                parent::syncWithOriginal();
        }

Here is the call graph for this function:

SurveyMetricQuestion::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 498 of file class.SurveyMetricQuestion.php.

References $pos, $xml, SurveyQuestion::getAuthor(), SurveyQuestion::getDescription(), SurveyQuestion::getId(), getMaximum(), getMinimum(), SurveyQuestion::getObligatory(), SurveyQuestion::getQuestiontext(), getSubtype(), 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=".METRIC_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, "subtype");
                $a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->getSubtype()));
                $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
                $a_xml_writer->xmlStartTag("material");
                $a_xml_writer->xmlElement("mattext", NULL, $this->getQuestiontext());
                $a_xml_writer->xmlEndTag("material");
                // add answers to presentation
                $attrs = array(
                        "ident" => "METRIC",
                        "rcardinality" => "Single"
                );
                $a_xml_writer->xmlStartTag("response_num", $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(
                        "minnumber" => $this->getMinimum(),
                        "maxnumber" => $this->getMaximum()
                );
                $a_xml_writer->xmlStartTag("render_fib", $attrs);
                $a_xml_writer->xmlEndTag("render_fib");
                $a_xml_writer->xmlEndTag("response_num");
                $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

SurveyMetricQuestion::$maximum

Definition at line 65 of file class.SurveyMetricQuestion.php.

Referenced by setMaximum().

SurveyMetricQuestion::$minimum

Definition at line 56 of file class.SurveyMetricQuestion.php.

Referenced by setMinimum().

SurveyMetricQuestion::$subtype

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

Referenced by setSubtype(), and SurveyMetricQuestion().


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