Alter prefs UI based on prefs displayed on page, rather than the pref group
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 25 Jan 2011 23:30:07 +0000 (16:30 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 26 Jan 2011 00:28:48 +0000 (17:28 -0700)
agora/lib/Application.php
ansel/lib/Application.php
gollem/lib/Application.php
horde/lib/Prefs/Ui.php
imp/config/prefs.php.dist
imp/lib/Prefs/Ui.php
kronolith/lib/Application.php
mnemo/lib/Application.php
nag/lib/Application.php
turba/lib/Application.php
whups/lib/Application.php

index c021a9c..58f5ea7 100644 (file)
@@ -124,18 +124,7 @@ class Agora_Application extends Horde_Registry_Application
      */
     public function prefsInit($ui)
     {
-        switch ($ui->group) {
-        case 'display_avatar':
-            $vfs = Agora::getVFS();
-            if (!($vfs instanceof PEAR_Error) &&
-                $GLOBALS['conf']['avatar']['enable_gallery'] &&
-                $vfs->isFolder(Agora::AVATAR_PATH, 'gallery')) {
-                Horde::addScriptFile('popup.js', 'horde', true);
-            }
-            break;
-        }
-
-        /* Hide appropriate prefGroups. */
+        /* Hide prefGroups. */
         if (!$GLOBALS['conf']['avatar']['allow_avatars']) {
             $ui->suppressGroups[] = 'display_avatar';
         }
@@ -148,15 +137,19 @@ class Agora_Application extends Horde_Registry_Application
      */
     public function prefsGroup($ui)
     {
-        switch ($ui->group) {
-        case 'display_avatar':
-            $vfs = Agora::getVFS();
-            if (($vfs instanceof PEAR_Error) ||
-                !$GLOBALS['conf']['avatar']['enable_gallery'] ||
-                !$vfs->isFolder(Agora::AVATAR_PATH, 'gallery')) {
-                $suppress[] = 'avatar_link';
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'avatar_link':
+                $vfs = Agora::getVFS();
+                if (($vfs instanceof PEAR_Error) ||
+                    !$GLOBALS['conf']['avatar']['enable_gallery'] ||
+                    !$vfs->isFolder(Agora::AVATAR_PATH, 'gallery')) {
+                    $ui->suppress[] = 'avatar_link';
+                } else {
+                    Horde::addScriptFile('popup.js', 'horde', true);
+                }
+                break;
             }
-            break;
         }
     }
 
index c4c0006..c1f16b9 100644 (file)
@@ -173,18 +173,18 @@ class Ansel_Application extends Horde_Registry_Application
      */
     public function prefsGroup($ui)
     {
-        global $conf, $prefs;
+        global $conf;
 
-        switch ($ui->group) {
-        case 'metadata':
-            if (!$prefs->isLocked('exif_tags')) {
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'exif_tags':
                 $fields = Horde_Image_Exif::getFields(array($conf['exif']['driver'], !empty($conf['exif']['params']) ? $conf['exif']['params'] : array()), true);
                 $ui->override['exif_tags'] = $fields;
                 $ui->override['exif_title'] = array_merge(array(
                     'none' => _("None")
                 ), $fields);
+                break;
             }
-            break;
         }
     }
 
index 5f6797c..c2d49e6 100644 (file)
@@ -92,20 +92,18 @@ class Gollem_Application extends Horde_Registry_Application
     }
 
     /**
-     * Code to run on init when viewing prefs for this application.
+     * Determine active prefs when displaying a group.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.
      */
-    public function prefsInit($ui)
+    public function prefsGroup($ui)
     {
-        global $prefs;
-
-        switch ($ui->group) {
-        case 'display':
-            if (!$prefs->isLocked('columns')) {
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'columns':
                 Horde_Core_Prefs_Ui_Widgets::sourceInit();
+                break;
             }
-            break;
         }
     }
 
index a3ab318..06fbdce 100644 (file)
@@ -19,49 +19,9 @@ class Horde_Prefs_Ui
      */
     public function prefsInit($ui)
     {
-        global $conf, $injector, $prefs, $registry;
+        global $conf, $injector;
 
-        switch ($ui->group) {
-        case 'display':
-            if (!$prefs->isLocked('initial_application')) {
-                $out = array();
-                $apps = $registry->listApps(array('active'));
-                foreach ($apps as $a) {
-                    $perms = $injector->getInstance('Horde_Perms');
-                    if (file_exists($registry->get('fileroot', $a)) &&
-                        (($perms->exists($a) && ($perms->hasPermission($a, $registry->getAuth(), Horde_Perms::READ) || $registry->isAdmin())) ||
-                         !$perms->exists($a))) {
-                        $out[$a] = $registry->get('name', $a);
-                    }
-                }
-                asort($out);
-                $ui->override['initial_application'] = $out;
-            }
-
-            if (!$prefs->isLocked('theme')) {
-                $ui->override['theme'] = Horde_Themes::themeList();
-            }
-            break;
-
-        case 'language':
-            if (!$prefs->isLocked('language')) {
-                $ui->override['language'] = $registry->nlsconfig->languages;
-                array_unshift($ui->override['language'], _("Default"));
-            }
-
-            if (!$prefs->isLocked('timezone')) {
-                $ui->override['timezone'] = Horde_Nls::getTimezones();
-                array_unshift($ui->override['timezone'], _("Default"));
-            }
-            break;
-
-        case 'remote':
-            Horde::addScriptFile('rpcprefs.js', 'horde');
-            $ui->nobuttons = true;
-            break;
-        }
-
-        /* Hide appropriate prefGroups. */
+        /* Hide prefGroups. */
         try {
             $injector->getInstance('Horde_Core_Factory_Auth')->create()->hasCapability('update');
         } catch (Horde_Exception $e) {
@@ -90,6 +50,54 @@ class Horde_Prefs_Ui
     }
 
     /**
+     * Determine active prefs when displaying a group.
+     *
+     * @param Horde_Core_Prefs_Ui $ui  The UI object.
+     */
+    public function prefsGroup($ui)
+    {
+        global $injector, $registry;
+
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'initial_application':
+                $out = array();
+                $apps = $registry->listApps(array('active'));
+                foreach ($apps as $a) {
+                    $perms = $injector->getInstance('Horde_Perms');
+                    if (file_exists($registry->get('fileroot', $a)) &&
+                        (($perms->exists($a) && ($perms->hasPermission($a, $registry->getAuth(), Horde_Perms::READ) || $registry->isAdmin())) ||
+                         !$perms->exists($a))) {
+                        $out[$a] = $registry->get('name', $a);
+                    }
+                }
+                asort($out);
+                $ui->override['initial_application'] = $out;
+                break;
+
+            case 'language':
+                $ui->override['language'] = $registry->nlsconfig->languages;
+                array_unshift($ui->override['language'], _("Default"));
+                break;
+
+            case 'remotemanagement':
+                Horde::addScriptFile('rpcprefs.js', 'horde');
+                $ui->nobuttons = true;
+                break;
+
+            case 'theme':
+                $ui->override['theme'] = Horde_Themes::themeList();
+                break;
+
+            case 'timezone':
+                $ui->override['timezone'] = Horde_Nls::getTimezones();
+                array_unshift($ui->override['timezone'], _("Default"));
+                break;
+            }
+        }
+    }
+
+    /**
      * Generate code used to display a special preference.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.
index 6f08dd4..351e62c 100644 (file)
@@ -1333,9 +1333,17 @@ $prefGroups['pgp'] = array(
     'label' => _("PGP Preferences"),
     'desc' => sprintf(_("Control PGP support for %s."), $GLOBALS['registry']->get('name')),
     'members' => array(
+        'pgpmanagement'
+    )
+);
+
+// These preferences MUST appear on the same page.
+$_prefs['pgpmanagement'] = array(
+    'value' => array(
         'use_pgp', 'use_pgp_text', 'pgp_attach_pubkey', 'pgp_scan_body',
         'pgp_verify', 'pgp_reply_pubkey', 'pgppublickey', 'pgpprivatekey'
-    )
+    ),
+    'type' => 'container'
 );
 
 // Activate PGP support?
@@ -1405,9 +1413,17 @@ $prefGroups['smime'] = array(
     'label' => _("S/MIME Preferences"),
     'desc' => sprintf(_("Control S/MIME support for %s."), $GLOBALS['registry']->get('name')),
     'members' => array(
+        'smimemanagement'
+    )
+);
+
+// These preferences MUST appear on the same page.
+$_prefs['smimemanagement'] = array(
+    'value' => array(
         'use_smime', 'use_smime_text', 'smime_verify', 'smimepublickey',
         'smimeprivatekey'
-    )
+    ),
+    'type' => 'container'
 );
 
 // Activate S/MIME support?
index 0b3d366..cac8e98 100644 (file)
@@ -33,102 +33,7 @@ class IMP_Prefs_Ui
      */
     public function prefsInit($ui)
     {
-        global $conf, $injector, $prefs, $registry, $session;
-
-        switch ($ui->group) {
-        case 'accounts':
-            if (!empty($conf['user']['allow_accounts'])) {
-                Horde::addScriptFile('accountsprefs.js', 'imp');
-            }
-            break;
-
-        case 'acl':
-            Horde::addScriptFile('acl.js', 'imp');
-            break;
-
-        case 'addressbooks':
-            if (!$prefs->isLocked('sourceselect')) {
-                Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
-            }
-            break;
-
-        case 'delmove':
-            if ($session->get('imp', 'protocol') == 'pop') {
-                $tmp = $ui->prefs['delete_spam_after_report']['enum'];
-                unset($tmp[2]);
-                $ui->override['delete_spam_after_report'] = $tmp;
-            }
-            break;
-
-        case 'display':
-            /* Set the timezone on this page so the 'time_format' output uses
-             * the configured time zone's time, not the system's time zone. */
-            $registry->setTimeZone();
-            break;
-
-        case 'flags':
-            if ($prefs->isLocked('msgflags') &&
-                $prefs->isLocked('msgflags_user')) {
-                $ui->nobuttons = true;
-            } else {
-                Horde::addScriptFile('colorpicker.js', 'horde');
-                Horde::addScriptFile('flagprefs.js', 'imp');
-            }
-            break;
-
-        case 'identities':
-            if (!$prefs->isLocked('sent_mail_folder')) {
-                Horde::addScriptFile('folderprefs.js', 'imp');
-            }
-
-            if (!$prefs->isLocked('signature_html') &&
-                $session->get('imp', 'rteavail')) {
-                Horde::addScriptFile('signaturehtml.js', 'imp');
-                IMP_Ui_Editor::init(false, 'signature_html');
-            }
-            break;
-
-        case 'pgp':
-            Horde::addScriptFile('imp.js', 'imp');
-            break;
-
-        case 'searches':
-            Horde::addScriptFile('searchesprefs.js', 'imp');
-            break;
-
-        case 'server':
-            $code = array();
-
-            if (!$prefs->isLocked('drafts_folder')) {
-                $code['drafts'] = _("Enter the name for your new drafts folder.");
-            }
-
-            if (!$prefs->isLocked('spam_folder')) {
-                $code['spam'] = _("Enter the name for your new spam folder.");
-            }
-
-            if (!$prefs->isLocked('trash_folder')) {
-                $code['trash'] = _("Enter the name for your new trash folder.");
-            }
-
-            if (!empty($code)) {
-                Horde::addScriptFile('folderprefs.js', 'imp');
-                Horde::addInlineJsVars(array(
-                    'ImpFolderPrefs.folders' => $code
-                ));
-            }
-            break;
-
-        case 'smime':
-            Horde::addScriptFile('imp.js', 'imp');
-            break;
-
-        case 'stationery':
-            if (!$prefs->isLocked('stationery')) {
-                $ui->nobuttons = true;
-            }
-            break;
-        }
+        global $conf, $injector, $registry, $session;
 
         /* Hide appropriate prefGroups. */
         if ($session->get('imp', 'protocol') == 'pop') {
@@ -180,180 +85,267 @@ class IMP_Prefs_Ui
         global $conf, $injector, $prefs, $registry, $session;
 
         switch ($ui->group) {
-        case 'accounts':
-            if (empty($conf['user']['allow_accounts'])) {
-                $ui->suppress[] = 'accountsmanagement';
+        case 'identities':
+            if ($prefs->isLocked('sent_mail_folder')) {
+                $ui->suppress[] = 'sentmailselect';
+            } else {
+                Horde::addScriptFile('folderprefs.js', 'imp');
+            }
+
+            if ($prefs->isLocked('signature_html') ||
+                !$session->get('imp', 'rteavail')) {
+                $ui->suppress[] = 'signature_html_select';
+            } else {
+                Horde::addScriptFile('signaturehtml.js', 'imp');
+                IMP_Ui_Editor::init(false, 'signature_html');
             }
             break;
+        }
 
-        case 'addressbooks':
-            if (!$prefs->isLocked('add_source')) {
+        $folder_code = array();
+
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'accountsmanagement':
+                if (empty($conf['user']['allow_accounts'])) {
+                    $ui->suppress[] = 'accountsmanagement';
+                } else {
+                    Horde::addScriptFile('accountsprefs.js', 'imp');
+                }
+                break;
+
+            case 'aclmanagement':
+                Horde::addScriptFile('acl.js', 'imp');
+                break;
+
+            case 'add_source':
                 try {
                     $ui->override['add_source'] = $registry->call('contacts/sources', array(true));
                 } catch (Horde_Exception $e) {
                     $ui->suppress[] = 'add_source';
                 }
-            }
-            break;
+                break;
 
-        case 'compose':
-            if ($prefs->isLocked('default_encrypt')) {
-                $ui->suppress[] = 'encryptselect';
-            }
+            case 'alternative_display':
+                $mock_part = new Horde_Mime_Part();
+                $mock_part->setType('text/html');
+                $v = $injector->getInstance('IMP_Injector_Factory_MimeViewer')->create($mock_part);
 
-            if (!$prefs->getValue('compose_html')) {
-                $ui->suppress[] = 'compose_html_font_family';
-                $ui->suppress[] = 'compose_html_font_size';
-            }
-            break;
+                if (!$v->canRender('inline')) {
+                    $ui->suppress[] = 'alternative_display';
+                }
+                break;
 
-        case 'delmove':
-            if ($session->get('imp', 'protocol') == 'pop') {
-                $ui->suppress[] = 'move_ham_after_report';
-                $ui->suppress[] = 'empty_spam_menu';
-                $ui->suppress[] = 'use_trash';
-                $ui->suppress[] = 'trashselect';
-                $ui->suppress[] = 'empty_trash_menu';
-            } elseif ($prefs->isLocked('use_trash') ||
-                     !$prefs->getValue('use_trash')) {
-                $ui->suppress[] = 'trashselect';
-                $ui->suppress[] = 'empty_trash_menu';
-            }
-            break;
+            case 'compose_html_font_family':
+            case 'compose_html_font_size':
+                if (!$prefs->getValue('compose_html')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
 
-        case 'dimp':
-            if (!empty($conf['user']['force_view'])) {
-                $ui->suppress[] = 'dynamic_view';
-            }
-            break;
+            case 'delete_sentmail_monthly':
+            case 'delete_sentmail_monthly_keep':
+            case 'empty_spam_menu':
+            case 'initialpageselect':
+            case 'move_ham_after_report':
+            case 'nav_expanded':
+            case 'nav_poll_all':
+            case 'purge_sentmail':
+            case 'purge_sentmail_interval':
+            case 'purge_sentmail_keep':
+            case 'purge_spam':
+            case 'purge_spam_interval':
+            case 'purge_spam_keep':
+            case 'purge_trash':
+            case 'purge_trash_interval':
+            case 'purge_trash_keep':
+            case 'rename_sentmail_monthly':
+            case 'tree_view':
+            case 'use_trash':
+                if ($session->get('imp', 'protocol') == 'pop') {
+                    $ui->suppress[] = $val;
+                }
+                break;
 
-        case 'display':
-            if ($session->get('imp', 'protocol') == 'pop') {
-                $ui->suppress[] = 'nav_expanded';
-                $ui->suppress[] = 'tree_view';
-            }
-            break;
+            case 'delete_spam_after_report':
+                if ($session->get('imp', 'protocol') == 'pop') {
+                    $tmp = $ui->prefs['delete_spam_after_report']['enum'];
+                    unset($tmp[2]);
+                    $ui->override['delete_spam_after_report'] = $tmp;
+                }
+                break;
 
-        case 'filters':
-            if (!$session->get('imp', 'filteravail')) {
-                $ui->suppress[] = 'filter_on_login';
-                $ui->suppress[] = 'filter_on_display';
-                $ui->suppress[] = 'filter_any_mailbox';
-            }
-            if (!$registry->hasMethod('mail/showFilters')) {
-                $ui->suppress[] = 'filters_link';
-            }
-            if (!$registry->hasMethod('mail/showBlacklist')) {
-                $ui->suppress[] = 'filters_blacklist_link';
-            }
-            if (!$registry->hasMethod('mail/showWhitelist')) {
-                $ui->suppress[] = 'filters_whitelist_link';
-            }
-            break;
+            case 'drafts_folder':
+                $folder_code['drafts'] = _("Enter the name for your new drafts folder.");
+                break;
 
-        case 'identities':
-            if ($prefs->isLocked('sent_mail_folder')) {
-                $ui->suppress[] = 'sentmailselect';
-            }
+            case 'draftsselect':
+                if ($prefs->isLocked('drafts_folder')) {
+                    $ui->suppress[] = 'draftsselect';
+                }
+                break;
 
-            if ($prefs->isLocked('signature_html') ||
-                !$session->get('imp', 'rteavail')) {
-                $ui->suppress[] = 'signature_html_select';
-            }
-            break;
+            case 'dynamic_view':
+                if (!empty($conf['user']['force_view'])) {
+                    $ui->suppress[] = 'dynamic_view';
+                }
+                break;
 
-        case 'logintasks':
-            if ($prefs->isLocked('initial_page')) {
-                $ui->suppress[] = 'initialpageselect';
-            }
-            if ($session->get('imp', 'protocol') == 'pop') {
-                $ui->suppress[] = 'initialpageselect';
-                $ui->suppress[] = 'rename_sentmail_monthly';
-                $ui->suppress[] = 'delete_sentmail_monthly';
-                $ui->suppress[] = 'delete_sentmail_monthly_keep';
-                $ui->suppress[] = 'purge_sentmail';
-                $ui->suppress[] = 'purge_sentmail_interval';
-                $ui->suppress[] = 'purge_sentmail_keep';
-                $ui->suppress[] = 'purge_trash';
-                $ui->suppress[] = 'purge_trash_interval';
-                $ui->suppress[] = 'purge_trash_keep';
-                $ui->suppress[] = 'purge_spam';
-                $ui->suppress[] = 'purge_spam_interval';
-                $ui->suppress[] = 'purge_spam_keep';
-            }
-            break;
+            case 'empty_trash_menu':
+            case 'trashselect':
+                if (($session->get('imp', 'protocol') == 'pop') ||
+                    $prefs->isLocked('use_trash') ||
+                    !$prefs->getValue('use_trash')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
 
-        case 'newmail':
-            if ($prefs->isLocked('nav_audio')) {
-                $ui->suppress[] = 'soundselect';
-            }
-            if ($session->get('imp', 'protocol') == 'pop') {
-                $ui->suppress[] = 'nav_poll_all';
-            }
-            break;
+            case 'encryptselect':
+                if ($prefs->isLocked('default_encrypt')) {
+                    $ui->suppress[] = 'encryptselect';
+                }
+                break;
 
-        case 'pgp':
-            if (!$prefs->getValue('use_pgp')) {
-                $ui->suppress[] = 'use_pgp_text';
-                $ui->suppress[] = 'pgp_attach_pubkey';
-                $ui->suppress[] = 'pgp_scan_body';
-                $ui->suppress[] = 'pgp_verify';
-                $ui->suppress[] = 'pgp_reply_pubkey';
-                $ui->suppress[] = 'pgppublickey';
-                $ui->suppress[] = 'pgpprivatekey';
-            }
-            break;
+            case 'filter_any_mailbox':
+            case 'filter_on_display':
+            case 'filter_on_login':
+                if (!$session->get('imp', 'filteravail')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
 
-        case 'server':
-            if ($prefs->isLocked('drafts_folder')) {
-                $ui->suppress[] = 'draftsselect';
-            }
-            if ($prefs->isLocked('spam_folder')) {
-                $ui->suppress[] = 'spamselect';
-            }
+            case 'filters_blacklist_link':
+                if (!$registry->hasMethod('mail/showBlacklist')) {
+                    $ui->suppress[] = 'filters_blacklist_link';
+                }
+                break;
 
-            if ($prefs->isLocked('trash_folder')) {
-                $ui->suppress[] = 'trashselect';
-            }
-            break;
+            case 'filters_link':
+                if (!$registry->hasMethod('mail/showFilters')) {
+                    $ui->suppress[] = 'filters_link';
+                }
+                break;
 
-        case 'smime':
-            if (!$prefs->getValue('use_smime')) {
-                $ui->suppress[] = 'use_smime_text';
-                $ui->suppress[] = 'smime_verify';
-                $ui->suppress[] = 'smimepublickey';
-                $ui->suppress[] = 'smimeprivatekey';
-            }
-            break;
+            case 'filters_whitelist_link':
+                if (!$registry->hasMethod('mail/showWhitelist')) {
+                    $ui->suppress[] = 'filters_whitelist_link';
+                }
+                break;
 
-        case 'stationery':
-            if ($prefs->isLocked('stationery')) {
-                $ui->suppress[]  = 'stationerymanagement';
-            }
-            break;
+            case 'flagmanagement':
+                if ($prefs->isLocked('msgflags') &&
+                    $prefs->isLocked('msgflags_user')) {
+                    $ui->nobuttons = true;
+                } else {
+                    Horde::addScriptFile('colorpicker.js', 'horde');
+                    Horde::addScriptFile('flagprefs.js', 'imp');
+                }
+                break;
 
-        case 'standard':
-            if (!$prefs->getValue('preview_enabled')) {
-                $ui->suppress[] = 'preview_maxlen';
-                $ui->suppress[] = 'preview_strip_nl';
-                $ui->suppress[] = 'preview_show_unread';
-                $ui->suppress[] = 'preview_show_tooltip';
-            }
-            break;
+            case 'initialpageselect':
+                if ($prefs->isLocked('initial_page')) {
+                    $ui->suppress[] = 'initialpageselect';
+                }
+                break;
 
-        case 'viewing':
-            if (empty($conf['maillog']['use_maillog'])) {
-                $ui->suppress[] = 'send_mdn';
-            }
+            case 'pgp_attach_pubkey':
+            case 'use_pgp_text':
+            case 'pgp_reply_pubkey':
+            case 'pgp_scan_body':
+            case 'pgp_verify':
+            case 'pgpprivatekey':
+            case 'pgppublickey':
+                if (!$prefs->getValue('use_pgp')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
+
+            case 'pgpmanagement':
+            case 'smimemanagement':
+                Horde::addScriptFile('imp.js', 'imp');
+                break;
 
-            $mock_part = new Horde_Mime_Part();
-            $mock_part->setType('text/html');
-            $v = $injector->getInstance('IMP_Injector_Factory_MimeViewer')->create($mock_part);
+            case 'preview_maxlen':
+            case 'preview_show_unread':
+            case 'preview_show_tooltip':
+            case 'preview_strip_nl':
+                if (!$prefs->getValue('preview_enabled')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
 
-            if (!$v->canRender('inline')) {
-                $ui->suppress[] = 'alternative_display';
+            case 'searchesmanagement':
+                Horde::addScriptFile('searchesprefs.js', 'imp');
+                break;
+
+            case 'send_mdn':
+                if (empty($conf['maillog']['use_maillog'])) {
+                    $ui->suppress[] = 'send_mdn';
+                }
+                break;
+
+            case 'smime_verify':
+            case 'smimeprivatekey':
+            case 'smimepublickey':
+            case 'use_smime_text':
+                if (!$prefs->getValue('use_smime')) {
+                    $ui->suppress[] = $val;
+                }
+                break;
+
+            case 'soundselect':
+                if ($prefs->isLocked('nav_audio')) {
+                    $ui->suppress[] = 'soundselect';
+                }
+                break;
+
+            case 'sourceselect':
+                Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
+                break;
+
+            case 'spam_folder':
+                $folder_code['spam'] = _("Enter the name for your new spam folder.");
+                break;
+
+            case 'spamselect':
+                if ($prefs->isLocked('spam_folder')) {
+                    $ui->suppress[] = 'spamselect';
+                }
+                break;
+
+            case 'stationery':
+                $ui->nobuttons = true;
+                break;
+
+            case 'stationerymanagement':
+                if ($prefs->isLocked('stationery')) {
+                    $ui->suppress[]  = 'stationerymanagement';
+                }
+                break;
+
+            case 'time_format':
+                /* Set the timezone on this page so the output uses the
+                 * configured time zone's time, not the system's time zone. */
+                $registry->setTimeZone();
+                break;
+
+            case 'trash_folder':
+                $folder_code['trash'] = _("Enter the name for your new trash folder.");
+                break;
+
+            case 'trashselect':
+                if ($prefs->isLocked('trash_folder')) {
+                    $ui->suppress[] = 'trashselect';
+                }
+                break;
             }
-            break;
+        }
+
+        if (!empty($folder_code)) {
+            Horde::addScriptFile('folderprefs.js', 'imp');
+            Horde::addInlineJsVars(array(
+                'ImpFolderPrefs.folders' => $folder_code
+            ));
         }
     }
 
index 0e5d49e..08b182b 100644 (file)
@@ -176,54 +176,7 @@ class Kronolith_Application extends Horde_Registry_Application
      */
     public function prefsInit($ui)
     {
-        global $conf, $prefs, $registry;
-
-        switch ($ui->group) {
-        case 'addressbooks':
-            if (!$prefs->isLocked('sourceselect')) {
-                Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
-            }
-            break;
-
-        case 'freebusy':
-            if (!$prefs->isLocked('fb_cals')) {
-                $fb_list = array();
-                foreach (Kronolith::listCalendars() as $fb_cal => $cal) {
-                    if ($cal->display()) {
-                        $fb_list[htmlspecialchars($fb_cal)] = htmlspecialchars($cal->name());
-                    }
-                }
-                $ui->override['fb_cals'] = $fb_list;
-            }
-            break;
-
-        case 'notification':
-            if (!empty($conf['alarms']['driver']) &&
-                !$prefs->isLocked('event_alarms') &&
-                !$prefs->isLocked('event_alarms_select')) {
-                Horde_Core_Prefs_Ui_Widgets::alarmInit();
-            }
-            break;
-
-        case 'share':
-            foreach (Kronolith::listInternalCalendars(false, Horde_Perms::EDIT) as $id => $calendar) {
-                $ui->override['default_share'][$id] = $calendar->get('name');
-            }
-            break;
-
-        case 'view':
-            $hour = array();
-            for ($i = 0; $i <= 48; ++$i) {
-                $hour[$i] = date(($prefs->getValue('twentyFour')) ? 'G:i' : 'g:ia', mktime(0, $i * 30, 0));
-            }
-            if (!$prefs->isLocked('day_hour_start')) {
-                $ui->override['day_hour_start'] = $hour;
-            }
-            if (!$prefs->isLocked('day_hour_end')) {
-                $ui->override['day_hour_end'] = $hour;
-            }
-            break;
-        }
+        global $prefs, $registry;
 
         /* Suppress prefGroups display. */
         if (!$registry->hasMethod('contacts/sources')) {
@@ -244,14 +197,46 @@ class Kronolith_Application extends Horde_Registry_Application
     {
         global $conf, $prefs;
 
-        switch ($ui->group) {
-        case 'notification':
-            if (empty($conf['alarms']['driver']) ||
-                $prefs->isLocked('event_alarms') ||
-                $prefs->isLocked('event_alarms_select')) {
-                $ui->suppress[] = 'event_alarms';
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'day_hour_end':
+            case 'day_hour_start':
+                $hour = array();
+                for ($i = 0; $i <= 48; ++$i) {
+                    $hour[$i] = date(($prefs->getValue('twentyFour')) ? 'G:i' : 'g:ia', mktime(0, $i * 30, 0));
+                }
+                $ui->override[$val] = $hour;
+                break;
+
+            case 'default_share':
+                foreach (Kronolith::listInternalCalendars(false, Horde_Perms::EDIT) as $id => $calendar) {
+                    $ui->override['default_share'][$id] = $calendar->get('name');
+                }
+                break;
+
+            case 'event_alarms':
+                if (empty($conf['alarms']['driver']) ||
+                    $prefs->isLocked('event_alarms_select')) {
+                    $ui->suppress[] = 'event_alarms';
+                } else {
+                    Horde_Core_Prefs_Ui_Widgets::alarmInit();
+                }
+                break;
+
+            case 'fb_cals':
+                $fb_list = array();
+                foreach (Kronolith::listCalendars() as $fb_cal => $cal) {
+                    if ($cal->display()) {
+                        $fb_list[htmlspecialchars($fb_cal)] = htmlspecialchars($cal->name());
+                    }
+                }
+                $ui->override['fb_cals'] = $fb_list;
+                break;
+
+            case 'sourceselect':
+                Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
+                break;
             }
-            break;
         }
     }
 
index 7a44f65..c5a7709 100644 (file)
@@ -120,22 +120,22 @@ class Mnemo_Application extends Horde_Registry_Application
     }
 
     /**
-     * Run once on init when viewing prefs for an application.
+     * Determine active prefs when displaying a group.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.
      */
-    public function prefsInit($ui)
+    public function prefsGroup($ui)
     {
-        switch ($ui->group) {
-        case 'share':
-            if (!$GLOBALS['prefs']->isLocked('default_notepad')) {
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'default_notepad':
                 $notepads = array();
                 foreach (Mnemo::listNotepads() as $key => $val) {
                     $notepads[htmlspecialchars($key)] = htmlspecialchars($val->get('name'));
                 }
                 $ui->override['default_notepad'] = $notepads;
+                break;
             }
-            break;
         }
     }
 
index c8e57c7..a3c715c 100644 (file)
@@ -131,17 +131,30 @@ class Nag_Application extends Horde_Registry_Application
     }
 
     /**
-     * Code to run on init when viewing prefs for this application.
+     * Determine active prefs when displaying a group.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.
      */
-    public function prefsInit($ui)
+    public function prefsGroup($ui)
     {
         global $conf, $prefs, $registry;
 
-        switch ($ui->group) {
-        case 'share':
-            if (!$prefs->isLocked('default_tasklist')) {
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'default_due_time':
+                $twentyfour = $prefs->getValue('twentyFour');
+
+                $vals = array('now' => _("The current hour"));
+                for ($i = 0; $i < 24; ++$i) {
+                    $value = sprintf('%02d:00', $i);
+                    $vals[$value] = ($twentyfour)
+                        ? $value
+                        : sprintf('%02d:00 ' . ($i >= 12 ? _("pm") : _("am")), ($i % 12 ? $i % 12 : 12));
+                }
+                $ui->override['default_due_time'] = $vals;
+                break;
+
+            case 'default_tasklist':
                 $all_tasklists = Nag::listTasklists();
                 $tasklists = array();
 
@@ -159,61 +172,27 @@ class Nag_Application extends Horde_Registry_Application
                     $vals[htmlspecialchars($id)] = htmlspecialchars($tasklist->get('name'));
                 }
                 $ui->override['default_tasklist'] = $vals;
-            }
-            break;
-
-        case 'notification':
-            if (!empty($conf['alarms']['driver']) &&
-                !$prefs->isLocked('task_alarms') &&
-                !$prefs->isLocked('task_alarms_select')) {
-                Horde_Core_Prefs_Ui_Widgets::alarmInit();
-            }
-            break;
-
-        case 'tasks':
-            if (!$prefs->isLocked('default_due_time')) {
-                $twentyfour = $prefs->getValue('twentyFour');
-
-                $vals = array('now' => _("The current hour"));
-                for ($i = 0; $i < 24; ++$i) {
-                    $value = sprintf('%02d:00', $i);
-                    $vals[$value] = ($twentyfour)
-                        ? $value
-                        : sprintf('%02d:00 ' . ($i >= 12 ? _("pm") : _("am")), ($i % 12 ? $i % 12 : 12));
+                break;
+
+            case 'show_external':
+                if ($registry->hasMethod('getListTypes', 'whups')) {
+                    $ui->override['show_external'] = array(
+                        'whups' => $registry->get('name', 'whups')
+                    );
+                } else {
+                    $ui->suppress[] = 'show_external';
                 }
-                $ui->override['default_due_time'] = $vals;
-            }
-            break;
-        }
-
-        if ($registry->hasMethod('getListTypes', 'whups')) {
-            $ui->override['show_external'] = array(
-                'whups' => $registry->get('name', 'whups')
-            );
-        }
-    }
-
-    /**
-     * Determine active prefs when displaying a group.
-     *
-     * @param Horde_Core_Prefs_Ui $ui  The UI object.
-     */
-    public function prefsGroup($ui)
-    {
-        global $conf, $prefs, $registry;
-
-        switch ($ui->group) {
-        case 'notification':
-            if (empty($conf['alarms']['driver']) ||
-                $prefs->isLocked('task_alarms') ||
-                $prefs->isLocked('task_alarms_select')) {
-                $ui->suppress[] = 'task_alarms';
+                break;
+
+            case 'task_alarms':
+                if (empty($conf['alarms']['driver']) ||
+                    $prefs->isLocked('task_alarms_select')) {
+                    $ui->suppress[] = 'task_alarms';
+                } else {
+                    Horde_Core_Prefs_Ui_Widgets::alarmInit();
+                }
+                break;
             }
-            break;
-        }
-
-        if (!$registry->hasMethod('getListTypes', 'whups')) {
-            $ui->suppress[] = 'show_external';
         }
     }
 
index 5d831b2..6934c12 100644 (file)
@@ -188,47 +188,57 @@ class Turba_Application extends Horde_Registry_Application
     }
 
     /**
-     * Code to run on init when viewing prefs for this application.
+     * Determine active prefs when displaying a group.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.
      */
-    public function prefsInit($ui)
+    public function prefsGroup($ui)
     {
         global $prefs;
 
-        switch ($ui->group) {
-        case 'addressbooks':
-            if (!$prefs->isLocked('default_dir')) {
+        $source_init = false;
+
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val->group) {
+            case 'columnselect':
+                Horde::addScriptFile('effects.js', 'horde');
+                Horde::addScriptFile('dragdrop.js', 'horde');
+                Horde::addScriptFile('columnprefs.js', 'turba');
+                break;
+
+            case 'default_dir':
                 $out = array();
                 foreach ($GLOBALS['cfgSources'] as $key => $info) {
                     $out[$key] = $info['title'];
                 }
                 $ui->override['default_dir'] = $out;
-            }
 
-            $out = array();
-            foreach (Turba::getAddressBooks() as $key => $curSource) {
-                if (empty($curSource['map']['__uid'])) {
-                    continue;
-                }
-                if (!empty($curSource['browse'])) {
-                    $out[$key] = $curSource['title'];
-                }
-                $sync_books = @unserialize($prefs->getValue('sync_books'));
-                if (empty($sync_books)) {
-                    $prefs->setValue('sync_books', serialize(array(Turba::getDefaultAddressbook())));
+                $source_init = true;
+                break;
+
+            case 'sync_books':
+                $out = array();
+                foreach (Turba::getAddressBooks() as $key => $curSource) {
+                    if (empty($curSource['map']['__uid'])) {
+                        continue;
+                    }
+                    if (!empty($curSource['browse'])) {
+                        $out[$key] = $curSource['title'];
+                    }
+                    $sync_books = @unserialize($prefs->getValue('sync_books'));
+                    if (empty($sync_books)) {
+                        $prefs->setValue('sync_books', serialize(array(Turba::getDefaultAddressbook())));
+                    }
                 }
+                $ui->override['sync_books'] = $out;
+
+                $source_init = true;
+                break;
             }
-            $ui->override['sync_books'] = $out;
+        }
 
+        if ($source_init) {
             Horde_Core_Prefs_Ui_Widgets::sourceInit();
-            break;
-
-        case 'columns':
-            Horde::addScriptFile('effects.js', 'horde');
-            Horde::addScriptFile('dragdrop.js', 'horde');
-            Horde::addScriptFile('columnprefs.js', 'turba');
-            break;
         }
     }
 
index 775432d..3643e82 100644 (file)
@@ -123,18 +123,28 @@ class Whups_Application extends Horde_Registry_Application
      */
     public function prefsInit($ui)
     {
-        switch ($ui->group) {
-        case 'addressbooks':
-            Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
-            break;
-        }
-
         if (!$GLOBALS['registry']->hasMethod('contacts/sources')) {
             $ui->suppressGroups[] = 'addressbooks';
         }
     }
 
     /**
+     * Determine active prefs when displaying a group.
+     *
+     * @param Horde_Core_Prefs_Ui $ui  The UI object.
+     */
+    public function prefsGroup($ui)
+    {
+        foreach ($ui->getChangeablePrefs() as $val) {
+            switch ($val) {
+            case 'sourceselect':
+                Horde_Core_Prefs_Ui_Widgets::addressbooksInit();
+                break;
+            }
+        }
+    }
+
+    /**
      * Generate code used to display a special preference.
      *
      * @param Horde_Core_Prefs_Ui $ui  The UI object.