function getArticleById($article_id, $clang = FALSE, $OOCategory = FALSE)
 {
     global $REX;
     $article_id = (int) $article_id;
     if (!is_int($article_id)) {
         return NULL;
     }
     if ($clang === FALSE) {
         $clang = $REX['CUR_CLANG'];
     }
     $article_path = $REX['INCLUDE_PATH'] . '/generated/articles/' . $article_id . '.' . $clang . '.article';
     if (!file_exists($article_path)) {
         require_once $REX['INCLUDE_PATH'] . '/functions/function_rex_generate.inc.php';
         rex_generateArticleMeta($article_id, $clang);
     }
     if (file_exists($article_path)) {
         require_once $article_path;
         if ($OOCategory) {
             return new OOCategory(OORedaxo::convertGeneratedArray($REX['ART'][$article_id], $clang));
         } else {
             return new OOArticle(OORedaxo::convertGeneratedArray($REX['ART'][$article_id], $clang));
         }
     }
     return NULL;
 }
/**
 * Generiert alle *.article u. *.content Dateien eines Artikels/einer Kategorie
 *
 * @param $id ArtikelId des Artikels, der generiert werden soll
 * @param $refreshall Boolean Bei True wird der Inhalte auch komplett neu generiert, bei False nur die Metainfos
 *
 * @return TRUE bei Erfolg, FALSE wenn eine ungütlige article_id übergeben wird
 */
function rex_generateArticle($id, $refreshall = true)
{
    global $REX, $I18N;
    // artikel generieren
    // vorraussetzung: articel steht schon in der datenbank
    //
    // -> infos schreiben -> abhaengig von clang
    // --> artikel infos / einzelartikel metadaten
    // --> artikel content / einzelartikel content
    // --> listen generieren // wenn startpage = 1
    // ---> artikel liste
    // ---> category liste
    foreach ($REX['CLANG'] as $clang => $clang_name) {
        $CONT = new rex_article_base();
        $CONT->setCLang($clang);
        $CONT->setEval(false);
        // Content nicht ausführen, damit in Cachedatei gespeichert werden kann
        if (!$CONT->setArticleId($id)) {
            return false;
        }
        // ----------------------- generiere generated/articles/xx.article
        $MSG = rex_generateArticleMeta($id, $clang);
        if ($MSG === false) {
            return false;
        }
        if ($refreshall) {
            // ----------------------- generiere generated/articles/xx.content
            $MSG = rex_generateArticleContent($id, $clang);
            if ($MSG === false) {
                return false;
            }
        }
        // ----- EXTENSION POINT
        $MSG = rex_register_extension_point('CLANG_ARTICLE_GENERATED', '', array('id' => $id, 'clang' => $clang, 'article' => $CONT));
        if ($MSG != '') {
            echo rex_warning($MSG);
        }
        // --------------------------------------------------- Listen generieren
        if ($CONT->getValue('startpage') == 1) {
            rex_generateLists($id);
            rex_generateLists($CONT->getValue('re_id'));
        } else {
            rex_generateLists($CONT->getValue('re_id'));
        }
    }
    // ----- EXTENSION POINT
    $MSG = rex_register_extension_point('ARTICLE_GENERATED', '', array('id' => $id));
    return true;
}
/**
 * Artikel & Kategorien:
 *
 * Übernimmt die gePOSTeten werte in ein rex_sql-Objekt und speichert diese
 */
function _rex_a62_metainfo_cat_handleSave($params, $sqlFields)
{
    if ($_SERVER['REQUEST_METHOD'] != 'POST') {
        return $params;
    }
    if ($sqlFields->rows == 0) {
        return $params;
    }
    global $REX;
    $article = rex_sql::factory();
    //  $article->debugsql = true;
    $article->setTable($REX['TABLE_PREFIX'] . 'article');
    $article->setWhere('id=' . $params['id'] . ' AND clang=' . $params['clang']);
    _rex_a62_metainfo_handleSave($params, $article, $sqlFields);
    $article->update();
    // Artikel nochmal mit den zusätzlichen Werten neu generieren
    rex_generateArticleMeta($params['id'], $params['clang']);
    return $params;
}