function OORedaxo($params = false, $clang = false)
 {
     //var_dump($params);
     if ($params) {
         foreach (OORedaxo::getClassVars() as $key => $var) {
             $this->{$key} = $params[$key];
         }
     }
 }
 function hasValue($value, $prefixes = array())
 {
     static $values = null;
     if (!$values) {
         $values = OORedaxo::getClassVars();
     }
     foreach (array_merge(array(''), $prefixes) as $prefix) {
         if (in_array($prefix . $value, $values)) {
             return true;
         }
     }
     return false;
 }
Ejemplo n.º 3
0
 function OORedaxo($params = false, $clang = false)
 {
     if ($params !== false) {
         foreach (OORedaxo::getClassVars() as $var) {
             if (isset($params[$var])) {
                 $class_var = '_' . $var;
                 $value = $params[$var];
                 $this->{$class_var} = $value;
             }
         }
     }
     if ($clang !== false) {
         $this->setClang($clang);
     }
 }
 function OORedaxo($params = false, $clang = false)
 {
     //		var_dump($params);
     if ($params !== false) {
         foreach (OORedaxo::getClassVars() as $var) {
             $class_var = '_' . $var;
             $this->{$class_var} = $params[$var];
         }
     }
     if ($clang === false && isset($params['clang'])) {
         $clang = $params['clang'];
     }
     if ($clang !== false) {
         $this->clang = $clang;
     }
 }
 function getArticlesByType($article_type_id, $ignore_offlines = false, $clang = false)
 {
     global $REX;
     if ($clang === false) {
         $clang = $REX[CUR_CLANG];
     }
     $offline = $ignore_offlines ? " and status = 1 " : "";
     $artlist = array();
     $sql = new sql();
     $sql->setQuery("select " . implode(',', OORedaxo::getClassVars()) . " FROM rex_article WHERE type_id = '{$article_type_id}' AND clang='{$clang}' {$offline}");
     for ($i = 0; $i < $sql->getRows(); $i++) {
         foreach (OORedaxo::getClassVars() as $var) {
             $article_data['_' . $var] = $sql->getValue($var);
         }
         $artlist[] = new OOArticle($article_data);
         $sql->next();
     }
     return $artlist;
 }
/**
 * 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_base();
        $CONT->setCLang($_clang);
        $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['GENERATED_PATH'] . "/articles/{$article_id}.{$_clang}.article";
        if (rex_file::put($article_file, $content) === false) {
            return $I18N->msg('article_could_not_be_generated') . ' ' . $I18N->msg('check_rights_in_directory') . $REX['GENERATED_PATH'] . '/articles/';
        }
        // damit die aktuellen änderungen sofort wirksam werden, einbinden!
        require $article_file;
    }
    return true;
}
/**
 * Macht einen Artikel zum Startartikel der eigenen Kategorie
 *
 * @param $aid	Artikel ID
 */
function rex_article2startpage($neu_id)
{
    global $REX;
    $GAID = array();
    // neuen startartikel holen und schauen ob da
    $neu = new rex_sql();
    $neu->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where id={$neu_id} and startpage=0 and clang=0");
    if ($neu->getRows() != 1) {
        return false;
    }
    $neu_path = $neu->getValue("path");
    $neu_cat_id = $neu->getValue("re_id");
    // in oberster kategorie dann return
    if ($neu_cat_id == 0) {
        return false;
    }
    // alten startartikel
    $alt = new rex_sql();
    $alt->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where id={$neu_cat_id} and startpage=1 and clang=0");
    if ($alt->getRows() != 1) {
        return false;
    }
    $alt_path = $alt->getValue('path');
    $alt_id = $alt->getValue('id');
    // cat felder sammeln. +
    $params = array('path', 'prior', 'catname', 'startpage', 'catprior', 'status');
    $db_fields = OORedaxo::getClassVars();
    foreach ($db_fields as $field) {
        if (substr($field, 0, 4) == 'cat_') {
            $params[] = $field;
        }
    }
    // LANG SCHLEIFE
    foreach ($REX['CLANG'] as $clang => $clang_name) {
        // alter startartikel
        $alt->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where id={$neu_cat_id} and startpage=1 and clang={$clang}");
        // neuer startartikel
        $neu->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where id={$neu_id} and startpage=0 and clang={$clang}");
        // alter startartikel updaten
        $alt2 = new rex_sql();
        $alt2->setTable($REX['TABLE_PREFIX'] . "article");
        $alt2->setWhere("id={$alt_id} and clang=" . $clang);
        $alt2->setValue("re_id", $neu_id);
        // neuer startartikel updaten
        $neu2 = new rex_sql();
        $neu2->setTable($REX['TABLE_PREFIX'] . "article");
        $neu2->setWhere("id={$neu_id} and clang=" . $clang);
        $neu2->setValue("re_id", $alt->getValue("re_id"));
        // austauschen der definierten paramater
        foreach ($params as $param) {
            $neu_value = $neu->getValue($param);
            $alt_value = $alt->getValue($param);
            $alt2->setValue($param, $neu_value);
            $neu2->setValue($param, $alt_value);
        }
        $alt2->update();
        $neu2->update();
    }
    // alle artikel suchen nach |art_id| und pfade ersetzen
    // alles artikel mit re_id alt_id suchen und ersetzen
    $articles = new rex_sql();
    $ia = new rex_sql();
    $articles->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article where path like '%|{$alt_id}|%'");
    for ($i = 0; $i < $articles->getRows(); $i++) {
        $iid = $articles->getValue("id");
        $ipath = str_replace("|{$alt_id}|", "|{$neu_id}|", $articles->getValue("path"));
        $ia->setTable($REX['TABLE_PREFIX'] . "article");
        $ia->setWhere('id=' . $iid);
        $ia->setValue("path", $ipath);
        if ($articles->getValue("re_id") == $alt_id) {
            $ia->setValue("re_id", $neu_id);
        }
        $ia->update();
        $GAID[$iid] = $iid;
        $articles->next();
    }
    $GAID[$neu_id] = $neu_id;
    $GAID[$alt_id] = $alt_id;
    foreach ($GAID as $gid) {
        rex_generateArticle($gid);
    }
    return true;
}
/**
 * Konvertiert einen Artikel zum Startartikel der eigenen Kategorie
 *
 * @param int $neu_id Artikel ID des Artikels, der Startartikel werden soll
 *
 * @return boolean TRUE bei Erfolg, sonst FALSE
 */
function rex_article2startpage($neu_id)
{
    global $REX;
    $GAID = array();
    // neuen startartikel holen und schauen ob da
    $neu = rex_sql::factory();
    $neu->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article where id={$neu_id} and startpage=0 and clang=0");
    if ($neu->getRows() != 1) {
        return false;
    }
    $neu_path = $neu->getValue('path');
    $neu_cat_id = $neu->getValue('re_id');
    // in oberster kategorie dann return
    if ($neu_cat_id == 0) {
        return false;
    }
    // alten startartikel
    $alt = rex_sql::factory();
    $alt->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article where id={$neu_cat_id} and startpage=1 and clang=0");
    if ($alt->getRows() != 1) {
        return false;
    }
    $alt_path = $alt->getValue('path');
    $alt_id = $alt->getValue('id');
    $parent_id = $alt->getValue('re_id');
    // cat felder sammeln. +
    $params = array('path', 'prior', 'catname', 'startpage', 'catprior', 'status');
    $db_fields = OORedaxo::getClassVars();
    foreach ($db_fields as $field) {
        if (substr($field, 0, 4) == 'cat_') {
            $params[] = $field;
        }
    }
    // LANG SCHLEIFE
    foreach ($REX['CLANG'] as $clang => $clang_name) {
        // alter startartikel
        $alt->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article where id={$neu_cat_id} and startpage=1 and clang={$clang}");
        // neuer startartikel
        $neu->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article where id={$neu_id} and startpage=0 and clang={$clang}");
        // alter startartikel updaten
        $alt2 = rex_sql::factory();
        $alt2->setTable($REX['TABLE_PREFIX'] . 'article');
        $alt2->setWhere("id={$alt_id} and clang=" . $clang);
        $alt2->setValue('re_id', $neu_id);
        // neuer startartikel updaten
        $neu2 = rex_sql::factory();
        $neu2->setTable($REX['TABLE_PREFIX'] . 'article');
        $neu2->setWhere("id={$neu_id} and clang=" . $clang);
        $neu2->setValue('re_id', $alt->getValue('re_id'));
        // austauschen der definierten paramater
        foreach ($params as $param) {
            $neu_value = $neu->escape($neu->getValue($param));
            $alt_value = $alt->escape($alt->getValue($param));
            $alt2->setValue($param, $neu_value);
            $neu2->setValue($param, $alt_value);
        }
        $alt2->update();
        $neu2->update();
    }
    // alle artikel suchen nach |art_id| und pfade ersetzen
    // alles artikel mit re_id alt_id suchen und ersetzen
    $articles = rex_sql::factory();
    $ia = rex_sql::factory();
    $articles->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article where path like '%|{$alt_id}|%'");
    for ($i = 0; $i < $articles->getRows(); $i++) {
        $iid = $articles->getValue('id');
        $ipath = str_replace("|{$alt_id}|", "|{$neu_id}|", $articles->getValue('path'));
        $ia->setTable($REX['TABLE_PREFIX'] . 'article');
        $ia->setWhere('id=' . $iid);
        $ia->setValue('path', $ipath);
        if ($articles->getValue('re_id') == $alt_id) {
            $ia->setValue('re_id', $neu_id);
        }
        $ia->update();
        $GAID[$iid] = $iid;
        $articles->next();
    }
    $GAID[$neu_id] = $neu_id;
    $GAID[$alt_id] = $alt_id;
    $GAID[$parent_id] = $parent_id;
    foreach ($GAID as $gid) {
        rex_deleteCacheArticle($gid);
    }
    $users = rex_sql::factory();
    $users->setQuery('UPDATE ' . $REX['TABLE_PREFIX'] . 'user SET rights = REPLACE(rights, "#csw[' . $alt_id . ']#", "#csw[' . $neu_id . ']#")');
    foreach ($REX['CLANG'] as $clang => $clang_name) {
        rex_register_extension_point('ART_TO_STARTPAGE', '', array('id' => $neu_id, 'id_old' => $alt_id, 'clang' => $clang));
    }
    return true;
}