mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-03-28 17:42:57 +01:00
+ add functionnalities updating files for the AMenuManager plugin + fixes some bugs + add functionnalities updating common classes grum_plugins_classes-2 (needed for the AMenuManager plugin) + add functionalities for google_translator use git-svn-id: http://piwigo.org/svn/trunk@2468 68402e56-0260-453c-a942-63ccdbb3a9ee
511 lines
12 KiB
PHP
511 lines
12 KiB
PHP
<?php
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
classes names : menu, section
|
|
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()
|
|
get_registered_filename()
|
|
|
|
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($registered_path='')
|
|
{
|
|
if($registered_path!='')
|
|
{
|
|
$this->registered_file=$registered_path.$this->registered_file;
|
|
}
|
|
$this->load_registered();
|
|
}
|
|
|
|
/*
|
|
public functions
|
|
*/
|
|
public function get_registered_filename()
|
|
{
|
|
// return filename of file for maintain of registered sections
|
|
return($this->registered_file);
|
|
}
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
?>
|