16        "text_block" => 
"div",
 
   17        "text_inline" => 
"span",
 
   22        "media_cont" => 
"table",
 
   23        "media_caption" => 
"div",
 
   31        "flist_cont" => 
"div",
 
   32        "flist_head" => 
"div",
 
   42        "page_frame" => 
"table",
 
   43        "page_cont" => 
"table",
 
   49        "page_lnavlink" => 
"a",
 
   50        "page_rnavlink" => 
"a",
 
   51        "page_lnavimage" => 
"img",
 
   52        "page_rnavimage" => 
"img",
 
   58            array(
"type" => 
"text_block", 
"class" => 
"Standard"),
 
   59            array(
"type" => 
"text_block", 
"class" => 
"List"),
 
   60            array(
"type" => 
"text_block", 
"class" => 
"TableContent"),
 
   61            array(
"type" => 
"text_block", 
"class" => 
"Headline1"),
 
   62            array(
"type" => 
"text_block", 
"class" => 
"Headline2"),
 
   63            array(
"type" => 
"text_block", 
"class" => 
"Headline3"),
 
   64            array(
"type" => 
"text_inline", 
"class" => 
"Comment"),
 
   65            array(
"type" => 
"text_inline", 
"class" => 
"Emph"),
 
   66            array(
"type" => 
"text_inline", 
"class" => 
"Quotation"),
 
   67            array(
"type" => 
"text_inline", 
"class" => 
"Strong"),
 
   68            array(
"type" => 
"link", 
"class" => 
"IntLink"),
 
   69            array(
"type" => 
"link", 
"class" => 
"ExtLink"),
 
   70            array(
"type" => 
"link", 
"class" => 
"FootnoteLink"),
 
   71            array(
"type" => 
"media_cont", 
"class" => 
"MediaContainer"),
 
   72            array(
"type" => 
"table", 
"class" => 
"StandardTable"),
 
   73            array(
"type" => 
"media_caption", 
"class" => 
"MediaCaption"),
 
   74            array(
"type" => 
"page_frame", 
"class" => 
"PageFrame"),
 
   75            array(
"type" => 
"page_cont", 
"class" => 
"PageContainer"),
 
   76            array(
"type" => 
"page_tnav", 
"class" => 
"TopNavigation"),
 
   77            array(
"type" => 
"page_bnav", 
"class" => 
"BottomNavigation"),
 
   78            array(
"type" => 
"page_lnav", 
"class" => 
"LeftNavigation"),
 
   79            array(
"type" => 
"page_rnav", 
"class" => 
"RightNavigation"),
 
   80            array(
"type" => 
"page_lnavlink", 
"class" => 
"LeftNavigationLink"),
 
   81            array(
"type" => 
"page_rnavlink", 
"class" => 
"RightNavigationLink"),
 
   82            array(
"type" => 
"page_lnavimage", 
"class" => 
"LeftNavigationImage"),
 
   83            array(
"type" => 
"page_rnavimage", 
"class" => 
"RightNavigationImage"),
 
   84            array(
"type" => 
"page_fn", 
"class" => 
"Footnote"),
 
   85            array(
"type" => 
"page_title", 
"class" => 
"PageTitle"),
 
   86            array(
"type" => 
"sco_title", 
"class" => 
"Title"),
 
   87            array(
"type" => 
"sco_desc", 
"class" => 
"Description"),
 
   88            array(
"type" => 
"sco_keyw", 
"class" => 
"Keywords"),
 
   89            array(
"type" => 
"sco_obj", 
"class" => 
"Objective"),
 
   90            array(
"type" => 
"list_o", 
"class" => 
"NumberedList"),
 
   91            array(
"type" => 
"list_u", 
"class" => 
"BulletedList"),
 
   92            array(
"type" => 
"list_item", 
"class" => 
"StandardListItem"),
 
   93            array(
"type" => 
"question", 
"class" => 
"Standard"),
 
   94            array(
"type" => 
"question", 
"class" => 
"SingleChoice"),
 
   95            array(
"type" => 
"question", 
"class" => 
"MultipleChoice"),
 
   96            array(
"type" => 
"question", 
"class" => 
"TextQuestion"),
 
   97            array(
"type" => 
"question", 
"class" => 
"OrderingQuestion"),
 
   98            array(
"type" => 
"question", 
"class" => 
"MatchingQuestion"),
 
   99            array(
"type" => 
"question", 
"class" => 
"ImagemapQuestion"),
 
  100            array(
"type" => 
"question", 
"class" => 
"ClozeTest"),
 
  101            array(
"type" => 
"qtitle", 
"class" => 
"Title"),
 
  102            array(
"type" => 
"qanswer", 
"class" => 
"Answer"),
 
  103            array(
"type" => 
"qinput", 
"class" => 
"Input"),
 
  104            array(
"type" => 
"qsubmit", 
"class" => 
"Submit"),
 
  105            array(
"type" => 
"qfeedr", 
"class" => 
"FeedbackRight"),
 
  106            array(
"type" => 
"qfeedw", 
"class" => 
"FeedbackWrong"),
 
  107            array(
"type" => 
"flist_cont", 
"class" => 
"FileListContainer"),
 
  108            array(
"type" => 
"flist_head", 
"class" => 
"FileListHeading"),
 
  109            array(
"type" => 
"flist", 
"class" => 
"FileList"),
 
  110            array(
"type" => 
"flist_li", 
"class" => 
"FileListItem")
 
  114    protected static $basic_style_file = 
"./Services/Migration/DBUpdate_1385/basic_style/style.xml";
 
  127            $add_str = 
" AND style_id = " . 
$ilDB->quote($a_id, 
"integer");
 
  130        $set = 
$ilDB->query($q = 
"SELECT DISTINCT style_id, tag, class FROM style_parameter WHERE " .
 
  131            $ilDB->equals(
"type", 
"", 
"text", 
true) . 
" " . $add_str);
 
  133        while ($rec = 
$ilDB->fetchAssoc($set)) {
 
  136            switch ($rec[
"tag"]) {
 
  139                    if (in_array($rec[
"class"], array(
"Headline3", 
"Headline1",
 
  140                        "Headline2", 
"TableContent", 
"List", 
"Standard", 
"Remark",
 
  141                        "Additional", 
"Mnemonic", 
"Citation", 
"Example"))) {
 
  142                        $types[] = 
"text_block";
 
  144                    if (in_array($rec[
"class"], array(
"Block", 
"Remark",
 
  145                        "Additional", 
"Mnemonic", 
"Example", 
"Excursus", 
"Special"))) {
 
  146                        $types[] = 
"section";
 
  148                    if (in_array($rec[
"class"], array(
"Page", 
"Footnote", 
"PageTitle", 
"LMNavigation"))) {
 
  154                    $types[] = 
"table_cell";
 
  158                    if (in_array($rec[
"class"], array(
"ExtLink", 
"IntLink", 
"FootnoteLink"))) {
 
  164                    $types[] = 
"text_inline";
 
  177            foreach ($types as $t) {
 
  179                $set4 = 
$ilDB->queryF(
 
  180                    "SELECT * FROM style_char " .
 
  181                    " WHERE style_id = %s AND type = %s AND characteristic = %s",
 
  182                    array(
"integer", 
"text", 
"text"),
 
  183                    array($rec[
"style_id"], $t, $rec[
"class"])
 
  185                if ($rec4 = 
$ilDB->fetchAssoc($set4)) {
 
  190                        "INSERT INTO style_char " .
 
  191                        " (style_id, type, characteristic) VALUES " .
 
  193                        array(
"integer", 
"text", 
"text"),
 
  194                        array($rec[
"style_id"], $t, $rec[
"class"])
 
  200            if ($rec[
"type"] == 
"") {
 
  201                if (count($types) > 0) {
 
  203                        "UPDATE style_parameter SET type = %s " .
 
  204                        " WHERE style_id = %s AND class = %s AND " . 
$ilDB->equals(
"type", 
"", 
"text", 
true),
 
  205                        array(
"text", 
"integer", 
"text"),
 
  206                        array($types[0], $rec[
"style_id"], $rec[
"class"])
 
  210                    if ($types[0] == 
"link") {
 
  212                            "UPDATE style_parameter SET type = %s " .
 
  213                            " WHERE style_id = %s AND (class = %s OR class = %s) AND " . 
$ilDB->equals(
"type", 
"", 
"text", 
true),
 
  214                            array(
"text", 
"integer", 
"text", 
"text"),
 
  215                            array($types[0], $rec[
"style_id"], $rec[
"class"] . 
":visited",
 
  216                            $rec[
"class"] . 
":hover")
 
  223                if (count($types) == 2) {
 
  226                    $set2 = 
$ilDB->queryF(
 
  227                        "SELECT * FROM style_parameter " .
 
  228                        " WHERE style_id = %s AND class = %s AND type = %s",
 
  229                        array(
"integer", 
"text", 
"text"),
 
  230                        array($rec[
"style_id"], $rec[
"class"], $types[0])
 
  232                    while ($rec2 = 
$ilDB->fetchAssoc($set2)) {
 
  234                        $set3 = 
$ilDB->queryF(
 
  235                            "SELECT * FROM style_parameter " .
 
  236                            " WHERE style_id = %s AND tag = %s AND class = %s AND type = %s AND parameter = %s",
 
  237                            array(
"integer", 
"text", 
"text", 
"text", 
"text"),
 
  238                            array($rec[
"style_id"], $rec[
"tag"], $rec[
"class"], $types[1], $rec[
"parameter"])
 
  240                        if ($rec3 = 
$ilDB->fetchAssoc($set3)) {
 
  244                                "INSERT INTO style_parameter " .
 
  245                                " (style_id, tag, class, parameter, value, type) VALUES " .
 
  246                                " (%s,%s,%s,%s,%s,%s) ",
 
  247                                array(
"integer", 
"text", 
"text", 
"text", 
"text", 
"text"),
 
  248                                array($rec2[
"style_id"], $rec2[
"tag"], $rec2[
"class"],
 
  249                                    $rec2[
"parameter"], $rec2[
"value"], $types[1])
 
  264        foreach (self::$core_styles as $cstyle) {
 
  266                = array(
"type" => $cstyle[
"type"],
 
  268                    "class" => $cstyle[
"class"]);
 
  275        return self::$assigned_tags[$a_type];
 
  285        if (!is_object(self::$basic_style_dom)) {
 
  286            self::$basic_style_dom = 
new DOMDocument();
 
  287            self::$basic_style_dom->load(self::$basic_style_file);
 
  303        if (!is_writable($sty_data_dir)) {
 
  304            $ilErr->raiseError(
"Style data directory (" . $sty_data_dir
 
  305                . 
") not writeable.", 
$ilErr->FATAL);
 
  308        $style_dir = $sty_data_dir . 
"/sty_" . $a_style_id;
 
  310        if (!@is_dir($style_dir)) {
 
  311            $ilErr->raiseError(
"Creation of style directory failed (" .
 
  312                $style_dir . 
").", 
$ilErr->FATAL);
 
  316        $im_dir = $style_dir . 
"/images";
 
  318        if (!@is_dir($im_dir)) {
 
  319            $ilErr->raiseError(
"Creation of Import Directory failed (" .
 
  320                $im_dir . 
").", 
$ilErr->FATAL);
 
  324        $thumb_dir = $style_dir . 
"/images/thumbnails";
 
  326        if (!@is_dir($thumb_dir)) {
 
  327            $ilErr->raiseError(
"Creation of Import Directory failed (" .
 
  328                $thumb_dir . 
").", 
$ilErr->FATAL);
 
  352        $core_images = array();
 
  354        if (is_dir($core_dir)) {
 
  355            $dir = opendir($core_dir);
 
  356            while ($file = readdir($dir)) {
 
  357                if (substr($file, 0, 1) != 
"." && is_file($core_dir . 
"/" . $file)) {
 
  358                    $core_images[] = $file;
 
  364        $sets = 
$ilDB->query(
"SELECT * FROM object_data WHERE type = 'sty'");
 
  366        while ($recs = 
$ilDB->fetchAssoc($sets)) {
 
  367            $id = $recs[
"obj_id"];
 
  371                $set = 
$ilDB->queryF(
 
  372                    "SELECT * FROM style_char WHERE style_id = %s " .
 
  373                    "AND type = %s AND characteristic = %s",
 
  374                    array(
"integer", 
"text", 
"text"),
 
  375                    array($id, $cs[
"type"], $cs[
"class"])
 
  379                if (!($rec = 
$ilDB->fetchAssoc($set))) {
 
  381                        "INSERT INTO style_char (style_id, type, characteristic) " .
 
  382                        " VALUES (%s,%s,%s) ",
 
  383                        array(
"integer", 
"text", 
"text"),
 
  384                        array($id, $cs[
"type"], $cs[
"class"])
 
  387                    $xpath = 
new DOMXPath($bdom);
 
  388                    $par_nodes = $xpath->query(
"/StyleSheet/Style[@Tag = '" . $cs[
"tag"] . 
"' and @Type='" .
 
  389                        $cs[
"type"] . 
"' and @Class='" . $cs[
"class"] . 
"']/StyleParameter");
 
  390                    foreach ($par_nodes as $par_node) {
 
  392                        $set = 
$ilDB->queryF(
 
  393                            "SELECT * FROM style_parameter WHERE style_id = %s " .
 
  394                            "AND type = %s AND class = %s AND tag = %s AND parameter = %s",
 
  395                            array(
"integer", 
"text", 
"text", 
"text", 
"text"),
 
  396                            array($id, $cs[
"type"], $cs[
"class"],
 
  397                            $cs[
"tag"], $par_node->getAttribute(
"Name"))
 
  401                        if (!($rec = 
$ilDB->fetchAssoc($set))) {
 
  403                                "INSERT INTO style_parameter (style_id, type, class, tag, parameter, value) " .
 
  404                                " VALUES (%s,%s,%s,%s,%s,%s)",
 
  405                                array(
"integer", 
"text", 
"text", 
"text", 
"text", 
"text"),
 
  406                                array($id, $cs[
"type"], $cs[
"class"], $cs[
"tag"],
 
  407                                $par_node->getAttribute(
"Name"), $par_node->getAttribute(
"Value"))
 
  418            foreach ($core_images as $cim) {
 
  419                if (!is_file($imdir . 
"/" . $cim)) {
 
  420                    copy($core_dir . 
"/" . $cim, $imdir . 
"/" . $cim);
 
An exception for terminatinating execution or to throw for unit testing.
Style Migration Class (->3.11)
static _getBasicStyleDom()
Get basic style dom.
static _createImagesDirectory($a_style_id)
Create images directory <data_dir>/sty/sty_<id>/images.
static _determineTag($a_type)
static $basic_style_image_dir
static _getCoreStyles()
Get core styles.
static _getImagesDirectory($a_style_id)
Get images directory.
addMissingStyleCharacteristics($a_id="")
Add missing style characteristics to styles.
static _addMissingStyleClassesToAllStyles()
Add missing style classes to all styles.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...