/**
 * Erstellt eine Clang
 * 
 * @param $id   Id der Clang 
 * @param $name Name der Clang 
 */
function rex_addCLang($id, $name)
{
    global $REX;
    $REX['CLANG'][$id] = $name;
    $content = "// --- DYN\n\r";
    reset($REX['CLANG']);
    for ($i = 0; $i < count($REX['CLANG']); $i++) {
        $cur = key($REX['CLANG']);
        $val = current($REX['CLANG']);
        $content .= "\n\r\$REX['CLANG']['{$cur}'] = \"{$val}\";";
        next($REX['CLANG']);
    }
    $content .= "\n\r// --- /DYN";
    $file = $REX['INCLUDE_PATH'] . "/clang.inc.php";
    $h = fopen($file, "r");
    $fcontent = fread($h, filesize($file));
    $fcontent = ereg_replace("(\\/\\/.---.DYN.*\\/\\/.---.\\/DYN)", $content, $fcontent);
    fclose($h);
    $h = fopen($file, "w+");
    fwrite($h, $fcontent, strlen($fcontent));
    fclose($h);
    @chmod($file, 0777);
    $add = new sql();
    $add->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where clang='0'");
    $fields = $add->getFieldnames();
    for ($i = 0; $i < $add->getRows(); $i++) {
        $adda = new sql();
        // $adda->debugsql = 1;
        $adda->setTable($REX['TABLE_PREFIX'] . "article");
        reset($fields);
        while (list($key, $value) = each($fields)) {
            if ($value == "pid") {
                echo "";
            } else {
                if ($value == "clang") {
                    $adda->setValue("clang", $id);
                } else {
                    if ($value == "status") {
                        $adda->setValue("status", "0");
                    } else {
                        $adda->setValue($value, rex_addslashes($add->getValue("{$value}")));
                    }
                }
            }
            //  createuser
            //  updateuser
        }
        $adda->insert();
        $add->next();
    }
    $add = new sql();
    $add->query("insert into " . $REX['TABLE_PREFIX'] . "clang set id='{$id}',name='{$name}'");
    // ----- EXTENSION POINT
    rex_register_extension_point('CLANG_ADDED', '', array('id' => $id, 'name' => $name));
    rex_generateAll();
}
/**
 * Erstellt eine Clang
 *
 * @param $id   Id der Clang
 * @param $name Name der Clang
 */
function rex_addCLang($id, $name)
{
    global $REX;
    $REX['CLANG'][$id] = $name;
    $content = "";
    foreach ($REX['CLANG'] as $cur => $val) {
        $content .= "\$REX['CLANG']['{$cur}'] = \"{$val}\";\n";
    }
    $file = $REX['INCLUDE_PATH'] . "/clang.inc.php";
    rex_replace_dynamic_contents($file, $content);
    $add = new rex_sql();
    $add->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where clang='0'");
    $fields = $add->getFieldnames();
    $adda = new rex_sql();
    // $adda->debugsql = 1;
    for ($i = 0; $i < $add->getRows(); $i++) {
        $adda->setTable($REX['TABLE_PREFIX'] . "article");
        foreach ($fields as $key => $value) {
            if ($value == 'pid') {
                echo '';
            } else {
                if ($value == 'clang') {
                    $adda->setValue('clang', $id);
                } else {
                    if ($value == 'status') {
                        $adda->setValue('status', '0');
                    } else {
                        $adda->setValue($value, rex_addslashes($add->getValue($value)));
                    }
                }
            }
        }
        $adda->insert();
        $add->next();
    }
    $add = new rex_sql();
    $add->setQuery("insert into " . $REX['TABLE_PREFIX'] . "clang set id='{$id}',name='{$name}'");
    // ----- EXTENSION POINT
    rex_register_extension_point('CLANG_ADDED', '', array('id' => $id, 'name' => $name));
    rex_generateAll();
}
/**
 * Generiert den Cache der Media-Kategorie.
 *
 * @param $category_id Id des zu generierenden Media-Kategorie
 *
 * @return TRUE bei Erfolg, sonst FALSE
 */
function rex_generateMediaCategory($category_id)
{
    global $REX;
    $query = 'SELECT * FROM ' . OOMediaCategory::_getTableName() . ' WHERE id = ' . $category_id;
    $sql = rex_sql::factory();
    //$sql->debugsql = true;
    $sql->setQuery($query);
    if ($sql->getRows() == 0) {
        return false;
    }
    $content = '<?php' . "\n";
    foreach ($sql->getFieldNames() as $fieldName) {
        $content .= '$REX[\'MEDIA\'][\'CAT_ID\'][' . $category_id . '][\'' . $fieldName . '\'] = \'' . rex_addslashes($sql->getValue($fieldName), '\\\'') . '\';' . "\n";
    }
    $content .= '?>';
    $cat_file = $REX['GENERATED_PATH'] . "/files/{$category_id}.mcat";
    if (rex_file::put($cat_file, $content)) {
        return true;
    }
    return false;
}
/**
 * Generiert den Artikel-Cache der Metainformationen.
 * 
 * @param $article_id Id des zu generierenden Artikels
 * @param [$clang ClangId des Artikels]
 * 
 * @return TRUE bei Erfolg, FALSE wenn eine ungütlige article_id übergeben wird, sonst eine Fehlermeldung
 */
function rex_generateArticleMeta($article_id, $clang = null)
{
    global $REX, $I18N;
    foreach ($REX['CLANG'] as $_clang => $clang_name) {
        if ($clang !== null && $clang != $_clang) {
            continue;
        }
        $CONT = new rex_article();
        $CONT->setCLang($_clang);
        $CONT->getContentAsQuery();
        // Content aus Datenbank holen, no cache
        $CONT->setEval(FALSE);
        // Content nicht ausfŸhren, damit in Cachedatei gespeichert werden kann
        if (!$CONT->setArticleId($article_id)) {
            return FALSE;
        }
        // --------------------------------------------------- Artikelparameter speichern
        $params = array('article_id' => $article_id, 'last_update_stamp' => time());
        $class_vars = OORedaxo::getClassVars();
        unset($class_vars[array_search('id', $class_vars)]);
        $db_fields = $class_vars;
        foreach ($db_fields as $field) {
            $params[$field] = $CONT->getValue($field);
        }
        $content = '<?php' . "\n";
        foreach ($params as $name => $value) {
            $content .= '$REX[\'ART\'][' . $article_id . '][\'' . $name . '\'][' . $_clang . '] = \'' . rex_addslashes($value, '\\\'') . '\';' . "\n";
        }
        $content .= '?>';
        $article_file = $REX['INCLUDE_PATH'] . "/generated/articles/{$article_id}.{$_clang}.article";
        if (rex_put_file_contents($article_file, $content) === FALSE) {
            return $I18N->msg('article_could_not_be_generated') . " " . $I18N->msg('check_rights_in_directory') . $REX['INCLUDE_PATH'] . "/generated/articles/";
        }
        // damit die aktuellen änderungen sofort wirksam werden, einbinden!
        require $article_file;
    }
    return TRUE;
}