public function testCopyToExistingDir() { $orig = $this->getPath('orig2'); $copy = $this->getPath('copy2'); // dir1 only in /orig rex_dir::create($orig . '/dir1'); // dir2 only in /copy rex_dir::create($copy . '/dir2'); // file1 only in /orig rex_file::put($orig . '/file1.txt', ''); rex_file::put($orig . '/dir3/file1.txt', ''); // file2 with newest version in /orig rex_file::put($copy . '/file2.txt', 'file2_old'); touch($copy . '/file2.txt', 1); rex_file::put($copy . '/dir3/file2.txt', 'file2_old'); touch($copy . '/dir3/file2.txt', 1); rex_file::put($orig . '/file2.txt', 'file2_new'); rex_file::put($orig . '/dir3/file2.txt', 'file2_new'); $this->assertTrue(rex_dir::copy($orig, $copy), 'copy() returns true on success'); $this->assertTrue(is_dir($copy . '/dir1'), 'subdir of source dir exists in destination dir'); $this->assertTrue(is_dir($copy . '/dir2'), 'existsing subdir of destination dir still exists'); $this->assertTrue(is_file($copy . '/file1.txt'), 'file of source dir exists in destination dir'); $this->assertTrue(is_file($copy . '/dir3/file1.txt'), 'existing file of destination dir still exists'); $this->assertEquals('file2_new', rex_file::get($copy . '/file2.txt'), 'existing file in destination dir will be replaced'); $this->assertEquals('file2_new', rex_file::get($copy . '/dir3/file2.txt'), 'existing file in destination dir will be replaced'); }
private function updateVersion() { $file = rex_path::core('boot.php'); $content = rex_file::get($file); $content = preg_replace('/(?<=^rex::setProperty\\(\'version\', \').*?(?=\')/m', $this->version, $content); rex_file::put($file, $content); }
public function getTemplate() { $file = $this->getFile(); if (!$file) { return false; } return rex_file::get($file); }
/** * Compile a fragment. * * @param string $value */ public function compile($file) { if ($this->isExpired($file)) { $content = rex_file::get($file); if (rex_file::put($this->getCompiledFile($file), $this->compileString($content)) === false) { throw new rex_exception('Unable to generate fragment ' . $file . '!'); } } return $this->getCompiledFile($file); }
/** * @depends testConstruct */ public function testAdd() { $path = $this->getPath('test3.log'); $log = new rex_log_file($path); $log->add(['test1a', 'test1b']); $log->add(['test2a', 'test2b', 'test2c']); $format = <<<'EOF' %i-%i-%i %i:%i:%i | test1a | test1b %i-%i-%i %i:%i:%i | test2a | test2b | test2c EOF; $this->assertStringMatchesFormat($format, rex_file::get($path)); }
echo rex_view::title('yform'); if (rex::getUser()->isAdmin()) { $content = ''; $searchtext = 'module:yform_basic_output'; $gm = rex_sql::factory(); $gm->setQuery('select * from rex_module where output LIKE "%' . $searchtext . '%"'); $module_id = 0; $module_name = ''; foreach ($gm->getArray() as $module) { $module_id = $module['id']; $module_name = $module['name']; } $yform_module_name = 'YForm Formbuilder'; if (rex_request('install', "integer") == 1) { $input = rex_file::get(rex_path::addon('yform', 'module/module_input.inc')); $output = rex_file::get(rex_path::addon('yform', 'module/module_output.inc')); $mi = rex_sql::factory(); // $mi->debugsql = 1; $mi->setTable('rex_module'); $mi->setValue('input', $input); $mi->setValue('output', $output); if ($module_id == rex_request('module_id', 'integer', -1)) { $mi->setWhere('id="' . $module_id . '"'); $mi->update(); echo rex_view::success('Modul "' . $module_name . '" wurde aktualisiert'); } else { $mi->setValue('name', $yform_module_name); $mi->insert(); $module_id = (int) $mi->getLastId(); $module_name = $yform_module_name; echo rex_view::success('yform Modul wurde angelegt unter "' . $yform_module_name . '"');
static function save($name, $success, $message = '', $id = null) { global $REX; $year = date('Y'); $month = date('m'); // in den Log-Dateien festes Datumsformat verwenden // wird bei der Ausgabe entsprechend der lokalen Einstellungen umgewandelt // rex_formatter nicht verwenden, da im Frontend nicht verfuegbar $newline = date('Y-m-d H:i'); if ($success) { $newline .= ' | SUCCESS | '; } else { $newline .= ' | ERROR | '; } if (!$id) { $id = '--'; } else { $id = str_pad($id, 2, ' ', STR_PAD_LEFT); } $newline .= $id . ' | ' . $name; if ($message) { $newline .= ' | ' . str_replace(array("\r\n", "\n"), ' | ', trim(strip_tags($message))); } $dir = REX_CRONJOB_LOG_FOLDER . $year; $content = ''; $file = $dir . '/' . $year . '-' . $month . '.log'; if (file_exists($file)) { $content = rex_file::get($file); } $content = $newline . "\n" . $content; return rex_file::put($file, $content); }
public function testCopyToDir() { $orig = $this->getPath('file.txt'); $copyDir = $this->getPath('copy'); $copyFile = $this->getPath('copy/file.txt'); $content = 'test'; rex_file::put($orig, $content); rex_dir::create($copyDir); $this->assertTrue(rex_file::copy($orig, $copyDir), 'copy() returns true on success'); $this->assertEquals($content, rex_file::get($copyFile), 'content of new file is the same as of original file'); }
<?php $file = rex_file::get(rex_path::addon('focuspoint', 'license.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('class', 'info', false); $fragment->setVar('title', $this->i18n('licence'), false); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
<?php $file = rex_file::get(rex_path::addon('focuspoint', 'readme.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('class', 'info', false); $fragment->setVar('title', $this->i18n('info'), false); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
/** * Loads the translation definitions of the given file. * * @param string $file Path to the file * * @return bool TRUE on success, FALSE on failure */ private static function loadFile($file) { if (($content = rex_file::get($file)) && preg_match_all("/^([^\\s]*)\\s*=\\s*(.*\\S)?\\s*\$/m", $content, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { self::addMsg($match[1], $match[2]); } } }
<?php $func = rex_request('func', 'string'); if ($func == 'import_beispieldaten') { $current_user = rex::getUser()->getId(); $sql = rex_sql::factory(); //$sql->setDebug(); $sql->setQuery('SELECT * FROM rex_user WHERE id = ' . $current_user); $user = $sql->getValue('name'); $qry = "\n\n -- Aufgaben\n\n INSERT IGNORE `rex_aufgaben` VALUES\n (1, 'Fav Icon erstellen', 'Wird immer benötigt',1,1,0,1,now(),now(),'{$user}','{$user}','',''),\n (2, 'Touch Icon erstellen', '',1,1,0,1,now(),now(),'{$user}','{$user}','',''),\n (3, 'Meta Infos erstellen', 'Sind Ortsbezogene meta Infos wichtig?',1,1,0,1,now(),now(),'{$user}','{$user}','',''),\n (4, 'Print.css entwickeln', 'Wird immer vergessen',1,1,0,1,now(),now(),'{$user}','{$user}','',''),\n (5, 'robots.txt prüfen', ':-)',7,1,0,1,now(),now(),'{$user}','{$user}','','');\n\n -- Kategorien\n\n INSERT IGNORE `rex_aufgaben_categories` VALUES\n (1,'Grundlagen','#9EAEC2'),\n (2,'Backend','#588D76'),\n (3,'Design','#8D588A'),\n (4,'Funktion','#9EAEC2'),\n (5,'Fehler','#72A3A7'),\n (6,'Wunsch','#FFD83D'),\n (7,'SEO','#437047');\n\n-- User Settings\n\n INSERT IGNORE `rex_aufgaben_user_settings` VALUES (1,{$current_user},5);\n "; $sql = rex_sql::factory(); // $sql->setDebug(); $sql->setQuery($qry); echo '<div class="alert alert-success">Der Beispieldaten wurden eingefügt.</div>'; $func = ''; } $file = rex_file::get(rex_path::addon('aufgaben', 'README.md')); $Parsedown = new Parsedown(); $content = '<div id="aufgaben">' . $Parsedown->text($file); $content .= ' <hr/> <p><a href="index.php?page=aufgaben/info&func=import_beispieldaten"><i class="rex-icon rex-icon-module"></i> Beispieldaten importieren</a> </p> </div> '; $fragment = new rex_fragment(); $fragment->setVar('title', 'Hilfe'); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
<?php $file = rex_file::get(rex_path::addon('aufgaben', 'CHANGELOG.md')); $Parsedown = new Parsedown(); $content = '<div id="aufgaben">' . $Parsedown->text($file) . '</div>'; $fragment = new rex_fragment(); $fragment->setVar('title', $this->i18n('aufgaben_changelog')); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
<?php $file = rex_file::get(rex_path::addon('out5', 'README.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('title', 'Hilfe'); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php'); $file = rex_file::get(rex_path::addon('out5', 'CHANGELOG.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('title', 'Changelog'); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php'); $file = rex_file::get(rex_path::addon('out5', 'LICENSE.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('title', 'Lizenz'); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
if ($subpage == 'help') { $package = rex_package::get(rex_request('package', 'string')); $name = $package->getPackageId(); $version = $package->getVersion(); $author = $package->getAuthor(); $supportPage = $package->getSupportPage(); if (is_readable($package->getPath('help.php'))) { if (!$package->isAvailable() && is_readable($package->getPath('lang'))) { rex_i18n::addDirectory($package->getPath('lang')); } ob_start(); $package->includeFile('help.php'); $content .= ob_get_clean(); } elseif (is_readable($package->getPath('README.md'))) { $fragment = new rex_fragment(); $fragment->setVar('content', rex_markdown::factory()->parse(rex_file::get($package->getPath('README.md'))), false); $content .= $fragment->parse('core/page/docs.php'); } else { $content .= rex_view::info(rex_i18n::msg('package_no_help_file')); } $fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('package_help') . ' ' . $name, false); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php'); $credits = ''; $credits .= '<dl class="dl-horizontal">'; $credits .= '<dt>' . rex_i18n::msg('credits_name') . '</dt><dd>' . htmlspecialchars($name) . '</dd>'; if ($version) { $credits .= '<dt>' . rex_i18n::msg('credits_version') . '</dt><dd>' . $version . '</dd>'; } if ($author) {
<?php $file = rex_file::get(rex_path::addon('focuspoint', 'changelog.md')); $Parsedown = new Parsedown(); $content = $Parsedown->text($file); $fragment = new rex_fragment(); $fragment->setVar('class', 'info', false); $fragment->setVar('title', $this->i18n('changelog'), false); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
<?php $fragment = new rex_fragment(); $content = ' <p>Folgendes im Template einfügen:</p> '; $content .= rex_string::highlight(rex_file::get(rex_path::addon('focuspoint', 'pages/info_template.inc'))); $content .= ' <p>Bei der Installation wurde ein Effekt beim Media Manager AddOn hinzugefügt. Sollte dieser fehlen, bitte ein reinstall durchführen</p> <p>Diese Ausgabe dient als Beispiel für ein Modul:</p> '; $content .= rex_string::highlight(rex_file::get(rex_path::addon('focuspoint', 'pages/info_modul.inc'))); $fragment = new rex_fragment(); $fragment->setVar('class', 'info', false); $fragment->setVar('title', $this->i18n('help'), false); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php');
$label = rex_i18n::msg('lang'); $langs[$locale] = '<a class="list-group-item" href="' . rex_url::backendPage('setup', ['step' => 2, 'lang' => $locale]) . '">' . $label . '</a>'; } rex_i18n::setLocale($saveLocale, false); echo rex_view::title(rex_i18n::msg('setup_100')); $content = '<div class="list-group">' . implode('', $langs) . '</div>'; $fragment = new rex_fragment(); $fragment->setVar('heading', rex_i18n::msg('setup_101'), false); $fragment->setVar('content', $content, false); echo $fragment->parse('core/page/section.php'); } // ---------------------------------- Step 2 . license if ($step == 2) { rex::setProperty('lang', $lang); $license_file = rex_path::base('LICENSE.md'); $license = '<p>' . nl2br(rex_file::get($license_file)) . '</p>'; $content = rex_i18n::rawMsg('setup_202'); $content .= $license; $buttons = '<a class="btn btn-setup" href="' . rex_url::backendPage('setup', ['step' => 3, 'lang' => $lang]) . '">' . rex_i18n::msg('setup_203') . '</a>'; echo rex_view::title(rex_i18n::msg('setup_200')); $fragment = new rex_fragment(); $fragment->setVar('heading', rex_i18n::msg('setup_201'), false); $fragment->setVar('body', $content, false); $fragment->setVar('buttons', $buttons, false); echo $fragment->parse('core/page/section.php'); } // ---------------------------------- Step 3 . Perms, Environment $error_array = []; $success_array = []; $errors = rex_setup::checkEnvironment(); if (count($errors) > 0) {
<?php /** * This file is part of the Dao Var package. * * @author (c) Thomas Blum <*****@*****.**> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ $content = '<div class="docs"><article>' . markdown(rex_file::get(rex_path::addon('dao_var', 'README.md'))) . '</article></div>'; $content = str_replace(['<pre>', '<code>'], ['<pre class="language-php">', '<code class="language-php">'], $content); $fragment = new \rex_fragment(); //$fragment->setVar('title', $this->i18n('title'), false); $fragment->setVar('body', $content, false); $content = $fragment->parse('core/page/section.php'); echo $content; $vars = [['var' => 'REX_DAO_LINK[]', 'inp' => ['REX_DAO_LINK[id="1" widget="1"]'], 'out' => ['REX_DAO_LINK[id="1"]' => '{"label":"$LABEL$","value":"$URL_ID$","name":"$ARTICLE_NAME$"}', 'REX_DAO_LINK[id="1" output="url"]' => '$URL$', 'REX_DAO_LINK[id="1" output="link"]' => '<a href="$URL$">$LABEL$</a>', 'REX_DAO_LINK[id="1" output="link" class="btn"]' => '<a class="btn" href="$URL$">$LABEL$</a>']], ['var' => 'REX_DAO_SELECT[]', 'inp' => ['REX_DAO_SELECT[id="1" widget="1" options="Please select,H1=h1,H2=h2"]', 'REX_DAO_SELECT[id="1" widget="1" options="Please select|optGroupA:Heading 1=h1,Heading 2=h2|optGroupB:Heading 3=h3,Heading 4=h4"]', 'REX_DAO_SELECT[id="1" widget="1" options="Please select|America:Canada=ca,USA=us|Europe:Germany=de,Danmark=dk" output="form:3:9" label="Country"]', 'REX_DAO_SELECT[id="1" widget="1" options="SELECT name, id FROM rex_article ORDER BY name" output="form:3:9" label="Select an article"]', 'REX_DAO_SELECT[id="1" widget="1" options="German articles:SELECT name, id FROM rex_article WHERE clang_id = 1 ORDER BY name|English articles:SELECT name, id FROM rex_article WHERE clang_id = 2 ORDER BY name" output="form:3:9" label="Select an article"]', 'options ' . "\n" . ' > key=value Pair > Comma "," separated ' . "\n" . ' > optgroups > Pipe "|" separated ' . "\n" . ' > optgroup label > colon ":" separated from the pairs'], 'out' => ['REX_DAO_SELECT[id="1"]']], ['var' => 'REX_DAO_CATEGORY_SELECT[]', 'inp' => ['REX_DAO_CATEGORY_SELECT[id="1" widget="1"]', 'REX_DAO_CATEGORY_SELECT[id="1" widget="1" root="5"]'], 'out' => ['REX_DAO_CATEGORY_SELECT[id="1"]']], ['var' => 'REX_DAO_VALUE[]', 'inp' => ['REX_DAO_VALUE[id="1" widget="1"]', 'REX_DAO_VALUE[id="1" widget="1" type="email"]', 'REX_DAO_VALUE[id="1" widget="1" type="textarea"]'], 'out' => ['REX_DAO_VALUE[id="1"]']]]; $rows = ''; foreach ($vars as $var) { $rows .= '<tr>'; $rows .= '<th><code>' . $var['var'] . '</code></th>'; $rows .= '<td>'; $rows .= '<dl class="dl-horizontal text-left"><dt>Eingabe:</dt>'; foreach ($var['inp'] as $value) { $rows .= '<dd><p><b><code>' . nl2br(htmlspecialchars($value)) . '</code></b></p></dd>'; } $rows .= '</dl>'; $rows .= '<dl class="dl-horizontal text-left"><dt>Ausgabe:</dt>'; foreach ($var['out'] as $key => $value) { if (is_int($key)) {
/** * Erstellt einen SQL Dump, der die aktuellen Datebankstruktur darstellt. * Dieser wird in der Datei $filename gespeichert. * * @param string $filename * @param array $tables * * @return bool TRUE wenn ein Dump erstellt wurde, sonst FALSE */ public static function exportDb($filename, array $tables = null) { $fp = @fopen($filename, 'w'); if (!$fp) { return false; } $sql = rex_sql::factory(); $nl = "\n"; $insertSize = 5000; // ----- EXTENSION POINT rex_extension::registerPoint(new rex_extension_point('BACKUP_BEFORE_DB_EXPORT')); // Versionsstempel hinzufügen fwrite($fp, '## Redaxo Database Dump Version ' . rex::getVersion('%s') . $nl); fwrite($fp, '## Prefix ' . rex::getTablePrefix() . $nl); //fwrite($fp, '## charset '.rex_i18n::msg('htmlcharset').$nl.$nl); fwrite($fp, '## charset utf-8' . $nl . $nl); // fwrite($fp, '/*!40110 START TRANSACTION; */'.$nl); if (is_null($tables)) { $tables = []; foreach (rex_sql::showTables(1, rex::getTablePrefix()) as $table) { if ($table != rex::getTable('user') && substr($table, 0, strlen(rex::getTablePrefix() . rex::getTempPrefix())) != rex::getTablePrefix() . rex::getTempPrefix()) { // 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 . '`;' . $nl); fwrite($fp, $create . ';' . $nl); $fields = $sql->getArray('SHOW FIELDS FROM `' . $table . '`'); foreach ($fields as &$field) { if (preg_match('#^(bigint|int|smallint|mediumint|tinyint|timestamp)#i', $field['Type'])) { $field = 'int'; } elseif (preg_match('#^(float|double|decimal)#', $field['Type'])) { $field = 'double'; } elseif (preg_match('#^(char|varchar|text|longtext|mediumtext|tinytext)#', $field['Type'])) { $field = 'string'; } // else ? } //---- export tabledata $start = 0; $max = $insertSize; do { $array = $sql->getArray('SELECT * FROM `' . $table . '` LIMIT ' . $start . ',' . $max, [], PDO::FETCH_NUM); $count = $sql->getRows(); if ($count > 0 && $start == 0) { fwrite($fp, $nl . 'LOCK TABLES `' . $table . '` WRITE;'); fwrite($fp, $nl . '/*!40000 ALTER TABLE `' . $table . '` DISABLE KEYS */;'); } elseif ($count == 0) { break; } $start += $max; $values = []; foreach ($array as $row) { $record = []; foreach ($fields as $idx => $type) { $column = $row[$idx]; switch ($type) { case 'int': $record[] = intval($column); break; case 'double': $record[] = sprintf('%.10F', (double) $column); break; case 'string': default: $record[] = $sql->escape($column, "'"); break; } } $values[] = $nl . ' (' . implode(',', $record) . ')'; } if (!empty($values)) { fwrite($fp, $nl . 'INSERT INTO `' . $table . '` VALUES ' . implode(',', $values) . ';'); unset($values); } } while ($count >= $max); if ($start > 0) { fwrite($fp, $nl . '/*!40000 ALTER TABLE `' . $table . '` ENABLE KEYS */;'); fwrite($fp, $nl . 'UNLOCK TABLES;' . $nl . $nl); } } fclose($fp); $hasContent = true; // Den Dateiinhalt geben wir nur dann weiter, wenn es unbedingt notwendig ist. if (rex_extension::isRegistered('BACKUP_AFTER_DB_EXPORT')) { $content = rex_file::get($filename); $hashBefore = md5($content); // ----- EXTENSION POINT $content = rex_extension::registerPoint(new rex_extension_point('BACKUP_AFTER_DB_EXPORT', $content)); $hashAfter = md5($content); if ($hashAfter != $hashBefore) { rex_file::put($filename, $content); $hasContent = !empty($content); unset($content); } } return $hasContent; }
public function sendMedia($sourceCacheFilename, $headerCacheFilename, $save = false) { if ($this->asImage) { $src = $this->getImageSource(); } else { $src = rex_file::get($this->getMediapath()); } $this->setHeader('Content-Length', rex_string::size($src)); $header = $this->getHeader(); if (!array_key_exists('Content-Type', $header)) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $content_type = finfo_file($finfo, $this->getMediapath()); if ($content_type != '') { $this->setHeader('Content-Type', $content_type); } } if (!array_key_exists('Content-Disposition', $header)) { $this->setHeader('Content-Disposition', 'inline; filename="' . $this->getMediaFilename() . '";'); } if (!array_key_exists('Last-Modified', $header)) { $this->setHeader('Last-Modified', gmdate('D, d M Y H:i:s T')); } rex_response::cleanOutputBuffers(); foreach ($this->header as $t => $c) { header($t . ': ' . $c); } echo $src; if ($save) { rex_file::putCache($headerCacheFilename, $this->header); rex_file::put($sourceCacheFilename, $src); } }
protected function __readTar($filename = '') { // Set the filename to load if (!$filename) { $filename = $this->filename; } // Read in the TAR file // $fp = fopen($filename,"rb"); // $this->tar_file = fread($fp,filesize($filename)); // fclose($fp); // STM: hier mit get_file_contents ist viel schneller $this->tar_file = rex_file::get($filename); if ($this->tar_file[0] == chr(31) && $this->tar_file[1] == chr(139) && $this->tar_file[2] == chr(8)) { if (!function_exists('gzinflate')) { return false; } $this->isGzipped = true; $this->tar_file = gzinflate(substr($this->tar_file, 10, -4)); } // Parse the TAR file $this->__parseTar(); return true; }
/** * Includes the sub-path of current page. * * @param array $context * * @return mixed */ public static function includeCurrentPageSubPath(array $context = []) { $path = self::getCurrentPageObject()->getSubPath(); if ('.md' !== strtolower(substr($path, -3))) { return self::includePath($path, $context); } $fragment = new rex_fragment(); $fragment->setVar('content', rex_markdown::factory()->parse(rex_file::get($path)), false); $content = $fragment->parse('core/page/docs.php'); $fragment = new rex_fragment(); $fragment->setVar('body', $content, false); echo $fragment->parse('core/page/section.php'); }