Skip to content

Commit

Permalink
- based on test_menu by grum (thanks to you) - integration of dynamic…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
rvelices committed Aug 28, 2008
1 parent 7f956e7 commit abb2f22
Show file tree
Hide file tree
Showing 44 changed files with 989 additions and 1,699 deletions.
3 changes: 2 additions & 1 deletion admin.php
Expand Up @@ -79,6 +79,7 @@
'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',
Expand Down Expand Up @@ -138,7 +139,7 @@ function UC_name_compare($a, $b)

// Add the Piwigo Official menu
$template->assign( 'pwgmenu', pwg_URL() );

include(PHPWG_ROOT_PATH.'include/page_header.php');
$template->pparse('admin');

Expand Down
31 changes: 24 additions & 7 deletions admin/include/functions.php
Expand Up @@ -1845,25 +1845,42 @@ function invalidate_user_cache()
*/
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', '<') )
{
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;
}
Expand Down
162 changes: 162 additions & 0 deletions 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');
?>
1 change: 1 addition & 0 deletions admin/template/yoga/admin.tpl
Expand Up @@ -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>
Expand Down
30 changes: 30 additions & 0 deletions 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>
3 changes: 2 additions & 1 deletion admin/template/yoga/theme/admin/themeconf.inc.php
Expand Up @@ -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':
Expand Down Expand Up @@ -55,7 +56,7 @@ function selected_admin_menu()
'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>
Expand Down

0 comments on commit abb2f22

Please sign in to comment.