- return XDB::Iterator('SELECT p.*, p.sex = \'female\' AS sex, pe.entry_year, pe.grad_year,
- pn_f.name AS firstname, pn_l.name AS lastname, pn_n.name AS nickname,
- IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_ordinary,
- IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_ordinary,
- pd.promo AS promo, pd.short_name, pd.directory_name AS full_name,
- pd.directory_name, pp.display_tel AS mobile, pp.pub AS mobile_pub,
- ph.attach IS NOT NULL AS has_photo, ph.pub AS photo_pub,
- p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old,
- ap.uid AS owner_id
- FROM profiles AS p
- INNER JOIN profile_display AS pd ON (pd.pid = p.pid)
- INNER JOIN profile_education AS pe ON (pe.pid = p.pid AND FIND_IN_SET(\'primary\', pe.flags))
- INNER JOIN profile_name AS pn_f ON (pn_f.pid = p.pid
- AND pn_f.typeid = ' . self::getNameTypeId('firstname', true) . ')
- INNER JOIN profile_name AS pn_l ON (pn_l.pid = p.pid
- AND pn_l.typeid = ' . self::getNameTypeId('lastname', true) . ')
- LEFT JOIN profile_name AS pn_uf ON (pn_uf.pid = p.pid
- AND pn_uf.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ')
- LEFT JOIN profile_name AS pn_ul ON (pn_ul.pid = p.pid
- AND pn_ul.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ')
- LEFT JOIN profile_name AS pn_n ON (pn_n.pid = p.pid
- AND pn_n.typeid = ' . self::getNameTypeId('nickname', true) . ')
- LEFT JOIN profile_phones AS pp ON (pp.pid = p.pid AND pp.link_type = \'user\' AND tel_type = \'mobile\')
- LEFT JOIN profile_photos AS ph ON (ph.pid = p.pid)
- LEFT JOIN account_profiles AS ap ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', ap.perms))
- WHERE p.pid IN {?}
- GROUP BY p.pid
- ' . $order, $pids);
+ $visibility = new ProfileVisibility($visibility);
+
+ $it = XDB::Iterator('SELECT p.pid, p.hrpid, p.xorg_id, p.ax_id, p.birthdate, p.birthdate_ref,
+ p.next_birthday, p.deathdate, p.deathdate_rec, p.sex = \'female\' AS sex,
+ p.cv, p.medals_pub, p.alias_pub, p.email_directory, p.last_change,
+ p.nationality1, p.nationality2, p.nationality3,
+ IF (p.freetext_pub IN {?}, p.freetext, NULL) AS freetext,
+ pe.entry_year, pe.grad_year,
+ IF ({?} IN {?}, pse.text, NULL) AS section,
+ pn_f.name AS firstname, pn_l.name AS lastname, pn_n.name AS nickname,
+ IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_ordinary,
+ IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_ordinary,
+ pd.yourself, pd.promo, pd.short_name, pd.directory_name AS full_name,
+ pd.directory_name, IF(pp.pub IN {?}, pp.display_tel, NULL) AS mobile,
+ (ph.pub IN {?} AND ph.attach IS NOT NULL) AS has_photo,
+ ph.x AS photo_width, ph.y AS photo_height,
+ p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old,
+ pm.expertise AS mentor_expertise,
+ ap.uid AS owner_id
+ FROM profiles AS p
+ INNER JOIN profile_display AS pd ON (pd.pid = p.pid)
+ INNER JOIN profile_education AS pe ON (pe.pid = p.pid AND FIND_IN_SET(\'primary\', pe.flags))
+ LEFT JOIN profile_section_enum AS pse ON (pse.id = p.section)
+ INNER JOIN profile_name AS pn_f ON (pn_f.pid = p.pid
+ AND pn_f.typeid = ' . self::getNameTypeId('firstname', true) . ')
+ INNER JOIN profile_name AS pn_l ON (pn_l.pid = p.pid
+ AND pn_l.typeid = ' . self::getNameTypeId('lastname', true) . ')
+ LEFT JOIN profile_name AS pn_uf ON (pn_uf.pid = p.pid
+ AND pn_uf.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ')
+ LEFT JOIN profile_name AS pn_ul ON (pn_ul.pid = p.pid
+ AND pn_ul.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ')
+ LEFT JOIN profile_name AS pn_n ON (pn_n.pid = p.pid
+ AND pn_n.typeid = ' . self::getNameTypeId('nickname', true) . ')
+ LEFT JOIN profile_phones AS pp ON (pp.pid = p.pid AND pp.link_type = \'user\' AND tel_type = \'mobile\')
+ LEFT JOIN profile_photos AS ph ON (ph.pid = p.pid)
+ LEFT JOIN profile_mentor AS pm ON (pm.pid = p.pid)
+ LEFT JOIN account_profiles AS ap ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', ap.perms))
+ WHERE p.pid IN {?}
+ GROUP BY p.pid
+ ' . $order,
+ $visibility->levels(),
+ ProfileVisibility::VIS_PRIVATE, $visibility->levels(),
+ $visibility->levels(), $visibility->levels(),
+ $pids
+ );
+ return new ProfileIterator($it, $pids, $fields, $visibility);