aboutsummaryrefslogtreecommitdiffstats
path: root/admin/menubar.php
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/menubar.php
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/menubar.php')
-rw-r--r--admin/menubar.php162
1 files changed, 162 insertions, 0 deletions
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');
+?>