/** * 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; }
/** * 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 . '&rex_img_file=' . $this->getValue($pictureCol); } return '/files/' . $this->getValue($pictureCol); }