Change templates set through administration UI
|
@ -150,6 +150,7 @@ class ApplicationUtils
|
|||
'inc',
|
||||
'plugins',
|
||||
$conf->get('resource.raintpl_tpl'),
|
||||
$conf->get('resource.raintpl_tpl').'/'.$conf->get('resource.theme'),
|
||||
) as $path) {
|
||||
if (! is_readable(realpath($path))) {
|
||||
$errors[] = '"'.$path.'" directory is not readable';
|
||||
|
|
|
@ -79,7 +79,7 @@ class PageBuilder
|
|||
$this->tpl->assign('hide_timestamps', $this->conf->get('privacy.hide_timestamps', false));
|
||||
$this->tpl->assign('token', getToken($this->conf));
|
||||
// To be removed with a proper theme configuration.
|
||||
$this->tpl->assign('conf', $this->conf);
|
||||
$this->tpl->assign('theme', $this->conf->get('resource.theme', 'default'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -270,3 +270,13 @@ function normalize_spaces($string)
|
|||
{
|
||||
return preg_replace('/\s{2,}/', ' ', trim($string));
|
||||
}
|
||||
|
||||
function getAllTheme($raintpl_tpl)
|
||||
{
|
||||
$allTheme = glob($raintpl_tpl.'/*', GLOB_ONLYDIR);
|
||||
foreach ($allTheme as $value) {
|
||||
$themes[] = str_replace($raintpl_tpl.'/', '', $value);
|
||||
}
|
||||
|
||||
return $themes;
|
||||
}
|
||||
|
|
|
@ -299,6 +299,7 @@ class ConfigManager
|
|||
$this->setEmpty('resource.log', 'data/log.txt');
|
||||
$this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt');
|
||||
$this->setEmpty('resource.raintpl_tpl', 'tpl/');
|
||||
$this->setEmpty('resource.theme', 'default');
|
||||
$this->setEmpty('resource.raintpl_tmp', 'tmp/');
|
||||
$this->setEmpty('resource.thumbnails_cache', 'cache');
|
||||
$this->setEmpty('resource.page_cache', 'pagecache');
|
||||
|
|
|
@ -41,6 +41,7 @@ class ConfigPhp implements ConfigIO
|
|||
'resource.log' => 'config.LOG_FILE',
|
||||
'resource.update_check' => 'config.UPDATECHECK_FILENAME',
|
||||
'resource.raintpl_tpl' => 'config.RAINTPL_TPL',
|
||||
'resource.theme' => 'config.theme',
|
||||
'resource.raintpl_tmp' => 'config.RAINTPL_TMP',
|
||||
'resource.thumbnails_cache' => 'config.CACHEDIR',
|
||||
'resource.page_cache' => 'config.PAGECACHE',
|
||||
|
@ -99,7 +100,7 @@ class ConfigPhp implements ConfigIO
|
|||
$configStr .= '$GLOBALS[\'' . $key . '\'] = ' . var_export($conf[$key], true) . ';' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Store all $conf['config']
|
||||
foreach ($conf['config'] as $key => $value) {
|
||||
$configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($conf['config'][$key], true).';'. PHP_EOL;
|
||||
|
|
|
@ -122,7 +122,8 @@ if (isset($_COOKIE['shaarli']) && !is_session_id_valid($_COOKIE['shaarli'])) {
|
|||
$conf = new ConfigManager();
|
||||
$conf->setEmpty('general.timezone', date_default_timezone_get());
|
||||
$conf->setEmpty('general.title', 'Shared links on '. escape(index_url($_SERVER)));
|
||||
RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl'); // template directory
|
||||
$conf->setEmpty('resource.theme', 'default');
|
||||
RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl').'/'.$conf->get('resource.theme').'/'; // template directory
|
||||
RainTPL::$cache_dir = $conf->get('resource.raintpl_tmp'); // cache directory
|
||||
|
||||
$pluginManager = new PluginManager($conf);
|
||||
|
@ -1124,6 +1125,7 @@ function renderPage($conf, $pluginManager, $LINKSDB)
|
|||
$conf->set('general.timezone', $tz);
|
||||
$conf->set('general.title', escape($_POST['title']));
|
||||
$conf->set('general.header_link', escape($_POST['titleLink']));
|
||||
$conf->set('resource.theme', escape($_POST['theme']));
|
||||
$conf->set('redirector.url', escape($_POST['redirector']));
|
||||
$conf->set('security.session_protection_disabled', !empty($_POST['disablesessionprotection']));
|
||||
$conf->set('privacy.default_private_links', !empty($_POST['privateLinkByDefault']));
|
||||
|
@ -1134,6 +1136,7 @@ function renderPage($conf, $pluginManager, $LINKSDB)
|
|||
$conf->set('api.secret', escape($_POST['apiSecret']));
|
||||
try {
|
||||
$conf->write(isLoggedIn());
|
||||
invalidateCaches($conf->get('resource.page_cache'));
|
||||
}
|
||||
catch(Exception $e) {
|
||||
error_log(
|
||||
|
@ -1151,6 +1154,8 @@ function renderPage($conf, $pluginManager, $LINKSDB)
|
|||
else // Show the configuration form.
|
||||
{
|
||||
$PAGE->assign('title', $conf->get('general.title'));
|
||||
$PAGE->assign('theme', $conf->get('resource.theme'));
|
||||
$PAGE->assign('theme_available', getAllTheme($conf->get('resource.raintpl_tpl')));
|
||||
$PAGE->assign('redirector', $conf->get('redirector.url'));
|
||||
list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone'));
|
||||
$PAGE->assign('timezone_form', $timezone_form);
|
||||
|
|
|
@ -289,6 +289,7 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase
|
|||
$conf->set('resource.page_cache', 'pagecache');
|
||||
$conf->set('resource.raintpl_tmp', 'tmp');
|
||||
$conf->set('resource.raintpl_tpl', 'tpl');
|
||||
$conf->set('resource.theme', 'default');
|
||||
$conf->set('resource.update_check', 'data/lastupdatecheck.txt');
|
||||
|
||||
$this->assertEquals(
|
||||
|
@ -312,10 +313,12 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase
|
|||
$conf->set('resource.page_cache', 'null/pagecache');
|
||||
$conf->set('resource.raintpl_tmp', 'null/tmp');
|
||||
$conf->set('resource.raintpl_tpl', 'null/tpl');
|
||||
$conf->set('resource.raintpl_theme', 'null/tpl/default');
|
||||
$conf->set('resource.update_check', 'null/data/lastupdatecheck.txt');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'"null/tpl" directory is not readable',
|
||||
'"null/tpl/default" directory is not readable',
|
||||
'"null/cache" directory is not readable',
|
||||
'"null/cache" directory is not writable',
|
||||
'"null/data" directory is not readable',
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>{include="includes"}
|
||||
<link type="text/css" rel="stylesheet" href="../inc/awesomplete.css" />
|
||||
<link type="text/css" rel="stylesheet" href="inc/awesomplete.css#" />
|
||||
<script src="inc/awesomplete.min.js#"></script>
|
||||
</head>
|
||||
<body onload="document.changetag.fromtag.focus();">
|
|
@ -19,6 +19,23 @@
|
|||
<td><input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}"><br/><label
|
||||
for="titleLink">(default value is: ?)</label></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><b>Theme:</b></td>
|
||||
<td>
|
||||
<select name="theme" id="theme">
|
||||
{loop="$theme_available"}
|
||||
{if="$value===$theme"}
|
||||
<option selected value="{$value}">{$value|ucfirst}</option>
|
||||
{else}
|
||||
<option value="{$value}">{$value|ucfirst}</option>
|
||||
{/if}
|
||||
{/loop}
|
||||
</select>
|
||||
<label for="theme">(default value is: Default)</label>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><b>Timezone:</b></td>
|
||||
<td>{$timezone_form}</td>
|
|
@ -28,9 +28,9 @@
|
|||
</div>
|
||||
|
||||
<div class="dailyTitle">
|
||||
<img src="../images/floral_left.png" width="51" height="50" class="nomobile" alt="floral_left">
|
||||
<img src="../../images/floral_left.png" width="51" height="50" class="nomobile" alt="floral_left">
|
||||
The Daily Shaarli
|
||||
<img src="../images/floral_right.png" width="51" height="50" class="nomobile" alt="floral_right">
|
||||
<img src="../../images/floral_right.png" width="51" height="50" class="nomobile" alt="floral_right">
|
||||
</div>
|
||||
|
||||
<div class="dailyDate">
|
||||
|
@ -50,7 +50,7 @@
|
|||
<div class="dailyEntry">
|
||||
<div class="dailyEntryPermalink">
|
||||
<a href="?{$value.shorturl}">
|
||||
<img src="../images/squiggle2.png" width="25" height="26" title="permalink" alt="permalink">
|
||||
<img src="../../images/squiggle2.png" width="25" height="26" title="permalink" alt="permalink">
|
||||
</a>
|
||||
</div>
|
||||
{if="!$hide_timestamps || isLoggedIn()"}
|
||||
|
@ -94,7 +94,7 @@
|
|||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
<div id="closing"><img src="../images/squiggle_closing.png" width="66" height="61" alt="-"></div>
|
||||
<div id="closing"><img src="../../images/squiggle_closing.png" width="66" height="61" alt="-"></div>
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
</body>
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>{include="includes"}
|
||||
<link type="text/css" rel="stylesheet" href="../inc/awesomplete.css" />
|
||||
<link type="text/css" rel="stylesheet" href="inc/awesomplete.css#" />
|
||||
</head>
|
||||
<body
|
||||
{if="$link.title==''"}onload="document.linkform.lf_title.focus();"
|
Before Width: | Height: | Size: 599 B After Width: | Height: | Size: 599 B |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 650 B After Width: | Height: | Size: 650 B |
Before Width: | Height: | Size: 813 B After Width: | Height: | Size: 813 B |
Before Width: | Height: | Size: 714 B After Width: | Height: | Size: 714 B |
|
@ -103,7 +103,7 @@ strong {
|
|||
}
|
||||
|
||||
#pageheader #logo {
|
||||
background-image: url('../images/logo.png');
|
||||
background-image: url('../../../images/logo.png');
|
||||
background-repeat: no-repeat;
|
||||
float: left;
|
||||
margin: 0 10px 0 10px;
|
|
@ -6,9 +6,9 @@
|
|||
<link rel="alternate" type="application/rss+xml" href="{$feedurl}?do=rss{$searchcrits}#" title="RSS Feed" />
|
||||
<link rel="alternate" type="application/atom+xml" href="{$feedurl}?do=atom{$searchcrits}#" title="ATOM Feed" />
|
||||
<link href="images/favicon.ico#" rel="shortcut icon" type="image/x-icon" />
|
||||
<link type="text/css" rel="stylesheet" href="../inc/reset.css" />
|
||||
<link type="text/css" rel="stylesheet" href="../inc/shaarli.css" />
|
||||
{if="is_file('inc/user.css')"}<link type="text/css" rel="stylesheet" href="../inc/user.css" />{/if}
|
||||
<link type="text/css" rel="stylesheet" href="inc/reset.css" />
|
||||
<link type="text/css" rel="stylesheet" href="inc/shaarli.css" />
|
||||
{if="is_file('inc/user.css')"}<link type="text/css" rel="stylesheet" href="inc/user.css#" />{/if}
|
||||
{loop="$plugins_includes.css_files"}
|
||||
<link type="text/css" rel="stylesheet" href="{$value}#"/>
|
||||
{/loop}
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link type="text/css" rel="stylesheet" href="../inc/awesomplete.css" />
|
||||
<link type="text/css" rel="stylesheet" href="inc/awesomplete.css#" />
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|