index d014c96a2c12f14284e7fcb2e2c9a96823929958..114ab5ddd21fe3cbf8b58558f1fcbee4e1c429ee 100644 (file)
var $current= "";
var $info= array();
var $headlines = array();
var $current= "";
var $info= array();
var $headlines = array();
+ var $allowed_plugins = array();
function pluglist(&$config, &$ui)
{
function pluglist(&$config, &$ui)
{
$this->config= &$config;
/* Create dirlist for all plugins */
$this->config= &$config;
/* Create dirlist for all plugins */
- $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data);
+ $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data['MENU']);
/* Fill info part of pluglist */
$classes= get_declared_classes();
/* Fill info part of pluglist */
$classes= get_declared_classes();
function get_plugins($list, &$config)
{
function get_plugins($list, &$config)
{
+ global $class_mapping;
+
/* Error reporting, because I'm getting strange messages in PHP 4.2.x */
/* Error reporting, because I'm getting strange messages in PHP 4.2.x */
- if (!isset($config['PATH']) && !isset($config['CLASS'])){
+ if (!isset($config['CLASS'])){
if (is_array($config)){
foreach ($config as $val){
$list= $this->get_plugins($list, $val);
}
}
} else {
if (is_array($config)){
foreach ($config as $val){
$list= $this->get_plugins($list, $val);
}
}
} else {
- if (isset ($config['PATH']) && is_array($config)){
- $list[$this->index++]= $config['PATH'];
- if (isset($config['CLASS'])){
- $class= $config['CLASS'];
- }
+ if (is_array($config) && isset($class_mapping[$config['CLASS']])){
+ $list[$this->index++]= dirname($class_mapping[$config['CLASS']]);
+ } else {
+ $list[$this->index++]= "";
}
}
return ($list);
}
}
}
return ($list);
}
+
+ /*! \brief Check whether we are allowed to modify the given acl or nit..
+ This function is used to check which plugins are visible.
+
+ @param The acl tag to test, eg. "users/user:self", "systems", ...
+ @return Boolean TRUE on success else FALSE
+ */
function check_access($aclname)
{
function check_access($aclname)
{
+ /* Split given acl string into an array.
+ e.g. "user,systems" => array("users","systems");
+ */
$acls_to_check = array();
if(preg_match("/,/",$aclname)){
$acls_to_check = split(",",$aclname);
$acls_to_check = array();
if(preg_match("/,/",$aclname)){
$acls_to_check = split(",",$aclname);
}
foreach($acls_to_check as $acl_to_check){
}
foreach($acls_to_check as $acl_to_check){
- $deps = $this->ui->get_module_departments($acl_to_check);
- foreach($deps as $dep){
- if(preg_match("/\//",$acl_to_check)){
- if($this->ui->get_permissions($dep,$acl_to_check) != ""){
- return(TRUE);
- }
- }else{
- if($this->ui->get_category_permissions($dep,$acl_to_check) != ""){
- return(TRUE);
- }
+
+ /* Check if the given acl tag is only valid for self acl entries
+ <plugin acl="users/user:self" class="user"...
+ */
+ if(preg_match("/:self$/",$acl_to_check)){
+ $acl_to_check = preg_replace("/:self$/","",$acl_to_check);
+ if($this->ui->get_permissions($this->ui->dn,$acl_to_check,"") != ""){
+ return(TRUE);
}
}
+ return(FALSE);
+ }else{
+
+ /* No self acls. Check if we have any acls for the given ACL type
+ */
+ $deps = $this->ui->get_module_departments($acl_to_check,TRUE);
+ if(count($deps)) return TRUE;
}
}
return (FALSE);
}
}
}
return (FALSE);
}
+
function gen_headlines()
{
$ret = array();
function gen_headlines()
{
$ret = array();
function gen_menu()
{
function gen_menu()
{
+ /* Check if class_location.inc has changed, this is the case
+ if we have installed or removed plugins.
+ */
+ if(!session::is_set("class_location.inc:timestamp")){
+ $tmp = stat("../include/class_location.inc");
+ session::set("class_location.inc:timestamp",$tmp['mtime']);
+ }else{
+ $tmp = stat("../include/class_location.inc");
+ if($tmp['mtime'] != session::get("class_location.inc:timestamp")){
+ $this->menu = "";
+ }
+ }
+
if ($this->menu == ""){
$first= TRUE;
$cfg= $this->config->data['MENU'];
if ($this->menu == ""){
$first= TRUE;
$cfg= $this->config->data['MENU'];
$plHeadline= $vars['plHeadline'];
$plDescription= $vars['plDescription'];
$plHeadline= $vars['plHeadline'];
$plDescription= $vars['plDescription'];
-
- $index= $this->get_index($info['PATH'],$info['CLASS']);
- $image= get_template_path('images/'.$info['ICON']);
+ $index= $this->get_index($info['CLASS']);
$href= "main.php?plug=$index&reset=1";
if(!$vars){
$href= "main.php?plug=$index&reset=1";
if(!$vars){
if ($this->check_access($info['ACL'])){
if ($this->check_access($info['ACL'])){
+ $this->allowed_plugins[$index] = $index;
+
$entries= $entries."<p class=\"menuitem\" ".
"onClick='return question(\""._("You are currently editing a database entry. Do you want to dismiss the changes?")."\", \"$href\");'>";
if(session::get('js')){
$entries= $entries."<p class=\"menuitem\" ".
"onClick='return question(\""._("You are currently editing a database entry. Do you want to dismiss the changes?")."\", \"$href\");'>";
if(session::get('js')){
_($plHeadline)."</a></p>\n";
}
_($plHeadline)."</a></p>\n";
}
- /* Generate icon entry with description */
- $current= '<table summary=\"\" class="menuitem" onClick=\'location.href="'.$href.'"\'><tr><td style="background-color:#F0F0F0;"><a href="'.$href.'"><img alt=\"\" border=0 src="'.$image.'"></a></td><td style="width:100%; vertical-align:top; text-align:justify; padding-left:10px;">';
- if(session::get('js')){
- $current.= '<b>'._($plHeadline).'</b><br>'._($plDescription);
- } else {
- $current.= '<a href="'.$href.'"><b>'._($plHeadline).'</b></a><br><a href="'.$href.'">'._($plDescription).'</a>';
- }
- $current.= '</td></tr></table>';
- $this->menuparts[_($headline)][]= $current;
if(!session::is_set('maxC')){
session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
}
if(!session::is_set('maxC')){
session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
}
function show_iconmenu()
{
function show_iconmenu()
{
+ global $class_mapping;
+
+ /* Check if class_location.inc has changed, this is the case
+ if we have installed or removed plugins.
+ */
+ if(!session::is_set("class_location.inc:timestamp")){
+ $tmp = stat("../include/class_location.inc");
+ session::set("class_location.inc:timestamp",$tmp['mtime']);
+ }else{
+ $tmp = stat("../include/class_location.inc");
+ if($tmp['mtime'] != session::get("class_location.inc:timestamp")){
+ $this->iconmenu = "";
+ }
+ }
+
if ($this->iconmenu == ""){
$cfg= $this->config->data['MENU'];
if ($this->iconmenu == ""){
$cfg= $this->config->data['MENU'];
$vars= get_class_vars($info['CLASS']);
$plHeadline= $vars['plHeadline'];
$plDescription= $vars['plDescription'];
$vars= get_class_vars($info['CLASS']);
$plHeadline= $vars['plHeadline'];
$plDescription= $vars['plDescription'];
+ if (isset($vars['plIcon'])){
+ $plIcon= $vars['plIcon'];
+ } else {
+ $plIcon= "plugin.png";
+ }
- $index= $this->get_index($info['PATH'],$info['CLASS']);
+ $index= $this->get_index($info['CLASS']);
$href = "main.php?plug=".$index."&reset=1";
$href = "main.php?plug=".$index."&reset=1";
if ($this->check_access($info['ACL'])){
if ($this->check_access($info['ACL'])){
- /* Hm this looks doubled */
- $image= get_template_path('images/'.$info['ICON']);
+ /* Load icon */
+ if (isset($info['ICON'])){
+ $image= get_template_path('images/'.$info['ICON']);
+ } else {
+ $image= get_template_path("plugins/".preg_replace('%^.*/([^/]+)/[^/]+$%', '\1', $class_mapping[$info['CLASS']])."/images/$plIcon");
+ }
if ($col > 5){
$entries= $entries."</tr><tr>";
$col = 1;
if ($col > 5){
$entries= $entries."</tr><tr>";
$col = 1;
return ("../".$this->dirlist[$index]);
}
return ("../".$this->dirlist[$index]);
}
- function get_index($path,$class)
+ function get_index($class)
{
/* Search for plugin index (id), identify entry by path && class */
$data = $this->config->data['MENU'];
foreach($data as $section => $plugins){
foreach($plugins as $key => $plugin) {
{
/* Search for plugin index (id), identify entry by path && class */
$data = $this->config->data['MENU'];
foreach($data as $section => $plugins){
foreach($plugins as $key => $plugin) {
- if($plugin['CLASS'] == $class && $plugin['PATH'] == $path){
+ if($plugin['CLASS'] == $class){
return($key);
}
}
}
return($key);
}
}
}
- /* Indentify by path*/
- return (array_search($path, $this->dirlist));
+ /* Nothing */
+ return (0);
}
}
+
+ /*! \brief This function checks if we are allowed to view the plugin with the given id
+ @param $plug_id Integer The ID of the plugin.
+ @return Boolean TRUE if we are allowed to view the plugin else FASLE
+ */
+ function plugin_access_allowed($plug_id)
+ {
+ return(isset($this->allowed_plugins[$plug_id]));
+ }
}
}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>
?>