4 * headermenuPlugin Class
6 * Copyright 2012-2013, Franck Villaume - TrivialDev
7 * http://fusionforge.org
9 * This file is part of FusionForge. FusionForge is free software;
10 * you can redistribute it and/or modify it under the terms of the
11 * GNU General Public License as published by the Free Software
12 * Foundation; either version 2 of the Licence, or (at your option)
15 * FusionForge is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License along
21 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 class headermenuPlugin extends Plugin {
29 function __construct() {
31 $this->name = 'headermenu';
32 $this->text = _('Menu Tabs Manager');
33 $this->_addHook('headermenu');
34 $this->_addHook('site_admin_option_hook');
35 $this->_addHook('outermenu');
36 $this->_addHook('groupisactivecheckbox'); // The "use ..." checkbox in editgroupinfo
37 $this->_addHook('groupisactivecheckboxpost');
38 $this->_addHook('groupmenu');
39 $this->_addHook('project_admin_plugins');
40 $this->_addHook('clone_project_from_template');
41 $this->_addHook('group_delete');
44 function CallHook($hookname, &$params) {
47 $this->getOuterLink($params);
50 case 'site_admin_option_hook': {
51 echo '<li>'.$this->getAdminOptionLink().'</li>';
55 $group_id = $params['group'];
56 $project = group_get_object($group_id);
57 if ($project->usesPlugin($this->name)) {
58 $this->getGroupLink($params);
62 case 'project_admin_plugins': {
63 $group_id = $params['group_id'];
64 $project = group_get_object($group_id);
65 if ($project->usesPlugin($this->name)) {
66 echo '<p>'.util_make_link('/plugins/'.$this->name.'/?type=projectadmin&group_id='.$group_id,
67 _('Menu Tabs Manager Admin'), array('class' => 'tabtitle', 'title' => _('Add/Remove/Activate/Desactivate tabs'))) . '</p>';
71 case 'clone_project_from_template': {
73 $res = db_query_params('SELECT url, name, description, is_enable, linkmenu, linktype, htmlcode, ordering FROM plugin_headermenu WHERE project = $1',
74 array($params['template']->getID()));
75 while ($row = db_fetch_array($res)) {
77 $linksData['url'] = $row['url'];
78 $linksData['name'] = $row['name'];
79 $linksData['description'] = $row['description'];
80 $linksData['is_enable'] = $row['is_enable'];
81 $linksData['linkmenu'] = $row['linkmenu'];
82 $linksData['linktype'] = $row['linktype'];
83 $linksData['htmlcode'] = $row['htmlcode'];
84 $linksData['ordering'] = $row['ordering'];
85 $links[] = $linksData;
88 foreach ($links as $link) {
89 db_query_params('INSERT INTO plugin_headermenu (url, name, description, is_enable, linkmenu, linktype, htmlcode, ordering, project) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)',
98 $params['project']->getID()));
102 case 'group_delete': {
103 $links = $this->getAvailableLinks('groupmenu', $params['group_id']);
104 foreach ($links as $link) {
105 $this->deleteLink($link['id_headermenu']);
111 function getAdminOptionLink() {
112 return util_make_link('/plugins/'.$this->name.'/?type=globaladmin', _('Global HeaderMenu admin'), array('class' => 'tabtitle', 'title' => _('Direct link to global configuration of this plugin')));
116 * headermenu - Display the links following the template
118 * @param array $params
119 * @return bool true...
121 function headermenu($params) {
122 $availableLinks = $this->getAvailableLinks('headermenu');
123 foreach ($availableLinks as $link) {
124 if ($link['is_enable']) {
125 $ahref = '<a href="'.$link['url'].'">'.htmlspecialchars($link['name']).'</a>';
126 $template = isset($params['template']) ? $params['template'] : ' | {menu}';
127 echo str_replace('{menu}', $ahref, $template);
134 * getOuterLink - update the links before generate the tab.
136 * @param array $params hook params array
137 * @return bool true...
139 function getOuterLink($params) {
140 $availableLinks = $this->getAvailableLinks('outermenu');
141 foreach ($availableLinks as $link) {
142 if ($link['is_enable']) {
143 switch ($link['linktype']) {
145 $params['DIRS'][] = $link['url'];
146 $params['TITLES'][] = $link['name'];
147 $params['TOOLTIPS'][] = $link['description'];
151 $params['DIRS'][] = '/plugins/'.$this->name.'/?type=pageview&pageid='.$link['id_headermenu'];
152 $params['TITLES'][] = $link['name'];
153 $params['TOOLTIPS'][] = $link['description'];
163 * getGroupLink - update the links before generate the tab.
165 * @param array $params hook params array
166 * @return bool true...
168 function getGroupLink($params) {
169 $availableLinks = $this->getAvailableLinks('groupmenu', $params['group']);
170 foreach ($availableLinks as $link) {
171 if ($link['is_enable']) {
172 switch ($link['linktype']) {
174 $params['DIRS'][] = $link['url'];
175 $params['TITLES'][] = $link['name'];
176 $params['TOOLTIPS'][] = $link['description'];
180 $params['DIRS'][] = '/plugins/'.$this->name.'/?type=pageview&group_id='.$params['group'].'&pageid='.$link['id_headermenu'];
181 $params['TITLES'][] = $link['name'];
182 $params['TOOLTIPS'][] = $link['description'];
183 if (isset($params['toptab']) && ($params['toptab'] == '/plugins/'.$this->name.'/?type=pageview&group_id='.$params['group'].'&pageid='.$link['id_headermenu'])) {
184 $params['selected'] = (count($params['DIRS'])-1);
189 $params['DIRS'][] = '/plugins/'.$this->name.'/?type=iframeview&group_id='.$params['group'].'&pageid='.$link['id_headermenu'];
190 $params['TITLES'][] = $link['name'];
191 $params['TOOLTIPS'][] = $link['description'];
192 if (isset($params['toptab']) && ($params['toptab'] == '/plugins/'.$this->name.'/?type=iframeview&group_id='.$params['group'].'&pageid='.$link['id_headermenu'])) {
193 $params['selected'] = (count($params['DIRS'])-1);
204 * getAvailableLinks - get all the links from the db of certain kind
206 * @param string $linkmenu the type of menu links search in db
207 * @param int $project the group_id. Default is 0 meaning : forge level
208 * @return array the available links
210 function getAvailableLinks($linkmenu, $project = 0) {
211 $links = db_query_params('select * FROM plugin_headermenu where linkmenu = $1 and project = $2 order by ordering asc', array($linkmenu, $project));
212 $availableLinks = array();
213 while ($arr = db_fetch_array($links)) {
214 $availableLinks[] = $arr;
216 return $availableLinks;
220 * getAllAvailableLinks - get all the links from the db
222 * @return array the available links
224 function getAllAvailableLinks() {
225 $availableOuterLinks = $this->getAvailableLinks('outermenu');
226 $availableHeaderLinks = $this->getAvailableLinks('headermenu');
227 return array_merge($availableOuterLinks, $availableHeaderLinks);
231 * setLinksOrder - set the linkOrder for a set of links id
233 * @param array $linksOrder array of ordered links id
234 * @return bool success or not
236 function setLinksOrder($linksOrder) {
237 for ($i =0; $i < count($linksOrder); $i++) {
238 $res = db_query_params('update plugin_headermenu set ordering = $1 where id_headermenu = $2', array($i, $linksOrder[$i]));
246 * addLink - add a new valid link
248 * @param string $url the url
249 * @param string $name the displayed name
250 * @param string $description a short description (to help administration)
251 * @param string $linkmenu linkmenu entry : headermenu or outermenu
252 * @param string $linktype
253 * @param int $project the group_id or 0 meaning forge level
254 * @param string $htmlcode
255 * @param integer $ordering
256 * @return bool success or not
258 function addLink($url, $name, $description, $linkmenu, $linktype = 'url', $project = 0, $htmlcode = '', $ordering = NULL) {
259 if ($ordering == NULL) {
260 $res = db_query_params('SELECT MAX(ordering) as ordering FROM plugin_headermenu WHERE project=$1 AND linkmenu=$2',
261 array($project, $linkmenu));
263 $ordering = db_result($res, 0, 'ordering')+1;
269 $res = db_query_params('insert into plugin_headermenu (url, name, description, is_enable, linkmenu, linktype, project, htmlcode, ordering)
270 values ($1, $2, $3, $4, $5, $6, $7, $8, $9)',
289 * deleteLink - delete a link
291 * @param int $idLink the link id
292 * @return bool success or not
294 function deleteLink($idLink) {
295 $res = db_query_params('delete from plugin_headermenu where id_headermenu = $1', array($idLink));
303 * updateLinkStatus - update the link status
305 * @param int $idLink the link id
306 * @param int $linkStatus the new status of the link id
307 * @return bool success or not
309 function updateLinkStatus($idLink, $linkStatus) {
310 $res = db_query_params('update plugin_headermenu set is_enable = $1 where id_headermenu = $2', array($linkStatus, $idLink));
318 * getLink - get all informations about a link
320 * @param int $idLink the link id
321 * @return array the link informations
323 function getLink($idLink) {
324 $res = db_query_params('select * from plugin_headermenu where id_headermenu = $1', array($idLink));
325 if (db_numrows($res) == 1) {
326 return db_fetch_array($res);
332 * updateLink - update a valid link
334 * @param int $idLink the link id to be updated
335 * @param string $url the url
336 * @param string $name the displayed name
337 * @param string $description a short description (to help administration)
338 * @param string $linkmenu linkmenu entry : headermenu or outermenu
339 * @param string $linktype : url or htmlcode, default is url
340 * @param string $htmlcode
341 * @return bool success or not
343 function updateLink($idLink, $url, $name, $description, $linkmenu, $linktype = 'url', $htmlcode ='') {
344 $res = db_query_params('update plugin_headermenu set url = $1, name = $2, description = $3, linkmenu = $4, linktype = $5, htmlcode = $6
345 where id_headermenu = $7',
346 array($url, $name, $description, $linkmenu, $linktype, $htmlcode, $idLink));
354 * pageView - display an HTML Page
356 * @param int $pageid the page id
357 * @return string the html code
359 function pageView($pageid) {
360 $link = $this->getLink($pageid);
362 return $link['htmlcode'];
364 return '<p class="error" >'._('Cannot retrieve the page').'</p>';
369 * iframeView - display the iframe
371 * @param int $pageid the iframe id
372 * @return string the html code
374 function iframeView($pageid) {
375 $link = $this->getLink($pageid);
377 return '<iframe src="'.rtrim($link['url'],'/').'" frameborder="0" height="600px" width="100%"></iframe>';
379 return '<p class="error" >'._('Cannot retrieve the page').'</p>';
384 * getHeader - initialize header and js
386 * @param string $type : user, project, globaladmin (aka group)
387 * @return bool success or not
389 function getHeader($type) {
392 case 'globaladmin': {
393 session_require_global_perm('forge_admin');
395 require_once($gfwww.'admin/admin_utils.php');
398 use_javascript('scripts/HeaderMenuController.js');
399 use_javascript('/js/sortable.js');
400 site_admin_header(array('title'=>_('Site Global Menu Admin'), 'toptab' => ''));
406 $link = $this->getLink($this->pageid);
407 $group_id = getIntFromRequest('group_id');
409 $params['toptab'] = '/plugins/'.$this->name.'/?type='.$type.'&group_id='.$group_id.'&pageid='.$this->pageid;
410 $params['group'] = $group_id;
411 $params['title'] = $link['name'];
412 site_project_header($params);
414 site_header(array('title'=> $link['name'], 'toptab' => '/plugins/'.$this->name.'/?type='.$type.'&pageid='.$this->pageid));
419 case 'projectadmin': {
422 use_javascript('scripts/HeaderMenuController.js');
423 use_javascript('/js/sortable.js');
424 $group_id = getIntFromRequest('group_id');
425 $params['toptab'] = 'admin';
426 $params['group'] = $group_id;
427 $params['title'] = _('Menu Tabs Manager Admin');
428 site_project_header($params);
437 * getGlobalAdminView - display the Global Admin View
441 function getGlobalAdminView() {
443 $user = session_get_user();
444 include $gfplugins.$this->name.'/view/admin/viewGlobalConfiguration.php';
449 * getProjectAdminView - display the Project Admin View
453 function getProjectAdminView() {
455 $user = session_get_user();
456 include $gfplugins.$this->name.'/view/admin/viewProjectConfiguration.php';
461 * getPluginDescription - display the description of this plugin in pluginman admin page
463 * @return string the description
465 function getPluginDescription() {
466 return _('Get the ability to set new links next to the login menu (headermenu), in the main menu (outermenu) or in the project menu (groupmenu).');