예제 #1
0
/**
 * Gibt eine Url zu einem Artikel zurück.
 *
 * @param string       $_id
 * @param int|string   $_clang  SprachId des Artikels
 * @param array|string $_params Array von Parametern
 * @param bool         $escape  Flag whether the argument separator "&" should be escaped (&)
 *
 * @return string
 *
 * @package redaxo\structure
 */
function rex_getUrl($_id = '', $_clang = '', $_params = '', $escape = true)
{
    $id = (int) $_id;
    $clang = (int) $_clang;
    // ----- get id
    if ($id == 0) {
        $id = rex::getProperty('article_id');
    }
    // ----- get clang
    // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben!
    // Die rexExtension muss selbst entscheiden was sie damit macht
    if ($_clang === '' && (rex_clang::count() > 1 || rex_extension::isRegistered('URL_REWRITE'))) {
        $clang = rex_clang::getCurrentId();
    }
    // ----- get params
    $param_string = rex_param_string($_params, $escape ? '&' : '&');
    $name = 'NoName';
    if ($id != 0) {
        $ooa = rex_article::get($id, $clang);
        if ($ooa) {
            $name = rex_parse_article_name($ooa->getName());
        }
    }
    // ----- EXTENSION POINT
    $url = rex_extension::registerPoint(new rex_extension_point('URL_REWRITE', '', ['id' => $id, 'name' => $name, 'clang' => $clang, 'params' => $param_string, 'escape' => $escape]));
    if ($url == '') {
        $_clang = '';
        if (rex_clang::count() > 1) {
            $_clang .= ($escape ? '&' : '&') . 'clang=' . $clang;
        }
        $url = rex_url::frontendController() . '?article_id=' . $id . $_clang . $param_string;
    }
    return $url;
}
 function a724_generatePathnamesFromTable($params)
 {
     $debug = false;
     $sql = new rex_sql();
     $results = $sql->getArray('SELECT article_id, url_table, url_table_parameters FROM rex_a724_frau_schultze WHERE url_table != "" AND url_table_parameters != ""');
     $URLPATH = array();
     if ($sql->getRows() >= 1) {
         a724_deletePathnamesFromTable();
         foreach ($results as $result) {
             if (is_array($result) && count($result) > 0) {
                 $path = rex_getUrl($result['article_id']) . '/';
                 $path = str_replace('.html', '', $path);
                 $table = $result['url_table'];
                 $params = unserialize($result['url_table_parameters']);
                 $col_name = $params[$table][$table . "_name"];
                 $col_id = $params[$table][$table . "_id"];
                 // Daten zum Aufbau der Urls holen
                 $sqlu = new rex_sql();
                 $sqlu->setDebug($debug);
                 $res = $sqlu->getArray('SELECT ' . $col_name . ' AS name, ' . $col_id . ' AS id FROM ' . $table);
                 if ($sqlu->getRows() >= 1) {
                     // Urls in die Datenbank schreiben
                     $sqli = new rex_sql();
                     $sqli->setDebug($debug);
                     foreach ($res as $re) {
                         $table_path = $path . strtolower(rex_parse_article_name($re['name'])) . '.html';
                         $table_id = $re['id'];
                         $URLPATH[$result['url_table']][$table_id] = $table_path;
                         $sqli->setTable('rex_a724_frau_schultze');
                         $sqli->setValue('article_id', $result['article_id']);
                         $sqli->setValue('status', '1');
                         $sqli->setValue('url_table', $result['url_table']);
                         $sqli->setValue('name', $table_path);
                         $sqli->insert();
                     }
                 }
             }
         }
     }
     rex_put_file_contents(A724_URL_TABLE_PATHLIST, "<?php\n\$URLPATH = " . var_export($URLPATH, true) . ";\n");
 }
/**
 * Gibt eine Url zu einem Artikel zurück
 *
 * @param [$id] ArtikelId des Artikels
 * @param [$clang] SprachId des Artikels
 * @param [$params] Array von Parametern
 * @param [$divider] Trennzeichen für Parameter
 * (z.B. &amp; für HTML, & für Javascript)
 */
function rex_getUrl($id = '', $clang = '', $params = '', $divider = '&amp;')
{
    global $REX, $article_id;
    $id = (int) $id;
    $clang = (int) $clang;
    // ----- get id
    if (strlen($id) == 0 || $id == 0) {
        $id = $article_id;
    }
    // ----- get clang
    // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben!
    // Die rexExtension muss selbst entscheiden was sie damit macht
    if (strlen($clang) == 0 && (count($REX['CLANG']) > 1 || rex_extension_is_registered('URL_REWRITE'))) {
        $clang = $REX['CUR_CLANG'];
    }
    // ----- get params
    $param_string = rex_param_string($params, $divider);
    // ----- get article name
    $id = (int) $id;
    if ($id != 0) {
        $ooa = OOArticle::getArticleById($id, $clang);
        if ($ooa) {
            $name = rex_parse_article_name($ooa->getName());
        }
    }
    if (!isset($name) or $name == '') {
        $name = 'NoName';
    }
    // ----- EXTENSION POINT
    $url = rex_register_extension_point('URL_REWRITE', '', array('id' => $id, 'name' => $name, 'clang' => $clang, 'params' => $param_string));
    if ($url == '') {
        // ----- get rewrite function
        if ($REX['MOD_REWRITE'] === true || $REX['MOD_REWRITE'] == 'true') {
            $rewrite_fn = 'rex_apache_rewrite';
        } else {
            $rewrite_fn = 'rex_no_rewrite';
        }
        $url = call_user_func($rewrite_fn, $id, $name, $clang, $param_string);
    }
    return $url;
}
function rex_parseArticleName($name)
{
    return rex_parse_article_name($name);
}
function rex_rewriter_appendToPath($path, $name)
{
    if ($name != '') {
        $name = strtolower(rex_parse_article_name($name));
        $path .= $name . '/';
    }
    return $path;
}
 /**
  * Erzeugt die Domains
  *
  */
 public static function generatePathFile($params)
 {
     global $REX;
     $myself = 'url_control';
     $addon = $REX['ADDON'][$myself]['addon'];
     $rewriter = $REX['ADDON'][$myself]['rewriter'];
     $query = '  SELECT  `article_id`,
                         `clang`,
                         `table`,
                         `table_parameters`
                 FROM    ' . $REX['TABLE_PREFIX'] . 'url_control_generate
                 ';
     $sql = rex_sql::factory();
     $sql->setQuery($query);
     $paths = array();
     if ($sql->getRows() >= 1) {
         $results = $sql->getArray();
         foreach ($results as $result) {
             $article_id = $result['article_id'];
             $clang = $result['clang'];
             $a = OOArticle::getArticleById($article_id, $clang);
             if ($a instanceof OOArticle) {
                 if (isset($rewriter[$addon]['get_url'])) {
                     $func = $rewriter[$addon]['get_url'];
                     $path = call_user_func($func, $article_id, $clang);
                 } else {
                     $path = $a->getUrl();
                 }
                 $path = parent::getCleanPath($path);
                 $table = $result['table'];
                 $table_params = unserialize($result['table_parameters']);
                 $name = $table_params[$table][$table . '_name'];
                 $name_2 = $table_params[$table][$table . '_name_2'];
                 $id = $table_params[$table][$table . '_id'];
                 $restriction_field = $table_params[$table][$table . '_restriction_field'];
                 $restriction_operator = $table_params[$table][$table . '_restriction_operator'];
                 $restriction_value = $table_params[$table][$table . '_restriction_value'];
                 $qyery_where = '';
                 if ($restriction_field != '' && $restriction_value != '' && in_array($restriction_operator, self::getRestrictionOperators())) {
                     switch ($restriction_operator) {
                         case 'IN (...)':
                         case 'NOT IN (...)':
                             $restriction_operator = str_replace(' (...)', '', $restriction_operator);
                             $values = explode(',', $restriction_value);
                             foreach ($values as $key => $value) {
                                 if (!(int) $value > 0) {
                                     unset($values[$key]);
                                 }
                             }
                             $restriction_value = ' (' . implode(',', $values) . ') ';
                             break;
                         case 'BETWEEN':
                         case 'NOT BETWEEN':
                             $values = explode(',', $restriction_value);
                             if (count($values) == 2) {
                                 $restriction_value = $values[0] . ' AND ' . $values[1];
                             }
                             break;
                         default:
                             $restriction_value = '"' . mysql_real_escape_string($restriction_value) . '"';
                             break;
                     }
                     $qyery_where = ' WHERE ' . $restriction_field . ' ' . $restriction_operator . ' ' . $restriction_value . '';
                 }
                 $query_select = $name_2 != '' ? ', ' . $name_2 . ' AS name_2' : '';
                 $query = '  SELECT  ' . $name . '   AS name,
                                     ' . $id . '     AS id
                                     ' . $query_select . '
                             FROM    ' . $table . '
                             ' . $qyery_where . '
                             ';
                 $s = rex_sql::factory();
                 $s->setQuery($query);
                 if ($s->getRows() >= 1) {
                     $urls = $s->getArray();
                     $save_names = array();
                     foreach ($urls as $url) {
                         if (isset($url['name_2']) && $url['name_2'] != '') {
                             $url['name'] = $url['name'] . ' ' . $url['name_2'];
                         }
                         if (isset($save_names[$url['name']])) {
                             $url['name'] = $url['name'] . '-' . $url['id'];
                         }
                         $paths[$table][$article_id][$clang][$url['id']] = $path . strtolower(rex_parse_article_name($url['name'])) . '.html';
                         $save_names[$url['name']] = '';
                     }
                 }
             }
         }
     }
     rex_put_file_contents(self::$path_file, json_encode($paths));
 }
function rex_rewriter_generate_pathnames($params = array())
{
    global $REX;
    $db = new rex_sql();
    $result = $db->getArray('SELECT id,name,clang,path FROM rex_article');
    if (is_array($result)) {
        foreach ($result as $var) {
            $article_names[$var['id']][$var['clang']]['name'] = rex_parse_article_name($var['name']);
        }
    }
    $fcontent = '<?php' . "\n";
    if (is_array($result)) {
        foreach ($result as $var) {
            $clang = $var['clang'];
            if (count($REX['CLANG']) > 1) {
                $pathname = $REX['CLANG'][$clang] . '/';
            } else {
                $pathname = '';
            }
            $path = explode('|', $var['path']);
            $path[] = $var['id'];
            foreach ($path as $p) {
                if ($p != '') {
                    $curname = $article_names[$p][$clang]['name'];
                    if ($curname != '') {
                        $pathname .= $curname . '/';
                    }
                }
            }
            $fcontent .= '$REXPATH[\'' . $var['id'] . '\'][\'' . $var['clang'] . '\'] = "' . mysql_escape_string($pathname) . '";' . "\n";
        }
    }
    $fcontent .= '?>';
    $handle = fopen($REX['INCLUDE_PATH'] . '/generated/files/pathlist.php', 'w');
    fwrite($handle, $fcontent);
    fclose($handle);
}