Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- 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
- Loading branch information
rvelices
committed
Aug 28, 2008
1 parent
7f956e7
commit abb2f22
Showing
44 changed files
with
989 additions
and
1,699 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'); | ||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.