diff --git a/install.php b/install.php index 0dccd727..c8af89f8 100644 --- a/install.php +++ b/install.php @@ -66,6 +66,7 @@ define('PATH_UPLOADS_PAGES', PATH_UPLOADS . 'pages' . DS); define('PATH_HELPERS', PATH_KERNEL . 'helpers' . DS); define('PATH_ABSTRACT', PATH_KERNEL . 'abstract' . DS); + // Protecting against Symlink attacks define('CHECK_SYMBOLIC_LINKS', TRUE); define('FILENAME', 'index.txt'); @@ -74,6 +75,7 @@ define('DB_DATE_FORMAT', 'Y-m-d H:i:s'); define('CHARSET', 'UTF-8'); define('DEFAULT_LANGUAGE_FILE', 'en.json'); define('DIR_PERMISSIONS', 0755); +define('EXTREME_FRIENDLY_URL', TRUE); if (!defined('JSON_PRETTY_PRINT')) { define('JSON_PRETTY_PRINT', 128); @@ -111,6 +113,7 @@ if (strpos($_SERVER['REQUEST_URI'], $base) !== 0) { } define('HTML_PATH_ROOT', $base); +define('HTML_PATH_CORE_IMG', HTML_PATH_ROOT.'bl-kernel/img/'); // Set internal character encoding mb_internal_encoding(CHARSET); @@ -126,6 +129,7 @@ include(PATH_HELPERS . 'text.class.php'); include(PATH_HELPERS . 'log.class.php'); include(PATH_HELPERS . 'date.class.php'); include(PATH_KERNEL . 'language.class.php'); +include(PATH_KERNEL.'tag.class.php'); // --- LANGUAGE and LOCALE --- // Try to detect the language from browser or headers @@ -169,6 +173,15 @@ if (empty($iniDate)) { // FUNCTIONS // ============================================================================ +function generateTags($tags) { + $tmp = array(); + foreach ($tags as $tag) { + $tagKey = Text::generateSlug($tag); + $tmp[$tagKey] = $tag; + } + return $tmp; +} + // Returns an array with all languages function getLanguageList() { @@ -260,17 +273,28 @@ function install($adminPassword, $timezone) $currentDate = Date::current(DB_DATE_FORMAT); + // Load the examples pages + if (file_exists(PATH_LANGUAGES.'installer'.DS.$L->currentLanguage().'.php')) { + include(PATH_LANGUAGES.'installer'.DS.$L->currentLanguage().'.php'); + } else { + include(PATH_LANGUAGES.'installer'.DS.'en.php'); + } + // ============================================================================ // Create directories // ============================================================================ - // Directories for initial pages - $pagesToInstall = array('example-page-1-slug', 'example-page-2-slug', 'example-page-3-slug', 'example-page-4-slug'); - foreach ($pagesToInstall as $page) { - if (!mkdir(PATH_PAGES . $L->get($page), DIR_PERMISSIONS, true)) { - $errorText = 'Error when trying to created the directory=>' . PATH_PAGES . $L->get($page); + // Directories for example pages + foreach ($examples as $page) { + if (!mkdir(PATH_PAGES . $page['url'], DIR_PERMISSIONS, true)) { + $errorText = 'Error when trying to created the directory=>' . PATH_PAGES . $page['url']; error_log('[ERROR] ' . $errorText, 0); } + + if (!mkdir(PATH_UPLOADS_PAGES.$page['url'], DIR_PERMISSIONS, true)) { + $errorText = 'Error when trying to created the directory=>' . PATH_UPLOADS_PAGES . $page['url']; + error_log('[ERROR] ' . $errorText, 0); + } } // Directories for initial plugins @@ -300,25 +324,22 @@ function install($adminPassword, $timezone) $data = array(); $slugs = array(); $nextDate = $currentDate; - foreach ($pagesToInstall as $page) { - $slug = $page; - $title = Text::replace('slug', 'title', $slug); - $content = Text::replace('slug', 'content', $slug); + foreach ($examples as $page) { $nextDate = Date::offset($nextDate, DB_DATE_FORMAT, '-1 minute'); - $data[$L->get($slug)] = array( - 'title' => $L->get($title), - 'description' => '', + $data[$page['url']] = array( + 'title' => $page['title'], + 'description' => $page['description'], 'username' => 'admin', - 'tags' => array(), - 'type' => (($slug == 'example-page-4-slug') ? 'static' : 'published'), + 'tags' => generateTags($page['tags']), + 'type' => $page['type'], 'date' => $nextDate, 'dateModified' => '', 'allowComments' => true, - 'position' => 1, + 'position' => $page['position'], 'coverImage' => '', 'md5file' => '', - 'category' => 'general', + 'category' => $page['category'], 'uuid' => md5(uniqid()), 'parent' => '', 'template' => '', @@ -327,9 +348,8 @@ function install($adminPassword, $timezone) 'noarchive' => false ); - array_push($slugs, $slug); - - file_put_contents(PATH_PAGES . $L->get($slug) . DS . FILENAME, $L->get($content), LOCK_EX); + array_push($slugs, $page['url']); + file_put_contents(PATH_PAGES . $page['url'] . DS . FILENAME, $page['content'], LOCK_EX); } file_put_contents(PATH_DATABASES . 'pages.php', $dataHead . json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); @@ -462,8 +482,22 @@ function install($adminPassword, $timezone) file_put_contents(PATH_DATABASES . 'categories.php', $dataHead . json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); // File tags.php - $data = array(); - file_put_contents(PATH_DATABASES . 'tags.php', $dataHead . json_encode($data, JSON_PRETTY_PRINT), LOCK_EX); + $tagsIndex = array(); + foreach ($examples as $page) { + $tags = $page['tags']; + foreach ($tags as $tag) { + $tagKey = Text::generateSlug($tag); + if (isset($tagsIndex[$tagKey])) { + array_push($tagsIndex[$tagKey]['list'], $page['url']); + } else { + $tagsIndex[$tagKey]['name'] = $tag; + $tagsIndex[$tagKey]['list'] = array($page['url']); + } + } + } + #$data = array_values($tagsIndex); + file_put_contents(PATH_DATABASES . 'tags.php', $dataHead . json_encode($tagsIndex, JSON_PRETTY_PRINT), LOCK_EX); + // File plugins/about/db.php file_put_contents( @@ -650,6 +684,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { <div class="container h-100"> <div class="row h-100 justify-content-center align-items-center"> <div class="col-8 col-md-6 col-lg-4"> + <img class="mx-auto d-block w-25 mb-4" alt="logo" src="<?php echo HTML_PATH_CORE_IMG . 'logo.svg' ?>" /> <h1 class="text-center text-uppercase mb-4"><?php echo $L->get('Bludit Installer') ?></h1> <?php $system = checkSystem(); @@ -676,24 +711,24 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { <form id="jsformInstaller" method="post" action="" autocomplete="off"> <input type="hidden" name="timezone" id="jstimezone" value="UTC"> - <div class="form-group"> + <div class="form-group mb-2"> <input type="text" value="admin" class="form-control form-control-lg" id="jsusername" name="username" placeholder="Username" disabled> </div> <div class="form-group mb-0"> <input type="password" class="form-control form-control-lg" id="jspassword" name="password" placeholder="<?php $L->p('Password') ?>"> </div> - <!-- <div id="jsshowPassword" style="cursor: pointer;" class="text-center pt-0 text-muted"><?php $L->p('Show password') ?></div> --> + <div id="jsshowPassword" style="cursor: pointer;" class="text-center pt-0 text-muted"><?php $L->p('Show password') ?></div> <div class="form-group mt-4"> - <button type="submit" class="btn btn-primary btn-lg me-2 w-100" name="install"><?php $L->p('Install') ?></button> + <button type="submit" class="btn btn-secondary btn-lg me-2 w-100" name="install"><?php $L->p('Install') ?></button> </div> </form> <?php } else { ?> <form id="jsformLanguage" method="get" action="" autocomplete="off"> - <label for="jslanguage"><?php echo $L->get('Choose your language') ?></label> + <select id="jslanguage" name="language" class="form-control form-control-lg"> <?php $htmlOptions = getLanguageList(); @@ -704,7 +739,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { </select> <div class="form-group mt-4"> - <button type="submit" class="btn btn-primary btn-lg me-2 w-100"><?php $L->p('Next') ?></button> + <button type="submit" class="btn btn-secondary btn-lg me-2 w-100"><?php $L->p('Next') ?></button> </div> </form> <?php