protected function handler_main(Collection $users, array $fields) { $joins = array(); $cols = array(); $loc_fields = array_intersect($fields, self::$natives); if (!empty($loc_fields)) { $cols['a'] = $loc_fields; } if (in_array('poly', $fields)) { $cols['p'] = array('poly'); $joins['p'] = PlSqlJoin::left('poly', '$ME.uid = a.uid'); } if (in_array('default_filters', $fields)) { $cols['udf'] = array('default_filters'); $joins['udf'] = PlSqlJoin::left('users_defaultfilters', '$ME.uid = a.uid'); } $this->helper_main($users, $cols, $joins); }
protected function userJoins() { $joins = array(); if ($this->with_user) { $joins['cu'] = PlSqlJoin::left('castes_users', '$ME.cid = c.cid AND ($ME.visibility IN {?} OR $ME.uid = {?})', S::user()->visibleGids(), S::user()->id()); } return $joins; }
protected function partnerSharingJoins() { $joins = array(); foreach ($this->ppss as $sub => $partner_id) { $joins[$sub] = PlSqlJoin::left('profile_partnersharing_settings', '$ME.pid = $PID AND $ME.partner_id = {?} AND $ME.sharing_level != \'none\'', $partner_id); } return $joins; }
protected function roomJoins() { $joins = array(); if ($this->with_room) { $joins['rg'] = PlSqlJoin::left('rooms_groups', '$ME.gid = g.gid'); $joins['r'] = PlSqlJoin::left('rooms', '$ME.rid = rg.rid'); } return $joins; }
protected function ipJoins() { $joins = array(); if ($this->with_ip) { $joins['tips'] = PlSqlJoin::left('ips', '$ME.room = r.rid'); } return $joins; }
protected function sizeJoins() { $joins = array(); if ($this->with_size) { $joins['i_s'] = PlSqlJoin::left('images_sizes', '$ME.iid = i.iid'); } return $joins; }
public static function batchSelect(array $wikis, $options = null) { if (empty($wikis)) { return; } $bits = self::optionsToBits($options); $wikis = array_combine(self::toIds($wikis), $wikis); $joins = array(); $cols = array(); if ($bits & self::SELECT_BASE) { $cols['w'] = array('name', 'comments'); } if ($bits & self::SELECT_COUNT || $bits & self::SELECT_VERSION) { $cols[-1] = array('COUNT(wv.version) AS count'); $joins['wv'] = PlSqlJoin::left('wiki_version', '$ME.wid = w.wid'); } if (!empty($cols)) { $iter = XDB::iterator('SELECT w.wid AS id, ' . self::arrayToSqlCols($cols) . ' FROM wiki AS w ' . PlSqlJoin::formatJoins($joins, array()) . ' WHERE w.wid IN {?} GROUP BY w.wid', array_keys($wikis)); while ($datas = $iter->next()) { $wikis[$datas['id']]->fillFromArray($datas); } } // Load last version if ($bits & self::SELECT_VERSION) { if (!isset($options[self::SELECT_VERSION])) { $opts = array('versions' => array('last')); } else { $opts = $options[self::SELECT_VERSION]; } $conds = array(); foreach ($wikis as $w) { if ($w->versions == null) { $w->versions = array(); } $versions = array(); if (in_array('last', $opts['versions'])) { $versions[] = $w->count(); } foreach ($opts['versions'] as $version) { if ($version != 'last') { $versions[] = $version; } } if (!empty($versions)) { $conds[] = XDB::format('( wid = {?} AND version IN {?} )', $w->id(), $versions); } } $iter = XDB::iterator('SELECT wid AS id, version, wrote, writer, content FROM wiki_version WHERE ' . implode(' OR ', $conds)); $writers = new Collection('User'); while ($datas = $iter->next()) { $writer = $writers->addget($datas['writer']); $wikis[$datas['id']]->versions[$datas['version']] = array('wrote' => $datas['wrote'], 'writer' => $writer, 'content' => $datas['content']); } if (isset($opts['options'])) { $writers->select($opts['options']); } } }