Improves AddressesView to retrieve all postal addresses from the database.
authorStéphane Jacob <sj@m4x.org>
Mon, 20 Dec 2010 20:41:21 +0000 (21:41 +0100)
committerStéphane Jacob <sj@m4x.org>
Mon, 20 Dec 2010 21:38:51 +0000 (22:38 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
core
include/userset.inc.php

diff --git a/core b/core
index 798c1f4..70c0db4 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 798c1f4b15f14569c1f37d848db93ec4f65518b6
+Subproject commit 70c0db4f1da79409e3dac0660fe97561fc15e87a
index 48c07b0..c648005 100644 (file)
@@ -361,22 +361,19 @@ class AddressesView implements PlView
 
     public function apply(PlPage &$page)
     {
-        $res = $this->set->get(new PlLimit());
+        $pids = $this->set->getIds(new PlLimit());
         $visibility = new ProfileVisibility(ProfileVisibility::VIS_AX);
         pl_content_headers('text/x-csv');
 
         $csv = fopen('php://output', 'w');
         fputcsv($csv, array('adresses'), ';');
-        foreach ($res as $profile) {
-            $addresses = $profile->getAddresses(Profile::ADDRESS_POSTAL);
-            if (!empty($addresses)) {
-                foreach ($addresses as $address) {
-                    if ($visibility->isVisible($address->pub)) {
-                        fputcsv($csv, array($profile->public_name, $address->postalText), ';');
-                        break;
-                    }
-                }
-            }
+        $res = XDB::query('SELECT  pd.public_name, pa.postalText
+                             FROM  profile_addresses AS pa
+                       INNER JOIN  profile_display   AS pd ON (pd.pid = pa.pid)
+                            WHERE  pa.type = \'home\' AND pa.pub IN (\'public\', \'ax\') AND FIND_IN_SET(\'mail\', pa.flags) AND pa.pid IN {?}
+                         GROUP BY  pa.pid', $pids);
+        foreach ($res->fetchAllAssoc() as $item) {
+            fputcsv($csv, $item, ';');
         }
         fclose($csv);
         exit();