diff --git a/application/controllers/ConfigController.php b/application/controllers/ConfigController.php index c3fe3921d..5a33f9792 100644 --- a/application/controllers/ConfigController.php +++ b/application/controllers/ConfigController.php @@ -335,7 +335,7 @@ class ConfigController extends Controller public function resourceAction() { $this->assertPermission('config/application/resources'); - $this->view->resources = Config::app('resources', true)->keys(); + $this->view->resources = Config::app('resources', true); $this->createApplicationTabs()->activate('resource'); } diff --git a/application/controllers/GroupController.php b/application/controllers/GroupController.php index 4900ecf82..bc0211fa3 100644 --- a/application/controllers/GroupController.php +++ b/application/controllers/GroupController.php @@ -57,19 +57,12 @@ class GroupController extends AuthBackendController } $query = $backend->select(array('group_name')); - $filterEditor = Widget::create('filterEditor') - ->setQuery($query) - ->setSearchColumns(array('group', 'user')) - ->preserveParams('limit', 'sort', 'dir', 'view', 'backend') - ->ignoreParams('page') - ->handleRequest($this->getRequest()); - $query->applyFilter($filterEditor->getFilter()); - $this->setupFilterControl($filterEditor); $this->view->groups = $query; $this->view->backend = $backend; $this->setupPaginationControl($query); + $this->setupFilterControl($query); $this->setupLimitControl(); $this->setupSortControl( array( @@ -104,15 +97,7 @@ class GroupController extends AuthBackendController ->from('group_membership', array('user_name')) ->where('group_name', $groupName); - $filterEditor = Widget::create('filterEditor') - ->setQuery($members) - ->setSearchColumns(array('user')) - ->preserveParams('limit', 'sort', 'dir', 'view', 'backend', 'group') - ->ignoreParams('page') - ->handleRequest($this->getRequest()); - $members->applyFilter($filterEditor->getFilter()); - - $this->setupFilterControl($filterEditor); + $this->setupFilterControl($members, null, array('user')); $this->setupPaginationControl($members); $this->setupLimitControl(); $this->setupSortControl( @@ -149,7 +134,7 @@ class GroupController extends AuthBackendController $removeForm->addElement('button', 'btn_submit', array( 'escape' => false, 'type' => 'submit', - 'class' => 'link-like', + 'class' => 'link-like spinner', 'value' => 'btn_submit', 'decorators' => array('ViewHelper'), 'label' => $this->view->icon('trash'), diff --git a/application/controllers/UserController.php b/application/controllers/UserController.php index aa00fdadb..40192b42f 100644 --- a/application/controllers/UserController.php +++ b/application/controllers/UserController.php @@ -57,19 +57,12 @@ class UserController extends AuthBackendController } $query = $backend->select(array('user_name')); - $filterEditor = Widget::create('filterEditor') - ->setQuery($query) - ->setSearchColumns(array('user')) - ->preserveParams('limit', 'sort', 'dir', 'view', 'backend') - ->ignoreParams('page') - ->handleRequest($this->getRequest()); - $query->applyFilter($filterEditor->getFilter()); - $this->setupFilterControl($filterEditor); $this->view->users = $query; $this->view->backend = $backend; $this->setupPaginationControl($query); + $this->setupFilterControl($query); $this->setupLimitControl(); $this->setupSortControl( array( @@ -103,15 +96,11 @@ class UserController extends AuthBackendController $memberships = $this->loadMemberships(new User($userName))->select(); - $filterEditor = Widget::create('filterEditor') - ->setQuery($memberships) - ->setSearchColumns(array('group_name')) - ->preserveParams('limit', 'sort', 'dir', 'view', 'backend', 'user') - ->ignoreParams('page') - ->handleRequest($this->getRequest()); - $memberships->applyFilter($filterEditor->getFilter()); - - $this->setupFilterControl($filterEditor); + $this->setupFilterControl( + $memberships, + array('group_name' => t('User Group')), + array('group_name') + ); $this->setupPaginationControl($memberships); $this->setupLimitControl(); $this->setupSortControl( @@ -151,7 +140,7 @@ class UserController extends AuthBackendController $removeForm->addElement('button', 'btn_submit', array( 'escape' => false, 'type' => 'submit', - 'class' => 'link-like', + 'class' => 'link-like spinner', 'value' => 'btn_submit', 'decorators' => array('ViewHelper'), 'label' => $this->view->icon('trash'), diff --git a/application/controllers/UsergroupbackendController.php b/application/controllers/UsergroupbackendController.php index 4c00335f7..112a244c1 100644 --- a/application/controllers/UsergroupbackendController.php +++ b/application/controllers/UsergroupbackendController.php @@ -37,7 +37,7 @@ class UsergroupbackendController extends Controller */ public function listAction() { - $this->view->backendNames = Config::app('groups')->keys(); + $this->view->backendNames = Config::app('groups'); $this->createListTabs()->activate('usergroupbackend'); } diff --git a/application/forms/Authentication/LoginForm.php b/application/forms/Authentication/LoginForm.php index f7bae3d1b..9646046f6 100644 --- a/application/forms/Authentication/LoginForm.php +++ b/application/forms/Authentication/LoginForm.php @@ -27,6 +27,7 @@ class LoginForm extends Form $this->setRequiredCue(null); $this->setName('form_login'); $this->setSubmitLabel($this->translate('Login')); + $this->setProgressLabel($this->translate('Logging in')); } /** diff --git a/application/forms/Config/General/ApplicationConfigForm.php b/application/forms/Config/General/ApplicationConfigForm.php index 618178344..4e431aab2 100644 --- a/application/forms/Config/General/ApplicationConfigForm.php +++ b/application/forms/Config/General/ApplicationConfigForm.php @@ -25,6 +25,20 @@ class ApplicationConfigForm extends Form */ public function createElements(array $formData) { + $this->addElement( + 'checkbox', + 'global_show_stacktraces', + array( + 'required' => true, + 'value' => true, + 'label' => $this->translate('Show Stacktraces'), + 'description' => $this->translate( + 'Set whether to show an exception\'s stacktrace by default. This can also' + . ' be set in a user\'s preferences with the appropriate permission.' + ) + ) + ); + $this->addElement( 'text', 'global_module_path', diff --git a/application/forms/Config/Resource/LdapResourceForm.php b/application/forms/Config/Resource/LdapResourceForm.php index c6e452d2c..d20ec55af 100644 --- a/application/forms/Config/Resource/LdapResourceForm.php +++ b/application/forms/Config/Resource/LdapResourceForm.php @@ -81,22 +81,6 @@ class LdapResourceForm extends Form ) ); - if (isset($formData['encryption']) && $formData['encryption'] !== 'none') { - // TODO(jom): Do not show this checkbox unless the connection is actually failing due to certificate errors - $this->addElement( - 'checkbox', - 'reqcert', - array( - 'required' => true, - 'label' => $this->translate('Require Certificate'), - 'description' => $this->translate( - 'When checked, the LDAP server must provide a valid and known (trusted) certificate.' - ), - 'value' => 1 - ) - ); - } - $this->addElement( 'text', 'root_dn', diff --git a/application/forms/Config/ResourceConfigForm.php b/application/forms/Config/ResourceConfigForm.php index 51e1b1bff..db951e67a 100644 --- a/application/forms/Config/ResourceConfigForm.php +++ b/application/forms/Config/ResourceConfigForm.php @@ -344,9 +344,10 @@ class ResourceConfigForm extends ConfigForm 'submit', 'resource_validation', array( - 'ignore' => true, - 'label' => $this->translate('Validate Configuration'), - 'decorators' => array('ViewHelper') + 'ignore' => true, + 'label' => $this->translate('Validate Configuration'), + 'data-progress-label' => $this->translate('Validation In Progress'), + 'decorators' => array('ViewHelper') ) ); $this->addDisplayGroup( diff --git a/application/forms/Config/UserBackendConfigForm.php b/application/forms/Config/UserBackendConfigForm.php index 5ee4674bb..1183ae724 100644 --- a/application/forms/Config/UserBackendConfigForm.php +++ b/application/forms/Config/UserBackendConfigForm.php @@ -464,9 +464,10 @@ class UserBackendConfigForm extends ConfigForm 'submit', 'backend_validation', array( - 'ignore' => true, - 'label' => $this->translate('Validate Configuration'), - 'decorators' => array('ViewHelper') + 'ignore' => true, + 'label' => $this->translate('Validate Configuration'), + 'data-progress-label' => $this->translate('Validation In Progress'), + 'decorators' => array('ViewHelper') ) ); $this->addDisplayGroup( diff --git a/application/forms/Config/UserBackendReorderForm.php b/application/forms/Config/UserBackendReorderForm.php index 359f515b1..590a49c96 100644 --- a/application/forms/Config/UserBackendReorderForm.php +++ b/application/forms/Config/UserBackendReorderForm.php @@ -3,6 +3,7 @@ namespace Icinga\Forms\Config; +use Icinga\Application\Config; use Icinga\Forms\ConfigForm; use Icinga\Exception\NotFoundError; use Icinga\Web\Notification; @@ -28,6 +29,16 @@ class UserBackendReorderForm extends ConfigForm return $this->config->keys(); } + /** + * Return the ordered backend configuration + * + * @return Config + */ + public function getConfig() + { + return $this->config; + } + /** * Create and add elements to this form * diff --git a/application/forms/PreferenceForm.php b/application/forms/PreferenceForm.php index b329ae1d4..e9aca1d26 100644 --- a/application/forms/PreferenceForm.php +++ b/application/forms/PreferenceForm.php @@ -5,6 +5,7 @@ namespace Icinga\Forms; use Exception; use DateTimeZone; +use Icinga\Application\Config; use Icinga\Application\Logger; use Icinga\Authentication\Auth; use Icinga\User\Preferences; @@ -178,6 +179,19 @@ class PreferenceForm extends Form ) ); + if (Auth::getInstance()->hasPermission('application/stacktraces')) { + $this->addElement( + 'checkbox', + 'show_stacktraces', + array( + 'required' => true, + 'value' => $this->getDefaultShowStacktraces(), + 'label' => $this->translate('Show Stacktraces'), + 'description' => $this->translate('Set whether to show an exception\'s stacktrace.') + ) + ); + } + $this->addElement( 'checkbox', 'show_benchmark', @@ -220,8 +234,20 @@ class PreferenceForm extends Form ) ); + $this->setAttrib('data-progress-element', 'preferences-progress'); + $this->addElement( + 'note', + 'preferences-progress', + array( + 'decorators' => array( + 'ViewHelper', + array('Spinner', array('id' => 'preferences-progress')) + ) + ) + ); + $this->addDisplayGroup( - array('btn_submit_preferences', 'btn_submit_session'), + array('btn_submit_preferences', 'btn_submit_session', 'preferences-progress'), 'submit_buttons', array( 'decorators' => array( @@ -257,4 +283,14 @@ class PreferenceForm extends Form $locale = Translator::getPreferredLocaleCode($_SERVER['HTTP_ACCEPT_LANGUAGE']); return $locale; } + + /** + * Return the default global setting for show_stacktraces + * + * @return bool + */ + protected function getDefaultShowStacktraces() + { + return Config::app()->get('global', 'show_stacktraces', true); + } } diff --git a/application/forms/Security/RoleForm.php b/application/forms/Security/RoleForm.php index 4632dfcb1..63bd459ce 100644 --- a/application/forms/Security/RoleForm.php +++ b/application/forms/Security/RoleForm.php @@ -21,35 +21,7 @@ class RoleForm extends ConfigForm * * @var array */ - protected $providedPermissions = array( - '*' => 'Allow everything (*)', - 'config/*' => 'Allow config access (config/*)', -/* - // [tg] seems excessive for me, hidden for rc1, tbd - 'config/application/*' => 'config/application/*', - 'config/application/general' => 'config/application/general', - 'config/application/resources' => 'config/application/resources', - 'config/application/userbackend' => 'config/application/userbackend', - 'config/application/usergroupbackend' => 'config/application/usergroupbackend', - 'config/authentication/*' => 'config/authentication/*', - 'config/authentication/users/*' => 'config/authentication/users/*', - 'config/authentication/users/show' => 'config/authentication/users/show', - 'config/authentication/users/add' => 'config/authentication/users/add', - 'config/authentication/users/edit' => 'config/authentication/users/edit', - 'config/authentication/users/remove' => 'config/authentication/users/remove', - 'config/authentication/groups/*' => 'config/authentication/groups/*', - 'config/authentication/groups/show' => 'config/authentication/groups/show', - 'config/authentication/groups/add' => 'config/authentication/groups/add', - 'config/authentication/groups/edit' => 'config/authentication/groups/edit', - 'config/authentication/groups/remove' => 'config/authentication/groups/remove', - 'config/authentication/roles/*' => 'config/authentication/roles/*', - 'config/authentication/roles/show' => 'config/authentication/roles/show', - 'config/authentication/roles/add' => 'config/authentication/roles/add', - 'config/authentication/roles/edit' => 'config/authentication/roles/edit', - 'config/authentication/roles/remove' => 'config/authentication/roles/remove', - 'config/modules' => 'config/modules' -*/ - ); + protected $providedPermissions; /** * Provided restrictions by currently loaded modules @@ -63,6 +35,40 @@ class RoleForm extends ConfigForm */ public function init() { + $this->providedPermissions = array( + '*' => $this->translate('Allow everything') . ' (*)', + 'application/stacktraces' => $this->translate( + 'Allow to adjust in the preferences whether to show stacktraces' + ) . ' (application/stacktraces)', + 'config/*' => $this->translate('Allow config access') . ' (config/*)', +/* + // [tg] seems excessive for me, hidden for rc1, tbd + 'config/application/*' => 'config/application/*', + 'config/application/general' => 'config/application/general', + 'config/application/resources' => 'config/application/resources', + 'config/application/userbackend' => 'config/application/userbackend', + 'config/application/usergroupbackend' => 'config/application/usergroupbackend', + 'config/authentication/*' => 'config/authentication/*', + 'config/authentication/users/*' => 'config/authentication/users/*', + 'config/authentication/users/show' => 'config/authentication/users/show', + 'config/authentication/users/add' => 'config/authentication/users/add', + 'config/authentication/users/edit' => 'config/authentication/users/edit', + 'config/authentication/users/remove' => 'config/authentication/users/remove', + 'config/authentication/groups/*' => 'config/authentication/groups/*', + 'config/authentication/groups/show' => 'config/authentication/groups/show', + 'config/authentication/groups/add' => 'config/authentication/groups/add', + 'config/authentication/groups/edit' => 'config/authentication/groups/edit', + 'config/authentication/groups/remove' => 'config/authentication/groups/remove', + 'config/authentication/roles/*' => 'config/authentication/roles/*', + 'config/authentication/roles/show' => 'config/authentication/roles/show', + 'config/authentication/roles/add' => 'config/authentication/roles/add', + 'config/authentication/roles/edit' => 'config/authentication/roles/edit', + 'config/authentication/roles/remove' => 'config/authentication/roles/remove', + 'config/modules' => 'config/modules' +*/ + ); + + $helper = new Zend_Form_Element('bogus'); $mm = Icinga::app()->getModuleManager(); foreach ($mm->listInstalledModules() as $moduleName) { diff --git a/application/layouts/scripts/body.phtml b/application/layouts/scripts/body.phtml index 18fc18872..325b1026b 100644 --- a/application/layouts/scripts/body.phtml +++ b/application/layouts/scripts/body.phtml @@ -5,7 +5,7 @@ use Icinga\Web\Notification; use Icinga\Authentication\Auth; $moduleName = $this->layout()->moduleName; -if ($moduleName) { +if ($moduleName !== 'default') { $moduleClass = ' icinga-module module-' . $moduleName; } else { $moduleClass = ''; diff --git a/application/layouts/scripts/pdf.phtml b/application/layouts/scripts/pdf.phtml index c5b28ecbf..ed8e12780 100644 --- a/application/layouts/scripts/pdf.phtml +++ b/application/layouts/scripts/pdf.phtml @@ -4,7 +4,7 @@ use Icinga\Web\StyleSheet; $moduleName = $this->layout()->moduleName; -if ($moduleName) { +if ($moduleName !== 'default') { $moduleClass = ' icinga-module module-' . $moduleName; } else { $moduleClass = ''; diff --git a/application/views/scripts/config/modules.phtml b/application/views/scripts/config/modules.phtml index 9cf22c026..9689d777e 100644 --- a/application/views/scripts/config/modules.phtml +++ b/application/views/scripts/config/modules.phtml @@ -16,9 +16,9 @@ enabled && $module->loaded) { echo $this->icon('thumbs-up', sprintf($this->translate('Module %s is enabled'), $module->name)); } elseif (! $module->enabled) { - echo $this->icon('thumbs-down', sprintf($this->translate('Module %s is disabled'), $module->name)); + echo $this->icon('block', sprintf($this->translate('Module %s is disabled'), $module->name)); } else { // ! $module->loaded - echo $this->icon('thumbs-down', sprintf($this->translate('Module %s has failed to load'), $module->name)); + echo $this->icon('block', sprintf($this->translate('Module %s has failed to load'), $module->name)); } echo $this->qlink( diff --git a/application/views/scripts/config/resource.phtml b/application/views/scripts/config/resource.phtml index 3e34c308d..740e548d9 100644 --- a/application/views/scripts/config/resource.phtml +++ b/application/views/scripts/config/resource.phtml @@ -11,15 +11,38 @@ translate('Remove'); ?> - resources as $name): ?> + resources as $name => $value): ?> + type) { + case 'db': + $icon = 'database'; + break; + case 'ldap': + $icon = 'sitemap'; + break; + case 'livestatus': + $icon = 'flash'; + break; + case 'ssh': + $icon = 'user'; + break; + case 'file': + case 'ini': + $icon = 'doc-text'; + break; + default: + $icon = 'edit'; + break; + } + ?> qlink( $name, 'config/editresource', array('resource' => $name), array( - 'icon' => 'edit', + 'icon' => $icon, 'title' => sprintf($this->translate('Edit resource %s'), $name) ) ); ?> diff --git a/application/views/scripts/form/reorder-authbackend.phtml b/application/views/scripts/form/reorder-authbackend.phtml index 3ced989e2..4edc7e06f 100644 --- a/application/views/scripts/form/reorder-authbackend.phtml +++ b/application/views/scripts/form/reorder-authbackend.phtml @@ -6,8 +6,12 @@ translate('Order'); ?> -getBackendOrder(); ?> - +getBackendOrder(); + $backendConfigs = $form->getConfig(); + for ($i = 0; $i < count($backendNames); $i++): + $type = $backendConfigs->getSection($backendNames[$i])->get('backend'); +?> qlink( @@ -15,7 +19,8 @@ 'config/edituserbackend', array('backend' => $backendNames[$i]), array( - 'icon' => 'edit', + 'icon' => $type === 'external' ? + 'magic' : ($type === 'ldap' || $type === 'msldap' ? 'sitemap' : 'database'), 'class' => 'rowaction', 'title' => sprintf($this->translate('rEdit user backend %s'), $backendNames[$i]) ) @@ -34,7 +39,7 @@ 0): ?> -