Automatically build default filters/vfolder list.
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 16 Nov 2010 19:34:38 +0000 (12:34 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 16 Nov 2010 21:41:22 +0000 (14:41 -0700)
imp/config/prefs.php.dist
imp/lib/Search.php

index 081c371..7088be3 100644 (file)
@@ -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:{}'
 );
 
 
index 92d14a2..bd74f23 100644 (file)
@@ -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;