From: Michael M Slusarz Date: Tue, 25 Jan 2011 23:30:07 +0000 (-0700) Subject: Alter prefs UI based on prefs displayed on page, rather than the pref group X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=76f05a5cc0814ba47ba238fe0cf376b399c15580;p=horde.git Alter prefs UI based on prefs displayed on page, rather than the pref group --- diff --git a/agora/lib/Application.php b/agora/lib/Application.php index c021a9c8c..58f5ea766 100644 --- a/agora/lib/Application.php +++ b/agora/lib/Application.php @@ -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; } } diff --git a/ansel/lib/Application.php b/ansel/lib/Application.php index c4c0006f9..c1f16b94e 100644 --- a/ansel/lib/Application.php +++ b/ansel/lib/Application.php @@ -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; } } diff --git a/gollem/lib/Application.php b/gollem/lib/Application.php index 5f6797cdd..c2d49e66c 100644 --- a/gollem/lib/Application.php +++ b/gollem/lib/Application.php @@ -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; } } diff --git a/horde/lib/Prefs/Ui.php b/horde/lib/Prefs/Ui.php index a3ab318d1..06fbdce58 100644 --- a/horde/lib/Prefs/Ui.php +++ b/horde/lib/Prefs/Ui.php @@ -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. diff --git a/imp/config/prefs.php.dist b/imp/config/prefs.php.dist index 6f08dd465..351e62ce1 100644 --- a/imp/config/prefs.php.dist +++ b/imp/config/prefs.php.dist @@ -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? diff --git a/imp/lib/Prefs/Ui.php b/imp/lib/Prefs/Ui.php index 0b3d366d7..cac8e9848 100644 --- a/imp/lib/Prefs/Ui.php +++ b/imp/lib/Prefs/Ui.php @@ -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 + )); } } diff --git a/kronolith/lib/Application.php b/kronolith/lib/Application.php index 0e5d49e9c..08b182b32 100644 --- a/kronolith/lib/Application.php +++ b/kronolith/lib/Application.php @@ -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; } } diff --git a/mnemo/lib/Application.php b/mnemo/lib/Application.php index 7a44f6586..c5a770950 100644 --- a/mnemo/lib/Application.php +++ b/mnemo/lib/Application.php @@ -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; } } diff --git a/nag/lib/Application.php b/nag/lib/Application.php index c8e57c7d6..a3c715c83 100644 --- a/nag/lib/Application.php +++ b/nag/lib/Application.php @@ -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'; } } diff --git a/turba/lib/Application.php b/turba/lib/Application.php index 5d831b24d..6934c12e8 100644 --- a/turba/lib/Application.php +++ b/turba/lib/Application.php @@ -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; } } diff --git a/whups/lib/Application.php b/whups/lib/Application.php index 775432d58..3643e825a 100644 --- a/whups/lib/Application.php +++ b/whups/lib/Application.php @@ -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.