From: Michael M Slusarz Date: Tue, 16 Nov 2010 19:34:38 +0000 (-0700) Subject: Automatically build default filters/vfolder list. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=0fb014c4e8c04e2b985e3e04cb4285a53f7dd2c1;p=horde.git Automatically build default filters/vfolder list. --- diff --git a/imp/config/prefs.php.dist b/imp/config/prefs.php.dist index 081c371f9..7088be3a4 100644 --- a/imp/config/prefs.php.dist +++ b/imp/config/prefs.php.dist @@ -384,39 +384,15 @@ $_prefs['searchesmanagement'] = array( ); $_prefs['vfolder'] = array( - // 'value' => serialize(array( - // // Virtual Inbox, enabled by default. - // new IMP_Search_Vfolder_Vinbox(array( - // 'disable' => false - // )), - // // Virtual Trash, disabled by default. - // new IMP_Search_Vfolder_Vtrash(array( - // 'disable' => true - // )) - // )) - 'value' => 'a:1:{i:0;C:25:"IMP_Search_Vfolder_Vinbox":30:{a:2:{s:1:"e";i:1;s:1:"v";i:1;}}}' + // By default, Virtual Inbox is enabled and Virtual Trash is disabled. + // 'value' => serialize(array()) + 'value' => 'a:0:{}' ); $_prefs['filter'] = array( - // 'value' => serialize(array( - // // Attachments filter, enabled by default - // new IMP_Search_Filter_Attachment(array( - // 'disable' => false - // )), - // // Bulk filter, enabled by default - // new IMP_Search_Filter_Bulk(array( - // 'disable' => false - // )), - // // Mailing list filter, enabled by default - // new IMP_Search_Filter_Mailinglist(array( - // 'disable' => false - // )), - // // Personal filter, enabled by default - // new IMP_Search_Filter_Personal(array( - // 'disable' => false - // )) - // )) - 'value' => 'a:4:{i:0;C:28:"IMP_Search_Filter_Attachment":30:{a:2:{s:1:"e";i:1;s:1:"v";i:1;}}i:1;C:22:"IMP_Search_Filter_Bulk":30:{a:2:{s:1:"e";i:1;s:1:"v";i:1;}}i:2;C:29:"IMP_Search_Filter_Mailinglist":30:{a:2:{s:1:"e";i:1;s:1:"v";i:1;}}i:3;C:26:"IMP_Search_Filter_Personal":30:{a:2:{s:1:"e";i:1;s:1:"v";i:1;}}}' + // By default, all filters are enabled. + // 'value' => serialize(array()) + 'value' => 'a:0:{}' ); diff --git a/imp/lib/Search.php b/imp/lib/Search.php index 92d14a21e..bd74f23e8 100644 --- a/imp/lib/Search.php +++ b/imp/lib/Search.php @@ -266,16 +266,28 @@ class IMP_Search implements ArrayAccess, Iterator, Serializable */ public function getFilters() { - if ($f_list = $GLOBALS['prefs']->getValue('filter')) { - $f_list = @unserialize($f_list); - } - $filters = array(); - if (is_array($f_list)) { - foreach ($f_list as $val) { - if ($val instanceof IMP_Search_Filter) { - $filters[$val->id] = $val; + /* Build list of default filters. */ + $di = new DirectoryIterator(IMP_BASE . '/lib/Search/Filter'); + foreach ($di as $val) { + if ($val->isFile()) { + $cname = 'IMP_Search_Filter_' . $val->getBasename('.php'); + if (($cname != 'IMP_Search_Filter_Builtin') && + class_exists($cname)) { + $filter = new $cname(); + $filters[$filter->id] = $filter; + } + } + } + + if ($f_list = $GLOBALS['prefs']->getValue('filter')) { + $f_list = @unserialize($f_list); + if (is_array($f_list)) { + foreach ($f_list as $val) { + if ($val instanceof IMP_Search_Filter) { + $filters[$val->id] = $val; + } } } } @@ -348,41 +360,34 @@ class IMP_Search implements ArrayAccess, Iterator, Serializable */ public function getVFolders() { - if ($pref_vf = $GLOBALS['prefs']->getValue('vfolder')) { - $pref_vf = @unserialize($pref_vf); - } - - $has_vinbox = $has_vtrash = false; $vf = array(); - if (is_array($pref_vf)) { - foreach ($pref_vf as $val) { - if ($val instanceof IMP_Search_Vfolder) { - $vf[$val->id] = $val; - - if (!$has_vinbox && - ($val instanceof IMP_Search_Vfolder_Vinbox)) { - $has_vinbox = true; - } elseif (!$has_vtrash && - ($val instanceof IMP_Search_Vfolder_Vtrash)) { - $has_vtrash = true; - } + /* Build list of default virtual folders. */ + $di = new DirectoryIterator(IMP_BASE . '/lib/Search/Vfolder'); + $disabled = array('IMP_Search_Vfolder_Vtrash'); + + foreach ($di as $val) { + if ($val->isFile()) { + $cname = 'IMP_Search_VFolder_' . $val->getBasename('.php'); + if (($cname != 'IMP_Search_VFolder_Builtin') && + class_exists($cname)) { + $filter = new $cname(array( + 'disabled' => in_array($cname, $disabled) + )); + $filters[$filter->id] = $filter; } } } - if (!$has_vtrash) { - $ob = new IMP_Search_Vfolder_Vtrash(array( - 'disable' => true - )); - $vf = array($ob->id => $ob) + $vf; - } - - if (!$has_vinbox) { - $ob = new IMP_Search_Vfolder_Vinbox(array( - 'disable' => true - )); - $vf = array($ob->id => $ob) + $vf; + if ($pref_vf = $GLOBALS['prefs']->getValue('vfolder')) { + $pref_vf = @unserialize($pref_vf); + if (is_array($pref_vf)) { + foreach ($pref_vf as $val) { + if ($val instanceof IMP_Search_Vfolder) { + $vf[$val->id] = $val; + } + } + } } return $vf;