Skip to content

Instantly share code, notes, and snippets.

@drajathasan
Created February 13, 2021 05:14
Show Gist options
  • Save drajathasan/f2ec5907dca70a48cceaa1f49384f368 to your computer and use it in GitHub Desktop.
Save drajathasan/f2ec5907dca70a48cceaa1f49384f368 to your computer and use it in GitHub Desktop.
File agar list plugins custom dapat muncul di user non super admin. Download file ini lalu simpan di folder lib/ (Jangan lupa backup file sebelumnya)
<?php
/**
* module class
* Application modules related class
*
* Copyright (C) 2010 Arie Nugraha ([email protected])
*
* 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; either version 3 of the License, or
* (at your option) any later version.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
// be sure that this file not accessed directly
if (!defined('INDEX_AUTH')) {
die("can not access this file directly");
} elseif (INDEX_AUTH != 1) {
die("can not access this file directly");
}
class module extends simbio
{
private $modules_dir = 'modules';
private $module_table = 'mst_module';
public $module_list = array();
public $appended_first;
public $appended_last;
public function __construct() {
$this->appended_first = '<li><a class="menu home#replaced#" href="index.php"><span>' . __('Home') . '</a></li><li><a class="menu opac" href="../index.php" title="' . __('View OPAC in New Window') . '" target="_blank"><span>' . __('OPAC') . '</span></a></li>';
$this->appended_last = '<li><a class="menu logout" href="logout.php"><span>' . __('Logout') . '</span></a></li>';
}
/**
* Method to set modules directory
*
* @param string $str_modules_dir
* @return void
*/
public function setModulesDir($str_modules_dir)
{
$this->modules_dir = $str_modules_dir;
}
/**
* Method to generate a list of module menu
*
* @param object $obj_db
* @return string
*/
public function generateModuleMenu($obj_db)
{
// create the HTML Hyperlinks
$_menu = '<ul id="menuList">';
$_menu .= !isset($_GET['mod'])?str_replace('#replaced#', ' menuCurrent',$this->appended_first):str_replace('#replaced#', '',$this->appended_first);
// sort modules
if ($this->module_list = $this->getModuleMainMenu($obj_db)) {
foreach ($this->module_list as $_module) {
$_formated_module_name = ucwords(str_replace('_', ' ', $_module['name']));
$_mod_dir = $_module['path'];
$_menu .= '<li><a class="menu '.$_module['name'].( (isset($_GET['mod']) && $_GET['mod']==$_module['path'])?' menuCurrent':'' ).'" title="'.$_module['desc'].'" href="index.php?mod='.$_mod_dir.'"><span>'.__($_formated_module_name).'</span></a></li>';
}
}
$_menu .= $this->appended_last;
$_menu .= '</ul>';
return $_menu;
}
/**
* Method to get a list of module menu
*
* @param object $obj_db
* @param boolean $also_get_childs
* @return array
*/
public function getModuleMainMenu($obj_db, $also_get_childs = false)
{
$_menu = array();
$module_list = array();
// get module data from database
$_mods_q = $obj_db->query('SELECT * FROM '.$this->module_table);
while ($_mods_d = $_mods_q->fetch_assoc()) {
$module_list[] = array('name' => $_mods_d['module_name'], 'path' => $_mods_d['module_path'], 'desc' => $_mods_d['module_desc']);
}
// sort modules
if ($module_list) {
foreach ($module_list as $_id => $_module) {
$_mod_dir = $_module['path'];
if (isset($_SESSION['priv'][$_module['path']]['r']) && $_SESSION['priv'][$_module['path']]['r'] && file_exists($this->modules_dir.$_mod_dir)) {
$_menu[$_id] = $_module;
if ($also_get_childs) {
$_menu[$_id]['childs'] = $this->getSubMenuItems($_module['name']);
}
}
}
}
return $_menu;
}
/**
* Method to generate a list of module submenu
*
* @param string $str_module
* @return string
*/
public function generateSubMenu($str_module = '')
{
global $dbs;
$_submenu = '';
$_submenu_current = 'curModuleLink';
$i=0;
$menu = $this->getSubMenuItems($str_module);
// iterate menu array
foreach ($menu as $_list) {
if ($_list[0] == 'Header') {
$_submenu .= '<div class="subMenuHeader">'.$_list[1].'</div>';
} else {
if($i > 1) $_submenu_current = '';
$_submenu .= '<a class="subMenuItem '.$_submenu_current.'" '
.' href="'.$_list[1].'"'
.' title="'.( isset($_list[2])?$_list[2]:$_list[0] ).'" href="#"><span>'.$_list[0].'</span></a>';
}
$i++;
}
$_submenu .= '&nbsp;';
return $_submenu;
}
/**
* Method to get a list of module submenu
*
* @param string $str_module
* @return array
*/
public function getSubMenuItems($str_module = '')
{
global $dbs;
$_submenu_file = $this->modules_dir.$str_module.DIRECTORY_SEPARATOR.'submenu.php';
// get menus from plugins
$plugin_menus = \SLiMS\Plugins::getInstance()->getMenus($str_module);
if (file_exists($_submenu_file)) {
include $_submenu_file;
$menu = array_merge($menu ?? [], $plugin_menus);
if ($_SESSION['uid'] > 1) {
$tmp_menu = [];
if (isset($menu) && count($menu) > 0) {
foreach ($menu as $item) {
if (in_array(md5($item[1]), $_SESSION['priv'][$str_module]['menus'])) $tmp_menu[] = $item;
}
}
$menu = array_merge($menu, $plugin_menus);
}
} else {
include 'default/submenu.php';
foreach ($this->get_shortcuts_menu($dbs) as $key => $value) {
$link = explode('|', $value);
$menu[$link[0]] = array(__($link[0]), MWB.$link[1]);
}
}
return $menu;
}
/**
* Method to get a list of shortcut submenu
*
* @param object $obj_db
* @return array
*/
function get_shortcuts_menu()
{
global $dbs;
$shortcuts = array();
$shortcuts_q = $dbs->query('SELECT * FROM setting WHERE setting_name LIKE \'shortcuts_'.$dbs->escape_string($_SESSION['uid']).'\'');
$shortcuts_d = $shortcuts_q->fetch_assoc();
if ($shortcuts_q->num_rows > 0) {
$shortcuts = unserialize($shortcuts_d['setting_value']);
}
return $shortcuts;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment