Compare commits
5 commits
myShaarli_
...
theme_mana
Author | SHA1 | Date | |
---|---|---|---|
0f473eedfc | |||
a197ef5e02 | |||
81b9c01366 | |||
057fb6839c | |||
d33763a409 |
37 changed files with 59 additions and 23 deletions
|
@ -150,6 +150,7 @@ public static function checkResourcePermissions($conf)
|
||||||
'inc',
|
'inc',
|
||||||
'plugins',
|
'plugins',
|
||||||
$conf->get('resource.raintpl_tpl'),
|
$conf->get('resource.raintpl_tpl'),
|
||||||
|
$conf->get('resource.raintpl_tpl').'/'.$conf->get('resource.theme'),
|
||||||
) as $path) {
|
) as $path) {
|
||||||
if (! is_readable(realpath($path))) {
|
if (! is_readable(realpath($path))) {
|
||||||
$errors[] = '"'.$path.'" directory is not readable';
|
$errors[] = '"'.$path.'" directory is not readable';
|
||||||
|
|
|
@ -79,7 +79,7 @@ private function initialize()
|
||||||
$this->tpl->assign('hide_timestamps', $this->conf->get('privacy.hide_timestamps', false));
|
$this->tpl->assign('hide_timestamps', $this->conf->get('privacy.hide_timestamps', false));
|
||||||
$this->tpl->assign('token', getToken($this->conf));
|
$this->tpl->assign('token', getToken($this->conf));
|
||||||
// To be removed with a proper theme configuration.
|
// To be removed with a proper theme configuration.
|
||||||
$this->tpl->assign('conf', $this->conf);
|
$this->tpl->assign('conf', $this->conf->get('resource.theme', 'default'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -227,3 +227,13 @@ function autoLocale($headerLocale)
|
||||||
}
|
}
|
||||||
setlocale(LC_ALL, $attempts);
|
setlocale(LC_ALL, $attempts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getAllTheme()
|
||||||
|
{
|
||||||
|
$allTheme = glob('tpl/*', GLOB_ONLYDIR);
|
||||||
|
foreach ($allTheme as $value) {
|
||||||
|
$themes[] = str_replace('tpl/', '', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $themes;
|
||||||
|
}
|
||||||
|
|
|
@ -297,6 +297,7 @@ protected function setDefaultValues()
|
||||||
$this->setEmpty('resource.log', 'data/log.txt');
|
$this->setEmpty('resource.log', 'data/log.txt');
|
||||||
$this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt');
|
$this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt');
|
||||||
$this->setEmpty('resource.raintpl_tpl', 'tpl/');
|
$this->setEmpty('resource.raintpl_tpl', 'tpl/');
|
||||||
|
$this->setEmpty('resource.theme', 'default');
|
||||||
$this->setEmpty('resource.raintpl_tmp', 'tmp/');
|
$this->setEmpty('resource.raintpl_tmp', 'tmp/');
|
||||||
$this->setEmpty('resource.thumbnails_cache', 'cache');
|
$this->setEmpty('resource.thumbnails_cache', 'cache');
|
||||||
$this->setEmpty('resource.page_cache', 'pagecache');
|
$this->setEmpty('resource.page_cache', 'pagecache');
|
||||||
|
|
|
@ -41,6 +41,7 @@ class ConfigPhp implements ConfigIO
|
||||||
'resource.log' => 'config.LOG_FILE',
|
'resource.log' => 'config.LOG_FILE',
|
||||||
'resource.update_check' => 'config.UPDATECHECK_FILENAME',
|
'resource.update_check' => 'config.UPDATECHECK_FILENAME',
|
||||||
'resource.raintpl_tpl' => 'config.RAINTPL_TPL',
|
'resource.raintpl_tpl' => 'config.RAINTPL_TPL',
|
||||||
|
'resource.theme' => 'config.theme',
|
||||||
'resource.raintpl_tmp' => 'config.RAINTPL_TMP',
|
'resource.raintpl_tmp' => 'config.RAINTPL_TMP',
|
||||||
'resource.thumbnails_cache' => 'config.CACHEDIR',
|
'resource.thumbnails_cache' => 'config.CACHEDIR',
|
||||||
'resource.page_cache' => 'config.PAGECACHE',
|
'resource.page_cache' => 'config.PAGECACHE',
|
||||||
|
@ -99,7 +100,7 @@ function write($filepath, $conf)
|
||||||
$configStr .= '$GLOBALS[\'' . $key . '\'] = ' . var_export($conf[$key], true) . ';' . PHP_EOL;
|
$configStr .= '$GLOBALS[\'' . $key . '\'] = ' . var_export($conf[$key], true) . ';' . PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store all $conf['config']
|
// Store all $conf['config']
|
||||||
foreach ($conf['config'] as $key => $value) {
|
foreach ($conf['config'] as $key => $value) {
|
||||||
$configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($conf['config'][$key], true).';'. PHP_EOL;
|
$configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($conf['config'][$key], true).';'. PHP_EOL;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
## Foreword
|
## Foreword
|
||||||
|
|
||||||
**Do not edit configuration options in index.php! Your changes would be lost.**
|
**Do not edit configuration options in index.php! Your changes would be lost.**
|
||||||
|
|
||||||
Once your Shaarli instance is installed, the file `data/config.json.php` is generated:
|
Once your Shaarli instance is installed, the file `data/config.json.php` is generated:
|
||||||
* it contains all settings in JSON format, and can be edited to customize values
|
* it contains all settings in JSON format, and can be edited to customize values
|
||||||
|
@ -42,7 +42,7 @@ In `data/config.json.php`.
|
||||||
See also [Plugin System](Plugin-System.html).[](.html)
|
See also [Plugin System](Plugin-System.html).[](.html)
|
||||||
|
|
||||||
### Credentials
|
### Credentials
|
||||||
|
|
||||||
> You shouldn't edit those.
|
> You shouldn't edit those.
|
||||||
|
|
||||||
**login**: Login username.
|
**login**: Login username.
|
||||||
|
@ -59,12 +59,12 @@ See also [Plugin System](Plugin-System.html).[](.html)
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
||||||
**session_protection_disabled**: Disable session cookie hijacking protection (not recommended).
|
**session_protection_disabled**: Disable session cookie hijacking protection (not recommended).
|
||||||
It might be useful if your IP adress often changes.
|
It might be useful if your IP adress often changes.
|
||||||
**ban_after**: Failed login attempts before being IP banned.
|
**ban_after**: Failed login attempts before being IP banned.
|
||||||
**ban_duration**: IP ban duration in seconds.
|
**ban_duration**: IP ban duration in seconds.
|
||||||
**open_shaarli**: Anyone can add a new link while logged out if enabled.
|
**open_shaarli**: Anyone can add a new link while logged out if enabled.
|
||||||
**trusted_proxies**: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy.
|
**trusted_proxies**: List of trusted IP which won't be banned after failed login attemps. Useful if Shaarli is behind a reverse proxy.
|
||||||
|
|
||||||
### Resources
|
### Resources
|
||||||
|
|
||||||
|
@ -205,7 +205,6 @@ It might be useful if your IP adress often changes.
|
||||||
|
|
||||||
## Additional configuration
|
## Additional configuration
|
||||||
|
|
||||||
The playvideos plugin may require that you adapt your server's
|
The playvideos plugin may require that you adapt your server's
|
||||||
[Content Security Policy](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting) [](.html)
|
[Content Security Policy](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md#troubleshooting) [](.html)
|
||||||
configuration to work properly.[(.html)]((.html).html)
|
configuration to work properly.[(.html)]((.html).html)
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,8 @@
|
||||||
$conf = new ConfigManager();
|
$conf = new ConfigManager();
|
||||||
$conf->setEmpty('general.timezone', date_default_timezone_get());
|
$conf->setEmpty('general.timezone', date_default_timezone_get());
|
||||||
$conf->setEmpty('general.title', 'Shared links on '. escape(index_url($_SERVER)));
|
$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
|
RainTPL::$cache_dir = $conf->get('resource.raintpl_tmp'); // cache directory
|
||||||
|
|
||||||
$pluginManager = new PluginManager($conf);
|
$pluginManager = new PluginManager($conf);
|
||||||
|
@ -1148,6 +1149,7 @@ function renderPage($conf, $pluginManager)
|
||||||
$conf->set('general.timezone', $tz);
|
$conf->set('general.timezone', $tz);
|
||||||
$conf->set('general.title', escape($_POST['title']));
|
$conf->set('general.title', escape($_POST['title']));
|
||||||
$conf->set('general.header_link', escape($_POST['titleLink']));
|
$conf->set('general.header_link', escape($_POST['titleLink']));
|
||||||
|
$conf->set('resource.theme', escape($_POST['theme']));
|
||||||
$conf->set('redirector.url', escape($_POST['redirector']));
|
$conf->set('redirector.url', escape($_POST['redirector']));
|
||||||
$conf->set('security.session_protection_disabled', !empty($_POST['disablesessionprotection']));
|
$conf->set('security.session_protection_disabled', !empty($_POST['disablesessionprotection']));
|
||||||
$conf->set('privacy.default_private_links', !empty($_POST['privateLinkByDefault']));
|
$conf->set('privacy.default_private_links', !empty($_POST['privateLinkByDefault']));
|
||||||
|
@ -1173,6 +1175,8 @@ function renderPage($conf, $pluginManager)
|
||||||
else // Show the configuration form.
|
else // Show the configuration form.
|
||||||
{
|
{
|
||||||
$PAGE->assign('title', $conf->get('general.title'));
|
$PAGE->assign('title', $conf->get('general.title'));
|
||||||
|
$PAGE->assign('theme', $conf->get('resource.theme'));
|
||||||
|
$PAGE->assign('theme_avaible', getAllTheme());
|
||||||
$PAGE->assign('redirector', $conf->get('redirector.url'));
|
$PAGE->assign('redirector', $conf->get('redirector.url'));
|
||||||
list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone'));
|
list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone'));
|
||||||
$PAGE->assign('timezone_form', $timezone_form);
|
$PAGE->assign('timezone_form', $timezone_form);
|
||||||
|
|
|
@ -289,6 +289,7 @@ public function testCheckCurrentResourcePermissions()
|
||||||
$conf->set('resource.page_cache', 'pagecache');
|
$conf->set('resource.page_cache', 'pagecache');
|
||||||
$conf->set('resource.raintpl_tmp', 'tmp');
|
$conf->set('resource.raintpl_tmp', 'tmp');
|
||||||
$conf->set('resource.raintpl_tpl', 'tpl');
|
$conf->set('resource.raintpl_tpl', 'tpl');
|
||||||
|
$conf->set('resource.theme', 'default');
|
||||||
$conf->set('resource.update_check', 'data/lastupdatecheck.txt');
|
$conf->set('resource.update_check', 'data/lastupdatecheck.txt');
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
|
@ -312,10 +313,12 @@ public function testCheckCurrentResourcePermissionsErrors()
|
||||||
$conf->set('resource.page_cache', 'null/pagecache');
|
$conf->set('resource.page_cache', 'null/pagecache');
|
||||||
$conf->set('resource.raintpl_tmp', 'null/tmp');
|
$conf->set('resource.raintpl_tmp', 'null/tmp');
|
||||||
$conf->set('resource.raintpl_tpl', 'null/tpl');
|
$conf->set('resource.raintpl_tpl', 'null/tpl');
|
||||||
|
$conf->set('resource.raintpl_theme', 'null/tpl/default');
|
||||||
$conf->set('resource.update_check', 'null/data/lastupdatecheck.txt');
|
$conf->set('resource.update_check', 'null/data/lastupdatecheck.txt');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
array(
|
array(
|
||||||
'"null/tpl" directory is not readable',
|
'"null/tpl" directory is not readable',
|
||||||
|
'"null/tpl/default" directory is not readable',
|
||||||
'"null/cache" directory is not readable',
|
'"null/cache" directory is not readable',
|
||||||
'"null/cache" directory is not writable',
|
'"null/cache" directory is not writable',
|
||||||
'"null/data" directory is not readable',
|
'"null/data" directory is not readable',
|
||||||
|
|
|
@ -19,6 +19,23 @@
|
||||||
<td><input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}"><br/><label
|
<td><input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}"><br/><label
|
||||||
for="titleLink">(default value is: ?)</label></td>
|
for="titleLink">(default value is: ?)</label></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><b>Theme:</b></td>
|
||||||
|
<td>
|
||||||
|
<select name="theme" id="theme">
|
||||||
|
{loop="$theme_avaible"}
|
||||||
|
{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>
|
<tr>
|
||||||
<td><b>Timezone:</b></td>
|
<td><b>Timezone:</b></td>
|
||||||
<td>{$timezone_form}</td>
|
<td>{$timezone_form}</td>
|
|
@ -28,9 +28,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dailyTitle">
|
<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
|
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>
|
||||||
|
|
||||||
<div class="dailyDate">
|
<div class="dailyDate">
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
<div class="dailyEntry">
|
<div class="dailyEntry">
|
||||||
<div class="dailyEntryPermalink">
|
<div class="dailyEntryPermalink">
|
||||||
<a href="?{$link.linkdate|smallHash}">
|
<a href="?{$link.linkdate|smallHash}">
|
||||||
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{if="!$hide_timestamps || isLoggedIn()"}
|
{if="!$hide_timestamps || isLoggedIn()"}
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
{$value}
|
{$value}
|
||||||
{/loop}
|
{/loop}
|
||||||
</div>
|
</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>
|
</div>
|
||||||
{include="page.footer"}
|
{include="page.footer"}
|
||||||
</body>
|
</body>
|
|
@ -6,9 +6,9 @@
|
||||||
<link rel="alternate" type="application/rss+xml" href="{$feedurl}?do=rss{$searchcrits}#" title="RSS Feed" />
|
<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 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 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="reset.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="../inc/shaarli.css" />
|
<link type="text/css" rel="stylesheet" href="shaarli.css" />
|
||||||
{if="is_file('inc/user.css')"}<link type="text/css" rel="stylesheet" href="../inc/user.css" />{/if}
|
{if="is_file('inc/user.css')"}<link type="text/css" rel="stylesheet" href="../../inc/user.css" />{/if}
|
||||||
{loop="$plugins_includes.css_files"}
|
{loop="$plugins_includes.css_files"}
|
||||||
<link type="text/css" rel="stylesheet" href="{$value}#"/>
|
<link type="text/css" rel="stylesheet" href="{$value}#"/>
|
||||||
{/loop}
|
{/loop}
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<link type="text/css" rel="stylesheet" href="../inc/awesomplete.css" />
|
<link type="text/css" rel="stylesheet" href="../../inc/awesomplete.css" />
|
||||||
{include="includes"}
|
{include="includes"}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
|
@ -103,7 +103,7 @@ strong {
|
||||||
}
|
}
|
||||||
|
|
||||||
#pageheader #logo {
|
#pageheader #logo {
|
||||||
background-image: url('../images/logo.png');
|
background-image: url('../../images/logo.png');
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
margin: 0 10px 0 10px;
|
margin: 0 10px 0 10px;
|
||||||
|
@ -423,7 +423,7 @@ strong {
|
||||||
}
|
}
|
||||||
|
|
||||||
#linklist li.private {
|
#linklist li.private {
|
||||||
background: url('../images/private.png') no-repeat 4px center;
|
background: url('../../../images/private.png') no-repeat 4px center;
|
||||||
padding-left: 30px;
|
padding-left: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ strong {
|
||||||
}
|
}
|
||||||
|
|
||||||
.linkdate a {
|
.linkdate a {
|
||||||
background-image: url('../images/calendar.png');
|
background-image: url('../../images/calendar.png');
|
||||||
padding: 2px 0 3px 20px;
|
padding: 2px 0 3px 20px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -506,7 +506,7 @@ strong {
|
||||||
height: 20px;
|
height: 20px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background-image: url('../images/tag_blue.png');
|
background-image: url('../../images/tag_blue.png');
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 3px center;
|
background-position: 3px center;
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
|
@ -752,7 +752,7 @@ div.daily {
|
||||||
/* Background paper texture by BashCorpo:
|
/* Background paper texture by BashCorpo:
|
||||||
http://www.bashcorpo.dk/textures.php
|
http://www.bashcorpo.dk/textures.php
|
||||||
http://bashcorpo.deviantart.com/art/Grungy-paper-texture-v-5-22966998 */
|
http://bashcorpo.deviantart.com/art/Grungy-paper-texture-v-5-22966998 */
|
||||||
background-image: url("../images/Paper_texture_v5_by_bashcorpo_w1000.jpg");
|
background-image: url("../../images/Paper_texture_v5_by_bashcorpo_w1000.jpg");
|
||||||
-webkit-background-size: cover;
|
-webkit-background-size: cover;
|
||||||
-moz-background-size: cover;
|
-moz-background-size: cover;
|
||||||
-o-background-size: cover;
|
-o-background-size: cover;
|
||||||
|
@ -846,7 +846,7 @@ div.dailyEntryThumbnail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: rgb(128, 128, 128);
|
background-color: rgb(128, 128, 128);
|
||||||
background: url(../images/50pc_transparent.png);
|
background: url(../../images/50pc_transparent.png);
|
||||||
padding: 4px 0px 2px 0px;
|
padding: 4px 0px 2px 0px;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue