aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2008-08-28 00:32:39 +0000
committerrvelices <rv-github@modusoptimus.com>2008-08-28 00:32:39 +0000
commitabb2f22b2e96a89a44ad9d36db3bf612c6f88b9f (patch)
treeca36d7b1bd7035f9952c4f564406eaa87c954cdb /admin
parent7f956e71b91f32ff6ca87ea6a0f56cc0f02c7005 (diff)
- based on test_menu by grum (thanks to you) - integration of dynamic menu bar to pwg
- the menubar is composed now of dynamic blocks that can be ordered/hidden - plugins can add their own blocks git-svn-id: http://piwigo.org/svn/trunk@2488 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin')
-rw-r--r--admin/include/functions.php31
-rw-r--r--admin/menubar.php162
-rw-r--r--admin/template/yoga/admin.tpl1
-rw-r--r--admin/template/yoga/admin/menubar.tpl30
-rw-r--r--admin/template/yoga/theme/admin/themeconf.inc.php3
5 files changed, 219 insertions, 8 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php
index 59c63ff0c..db95ab383 100644
--- a/admin/include/functions.php
+++ b/admin/include/functions.php
@@ -1845,7 +1845,7 @@ UPDATE '.USER_CACHE_TABLE.'
*/
function create_table_add_character_set($query)
{
- defined('DB_CHARSET') or die('create_table_add_character_set DB_CHARSET undefined');
+ defined('DB_CHARSET') or trigger_error('create_table_add_character_set DB_CHARSET undefined', E_USER_ERROR);
if ('DB_CHARSET'!='')
{
if ( version_compare(mysql_get_server_info(), '4.1.0', '<') )
@@ -1853,17 +1853,34 @@ function create_table_add_character_set($query)
return $query;
}
$charset_collate = " DEFAULT CHARACTER SET ".DB_CHARSET;
- if ('DB_COLLATE'!='')
+ if (DB_COLLATE!='')
{
$charset_collate .= " COLLATE ".DB_COLLATE;
}
- $query=trim($query);
- $query=trim($query, ';');
- if (preg_match('/^CREATE\s+TABLE/i',$query))
+ if ( is_array($query) )
{
- $query.=$charset_collate;
+ foreach( $query as $id=>$q)
+ {
+ $q=trim($q);
+ $q=trim($q, ';');
+ if (preg_match('/^CREATE\s+TABLE/i',$q))
+ {
+ $q.=$charset_collate;
+ }
+ $q .= ';';
+ $query[$id] = $q;
+ }
+ }
+ else
+ {
+ $query=trim($query);
+ $query=trim($query, ';');
+ if (preg_match('/^CREATE\s+TABLE/i',$query))
+ {
+ $query.=$charset_collate;
+ }
+ $query .= ';';
}
- $query .= ';';
}
return $query;
}
diff --git a/admin/menubar.php b/admin/menubar.php
new file mode 100644
index 000000000..bdd761762
--- /dev/null
+++ b/admin/menubar.php
@@ -0,0 +1,162 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based picture gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008 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!");
+}
+
+
+function abs_fn_cmp($a, $b)
+{
+ return abs($a)-abs($b);
+}
+
+function make_consecutive( &$orders, $step=50 )
+{
+ uasort( $orders, 'abs_fn_cmp' );
+ $crt = 1;
+ foreach( $orders as $id=>$pos)
+ {
+ $orders[$id] = $step * ($pos<0 ? -$crt : $crt);
+ $crt++;
+ }
+}
+
+
+global $template;
+
+include_once(PHPWG_ROOT_PATH.'include/block.class.php');
+
+$menu = new BlockManager('menubar');
+$menu->load_registered_blocks();
+$reg_blocks = $menu->get_registered_blocks();
+
+$mb_conf = @$conf[ 'blk_'.$menu->get_id() ];
+if ( is_string($mb_conf) )
+ $mb_conf = unserialize( $mb_conf );
+if ( !is_array($mb_conf) )
+ $mb_conf=array();
+
+foreach ($mb_conf as $id => $pos)
+{
+ if (!isset($reg_blocks[$id]))
+ unset($mb_conf[$id]);
+}
+
+if ( isset($_POST['reset']) )
+{
+ $mb_conf = array();
+ $query = '
+UPDATE '.CONFIG_TABLE.'
+ SET value=""
+ WHERE param="blk_'.addslashes($menu->get_id()).'"
+ LIMIT 1';
+ pwg_query($query);
+}
+
+
+$idx=1;
+foreach ($reg_blocks as $id => $block)
+{
+ if ( !isset($mb_conf[$id]) )
+ $mb_conf[$id] = $idx*50;
+ $idx++;
+}
+
+
+if ( isset($_POST['submit']) )
+{
+ foreach ( $mb_conf as $id => $pos )
+ {
+ $hide = isset($_POST['hide_'.$id]);
+ $mb_conf[$id] = ($hide ? -1 : +1)*abs($pos);
+
+ $pos = (int)@$_POST['pos_'.$id];
+ if ($pos>0)
+ $mb_conf[$id] = $mb_conf[$id] > 0 ? $pos : -$pos;
+ }
+ make_consecutive( $mb_conf );
+
+ // BEGIN OPTIM - DONT ASK ABOUT THIS ALGO - but optimizes the size of the array we save in DB
+ $reg_keys = array_keys($reg_blocks);
+ $cnf_keys = array_keys($mb_conf);
+ $best_slice = array( 'len'=>0 );
+ for ($i=0; $i<count($reg_keys); $i++)
+ {
+ for ($j=0; $j<count($cnf_keys); $j++)
+ {
+ for ($k=0; max($i,$j)+$k<count($cnf_keys); $k++)
+ {
+ if ($cnf_keys[$j+$k] == $reg_keys[$i+$k] )
+ {
+ if ( 1+$k>$best_slice['len'])
+ {
+ $best_slice['len'] = 1+$k;
+ $best_slice['start_cnf'] = $j;
+ }
+ }
+ else
+ break;
+ }
+ }
+ }
+ $mb_conf_db = $mb_conf;
+ if ($best_slice['len'])
+ {
+ for ($j=0; $j<$best_slice['start_cnf']; $j++ )
+ {
+ $sign = $mb_conf_db[ $cnf_keys[$j] ] > 0 ? 1 : -1;
+ $mb_conf_db[ $cnf_keys[$j] ] = $sign * ( ($best_slice['start_cnf'])*50 - ($best_slice['start_cnf']-$j) );
+ }
+ for ($j=$best_slice['start_cnf']; $j<$best_slice['start_cnf']+$best_slice['len']; $j++ )
+ {
+ if ($mb_conf_db[ $cnf_keys[$j] ] > 0)
+ unset( $mb_conf_db[ $cnf_keys[$j] ] );
+ }
+ }
+ //var_export( $best_slice ); var_export($mb_conf); var_export($mb_conf_db);
+ // END OPTIM
+
+ $query = '
+UPDATE '.CONFIG_TABLE.'
+ SET value="'.addslashes(serialize($mb_conf_db)).'"
+ WHERE param="blk_'.addslashes($menu->get_id()).'"
+ LIMIT 1';
+ pwg_query($query);
+}
+
+make_consecutive( $mb_conf );
+
+foreach ($mb_conf as $id => $pos )
+{
+ $template->append( 'blocks',
+ array(
+ 'pos' => $pos/5,
+ 'reg' => $reg_blocks[$id]
+ )
+ );
+}
+$template->set_filename( 'menubar_admin_content', 'admin/menubar.tpl' );
+$template->assign_var_from_handle( 'ADMIN_CONTENT', 'menubar_admin_content');
+?>
diff --git a/admin/template/yoga/admin.tpl b/admin/template/yoga/admin.tpl
index 49441f8e5..4914477d0 100644
--- a/admin/template/yoga/admin.tpl
+++ b/admin/template/yoga/admin.tpl
@@ -23,6 +23,7 @@
<ul>
<li><a href="{$U_CONFIG_GENERAL}">{'conf_general'|@translate}</a></li>
<li><a href="{$U_CONFIG_DISPLAY}">{'conf_display'|@translate}</a></li>
+ <li><a href="{$U_CONFIG_MENUBAR}">{'title_menu'|@translate}</a></li>
<li><a href="{$U_CONFIG_EXTENTS}">{'conf_extents'|@translate}</a></li>
</ul>
</dd>
diff --git a/admin/template/yoga/admin/menubar.tpl b/admin/template/yoga/admin/menubar.tpl
new file mode 100644
index 000000000..06ff9ee9a
--- /dev/null
+++ b/admin/template/yoga/admin/menubar.tpl
@@ -0,0 +1,30 @@
+{* $Id: tracer_admin.tpl 2342 2008-05-15 18:43:33Z rub $ *}
+
+<div class="titrePage">
+ <h2>Menubar</h2>
+</div>
+
+<form method="post" class="properties">
+<table class="table2">
+ <tr class="throw">
+ <td>Id</td>
+ <td>{'Author'|@translate}</td>
+ <td>{'Name'|@translate}</td>
+ <td>{'Position'|@translate}</td>
+ <td>Hide</td>
+ </tr>
+ {foreach from=$blocks item=block name="block_loop"}
+ <tr class="{if $smarty.foreach.block_loop.index is odd}row1{else}row2{/if}">
+ <td>{$block.reg->get_id()}</td>
+ <td>{$block.reg->get_owner()}</td>
+ <td>{$block.reg->get_name()|@translate}</td>
+ <td><input type="input" name="pos_{$block.reg->get_id()}" value={math equation="abs(pos)" pos=$block.pos} size="2"></td>
+ <td><input type="checkbox" name="hide_{$block.reg->get_id()}" {if $block.pos<0}checked="checked"{/if} ></td>
+ </tr>
+ {/foreach}
+</table>
+<p>
+ <input type="submit" name="submit" value="{'Submit'|@translate}" >
+ <input type="submit" name="reset" value="{'Reset'|@translate}" >
+</p>
+</form> \ No newline at end of file
diff --git a/admin/template/yoga/theme/admin/themeconf.inc.php b/admin/template/yoga/theme/admin/themeconf.inc.php
index e3b6fc63e..6a87b0f4e 100644
--- a/admin/template/yoga/theme/admin/themeconf.inc.php
+++ b/admin/template/yoga/theme/admin/themeconf.inc.php
@@ -9,6 +9,7 @@ function selected_admin_menu()
switch ($_GET['page']) {
case 'configuration':
case 'extend_for_templates':
+ case 'menubar':
return 1;
case 'site_manager':
case 'site_update':
@@ -55,7 +56,7 @@ $themeconf = array(
'admin_icon_dir' => 'template/yoga/icon/admin',
'mime_icon_dir' => 'template/yoga/icon/mimetypes/',
'local_head' => '
-<!-- New template location for admin -->
+<!-- New template location for admin -->
<!-- Admin Accordion Menus -->
<script type="text/javascript" src="template-common/lib/jquery.js"></script>
<script type="text/javascript" src="template-common/lib/chili-1.7.pack.js"></script>