public function __construct(PlIterator $it, array $pids, $fields = 0x0, $visibility = null) { require_once 'profilefields.inc.php'; if ($visibility === null) { $visibility = Visibility::defaultForRead(); } $this->fields = $fields; $this->visibility = $visibility; $subits = array(); $callbacks = array(); $subits[0] = $it; $callbacks[0] = PlIteratorUtils::arrayValueCallback('pid'); $cb = PlIteratorUtils::objectPropertyCallback('pid'); $fields = $fields & self::FETCH_ALL; for ($field = 1; $field < $fields; $field *= 2) { if ($fields & $field) { $callbacks[$field] = $cb; $subits[$field] = new ProfileFieldIterator($field, $pids, $visibility); } } $this->iterator = PlIteratorUtils::parallelIterator($subits, $callbacks, 0); }
public static function fetchData(array $pids, Visibility $visibility) { $data = XDB::iterator('SELECT ppss.pid, ppss.exposed_uid, ppss.sharing_level, ppss.allow_email, ppss.partner_id, ppse.shortname AS partner_shortname, ppse.name AS partner_name, ppse.url AS partner_url FROM profile_partnersharing_settings AS ppss LEFT JOIN profile_partnersharing_enum AS ppse ON (ppss.partner_id = ppse.id) WHERE ppss.pid IN {?} ORDER BY ' . XDB::formatCustomOrder('ppss.pid', $pids), $pids); return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid')); }