aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--about.php29
-rw-r--r--admin/include/themes.class.php39
-rw-r--r--admin/theme.php46
-rw-r--r--admin/themes/default/default-layout.css5
-rw-r--r--admin/themes/default/template/themes_installed.tpl10
-rw-r--r--include/template.class.php17
6 files changed, 112 insertions, 34 deletions
diff --git a/about.php b/about.php
index c3958a5ec..e54505e27 100644
--- a/about.php
+++ b/about.php
@@ -38,33 +38,16 @@ $title= l10n('About Piwigo');
$page['body_id'] = 'theAboutPage';
include(PHPWG_ROOT_PATH.'include/page_header.php');
-/**
- * set in ./local/language/en_UK.lang.php (maybe to create)
- * for example for clear theme:
- $lang['Theme: clear'] = 'This is the clear theme based on yoga template. '.
- ' A standard template/theme of PhpWebgallery.';
- *
- * Don't forget php tags !!!
- *
- * Another way is to code it thru the theme itself in ./themeconf.inc.php
- */
-@include(PHPWG_ROOT_PATH.'template/'.$user['template'].
- '/theme/'.$user['theme'].'/themeconf.inc.php');
+$template->set_filename('about', 'about.tpl');
-$template->set_filenames(
- array(
- 'about'=>'about.tpl',
- )
- );
-if ( isset($lang['Theme: '.$user['theme']]) )
+$template->assign('ABOUT_MESSAGE', load_language('about.html','', array('return'=>true)) );
+
+$theme_about = load_language('about.html', PHPWG_THEMES_PATH.$user['theme'].'/', array('return' => true));
+if ( $theme_about !== false )
{
- $template->assign(
- 'THEME_ABOUT',l10n('Theme: '.$user['theme'])
- );
+ $template->assign('THEME_ABOUT', $theme_about);
}
-$template->assign('ABOUT_MESSAGE', load_language('about.html','', array('return'=>true)) );
-
$template->pparse('about');
include(PHPWG_ROOT_PATH.'include/page_tail.php');
?>
diff --git a/admin/include/themes.class.php b/admin/include/themes.class.php
index 524462306..41ee5f336 100644
--- a/admin/include/themes.class.php
+++ b/admin/include/themes.class.php
@@ -70,6 +70,8 @@ class themes
$crt_db_theme = $this->db_themes_by_id[$theme_id];
}
+ $file_to_include = PHPWG_THEMES_PATH.'/'.$theme_id.'/admin/maintain.inc.php';
+
$errors = array();
switch ($action)
@@ -100,14 +102,26 @@ class themes
break;
}
-
- $query = "
+
+ if (file_exists($file_to_include))
+ {
+ include($file_to_include);
+ if (function_exists('theme_activate'))
+ {
+ theme_activate($theme_id, $this->fs_themes[$theme_id]['version'], $errors);
+ }
+ }
+
+ if (empty($errors))
+ {
+ $query = "
INSERT INTO ".THEMES_TABLE."
SET id = '".$theme_id."'
, version = '".$this->fs_themes[$theme_id]['version']."'
, name = '".$this->fs_themes[$theme_id]['name']."'
;";
- pwg_query($query);
+ pwg_query($query);
+ }
break;
case 'deactivate':
@@ -150,7 +164,16 @@ SELECT
$this->set_default_theme($new_theme);
}
-
+
+ if (file_exists($file_to_include))
+ {
+ include($file_to_include);
+ if (function_exists('theme_deactivate'))
+ {
+ theme_deactivate($theme_id);
+ }
+ }
+
$query = "
DELETE
FROM ".THEMES_TABLE."
@@ -374,7 +397,13 @@ SELECT
.'/images/missing_screenshot.png'
;
}
-
+
+ $admin_file = $path.'/admin/admin.inc.php';
+ if (file_exists($admin_file))
+ {
+ $theme['admin_uri'] = get_root_url().'admin.php?page=theme&theme='.$file;
+ }
+
// IMPORTANT SECURITY !
$theme = array_map('htmlspecialchars', $theme);
$this->fs_themes[$file] = $theme;
diff --git a/admin/theme.php b/admin/theme.php
new file mode 100644
index 000000000..88f3a03e3
--- /dev/null
+++ b/admin/theme.php
@@ -0,0 +1,46 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based picture gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2010 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+if( !defined("PHPWG_ROOT_PATH") )
+{
+ die ("Hacking attempt!");
+}
+
+include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+check_status(ACCESS_ADMINISTRATOR);
+
+if (empty($_GET['theme']))
+{
+ die('Invalid theme URL');
+}
+
+$filename = PHPWG_THEMES_PATH.$_GET['theme'].'/admin/admin.inc.php';
+if (is_file($filename))
+{
+ include_once($filename);
+}
+else
+{
+ die('Missing file '.$filename);
+}
+?> \ No newline at end of file
diff --git a/admin/themes/default/default-layout.css b/admin/themes/default/default-layout.css
index 2df864c4b..10c7386d8 100644
--- a/admin/themes/default/default-layout.css
+++ b/admin/themes/default/default-layout.css
@@ -749,11 +749,12 @@ BODY#thePopuphelpPage {
height: 4em; /* legend height (don't set auto to be Gecko friendly)*/
}
-.themeBox {display:inline-block; text-align:center; height:180px; background-color:#eee; margin:5px; -moz-border-radius:5px;}
+.themeBox {display:inline-table; text-align:center; height:192px; background-color:#eee; margin:5px; -moz-border-radius:5px; overflow:hidden; }
.themeBox IMG {border:1px solid white; margin:0 15px;}
.themeName {font-size:1.1em; margin:5px 0;}
-.themeActions {margin:5px 0; font-size:12px;}
+.themeActions {display: table-row; font-size:12px; height: 43px; }
+.themeActions DIV {display: table-cell; vertical-align: middle; line-height:18px; }
.themeActions A {}
#themesContent .themeBox IMG {width:150px; height:120px;}
diff --git a/admin/themes/default/template/themes_installed.tpl b/admin/themes/default/template/themes_installed.tpl
index 5bb18ae57..9f972486f 100644
--- a/admin/themes/default/template/themes_installed.tpl
+++ b/admin/themes/default/template/themes_installed.tpl
@@ -13,7 +13,7 @@
<div class="themeName">{$theme.name}{if $theme.is_default} <em>({'default'|@translate})</em>{/if}</div>
<div class="themeShot"><img src="{$theme.screenshot}"></div>
<div class="themeActions">
-
+ <div>
{if $theme.deactivable}
<a href="{$deactivate_baseurl}{$theme.id}" title="{'Forbid this theme to users'|@translate}">{'Deactivate'|@translate}</a>
{else}
@@ -23,6 +23,10 @@
{if not $theme.is_default}
| <a href="{$set_default_baseurl}{$theme.id}" title="{'Set as default theme for unregistered and new users'|@translate}">{'Default'|@translate}</a>
{/if}
+{if isset($theme.admin_uri)}
+ <br><a href="{$theme.admin_uri}" title="{'Configuration'|@translate}">{'Configuration'|@translate}</a>
+{/if}
+ </div>
</div> <!-- themeActions -->
</div>
{/foreach}
@@ -39,7 +43,7 @@
<div class="themeName">{$theme.name}</div>
<div class="themeShot"><img src="{$theme.screenshot}"></div>
<div class="themeActions">
-
+ <div>
{if $theme.activable}
<a href="{$activate_baseurl}{$theme.id}" title="{'Make this theme available to users'|@translate}">{'Activate'|@translate}</a>
{else}
@@ -53,7 +57,7 @@
{else}
<span title="{$theme.delete_tooltip}">{'Delete'|@translate}</span>
{/if}
-
+ </div>
</div>
</div>
diff --git a/include/template.class.php b/include/template.class.php
index 2307d9fe2..3a13adf47 100644
--- a/include/template.class.php
+++ b/include/template.class.php
@@ -94,7 +94,7 @@ class Template {
{
$this->set_template_dir($root.'/'.$theme.'/'.$path);
- include($root.'/'.$theme.'/themeconf.inc.php');
+ $themeconf = $this->load_themeconf($root.'/'.$theme);
if (isset($themeconf['parent']) and $themeconf['parent'] != $theme)
{
@@ -573,6 +573,21 @@ class Template {
return $source;
}
+
+ function load_themeconf($dir)
+ {
+ global $themeconfs, $conf, $page;
+
+ $dir = realpath($dir);
+ if (!isset($themeconfs[$dir]))
+ {
+ $themeconf = array();
+ include($dir.'/themeconf.inc.php');
+ // Put themeconf in cache
+ $themeconfs[$dir] = $themeconf;
+ }
+ return $themeconfs[$dir];
+ }
}