function getBreadcrumb($startPageLabel, $includeCurrent = FALSE, $category_id = 0)
 {
     if (!$this->_setActivePath()) {
         return FALSE;
     }
     global $REX;
     $path = $this->path;
     $i = 1;
     $lis = '';
     if ($startPageLabel) {
         $lis .= '<li class="rex-lvl' . $i . '"><a href="' . rex_getUrl($REX['START_ARTICLE_ID']) . '">' . htmlspecialchars($startPageLabel) . '</a></li>';
         $i++;
         // StartArticle nicht doppelt anzeigen
         if (isset($path[0]) && $path[0] == $REX['START_ARTICLE_ID']) {
             unset($path[0]);
         }
     }
     foreach ($path as $pathItem) {
         if ($cat = OOCategory::getCategoryById($pathItem) && $this->_check($cat, $i)) {
             $lis .= '<li class="rex-lvl' . $i . '"><a href="' . $cat->getUrl() . '">' . htmlspecialchars($cat->getName()) . '</a></li>';
             $i++;
         }
     }
     if ($includeCurrent) {
         if ($art = OOArticle::getArticleById($this->current_article_id) && $this->_check($art, $i)) {
             if (!$art->isStartpage()) {
                 $lis .= '<li class="rex-lvl' . $i . '">' . htmlspecialchars($art->getName()) . '</li>';
             } else {
                 $cat = OOCategory::getCategoryById($this->current_article_id);
                 $lis .= '<li class="rex-lvl' . $i . '">' . htmlspecialchars($cat->getName()) . '</li>';
             }
         }
     }
     return '<ul class="rex-breadcrumb">' . $lis . '</ul>';
 }
function rex_a62_metainfo_button($params)
{
    global $REX, $I18N;
    $s = '';
    $restrictionsCondition = '';
    if (isset($params['id']) && $params['id'] != '') {
        $OOCat = OOCategory::getCategoryById($params['id']);
        // Alle Metafelder des Pfades sind erlaubt
        foreach (explode('|', $OOCat->getPath()) as $pathElement) {
            if ($pathElement != '') {
                $s .= ' OR `p`.`restrictions` LIKE "%|' . $pathElement . '|%"';
            }
        }
        // Auch die Kategorie selbst kann Metafelder haben
        $s .= ' OR `p`.`restrictions` LIKE "%|' . $params['id'] . '|%"';
    }
    $restrictionsCondition = 'AND (`p`.`restrictions` = ""' . $s . ')';
    $fields = _rex_a62_metainfo_sqlfields('cat_', $restrictionsCondition);
    if ($fields->getRows() >= 1) {
        $return = '<p class="rex-button-add"><script type="text/javascript"><!--

    function rex_metainfo_toggle()
    {
        jQuery("#rex-form-structure-category .rex-metainfo-cat").toggle();
        metacat = jQuery("#rex-i-meta-category");
        if(metacat.hasClass("rex-i-generic-open"))
        {
            metacat.removeClass("rex-i-generic-open");
            metacat.addClass("rex-i-generic-close");
        }
        else
        {
            metacat.removeClass("rex-i-generic-close");
            metacat.addClass("rex-i-generic-open");
        }
    }

    //--></script><a id="rex-i-meta-category" class="rex-i-generic-open" href="javascript:rex_metainfo_toggle();">' . $I18N->msg('minfo_edit_metadata') . '</a></p>';
        return $params['subject'] . $return;
    }
    return $params['subject'];
}
Ejemplo n.º 3
0
 function hasCategoryPerm($category_id, $depricatedSecondParam = null)
 {
     // 1. Volle Rechte auf direkte Kategorie, csw
     // 2. Leserechte, bei Kategorien "zwischen" main und eigener navi, aber nicht sichtbar, csr
     // 3. Volle Rechte, wenn Kategorie unterhalb eine vollen Rechte Kat
     if ($this->isAdmin() || $this->hasPerm('csw[0]') || $this->hasPerm('csw[' . $category_id . ']')) {
         return true;
     }
     if ($c = OOCategory::getCategoryById($category_id)) {
         foreach ($c->getPathAsArray() as $k) {
             if ($this->hasPerm('csw[' . $k . ']')) {
                 return true;
             }
         }
     }
     /*if(!$rw)
       {
            if( $this->hasPerm('csr[' . $category_id . ']') )
               return TRUE;
       } */
     return false;
 }
Ejemplo n.º 4
0
<div id="rex-linkmap">
    <div class="rex-area-col-2">
        <div class="rex-area-col-a">
            <h3 class="rex-hl2"><?php 
echo $I18N->msg('lmap_categories');
?>
</h3>
            <div class="rex-area-content">
            <?php 
$roots = OOCategory::getRootCategories();
$mountpoints = $REX['USER']->getMountpoints();
if (count($mountpoints) > 0) {
    $roots = array();
    foreach ($mountpoints as $mp) {
        if (OOCategory::getCategoryById($mp)) {
            $roots[] = OOCategory::getCategoryById($mp);
        }
    }
}
echo rex_linkmap_tree($tree, $category_id, $roots, $GlobalParams);
?>
            </div>
        </div>

        <div class="rex-area-col-b">
            <h3 class="rex-hl2"><?php 
echo $I18N->msg('lmap_articles');
?>
</h3>
            <div class="rex-area-content">
            <ul>
Ejemplo n.º 5
0
          <col width="40" />
          <col width="315" />
          <col width="153" />
        </colgroup>
        <thead>
          <tr>
            <th class="rex-icon">' . $add_category . '</th>
            ' . $add_header . '
            <th>' . $I18N->msg('header_category') . '</th>
            <th>' . $I18N->msg('header_priority') . '</th>
            <th>' . $I18N->msg('header_edit_category') . '</th>
            <th>' . $I18N->msg('header_status') . '</th>
          </tr>
        </thead>
        <tbody>';
if ($category_id != 0 && ($category = OOCategory::getCategoryById($category_id))) {
    echo '<tr>
          <td></td>
          <td colspan="' . $data_colspan . '"><a href="index.php?page=structure&category_id=' . $category->getParentId() . '&clang=' . $clang . '">..</a></td>
        </tr>';
}
// --------------------- KATEGORIE ADD FORM
if ($function == 'add_cat' && $KATPERM && !$REX_USER->hasPerm('editContentOnly[]')) {
    $add_td = '';
    if ($REX_USER->hasPerm('advancedMode[]')) {
        $add_td = '<td class="rex-icon">-</td>';
    }
    $add_buttons = rex_register_extension_point('CAT_FORM_BUTTONS', "");
    $add_buttons .= '<input type="submit" class="rex-fsubmit" name="catadd_function" value="' . $I18N->msg('add_category') . '"' . rex_accesskey($I18N->msg('add_category'), $REX['ACKEY']['SAVE']) . ' />';
    echo '
        <tr class="rex-trow-actv">
 static function getListValue($params)
 {
     $return = array();
     foreach (explode(',', $params['value']) as $id) {
         if ($cat = OOCategory::getCategoryById($id, (int) $params['params']['field']['clang'])) {
             $return[] = $cat->getName();
         }
     }
     return implode('<br />', $return);
 }
/**
 * Erstellt einen neuen Artikel
 *
 * @param array $data Array mit den Daten des Artikels
 *
 * @return array Ein Array welches den status sowie eine Fehlermeldung beinhaltet
 */
function rex_addArticle($data)
{
    global $REX, $I18N;
    $success = true;
    $message = '';
    if (!is_array($data)) {
        trigger_error('Expecting $data to be an array!', E_USER_ERROR);
    }
    if (isset($data['prior'])) {
        if ($data['prior'] <= 0) {
            $data['prior'] = 1;
        }
    }
    $templates = OOCategory::getTemplates($data['category_id']);
    // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen
    // oder leer setzen.
    if (!isset($templates[$data['template_id']])) {
        $data['template_id'] = 0;
        if (count($templates) > 0) {
            $data['template_id'] = key($templates);
        }
    }
    $message = $I18N->msg('article_added');
    $AART = rex_sql::factory();
    foreach ($REX['CLANG'] as $key => $val) {
        // ------- Kategorienamen holen
        $category = OOCategory::getCategoryById($data['category_id'], $key);
        $category_name = '';
        if ($category) {
            $category_name = addslashes($category->getName());
        }
        $AART->setTable($REX['TABLE_PREFIX'] . 'article');
        if (!isset($id) or !$id) {
            $id = $AART->setNewId('id');
        } else {
            $AART->setValue('id', $id);
        }
        $AART->setValue('name', $data['name']);
        $AART->setValue('catname', $category_name);
        $AART->setValue('attributes', '');
        $AART->setValue('clang', $key);
        $AART->setValue('re_id', $data['category_id']);
        $AART->setValue('prior', $data['prior']);
        $AART->setValue('path', $data['path']);
        $AART->setValue('startpage', 0);
        $AART->setValue('status', 0);
        $AART->setValue('template_id', $data['template_id']);
        $AART->addGlobalCreateFields();
        $AART->addGlobalUpdateFields();
        if ($AART->insert()) {
            // ----- PRIOR
            rex_newArtPrio($data['category_id'], $key, 0, $data['prior']);
        } else {
            $success = false;
            $message = $AART->getError();
        }
        // ----- EXTENSION POINT
        $message = rex_register_extension_point('ART_ADDED', $message, array('id' => $id, 'clang' => $key, 'status' => 0, 'name' => $data['name'], 're_id' => $data['category_id'], 'prior' => $data['prior'], 'path' => $data['path'], 'template_id' => $data['template_id'], 'data' => $data));
    }
    return array($success, $message);
}
Ejemplo n.º 8
0
// ------------------------ Print JS Functions
?>
<script type="text/javascript">
  function insertLink(link,name){
    <?php 
echo $func_body . "\n";
?>
    self.close();
  }
</script>

<div class="rex-lmp-pth">
<ul>
<?php 
$isRoot = $category_id === 0;
$category = OOCategory::getCategoryById($category_id);
$link = rex_linkmap_url(array('category_id' => 0), $GlobalParams);
echo '<li>' . $I18N->msg('path') . ' </li>';
echo '<li>: <a href="' . $link . '">Homepage</a> </li>';
$tree = array();
if ($category) {
    foreach ($category->getParentTree() as $cat) {
        $tree[] = $cat->getId();
        $link = rex_linkmap_url(array('category_id' => $cat->getId()), $GlobalParams);
        echo '<li> : <a href="' . $link . '">' . htmlspecialchars($cat->getName()) . '</a></li>';
    }
}
?>
</ul>
</div>
 function getParent()
 {
     return OOCategory::getCategoryById($this->re_id);
 }
Ejemplo n.º 10
0
<?php

// title: Liste aller REDAXO-Artikel einer Kategorie
/**
 * Beispielmodul Liste aller REDAXO-Artikel einer Kategorie
 */
// Artikel-ID
$catid = rex_request('cat', 'int');
$content = '';
if ($catid != 0) {
    $cat = OOCategory::getCategoryById($catid);
    if ($cat) {
        $article = $cat->getArticles();
        if (is_array($article)) {
            $content = '<ul>';
            foreach ($article as $var) {
                $articleId = $var->getId();
                $articleName = $var->getName();
                $articleDescription = $var->getDescription();
                if (!$var->isStartpage() and $var->isOnline()) {
                    $content .= '<li><a href="' . rex_getUrl($articleId) . '" class="faq">' . $articleName . '</a></li>';
                }
            }
            $content .= '</ul>';
        }
    }
}
// Ausgabe, evtl. mit Header / Fehlermeldung
header('Content-Type: text/html; charset=utf-8');
if (trim($content) == '' or trim($content) == '<ul></ul>') {
    echo 'Keine Artikel gefunden!';
/**
 * rex_rewriter_generate_pathnames
 * generiert die Pathlist, abhŠngig von Aktion
 * @author markus.staab[at]redaxo[dot]de Markus Staab
 * @package redaxo4.2
 */
function rex_rewriter_generate_pathnames($params)
{
    global $REX, $REXPATH;
    if (file_exists(FULLNAMES_PATHLIST)) {
        require_once FULLNAMES_PATHLIST;
    }
    if (!isset($REXPATH)) {
        $REXPATH = array();
    }
    if (!isset($params['extension_point'])) {
        $params['extension_point'] = '';
    }
    $where = '';
    switch ($params['extension_point']) {
        // ------- sprachabhängig, einen artikel aktualisieren
        case 'CAT_DELETED':
        case 'ART_DELETED':
            unset($REXPATH[$params['id']]);
            break;
        case 'CAT_ADDED':
        case 'CAT_UPDATED':
        case 'ART_ADDED':
        case 'ART_UPDATED':
            $where = '(id=' . $params['id'] . ' AND clang=' . $params['clang'] . ') OR (path LIKE "%|' . $params['id'] . '|%" AND clang=' . $params['clang'] . ')';
            break;
            // ------- alles aktualisieren
        // ------- alles aktualisieren
        case 'ALL_GENERATED':
        default:
            $where = '1=1';
            break;
    }
    if ($where != '') {
        $db = new rex_sql();
        // $db->debugsql=true;
        $db->setQuery('SELECT id,clang,path,startpage FROM ' . $REX['TABLE_PREFIX'] . 'article WHERE ' . $where . ' and revision=0');
        while ($db->hasNext()) {
            $clang = $db->getValue('clang');
            $pathname = '';
            if (count($REX['CLANG']) > 1) {
                $pathname = $REX['CLANG'][$clang] . '/';
            }
            // pfad über kategorien bauen
            $path = trim($db->getValue('path'), '|');
            if ($path != '') {
                $path = explode('|', $path);
                foreach ($path as $p) {
                    $ooc = OOCategory::getCategoryById($p, $clang);
                    $name = $ooc->getName();
                    unset($ooc);
                    // speicher freigeben
                    $pathname = rex_rewriter_appendToPath($pathname, $name);
                }
            }
            $ooa = OOArticle::getArticleById($db->getValue('id'), $clang);
            if ($ooa->isStartArticle()) {
                $ooc = $ooa->getCategory();
                $catname = $ooc->getName();
                unset($ooc);
                // speicher freigeben
                $pathname = rex_rewriter_appendToPath($pathname, $catname);
            }
            // eigentlicher artikel anhängen
            $name = $ooa->getName();
            unset($ooa);
            // speicher freigeben
            $pathname = rex_rewriter_appendToPath($pathname, $name);
            $pathname = substr($pathname, 0, strlen($pathname) - 1) . '.html';
            $REXPATH[$db->getValue('id')][$db->getValue('clang')] = $pathname;
            $db->next();
        }
    }
    rex_put_file_contents(FULLNAMES_PATHLIST, "<?php\n\$REXPATH = " . var_export($REXPATH, true) . ";\n");
}
Ejemplo n.º 12
0
 protected function _getNavigation($categoryId)
 {
     global $REX;
     static $depth = 0;
     if ($categoryId < 1) {
         $cats = OOCategory::getRootCategories($this->ignoreOfflines);
     } else {
         $cats = OOCategory::getChildrenById($categoryId, $this->ignoreOfflines);
     }
     $return = '';
     $ulIdAttribute = '';
     $ulClassAttribute = '';
     if (count($cats) > 0) {
         if (isset($this->ulId[$depth])) {
             $ulIdAttribute = ' id="' . $this->ulId[$depth] . '"';
         }
         if (isset($this->ulClass[$depth])) {
             $ulClassAttribute = ' class="' . $this->ulClass[$depth] . '"';
         }
         $return .= '<ul' . $ulIdAttribute . $ulClassAttribute . '>';
     }
     foreach ($cats as $cat) {
         if ($this->_checkCallbacks($cat, $depth)) {
             $cssClasses = '';
             $idAttribute = '';
             // default li class
             if ($this->liClass != '') {
                 $cssClasses .= ' ' . $this->liClass;
             }
             // li class
             if (is_array($this->liClassFromCategoryId) && isset($this->liClassFromCategoryId[$cat->getId()])) {
                 $cssClasses .= ' ' . $this->liClassFromCategoryId[$cat->getId()];
             }
             if ($this->liClassFromMetaField != '' && $cat->getValue($this->liClassFromMetaField) != '') {
                 $cssClasses .= ' ' . $cat->getValue($this->liClassFromMetaField);
             }
             // li id
             if (is_array($this->liIdFromCategoryId) && isset($this->liIdFromCategoryId[$cat->getId()])) {
                 $idAttribute = ' id="' . $this->liIdFromCategoryId[$cat->getId()] . '"';
             } elseif ($this->liIdFromMetaField != '' && $cat->getValue($this->liIdFromMetaField) != '') {
                 $idAttribute = ' id="' . $cat->getValue($this->liIdFromMetaField) . '"';
             }
             // selected class
             if ($cat->getId() == $this->current_category_id) {
                 // active menuitem
                 $cssClasses .= ' ' . $this->activeClass;
             } elseif (in_array($cat->getId(), $this->path)) {
                 // current menuitem
                 $cssClasses .= ' ' . $this->selectedClass;
             } else {
                 // do nothing
             }
             $trimmedCssClasses = trim($cssClasses);
             // build class attribute
             if ($trimmedCssClasses != '') {
                 $classAttribute = ' class="' . $trimmedCssClasses . '"';
             } else {
                 $classAttribute = '';
             }
             if ($this->hideWebsiteStartArticle && $cat->getId() == $REX['START_ARTICLE_ID'] || in_array($cat->getId(), $this->hideIds)) {
                 // do nothing
             } else {
                 $depth++;
                 $urlType = 0;
                 // default
                 $return .= '<li' . $idAttribute . $classAttribute . '>';
                 if ($this->linkFromUserFunc != '') {
                     $defaultLink = call_user_func($this->linkFromUserFunc, $cat, $depth);
                 } else {
                     $defaultLink = '<a href="' . $cat->getUrl() . '">' . htmlspecialchars($cat->getName()) . '</a>';
                 }
                 if (!class_exists('seo42')) {
                     // normal behaviour
                     $return .= $defaultLink;
                 } else {
                     // only with seo42 2.0.0+
                     $urlData = seo42::getCustomUrlData($cat);
                     // check if default lang has url clone option (but only if current categoy has no url data set)
                     if (count($REX['CLANG']) > 1 && !isset($urlData['url_type'])) {
                         $defaultLangCat = OOCategory::getCategoryById($cat->getId(), $REX['START_CLANG_ID']);
                         $urlDataDefaultLang = seo42::getCustomUrlData($defaultLangCat);
                         if (isset($urlDataDefaultLang['url_clone']) && $urlDataDefaultLang['url_clone']) {
                             // clone url data from default language to current language
                             $urlData = $urlDataDefaultLang;
                         }
                     }
                     if (isset($urlData['url_type'])) {
                         switch ($urlData['url_type']) {
                             case 5:
                                 // SEO42_URL_TYPE_NONE
                                 $return .= htmlspecialchars($cat->getName());
                                 break;
                             case 4:
                                 // SEO42_URL_TYPE_LANGSWITCH
                                 $newClangId = $urlData['clang_id'];
                                 $newArticleId = $REX['ARTICLE_ID'];
                                 $catNewLang = OOCategory::getCategoryById($newArticleId, $newClangId);
                                 // if category that should be switched is not online, switch to start article of website
                                 if (OOCategory::isValid($catNewLang) && !$catNewLang->isOnline()) {
                                     $newArticleId = $REX['START_ARTICLE_ID'];
                                 }
                                 // select li that is current language
                                 if ($REX['CUR_CLANG'] == $newClangId) {
                                     $return = substr($return, 0, strlen($return) - strlen('<li>'));
                                     $return .= '<li class="' . $this->selectedClass . '">';
                                 }
                                 $return .= '<a href="' . rex_getUrl($newArticleId, $newClangId) . '">' . htmlspecialchars($cat->getName()) . '</a>';
                                 break;
                             case 8:
                                 // SEO42_URL_TYPE_CALL_FUNC
                                 $return .= call_user_func($urlData['func'], $cat);
                                 break;
                             default:
                                 $return .= $defaultLink;
                                 break;
                         }
                     } else {
                         $return .= $defaultLink;
                     }
                 }
                 if (($this->showAll || $cat->getId() == $this->current_category_id || in_array($cat->getId(), $this->path)) && ($this->levelDepth > $depth || $this->levelDepth < 0)) {
                     $return .= $this->_getNavigation($cat->getId());
                 }
                 $depth--;
                 $return .= '</li>';
             }
         }
     }
     if (count($cats) > 0) {
         $return .= '</ul>';
     }
     return $return;
 }
 function getParentTree()
 {
     $return = array();
     if ($this->_path) {
         $explode = explode('|', $this->_path);
         if (is_array($explode)) {
             foreach ($explode as $var) {
                 if ($var != '') {
                     $return[] = OOCategory::getCategoryById($var, $this->_clang);
                 }
             }
         }
         if ($this->_startpage) {
             $return[] = OOCategory::getCategoryById($this->_id, $this->_clang);
         }
     }
     return $return;
 }
/**
 * Castet die Variable $var zum Typ $vartype
 *
 * Mögliche PHP-Typen sind:
 *  - bool (auch boolean)
 *  - int (auch integer)
 *  - double
 *  - string
 *  - float
 *  - real
 *  - object
 *  - array
 *  - '' (nicht casten)
 *
 * Mögliche REDAXO-Typen sind:
 *  - rex-article-id
 *  - rex-category-id
 *  - rex-clang-id
 *  - rex-template-id
 *  - rex-ctype-id
 *  - rex-slice-id
 *  - rex-module-id
 *  - rex-action-id
 *  - rex-media-id
 *  - rex-mediacategory-id
 *  - rex-user-id
 *
 * @access private
 */
function _rex_cast_var($var, $vartype, $default = null, $mode = 'default')
{
    global $REX;
    if (is_string($vartype)) {
        $casted = true;
        switch ($vartype) {
            // ---------------- REDAXO types
            case 'rex-article-id':
                $var = (int) $var;
                if ($mode == 'found') {
                    if (!OOArticle::isValid(OOArticle::getArticleById($var))) {
                        $var = (int) $default;
                    }
                }
                break;
            case 'rex-category-id':
                $var = (int) $var;
                if ($mode == 'found') {
                    if (!OOCategory::isValid(OOCategory::getCategoryById($var))) {
                        $var = (int) $default;
                    }
                }
                break;
            case 'rex-clang-id':
                $var = (int) $var;
                if ($mode == 'found') {
                    if (empty($REX['CLANG'][$var])) {
                        $var = (int) $default;
                    }
                }
                break;
            case 'rex-template-id':
            case 'rex-ctype-id':
            case 'rex-slice-id':
            case 'rex-module-id':
            case 'rex-action-id':
            case 'rex-media-id':
            case 'rex-mediacategory-id':
            case 'rex-user-id':
                // erstmal keine weitere validierung
                $var = (int) $var;
                break;
                // ---------------- PHP types
            // ---------------- PHP types
            case 'bool':
            case 'boolean':
                $var = (bool) $var;
                break;
            case 'int':
            case 'integer':
                $var = (int) $var;
                break;
            case 'double':
                $var = (double) $var;
                break;
            case 'float':
            case 'real':
                $var = (double) $var;
                break;
            case 'string':
                $var = (string) $var;
                break;
            case 'object':
                $var = (object) $var;
                break;
            case 'array':
                if ($var === '') {
                    $var = array();
                } else {
                    $var = (array) $var;
                }
                break;
                // kein Cast, nichts tun
            // kein Cast, nichts tun
            case '':
                break;
            default:
                // check for array with generic type
                if (strpos($vartype, 'array[') === 0) {
                    if (empty($var)) {
                        $var = array();
                    } else {
                        $var = (array) $var;
                    }
                    // check if every element in the array is from the generic type
                    $matches = array();
                    if (preg_match('@array\\[([^\\]]*)\\]@', $vartype, $matches)) {
                        foreach ($var as $key => $value) {
                            try {
                                $var[$key] = _rex_cast_var($value, $matches[1]);
                            } catch (InvalidArgumentException $e) {
                                // Evtl Typo im vartype, mit urspr. typ als fehler melden
                                throw new InvalidArgumentException('Unexpected vartype "' . $vartype . '" in _rex_cast_var()!');
                            }
                        }
                    } else {
                        throw new InvalidArgumentException('Unexpected vartype "' . $vartype . '" in _rex_cast_var()!');
                    }
                } else {
                    $casted = false;
                }
        }
        if ($casted) {
            return $var;
        }
    }
    if (is_callable($vartype)) {
        $var = call_user_func($vartype, $var);
    } elseif (is_array($vartype)) {
        $var = _rex_cast_var($var, 'array');
        $newVar = array();
        foreach ($vartype as $cast) {
            if (!is_array($cast) || !isset($cast[0])) {
                throw new InvalidArgumentException('Unexpected vartype in _rex_cast_var()!');
            }
            $key = $cast[0];
            $innerVartype = isset($cast[1]) ? $cast[1] : '';
            if (array_key_exists($key, $var)) {
                $newVar[$key] = _rex_cast_var($var[$key], $innerVartype);
            } elseif (!isset($cast[2])) {
                $newVar[$key] = _rex_cast_var('', $innerVartype);
            } else {
                $newVar[$key] = $cast[2];
            }
        }
        $var = $newVar;
    } elseif (is_string($vartype)) {
        throw new InvalidArgumentException('Unexpected vartype "' . $vartype . '" in _rex_cast_var()!');
    } else {
        throw new InvalidArgumentException('Unexpected vartype in _rex_cast_var()!');
    }
    return $var;
}
Ejemplo n.º 15
0
 function getParentTree()
 {
     $return = array();
     if ($this->_path) {
         if ($this->isStartArticle()) {
             $explode = explode('|', $this->_path . $this->_id . '|');
         } else {
             $explode = explode('|', $this->_path);
         }
         if (is_array($explode)) {
             foreach ($explode as $var) {
                 if ($var != '') {
                     $return[] = OOCategory::getCategoryById($var, $this->_clang);
                 }
             }
         }
     }
     return $return;
 }
 function addCatOptions()
 {
     global $REX;
     if ($this->add_homepage) {
         $this->addOption('Homepage', 0);
     }
     if ($this->rootId !== null) {
         if (is_array($this->rootId)) {
             foreach ($this->rootId as $rootId) {
                 if ($rootCat = OOCategory::getCategoryById($rootId, $this->clang)) {
                     $this->addCatOption($rootCat, 0);
                 }
             }
         } else {
             if ($rootCat = OOCategory::getCategoryById($this->rootId, $this->clang)) {
                 $this->addCatOption($rootCat, 0);
             }
         }
     } else {
         if (!$this->check_perms || $REX['USER']->isAdmin() || $REX['USER']->hasPerm('csw[0]')) {
             if ($rootCats = OOCategory::getRootCategories($this->ignore_offlines, $this->clang)) {
                 foreach ($rootCats as $rootCat) {
                     $this->addCatOption($rootCat);
                 }
             }
         } elseif ($REX['USER']->hasMountpoints()) {
             $mountpoints = $REX['USER']->getMountpoints();
             foreach ($mountpoints as $id) {
                 $cat = OOCategory::getCategoryById($id, $this->clang);
                 if ($cat && !$REX['USER']->hasCategoryPerm($cat->getParentId())) {
                     $this->addCatOption($cat, 0);
                 }
             }
         }
     }
 }
Ejemplo n.º 17
0
function d2u_stellenmarkt_extended_sitemap($_params)
{
    global $REX;
    // Hier werden Pfade zwischengespeichert um Performance zu gewinnen
    $artikel_pathnames = array();
    $query_kategorie = "SELECT lang.stellen_id, clang_id, artikel_id, interne_nummer, interne_bezeichnung, datum " . "FROM " . $REX['TABLE_PREFIX'] . "d2u_stellenmarkt_stellen_lang AS lang " . "LEFT JOIN " . $REX['TABLE_PREFIX'] . "d2u_stellenmarkt_stellen AS kategorie " . "ON lang.stellen_id = kategorie.stellen_id " . "WHERE status = 'online' " . "ORDER BY lang.stellen_id, clang_id";
    $sql_kategorie = new rex_sql();
    $sql_kategorie->setQuery($query_kategorie);
    $rows_kategorie = $sql_kategorie->getRows();
    // Hier werden Pfade der Kategorien gespeichert
    for ($i = 0; $i < $rows_kategorie; $i++, $sql_kategorie->next()) {
        $artikel_id = $sql_kategorie->getValue("artikel_id");
        $clang_id = $sql_kategorie->getValue("clang_id");
        $stellen_id = $sql_kategorie->getValue("stellen_id");
        $stellen_interne_bezeichnung = $sql_kategorie->getValue("interne_bezeichnung");
        $stellen_interne_nummer = $sql_kategorie->getValue("interne_nummer");
        $date_array = explode("-", $sql_kategorie->getValue("datum"));
        $change_date = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]);
        $pathname = '';
        // Pfadnamen fuer Artikel
        if ($artikel_id > 0) {
            // Pfad wurde schon generiert
            if (array_key_exists($artikel_id, $artikel_pathnames) && array_key_exists($clang_id, $artikel_pathnames[$artikel_id])) {
                $pathname = $artikel_pathnames[$artikel_id][$clang_id];
            } else {
                // Sprachkuerzel
                if (count($REX['CLANG']) > 1 && $clang_id != $REX['ADDON']['seo42']['settings']['hide_langslug']) {
                    $pathname = seo42_appendToPath($pathname, $REX['ADDON']['seo42']['settings']['lang'][$clang_id]['code'], $REX['START_ARTICLE_ID'], $clang_id);
                }
                // Redaxo Artikel
                $artikel_kategorie = OOCategory::getCategoryById($artikel_id, $clang_id);
                if ($artikel_kategorie->isOnline() == false) {
                    // Nur in Index aufnehmen, wenn online
                    continue;
                }
                $artikel_hauptkategorien = $artikel_kategorie->getPathAsArray();
                for ($j = 0; $j < count($artikel_hauptkategorien); $j++) {
                    $artikel_hauptkategorie = OOCategory::getCategoryById($artikel_hauptkategorien[$j], $clang_id);
                    if ($artikel_hauptkategorie instanceof OOCategory) {
                        $pathname = seo42_appendToPath($pathname, $artikel_hauptkategorie->getName(), $artikel_hauptkategorie->getId(), $clang_id);
                    }
                }
                $pathname = seo42_appendToPath($pathname, $artikel_kategorie->getName(), $artikel_kategorie->getId(), $clang_id);
                if (!is_array($artikel_pathnames[$artikel_id])) {
                    $artikel_pathnames[$artikel_id] = array();
                }
                $artikel_pathnames[$artikel_id][$clang_id] = $pathname;
            }
        }
        // Pfad fuer Kategorie
        $pathname = seo42_appendToPath($pathname, $stellen_interne_bezeichnung . "-" . $stellen_interne_nummer, $artikel_id, $clang_id);
        // Nur wenn fuer Kategorien ebenfalls URLs vorgesehen sind
        $add_array = array();
        $add_array[$clang_id] = array('loc' => substr($pathname, 0, -1) . $REX['ADDON']['seo42']['settings']['url_ending'], 'lastmod' => date('c', $change_date), 'changefreq' => 'monthly', 'priority' => 0.6);
        $_params['subject'][] = $add_array;
    }
    return $_params['subject'];
    /*
    Allgemeiner Hinweis:
    In der config.inc.php muessen folgende Zeilen hinzugefuegt werden:
    -----%<-----
    require_once dirname(__FILE__) ."/extensions/seo42.inc.php";
    rex_register_extension('SEO42_SITEMAP_ARRAY_CREATED', 'd2u_stellenmarkt_extended_sitemap');
    -----%<-----
    */
}
Ejemplo n.º 18
0
/**
 * Erweitert das Meta-Formular um die neuen Meta-Felder
 *
 * @param string   $prefix       Feldprefix
 * @param string   $params       EP Params
 * @param callback $saveCallback Callback, dass die Daten speichert
 */
function _rex_a62_metainfo_form($prefix, $params, $saveCallback)
{
    // Beim ADD gibts noch kein activeItem
    $activeItem = null;
    if (isset($params['activeItem'])) {
        $activeItem = $params['activeItem'];
    }
    $restrictionsCondition = '';
    if ($prefix == 'art_') {
        if ($params['id'] != '') {
            $s = '';
            $OOArt = OOArticle::getArticleById($params['id'], $params['clang']);
            // Alle Metafelder des Pfades sind erlaubt
            foreach (explode('|', $OOArt->getPath()) as $pathElement) {
                if ($pathElement != '') {
                    $s .= ' OR `p`.`restrictions` LIKE "%|' . $pathElement . '|%"';
                }
            }
            $restrictionsCondition = 'AND (`p`.`restrictions` = ""' . $s . ')';
        }
    } elseif ($prefix == 'cat_') {
        $s = '';
        if ($params['id'] != '') {
            $OOCat = OOCategory::getCategoryById($params['id'], $params['clang']);
            // Alle Metafelder des Pfades sind erlaubt
            foreach (explode('|', $OOCat->getPath()) as $pathElement) {
                if ($pathElement != '') {
                    $s .= ' OR `p`.`restrictions` LIKE "%|' . $pathElement . '|%"';
                }
            }
            // Auch die Kategorie selbst kann Metafelder haben
            $s .= ' OR `p`.`restrictions` LIKE "%|' . $params['id'] . '|%"';
        }
        $restrictionsCondition = 'AND (`p`.`restrictions` = ""' . $s . ')';
    } elseif ($prefix == 'med_') {
        $catId = rex_session('media[rex_file_category]', 'int');
        if ($activeItem) {
            $catId = $activeItem->getValue('category_id');
        }
        if ($catId !== '') {
            $s = '';
            if ($catId != 0) {
                $OOCat = OOMediaCategory::getCategoryById($catId);
                // Alle Metafelder des Pfades sind erlaubt
                foreach (explode('|', $OOCat->getPath()) as $pathElement) {
                    if ($pathElement != '') {
                        $s .= ' OR `p`.`restrictions` LIKE "%|' . $pathElement . '|%"';
                    }
                }
            }
            // Auch die Kategorie selbst kann Metafelder haben
            $s .= ' OR `p`.`restrictions` LIKE "%|' . $catId . '|%"';
            $restrictionsCondition = 'AND (`p`.`restrictions` = ""' . $s . ')';
        }
    }
    $sqlFields = _rex_a62_metainfo_sqlfields($prefix, $restrictionsCondition);
    $params = rex_call_func($saveCallback, array($params, $sqlFields), false);
    return rex_a62_metaFields($sqlFields, $activeItem, 'rex_a62_metainfo_form_item', $params);
}
 function getCategory()
 {
     return OOCategory::getCategoryById($this->_category_id);
 }
 function getTemplates($category_id, $ignore_inactive = true)
 {
     global $REX;
     $ignore_inactive = $ignore_inactive ? 1 : 0;
     $templates = array();
     $t_sql = rex_sql::factory();
     $t_sql->setQuery('select id,name,attributes from ' . $REX['TABLE_PREFIX'] . 'template where active=' . $ignore_inactive . ' order by name');
     if ($category_id < 1) {
         // Alle globalen Templates
         foreach ($t_sql->getArray() as $t) {
             $categories = rex_getAttributes("categories", $t["attributes"]);
             if (!is_array($categories) || $categories["all"] == 1) {
                 $templates[$t["id"]] = $t['name'];
             }
         }
     } else {
         if ($c = OOCategory::getCategoryById($category_id)) {
             $path = $c->getPathAsArray();
             $path[] = $category_id;
             foreach ($t_sql->getArray() as $t) {
                 $categories = rex_getAttributes("categories", $t["attributes"]);
                 // template ist nicht kategoriespezifisch -> includen
                 if (!is_array($categories) || $categories["all"] == 1) {
                     $templates[$t["id"]] = $t['name'];
                 } else {
                     // template ist auf kategorien beschraenkt..
                     // nachschauen ob eine davon im pfad der aktuellen kategorie liegt
                     foreach ($path as $p) {
                         if (in_array($p, $categories)) {
                             $templates[$t["id"]] = $t['name'];
                             break;
                         }
                     }
                 }
             }
         }
     }
     return $templates;
 }
Ejemplo n.º 21
0
/**
* seo42_generate_pathlist()
*
* generiert die Pathlist, abhängig von Aktion
* @author markus.staab[at]redaxo[dot]de Markus Staab
* @package redaxo4.2
*/
function seo42_generate_pathlist($params)
{
    global $REX, $SEO42_IDS, $SEO42_URLS;
    // temporary community install workaround
    if (!isset($REX['ADDON']['seo42'])) {
        return;
    }
    // include pathlist file
    if (file_exists(SEO42_PATHLIST)) {
        require_once SEO42_PATHLIST;
    }
    // EXTENSION POINT "SEO42_PATHLIST_BEFORE_REBUILD"
    $subject = array('SEO42_IDS' => $SEO42_IDS, 'SEO42_URLS' => $SEO42_URLS);
    rex_register_extension_point('SEO42_PATHLIST_BEFORE_REBUILD', $subject);
    $SEO42_IDS = array();
    $SEO42_URLS = array();
    $REX['SEO42_URL_CLONE'] = array();
    $db = new rex_sql();
    // REVISION FIX
    $db->setQuery('UPDATE ' . $REX['TABLE_PREFIX'] . 'article SET revision = 0 WHERE revision IS NULL;');
    $db->setQuery('UPDATE ' . $REX['TABLE_PREFIX'] . 'article_slice SET revision = 0 WHERE revision IS NULL;');
    if ($REX['ADDON']['seo42']['settings']['ignore_root_cats']) {
        $sqlQuery = 'SELECT `id`, `clang`, `path`, `startpage`,`seo_custom_url` FROM ' . $REX['TABLE_PREFIX'] . 'article WHERE re_id != 0 OR (re_id = 0 AND catname LIKE "") AND revision=0 OR revision IS NULL ORDER BY id';
    } else {
        $sqlQuery = 'SELECT `id`, `clang`, `path`, `startpage`,`seo_custom_url` FROM ' . $REX['TABLE_PREFIX'] . 'article WHERE revision=0 OR revision IS NULL ORDER BY id';
    }
    $db->setQuery($sqlQuery);
    // redirects start articles withou slash: /xx to /xx/
    if (count($REX['CLANG']) > 1) {
        foreach ($REX['CLANG'] as $clangId => $clangName) {
            if ($REX['ADDON']['seo42']['settings']['url_ending'] == '') {
                $langSlug = seo42::getLangUrlSlug($clangId) . '/';
            } else {
                $langSlug = seo42::getLangUrlSlug($clangId);
            }
            if ($REX['ADDON']['seo42']['settings']['homelang'] != $clangId) {
                $SEO42_URLS[$langSlug] = array('id' => $REX['START_ARTICLE_ID'], 'clang' => $clangId, 'status' => 301);
            }
        }
    }
    while ($db->hasNext()) {
        $pathname = '';
        $id = $db->getValue('id');
        $clang = $db->getValue('clang');
        $path = $db->getValue('path');
        // LANG SLUG
        if (count($REX['CLANG']) > 1 && $clang != $REX['ADDON']['seo42']['settings']['hide_langslug']) {
            $pathname = '';
            $pathname = seo42_appendToPath($pathname, seo42::getLangUrlSlug($clang), $id, $clang);
        }
        // pfad über kategorien bauen
        $path = trim($path, '|');
        if ($path != '') {
            $path = explode('|', $path);
            foreach ($path as $p) {
                $ooc = OOCategory::getCategoryById($p, seo42_utils::getInheritedClang($clang));
                // PREVENT FATALS IN RARE CONDITIONS WHERE DB/CACHE ARE OUT OF SYNC
                if (!is_a($ooc, 'OOCategory')) {
                    continue;
                }
                // 42
                if ($REX['ADDON']['seo42']['settings']['ignore_root_cats'] && $ooc->getParentId() == 0) {
                    continue;
                }
                $name = $ooc->getName();
                unset($ooc);
                $pathname = seo42_appendToPath($pathname, $name, $id, $clang);
            }
        }
        $ooa = OOArticle::getArticleById($id, seo42_utils::getInheritedClang($clang));
        // PREVENT FATALS IN RARE CONDITIONS WHERE DB/CACHE ARE OUT OF SYNC
        if (!is_a($ooa, 'OOArticle')) {
            $db->next();
            continue;
        }
        if ($ooa->isStartArticle()) {
            $ooc = $ooa->getCategory();
            $catname = $ooc->getName();
            unset($ooc);
            $pathname = seo42_appendToPath($pathname, $catname, $id, $clang);
        }
        // url_schema: seo42
        if (!$ooa->isStartArticle()) {
            // eigentlicher artikel anhängen
            $name = $ooa->getName();
            unset($ooa);
            $pathname = seo42_appendToPath($pathname, $name, $id, $clang);
        }
        // ALLGEMEINE URL ENDUNG
        $pathname = substr($pathname, 0, strlen($pathname) - 1) . $REX['ADDON']['seo42']['settings']['url_ending'];
        // STARTSEITEN URL FORMAT
        if ($db->getValue('id') == $REX['START_ARTICLE_ID'] && $db->getValue('clang') == $REX['ADDON']['seo42']['settings']['homelang'] && ($REX['ADDON']['seo42']['settings']['homeurl'] == 1 || $REX['ADDON']['seo42']['settings']['homeurl'] == 2)) {
            $pathname = '';
        } elseif ($REX['ADDON']['seo42']['settings']['homeurl'] == 2 && $db->getValue('id') == $REX['START_ARTICLE_ID'] && count($REX['CLANG']) > 1) {
            if ($REX['ADDON']['seo42']['settings']['url_ending'] == '') {
                $langSlug = seo42::getLangUrlSlug($clang);
            } else {
                $langSlug = seo42::getLangUrlSlug($clang) . '/';
            }
            $pathname = $langSlug;
        }
        // UNSET OLD URL FROM $SEO42_URLS
        if (isset($SEO42_IDS[$id][$clang]['url']) && isset($SEO42_URLS[$SEO42_IDS[$id][$clang]['url']])) {
            unset($SEO42_URLS[$SEO42_IDS[$id][$clang]['url']]);
        }
        $SEO42_IDS[$id][$clang] = array('url' => $pathname);
        $SEO42_URLS[$pathname] = array('id' => (int) $id, 'clang' => (int) $clang);
        // get data from default lang if clone option is enabled for all other langs
        $jsonData = json_decode($db->getValue('seo_custom_url'), true);
        $articleId = $db->getValue('id');
        $clangId = $db->getValue('clang');
        if (isset($jsonData['url_clone']) && $jsonData['url_clone'] == true && $clangId == $REX['START_CLANG_ID']) {
            $REX['SEO42_URL_CLONE'][$articleId] = $jsonData;
        }
        $db->next();
    }
    // URL MANIPULATION BY SEO42
    // -----------------------------------------------------------------------------------------------------------
    $interReplaceIds = array();
    $db->reset();
    for ($i = 0; $i < $db->getRows(); $i++) {
        $urlField = $db->getValue('seo_custom_url');
        $articleId = $db->getValue('id');
        $clangId = $db->getValue('clang');
        if ($urlField != '' || isset($REX['SEO42_URL_CLONE'][$articleId])) {
            $urlData = seo42_utils::getUrlTypeData($urlField);
            $jsonData = json_decode($urlData, true);
            if (isset($REX['SEO42_URL_CLONE'][$articleId]) && !isset($jsonData['url_type'])) {
                $jsonData = $REX['SEO42_URL_CLONE'][$articleId];
            }
            switch ($jsonData['url_type']) {
                case SEO42_URL_TYPE_DEFAULT:
                    // do nothing
                    break;
                case SEO42_URL_TYPE_USERDEF_INTERN:
                    $customUrl = $jsonData['custom_url'];
                    if ($SEO42_IDS[$articleId][$clangId]['url'] != $customUrl) {
                        // only if custom url ist different then auto url
                        $SEO42_URLS[$customUrl] = $SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']];
                        unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    }
                    $SEO42_IDS[$articleId][$clangId] = array('url' => $customUrl);
                    break;
                case SEO42_URL_TYPE_USERDEF_EXTERN:
                    $customUrl = $jsonData['custom_url'];
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    $SEO42_IDS[$articleId][$clangId] = array('url' => $customUrl);
                    break;
                case SEO42_URL_TYPE_MEDIAPOOL:
                    $customUrl = $REX['MEDIA_DIR'] . '/' . $jsonData['file'];
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    $SEO42_IDS[$articleId][$clangId] = array('url' => $customUrl);
                    break;
                case SEO42_URL_TYPE_INTERN_REPLACE:
                    $customArticleId = $jsonData['article_id'];
                    $interReplaceIds[$clangId][$articleId] = array('id' => $customArticleId, 'clang' => $clangId);
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    if (isset($SEO42_IDS[$customArticleId][$clangId]['url'])) {
                        $SEO42_IDS[$articleId][$clangId] = array('url' => $SEO42_IDS[$customArticleId][$clangId]['url']);
                    } else {
                        $SEO42_IDS[$articleId][$clangId] = array('url' => '');
                    }
                    break;
                case SEO42_URL_TYPE_INTERN_REPLACE_CLANG:
                    $customArticleId = $jsonData['article_id'];
                    $customClangId = $jsonData['clang_id'];
                    $interReplaceIds[$clangId][$articleId] = array('id' => $customArticleId, 'clang' => $customClangId);
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    if (isset($SEO42_IDS[$customArticleId][$customClangId]['url'])) {
                        $SEO42_IDS[$articleId][$clangId] = array('url' => $SEO42_IDS[$customArticleId][$customClangId]['url']);
                    } else {
                        $SEO42_IDS[$articleId][$clangId] = array('url' => '');
                    }
                    break;
                case SEO42_URL_TYPE_REMOVE_ROOT_CAT:
                    $curUrl = $SEO42_IDS[$articleId][$clangId]['url'];
                    $newUrl = seo42_utils::removeRootCatFromUrl($curUrl, $clangId);
                    if ($newUrl != '') {
                        // same as SEO42_URL_TYPE_USERDEF_INTERN
                        $SEO42_URLS[$newUrl] = $SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']];
                        unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                        $SEO42_IDS[$articleId][$clangId] = array('url' => $newUrl);
                    }
                    break;
                case SEO42_URL_TYPE_CALL_FUNC:
                    if ($jsonData['no_url']) {
                        unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    }
                    break;
                case SEO42_URL_TYPE_LANGSWITCH:
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    break;
                case SEO42_URL_TYPE_NONE:
                    unset($SEO42_URLS[$SEO42_IDS[$articleId][$clangId]['url']]);
                    $SEO42_IDS[$articleId][$clangId] = array('url' => '');
                    break;
            }
            unset($jsonData);
        }
        $db->next();
    }
    // workaround for #177
    foreach ($interReplaceIds as $clangId => $value) {
        foreach ($value as $interReplaceId => $targetArticle) {
            if (isset($SEO42_IDS[$targetArticle['id']][$targetArticle['clang']]['url'])) {
                $SEO42_IDS[$interReplaceId][$clangId] = array('url' => $SEO42_IDS[$targetArticle['id']][$targetArticle['clang']]['url']);
            }
        }
    }
    // -----------------------------------------------------------------------------------------------------------
    // EXTENSION POINT "SEO42_PATHLIST_CREATED"
    $subject = array('SEO42_IDS' => $SEO42_IDS, 'SEO42_URLS' => $SEO42_URLS);
    $subject = rex_register_extension_point('SEO42_PATHLIST_CREATED', $subject);
    // EXTENSION POINT "SEO42_PATHLIST_FINAL" - READ ONLY
    rex_register_extension_point('SEO42_PATHLIST_FINAL', $subject);
    // ASSEMBLE, COMPRESS & WRITE PATHLIST TO FILE
    $pathlist_content = '$SEO42_IDS = ' . var_export($subject['SEO42_IDS'], true) . ';' . PHP_EOL . '$SEO42_URLS = ' . var_export($subject['SEO42_URLS'], true) . ';';
    $pathlist_content = seo42_compressPathlist($pathlist_content);
    rex_put_file_contents(SEO42_PATHLIST, '<?php' . PHP_EOL . $pathlist_content);
    // PURGE *.CONTENT CACHEFILES TO UPDATE INTERNAL LINKS CREATED BY replceLinks() in rex_article_base
    seo42_purgeCacheFiles();
}
 /**
  * Gibt die URL der Terminkategorie zurück.
  * @global mixed[] $REX Redaxo Variable
  * @var boolean $path_only Gibt an, ob die URL mit Domain oder ohne erstellt
  * werden soll.
  * @return String URL für das Objekt
  */
 function getURL($path_only = FALSE)
 {
     if ($this->url == "") {
         global $REX;
         $pathname = '';
         if (OOAddon::isActivated('seo42')) {
             // Mit SEO42
             require_once dirname(__FILE__) . "/../../seo42/classes/class.seo42_rewrite.inc.php";
             // Dann Redaxo Artikelfolge
             if ($REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'] > 0 && $REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'] != $REX['START_ARTICLE_ID']) {
                 $kategorie = OOCategory::getCategoryById($REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'], $REX['CUR_CLANG']);
                 $hauptkategorien = $kategorie->getPathAsArray();
                 for ($i = 0; $i < count($hauptkategorien); $i++) {
                     $hauptkategorie = OOCategory::getCategoryById($hauptkategorien[$i], $REX['CUR_CLANG']);
                     if ($hauptkategorie instanceof OOCategory) {
                         $pathname = seo42_appendToPath($pathname, $hauptkategorie->getName(), $hauptkategorie->getId(), $REX['CUR_CLANG']);
                     }
                 }
                 if ($kategorie->getName() != "") {
                     $pathname = seo42_appendToPath($pathname, $kategorie->getName(), $kategorie->getId(), $REX['CUR_CLANG']);
                 } else {
                     // Wenn angegebener Artikel keine Kategorie ist, sondern nur Artikelname hat
                     $pathname = seo42_appendToPath($pathname, $kategorie->getValue("name"), $kategorie->getId(), $REX['CUR_CLANG']);
                 }
             }
             // Art der Startkachel
             $pathname = seo42_appendToPath($pathname, $REX['ADDON']['d2u_kurse']['settings']['termin_titel'], $REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'], $REX['CUR_CLANG']);
             // Die Elternkategorie
             if ($this->eltern_terminkategorie !== FALSE) {
                 $pathname = seo42_appendToPath($pathname, $this->eltern_terminkategorie->name, $REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'], $REX['CUR_CLANG']);
             }
             // Die Terminkategorie
             $pathname = seo42_appendToPath($pathname, $this->name, $REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'], $REX['CUR_CLANG']);
             $pathname = substr($pathname, 0, -1) . $REX['ADDON']['seo42']['settings']['url_ending'];
         } else {
             // Ohne SEO42
             $parameterArray = array();
             $parameterArray['terminkategorie_id'] = $this->terminkategorie_id;
             $pathname = rex_getUrl($REX['ADDON']['d2u_kurse']['settings']['kurse_artikel'], $REX['CUR_CLANG'], $parameterArray, "&");
         }
         $this->url = $pathname;
     }
     if ($path_only) {
         return $this->url;
     } else {
         return $REX['SERVER'] . $this->url;
     }
 }
/**
 * Castet die Variable $var zum Typ $vartype
 * 
 * Mögliche PHP-Typen sind:
 *  - bool (auch boolean)
 *  - int (auch integer)
 *  - double
 *  - string
 *  - float
 *  - real
 *  - object
 *  - array
 *  - '' (nicht casten)
 *  
 * Mögliche REDAXO-Typen sind:
 *  - rex-article-id
 *  - rex-category-id
 *  - rex-clang-id
 *  - rex-template-id
 *  - rex-ctype-id
 *  - rex-slice-id
 *  - rex-module-id
 *  - rex-action-id
 *  - rex-media-id
 *  - rex-mediacategory-id
 *  - rex-user-id
 * 
 * @access private
 */
function _rex_cast_var($var, $vartype, $default, $mode)
{
    global $REX;
    if (!is_string($vartype)) {
        trigger_error('String expected for $vartype in _rex_cast_var()!', E_USER_ERROR);
        exit;
    }
    switch ($vartype) {
        // ---------------- REDAXO types
        case 'rex-article-id':
            $var = (int) $var;
            if ($mode == 'found') {
                if (!OOArticle::isValid(OOArticle::getArticleById($var))) {
                    $var = (int) $default;
                }
            }
            break;
        case 'rex-category-id':
            $var = (int) $var;
            if ($mode == 'found') {
                if (!OOCategory::isValid(OOCategory::getCategoryById($var))) {
                    $var = (int) $default;
                }
            }
            break;
        case 'rex-clang-id':
            $var = (int) $var;
            if ($mode == 'found') {
                if (empty($REX['CLANG'][$var])) {
                    $var = (int) $default;
                }
            }
            break;
        case 'rex-template-id':
        case 'rex-ctype-id':
        case 'rex-slice-id':
        case 'rex-module-id':
        case 'rex-action-id':
        case 'rex-media-id':
        case 'rex-mediacategory-id':
        case 'rex-user-id':
            // erstmal keine weitere validierung
            $var = (int) $var;
            break;
            // ---------------- PHP types
        // ---------------- PHP types
        case 'bool':
        case 'boolean':
            $var = (bool) $var;
            break;
        case 'int':
        case 'integer':
            $var = (int) $var;
            break;
        case 'double':
            $var = (double) $var;
            break;
        case 'float':
        case 'real':
            $var = (double) $var;
            break;
        case 'string':
            $var = (string) $var;
            break;
        case 'object':
            $var = (object) $var;
            break;
        case 'array':
            if (empty($var)) {
                $var = array();
            } else {
                $var = (array) $var;
            }
            break;
            // kein Cast, nichts tun
        // kein Cast, nichts tun
        case '':
            break;
            // Evtl Typo im vartype, deshalb hier fehlermeldung!
        // Evtl Typo im vartype, deshalb hier fehlermeldung!
        default:
            trigger_error('Unexpected vartype "' . $vartype . '" in _rex_cast_var()!', E_USER_ERROR);
            exit;
    }
    return $var;
}
 function getCategory()
 {
     return OOCategory::getCategoryById($this->getCategoryId(), $this->getClang());
 }
 function getParent()
 {
     return $this->_re_category_id > 0 ? OOCategory::getCategoryById($this->_re_category_id) : null;
 }
 function &_getCategoryObject($category, $clang = false)
 {
     if (is_object($category)) {
         return $category;
     } elseif (is_int($category)) {
         return OOCategory::getCategoryById($category, $clang);
     } elseif (is_array($category)) {
         $catlist = array();
         foreach ($category as $cat) {
             $catobj = OOCategory::_getCategoryObject($cat, $clang);
             if (is_object($catobj)) {
                 $catlist[] = $catobj;
             } else {
                 return null;
             }
         }
         return $catlist;
     }
     return null;
 }
 /**
  * Gibt die URL dieses Stellenangebots zurück.
  * @param int clang_id SprachID aus Redaxo
  * @return string URL für dieses Stellenangebot.
  */
 public function getURL($clang_id = -1)
 {
     if ($clang_id == -1) {
         $clang_id = $this->clang_id;
     }
     if ($this->url != "") {
         return $this->url;
     } else {
         global $REX;
         $url = $REX['SERVER'];
         $pathname = '';
         if ($REX['MOD_REWRITE'] == true && OOAddon::isActivated('seo42')) {
             // Mit SEO42
             require_once dirname(__FILE__) . "/../../seo42/classes/class.seo42_rewrite.inc.php";
             if (count($REX['CLANG']) > 1 && $clang_id != $REX['ADDON']['seo42']['settings']['hide_langslug']) {
                 // Sprachkuerzel
                 $pathname = seo42_appendToPath($pathname, $REX['ADDON']['seo42']['settings']['lang'][$clang_id]['code'], $REX['START_ARTICLE_ID'], $clang_id);
             }
             // Dann Redaxo Artikelfolge
             if ($this->artikel_id > 0 && $clang_id > -1) {
                 $kategorie = OOCategory::getCategoryById($this->artikel_id, $clang_id);
                 $hauptkategorien = $kategorie->getPathAsArray();
                 for ($i = 0; $i < count($hauptkategorien); $i++) {
                     $hauptkategorie = OOCategory::getCategoryById($hauptkategorien[$i], $clang_id);
                     if ($hauptkategorie instanceof OOCategory) {
                         $pathname = seo42_appendToPath($pathname, $hauptkategorie->getName(), $hauptkategorie->getId(), $clang_id);
                     }
                 }
                 $pathname = seo42_appendToPath($pathname, $kategorie->getName(), $kategorie->getId(), $clang_id);
             }
             // Jetzt die Stelle
             $pathname = seo42_appendToPath($pathname, $this->interne_bezeichnung . "-" . $this->interne_nummer, $this->artikel_id, $clang_id);
             $pathname = substr($pathname, 0, -1) . $REX['ADDON']['seo42']['settings']['url_ending'];
         } else {
             // Ohne SEO42
             $parameterArray = array();
             $parameterArray['stellen_id'] = $this->stellen_id;
             $pathname = rex_getUrl($this->artikel_id, $clang_id, $parameterArray, "&");
         }
         $url .= $pathname;
         return $url;
     }
 }