X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fuserset.inc.php;h=724c37655a705939cae31f331658bec528f122ca;hb=7b4bde3f565265cfe95f8a4ce1f9fec4f028e3fd;hp=012092a6448537aec20181782667056968fe9121;hpb=027b16e31e0ca17ad00e567329bad1035b22650f;p=platal.git diff --git a/include/userset.inc.php b/include/userset.inc.php index 012092a..724c376 100644 --- a/include/userset.inc.php +++ b/include/userset.inc.php @@ -1,6 +1,6 @@ bound_field) { + case 'name': + $name = $obj->lastName(); + return strtoupper($name); + case 'promo': + if ($obj->hasProfile()) { + return $obj->profile()->promo(); + } else { + return 'ext'; + } + default: + return null; + } } return null; } @@ -194,7 +208,7 @@ abstract class ProfileView extends MultipageView * - with_score: whether to allow ordering by score (set only for a quick search) * - starts_with: show only names beginning with the given letter */ -class MinificheView extends ProfileView +class MinificheView extends MixedView { public function __construct(PlSet $set, array $params) { @@ -205,21 +219,21 @@ class MinificheView extends ProfileView new UFO_Score(true), new UFO_ProfileUpdate(true), new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'pertinence')); } $this->addSort(new PlViewOrder( 'name', - array(new UFO_Name(Profile::DN_SORT)), + array(new UFO_Name()), 'nom')); $this->addSort(new PlViewOrder('promo', array( new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'promotion')); $this->addSort(new PlViewOrder('date_mod', array( new UFO_ProfileUpdate(true), new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'dernière modification')); parent::__construct($set, $params); } @@ -231,8 +245,7 @@ class MinificheView extends ProfileView && $this->params['starts_with'] != null) { $this->set->addCond( - new UFC_Name(Profile::LASTNAME, - $this->params['starts_with'], UFC_Name::PREFIX) + new UFC_NameInitial($this->params['starts_with']) ); } return parent::apply($page); @@ -244,21 +257,21 @@ class MinificheView extends ProfileView } } -class MentorView extends ProfileView +class MentorView extends MixedView { public function __construct(PlSet $set, array $params) { $this->entriesPerPage = 10; $this->addSort(new PlViewOrder('rand', array(new PFO_Random(S::i('uid'))), 'aléatoirement')); - $this->addSort(new PlViewOrder('name', array(new UFO_Name(Profile::DN_SORT)), 'nom')); + $this->addSort(new PlViewOrder('name', array(new UFO_Name()), 'nom')); $this->addSort(new PlViewOrder('promo', array( new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'promotion')); $this->addSort(new PlViewOrder('date_mod', array( new UFO_ProfileUpdate(true), new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'dernière modification')); parent::__construct($set, $params); } @@ -269,59 +282,21 @@ class MentorView extends ProfileView } } -/** A multipage view for users - * Allows the display of bounds when sorting by name or promo. - */ -abstract class UserView extends MultipageView -{ - protected function getBoundValue($user) - { - if ($user instanceof User) { - switch ($this->bound_field) { - case 'name': - $name = $user->lastName(); - return strtoupper($name); - case 'promo': - if ($user->hasProfile()) { - return $user->profile()->promo(); - } else { - return null; - } - default: - return null; - } - } - return null; - } - - public function bounds() - { - $order = Env::v('order', $this->defaultkey); - $show_bounds = 0; - if (($order == "name") || ($order == "-name")) { - $this->bound_field = "name"; - $show_bounds = 1; - } elseif (($order == "promo") || ($order == "-promo")) { - $this->bound_field = "promo"; - $show_bounds = -1; - } - if ($order{0} == '-') { - $show_bounds = -$show_bounds; - } - return $show_bounds; - } -} - -class GroupMemberView extends UserView +class GroupMemberView extends MixedView { public function __construct(PlSet $set, array $params) { $this->entriesPerPage = 20; - $this->addSort(new PlViewOrder('name', array(new UFO_Name(Profile::DN_SORT)), 'nom')); + $this->addSort(new PlViewOrder('name', array(new UFO_Name()), 'nom')); $this->addSort(new PlViewOrder('promo', array( new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'promotion')); + $this->addSort(new PlViewOrder('date_mod', array( + new UFO_ProfileUpdate(true), + new UFO_Promo(UserFilter::DISPLAY, true), + new UFO_Name(), + ), 'dernière modification')); parent::__construct($set, $params); } @@ -331,15 +306,15 @@ class GroupMemberView extends UserView } } -class ListMemberView extends UserView +class ListMemberView extends MixedView { public function __construct(PlSet $set, array $params) { $this->entriesPerPage = 100; - $this->addSort(new PlViewOrder('name', array(new UFO_Name(Profile::DN_SORT)), 'nom')); + $this->addSort(new PlViewOrder('name', array(new UFO_Name()), 'nom')); $this->addSort(new PlViewOrder('promo', array( new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'promotion')); parent::__construct($set, $params); } @@ -350,10 +325,15 @@ class ListMemberView extends UserView } } -class TrombiView extends UserView +class TrombiView extends MixedView { + private $full_count; + public function __construct(PlSet $set, array $params) { + $set->getIds(); + $this->full_count = $set->count(); + $this->entriesPerPage = 24; $this->defaultkey = 'name'; if (@$params['with_score']) { @@ -361,14 +341,14 @@ class TrombiView extends UserView new UFO_Score(true), new UFO_ProfileUpdate(true), new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'pertinence')); } $set->addCond(new UFC_Photo()); - $this->addSort(new PlViewOrder('name', array(new UFO_Name(Profile::DN_SORT)), 'nom')); + $this->addSort(new PlViewOrder('name', array(new UFO_Name()), 'nom')); $this->addSort(new PlViewOrder('promo', array( new UFO_Promo(UserFilter::DISPLAY, true), - new UFO_Name(Profile::DN_SORT), + new UFO_Name(), ), 'promotion')); parent::__construct($set, $params); } @@ -384,10 +364,42 @@ class TrombiView extends UserView global $globals; $page->assign('mainsiteurl', 'https://' . $globals->core->secure_domain . '/'); } + $page->assign('full_count', $this->full_count); return parent::apply($page); } } +class MapView implements PlView +{ + private $set; + + public function __construct(PlSet $set, array $params) + { + $this->set = $set; + } + + public function apply(PlPage $page) + { + Platal::load('geoloc'); + + if (Get::b('ajax')) { + $pids = $this->set->getIds(new PlLimit()); + GeolocModule::assign_json_to_map($page, $pids); + $page->runJSON(); + exit; + } else { + $this->set->getIds(new PlLimit()); + GeolocModule::prepare_map($page); + return 'geoloc/index.tpl'; + } + } + + public function args() + { + return $this->set->args(); + } +} + class GadgetView implements PlView { public function __construct(PlSet $set, array $params) @@ -415,21 +427,67 @@ 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()); - $visibility = new ProfileVisibility(ProfileVisibility::VIS_AX); - pl_cached_content_headers('text/x-csv', 1); + $visibility = Visibility::defaultForRead(Visibility::VIEW_AX); + pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1, 'adresses.csv'); $csv = fopen('php://output', 'w'); - fputcsv($csv, array('adresses'), ';'); - $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, ';'); + 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, + 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); exit();