Example #1
0
 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);
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 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;
 }
Example #5
0
 protected function ipJoins()
 {
     $joins = array();
     if ($this->with_ip) {
         $joins['tips'] = PlSqlJoin::left('ips', '$ME.room = r.rid');
     }
     return $joins;
 }
Example #6
0
 protected function sizeJoins()
 {
     $joins = array();
     if ($this->with_size) {
         $joins['i_s'] = PlSqlJoin::left('images_sizes', '$ME.iid = i.iid');
     }
     return $joins;
 }
Example #7
0
 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']);
         }
     }
 }