]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/adminpanelaction.php
Merge branch 'testing' of git@gitorious.org:statusnet/mainline into 0.9.x
[quix0rs-gnu-social.git] / lib / adminpanelaction.php
index 89a129db1fed9351decc06cc344cf9c4bee93334..a927e23336f73b80ab78bc0a98aafbf95778e286 100644 (file)
@@ -69,8 +69,9 @@ class AdminPanelAction extends Action
         // User must be logged in.
 
         if (!common_logged_in()) {
+            // TRANS: Client error message
             $this->clientError(_('Not logged in.'));
-            return;
+            return false;
         }
 
         $user = common_current_user();
@@ -93,8 +94,21 @@ class AdminPanelAction extends Action
         // User must have the right to change admin settings
 
         if (!$user->hasRight(Right::CONFIGURESITE)) {
+            // TRANS: Client error message
             $this->clientError(_('You cannot make changes to this site.'));
-            return;
+            return false;
+        }
+
+        // This panel must be enabled
+
+        $name = $this->trimmed('action');
+
+        $name = mb_substr($name, 0, -10);
+
+        if (!self::canAdmin($name)) {
+            // TRANS: Client error message
+            $this->clientError(_('Changes to that panel are not allowed.'), 403);
+            return false;
         }
 
         return true;
@@ -123,6 +137,7 @@ class AdminPanelAction extends Action
                 Config::loadSettings();
 
                 $this->success = true;
+                // TRANS: Message after successful saving of administrative settings.
                 $this->msg     = _('Settings saved.');
             } catch (Exception $e) {
                 $this->success = false;
@@ -160,6 +175,24 @@ class AdminPanelAction extends Action
         $this->showForm();
     }
 
+    /**
+     * Show content block. Overrided just to add a special class
+     * to the content div to allow styling.
+     *
+     * @return nothing
+     */
+    function showContentBlock()
+    {
+        $this->elementStart('div', array('id' => 'content', 'class' => 'admin'));
+        $this->showPageTitle();
+        $this->showPageNoticeBlock();
+        $this->elementStart('div', array('id' => 'content_inner'));
+        // show the actual content (forms, lists, whatever)
+        $this->showContent();
+        $this->elementEnd('div');
+        $this->elementEnd('div');
+    }
+
     /**
      * show human-readable instructions for the page, or
      * a success/failure on save.
@@ -192,6 +225,7 @@ class AdminPanelAction extends Action
 
     function showForm()
     {
+        // TRANS: Client error message
         $this->clientError(_('showForm() not implemented.'));
         return;
     }
@@ -221,10 +255,11 @@ class AdminPanelAction extends Action
 
     function saveSettings()
     {
+        // TRANS: Client error message
         $this->clientError(_('saveSettings() not implemented.'));
         return;
     }
-    
+
     /**
      * Delete a design setting
      *
@@ -244,6 +279,7 @@ class AdminPanelAction extends Action
             $result = $config->delete();
             if (!$result) {
                 common_log_db_error($config, 'DELETE', __FILE__);
+                // TRANS: Client error message
                 $this->clientError(_("Unable to delete design setting."));
                 return null;
             }
@@ -251,6 +287,17 @@ class AdminPanelAction extends Action
 
         return $result;
     }
+
+    function canAdmin($name)
+    {
+        $isOK = false;
+
+        if (Event::handle('AdminPanelCheck', array($name, &$isOK))) {
+            $isOK = in_array($name, common_config('admin', 'panels'));
+        }
+
+        return $isOK;
+    }
 }
 
 /**
@@ -296,17 +343,73 @@ class AdminPanelNav extends Widget
 
         if (Event::handle('StartAdminPanelNav', array($this))) {
 
-            $this->out->menuItem(common_local_url('siteadminpanel'), _('Site'),
-                _('Basic site configuration'), $action_name == 'siteadminpanel', 'nav_site_admin_panel');
+            if (AdminPanelAction::canAdmin('site')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Basic site configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('siteadminpanel'), _m('MENU', 'Site'),
+                                     $menu_title, $action_name == 'siteadminpanel', 'nav_site_admin_panel');
+            }
+
+            if (AdminPanelAction::canAdmin('design')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Design configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('designadminpanel'), _m('MENU', 'Design'),
+                                     $menu_title, $action_name == 'designadminpanel', 'nav_design_admin_panel');
+            }
+
+            if (AdminPanelAction::canAdmin('user')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('User configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('useradminpanel'), _('User'),
+                                     $menu_title, $action_name == 'useradminpanel', 'nav_user_admin_panel');
+            }
+
+            if (AdminPanelAction::canAdmin('access')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Access configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('accessadminpanel'), _('Access'),
+                                     $menu_title, $action_name == 'accessadminpanel', 'nav_access_admin_panel');
+            }
+
+            if (AdminPanelAction::canAdmin('paths')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Paths configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('pathsadminpanel'), _('Paths'),
+                                    $menu_title, $action_name == 'pathsadminpanel', 'nav_paths_admin_panel');
+            }
+
+            if (AdminPanelAction::canAdmin('sessions')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Sessions configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('sessionsadminpanel'), _('Sessions'),
+                                     $menu_title, $action_name == 'sessionsadminpanel', 'nav_sessions_admin_panel');
+            }
 
-            $this->out->menuItem(common_local_url('designadminpanel'), _('Design'),
-                _('Design configuration'), $action_name == 'designadminpanel', 'nav_design_admin_panel');
+            if (AdminPanelAction::canAdmin('sitenotice')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Edit site notice');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('sitenoticeadminpanel'), _('Site notice'),
+                                     $menu_title, $action_name == 'sitenoticeadminpanel', 'nav_sitenotice_admin_panel');
+            }
 
-            $this->out->menuItem(common_local_url('pathsadminpanel'), _('Paths'),
-                _('Paths configuration'), $action_name == 'pathsadminpanel', 'nav_design_admin_panel');
+            if (AdminPanelAction::canAdmin('snapshot')) {
+                // TRANS: Menu item title/tooltip
+                $menu_title = _('Snapshots configuration');
+                // TRANS: Menu item for site administration
+                $this->out->menuItem(common_local_url('snapshotadminpanel'), _('Snapshots'),
+                                     $menu_title, $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
+            }
 
             Event::handle('EndAdminPanelNav', array($this));
         }
         $this->action->elementEnd('ul');
     }
+
 }