X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fuserset.inc.php;h=724c37655a705939cae31f331658bec528f122ca;hb=7b4bde3f565265cfe95f8a4ce1f9fec4f028e3fd;hp=5d1e9d21ffb96759660aca6d695cc9cf7a99b445;hpb=9860732a5b6de1cdf71e1f55a1f5773ce95fa67b;p=platal.git diff --git a/include/userset.inc.php b/include/userset.inc.php index 5d1e9d2..724c376 100644 --- a/include/userset.inc.php +++ b/include/userset.inc.php @@ -1,6 +1,6 @@ getIds(); + $this->full_count = $set->count(); + $this->entriesPerPage = 24; $this->defaultkey = 'name'; if (@$params['with_score']) { @@ -359,6 +364,7 @@ class TrombiView extends MixedView global $globals; $page->assign('mainsiteurl', 'https://' . $globals->core->secure_domain . '/'); } + $page->assign('full_count', $this->full_count); return parent::apply($page); } } @@ -421,6 +427,36 @@ class AddressesView implements PlView $this->set =& $set; } + /* Convert a single address field into 3 lines. + */ + public static function split_address($address) + { + $lines = preg_split("/(\r|\n)+/", $address, -1, PREG_SPLIT_NO_EMPTY); + $nb_lines = count($lines); + switch ($nb_lines) { + case 0: + // No data => nothing + return array("", "", ""); + case 1: + // Single line => Assume it's city+zipcode + $line = $lines[0]; + return array("", "", $line); + case 2: + // Two lines => Assume it's street \n city + $line1 = $lines[0]; + $line3 = $lines[1]; + return array($line1, "", $line3); + case 3: + return $lines; + default: + // More than 3 lines => Keep 2 last intact, merge other lines. + $line3 = array_pop($lines); + $line2 = array_pop($lines); + $line1 = implode(" ", $lines); + return array($line1, $line2, $line3); + } + } + public function apply(PlPage $page) { $pids = $this->set->getIds(new PlLimit()); @@ -428,22 +464,29 @@ class AddressesView implements PlView pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1, 'adresses.csv'); $csv = fopen('php://output', 'w'); - fputcsv($csv, array('PROMOTION', 'CIVILITE', 'NOM', 'SOCIETE', 'ADRESSE', 'EMAIL'), ';'); + fputcsv($csv, + array('PROMOTION', 'CIVILITE', 'NOM', 'PRENOM', 'SOCIETE', 'ADRESSE', 'ADRESSE1', 'ADRESSE2', 'ADRESSE3', 'CP', 'EMAIL'), + ';'); + if (!empty($pids)) { - $res = XDB::query("SELECT pd.promo, p.title, pd.short_name, UPPER(pje.name), - pa.postalText, p.email_directory - FROM (SELECT pid, postalText - FROM profile_addresses - WHERE pub IN ('public', 'ax') AND FIND_IN_SET('mail', flags) AND pid IN {?} - ORDER BY pid, NOT FIND_IN_SET('current', flags), - FIND_IN_SET('secondary', flags), type = 'job') AS pa - INNER JOIN profiles AS p ON (pa.pid = p.pid) - INNER JOIN profile_display AS pd ON (pd.pid = pa.pid) - LEFT JOIN profile_job AS pj ON (pj.pid = pa.pid) - LEFT JOIN profile_job_enum AS pje ON (pj.jobid = pje.id) - GROUP BY pa.pid", $pids); - foreach ($res->fetchAllAssoc() as $item) { - fputcsv($csv, array_map('utf8_decode', $item), ';'); + $res = XDB::query("SELECT pd.promo, p.title, + IF (pn.firstname_ordinary = '', UPPER(pn.firstname_main), UPPER(pn.firstname_ordinary)) AS firstname, + IF (pn.lastname_ordinary = '', UPPER(pn.lastname_main), UPPER(pn.lastname_ordinary)) AS lastname, + UPPER(pje.name), pa.postalText, pa.postal_code_fr AS postal_code, p.email_directory + FROM profile_addresses AS pa + INNER JOIN profiles AS p ON (pa.pid = p.pid) + INNER JOIN profile_display AS pd ON (pd.pid = pa.pid) + INNER JOIN profile_public_names AS pn ON (pn.pid = pa.pid) + LEFT JOIN profile_job AS pj ON (pj.pid = pa.pid + AND pj.id = IF(pa.type = 'job', pa.id, NULL)) + LEFT JOIN profile_job_enum AS pje ON (pj.jobid = pje.id) + WHERE pa.pid IN {?} AND FIND_IN_SET('ax_mail', pa.flags)", $pids); + foreach ($res->fetchAllRow() as $item) { + list($promo, $title, $lastname, $firstname, $company, $full_address, $zipcode, $email) = array_map('utf8_decode', $item); + $lines = self::split_address($full_address); + fputcsv($csv, + array($promo, $title, $lastname, $firstname, $company, $full_address, $lines[0], $lines[1], $lines[2], $zipcode, $email), + ';'); } } fclose($csv);