Asked by rvelices on this topic

http://forum.phpwebgallery.net/viewtopic.php?pid=92097#p92097

A plugin to integrate the menu class
 see test_menu directory

A plugin to show how to use the menu class
 see AMenuManager directory

And common classes needed for the AMenuManager plugin
 see grum_plugins_classes-2 directory

See topic http://forum.phpwebgallery.net/viewtopic.php?pid=92637#p92637 for more
informations 

git-svn-id: http://piwigo.org/svn/trunk@2466 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
grum 2008-08-03 07:48:39 +00:00
parent ee0af5d43d
commit 7ebed79726
58 changed files with 5207 additions and 0 deletions

View file

@ -0,0 +1,13 @@
<div class="titrePage">
<h2 style="position:absolute;right:0px;top:32px;height:auto;font-size:12px;font-weight:normal;">:: {$plugin.AMM_VERSION} ::</h2>
<h2>{'g002_title_page'|@translate} <span style="font-size:-1;font-weight:normal;">{$TABSHEET_TITLE}</span></h2>
{$tabsheet}
</div>
{if isset($page_nfo)}
<p>{$page_nfo}</p>
{/if}
{$AMM_BODY_PAGE}

View file

@ -0,0 +1,108 @@
{literal}
<script type="text/javascript">
//global var ; need to not have to initialize them every time a value is changed
var objlang;
var objnames = new Array('iamm_links_title');
var objinput = new Array(); //input text from form => objinput[name]
var objhidden = new Array(); //input hidden from form => objhidden[name][lang]
function init()
{
objlang = document.getElementById('islang');
for(i=0;i<objnames.length;i++)
{
objinput[i] = document.getElementById(objnames[i]);
objhidden[i] = new Array();
for(j=0;j<objlang.options.length;j++)
{
objhidden[i][j] = document.getElementById(objnames[i]+'_'+objlang.options[j].value);
}
}
}
function change_lang()
{
for(i=0;i<objnames.length;i++)
{
objinput[i].value = objhidden[i][objlang.options.selectedIndex].value;
}
}
function apply_changes(input_id)
{
var obj=document.getElementById(input_id);
objhidden[objnames.indexOf(input_id)][objlang.options.selectedIndex].value = obj.value;
}
</script>
{/literal}
<h3><span style="font-weight:normal"><a href="{$datas.lnk_list}" title="{'g002_configlinks'|@translate}">{'g002_linkslist'|@translate} </span></a> / {'g002_configlinks'|@translate}
</h3>
<form method="post" action="" class="general">
<fieldset>
<legend>{'g002_setting_link_block_menu'|@translate}</legend>
{if isset($datas.language_list) and count($datas.language_list)}
{foreach from=$datas.language_list key=name item=language_row}
<input type="hidden" name="famm_links_title_{$language_row.LANG}"
id="iamm_links_title_{$language_row.LANG}" value="{$language_row.MENUBARTIT}">
{/foreach}
{/if}
<table class="formtable">
<tr>
<td>{'g002_setting_link_block_active'|@translate}</td>
<td>
<select name="famm_links_active" id="iamm_links_active">
{html_options values=$datas.yesno_values output=$datas.yesno_labels selected=$datas.active_selected}
</select>
</td>
</tr>
<tr>
<td>{'g002_setting_link_block_title'|@translate}</td>
<td>
<input type="text" id="iamm_links_title" value="" maxlength="50" onkeyup="apply_changes('iamm_links_title');" />
<select onchange="change_lang();" id="islang">
{html_options values=$datas.language_list_values output=$datas.language_list_labels selected=$datas.lang_selected}
</select>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{'g002_setting_link_links'|@translate}</legend>
<table class="formtable">
<tr>
<td>{'g002_setting_link_show_icon'|@translate}</td>
<td>
<select name="famm_links_show_icons" id="iamm_links_show_icons">
{html_options values=$datas.yesno_values output=$datas.yesno_labels selected=$datas.show_icons_selected}
</select>
</td>
</tr>
</table>
</fieldset>
<p>
<input type="submit" name="famm_submit_apply" id="iamm_submit_apply" value="{'g002_apply'|@translate}" >
</p>
<input type="hidden" name="famm_modeedit" value="config">
</form>
<script type="text/javascript">
init();
change_lang();
</script>

View file

@ -0,0 +1,56 @@
{literal}
<script type="text/javascript">
function load_list(do_action, item, permut)
{
/*
do_action
'list' : just load list
'permut' : permut items in list
'delete' : delete the item in list
*/
var doc = document.getElementById("iurls");
action_todo='';
if(do_action=='permut')
{
action_todo='links_permut&fItem='+item+'&fPermut='+permut;
}
else if(do_action=='delete')
{
if(confirm('{/literal}{'g002_confirm_delete_link'|@translate}{literal}'))
{
action_todo='links_delete&fItem='+item;
}
}
else
{
action_todo='links_list';
}
if(action_todo!='')
{
http_request=create_httpobject('get', '', '{/literal}{$datas.AMM_AJAX_URL_LIST}{literal}'+action_todo, false);
http_request.send(null);
doc.innerHTML=http_request.responseText;
}
}
</script>
{/literal}
<h3>{'g002_linkslist'|@translate} / <span style="font-weight:normal"><a href="{$datas.lnk_config}" title="{'g002_configlinks'|@translate}">{'g002_configlinks'|@translate}</a></span>
</h3>
[{$datas.nburl}]<br/>
<a href="{$datas.lnk_create}" title="{'g002_addlink'|@translate}">{'g002_addlink'|@translate}</a>
<br/>
<div id="iurls"></div>
<script type="text/javascript">
load_list('list', 0, 0);
</script>

View file

@ -0,0 +1,28 @@
{if isset($datas.urls) and count($datas.urls)}
<table class="table2 littlefont">
<tr class="throw">
<th width='15'>&nbsp;</th>
<th>{'g002_label'|@translate}</th>
<th>{'g002_url'|@translate}</th>
<th>{'g002_mode'|@translate}</th>
<th>{'g002_visible'|@translate}</th>
<th colspan=4>&nbsp;</th>
</tr>
{foreach from=$datas.urls key=name item=url}
<tr>
<td>{if $url.img!=""}<img src='{$url.img}'/>{else}&nbsp;{/if}</td>
<td>{$url.label}</td>
<td>{$url.url}</td>
<td>{$url.mode}</td>
<td style="text-align:center;">{$url.visible}</td>
<td width="15px">{if $url.up}<a style="cursor:pointer;" onclick="load_list('permut', {$url.ID}, {$url.IDPREV})"><img src='{$plugin.PATH}/admin/go-up.png'/></a>{else}&nbsp;{/if}</td>
<td width="15px">{if $url.down}<a style="cursor:pointer;" onclick="load_list('permut', {$url.ID}, {$url.IDNEXT})"><img src='{$plugin.PATH}/admin/go-down.png'/></a>{else}&nbsp;{/if}</td>
<td width="15px"><a href="{$url.edit}"><img src='{$themeconf.icon_dir}/category_edit.png'/></a></td>
<td width="15px"><a style="cursor:pointer;" onclick="load_list('delete', {$url.ID}, 0)"><img src='{$themeconf.icon_dir}/delete.png'/></a></td>
</tr>
{/foreach}
</table>
{/if}

View file

@ -0,0 +1,97 @@
{literal}
<script type="text/javascript">
function change_selected_icon()
{
var doc = document.getElementById("iamm_icon");
var icon_list = Array();
{/literal}
{foreach from=$datas.icons_values key=name item=icon}
icon_list.push('{$icon.img}');
{/foreach}
{literal}
doc.style.backgroundImage='url('+icon_list[doc.options.selectedIndex]+')';
}
</script>
{/literal}
{if isset($datas.modeedit)}
<h3>
{if $datas.modeedit=='create'}
{'g002_createoflink'|@translate}
{else}
{'g002_editoflink'|@translate}
{/if}
/ <span style="font-weight:normal"><a href="{$datas.lnk_list}">{'g002_linkslist'|@translate}</a></span></h3>
</h3>
<form method="post" action="" class="general">
<fieldset>
<table class="formtable">
<tr>
<td>{'g002_label'|@translate}<td>
<td><input type='text' name="famm_label" id='iamm_label' value='{$datas.label}' maxlength=50 size=50></td>
</tr>
<tr>
<td>{'g002_url'|@translate}<td>
<td><input type='text' name="famm_url" id='iamm_url' value='{$datas.url}' maxlength=255 size=50></td>
</tr>
<tr>
<td>{'g002_icon'|@translate}<td>
<td>
<select name="famm_icon" id="iamm_icon" onchange="change_selected_icon();" style="background-image:url('{$datas.icons_img}');background-position:2px 1px;background-repeat:no-repeat;padding-left:18px;">
{foreach from=$datas.icons_values key=name item=icon}
<option value="{$icon.value}" style="background: transparent url('{$icon.img}') no-repeat scroll 0px 0px;padding-left:20px;" {if $icon.value==$datas.icons_selected}selected{/if}>{$icon.label}</option>
{/foreach}
</select>
</td>
</tr>
<tr>
<td>{'g002_mode'|@translate}<td>
<td>
<select name="famm_mode" id="iamm_mode">
{html_options values=$datas.mode_values output=$datas.mode_labels selected=$datas.mode_selected}
</select>
</td>
</tr>
<tr>
<td>{'g002_visible'|@translate}<td>
<td>
<select name="famm_visible" id="iamm_visible">
{html_options values=$datas.visible_values output=$datas.visible_labels selected=$datas.visible_selected}
</select>
</td>
</tr>
</table>
</fieldset>
{if $datas.modeedit=='create'}
<p>
<input type="submit" name="famm_submit_create" id="iamm_submit_create" value="{'g002_createthelink'|@translate}" >
</p>
{/if}
{if $datas.modeedit=='modify'}
<p>
<input type="submit" name="famm_submit_modify" id="iamm_submit_modify" value="{'g002_editthelink'|@translate}" >
</p>
{/if}
<input type="hidden" name="famm_modeedit" value="{$datas.modeedit}">
<input type="hidden" name="famm_id" value="{$datas.id}">
</form>
{/if}

View file

@ -0,0 +1,47 @@
{literal}
<script type="text/javascript">
function load_list(do_action, item, position)
{
/*
do_action
'list' : just load list
'permut' : permut items in list
'delete' : delete the item in list
*/
var doc = document.getElementById("isections");
action_todo='';
if(do_action=='position')
{
action_todo='sections_position&fItem='+item+'&fPosition='+position;
}
else if(do_action=='showhide')
{
action_todo='sections_showhide&fItem='+item;
}
else
{
action_todo='sections_list';
}
if(action_todo!='')
{
http_request=create_httpobject('get', '', '{/literal}{$datas.AMM_AJAX_URL_LIST}{literal}'+action_todo, false);
http_request.send(null);
doc.innerHTML=http_request.responseText;
}
}
</script>
{/literal}
<h3>{'g002_sectionslist'|@translate}</h3>
<div id="isections"></div>
<script type="text/javascript">
load_list('list', 0, 0);
</script>

View file

@ -0,0 +1,24 @@
{if isset($datas.sections) and count($datas.sections)}
<table class="table2 littlefont">
<tr class="throw">
<th>{'g002_owner'|@translate}</th>
<th>{'g002_sectionid'|@translate}</th>
<th>{'g002_name'|@translate}</th>
<th>{'g002_visible'|@translate}</th>
<th colspan=2>&nbsp;</th>
</tr>
{foreach from=$datas.sections key=name item=section}
<tr>
<td>{$section.OWNER}</td>
<td>{$section.ID}</td>
<td>{$section.NAME}</td>
<td style="text-align:center;"><a style="cursor:pointer;" onclick="load_list('showhide', '{$section.ID}', '')">{$section.VISIBLE}</a></td>
<td width="15px">{if $section.up}<a style="cursor:pointer;" onclick="load_list('position', '{$section.ID}', '{$section.PREVPOS}')"><img src='{$plugin.PATH}/admin/go-up.png'/></a>{else}&nbsp;{/if}</td>
<td width="15px">{if $section.down}<a style="cursor:pointer;" onclick="load_list('position', '{$section.ID}', '{$section.NEXTPOS}')"><img src='{$plugin.PATH}/admin/go-down.png'/></a>{else}&nbsp;{/if}</td>
</tr>
{/foreach}
</table>
{/if}

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

View file

@ -0,0 +1,28 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
--------------------------------------------------------------------------- */
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
include(AMM_PATH."amm_aip.class.inc.php");
global $prefixeTable;
load_language('plugin.lang', AMM_PATH);
$main_plugin_object = get_plugin_data($plugin_id);
$plugin_ai = new AMM_AIP($prefixeTable, $main_plugin_object->get_filelocation());
$plugin_ai->manage();
?>

View file

@ -0,0 +1,4 @@
.littlefont { font-size:90%; }
table.littlefont th { text-align:center; padding:3px;padding-left:9px;padding-right:9px; }
table.littlefont td { text-align:left; padding:0px;padding-left:3px;padding-right:3px; }

View file

@ -0,0 +1,25 @@
-- *************************************************************** -- EOQ
-- * SQL export made with Grum Plugins Classes (Export tool r1.3) -- EOQ
-- * Export date :2008-08-02 02:51:37 -- EOQ
-- * Export options : [drop] [create] [insert] -- EOQ
-- *************************************************************** -- EOQ
-- *************************************************************** -- EOQ
-- * Statements for piwigo_amm_urls table -- EOQ
-- *************************************************************** -- EOQ
DROP TABLE `piwigo_amm_urls`; -- EOQ
CREATE TABLE `piwigo_amm_urls` (
`id` int(11) NOT NULL auto_increment,
`label` varchar(50) NOT NULL default '',
`url` varchar(255) NOT NULL default '',
`mode` int(11) NOT NULL default '0',
`icon` varchar(50) NOT NULL default '',
`position` int(11) NOT NULL default '0',
`visible` char(1) NOT NULL default 'y',
PRIMARY KEY (`id`),
KEY `order_key` (`position`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- EOQ
INSERT INTO `piwigo_amm_urls` VALUES('1', 'Test', 'http://192.168.1.1', '0', 'internet.png', '0', 'y'); -- EOQ

View file

@ -0,0 +1,39 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
AMM_AIM : classe to manage plugin integration into plugin menu
--------------------------------------------------------------------------- */
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
include_once('amm_root.class.inc.php');
class AMM_AIM extends AMM_root
{
function AMM_AIM($prefixeTable, $filelocation)
{
parent::__construct($prefixeTable, $filelocation);
}
/*
initialize events call for the plugin
*/
function init_events()
{
add_event_handler('get_admin_plugin_menu_links', array(&$this, 'plugin_admin_menu') );
}
} // amm_aim class
?>

View file

@ -0,0 +1,642 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
AIP classe => manage integration in administration interface
--------------------------------------------------------------------------- */
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
include_once(PHPWG_PLUGINS_PATH.'AMenuManager/amm_root.class.inc.php');
include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/css.class.inc.php');
include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/ajax.class.inc.php');
include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/genericjs.class.inc.php');
class AMM_AIP extends AMM_root
{
protected $tabsheet;
protected $css; //the css object
protected $ajax;
protected $urls_modes=array(0 => 'new_window', 1 => 'current_window');
function AMM_AIP($prefixeTable, $filelocation)
{
parent::__construct($prefixeTable, $filelocation);
$this->load_config();
$this->init_events();
$this->tabsheet = new tabsheet();
$this->tabsheet->add('setmenu',
l10n('g002_setmenu'),
$this->page_link.'&amp;fAMM_tabsheet=setmenu');
$this->tabsheet->add('links',
l10n('g002_addlinks'),
$this->page_link.'&amp;fAMM_tabsheet=links');
$this->tabsheet->add('randompict',
l10n('g002_randompict'),
$this->page_link.'&amp;fAMM_tabsheet=randompict');
$this->tabsheet->add('personnalblock',
l10n('g002_personnalblock'),
$this->page_link.'&amp;fAMM_tabsheet=personnalblock');
$this->css = new css(dirname($this->filelocation).'/'.$this->plugin_name_files.".css");
$this->ajax = new Ajax();
}
/* ---------------------------------------------------------------------------
Public classe functions
--------------------------------------------------------------------------- */
/*
manage plugin integration into piwigo's admin interface
*/
public function manage()
{
global $template;
$template->set_filename('plugin_admin_content', dirname(__FILE__)."/admin/amm_admin.tpl");
$this->return_ajax_content();
$this->init_request();
$this->tabsheet->select($_REQUEST['fAMM_tabsheet']);
$this->tabsheet->assign();
$selected_tab=$this->tabsheet->get_selected();
$template->assign($this->tabsheet->get_titlename(), "[".$selected_tab['caption']."]");
$template_plugin["AMM_VERSION"] = "<i>".$this->plugin_name."</i> ".l10n('g002_version').AMM_VERSION;
$template_plugin["AMM_PAGE"] = $_REQUEST['fAMM_tabsheet'];
$template_plugin["PATH"] = AMM_PATH;
$template->assign('plugin', $template_plugin);
if(isset($_POST['famm_modeedit']))
{
$post_action=$_POST['famm_modeedit'];
}
else
{
$post_action="";
}
$page_nfo="";
if($_REQUEST['fAMM_tabsheet']=='links')
{
$page_nfo=l10n('g002_addlinks_nfo');
switch($_REQUEST['action'])
{
case 'list':
$this->display_links_list_page();
break;
case 'create':
case 'modify':
if($post_action==$_REQUEST['action'])
{
if(!$this->adviser_abort())
{
$this->action_create_modify_url();
}
$this->display_links_list_page();
}
else
{
$this->display_links_manage_page($_REQUEST['action']);
}
break;
case 'config':
if($post_action==$_REQUEST['action'])
{
if(!$this->adviser_abort())
{
$this->action_modify_config();
}
}
$this->display_links_config_page();
break;
}
}
elseif($_REQUEST['fAMM_tabsheet']=='randompict')
{
$page_nfo=l10n('g002_randompict_nfo');
}
elseif($_REQUEST['fAMM_tabsheet']=='personnalblock')
{
$page_nfo=l10n('g002_personnalblock_nfo');
}
elseif($_REQUEST['fAMM_tabsheet']=='setmenu')
{
$page_nfo=l10n('g002_setmenu_nfo');
$this->display_sections_list_page();
}
$template->assign('page_nfo', $page_nfo);
$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
}
/*
initialize events call for the plugin
*/
public function init_events()
{
add_event_handler('menubar_file', array(&$this, 'plugin_public_menu') );
add_event_handler('loc_end_page_header', array(&$this->css, 'apply_CSS'));
}
/* ---------------------------------------------------------------------------
Private classe functions
--------------------------------------------------------------------------- */
/*
return ajax content
*/
protected function return_ajax_content()
{
global $ajax, $template;
if(isset($_REQUEST['ajaxfct']))
{
//$this->debug("AJAXFCT:".$_REQUEST['ajaxfct']);
$result="<p class='errors'>".l10n('g002_error_invalid_ajax_call')."</p>";
switch($_REQUEST['ajaxfct'])
{
case 'links_list':
$result=$this->ajax_amm_links_list();
break;
case 'links_permut':
$result=$this->ajax_amm_links_permut($_REQUEST['fItem'], $_REQUEST['fPermut']);
break;
case 'links_delete':
$result=$this->ajax_amm_links_delete($_REQUEST['fItem']);
break;
case 'sections_list':
$result=$this->ajax_amm_section_list();
break;
case 'sections_position':
$result=$this->ajax_amm_section_position($_REQUEST['fItem'], $_REQUEST['fPosition']);
break;
case 'sections_showhide':
$result=$this->ajax_amm_section_showhide($_REQUEST['fItem']);
break;
}
//$template->
$this->ajax->return_result($result);
}
}
/*
if empty, initialize $_request
*/
private function init_request()
{
//initialise $REQUEST values if not defined
if(!array_key_exists('fAMM_tabsheet', $_REQUEST))
{
$_REQUEST['fAMM_tabsheet']='setmenu';
}
if(($_REQUEST['fAMM_tabsheet']=='links') and !isset($_REQUEST['action']))
{
$_REQUEST['action']='list';
}
} //init_request
/*
manage display for urls table page
*/
private function display_links_list_page()
{
global $template, $user;
$template->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_linkslist.tpl');
$tmp=$this->get_count_url();
if($tmp==0)
{
$tmp=l10n("g002_nolinks");
}
elseif($tmp==1)
{
$tmp="1 ".l10n("g002_link");
}
else
{
$tmp=$tmp." ".l10n("g002_links");
}
$template_datas=array(
'lnk_create' => $this->page_link.'&amp;fAMM_tabsheet=links&amp;action=create',
'lnk_config' => $this->page_link.'&amp;fAMM_tabsheet=links&amp;action=config',
'AMM_AJAX_URL_LIST' => $this->page_link."&ajaxfct=",
'nburl' => $tmp
);
$template->assign("datas", $template_datas);
$template->assign_var_from_handle('AMM_BODY_PAGE', 'body_page');
}
/*
manage display for urls config page
*/
private function display_links_config_page()
{
global $template, $user;
$template->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_linksconfig.tpl');
$template_datas=array(
'lnk_list' => $this->page_link.'&amp;fAMM_tabsheet=links',
'AMM_AJAX_URL_LIST' => $this->page_link."&ajaxfct=",
'show_icons_selected' => $this->my_config['amm_links_show_icons'],
'active_selected' => $this->my_config['amm_links_active'],
'lang_selected' => $user['language']
);
$template_datas['language_list'] = array();
foreach($this->my_config['amm_links_title'] as $key => $val)
{
$template_datas['language_list'][] = array(
'LANG' => $key,
'MENUBARTIT' => base64_decode($val)
);
}
$lang=get_languages();
foreach($lang as $key => $val)
{
$template_datas['language_list_values'][] = $key;
$template_datas['language_list_labels'][] = $val;
}
$template_datas['yesno_values'] = array('y','n');
$template_datas['yesno_labels'][] = l10n('g002_yesno_y');
$template_datas['yesno_labels'][] = l10n('g002_yesno_n');
$template->assign("datas", $template_datas);
$template->assign_var_from_handle('AMM_BODY_PAGE', 'body_page');
}
/*
manage display for urls create/modify page
*/
private function display_links_manage_page($modeedit = 'create', $urlid=0)
{
global $template, $user;
$template->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_linkslist_edit.tpl');
$extensions_list=array('jpg'=>0,'jpeg'=>0,'gif'=>0,'png'=>0);
$template_icons_list=array();
$directory=dir(dirname($this->filelocation).'/links_pictures/');
while($file=$directory->read())
{
if(isset($extensions_list[get_extension(strtolower($file))]))
{
$template_icons_list[]=$file;
}
}
if($modeedit=='modify')
{
$url=$this->get_url($urlid);
$template_datas=array(
'id' => $urlid,
'modeedit' => 'modify',
'label' => $url['label'],
'url' => $url['url'],
'icons_selected' => $url['icon'],
'mode_selected' => $url['mode'],
'visible_selected' => $url['visible']
);
}
else
{
$template_datas=array(
'id' => '',
'modeedit' => 'create',
'label' => '',
'url' => '',
'icons_selected' => $template_icons_list[0],
'mode_selected' => 0,
'visible_selected' => 'y'
);
}
$template_datas['lnk_list'] = $this->page_link.'&amp;fAMM_tabsheet=links';
$template_datas['icons_img'] = AMM_PATH."links_pictures/".$template_datas['icons_selected'];
$template_datas['icons_values'] = array();
foreach($template_icons_list as $key => $val)
{
$template_datas['icons_values'][] = array(
'img' => AMM_PATH."links_pictures/".$val,
'value' => $val,
'label' => $val
);
}
$template_datas['mode_values'] = array(0,1);
$template_datas['mode_labels'][] = l10n("g002_mode_".$this->urls_modes[0]);
$template_datas['mode_labels'][] = l10n("g002_mode_".$this->urls_modes[1]);
$template_datas['visible_values'] = array('y','n');
$template_datas['visible_labels'][] = l10n('g002_yesno_y');
$template_datas['visible_labels'][] = l10n('g002_yesno_n');
$template->assign("datas", $template_datas);
$template->assign_var_from_handle('AMM_BODY_PAGE', 'body_page');
}
/*
manage create/modify url into database and display result
*/
protected function action_create_modify_url()
{
$datas=array(
'id' => $_POST['famm_id'],
'label' => $_POST['famm_label'],
'url' => $_POST['famm_url'],
'mode' => $_POST['famm_mode'],
'icon' => $_POST['famm_icon'],
'position' => 0,
'visible' => $_POST['famm_visible']
);
switch($_POST['famm_modeedit'])
{
case 'create':
$this->add_url($datas);
break;
case 'modify':
$this->modify_url($datas);
}
}
/*
manage urls config save into database
*/
protected function action_modify_config()
{
$this->my_config['amm_links_show_icons']=$_POST['famm_links_show_icons'];
$this->my_config['amm_links_active']=$_POST['famm_links_active'];
$languages=get_languages();
foreach($languages as $key => $val)
{
$this->my_config['amm_links_title'][$key]=base64_encode(stripslashes($_POST['famm_links_title_'.$key]));
}
$this->save_config();
}
/*
manage display for sections table page
*/
private function display_sections_list_page()
{
global $template, $user;
$template->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_sectionslist.tpl');
$template_datas=array(
'AMM_AJAX_URL_LIST' => $this->page_link."&ajaxfct=",
);
$template->assign("datas", $template_datas);
$template->assign_var_from_handle('AMM_BODY_PAGE', 'body_page');
}
/*
manage adviser profile
return true if user is adviser
*/
protected function adviser_abort()
{
if(is_adviser())
{
$this->display_result(l10n("g002_adviser_not_allowed"), false);
return(true);
}
return(false);
}
/* ---------------------------------------------------------------------------
functions to manage urls tables
--------------------------------------------------------------------------- */
// protected function get_urls()
// protected function get_count_url()
// => defined in root class
// return properties of an given url
private function get_url($url_id)
{
$returned=array();
$sql="SELECT * FROM ".$this->tables['urls']." WHERE id = '".$url_id."'";
$result=pwg_query($sql);
if($result)
{
$returned=mysql_fetch_array($result);
}
return($returned);
}
// permut position of two 2 urls
private function permut_url($url_id, $url_permut)
{
$sql="SELECT id, position FROM ".$this->tables['urls']." WHERE id IN ('".$url_id."','".$url_permut."')";
$result=pwg_query($sql);
if($result)
{
$tmp=array();
while($row=mysql_fetch_array($result))
{
$tmp[$row['id']]=$row['position'];
}
$sql="UPDATE ".$this->tables['urls']." SET position = ".$tmp[$url_id]." WHERE id = '".$url_permut."'";
pwg_query($sql);
$sql="UPDATE ".$this->tables['urls']." SET position = ".$tmp[$url_permut]." WHERE id = '".$url_id."'";
pwg_query($sql);
}
}
// delete an url
private function delete_url($url_id)
{
$sql="DELETE FROM ".$this->tables['urls']." WHERE id = '".$url_id."' ";
return(pwg_query($sql));
}
// add an url
private function add_url($datas)
{
$numurl=$this->get_count_url();
$sql="INSERT INTO ".$this->tables['urls']." (id, label, url, mode, icon, position, visible)
VALUES ('', '".addslashes($datas['label'])."', '".$datas['url']."', '".$datas['mode']."',
'".$datas['icon']."', '".$numurl."', '".$datas['visible']."')";
return(pwg_query($sql));
}
// modify an url
private function modify_url($datas)
{
$sql="UPDATE ".$this->tables['urls']." SET label = '".addslashes($datas['label'])."',
url = '".$datas['url']."', mode = '".$datas['mode']."', icon = '".$datas['icon']."',
visible = '".$datas['visible']."'
WHERE id = '".$datas['id']."'";
return(pwg_query($sql));
}
// just modify url visibility
private function set_url_visibility($urlid, $visible)
{
$sql="UPDATE ".$this->tables['urls']." SET visible = '".$visible."'
WHERE id = '".$urlid."'";
return(pwg_query($sql));
}
/* ---------------------------------------------------------------------------
ajax functions
--------------------------------------------------------------------------- */
// return a html formatted list of urls
private function ajax_amm_links_list()
{
global $template, $user;
$local_tpl = new Template(AMM_PATH."admin/", "");
$local_tpl->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_linkslist_detail.tpl');
$template_datas['urls']=array();
$urls=$this->get_urls();
for($i=0;$i<count($urls);$i++)
{
$template_datas['urls'][]=array(
'img' => AMM_PATH."links_pictures/".$urls[$i]['icon'],
'label' => $urls[$i]['label'],
'url' => $urls[$i]['url'],
'mode' => l10n("g002_mode_".$this->urls_modes[$urls[$i]['mode']]),
'up' => ($i==0)?false:true,
'down' => ($i<(count($urls)-1))?true:false,
'edit' => $this->page_link.'&amp;fAMM_tabsheet=links&amp;action=modify&amp;fItem='.$urls[$i]['id'],
'ID' => $urls[$i]['id'],
'IDPREV' => ($i==0)?0:$urls[$i-1]['id'],
'IDNEXT' => ($i<(count($urls)-1))?$urls[$i+1]['id']:0,
'visible' => l10n('g002_yesno_'.$urls[$i]['visible'])
);
}
$themeconf=array(
'icon_dir' => $template->get_themeconf('icon_dir')
);
$local_tpl->assign('themeconf', $themeconf);
$local_tpl->assign('datas', $template_datas);
$local_tpl->assign('plugin', array('PATH' => AMM_PATH));
return($local_tpl->parse('body_page', true));
}
// permut position of 2 urls and returns a html formatted list of urls
private function ajax_amm_links_permut($urlid, $urlpermut)
{
$this->permut_url($urlid, $urlpermut);
return($this->ajax_amm_links_list());
}
// delete an url and returns a html formatted list of urls
private function ajax_amm_links_delete($urlid)
{
if(!$this->adviser_abort())
{
$this->delete_url($urlid);
}
return($this->ajax_amm_links_list());
}
// return a html formatted list of menu's sections
private function ajax_amm_section_list()
{
global $menu;
$local_tpl = new Template(AMM_PATH."admin/", "");
$local_tpl->set_filename('body_page',
dirname($this->filelocation).'/admin/amm_sectionslist_detail.tpl');
$sections=$menu->registered();
$i=0;
foreach($sections as $key => $val)
{
$template_datas['sections'][]=array(
'OWNER' => $val['OWNER'],
'NAME' => l10n($val['NAME']),
'ID' => $key,
'VISIBLE' => l10n('g002_yesno_'.$this->my_config['amm_sections_visible'][$key]),
'POSITION' => $val['POSITION'],
'NEXTPOS' => $val['POSITION']+2,
'PREVPOS' => $val['POSITION']-1,
'up' => ($i==0)?false:true,
'down' => ($i<(count($sections)-1))?true:false
);
$i++;
}
$local_tpl->assign('datas', $template_datas);
$local_tpl->assign('plugin', array('PATH' => AMM_PATH));
return($local_tpl->parse('body_page', true));
}
// move item to the specified position
private function ajax_amm_section_position($urlid, $position)
{
global $menu;
$menu->register_position($urlid, $position);
return($this->ajax_amm_section_list());
}
// move item to the specified position
private function ajax_amm_section_showhide($urlid)
{
global $menu;
$switchvisible=array('y'=>'n', 'n'=>'y');
$this->my_config['amm_sections_visible'][$urlid]=$switchvisible[$this->my_config['amm_sections_visible'][$urlid]];
$this->save_config();
return($this->ajax_amm_section_list());
}
} // AMM_AIP class
?>

View file

@ -0,0 +1,84 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
MyPolls_Install : classe to manage plugin install
--------------------------------------------------------------------------- */
@include_once('amm_root.class.inc.php');
include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/tables.class.inc.php');
class AMM_install extends AMM_root
{
private $tablef;
private $exportfile;
public function AMM_install($prefixeTable, $filelocation)
{
parent::__construct($prefixeTable, $filelocation);
$this->tablef= new manage_tables($this->tables);
$this->exportfile=dirname($this->filelocation).'/'.$this->plugin_name_files.'.sql';
}
/*
function for installation process
return true if install process is ok, otherwise false
*/
public function install()
{
$tables_def=array(
"CREATE TABLE `".$this->tables['urls']."` (
`id` int(11) NOT NULL auto_increment,
`label` varchar(50) NOT NULL default '',
`url` varchar(255) NOT NULL default '',
`mode` int(11) NOT NULL default '0',
`icon` varchar(50) NOT NULL default '',
`position` int(11) NOT NULL default '0',
`visible` char(1) NOT NULL default 'y',
PRIMARY KEY (`id`),
KEY `order_key` (`position`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1"
);
//$table_def array
$result=$this->tablef->create_tables($tables_def);
return($result);
}
/*
function for uninstall process
*/
public function uninstall()
{
$this->tablef->export($this->exportfile);
$this->delete_config();
$this->tablef->drop_tables();
}
public function activate()
{
global $template;
$this->init_config();
$this->load_config();
$this->save_config();
}
public function deactivate()
{
}
} //class
?>

View file

@ -0,0 +1,92 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
PIP classe => manage integration in public interface
--------------------------------------------------------------------------- */
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
include_once(PHPWG_PLUGINS_PATH.'AMenuManager/amm_root.class.inc.php');
class AMM_PIP extends AMM_root
{
function AMM_PIP($prefixeTable, $filelocation)
{
parent::__construct($prefixeTable, $filelocation);
$this->load_config();
$this->init_events();
}
/* ---------------------------------------------------------------------------
Public classe functions
--------------------------------------------------------------------------- */
/*
initialize events call for the plugin
*/
public function init_events()
{
add_event_handler('loc_begin_menubar', array(&$this, 'modify_menu') );
}
/* ---------------------------------------------------------------------------
protected classe functions
--------------------------------------------------------------------------- */
public function modify_menu()
{
global $menu, $user;
/*
Add a new section (links)
*/
$urls=$this->get_urls(true);
if(($this->my_config['amm_links_active']=='y')and(count($urls)>0))
{
if($this->my_config['amm_links_show_icons']=='y')
{
for($i=0;$i<count($urls);$i++)
{
$urls[$i]['icon']=AMM_PATH."links_pictures/".$urls[$i]['icon'];
}
}
$section = new Section('mbAMM_links', base64_decode($this->my_config['amm_links_title'][$user['language']]), dirname(__FILE__).'/menu_templates/menubar_links.tpl');
$section->set_items(array(
'LINKS' => $urls,
'icons' => 'y'
));
$menu->add($section->get());
}
/*
Hide sections
*/
foreach($this->my_config['amm_sections_visible'] as $key => $val)
{
if($val=='n')
{
$menu->remove($key);
}
}
}
} // AMM_PIP class
?>

View file

@ -0,0 +1,113 @@
<?php
/* -----------------------------------------------------------------------------
Plugin : Advanced Menu Manager
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
See main.inc.php for release information
AMM_root : root classe for plugin
--------------------------------------------------------------------------- */
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/common_plugin.class.inc.php');
class AMM_root extends common_plugin
{
function AMM_root($prefixeTable, $filelocation)
{
$this->plugin_name="Advanced Menu Manager";
$this->plugin_name_files="amm";
parent::__construct($prefixeTable, $filelocation);
$list=array('urls');
$this->set_tables_list($list);
}
/* ---------------------------------------------------------------------------
common AIP & PIP functions
--------------------------------------------------------------------------- */
/* this function initialize var $my_config with default values */
public function init_config()
{
global $menu;
$this->my_config=array(
'amm_links_show_icons' => 'y',
'amm_links_active' => 'y',
'amm_links_title' => array(),
'amm_sections_visible' => array()
);
$languages=get_languages();
foreach($languages as $key => $val)
{
if($key=='fr_FR')
{
$this->my_config['amm_links_title'][$key]='Liens';
}
else
{
$this->my_config['amm_links_title'][$key]='Links';
}
}
$sections=$menu->registered();
foreach($sections as $key => $val)
{
$this->my_config['amm_sections_visible'][$key]='y';
}
}
// return an array of urls (each url is an array)
protected function get_urls($only_visible=false)
{
$returned=array();
$sql="SELECT * FROM ".$this->tables['urls'];
if($only_visible)
{
$sql.=" WHERE visible = 'y' ";
}
$sql.=" ORDER BY position";
$result=pwg_query($sql);
if($result)
{
while($row=mysql_fetch_array($result))
{
$returned[]=$row;
}
}
return($returned);
}
//return number of url
protected function get_count_url($only_visible=false)
{
$returned=0;
$sql="SELECT count(id) FROM ".$this->tables['urls'];
if($only_visible)
{
$sql.=" WHERE visible = 'y' ";
}
$result=pwg_query($sql);
if($result)
{
$tmp=mysql_fetch_row($result);
$returned=$tmp[0];
}
return($returned);
}
} // amm_root class
?>

33
plugins/AMenuManager/index.php Executable file
View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

View file

@ -0,0 +1,58 @@
<?php
$lang['Grum Plugin Classes is not installed'] = 'Plugin <b>Grum Plugin Classes</b> in not installed';
$lang['g002_title_page'] = 'Advanced Menu Management';
$lang['g002_version'] = 'r';
$lang['g002_error_invalid_ajax_call'] = "Invalid function call !";
$lang['g002_setmenu'] = 'Menu management';
$lang['g002_addlinks'] = 'Links';
$lang['g002_randompict'] = 'Random picture';
$lang['g002_personnalblock'] = 'Personalised menu';
$lang['g002_setmenu_nfo'] = 'Management of displayed menu\'s blocks';
$lang['g002_addlinks_nfo'] = 'Menu\'s block allowing to display a list of hyperlink';
$lang['g002_randompict_nfo'] = 'Menu\'s block allowing to display a random picture from the gallery';
$lang['g002_personnalblock_nfo'] = 'Display personalised blocks into menu';
$lang['g002_mode_new_window'] = 'New window';
$lang['g002_mode_current_window'] = 'Current window';
$lang['g002_addlink'] = 'Add a link';
$lang['g002_label'] = 'Label';
$lang['g002_url'] = 'URL';
$lang['g002_mode'] = 'Mode';
$lang['g002_icon'] = 'Representative picture';
$lang['g002_visible'] = 'Visible';
$lang['g002_linkslist'] = "Links list";
$lang['g002_confirm_delete_link'] = "Delete link ?";
$lang['g002_nolinks'] = 'No links';
$lang['g002_link'] = 'link';
$lang['g002_links'] = 'links';
$lang['g002_createoflink'] = 'Add link';
$lang['g002_editoflink'] = 'Edit link';
$lang['g002_createthelink'] = 'Add link';
$lang['g002_editthelink'] = 'Edit link';
$lang['g002_configlinks'] = 'Links settings';
$lang['g002_setting_link_block_menu'] = 'Menu integration';
$lang['g002_setting_link_links']='Links';
$lang['g002_setting_link_show_icon'] = 'Display links representative picture';
$lang['g002_setting_link_block_active'] = 'Display block in menu';
$lang['g002_setting_link_block_title'] = 'Block title';
$lang['g002_apply'] = 'Apply';
$lang['g002_sectionslist'] = 'Menu\'s blocks';
$lang['g002_yesno_y'] = 'Yes';
$lang['g002_yesno_n'] = 'No';
$lang['g002_owner'] = 'Owner';
$lang['g002_sectionid'] = 'Identifier';
$lang['g002_name'] = 'Label';
?>

View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

View file

@ -0,0 +1,58 @@
<?php
$lang['Grum Plugin Classes is not installed'] = 'Le plugin <b>Grum Plugin Classes</b> n\'est pas installé';
$lang['g002_title_page'] = 'Gestion avancée du menu';
$lang['g002_version'] = 'v';
$lang['g002_error_invalid_ajax_call'] = "Appel de fonction invalide !";
$lang['g002_setmenu'] = 'Gestion du menu';
$lang['g002_addlinks'] = 'Liens';
$lang['g002_randompict'] = 'Image aléatoire';
$lang['g002_personnalblock'] = 'Menu personnalisé';
$lang['g002_setmenu_nfo'] = 'Gestion de l\'affichage des sections affichées dans le menu';
$lang['g002_addlinks_nfo'] = 'Section permettant d\'afficher dans le menu une liste d\'hyperliens vers d\'autres sites internet';
$lang['g002_randompict_nfo'] = 'Section permettant d\'afficher dans le menu une image prise au hasard dans la gallerie';
$lang['g002_personnalblock_nfo'] = 'Afficher dans le menu des sections au contenu personnalisés';
$lang['g002_mode_new_window'] = 'Nouvelle fenêtre';
$lang['g002_mode_current_window'] = 'Fenêtre courante';
$lang['g002_addlink'] = 'Ajouter un lien';
$lang['g002_label'] = 'Libellé';
$lang['g002_url'] = 'URL';
$lang['g002_mode'] = 'Mode';
$lang['g002_icon'] = 'Image';
$lang['g002_visible'] = 'Visible';
$lang['g002_linkslist'] = "Liste des liens";
$lang['g002_confirm_delete_link'] = "Supprimer le lien ?";
$lang['g002_nolinks'] = 'Pas de liens';
$lang['g002_link'] = 'lien';
$lang['g002_links'] = 'liens';
$lang['g002_createoflink'] = 'Ajout d\'un lien';
$lang['g002_editoflink'] = 'Modification d\'un lien';
$lang['g002_createthelink'] = 'Ajouter le lien';
$lang['g002_editthelink'] = 'Modifier le lien';
$lang['g002_configlinks'] = 'Configuration des liens';
$lang['g002_setting_link_block_menu'] = 'Intégration dans le menu';
$lang['g002_setting_link_links']='Liens';
$lang['g002_setting_link_show_icon'] = 'Afficher les icônes de liens';
$lang['g002_setting_link_block_active'] = 'Afficher la section dans le menu';
$lang['g002_setting_link_block_title'] = 'Titre de la section dans le menu';
$lang['g002_apply'] = 'Appliquer';
$lang['g002_sectionslist'] = 'Sections du menu';
$lang['g002_yesno_y'] = 'Oui';
$lang['g002_yesno_n'] = 'Non';
$lang['g002_owner'] = 'Propriétaire';
$lang['g002_sectionid'] = 'Identifiant';
$lang['g002_name'] = 'Libellé';
?>

View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

View file

@ -0,0 +1,66 @@
<?php
/*
Plugin Name: Advanced Menu Manager
Version: 1.0.0
Description: Gestion avancée du menu / Advanced management of menu
Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=
*/
/*
--------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
--------------------------------------------------------------------------------
:: HISTORY
1.0.0 - 27/07/08 -
:: TO DO
--------------------------------------------------------------------------------
:: NFO
AMM_AIM : classe to manage plugin integration into plugin menu
AMM_AIP : classe to manage plugin admin pages
AMM_PIP : classe to manage plugin public integration
--------------------------------------------------------------------------------
*/
// pour faciliter le debug :o)
ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);
if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
define('AMM_DIR' , basename(dirname(__FILE__)));
define('AMM_PATH' , PHPWG_PLUGINS_PATH . AMM_DIR . '/');
define('AMM_VERSION' , '1.0.0'); // => ne pas oublier la version dans l'entête !!
global $prefixeTable, $menu;
if(basename($_SERVER["PHP_SELF"])=='admin.php')
{
//AMM admin part loaded and active only if in admin page
include_once("amm_aim.class.inc.php");
$obj = new AMM_AIM($prefixeTable, __FILE__);
$obj->init_events();
set_plugin_data($plugin['id'], $obj);
}
else
{
//AMM public part loaded and active only if in admin page
include_once("amm_pip.class.inc.php");
$obj = new AMM_PIP($prefixeTable, __FILE__);
set_plugin_data($plugin['id'], $obj);
}
?>

View file

@ -0,0 +1,66 @@
<?php
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);
define('AMM_DIR' , basename(dirname(__FILE__)));
define('AMM_PATH' , PHPWG_PLUGINS_PATH . AMM_DIR . '/');
@include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/tables.class.inc.php');
global $gpc_installed, $lang; //needed for plugin manager compatibility
$gpc_installed=false;
if(file_exists(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/common_plugin.class.inc.php'))
{
@include_once("amm_install.class.inc.php");
$gpc_installed=true;
}
load_language('plugin.lang', AMM_PATH);
function plugin_install($plugin_id, $plugin_version, &$errors)
{
global $prefixeTable, $gpc_installed, $menu;
if($gpc_installed)
{
$menu->register('mbAMM_links', 'Links', 0, 'AMM');
$menu->register('mbAMM_randompict', 'Random pictures', 0, 'AMM');
$amm=new AMM_install($prefixeTable, __FILE__);
$result=$amm->install();
}
else
{
array_push($errors, l10n('Grum Plugin Classes is not installed'));
}
}
function plugin_activate($plugin_id, $plugin_version, &$errors)
{
}
function plugin_deactivate($plugin_id)
{
}
function plugin_uninstall($plugin_id)
{
global $prefixeTable, $gpc_installed, $menu;
if($gpc_installed)
{
$menu->unregister('mbAMM_links');
$menu->unregister('mbAMM_randompict');
$amm=new AMM_install($prefixeTable, __FILE__);
$result=$amm->uninstall();
}
else
{
array_push($errors, l10n('Grum Plugin Classes is not installed'));
}
}
?>

View file

@ -0,0 +1,16 @@
<!-- links menu bar -->
{if $section.NAME!=""}
<dt>{$section.NAME|@translate}</dt>
{/if}
<dd>
<ul>
{foreach from=$section.ITEMS.LINKS item=link}
<li>
{if $section.ITEMS.icons=='y'}<img src='{$link.icon}' style="position:relative;top:3px;"/>{/if}
<a href="{$link.url}"
{if $link.mode == 0} target = '_blank' {/if}>{$link.label}</a>
</li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,56 @@
<?php
/* -----------------------------------------------------------------------------
class name: ajax
class version: 2.0
date: 2008-07-20
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to add ajax.js file into html page ;
just instanciate an ajax object, and call return_result
$ajax_content_to_be_returned = "...............";
$ajax = new ajax();
$ajax->return_result($ajax_content_to_be_returned);
- constructor ajax()
- function return_result($str)
---------------------------------------------------------------------- */
class ajax
{
function ajax()
{
add_event_handler('loc_end_page_header', array(&$this, 'load_JS'));
}
function load_JS()
{
global $template;
$name='plugins/'.basename(dirname(__FILE__)).'/ajax.js';
$template->append('head_elements', '<script src="'.$name.'" type="text/javascript"></script>');
}
function return_result($str)
{
//$chars=get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES);
$chars['<']='<';
$chars['>']='>';
$chars['&']='&';
exit(strtr($str, $chars));
}
} //class
/*
it's better to make $ajax instance into the plugin object, otherwise an object
made here cannot be acceeded..
*/
//$ajax=new ajax();
?>

View file

@ -0,0 +1,104 @@
/* -----------------------------------------------------------------------------
file: ajax.js
file version: 1.1.0
date: 2008-05-25
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to add ajax into html page
+ create_httpobject provide a simple function to create an HTML request to a
server ; return an XMLHttpRequest object (or compatible object for IE)
+ tHttpObject is a class providing :
- an XMLHttpRequest object
-
------------------------------------------------------------------------------
HISTORY VERSION
v1.0.1 + [create_httpobject] overrideMimeType unknown by IE 7.0 ;
v1.1.0 + add create_httpobject2 with mimetype parameter
-------------------------------------------------------------------------- */
function create_httpobject(requesttype, charset, ajaxurl, async)
{
return(create_httpobject2(requesttype, charset, ajaxurl, async, ''));
}
function create_httpobject2(requesttype, charset, ajaxurl, async, mimetype)
{
if (window.XMLHttpRequest)
{
// IE7 & FF method
http_request = new XMLHttpRequest();
}
else
{
//Other IE method.....
if (window.ActiveXObject)
{
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
window.alert("Your browser is unable to use XMLHTTPRequest");
} // try-catch
} // try-catch
}
} // if-else
if(charset=='') { charset='utf-8'; }
http_request.onreadystatechange = function() { };
http_request.open(requesttype.toUpperCase(), ajaxurl, async);
if(mimetype=='')
{
mimetype='text/html';
}
try
{
http_request.overrideMimeType(mimetype+'; charset='+charset);
}
catch(e)
{
}
if(requesttype.toUpperCase()=='POST')
{
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}
//method to restitute an XML object ; needed for compatibility between FF&IE
http_request.XML = httpobject_responseXML;
return(http_request);
}
function httpobject_responseXML()
{
if (document.implementation && document.implementation.createDocument)
{
//ff method
return(this.responseXML);
}
else
{
//ie method
return(xmlCreateFromString(this.responseText));
}
}

View file

@ -0,0 +1,209 @@
<?php
/* -----------------------------------------------------------------------------
class name: common_plugin
class version: 2.0
date: 2008-07-13
------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
this class provides base functions to manage a plugin
public
ADMINISTRATION RELATED
- manage()
- plugin_admin_menu($menu)
INITIALIZATION RELATED
- init_events()
CONFIG RELATED
- get_filelocation()
- get_admin_link()
- init_config()
- load_config()
- save_config()
- delete_config()
protected
INITIALIZATION RELATED
- set_tables_list($list)
------------------------------------------------------------------------------
:: HISTORY
2.0.0 - 2008-07-13
migrate to piwigo 2.0 ; use of PHP5 classes possibilities
--------------------------------------------------------------------------- */
class common_plugin
{
protected $prefixeTable; // prefixe for tables names
protected $page_link; //link to admin page
protected $filelocation; //files plugin location on server
protected $display_result_ok;
protected $display_result_ko;
protected $plugin_name; // used for interface display
protected $plugin_name_files; // used for files
protected $plugin_admin_file = "plugin_admin";
protected $tables; // list of all tables names used by plugin
public $my_config; // array of config parameters
/* constructor allows to initialize $prefixeTable value */
public function common_plugin($prefixeTable, $filelocation)
{
$this->filelocation=$filelocation;
$this->prefixeTable=$prefixeTable;
$this->page_link="admin.php?page=plugin&section=". basename(dirname($this->filelocation))."/admin/".$this->plugin_admin_file.".php";
//$this->page_link=get_admin_plugin_menu_link($filelocation);
$this->init_config();
$this->display_result_ok="OK";
$this->display_result_ko="KO";
}
public function get_filelocation()
{
return($this->filelocation);
}
public function get_admin_link()
{
return($this->page_link);
}
/* ---------------------------------------------------------------------------
CONFIGURATION RELATED FUNCTIONS
--------------------------------------------------------------------------- */
/* this function initialize var $my_config with default values */
public function init_config()
{
$this->my_config=array();
}
/* load config from CONFIG_TABLE into var $my_config */
public function load_config()
{
$this->init_config();
$sql="SELECT value FROM ".CONFIG_TABLE."
WHERE param = '".$this->plugin_name_files."_config'";
$result=pwg_query($sql);
if($result)
{
$row=mysql_fetch_row($result);
if(is_string($row[0]))
{
$config = unserialize($row[0]);
reset($config);
while (list($key, $val) = each($config))
{ $this->my_config[$key] =$val; }
}
}
}
/* save var $my_config into CONFIG_TABLE */
public function save_config()
{
$sql="REPLACE INTO ".CONFIG_TABLE."
VALUES('".$this->plugin_name_files."_config', '"
.serialize($this->my_config)."', '')";
$result=pwg_query($sql);
if($result)
{ return true; }
else
{ return false; }
}
/* delete config from CONFIG_TABLE */
public function delete_config()
{
$sql="DELETE FROM ".CONFIG_TABLE."
WHERE param='".$this->plugin_name_files."_config'";
$result=pwg_query($sql);
if($result)
{ return true; }
else
{ return false; }
}
/* ---------------------------------------------------------------------------
PLUGIN INITIALIZATION RELATED FUNCTIONS
--------------------------------------------------------------------------- */
/*
initialize tables list used by the plugin
$list = array('table1', 'table2')
$this->tables_list['table1'] = $prefixeTable.$plugin_name.'_table1'
*/
protected function set_tables_list($list)
{
for($i=0;$i<count($list);$i++)
{
$this->tables[$list[$i]]=$this->prefixeTable.$this->plugin_name_files.'_'.$list[$i];
}
}
/* ---------------------------------------------------------------------------
ADMINISTRATOR CONSOLE RELATED FUNCTIONS
--------------------------------------------------------------------------- */
/* add plugin into administration menu */
public function plugin_admin_menu($menu)
{
array_push($menu,
array(
'NAME' => $this->plugin_name,
'URL' => get_admin_plugin_menu_link(dirname($this->filelocation).
'/admin/'.$this->plugin_admin_file.'.php')
));
return $menu;
}
/*
manage plugin integration into piwigo's admin interface
to be surcharged by child's classes
*/
public function manage()
{
}
/*
intialize plugin's events
to be surcharged by child's classes
*/
public function init_events()
{
}
protected function debug($text)
{
global $page;
array_push($page['infos'], "DEBUG MODE: ".$text);
}
/*
manage infos & errors display
*/
protected function display_result($action_msg, $result)
{
global $page;
if($result)
{
array_push($page['infos'], $action_msg);
array_push($page['infos'], $this->display_result_ok);
}
else
{
array_push($page['errors'], $action_msg);
array_push($page['errors'], $this->display_result_ko);
}
}
} //class common_plugin
?>

View file

@ -0,0 +1,76 @@
<?php
/* -----------------------------------------------------------------------------
class name: css
class version: 2.0
date: 2008-07-13
------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
this classes provides base functions to manage css
classe consider that $filename is under plugins/ directory
- constructor css($filename)
- (public) function css_file_exists()
- (public) function make_CSS($css)
- (public) function apply_CSS()
---------------------------------------------------------------------- */
class css
{
private $filename;
public function css($filename)
{
$this->filename=$filename;
}
/*
make the css file
*/
public function make_CSS($css)
{
if($css!="")
{
$handle=fopen($this->filename, "w");
if($handle)
{
fwrite($handle, $css);
fclose($handle);
}
}
}
/*
return true if css file exists
*/
public function css_file_exists()
{
return(file_exists($this->filename));
}
/*
put a link in the template to load the css file
this function have to be called in a 'loc_end_page_header' trigger
if $text="", insert link to css file, otherwise insert directly a <style> markup
*/
public function apply_CSS()
{
global $template;
if($this->css_file_exists())
{
$template->append('head_elements', '<link rel="stylesheet" type="text/css" href="plugins/'.basename(dirname($this->filename))."/".basename($this->filename).'">');
}
}
} //class
?>

View file

@ -0,0 +1,41 @@
<?php
/* -----------------------------------------------------------------------------
class name: genericjs
class version: 2.0
date: 2008-07-20
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to add genericjs.js file into html page
> see genericjs.js file to know javascript functions added
- constructor genericjs()
---------------------------------------------------------------------- */
class genericjs
{
function genericjs()
{
add_event_handler('loc_end_page_header', array(&$this, 'load_JS'));
}
function load_JS()
{
global $template;
$name='plugins/'.basename(dirname(__FILE__)).'/genericjs.js';
$template->append('head_elements', '<script src="'.$name.'" type="text/javascript"></script>');
}
} //class
$genericjs=new genericjs();
?>

View file

@ -0,0 +1,49 @@
/* -----------------------------------------------------------------------------
file: genricjs.js
file version: 1.0
date: 2008-01-02
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to make easiest a compliant code with
FF2.0 & IE7.0
------------------------------------------------------------------------------
HISTORY VERSION
-------------------------------------------------------------------------- */
/*
this is an implementation of the function <indexOf> to the Array class, as
defined in the ECMA-262 standard
for more information, see at http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:Array:indexOf
not implemented in IE 7.0
*/
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}

View file

@ -0,0 +1,47 @@
/* -----------------------------------------------------------------------------
file: google_translate.js
file version: 2.0.0
date: 2008-05-25
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to use Google Translate AJAX API
>> http://code.google.com/apis/ajaxlanguage/
------------------------------------------------------------------------------
HISTORY VERSION
v2.0.0 +
-------------------------------------------------------------------------- */
google.load("language", "1");
var global_google_translate_plugin_objdest;
var global_google_translate_plugin_objproperty;
function google_translate(text, pfrom, pto, objdest, objproperty)
{
global_google_translate_plugin_objdest = objdest;
global_google_translate_plugin_objproperty = objproperty;
google.language.translate(text, pfrom, pto, google_translate_do);
}
function google_translate_do(result)
{
if (!result.error)
{
if(global_google_translate_plugin_objproperty=='value')
{
global_google_translate_plugin_objdest.value = result.translation;
}
else if(global_google_translate_plugin_objproperty=='innerHTML')
{
global_google_translate_plugin_objdest.innerHTML = result.translation;
}
}
}

View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

View file

@ -0,0 +1,50 @@
<?php
/*
Plugin Name: Grum Plugins Classes.2
Version: 2.0.0
Description: Collection de classes partagées entre mes plugins (existants, ou à venir) / Partaged classes between my plugins (actuals or futures)
Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=199
*/
/*
--------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
--------------------------------------------------------------------------------
:: HISTORY
2.0.0 - 20/07/08 +convert classes for piwigo 2.0
:: TO DO
:: WHAT ? WHY ?
This plugin doesn't do anything itself. It just provide classes for others plugins.
Classes version for this package
ajax.class.php -v2.0 + ajax.js -v1.0.1
common_plugin.class.php -v2.0
css.class.php -v2.0
pages_navigation.class.php -v1.0
public_integration.class.php -v1.0
tables.class.php -v1.3
tabsheets.class.inc.php -v1.1
translate.class.inc.php -v2.0.0 + google_translate.js -v2.0.0
users_groups.class.inc.php -v1.0
genericjs.class.inc.php -v1.0 + genericjs.js -v1.0
See each file to know more about them
--------------------------------------------------------------------------------
*/
if(!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
define('GPC_DIR' , basename(dirname(__FILE__)));
define('GPC_PATH' , PHPWG_PLUGINS_PATH . GPC_DIR . '/');
define('GPC_VERSION' , '2.0.0');
?>

View file

@ -0,0 +1,26 @@
<?php
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
// ini_set('error_reporting', E_ALL);
// ini_set('display_errors', true);
function plugin_install($plugin_id, $plugin_version, &$errors)
{
}
function plugin_activate($plugin_id, $plugin_version, &$errors)
{
}
function plugin_deactivate($plugin_id)
{
}
function plugin_uninstall($plugin_id)
{
}
?>

View file

@ -0,0 +1,294 @@
<?php
/* -----------------------------------------------------------------------------
class name: pages_navigation
class version: 1.0
date: 2007-11-17
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to manage pages navigation
- constructor pages_navigation($url)
- (public) function set_nb_items($nbitems)
- (public) function get_nb_items()
- (public) function set_nb_items_per_page($nbitems)
- (public) function get_nb_items_per_page()
- (public) function get_nb_pages()
- (public) function set_current_page($page)
- (public) function get_current_page()
- (public) function set_base_url($url)
- (public) function get_base_url()
- (public) function make_navigation()
- (public) function make_navigation_function()
- (private) function calc_nb_pages()
---------------------------------------------------------------------- */
class pages_navigation
{
var $nbitems;
var $nbitemsperpages;
var $nbpages;
var $currentpage;
var $baseurl;
var $pagevarurl;
var $options;
function pages_navigation()
{
$this->nbitems=0;
$this->nbitemsperpages=0;
$this->nbpages=0;
$this->currentpage=0;
$this->baseurl='';
$this->pagevarurl='';
$this->options=array(
'prev_next' => true,
'first_last' => true,
'display_all' => true,
'number_displayed' => 2 //number of page displayed before and after current page
);
}
/*
define value for total number of items
*/
function set_nb_items($nbitems)
{
if($nbitems!=$this->nbitems)
{
$this->nbitems=$nbitems;
$this->calc_nb_pages();
}
return($nbitems);
}
function get_nb_items()
{
return($nbitems);
}
/*
define value for number of items displayed per pages
*/
function set_nb_items_per_page($nbitems)
{
if(($nbitems!=$this->nbitemsperpages)&&($nbitems>0))
{
$this->nbitemsperpages=$nbitems;
$this->calc_nb_pages();
}
return($this->nbitemsperpages);
}
function get_nb_items_per_page()
{
return($this->nbitemsperpages);
}
/*
return numbers of pages
*/
function get_nb_pages()
{
return($this->nbpages);
}
/*
define the current page number
*/
function set_current_page($page)
{
if(($page!=$this->currentpage)&&($page<=$this->nbpages)&&($page>0))
{
$this->currentpage=$page;
}
return($this->currentpage);
}
/*
returns the current page number
*/
function get_current_page()
{
return($this->currentpage);
}
/*
define the value for url
ex: "http://mysite.com/admin.php?var1=xxx&var2=xxx"
*/
function set_base_url($url)
{
if($url!=$this->baseurl)
{
$this->baseurl=$url;
}
return($this->baseurl);
}
function get_base_url()
{
return($this->baseurl);
}
/*
define the value for variables's name
ex: url = "http://mysite.com/admin.php?var1=xxx&var2=xxx"
pagevar = "pagenumber"
url made is "http://mysite.com/admin.php?var1=xxx&var2=xxx&pagenumber=xxx"
*/
function set_pagevar_url($var)
{
if($var!=$this->pagevarurl)
{
$this->pagevarurl=$var;
}
return($this->pagevarurl);
}
function get_pagevar_url()
{
return($this->pagevarurl);
}
/*
returns an html formatted string
*/
function make_navigation($functionname='')
{
$text='';
if(($this->options['display_all'])||($this->options['number_displayed']>=$this->nbpages))
{
for($i=1;$i<=$this->nbpages;$i++)
{
if($i!=$this->currentpage)
{
if($functionname=='')
{
$text.='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'='.$i.'">'.$i.'</a>&nbsp;';
}
else
{
$text.='<a style="cursor:pointer;" onclick="'.$functionname.'('.$i.');">'.$i.'</a>&nbsp;';
}
}
else
{
$text.=$i.'&nbsp;';
}
}
}
else
{
for($i=$this->currentpage-$this->options['number_displayed'];$i<=$this->currentpage+$this->options['number_displayed'];$i++)
{
if(($i>0)&&($i<=$this->nbpages))
{
if($i!=$this->currentpage)
{
if($functionname=='')
{
$text.='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'='.$i.'">'.$i.'</a>&nbsp;';
}
else
{
$text.='<a style="cursor:pointer;" onclick="'.$functionname.'('.$i.');">'.$i.'</a>&nbsp;';
}
}
else
{
$text.=$i.'&nbsp;';
}
}
}
if($this->currentpage-$this->options['number_displayed']>0)
{
$text='&nbsp;...&nbsp;'.$text;
}
if($this->currentpage+$this->options['number_displayed']<$this->nbpages)
{
$text.='&nbsp;...&nbsp;';
}
}
if($this->options['prev_next'])
{
$prevp='';
$nextp='';
if($this->currentpage>1)
{
if($functionname=='')
{
$prevp='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'='.($this->currentpage-1).'"> Prev </a>';
}
else
{
$prevp='<a style="cursor:pointer;" onclick="'.$functionname.'('.($this->currentpage-1).');"> Prev </a>';
}
}
if($this->currentpage<$this->nbpages)
{
if($functionname=='')
{
$nextp='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'='.($this->currentpage+1).'"> Next </a>';
}
else
{
$nextp='<a style="cursor:pointer;" onclick="'.$functionname.'('.($this->currentpage+1).');"> Next </a>';
}
}
$text=$prevp.$text.$nextp;
}
if($this->options['first_last'])
{
$firstp='';
$lastp='';
if($this->currentpage>1)
{
if($functionname=='')
{
$firstp='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'=1"> First </a>';
}
else
{
$firstp='<a style="cursor:pointer;" onclick="'.$functionname.'(1);"> First </a>';
}
}
if($this->currentpage<$this->nbpages)
{
if($functionname=='')
{
$lastp='<a href="'.$this->baseurl.'&'.$this->pagevarurl.'='.$this->nbpages.'"> Last </a>';
}
else
{
$lastp='<a style="cursor:pointer;" onclick="'.$functionname.'('.$this->nbpages.');"> Last </a>';
}
}
$text=$firstp.$text.$lastp;
}
return($text);
}
/*
calculate the number of pages...
*/
function calc_nb_pages()
{
if($this->nbitemsperpages>0)
{
$this->nbpages=ceil($this->nbitems/$this->nbitemsperpages);
}
}
} //class
?>

View file

@ -0,0 +1,202 @@
<?php
/* -----------------------------------------------------------------------------
class name: public_integration
class version: 1.0
date: 2007-10-31
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this class provides base functions to manage an integration into main index
page
the class use plugin MenuBarManager function if installed
- constructor public_integration($section)
- (public) function init_events()
- (public) function set_callback_page_function($value)
- (public) function set_callback_init_menu_function($value)
- (public) function set_menu_tpl($tpl_code)
- (public) function set_menu_list($list)
- (public) function set_menu_title($title)
- (public) function set_lnk_admin_add($text, $link)
- (public) function set_lnk_admin_edit($text, $link)
- (private) function update_menubar()
- (private) function init_section()
- (private) function call_page()
use init_events() function to initialize needed triggers for updating menubar
use set_menu_tpl() function to initialize the template of menu
use set_menu_title() function to initialize the title of menu
use set_menu_list() function to initialize the elements of menu (see function for use)
use set_lnk_admin_add() and set_lnk_admin_edit() functions for displaying specific admin links
the "callback_page_function" is called everytime a specific page is displayed
the "callback_init_menu_function" is called everytime the menu is made (allows
for example to prepare menu's title and list using user's language)
----------------------------------------------------------------------------- */
class public_integration
{
var $menu_tpl; //template definition for the menu
var $menu_list; //an array of arrays array(array('text' => '', 'id' => '', 'link' => ''), array... )
var $menu_title; //menu's title
var $lnk_admin_add; //if set array('text'=>'', 'link'=>''), add a link "add" to the menu
var $lnk_admin_edit; //if set array('text'=>'', 'link'=>''), add a link "edit" to the menu's elements
var $section; //section applied to the page viewed
var $callback_page_function; //called function to display page
var $callback_init_menu_function; //called function to initialize menu
function public_integration($section)
{
$this->menu_tpl="";
$this->menu_list=array();
$this->menu_title="";
$this->lnk_admin_add=array();
$this->lnk_admin_edit=array();
$this->section=$section;
$this->callback_page_function='';
$this->callback_init_menu_function='';
}
//initialize events to manage menu & page integration
function init_events()
{
add_event_handler('loc_begin_menubar', array(&$this, 'init_smarty'));
add_event_handler('loc_end_menubar', array(&$this, 'update_menubar'));
add_event_handler('loc_end_section_init', array(&$this, 'init_section'));
add_event_handler('loc_end_index', array(&$this, 'call_page'));
}
function set_callback_page_function($value)
{
$this->callback_page_function=$value;
}
function set_callback_init_menu_function($value)
{
$this->callback_init_menu_function=$value;
}
// set template definition for menu
function set_menu_tpl($tpl_code)
{
$this->menu_tpl = $tpl_code;
}
//set menu list
function set_menu_list($list)
{
$this->menu_list = $list;
}
//set menu title
function set_menu_title($title)
{
$this->menu_title = $title;
}
//set 'add' link to menu
function set_lnk_admin_add($text, $link)
{
$this->lnk_admin_add = array('text' => $text, 'link' => $link);
}
//set 'edit' link to menu
function set_lnk_admin_edit($text, $link)
{
$this->lnk_admin_edit = array('text' => $text, 'link' => $link);
}
function init_smarty()
{
global $template;
$template->smarty->register_prefilter(array(&$this, 'modify_tpl'));
}
function modify_tpl($tpl_source, &$smarty)
{
return(str_replace('<div id="menubar">', '<div id="menubar">(test3)'.$this->menu_tpl, $tpl_source));
}
/*
Update PWG menubar
- add a MyPolls block
- add a MyPolls menu inside
*/
function update_menubar()
{
global $template;
@call_user_func($this->callback_init_menu_function);
//echo "update_menubar****".$this->menu_tpl."****".$this->menu_title."****".count($this->menu_list)."****";
//do not do nothing because nothing to do
if((($this->menu_tpl=="") ||
(count($this->menu_list)==0) ||
($this->menu_title=="")
) and !is_admin())
{
return(false);
}
$template_datas=array();
$template_datas['links']=array();
$template_datas['TITLE']='toto'.$this->menu_title;
if(is_admin() && (count($this->lnk_admin_add)>0))
{
$template_datas['links'][]=array(
'LABEL' => "<i>".$this->lnk_admin_add['text']."</i>",
'URL' => $this->lnk_admin_add['link']
);
}
foreach($this->menu_list as $key => $val)
{
if(is_admin() && (count($this->lnk_admin_edit)>0))
{ $lnk_edit = "</a> --- <a href='".$this->lnk_admin_edit['link'].
$val['id']."'>[".$this->lnk_admin_edit['text']."]"; }
else
{ $lnk_edit = ''; }
$template_datas['links'][]=array(
'LABEL' => $val['text'].$lnk_edit,
'URL' => $val['link']
);
}
$template->assign("datas", $template_datas);
}
/*
init section
*/
function init_section()
{
global $tokens, $page;
if ($tokens[0] == $this->section)
{ $page['section'] = $this->section; }
}
/*
loads a page
*/
function call_page()
{
global $page, $user;
if($page['section'] == $this->section)
{
@call_user_func($this->callback_page_function);
}
}
} //class public_integration
?>

View file

@ -0,0 +1,447 @@
<?php
/* -----------------------------------------------------------------------------
class name: manage_tables
class version: 1.3
date: 2007-12-02
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this class provides base functions to manage tables while plugin installation
- constructor manage_tables($tables)
- (public) function create_tables($tables_def)
- (public) function update_tables_fields($tables_alteration)
- (public) function drop_tables()
- (public) function rename_tables($list) -v1.1
- (public) function tables_exists() -v1.1
- (public) function export($filename, $options, $tables, $infos) -v1.3
- (public) function multi_queries($queries) -v1.3
- (public) function import($filename) -v1.3
------------------------------------------------------------------------------
v1.1 + add rename_tables($list) function
+ add tables_exists() function
v1.2 + add export($filename, $options, $tables) function
v1.3 + modify export($filename, $options, $tables, $infos, $resultboolean) function
+ new parameters '$infos' allows to add some information on the
exported file
+ add 'delete' and 'colnames' options
+ $resultbooelan option for return
+ add multi_queries($queries) function
+ add import($filename) function
-------------------------------------------------------------------------- */
class manage_tables
{
var $tables; //array of tables names
var $version = "1.3";
function manage_tables($tables)
{
$this->tables = $tables;
}
/*
create tables
$tables_def is an array of SQL CREATE queries
return true if everything is ok, otherwise tablename
*/
function create_tables($tables_def)
{
//deleting tables if exists
$this->drop_tables();
for($i=0;$i<count($tables_def);$i++)
{
$result=pwg_query($tables_def[$i]);
if(!$result)
{
//if an error occurs, deleting created tables
$this->drop_tables();
return(false);
}
}
return(true);
}
/* update tables definition
$tables_alteration : array of arrays
example :
$tables_alteration['table1']=array(
"attribute1" => " ADD COLUMN `attribute1` text null default ''",
"attribute2" => " ADD COLUMN `attribute2` text null default ''"));
$tables_alteration['table2']=array(
"attribute1" => " ADD COLUMN `attribute1` text null default ''",
"attribute2" => " ADD COLUMN `attribute2` text null default ''"));
return true if no error, otherwise return table.fields of error
*/
function update_tables_fields($tables_alteration)
{
if(!is_array($tables_alteration))
{
return('');
}
reset($tables_alteration);
while (list($key, $val) = each($tables_alteration))
{
$sql="SHOW COLUMNS FROM $key";
$result=pwg_query($sql);
if($result)
{
$columns=array();
while($row=mysql_fetch_assoc($result))
{
array_push($columns, $row['Field']);
}
reset($val);
while (list($attname, $sql) = each($val))
{
if(!in_array($attname, $columns))
{
$result=pwg_query("ALTER TABLE `$key` ".$sql);
if(!$result)
{
return($key.".".$attname);
}
}
}
}
}
return(true);
}
/*
delete tables listed in $this->tables_list
*/
function drop_tables()
{
foreach($this->tables as $key => $table_name)
{
$sql="DROP TABLE IF EXISTS ".$table_name;
$result=pwg_query($sql);
}
}
/*
rename tables name of list
$list is an array('old_name' => 'new_name')
return true if ok, else old table name
*/
function rename_tables($list)
{
$tmplist=array_flip($this->tables);
foreach($list as $key => $val)
{
if(isset($tmplist[$key]))
{
$this->tables[$tmplist[$key]] = $val;
$sql="ALTER TABLE `$key` RENAME TO `$val`";
if(!pwg_query($sql))
{
return($key);
}
}
else
{
return($key);
}
}
return(true);
}
/*
return true if all listed tables exists
*/
function tables_exists()
{
$list=array_flip($this->tables);
$sql="SHOW TABLES";
$result=pwg_query($sql);
if($result)
{
while($row=mysql_fetch_row($result))
{
if(isset($list[$row[0]]))
{
array_splice($list, $row[0],1);
}
}
}
if(count($list)>0)
{
return(false);
}
else
{
return(true);
}
}
/*
export all tables as SQL in a text file
each query end with a " -- EOQ" ; it's just a method to increase parsing for
import function
$filename : name of the file
$options : array of options like
array(
'drop' => true/false, //add DROP TABLE statements
'create' => true/false, //add CREATE TABLE statements
'insert' => true/false, //add INSERT statements
'delete' => true/false, //add delete statements
'colnames' => true/false, //add columns names for inserts statements
)
$tables : array of tables names to export
array('tablename1', 'tablenamen', 'tablename3', ...)
if empty, assume that all tables have to be exported
$infos : additional info written in exported file (as comment)
$resultboolean : if true, result is true/false ;
if false, if result, return a string with nfo about export
*/
function export($filename, $options=array(), $tables=array(), $infos="", $resultboolean=true)
{
$defaultopt=array(
'drop' => true,
'create' => true,
'insert' => true,
'delete' => false,
'colnames' => false
);
if(!isset($options['drop']))
{
$options['drop']=$defaultopt['drop'];
}
if(!isset($options['create']))
{
$options['create']=$defaultopt['create'];
}
if(!isset($options['insert']))
{
$options['insert']=$defaultopt['insert'];
}
if(!isset($options['delete']))
{
$options['delete']=$defaultopt['delete'];
}
if(!isset($options['colnames']))
{
$options['colnames']=$defaultopt['colnames'];
}
if(count($tables)==0)
{
$tables=$this->tables;
}
$resultnfo='';
$returned=true;
$text='
-- *************************************************************** -- EOQ
-- * SQL export made with Grum Plugins Classes (Export tool r'.$this->version.') -- EOQ
-- * Export date :'.date('Y-m-d H:i:s').' -- EOQ
-- * Export options :';
if($options['drop']){$text.=' [drop]';}
if($options['delete']){$text.=' [delete]';}
if($options['create']){$text.=' [create]';}
if($options['insert']){$text.=' [insert]';}
if($options['colnames']){$text.=' [colnames]';}
$text.=" -- EOQ";
if($infos!="")
{
$text.='
-- * '.$infos." -- EOQ";
}
$text.='
-- *************************************************************** -- EOQ
';
foreach($tables as $key => $val)
{
$countelems=0;
$text.="
-- *************************************************************** -- EOQ
-- * Statements for ".$this->tables[$key]." table -- EOQ
-- *************************************************************** -- EOQ
";
if($options['drop'])
{
$text.=sprintf("DROP TABLE `%s`; -- EOQ\n", $this->tables[$key]);
}
if($options['delete'])
{
$text.=sprintf("DELETE FROM `%s`; -- EOQ\n", $this->tables[$key]);
}
if($options['create'])
{
$sql='SHOW CREATE TABLE '.$this->tables[$key];
$result=pwg_query($sql);
if($result)
{
while($row=mysql_fetch_row($result))
{
$text.=sprintf("%s; -- EOQ\n", $row[1]);
}
}
else
{
$returned=false;
}
}
if($options['insert'])
{
$colnames="";
if($options['colnames'])
{
$sql='SHOW COLUMNS FROM `'.$this->tables[$key].'`';
$result=pwg_query($sql);
if($result)
{
$tmp=array();
while($row=mysql_fetch_row($result))
{
$tmp[]=$row[0];
}
}
$colnames='('.implode(',', $tmp).')';
}
$sql='SELECT * FROM '.$this->tables[$key];
$result=pwg_query($sql);
if($result)
{
while($row=mysql_fetch_row($result))
{
foreach($row as $key2 => $val2)
{
$row[$key2]="'".addslashes($val2)."'";
}
$text.=sprintf("INSERT INTO `%s` %s VALUES(%s); -- EOQ\n", $this->tables[$key], $colnames, implode(', ', $row));
$countelems++;
}
}
else
{
$returned=false;
}
$resultnfo.=$key.':'.$countelems.'@';
}
}
$fhandle=fopen($filename, 'wb');
if($fhandle)
{
fwrite($fhandle, $text);
fclose($fhandle);
}
else
{
$returned=false;
}
if(($resultboolean==false)&&($returned))
{
$returned=$resultnfo;
}
return($returned);
}
/*
import an .sql file
$filename : name of the file
'errors' : -1 file don't exists
-2 can't open file
*/
function import($filename)
{
$return = array(
'numinsert'=>0,
'numdelete'=>0,
'numdrop'=>0,
'numcreate'=>0,
'errors'=>array(),
'total_ok'=>0
);
if(file_exists($filename))
{
$fhandle=fopen($filename, 'r');
if($fhandle)
{
$queries=fread($fhandle, filesize($filename));
fclose($fhandle);
$return=$this->multi_queries($queries);
}
else
{
$return['errors']=-2;
}
}
else
{
$return['errors']=-1;
}
return($return);
}
/*
execute multiple query
each query have to be separated by a "-- EOQ\n"
$queries : sql queries
*/
function multi_queries($queries)
{
$queries_list=preg_split(
'/\s*;?\s*--\s+EOQ[\r\n]{1}/i', $queries, -1, PREG_SPLIT_NO_EMPTY);
$return = array(
'numinsert'=>0,
'numdelete'=>0,
'numdrop'=>0,
'numcreate'=>0,
'errors'=>array(),
'total_ok'=>0
);
$i=0;
foreach($queries_list as $key => $sql)
{
$i++;
@$result=pwg_query($sql);
if($result)
{
$return['total_ok']++;
if(preg_match('/\b[\s]*insert[\s]+/i', $sql)>0)
{$return['numinsert']++;}
elseif(preg_match('/\b[\s]*drop[\s]+/i', $sql)>0)
{$return['numdrop']++;}
elseif(preg_match('/\b[\s]*delete[\s]+/i', $sql)>0)
{$return['numdelete']++;}
elseif(preg_match('/\b[\s]*create[\s]+/i',$sql)>0)
{$return['numcreate']++;}
}
else
{
array_push($return['errors'], '['.$i.'] '.$sql);
}
}
return($return);
}
} //class
?>

View file

@ -0,0 +1,192 @@
<?php
/* -----------------------------------------------------------------------------
class name: translate
class version: 2.0.1
date: 2008-05-25
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to manage call to "translate.google.com"
release 2.x use durect call to Google Translate AJAX API, so all functions
from PHP class are removed (except for "can_translate")
class call API in HTML header, and provide a .js file manage API call
- constructor translate()
- (public) function can_translate($from, $to) //v1.1
version 1.1.1
- google have changed HTML code for translation page ; change search string of translation result
- bug corrected : if language given with uppercase, force them to lowercase
version 2.0.0
- use of Google Translate javascript API
>> http://code.google.com/apis/ajaxlanguage/
---------------------------------------------------------------------- */
class translate
{
var $language_list;
function translate()
{
//alloweds from->to transations languages
$this->language_list=array_flip(
array(
'ar', //arabic
'bg', //Bulgarian
'zh', //Chinese (simplified)
'hr', //Croatian
'cs', //Czech
'da', //Danish
"nl", //Dutch
'en', //English
'fi', //Finnish
"fr", //French
"de", //German
"el", //Greek
'hi', //Hindi
"it", //Italian
"ja", //Japanese
"ko", //Korean
'no', //Norwegian
'pl', //Polish
"pt", //Portuguese
'ro', //Romanian
"ru", //Russian
"es", //Spanish
'sv' //Swedish
)
);
add_event_handler('loc_end_page_header', array(&$this, 'load_JS'));
}
function load_JS()
{
global $template;
$googleload='
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="plugins/'.basename(dirname(__FILE__)).'/google_translate.js"></script>';
$template->append('head_elements', $googleload);
}
function can_translate($from, $to)
{
if(isset($this->language_list[strtolower($from)])&&isset($this->language_list[strtolower($to)]))
{
return(true);
}
else
{
return(false);
}
}
/*
theses methods are removed for direct use of the Google AJAX API (better choice for
performance)
how to :
create one instance of this classe
classe can be used by server to know authorized language to be translated
all translations have to be made with javascript functions
=8<===========================================================================
function set_languages($lang)
{
$pair=explode('|', strtolower($lang));
if(isset($this->language_list[$pair[0]])&&isset($this->language_list[$pair[1]]))
{
$this->from_to_lang=strtolower($lang);
}
return($this->from_to_lang);
}
function get_languages()
{
return($this->from_to_lang);
}
function set_input_charset($charset)
{
$this->input_charset=$charset;
}
function get_input_charset($charset)
{
return($this->input_charset);
}
function set_output_charset($charset)
{
$this->output_charset=$charset;
}
function get_output_charset($charset)
{
return($this->output_charset);
}
function do_translation($text)
{
if(ini_get('allow_url_fopen')!="1")
{
return("");
}
$req="http://translate.google.com/translate_t?text=".urlencode($text).
"&langpair=".strtolower($this->from_to_lang);
if($this->input_charset!="")
{
$req.="&ie=".$this->input_charset;
}
if($this->output_charset!="")
{
$req.="&oe=".$this->output_charset;
}
$handle=fopen($req, "r");
if($handle)
{
$contents="";
while (!feof($handle))
{
$contents .= fread($handle, 4196);
}
fclose($handle);
$search="<div id=result_box dir=\"ltr\">";
$p = strpos($contents, $search);
if($p>0)
{
$contents=substr($contents, $p+strlen($search));
$search="</div>";
$p = strpos($contents, $search);
$contents=substr($contents, 0, $p);
}
else
{
$contents="";
}
return($contents);
}
else
{
return("");
}
}
*/
} //class
?>

View file

@ -0,0 +1,290 @@
<?php
/* -----------------------------------------------------------------------------
class name: allowed_access, groups, users
class version: 1.0
date: 2007-10-31
------------------------------------------------------------------------------
author: grum at grum.dnsalias.com
<< May the Little SpaceFrog be with you >>
------------------------------------------------------------------------------
this classes provides base functions to manage users/groups access
groups and users classes extends allowed_access classes
- constructor allowed_access($alloweds="")
- constructor groups($alloweds="")
- constructor users($alloweds="")
- (public) function get_list()
- (public) function set_allowed($id, $allowed)
- (public) function set_alloweds()
- (public) function get_alloweds($return_type)
- (public) function is_allowed($id)
- (public) function html_view($sep=", ", $empty="")
- (public) function html_form($basename)
- (private) function init_list()
---------------------------------------------------------------------- */
class allowed_access
{
var $access_list;
/*
constructor initialize the groups_list
*/
function allowed_access($alloweds = "")
{
$this->init_list();
$this->set_alloweds($alloweds);
}
/*
initialize the groups list
*/
function init_list()
{
$this->access_list=array();
}
/*
returns list (as an array)
*/
function get_list()
{
return($this->access_list);
}
/*
set element an allowed state
*/
function set_allowed($id, $allowed)
{
if(isset($this->access_list[$id]))
{
$this->access_list[$id]['allowed']=$allowed;
}
}
/*
set a group enabled/disabled state
*/
function set_state($id, $enabled)
{
if(isset($this->access_list[$id]))
{
$this->access_list[$id]['enabled']=$enabled;
}
}
/*
set alloweds list
$list is string of id, separated with "/"
*/
function set_alloweds($list)
{
$alloweds=explode("/", $list);
$alloweds=array_flip($alloweds);
foreach($this->access_list as $key => $val)
{
if(isset($alloweds[$key]))
{
$this->access_list[$key]['allowed']=true;
}
else
{
$this->access_list[$key]['allowed']=false;
}
}
}
/*
get alloweds list
return a string of groups, separated with "/"
*/
function get_alloweds($return_type = 'name')
{
$returned="";
foreach($this->access_list as $key => $val)
{
if($val['allowed'])
{ $returned.=$val[$return_type]."/"; }
}
return($returned);
}
/*
returns true if is allowed
*/
function is_allowed($id)
{
if(isset($this->access_list[$id]))
{ return($this->access_list[$id]['allowed']); }
else
{ return(false); }
}
/*
returns true if all or one is allowed
ids is an array
*/
function are_allowed($ids, $all=false)
{
foreach($ids as $val)
{
if($all)
{
if(!$this->is_allowed($val))
{
return(false);
}
}
else
{
if($this->is_allowed($val))
{
return(true);
}
}
}
return(false);
}
/*
returns an HTML list with label rather than id
*/
function html_view($sep=", ", $empty="")
{
$returned="";
foreach($this->access_list as $key => $val)
{
if($val['allowed'])
{
if($returned!="")
{
$returned.=$sep;
}
$returned.=$val['name'];
}
}
if($returned=="")
{
$returned=$empty;
}
return($returned);
}
/*
returns a generic HTML form to manage the groups access
*/
function html_form($basename)
{
/*
<!-- BEGIN allowed_group_row -->
<label><input type="checkbox" name="fmypolls_att_allowed_groups_{allowed_group_row.ID}" {allowed_group_row.CHECKED}/>&nbsp;{allowed_group_row.NAME}</label>
<!-- END allowed_group_row -->
*/
$text='';
foreach($this->access_list as $key => $val)
{
if($val['allowed'])
{
$checked=' checked';
}
else
{
$checked='';
}
if($val['enabled'])
{
$enabled='';
}
else
{
$enabled=' disabled';
}
$text.='<label><input type="checkbox" name="'.$basename.$val['id'].'" '.$checked.$enabled.'/>
&nbsp;'.$val['name'].'</label>&nbsp;';
}
return($text);
}
} //allowed_access
/* ----------------------------------------------------------------------
this class provides base functions to manage groups access
init_list redefined to initialize access_list from database GROUPS
---------------------------------------------------------------------- */
class groups extends allowed_access
{
/*
initialize the groups list
*/
function init_list()
{
$this->access_list=array();
$sql="SELECT id, name FROM ".GROUPS_TABLE." ORDER BY name";
$result=pwg_query($sql);
if($result)
{
while($row=mysql_fetch_assoc($result))
{
$this->access_list[$row['id']] =
array('id' => $row['id'],
'name' => $row['name'],
'allowed' => false,
'enabled' => true);
}
}
}
}
/* -----------------------------------------------------------------------------
this class provides base functions to manage users access
----------------------------------------------------------------------------- */
class users extends allowed_access
{
/*
constructor
*/
function users($alloweds = "")
{
parent::allowed_access($alloweds);
$this->set_state('admin', false);
$this->set_allowed('admin', true);
}
/*
initialize the groups list
*/
function init_list()
{
$users_list = array('guest', 'generic', 'normal', 'admin');
$this->access_list=array();
foreach($users_list as $val)
{
$this->access_list[$val] =
array('id' => $val,
'name' => l10n('user_status_'.$val),
'allowed' => false,
'enabled' => true);
}
}
} //class users
?>

33
plugins/test_menu/index.php Executable file
View file

@ -0,0 +1,33 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
// | last modifier : $Author: rub $
// | revision : $Revision: 1912 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
// Recursive call
$url = '../';
header( 'Request-URI: '.$url );
header( 'Content-Location: '.$url );
header( 'Location: '.$url );
exit();
?>

53
plugins/test_menu/main.inc.php Executable file
View file

@ -0,0 +1,53 @@
<?php
/*
Plugin Name: Test Menu
Version: 1.0.0
Description: Plugin pour montrer l'usage de la classe Menu / Plugin to show usage of the class Menu
Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=
*/
/*
--------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
--------------------------------------------------------------------------------
:: HISTORY
--------------------------------------------------------------------------------
*/
// pour faciliter le debug :o)
ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);
if(!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
define('TEST_MENU_DIR' , basename(dirname(__FILE__)));
define('TEST_MENU_PATH' , PHPWG_PLUGINS_PATH . TEST_MENU_DIR . '/');
define('TEST_MENU_VERSION' , '1.0.0'); // => ne pas oublier la version dans l'entête !!
global $prefixeTable, $menu;
include_once("menu.class.inc.php");
function filemenu()
{
return(TEST_MENU_PATH."menubar.inc.php");
}
$menu = new Menu();
if(basename($_SERVER["PHP_SELF"])!='admin.php')
{
add_event_handler('menubar_file', 'filemenu');
}
?>

View file

@ -0,0 +1,44 @@
<?php
if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);
define('TEST_MENU_DIR' , basename(dirname(__FILE__)));
define('TEST_MENU_PATH' , PHPWG_PLUGINS_PATH . TEST_MENU_DIR . '/');
include_once("menu.class.inc.php");
function plugin_install($plugin_id, $plugin_version, &$errors)
{
/* -[note]----------------------------------------------------------------------
In normal case, piwigo's registered items of the $menu object are not
initialized by a plugin, but by piwigo (while the install process).
Piwigo's default registered items are initialized here to give a "how to"
example of the classe
----------------------------------------------------------------------------- */
$menu=new Menu();
$menu->register('mbLinks', 'Links', 1, 'piwigo');
$menu->register('mbCategories', 'Categories', 2, 'piwigo');
$menu->register('mbTags', 'Related tags', 3, 'piwigo');
$menu->register('mbSpecial', 'special_categories', 4, 'piwigo');
$menu->register('mbMenu', 'title_menu', 5, 'piwigo');
$menu->register('mbIdentification', 'identification', 6, 'piwigo');
}
function plugin_activate($plugin_id, $plugin_version, &$errors)
{
}
function plugin_deactivate($plugin_id)
{
}
function plugin_uninstall($plugin_id)
{
}
?>

View file

@ -0,0 +1,500 @@
<?php
/* -----------------------------------------------------------------------------
class name: menu, blocks
class version: 1.0
date: 2008-07-25
------------------------------------------------------------------------------
Author : Grum
email : grum@grum.dnsalias.com
website : http://photos.grum.dnsalias.com
PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
<< May the Little SpaceFrog be with you ! >>
------------------------------------------------------------------------------
this classes provides base functions to manage the public gallery menu
** The Section class **
This class allows you to easily make a section block for the menu
Public methods
get_id()
get_name()
get_template()
get_position()
get_tag()
get_items()
set_name($value)
set_template($value)
set_tag($value)
set_items($value)
items_count()
get()
Constructor
$id : section's id have to be unique in the menu
$name : section's name is displayed on the menu
$template : name of smarty template file ; if file doesn't exist, use of the
generic template
$tag : a facultative data ; use it as you want !
$items : items of the menu : no specfic structure because it depends of
the template model
** The Menu class **
This class allows to easily manage the menu
Public methods
add($section_datas)
remove($id)
replace($section_datas)
clear()
section($id)
sections()
ids()
count()
register($id, $name, $position, $owner)
register_position($id, $position)
unregister($id)
registered()
apply()
How to use Menu class :
1/ create an instance
$menu = new Menu();
instance have to be created by piwigo, plugin have to use of a global
variable
2/ register your menu section
register a section allows to know sections even if $menu is not loaded
register a section allows to manage position into menu
register function only reference some information about section, it does
not create the section of menu (an only registered section is not
displayed in menu)
best place to register a section : when plugin is activated
when deactivate plugin, unregister the section
3/ add section to menu
add a section allows to really create section into menu
------------------------------------------------------------------------------
:: HISTORY
1.0.0 - 2008-07-25
first lines of code...
--------------------------------------------------------------------------- */
// theses constant ave to be adapted for a piwigo's integration
define('MENU_TEMPLATES_DIR' , dirname(__FILE__));
define('MENU_TEMPLATES_PATH' , MENU_TEMPLATES_DIR . '/menu_templates/');
define('MENU_REGISTERED_PATH' ,
PHPWG_PLUGINS_PATH . basename(dirname(__FILE__)) . '/');
class Menu
{
protected $sections=array(); //array key is unique ID of sections
protected $registered_sections=array();
protected $registered_file="registered.dat";
public function Menu()
{
$this->load_registered();
}
/*
public functions
*/
public function add($section_datas)
{
// add a section to the menu ; datas can be made with the Section class
if($this->section_is_valid($section_datas) and
!isset($this->sections[$section_datas['ID']]) )
{
$this->sections[$section_datas['ID']]=$section_datas;
if(isset($this->registered_sections[$section_datas['ID']]))
{
$this->sections[$section_datas['ID']]['POSITION']=$this->registered_sections[$section_datas['ID']]['POSITION'];
}
else
{
$this->sections[$section_datas['ID']]['POSITION']=0;
}
return(true);
}
return(false);
}
public function remove($id)
{
// remove a section from the menu
unset($this->sections[$id]);
}
public function replace($section_datas)
{
// replace an existing section description by another one
if($this->section_is_valid($section_datas) and
isset($this->sections[$section_datas['ID']]) )
{
$this->sections[$section_datas['ID']]=$section_datas;
return(true);
}
return(false);
}
public function clear()
{
// clear all sections of the menu
$this->sections=array();
}
public function section($id)
{
//return a section structure or false if requested ID not exists
if(isset($this->sections[$id]))
{
return($this->sections[$id]);
}
return(false);
}
public function sections()
{
//return all sections
return($this->sections);
}
public function ids()
{
//return all section's ids
return(array_keys($this->sections));
}
public function count()
{
//return number of sections
return(count($this->sections));
}
public function register($id, $name, $position, $owner)
{
/*
register section for menu ; register a section allows to know sections list
even if menu is not made (ie: we are in admin interface)
register a section is not adding a section : it's just for making a list of
potential sections.
you can add in the menu a section who is not registered
$id : section id
$name : name of section
$position : position of section
$owner : owner of section (piwigo or plugin's name)
*/
if(!isset($this->registered_sections[$id]))
{
if($position<1)
{
$position=1;
}
$this->registered_sections[$id]=array(
'NAME' => $name,
'POSITION'=>$position,
'OWNER' => $owner
);
$this->register_position($id, $position);
//$this->save_registered(); ==> made with register_position
return(true);
}
return(false);
}
public function unregister($id)
{
// just unregister a section from menu
if(isset($this->registered_sections[$id]))
{
unset($this->registered_sections[$id]);
$this->registered_sections=$this->renum_position($this->registered_sections);
$this->save_registered();
return(true);
}
return(false);
}
public function register_position($id, $position)
{
// register a new position for section
// if a section already have the same position, all section are shifted
// sort registered sections by position
$this->sort_registered();
//preparing sections
$incpos=false;
foreach($this->registered_sections as $key => $val)
{
if(($val['POSITION']==$position)and($key!=$id))
{
$incpos=true;
}
if(($incpos)and($key!=$id))
{
$this->registered_sections[$key]['POSITION']++;
}
}
//affect new position
$this->registered_sections[$id]['POSITION']=$position;
//sort
$this->sort_registered();
//renum positions
$this->registered_sections=$this->renum_position($this->registered_sections);
$this->save_registered();
}
public function registered()
{
// return list of registered sections
return($this->registered_sections);
}
public function apply()
{
//apply datas on the template
global $template;
$template->set_filenames(
array('menubar' => MENU_TEMPLATES_PATH.'menubar_main.tpl')
);
trigger_action('loc_begin_menubar');
$this->sort();
$template->assign('sections', $this->sections);
trigger_action('loc_end_menubar');
$template->assign_var_from_handle('MENUBAR', 'menubar');
}
/*
protected functions
*/
protected function section_is_valid($section_datas)
{
if(is_array($section_datas) and
isset($section_datas['ID']) and
isset($section_datas['NAME']) and
isset($section_datas['TEMPLATE']) and
isset($section_datas['ITEMS']) and
isset($section_datas['TAG']))
{
return(true);
}
return(false);
}
protected function load_registered()
{
//load registered sections : database or file ??
$this->registered_sections=array();
$filename=MENU_REGISTERED_PATH.$this->registered_file;
if(file_exists($filename))
{
$fhandle=fopen($filename, "r");
if($fhandle)
{
$datas=fread($fhandle, filesize($filename));
fclose($fhandle);
$this->registered_sections=unserialize($datas);
return(true);
}
}
return(false);
}
protected function save_registered()
{
//save registered sections : database or file ??
$filename=MENU_REGISTERED_PATH.$this->registered_file;
$fhandle=fopen($filename, "w");
if($fhandle)
{
$written=fwrite($fhandle, serialize($this->registered_sections));
fclose($fhandle);
return($written);
}
return(false);
}
protected function sort()
{
$tmp=$this->sections;
uksort($tmp, array(&$this, 'sort_sections_cmpfct'));
$this->sections=$tmp;
}
protected function sort_registered()
{
$tmp=$this->registered_sections;
uksort($tmp, array(&$this, 'sort_registered_cmpfct'));
$this->registered_sections=$tmp;
}
private function sort_sections_cmpfct($a, $b)
{
if($this->sections[$a]['POSITION']==$this->sections[$b]['POSITION'])
{
return(($this->sections[$a]['ID']<$this->sections[$b]['ID'])?-1:1);
}
return(($this->sections[$a]['POSITION']<$this->sections[$b]['POSITION'])?-1:1);
}
private function sort_registered_cmpfct($a, $b)
{
return(($this->registered_sections[$a]['POSITION']<$this->registered_sections[$b]['POSITION'])?-1:1);
}
private function renum_position($datas)
{
$i=1;
foreach($datas as $key => $val)
{
$datas[$key]['POSITION']=$i;
$i+=1;
}
return($datas);
}
} // class Menu
class Section
{
protected $name;
protected $template="generic.tpl";
protected $id;
protected $tag;
protected $items=array();
public function Section($id, $name, $template="", $tag="")
{
$this->id = $id;
$this->tag = $tag;
$this->set_name($name);
if(!$this->set_template($template))
{
$this->template=MENU_TEMPLATES_PATH."generic.tpl";
}
} // constructor
/*
public functions
*/
public function get()
{
//this method returns a data structure ready to be used with the Menu class
return(
array(
'ID' => $this->id,
'NAME' => $this->name,
'TEMPLATE' => $this->template,
'ITEMS' => $this->items,
'TAG' => $this->tag
)
);
}
public function get_id()
{
return($this->id);
}
public function get_name()
{
return($this->name);
}
public function get_template()
{
return($this->template);
}
public function get_tag()
{
return($this->tag);
}
public function get_items()
{
return($this->items);
}
public function set_name($value)
{
$this->name=$value;
}
public function set_template($value)
{
if($this->is_template($value))
{
$this->template=$value;
return(true);
}
return(false);
}
public function set_tag($value)
{
$this->tag=$value;
}
public function set_items($value)
{
$this->items=$value;
}
public function items_count()
{
if(is_array($this->items))
{
return(count($this->items));
}
else
{
return(-1);
}
}
/*
protected functions
*/
protected function is_template($templatename)
{
if(file_exists($templatename) and (preg_match('/.+\.tpl$/i',$templatename)))
{
return(true);
}
return(false);
} // is_template
} //class Section
?>

View file

@ -0,0 +1,165 @@
{* $Id: menubar.tpl 2409 2008-07-01 02:09:21Z rvelices $ *}
<div id="menubar">
{if not empty($links)}
<dl id="mbLinks">
<dt>{'Links'|@translate}</dt>
<dd>
<ul>
{foreach from=$links item=link}
<li>
<a href="{$link.URL}"
{if isset($link.new_window) }onclick="window.open(this.href, '{$link.new_window.NAME|@escape:'javascript'}','{$link.new_window.FEATURES|@escape:'javascript'}'); return false;"{/if}
>
{$link.LABEL}
</a>
</li>
{/foreach}{*links*}
</ul>
</dd>
</dl>
{/if}{*links*}
{if isset($U_START_FILTER)}
<a href="{$U_START_FILTER}" title="{'start_filter_hint'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/start_filter.png" class="button" alt="start filter"></a>
{/if}
{if isset($U_STOP_FILTER)}
<a href="{$U_STOP_FILTER}" title="{'stop_filter_hint'|@translate}"><img src="{$ROOT_URL}{$themeconf.icon_dir}/stop_filter.png" class="button" alt="stop filter"></a>
{/if}
<dl id="mbCategories">
<dt><a href="{$U_CATEGORIES}">{'Categories'|@translate}</a></dt>
<dd>
{$MENU_CATEGORIES_CONTENT}
{if isset($U_UPLOAD)}
<ul><li>
<a href="{$U_UPLOAD}">{'upload_picture'|@translate}</a>
</li></ul>
{/if}
<p class="totalImages">{$pwg->l10n_dec('%d element', '%d elements', $NB_PICTURE)}</p>
</dd>
</dl>
{if not empty($related_tags)}
<dl id="mbTags">
<dt>{'Related tags'|@translate}</dt>
<dd>
<ul id="menuTagCloud">
{foreach from=$related_tags item=tag}
<li>
{if !empty($tag.U_ADD) }
<a href="{$tag.U_ADD}"
title="{$pwg->l10n_dec('%d element are also linked to current tags', '%d elements are also linked to current tags', $tag.counter)}"
rel="nofollow">
<img src="{$ROOT_URL}{$themeconf.icon_dir}/add_tag.png" alt="+" />
</a>
{/if}
<a href="{$tag.URL}" class="tagLevel{$tag.level}" title="{'See elements linked to this tag only'|@translate}">{$tag.name}</a>
</li>
{/foreach}
</ul>
</dd>
</dl>
{/if}
<dl id="mbSpecial">
<dt>{'special_categories'|@translate}</dt>
<dd>
<ul>
{foreach from=$special_categories item=cat}
<li><a href="{$cat.URL}" title="{$cat.TITLE}" {if isset($cat.REL)}{$cat.REL}{/if}>{$cat.NAME}</a></li>
{/foreach}
</ul>
</dd>
</dl>
<dl id="mbMenu">
<dt>{'title_menu'|@translate}</dt>
<dd>
<form action="{$ROOT_URL}qsearch.php" method="get" id="quicksearch">
<p>
<input type="text" name="q" id="qsearchInput" onfocus="if (value==qsearch_prompt) value='';" onblur="if (value=='') value=qsearch_prompt;" />
</p>
</form>
<script type="text/javascript">var qsearch_prompt="{'qsearch'|@translate|@escape:'javascript'}"; document.getElementById('qsearchInput').value=qsearch_prompt;</script>
<ul>
{foreach from=$summaries item=sum}
<li><a href="{$sum.U_SUMMARY}" title="{$sum.TITLE}" {if isset($sum.REL)}{$sum.REL}{/if}>{$sum.NAME}</a></li>
{/foreach}
</ul>
</dd>
</dl>
<dl id="mbIdentification">
<dt>{'identification'|@translate}</dt>
<dd>
{if isset($USERNAME)}
<p>{'hello'|@translate}&nbsp;{$USERNAME}&nbsp;!</p>
{/if}
<ul>
{if isset($U_REGISTER)}
<li><a href="{$U_REGISTER}" title="{'Create a new account'|@translate}" rel="nofollow">{'Register'|@translate}</a></li>
{/if}
{if isset($U_IDENTIFY)}
<li><a href="{$U_IDENTIFY}" rel="nofollow">{'Connection'|@translate}</a></li>
{/if}
{if isset($U_LOGOUT)}
<li><a href="{$U_LOGOUT}">{'logout'|@translate}</a></li>
{/if}
{if isset($U_PROFILE)}
<li><a href="{$U_PROFILE}" title="{'hint_customize'|@translate}">{'customize'|@translate}</a></li>
{/if}
{if isset($U_ADMIN)}
<li><a href="{$U_ADMIN}" title="{'hint_admin'|@translate}">{'admin'|@translate}</a></li>
{/if}
</ul>
{if isset($U_IDENTIFY)}
<form method="post" action="{$U_IDENTIFY}" class="filter" id="quickconnect">
<fieldset>
<legend>{'Quick connect'|@translate}</legend>
<label>
{'Username'|@translate}
<input type="text" name="username" size="15" value="">
</label>
<label>
{'Password'|@translate}
<input type="password" name="password" size="15">
</label>
{if $AUTHORIZE_REMEMBERING}
<label>
{'remember_me'|@translate}
<input type="checkbox" name="remember_me" value="1">
</label>
{/if}
<p>
<input class="submit" type="submit" name="login" value="{'Submit'|@translate}">
</p>
<ul class="actions">
<li><a href="{$U_LOST_PASSWORD}" title="{'Forgot your password?'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/lost_password.png" class="button" alt="{'Forgot your password?'|@translate}"></a></li>
{if isset($U_REGISTER)}
<li><a href="{$U_REGISTER}" title="{'Create a new account'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/register.png" class="button" alt="{'Register'|@translate}"/></a></li>
{/if}
</ul>
</fieldset>
</form>
{/if}
</dd>
</dl>
</div> <!-- menubar -->

View file

@ -0,0 +1,24 @@
<!-- categories menu bar -->
<dt>
{if isset($section.ITEMS.U_START_FILTER)}
<a href="{$section.ITEMS.U_START_FILTER}" title="{'start_filter_hint'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/start_filter.png" class="button" alt="start filter"></a>
{/if}
{if isset($section.ITEMS.U_STOP_FILTER)}
<a href="{$section.ITEMS.U_STOP_FILTER}" title="{'stop_filter_hint'|@translate}"><img src="{$ROOT_URL}{$themeconf.icon_dir}/stop_filter.png" class="button" alt="stop filter"></a>
{/if}
<a href="{$section.ITEMS.U_CATEGORIES}">{$section.NAME|@translate}</a>
</dt>
<dd>
{$section.ITEMS.MENU_CATEGORIES_CONTENT}
{if isset($section.ITEMS.U_UPLOAD)}
<ul>
<li>
<a href="{$section.ITEMS.U_UPLOAD}">{'upload_picture'|@translate}</a>
</li>
</ul>
{/if}
<p class="totalImages">{$pwg->l10n_dec('%d element', '%d elements', $section.ITEMS.NB_PICTURE)}</p>
</dd>

View file

@ -0,0 +1,10 @@
<!-- generic menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
<ul>
{foreach from=$section.ITEMS item=item}
<li><a href="{$item.URL}" title="{$item.TITLE}">{$item.NAME}</a></li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,67 @@
<!-- identification menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
{if isset($section.ITEMS.USERNAME)}
<p>{'hello'|@translate}&nbsp;{$section.ITEMS.USERNAME}&nbsp;!</p>
{/if}
<ul>
{if isset($section.ITEMS.U_REGISTER)}
<li><a href="{$section.ITEMS.U_REGISTER}" title="{'Create a new account'|@translate}" rel="nofollow">{'Register'|@translate}</a></li>
{/if}
{if isset($section.ITEMS.U_IDENTIFY)}
<li><a href="{$section.ITEMS.U_IDENTIFY}" rel="nofollow">{'Connection'|@translate}</a></li>
{/if}
{if isset($section.ITEMS.U_LOGOUT)}
<li><a href="{$section.ITEMS.U_LOGOUT}">{'logout'|@translate}</a></li>
{/if}
{if isset($section.ITEMS.U_PROFILE)}
<li><a href="{$section.ITEMS.U_PROFILE}" title="{'hint_customize'|@translate}">{'customize'|@translate}</a></li>
{/if}
{if isset($section.ITEMS.U_ADMIN)}
<li><a href="{$section.ITEMS.U_ADMIN}" title="{'hint_admin'|@translate}">{'admin'|@translate}</a></li>
{/if}
</ul>
{if isset($section.ITEMS.U_IDENTIFY)}
<form method="post" action="{$section.ITEMS.U_IDENTIFY}" class="filter" id="quickconnect">
<fieldset>
<legend>{'Quick connect'|@translate}</legend>
<label>
{'Username'|@translate}
<input type="text" name="username" size="15" value="">
</label>
<label>
{'Password'|@translate}
<input type="password" name="password" size="15">
</label>
{if $section.ITEMS.AUTHORIZE_REMEMBERING}
<label>
{'remember_me'|@translate}
<input type="checkbox" name="remember_me" value="1">
</label>
{/if}
<p>
<input class="submit" type="submit" name="login" value="{'Submit'|@translate}">
</p>
<ul class="actions">
<li><a href="{$section.ITEMS.U_LOST_PASSWORD}" title="{'Forgot your password?'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/lost_password.png" class="button" alt="{'Forgot your password?'|@translate}"></a></li>
{if isset($section.ITEMS.U_REGISTER)}
<li><a href="{$section.ITEMS.U_REGISTER}" title="{'Create a new account'|@translate}" rel="nofollow"><img src="{$ROOT_URL}{$themeconf.icon_dir}/register.png" class="button" alt="{'Register'|@translate}"/></a></li>
{/if}
</ul>
</fieldset>
</form>
{/if}
</dd>

View file

@ -0,0 +1,17 @@
<!-- links menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
<ul>
{foreach from=$section.ITEMS item=link}
<li>
<a href="{$link.URL}"
{if isset($link.new_window) }onclick="window.open(this.href, '{$link.new_window.NAME|@escape:'javascript'}','{$link.new_window.FEATURES|@escape:'javascript'}'); return false;"{/if}
>
{$link.LABEL}
</a>
</li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,15 @@
<!-- main menu bar -->
{if isset($sections) and count($sections)}
<div id="menubar">
{foreach from=$sections key=name item=section}
{if not(empty($section.ITEMS))}
<dl id="{$section.ID}">
{include file=$section.TEMPLATE section=$section}
</dl>
{/if}
{/foreach}
</div>
{/if}

View file

@ -0,0 +1,17 @@
<!-- menu menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
<form action="{$ROOT_URL}qsearch.php" method="get" id="quicksearch">
<p>
<input type="text" name="q" id="qsearchInput" onfocus="if (value==qsearch_prompt) value='';" onblur="if (value=='') value=qsearch_prompt;" />
</p>
</form>
<script type="text/javascript">var qsearch_prompt="{'qsearch'|@translate|@escape:'javascript'}"; document.getElementById('qsearchInput').value=qsearch_prompt;</script>
<ul>
{foreach from=$section.ITEMS item=sum}
<li><a href="{$sum.U_SUMMARY}" title="{$sum.TITLE}" {if isset($sum.REL)}{$sum.REL}{/if}>{$sum.NAME}</a></li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,10 @@
<!-- special menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
<ul>
{foreach from=$section.ITEMS item=cat}
<li><a href="{$cat.URL}" title="{$cat.TITLE}" {if isset($cat.REL)}{$cat.REL}{/if}>{$cat.NAME}</a></li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,19 @@
<!-- tags menu bar -->
<dt>{$section.NAME|@translate}</dt>
<dd>
<ul id="menuTagCloud">
{foreach from=$section.ITEMS item=tag}
<li>
{if !empty($tag.U_ADD) }
<a href="{$tag.U_ADD}"
title="{$pwg->l10n_dec('%d element are also linked to current tags', '%d elements are also linked to current tags', $tag.counter)}"
rel="nofollow">
<img src="{$ROOT_URL}{$themeconf.icon_dir}/add_tag.png" alt="+" />
</a>
{/if}
<a href="{$tag.URL}" class="tagLevel{$tag.level}" title="{'See elements linked to this tag only'|@translate}">{$tag.name}</a>
</li>
{/foreach}
</ul>
</dd>

View file

@ -0,0 +1,288 @@
<?php
/*
to use Menu class in piwigo, just replace the original menubar.inc.php file by
this one
*/
$datas=array();
//-------------------------------------------------------------- categories
$datas['categories']=array(
'NB_PICTURE' => $user['nb_total_images'],
'MENU_CATEGORIES_CONTENT' => get_categories_menu(),
'U_CATEGORIES' => make_index_url(array('section' => 'categories')),
'U_UPLOAD' => get_upload_menu_link()
);
//------------------------------------------------------------------------ filter
if (!empty($conf['filter_pages']) and get_filter_page_value('used'))
{
if ($filter['enabled'])
{
$datas['categories']['U_STOP_FILTER']=
add_url_params(make_index_url(array()), array('filter' => 'stop'));
}
else
{
$datas['categories']['U_START_FILTER']=
add_url_params(make_index_url(array()), array('filter' => 'start-recent-'.$user['recent_period']));
}
}
//-------------------------------------------------------------- external links
$datas['links']=array();
foreach ($conf['links'] as $url => $url_data)
{
if (!is_array($url_data))
{
$url_data = array('label' => $url_data);
}
if
(
(!isset($url_data['eval_visible']))
or
(eval($url_data['eval_visible']))
)
{
$tpl_var = array(
'URL' => $url,
'LABEL' => $url_data['label']
);
if (!isset($url_data['new_window']) or $url_data['new_window'])
{
$tpl_var['new_window'] =
array(
'NAME' => (isset($url_data['nw_name']) ? $url_data['nw_name'] : ''),
'FEATURES' => (isset($url_data['nw_features']) ? $url_data['nw_features'] : '')
);
}
$datas['links'][]=$tpl_var;
}
}
//------------------------------------------------------------------------ tags
$datas['tags']=array();
if ('tags' == @$page['section'])
{
// display tags associated to currently tagged items, less current tags
$tags = array();
if ( !empty($page['items']) )
{
$tags = get_common_tags($page['items'],
$conf['menubar_tag_cloud_items_number'], $page['tag_ids']);
}
$tags = add_level_to_tags($tags);
foreach ($tags as $tag)
{
$datas['tags'][]=
array_merge( $tag,
array(
'URL' => make_index_url(
array(
'tags' => array($tag)
)
),
'U_ADD' => make_index_url(
array(
'tags' => array_merge(
$page['tags'],
array($tag)
)
)
),
)
);
}
}
//---------------------------------------------------------- special categories
// favorites categories
$datas['special']=array();
if ( !is_a_guest() )
{
$datas['special']['favorite_cat']=array(
'URL' => make_index_url(array('section' => 'favorites')),
'TITLE' => l10n('favorite_cat_hint'),
'NAME' => l10n('favorite_cat')
);
}
// most visited
$datas['special']['most_visited_cat']=array(
'URL' => make_index_url(array('section' => 'most_visited')),
'TITLE' => l10n('most_visited_cat_hint'),
'NAME' => l10n('most_visited_cat')
);
// best rated
if ($conf['rate'])
{
$datas['special']['best_rated_cat']=array(
'URL' => make_index_url(array('section' => 'best_rated')),
'TITLE' => l10n('best_rated_cat_hint'),
'NAME' => l10n('best_rated_cat')
);
}
// random
$datas['special']['random_cat']=array(
'URL' => get_root_url().'random.php',
'TITLE' => l10n('random_cat_hint'),
'NAME' => l10n('random_cat'),
'REL'=> 'rel="nofollow"'
);
// recent pics
$datas['special']['recent_pics_cat']=array(
'URL' => make_index_url(array('section' => 'recent_pics')),
'TITLE' => l10n('recent_pics_cat_hint'),
'NAME' => l10n('recent_pics_cat'),
);
// recent cats
$datas['special']['recent_cats_cat']=array(
'URL' => make_index_url(array('section' => 'recent_cats')),
'TITLE' => l10n('recent_cats_cat_hint'),
'NAME' => l10n('recent_cats_cat'),
);
// calendar
$datas['special']['calendar']=array(
'URL' =>
make_index_url(
array(
'chronology_field' => ($conf['calendar_datefield']=='date_available'
? 'posted' : 'created'),
'chronology_style'=> 'monthly',
'chronology_view' => 'calendar'
)
),
'TITLE' => l10n('calendar_hint'),
'NAME' => l10n('calendar'),
'REL'=> 'rel="nofollow"'
);
//--------------------------------------------------------------- identification
$datas['identification']=array();
if (is_a_guest())
{
$datas['identification']=array(
'U_IDENTIFY' => get_root_url().'identification.php',
'AUTHORIZE_REMEMBERING' => $conf['authorize_remembering'],
'U_LOST_PASSWORD' => get_root_url().'password.php',
);
if ($conf['allow_user_registration'])
{
$datas['identification']['U_REGISTER']=get_root_url().'register.php';
}
}
else
{
$datas['identification']['USERNAME']= $user['username'];
if (is_autorize_status(ACCESS_CLASSIC))
{
$datas['identification']['U_PROFILE']=get_root_url().'profile.php';
}
// the logout link has no meaning with Apache authentication : it is not
// possible to logout with this kind of authentication.
if (!$conf['apache_authentication'])
{
$datas['identification']['U_LOGOUT']= get_root_url().'?act=logout';
}
if (is_admin())
{
$datas['identification']['U_ADMIN']= get_root_url().'admin.php';
}
}
//--------------------------------------------------------------- menu summaries
$datas['menu']=array();
// tags link
$datas['menu']['tags']=array(
'TITLE' => l10n('See available tags'),
'NAME' => l10n('Tags'),
'U_SUMMARY'=> get_root_url().'tags.php',
);
// search link
$datas['menu']['search']=array(
'TITLE'=>l10n('hint_search'),
'NAME'=>l10n('Search'),
'U_SUMMARY'=> get_root_url().'search.php',
'REL'=> 'rel="search"'
);
// comments link
$datas['menu']['comments']=array(
'TITLE'=>l10n('hint_comments'),
'NAME'=>l10n('comments'),
'U_SUMMARY'=> get_root_url().'comments.php',
);
// about link
$datas['menu']['about']=array(
'TITLE' => l10n('about_page_title'),
'NAME' => l10n('About'),
'U_SUMMARY' => get_root_url().'about.php',
);
// notification
$datas['menu']['notification']=array(
'TITLE'=>l10n('RSS feed'),
'NAME'=>l10n('Notification'),
'U_SUMMARY'=> get_root_url().'notification.php',
'REL'=> 'rel="nofollow"'
);
$section = new Section('mbLinks', 'links', MENU_TEMPLATES_PATH.'menubar_links.tpl');
$section->set_items($datas['links']);
$menu->add($section->get());
$section = new Section('mbTags', 'Related tags', MENU_TEMPLATES_PATH.'menubar_tags.tpl');
$section->set_items($datas['tags']);
$menu->add($section->get());
$section = new Section('mbSpecial', 'special_categories', MENU_TEMPLATES_PATH.'menubar_special.tpl');
$section->set_items($datas['special']);
$menu->add($section->get());
$section = new Section('mbMenu', 'title_menu', MENU_TEMPLATES_PATH.'menubar_menu.tpl');
$section->set_items($datas['menu']);
$menu->add($section->get());
$section = new Section('mbIdentification', 'identification', MENU_TEMPLATES_PATH.'menubar_identification.tpl');
$section->set_items($datas['identification']);
$menu->add($section->get());
$section = new Section('mbCategories', 'Categories', MENU_TEMPLATES_PATH.'menubar_categories.tpl');
$section->set_items($datas['categories']);
$menu->add($section->get());
$menu->apply();
?>