ILIAS  Release_4_1_x_branch Revision 61804
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilDataSet Class Reference

A dataset contains in data in a common structure that can be shared and transformed for different purposes easily, examples. More...

+ Inheritance diagram for ilDataSet:
+ Collaboration diagram for ilDataSet:

Public Member Functions

 __construct ()
 Constructor.
 init ($a_entity, $a_target_release)
 Init.
 getSupportedVersions ($a_entity)
 Get supported version.
 readData ($a_entity, $a_version, $a_ids)
 Read data from DB.
 setExportDirectories ($a_relative, $a_absolute)
 Set export directories.
 setImportDirectory ($a_val)
 Set import directory.
 getImportDirectory ()
 Get import directory.
 setDSPrefix ($a_val)
 Set XML dataset namespace prefix.
 getDSPrefix ()
 Get XML dataset namespace prefix.
 getDSPrefixString ()
 getDirectDataFromQuery ($a_query, $a_convert_to_leading_upper=true)
 Get data from query.This is a standard procedure, all db field names are directly mapped to abstract fields.
 convertToLeadingUpper ($a_str)
 Make xyz_abc a XyzAbc string.
 getJsonRepresentation ()
 Get json representation.
 getXmlRepresentation ($a_entity, $a_target_release, $a_ids, $a_field="", $a_omit_header=false, $a_omit_types=false)
 Get xml representation <dataset install_id="123" install_url="..."> <types entity="table_name" version="4.0.1"> <ftype name="field_1" type="text"> <ftype name="field_2" type="date"> <ftype name="field_3" type="integer"> </types> <types ...> ...
 addRecordsXml ($a_writer, $a_prefixes, $a_entity, $a_target_release, $a_ids, $a_field="")
 Add records xml.
 getNamespaces (&$namespaces, $a_entity, $a_target_release)
 Get xml namespaces.
 getXmlRecord ($a_entity, $a_version, $a_set)
 Get xml record for version.
 getJsonRecord ($a_set)
 Get json record for version.
 getXmlTypes ($a_entity, $a_version)
 Get xml types.
 getJsonTypes ($a_entity, $a_version)
 Get json types.
 getXMLEntityName ($a_entity, $a_version)
 Get entity name for xml (may be overwritten)
 getXMLEntityTag ($a_entity, $a_target_release)
 Get entity tag.
 getJsonEntityName ($a_entity, $a_version)
 Get entity name for json (may be overwritten)
 setImport ($a_val)
 Set import object.
 getImport ()
 Get import object.

Data Fields

 $dircnt

Protected Member Functions

 getTypes ($a_entity, $a_version)
 Get (abstract) types for (abstract) field names.
 getXmlNamespace ($a_entity, $a_target_release)
 Get xml namespace.

Private Member Functions

 addTypesXml ($a_writer, $a_entity, $a_target_release)
 Add types to xml writer.

Detailed Description

A dataset contains in data in a common structure that can be shared and transformed for different purposes easily, examples.

  • transform associative arrays into (set-)xml and back (e.g. for import/export)
  • transform assiciative arrays into json and back (e.g. for ajax requests)

The general structure is:

  • entity name (many times this corresponds to a table name)
  • structure (this is a set of field names and types pairs) currently supported types: text, integer, timestamp planned: date, time, clob types correspond to db types, see http://www.ilias.de/docu/goto.php?target=pg_25354_42&client_id=docu
  • records (similar to records of a database query; associative arrays)
Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 24 of file class.ilDataSet.php.

Constructor & Destructor Documentation

ilDataSet::__construct ( )

Constructor.

Definition at line 31 of file class.ilDataSet.php.

{
}

Member Function Documentation

ilDataSet::addRecordsXml (   $a_writer,
  $a_prefixes,
  $a_entity,
  $a_target_release,
  $a_ids,
  $a_field = "" 
)

Add records xml.

Parameters
@return

Definition at line 299 of file class.ilDataSet.php.

References $d, $dircnt, getDSPrefixString(), getXmlRecord(), getXmlTypes(), ilUtil\makeDirParents(), ilUtil\rCopy(), and readData().

Referenced by getXmlRepresentation().

{
$types = $this->getXmlTypes($a_entity, $a_target_release);
$this->readData($a_entity, $a_target_release, $a_ids, $a_field);
if (is_array($this->data))
{
foreach ($this->data as $d)
{
$a_writer->xmlStartTag($this->getDSPrefixString()."Rec",
array("Entity" => $this->getXmlEntityName($a_entity, $a_target_release)));
// entity tag
$a_writer->xmlStartTag($this->getXmlEntityTag($a_entity, $a_target_release));
$rec = $this->getXmlRecord($a_entity, $a_target_release, $d);
foreach ($rec as $f => $c)
{
switch ($types[$f])
{
case "directory":
if ($this->absolute_export_dir != "" && $this->relative_export_dir != "")
{
ilUtil::makeDirParents($this->absolute_export_dir."/dsDir_".$this->dircnt);
ilUtil::rCopy($c, $this->absolute_export_dir."/dsDir_".$this->dircnt);
//echo "<br>copy-".$c."-".$this->absolute_export_dir."/dsDir_".$this->dircnt."-";
$c = $this->relative_export_dir."/dsDir_".$this->dircnt;
$this->dircnt++;
}
break;
}
// this changes schema/dtd
//$a_writer->xmlElement($a_prefixes[$a_entity].":".$f,
// array(), $c);
$a_writer->xmlElement($f, array(), $c);
}
$a_writer->xmlEndTag($this->getXmlEntityTag($a_entity, $a_target_release));
$a_writer->xmlEndTag($this->getDSPrefixString()."Rec");
// foreach record records of dependent entities (no record)
$deps = $this->getDependencies($a_entity, $a_target_release, $rec, $a_ids);
if (is_array($deps))
{
foreach ($deps as $dp => $par)
{
$this->addRecordsXml($a_writer, $a_prefixes, $dp, $a_target_release, $par["ids"], $par["field"]);
}
}
}
}
else if ($this->data === false)
{
// false -> add records of dependent entities (no record)
$deps = $this->getDependencies($a_entity, $a_target_release, null, $a_ids);
if (is_array($deps))
{
foreach ($deps as $dp => $par)
{
$this->addRecordsXml($a_writer, $a_prefixes, $dp, $a_target_release, $par["ids"], $par["field"]);
}
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::addTypesXml (   $a_writer,
  $a_entity,
  $a_target_release 
)
private

Add types to xml writer.

Parameters

Definition at line 370 of file class.ilDataSet.php.

References $t, getDSPrefixString(), and getXmlTypes().

Referenced by getXmlRepresentation().

{
$types = $this->getXmlTypes($a_entity, $a_target_release);
// add types of current entity
if (is_array($types))
{
$a_writer->xmlStartTag($this->getDSPrefixString()."Types",
array("Entity" => $this->getXmlEntityName($a_entity, $a_target_release),
"TargetRelease" => $a_target_release));
foreach ($this->getXmlTypes($a_entity, $a_target_release) as $f => $t)
{
$a_writer->xmlElement($this->getDSPrefixString().'FieldType',
array("Name" => $f, "Type" => $t));
}
$a_writer->xmlEndTag($this->getDSPrefixString()."Types");
}
// add types of dependent entities
$deps = $this->getDependencies($a_entity, $a_target_release, null, null);
if (is_array($deps))
{
foreach ($deps as $dp => $w)
{
$this->addTypesXml($a_writer, $dp, $a_target_release);
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::convertToLeadingUpper (   $a_str)

Make xyz_abc a XyzAbc string.

Parameters
@return

Definition at line 181 of file class.ilDataSet.php.

Referenced by getDirectDataFromQuery(), and getXMLEntityTag().

{
$a_str = strtoupper(substr($a_str, 0, 1)).substr($a_str, 1);
while (is_int($pos = strpos($a_str, "_")))
{
$a_str = substr($a_str, 0, $pos).
strtoupper(substr($a_str, $pos+1, 1)).
substr($a_str, $pos+2);
}
return $a_str;
}

+ Here is the caller graph for this function:

ilDataSet::getDirectDataFromQuery (   $a_query,
  $a_convert_to_leading_upper = true 
)

Get data from query.This is a standard procedure, all db field names are directly mapped to abstract fields.

Parameters
@return

Definition at line 152 of file class.ilDataSet.php.

References $ilDB, and convertToLeadingUpper().

Referenced by ilExternalFeedDataSet\readData(), ilHTMLLearningModuleDataSet\readData(), ilMediaCastDataSet\readData(), ilNewsDataSet\readData(), ilExerciseDataSet\readData(), ilWikiDataSet\readData(), ilMediaPoolDataSet\readData(), ilSessionDataSet\readData(), and ilMediaObjectDataSet\readData().

{
global $ilDB;
$set = $ilDB->query($a_query);
$this->data = array();
while ($rec = $ilDB->fetchAssoc($set))
{
if ($a_convert_to_leading_upper)
{
$tmp = array();
foreach ($rec as $k => $v)
{
$tmp[$this->convertToLeadingUpper($k)]
= $v;
}
$rec = $tmp;
}
$this->data[] = $rec;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::getDSPrefix ( )

Get XML dataset namespace prefix.

Returns
string XML dataset namespace prefix

Definition at line 132 of file class.ilDataSet.php.

Referenced by getDSPrefixString().

{
return $this->var;
}

+ Here is the caller graph for this function:

ilDataSet::getDSPrefixString ( )

Definition at line 137 of file class.ilDataSet.php.

References getDSPrefix().

Referenced by addRecordsXml(), addTypesXml(), and getXmlRepresentation().

{
if ($this->getDSPrefix() != "")
{
return $this->getDSPrefix().":";
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::getImport ( )

Get import object.

Returns
object import object

Definition at line 513 of file class.ilDataSet.php.

{
return $this->import;
}
ilDataSet::getImportDirectory ( )

Get import directory.

Returns
string import directory

Definition at line 112 of file class.ilDataSet.php.

Referenced by ilHTMLLearningModuleDataSet\importRecord(), ilExerciseDataSet\importRecord(), and ilMediaObjectDataSet\importRecord().

{
return $this->import_directory;
}

+ Here is the caller graph for this function:

ilDataSet::getJsonEntityName (   $a_entity,
  $a_version 
)

Get entity name for json (may be overwritten)

Definition at line 493 of file class.ilDataSet.php.

Referenced by getJsonRepresentation().

{
return $a_entity;
}

+ Here is the caller graph for this function:

ilDataSet::getJsonRecord (   $a_set)

Get json record for version.

Parameters
arrayabstract data record
Returns
array json record

Definition at line 442 of file class.ilDataSet.php.

Referenced by getJsonRepresentation().

{
return $a_set;
}

+ Here is the caller graph for this function:

ilDataSet::getJsonRepresentation ( )
final

Get json representation.

Definition at line 197 of file class.ilDataSet.php.

References $d, ilJsonUtil\encode(), getJsonEntityName(), getJsonRecord(), and getJsonTypes().

{
if ($this->version === false)
{
return false;
}
$arr["entity"] = $this->getJsonEntityName();
$arr["version"] = $this->version;
$arr["install_id"] = IL_INST_ID;
$arr["install_url"] = ILIAS_HTTP_PATH;
$arr["types"] = $this->getJsonTypes();
$arr["set"] = array();
foreach ($this->data as $d)
{
$arr["set"][] = $this->getJsonRecord($d);
}
include_once("./Services/JSON/classes/class.ilJsonUtil.php");
return ilJsonUtil::encode($arr);
}

+ Here is the call graph for this function:

ilDataSet::getJsonTypes (   $a_entity,
  $a_version 
)

Get json types.

Returns
array types array for json/version set in constructor

Definition at line 462 of file class.ilDataSet.php.

References getTypes().

Referenced by getJsonRepresentation().

{
return $this->getTypes($a_entity, $a_version);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::getNamespaces ( $namespaces,
  $a_entity,
  $a_target_release 
)

Get xml namespaces.

Parameters
arraynamespaces per entity
stringentity
stringtarget release

Definition at line 407 of file class.ilDataSet.php.

References getXmlNamespace().

Referenced by getXmlRepresentation().

{
$ns = $this->getXmlNamespace($a_entity, $a_target_release);
if ($ns != "")
{
$namespaces[$a_entity] = $ns;
}
// add types of dependent entities
$deps = $this->getDependencies($a_entity, $a_target_release, null, null);
if (is_array($deps))
{
foreach ($deps as $dp => $w)
{
$this->getNamespaces($namespaces, $dp, $a_target_release);
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::getSupportedVersions (   $a_entity)
abstract
ilDataSet::getTypes (   $a_entity,
  $a_version 
)
abstractprotected

Get (abstract) types for (abstract) field names.

Please note that the abstract fields/types only depend on the version! Not on a choosen representation!

Returns
array types array, e.g. array("field_1" => "text", "field_2" => "integer", ...)

Reimplemented in ilMediaObjectDataSet, ilMediaPoolDataSet, ilWikiDataSet, ilSessionDataSet, ilExerciseDataSet, ilExternalFeedDataSet, ilForumDataSet, ilHTMLLearningModuleDataSet, ilMediaCastDataSet, and ilNewsDataSet.

Referenced by getJsonTypes(), and getXmlTypes().

+ Here is the caller graph for this function:

ilDataSet::getXMLEntityName (   $a_entity,
  $a_version 
)

Get entity name for xml (may be overwritten)

Returns
string

Definition at line 473 of file class.ilDataSet.php.

{
return $a_entity;
}
ilDataSet::getXMLEntityTag (   $a_entity,
  $a_target_release 
)

Get entity tag.

Parameters
@return

Definition at line 484 of file class.ilDataSet.php.

References convertToLeadingUpper().

{
return $this->convertToLeadingUpper($a_entity);
}

+ Here is the call graph for this function:

ilDataSet::getXmlNamespace (   $a_entity,
  $a_target_release 
)
abstractprotected
ilDataSet::getXmlRecord (   $a_entity,
  $a_version,
  $a_set 
)

Get xml record for version.

Parameters
arrayabstract data record
Returns
array xml record

Reimplemented in ilMediaObjectDataSet, ilSessionDataSet, ilExerciseDataSet, and ilHTMLLearningModuleDataSet.

Definition at line 431 of file class.ilDataSet.php.

Referenced by addRecordsXml().

{
return $a_set;
}

+ Here is the caller graph for this function:

ilDataSet::getXmlRepresentation (   $a_entity,
  $a_target_release,
  $a_ids,
  $a_field = "",
  $a_omit_header = false,
  $a_omit_types = false 
)
final

Get xml representation <dataset install_id="123" install_url="..."> <types entity="table_name" version="4.0.1"> <ftype name="field_1" type="text"> <ftype name="field_2" type="date"> <ftype name="field_3" type="integer"> </types> <types ...> ...

</types> <set entity="table_name"> <rec> <field_1>content</field_1> <field_2>my_date</field_2> <field_3>my_number</field_3> </rec> ... </set> </dataset>

Definition at line 241 of file class.ilDataSet.php.

References addRecordsXml(), addTypesXml(), getDSPrefixString(), and getNamespaces().

{
$this->dircnt = 1;
// step 1: check target release and supported versions
// step 2: init writer
include_once "./Services/Xml/classes/class.ilXmlWriter.php";
$writer = new ilXmlWriter();
if (!$a_omit_header)
{
$writer->xmlHeader();
}
// collect namespaces
$namespaces = $prefixes = array();
$this->getNamespaces($namespaces, $a_entity, $a_target_release);
$atts = array("InstallationId" => IL_INST_ID,
"InstallationUrl" => ILIAS_HTTP_PATH, "TopEntity" => $a_entity);
$cnt = 1;
foreach ($namespaces as $entity => $ns)
{
$prefix = "ns".$cnt;
$prefixes[$entity] = $prefix;
// $atts["xmlns:".$prefix] = $ns;
$cnt++;
}
$writer->xmlStartTag($this->getDSPrefixString().'DataSet', $atts);
// add types
if (!$a_omit_types)
{
$this->addTypesXml($writer, $a_entity, $a_target_release);
}
// add records
$this->addRecordsXml($writer, $prefixes, $a_entity, $a_target_release, $a_ids, $a_field = "");
$writer->xmlEndTag($this->getDSPrefixString()."DataSet");
//if ($a_entity == "mep")
//{
// echo "<pre>".htmlentities($writer->xmlDumpMem(true))."</pre>"; exit;
//}
return $writer->xmlDumpMem(false);
}

+ Here is the call graph for this function:

ilDataSet::getXmlTypes (   $a_entity,
  $a_version 
)

Get xml types.

Returns
array types array for xml/version set in constructor

Definition at line 452 of file class.ilDataSet.php.

References getTypes().

Referenced by addRecordsXml(), and addTypesXml().

{
return $this->getTypes($a_entity, $a_version);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilDataSet::init (   $a_entity,
  $a_target_release 
)
final

Init.

Parameters
string(abstract) entity name
stringversion string, always the ILIAS release versions that defined the a structure or made changes to it, never use another version. Example: structure is defined in 4.1.0 and changed in 4.3.0 -> use these values only, not 4.2.0 (ask for the 4.1.0 version in ILIAS 4.2.0)

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

{
$this->entity = $a_entity;
$this->target_release = $a_target_release;
$this->data = array();
}
ilDataSet::readData (   $a_entity,
  $a_version,
  $a_ids 
)
abstract

Read data from DB.

This should result in the abstract field structure of the version set in the constructor.

Parameters
arrayone or multiple ids

Referenced by addRecordsXml().

+ Here is the caller graph for this function:

ilDataSet::setDSPrefix (   $a_val)

Set XML dataset namespace prefix.

Parameters
stringXML dataset namespace prefix

Definition at line 122 of file class.ilDataSet.php.

{
$this->var = $a_val;
}
ilDataSet::setExportDirectories (   $a_relative,
  $a_absolute 
)

Set export directories.

Parameters
@return

Definition at line 91 of file class.ilDataSet.php.

{
$this->relative_export_dir = $a_relative;
$this->absolute_export_dir = $a_absolute;
}
ilDataSet::setImport (   $a_val)

Set import object.

Parameters
objectimport object

Definition at line 503 of file class.ilDataSet.php.

{
$this->import = $a_val;
}
ilDataSet::setImportDirectory (   $a_val)

Set import directory.

Parameters
stringimport directory

Definition at line 102 of file class.ilDataSet.php.

{
$this->import_directory = $a_val;
}

Field Documentation

ilDataSet::$dircnt

Definition at line 26 of file class.ilDataSet.php.

Referenced by addRecordsXml().


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