source: extensions/AMenuManager/amm_pip.class.inc.php @ 5427

Last change on this file since 5427 was 5427, checked in by grum, 14 years ago

Update the plugin for compatibility with Piwigo 2.1 - use dblayer for sql queries

  • Property svn:executable set to *
File size: 9.9 KB
RevLine 
[3681]1<?php
2/* -----------------------------------------------------------------------------
3  Plugin     : Advanced Menu Manager
4  Author     : Grum
[3690]5    email    : grum@piwigo.org
6    website  : http://photos.grum.fr
[3681]7    PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
8
9    << May the Little SpaceFrog be with you ! >>
10  ------------------------------------------------------------------------------
11  See main.inc.php for release information
12
13  PIP classe => manage integration in public interface
14
15  --------------------------------------------------------------------------- */
16if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
17
18include_once(PHPWG_PLUGINS_PATH.'AMenuManager/amm_root.class.inc.php');
19include_once(PHPWG_PLUGINS_PATH.'grum_plugins_classes-2/ajax.class.inc.php');
20
21class AMM_PIP extends AMM_root
22{
23  protected $ajax;
[4382]24  protected $displayRandomImageBlock=true;
[3681]25
26  function AMM_PIP($prefixeTable, $filelocation)
27  {
28    parent::__construct($prefixeTable, $filelocation);
29    $this->ajax = new Ajax();
30    $this->css = new css(dirname($this->filelocation).'/'.$this->plugin_name_files."2.css");
31
32    $this->load_config();
33    $this->init_events();
34  }
35
36
37  /* ---------------------------------------------------------------------------
38  Public classe functions
39  --------------------------------------------------------------------------- */
40
41
42  /*
43    initialize events call for the plugin
44  */
45  public function init_events()
46  {
47    //TODELETE: add_event_handler('loc_begin_menubar', array(&$this, 'modify_menu') );
48    parent::init_events();
49    add_event_handler('loading_lang', array(&$this, 'load_lang'));
50    add_event_handler('blockmanager_apply', array(&$this, 'blockmanager_apply') );
51    add_event_handler('loc_end_page_header', array(&$this->css, 'apply_CSS'));
[4363]52    add_event_handler('loc_end_page_tail', array(&$this, 'applyJS'));
[3681]53  }
54
55  /*
56    load language file
57  */
58  public function load_lang()
59  {
60    global $lang;
61
62    //load_language('plugin.lang', AMM_PATH);
63
64    // ajax is managed here ; this permit to use user&language properties inside
65    // ajax content
66    $this->return_ajax_content();
67  }
68
69  public function blockmanager_apply( $menu_ref_arr )
70  {
[4382]71    global $user, $page;
[3681]72    $menu = & $menu_ref_arr[0];
73
74
75    /*
76      Add a new random picture section
77    */
[3683]78    if ( ( ($block = $menu->get_block( 'mbAMM_randompict' ) ) != null ) && ($user['nb_total_images'] > 0) )
[3681]79    {
80      $block->set_title(  base64_decode($this->my_config['amm_randompicture_title'][$user['language']]) );
[3690]81      $block->data = array(
82        "delay" => $this->my_config['amm_randompicture_periodicchange'],
83        "blockHeight" => $this->my_config['amm_randompicture_height'],
84        "firstPicture" => $this->ajax_amm_get_random_picture()
85      );
[3681]86      $block->template = dirname(__FILE__).'/menu_templates/menubar_randompic.tpl';
87    }
[4382]88    else
89    {
90      $this->displayRandomImageBlock=false;
91    }
[3681]92
93    /*
94      Add a new section (links)
95    */
96    if ( ($block = $menu->get_block( 'mbAMM_links' ) ) != null )
97    {
98      $urls=$this->get_urls(true);
99      if ( count($urls)>0 )
100      {
101        if($this->my_config['amm_links_show_icons']=='y')
102        {
103          for($i=0;$i<count($urls);$i++)
104          {
105            $urls[$i]['icon']=get_root_url().'plugins/'.AMM_DIR."/links_pictures/".$urls[$i]['icon'];
106          }
107        }
108
109        $block->set_title( base64_decode($this->my_config['amm_links_title'][$user['language']]) );
110        $block->template = dirname(__FILE__).'/menu_templates/menubar_links.tpl';
111
112        $block->data = array(
113          'LINKS' => $urls,
114          'icons' => $this->my_config['amm_links_show_icons']
115        );
116      }
117    }
118
119    /*
120      Add personnal blocks random picture section
121    */
122    $sections=$this->get_sections(true);
123
124    if(count($sections))
125    {
126      $id_done=array();
127      foreach($sections as $key => $val)
128      {
129        if(!isset($id_done[$val['id']]))
130        {
131          if ( ($block = $menu->get_block( 'mbAMM_personalised'.$val['id'] ) ) != null )
132          {
133            $block->set_title( $val['title'] );
134            $block->template = dirname(__FILE__).'/menu_templates/menubar_personalised.tpl';
135            $block->data = stripslashes($val['content']);
136          }
137          $id_done[$val['id']]="";
138        }
139      }
140    }
141
[4382]142
[4389]143    /* manage items from special & menu sections
144     *  reordering items
145     *  grouping items
146     *  managing rights to access
[3681]147    */
[4382]148    $blocks=Array();
149
[4395]150    if($menu->is_hidden('mbMenu'))
151    {
152      // if block is hidden, make a fake to manage AMM features
153      // the fake block isn't displayed
154      $blocks['menu']=new DisplayBlock('amm_mbMenu');
155      $blocks['menu']->data=Array();
156    }
157    else
158    {
159      $blocks['menu']=$menu->get_block('mbMenu');
160    }
161
162    if($menu->is_hidden('mbSpecials'))
163    {
164      // if block is hidden, make a fake to manage AMM features
165      // the fake block isn't displayed
166      $blocks['special']=new DisplayBlock('amm_mbSpecial');
167      $blocks['special']->data=Array();
168    }
169    else
170    {
171      $blocks['special']=$menu->get_block('mbSpecials');
172    }
173
[4382]174    $menuItems=array_merge($blocks['menu']->data, $blocks['special']->data);
175    $this->sortSectionsItems();
176
177    $blocks['menu']->data=Array();
178    $blocks['special']->data=Array();
179
[4389]180    $users=new users("");
181    $groups=new groups("");
182    $user_groups=$this->get_user_groups($user['id']);
183
[4382]184    foreach($this->my_config['amm_sections_items'] as $key => $val)
[3681]185    {
[4382]186      if(isset($menuItems[$key]))
[3681]187      {
[4389]188        $access=explode("/",$val['visibility']);
189        $users->set_alloweds(str_replace(",", "/", $access[0]));
190        $groups->set_alloweds(str_replace(",", "/", $access[1]));
191
192        /* test if user status is allowed to access the menu item
193         * if access is managed by group, the user have to be associated with an allowed group to access the menu item
194        */
195        if($users->is_allowed($user['status']) && (
196            ($access[1]=='') ||
197            (($access[1]!='') && $groups->are_allowed($user_groups)))
198        )
199        {
200          $blocks[$val['container']]->data[$key]=$menuItems[$key];
201        }
[3681]202      }
203    }
[4382]204    if(count($blocks['menu']->data)==0) $menu->hide_block('mbMenu');
205    if(count($blocks['special']->data)==0) $menu->hide_block('mbSpecials');
206  }
[3681]207
[4389]208
209  protected function get_user_groups($user_id)
210  {
211    $returned=array();
212    $sql="SELECT group_id FROM ".USER_GROUP_TABLE."
213          WHERE user_id = ".$user_id." ";
214    $result=pwg_query($sql);
215    if($result)
216    {
[5427]217      while($row=pwg_db_fetch_assoc($result))
[4389]218      {
219        array_push($returned, $row['group_id']);
220      }
221    }
222    return($returned);
223  }
224
[3681]225  /*
226    return ajax content
227  */
228  protected function return_ajax_content()
229  {
230    global $ajax, $template;
231
232    if(isset($_REQUEST['ajaxfct']))
233    {
234      if($_REQUEST['ajaxfct']=='randompic')
235      {
236        $result="<p class='errors'>".l10n('g002_error_invalid_ajax_call')."</p>";
237        switch($_REQUEST['ajaxfct'])
238        {
239          case 'randompic':
240            $result=$this->ajax_amm_get_random_picture();
241            break;
242        }
243        $this->ajax->return_result($result);
244      }
245    }
246  }
247
248
249  // return the html content for the random picture block
250  private function ajax_amm_get_random_picture()
251  {
[3683]252    global $user;
253
[3681]254    $local_tpl = new Template(AMM_PATH."menu_templates/", "");
255    $local_tpl->set_filename('body_page',
256                  dirname($this->filelocation).'/menu_templates/menubar_randompic_inner.tpl');
257
258      $sql="SELECT i.id as image_id, i.file as image_file, i.comment, i.path, i.tn_ext, c.id as catid, c.name, c.permalink, RAND() as rndvalue, i.name as imgname
[3683]259            FROM ".CATEGORIES_TABLE." c, ".IMAGES_TABLE." i, ".IMAGE_CATEGORY_TABLE." ic
260            WHERE c.id = ic.category_id
261              AND ic.image_id = i.id
262              AND i.level <= ".$user['level']." ";
263      if($user['forbidden_categories']!="")
264      {
265        $sql.=" AND c.id NOT IN (".$user['forbidden_categories'].") ";
266      }
[3681]267
[3683]268      $sql.=" ORDER BY rndvalue
269            LIMIT 0,1";
[3681]270
271
272      $result = pwg_query($sql);
[5427]273      if($result and $nfo = pwg_db_fetch_assoc($result))
[3681]274      {
275        $nfo['section']='category';
276        $nfo['category']=array(
277          'id' => $nfo['catid'],
278          'name' => $nfo['name'],
279          'permalink' => $nfo['permalink']
280        );
281
282        $template_datas = array(
283          'LINK' => make_picture_url($nfo),
284          'IMG' => get_thumbnail_url($nfo),
285          'IMGNAME' => $nfo['imgname'],
286          'IMGCOMMENT' => $nfo['comment'],
287          'SHOWNAME' => $this->my_config['amm_randompicture_showname'],
288          'SHOWCOMMENT' => $this->my_config['amm_randompicture_showcomment']
289        );
290      }
291      else
292      {
293        $template_datas = array();
294      }
295
296    $local_tpl->assign('datas', $template_datas);
297    $local_tpl->assign('plugin', array('PATH' => AMM_PATH));
298
299    return($local_tpl->parse('body_page', true));
300  }
301
[4363]302
303  public function applyJS()
304  {
[4499]305    global $user, $template, $page;
[4363]306
[5421]307    if(!array_key_exists('body_id', $page))
308    {
309      /*
310       * it seems the error message reported on mantis:1476 is displayed because
311       * the 'body_id' doesn't exist in the $page
312       *
313       * not abble to reproduce the error, but initializing the key to an empty
314       * value if it doesn't exist may be a sufficient solution
315       */
316      $page['body_id']="";
317    }
318
[4499]319    if($this->displayRandomImageBlock && $page['body_id'] == 'theCategoryPage')
[4363]320    {
321      $local_tpl = new Template(AMM_PATH."admin/", "");
322      $local_tpl->set_filename('body_page', dirname($this->filelocation).'/menu_templates/menubar_randompic.js.tpl');
323
324      $data = array(
325        "delay" => $this->my_config['amm_randompicture_periodicchange'],
326        "blockHeight" => $this->my_config['amm_randompicture_height'],
327        "firstPicture" => $this->ajax_amm_get_random_picture()
328      );
329
330      $local_tpl->assign('data', $data);
331
332      $template->append('footer_elements', $local_tpl->parse('body_page', true));
333    }
334
335  }
336
[3681]337} // AMM_PIP class
338
339
340?>
Note: See TracBrowser for help on using the repository browser.