diff options
author | rvelices <rv-github@modusoptimus.com> | 2008-08-28 00:32:39 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2008-08-28 00:32:39 +0000 |
commit | abb2f22b2e96a89a44ad9d36db3bf612c6f88b9f (patch) | |
tree | ca36d7b1bd7035f9952c4f564406eaa87c954cdb /admin | |
parent | 7f956e71b91f32ff6ca87ea6a0f56cc0f02c7005 (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 '')
-rw-r--r-- | admin.php | 3 | ||||
-rw-r--r-- | admin/include/functions.php | 31 | ||||
-rw-r--r-- | admin/menubar.php | 162 | ||||
-rw-r--r-- | admin/template/yoga/admin.tpl | 1 | ||||
-rw-r--r-- | admin/template/yoga/admin/menubar.tpl | 30 | ||||
-rw-r--r-- | admin/template/yoga/theme/admin/themeconf.inc.php | 3 |
6 files changed, 221 insertions, 9 deletions
@@ -79,6 +79,7 @@ $template->assign( 'U_CONFIG_GENERAL'=> $link_start.'configuration', 'U_CONFIG_DISPLAY'=> $conf_link.'default', 'U_CONFIG_EXTENTS'=> $link_start.'extend_for_templates', + 'U_CONFIG_MENUBAR'=> $link_start.'menubar', 'U_CATEGORIES'=> $link_start.'cat_list', 'U_MOVE'=> $link_start.'cat_move', 'U_CAT_OPTIONS'=> $link_start.'cat_options', @@ -138,7 +139,7 @@ if (count($page['infos']) != 0) // Add the Piwigo Official menu $template->assign( 'pwgmenu', pwg_URL() ); - + include(PHPWG_ROOT_PATH.'include/page_header.php'); $template->pparse('admin'); 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> |