/**
 * Gibt ein Array mit Namen von Extensions zurück, die am angegebenen Extension Point definiert wurden
 *
 * @param $extensionPoint Name des ExtensionPoints
 */
function rex_get_registered_extensions($extensionPoint)
{
    if (rex_extension_is_registered($extensionPoint)) {
        global $REX;
        return $REX['EXTENSIONS'][$extensionPoint][0];
    }
    return array();
}
/**
 * Menupunkt nur einbinden, falls ein Plugin sich angemeldet hat 
 * via BE_STYLE_PAGE_CONTENT inhalt auszugeben
 *  
 * @param $params Extension-Point Parameter
 */
function rex_be_add_page($params)
{
    if (rex_extension_is_registered('BE_STYLE_PAGE_CONTENT')) {
        global $REX;
        $mypage = 'be_style';
        $REX['ADDON']['name'][$mypage] = 'Backend Style';
    }
}
/**
 * Object Helper Function:
 * Returns a url for linking to this article
 * This url respects the setting for mod_rewrite
 * support!
 *
 * If you pass an associative array for $params,
 * then these parameters will be attached to the URL.
 * 
 * 
 * USAGE:
 *   $param = array("order" => "123", "name" => "horst");
 *   $url = $article->getUrl($param);
 * 
 *   - OR -
 *  
 *   $url = $article->getUrl("order=123&name=horst");
 * 
 * RETURNS:
 *   index.php?article_id=1&order=123&name=horst
 * or if mod_rewrite support is activated:
 *   /1-The_Article_Name?order=123&name=horst
 */
function rex_getUrl($id = '', $clang = '', $params = '')
{
    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 = '';
    if (is_array($params)) {
        foreach ($params as $key => $value) {
            $param_string .= '&' . $key . '=' . $value;
        }
    } elseif ($params != '') {
        $param_string = str_replace('&', '&', $params);
    }
    // ----- get article name
    $id = (int) $id;
    if ($id != 0) {
        $ooa = OOArticle::getArticleById($id, $clang);
        if ($ooa) {
            $name = rex_parseArticleName($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 = 'rexrewrite_apache_rewrite';
        } else {
            $rewrite_fn = 'rexrewrite_no_rewrite';
        }
        $url = call_user_func($rewrite_fn, $id, $name, $clang, $param_string);
    }
    return $url;
}
/**
 * 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. & für HTML, & für Javascript)
 */
function rex_getUrl($_id = '', $_clang = '', $_params = '', $_divider = '&')
{
    global $REX, $article_id;
    $id = (int) $_id;
    $clang = (int) $_clang;
    // ----- get id
    if ($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 ($_clang === '' && (count($REX['CLANG']) > 1 || rex_extension_is_registered('URL_REWRITE'))) {
        $clang = $REX['CUR_CLANG'];
    }
    // ----- get params
    $param_string = rex_param_string($_params, $_divider);
    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, 'divider' => $_divider));
    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, $_divider);
    }
    return $url;
}
 /**
  * Gibt die gerenderte Liste zurück
  * 
  * @param bool [Flag, ob die Standardtoolbars hinzugefügt werden sollen - 
  *             true => ja/ false => nein; default:true]
  * @access public
  */
 function get($addDefaultToolbars = true)
 {
     global $REX;
     $s = '';
     // Default Toolbars hinzufügen
     if ($addDefaultToolbars) {
         $this->addDefaultToolbars();
     }
     $this->prepareToolbars();
     // Benötigte Variablen definieren
     $rows = $this->getCurrentRows();
     $s .= '<!-- rexList start -->' . "\n";
     $s .= '<div class="a22-rexlist">' . "\n";
     $s .= $this->getVar(LIST_VAR_TOP);
     // Platzhalter
     $s .= '  <form action="index.php" method="post">' . "\n";
     $s .= '    <fieldset>' . "\n";
     $label = $this->getLabel();
     if ($label != '') {
         $s .= '      <legend>' . $label . '</legend>' . "\n";
     }
     // Alle Parameter für einen Post als hidden übergeben
     foreach ($this->params as $_name => $_value) {
         if ($_name != '' && $_value != '') {
             $s .= '      <input type="hidden" name="' . $_name . '" value="' . $_value . '" />' . "\n";
         }
     }
     // ------------ Kopfleisten
     $s .= $this->getVar(LIST_VAR_BEFORE_HEAD);
     // Platzhalter
     $s .= '      <div class="a22-rexlist-toolbars-top">' . "\n";
     $s .= $this->_getToolbars($this->toolbars['top']['full']);
     $s .= $this->_getHalfToolbars($this->toolbars['top']['half']);
     $s .= '      </div>' . "\n";
     $s .= $this->getVar(LIST_VAR_AFTER_HEAD);
     // Platzhalter
     // ------------ Datenbereich
     $s .= $this->getVar(LIST_VAR_BEFORE_DATAHEAD);
     // Platzhalter
     $s .= '      <div class="a22-rexlist-data">' . "\n";
     if ($this->numCurrentRows() != 0) {
         // ------------ Tabellenkopf
         $s .= '        <table' . $this->getAttributes() . '>' . "\n";
         $s .= $this->_getColGroup();
         $caption = $this->getCaption();
         if ($caption != '') {
             $s .= '        <caption>' . $caption . '</caption>' . "\n";
         }
         $s .= '          <thead>' . "\n";
         $s .= '            <tr>' . "\n";
         for ($i = 0; $i < $this->numColumns(); $i++) {
             $column =& $this->columns[$i];
             $s .= sprintf('              <th%s>%s</th>' . "\n", $column->getHeadAttributes(), $column->getLabel());
         }
         $s .= '            </tr>' . "\n";
         $s .= '          </thead>' . "\n";
         $s .= $this->getVar(LIST_VAR_AFTER_DATAHEAD);
         // Platzhalter
         // ------------ Tabellendaten
         $s .= $this->getVar(LIST_VAR_BEFORE_DATA);
         // Platzhalter
         if (is_array($rows)) {
             $extension_point = 'REX_LIST_' . strtoupper($this->getName()) . '_ROW_ATTR';
             $extension_is_registered = rex_extension_is_registered($extension_point);
             $s .= '          <tbody>' . "\n";
             for ($t = 0; $t < count($rows); $t++) {
                 $row =& $rows[$t];
                 $rowAttributes = '';
                 if ($extension_is_registered) {
                     $rowAttributes = rex_register_extension_point($extension_point, '', array('row' => $row, 'line_number' => $t));
                 }
                 $s .= '            <tr' . $rowAttributes . '>' . "\n";
                 for ($i = 0; $i < count($this->columns); $i++) {
                     $column =& $this->columns[$i];
                     $s .= '              <td' . $column->getBodyAttributes() . '>' . $column->format($row) . '</td>' . "\n";
                 }
                 $s .= '            </tr>' . "\n";
             }
         }
         $s .= '          </tbody>' . "\n";
         $s .= '        </table>' . "\n";
     } else {
         // keine Daten vorhanden
         $def_message = 'Ihr Abfrage ergab keine Ergebnisse';
         $s .= '        <p class="a22-rexlist-norows">' . $this->getVar(LIST_VAR_NO_DATA, $def_message) . '</p>' . "\n";
         // Platzhalter
     }
     $s .= '      </div>' . "\n";
     $s .= $this->getVar(LIST_VAR_AFTER_DATA);
     // Platzhalter
     // ------------ Fußleisten
     $s .= $this->getVar(LIST_VAR_BEFORE_FOOT);
     // Platzhalter
     $s .= '      <div class="a22-rexlist-toolbars-btm">' . "\n";
     $s .= $this->_getHalfToolbars($this->toolbars['bottom']['half']);
     $s .= $this->_getToolbars($this->toolbars['bottom']['full']);
     $s .= '      </div>' . "\n";
     $s .= $this->getVar(LIST_VAR_AFTER_FOOT);
     // Platzhalter
     $s .= '    </fieldset>' . "\n";
     $s .= '  </form>' . "\n";
     $s .= $this->getVar(LIST_VAR_BOTTOM);
     // Platzhalter
     $s .= '</div>' . "\n";
     $s .= '<!-- rexList end -->' . "\n";
     return $s;
 }
/**
 * Erstellt einen SQL Dump, der die aktuellen Datebankstruktur darstellt.
 * Dieser wird in der Datei $filename gespeichert.
 *
 * @return boolean TRUE wenn ein Dump erstellt wurde, sonst FALSE
 */
function rex_a1_export_db($filename, array $tables = null)
{
    global $REX, $I18N;
    $fp = @fopen($filename, 'w');
    if (!$fp) {
        return false;
    }
    // Im Frontend gibts kein I18N
    if (!is_object($I18N)) {
        $I18N = rex_create_lang($REX['LANG']);
    }
    $sql = rex_sql::factory();
    $nl = "\n";
    $insertSize = 5000;
    // ----- EXTENSION POINT
    rex_register_extension_point('A1_BEFORE_DB_EXPORT');
    // Versionsstempel hinzufügen
    fwrite($fp, '## Redaxo Database Dump Version ' . $REX['VERSION'] . $nl);
    fwrite($fp, '## Prefix ' . $REX['TABLE_PREFIX'] . $nl);
    fwrite($fp, '## charset ' . $I18N->msg('htmlcharset') . $nl . $nl);
    //  fwrite($fp, '/*!40110 START TRANSACTION; */'.$nl);
    if (is_null($tables)) {
        $tables = array();
        foreach (rex_sql::showTables(1, $REX['TABLE_PREFIX']) as $table) {
            if ($table != $REX['TABLE_PREFIX'] . 'user' && substr($table, 0, strlen($REX['TABLE_PREFIX'] . $REX['TEMP_PREFIX'])) != $REX['TABLE_PREFIX'] . $REX['TEMP_PREFIX']) {
                // Tabellen die mit rex_tmp_ beginnne, werden nicht exportiert!
                $tables[] = $table;
            }
        }
    }
    foreach ($tables as $table) {
        //---- export metadata
        $create = rex_sql::showCreateTable($table);
        fwrite($fp, "DROP TABLE IF EXISTS `{$table}`;\n");
        fwrite($fp, "{$create};\n");
        $fields = $sql->getArray("SHOW FIELDS FROM `{$table}`");
        foreach ($fields as $idx => $field) {
            if (preg_match('#^(bigint|int|smallint|mediumint|tinyint|timestamp)#i', $field['Type'])) {
                $fields[$idx] = 'int';
            } elseif (preg_match('#^(float|double|decimal)#', $field['Type'])) {
                $fields[$idx] = 'double';
            } elseif (preg_match('#^(char|varchar|text|longtext|mediumtext|tinytext)#', $field['Type'])) {
                $fields[$idx] = 'string';
            }
            // else ?
        }
        //---- export tabledata
        $start = 0;
        $max = $insertSize;
        do {
            $sql->freeResult();
            $sql->setQuery("SELECT * FROM `{$table}` LIMIT {$start},{$max}");
            if ($sql->getRows() > 0 && $start == 0) {
                fwrite($fp, "\nLOCK TABLES `{$table}` WRITE;");
                fwrite($fp, "\n/*!40000 ALTER TABLE `{$table}` DISABLE KEYS */;");
            } elseif ($sql->getRows() == 0) {
                break;
            }
            $start += $max;
            $values = array();
            while ($sql->hasNext()) {
                $record = array();
                foreach ($fields as $idx => $type) {
                    $column = $sql->getValue($idx);
                    switch ($type) {
                        case 'int':
                            $record[] = intval($column);
                            break;
                        case 'double':
                            $record[] = sprintf('%.10F', (double) $column);
                            break;
                        case 'string':
                        default:
                            $record[] = $sql->escape($column, "'", true);
                            break;
                    }
                }
                $values[] = $nl . '  (' . implode(',', $record) . ')';
                $sql->next();
            }
            if (!empty($values)) {
                $values = implode(',', $values);
                fwrite($fp, "\nINSERT INTO `{$table}` VALUES {$values};");
                unset($values);
            }
        } while ($sql->getRows() >= $max);
        if ($start > 0) {
            fwrite($fp, "\n/*!40000 ALTER TABLE `{$table}` ENABLE KEYS */;");
            fwrite($fp, "\nUNLOCK TABLES;\n\n");
        }
    }
    fclose($fp);
    $hasContent = true;
    // Den Dateiinhalt geben wir nur dann weiter, wenn es unbedingt notwendig ist.
    if (rex_extension_is_registered('A1_AFTER_DB_EXPORT')) {
        $content = rex_get_file_contents($filename);
        $hashBefore = md5($content);
        // ----- EXTENSION POINT
        $content = rex_register_extension_point('A1_AFTER_DB_EXPORT', $content);
        $hashAfter = md5($content);
        if ($hashAfter != $hashBefore) {
            rex_put_file_contents($filename, $content);
            $hasContent = !empty($content);
            unset($content);
        }
    }
    return $hasContent;
}
Example #7
0
 /**
  * get the Image Path
  * @param string|null $imageType imagemanager-type
  * @return string
  */
 public function getImage($imageType = null)
 {
     $sqlCols = rex_asd_news_config::getConfig('sql');
     $pictureCol = $sqlCols['picture'];
     if (rex_extension_is_registered('ASD_NEWS_GETIMAGE')) {
         return rex_register_extension_point('ASD_NEWS_GETIMAGE', $pictureCol);
     }
     $seoSettings = rex_asd_news_config::getSeoSettings();
     // Use SeoMethod
     if (isset($seoSettings['image']) && $seoSettings['image']) {
         if ($imageType != null && isset($seoSettings['image']['manager']) && $seoSettings['image']['manager']) {
             return call_user_func($seoSettings['image']['manager'], $this->getValue($pictureCol), $imageType);
         }
         if (isset($seoSettings['image']['default']) && $seoSettings['image']['default']) {
             return call_user_func($seoSettings['image']['default'], $this->getValue($pictureCol));
         }
     }
     if ($imageType != null) {
         return 'index.php?rex_img_type=' . $imageType . '&amp;rex_img_file=' . $this->getValue($pictureCol);
     }
     return '/files/' . $this->getValue($pictureCol);
 }