Example #1
0
 protected function handler_images(Collection $frankizimages, $size)
 {
     $_frankizimages = array();
     foreach ($frankizimages as $frankizimage) {
         $_frankizimages[$frankizimage->id()] = array();
     }
     $iter = XDB::iterRow("SELECT  iid, size, x, y, data\n                                FROM  images_sizes\n                               WHERE  size IN {?} AND iid IN {?}", $fields, $frankizimages->ids());
     while ($datas = $iter->next()) {
         $_frankizimages[$datas['iid']][$datas['size']] = new Image($datas);
     }
     foreach ($frankizimages as $frankizimage) {
         $frankizimage->fillFromArray(array('images' => $_frankizimages[$frankizimage->id()]));
     }
 }
Example #2
0
 protected function handler_participants(Collection $activities, $fields)
 {
     $res = XDB::iterator('SELECT  id, participant
                             FROM  activities_participants
                            WHERE  id IN {?}', $activities->ids());
     $users = new Collection('User');
     $part = array();
     while ($datas = $res->next()) {
         $part[$datas['id']][] = $users->addget($datas['participant']);
     }
     foreach ($part as $key => $obj) {
         $activities->get($key)->participants($obj);
     }
     $users->select($this->subs['participants']);
 }
Example #3
0
 protected function handler_item(Collection $validates, $fields)
 {
     $items = array();
     foreach ($validates as $validate) {
         $items[$validate->id()] = array();
     }
     $iter = XDB::iterRow("SELECT  id, item\n                                FROM  validate\n                               WHERE  id IN {?}", $validates->ids());
     while (list($id, $item) = $iter->next()) {
         $items[$id] = unserialize($item);
     }
     $selects = array();
     $collections = array();
     foreach ($items as $item) {
         foreach ($item->objects() as $field => $select) {
             $hash = $select->hash();
             $selects[$hash] = $select;
             if (empty($collections[$hash])) {
                 $collections[$hash] = new Collection($select->className());
             }
             if ($item->{$field}() != false) {
                 $item->{$field}($collections[$hash]->addget($item->{$field}()));
             }
         }
         foreach ($item->collections() as $field => $select) {
             $hash = $select->hash();
             $selects[$hash] = $select;
             if (empty($collections[$hash])) {
                 $collections[$hash] = new Collection($select->className());
             }
             if ($item->{$field}() != false) {
                 $temp = new Collection($select->className());
                 foreach ($item->{$field}() as $f) {
                     $temp->add($collections[$hash]->addget($f));
                 }
                 $item->{$field}($temp);
             }
         }
     }
     foreach ($collections as $hash => $collection) {
         $collection->select($selects[$hash]);
     }
     foreach ($validates as $validate) {
         $validate->fillFromArray(array('item' => $items[$validate->id()]));
     }
 }
Example #4
0
 protected function handler_promos(Collection $formations, $fields)
 {
     $_formations = array();
     foreach ($formations as $f) {
         $_formations[$f->id()] = array();
     }
     $iter = XDB::iterRow('SELECT  formation_id AS id,
                                   GROUP_CONCAT(DISTINCT promo ORDER BY promo SEPARATOR ",") AS p
                             FROM  studies
                            WHERE  formation_id IN {?}
                         GROUP BY  formation_id', $formations->ids());
     while (list($id, $promos) = $iter->next()) {
         $promos = explode(',', $promos);
         foreach ($promos as &$p) {
             $p = (int) $p;
         }
         sort($promos);
         $_formations[$id] = $promos;
     }
     foreach ($formations as $f) {
         $f->fillFromArray(array('promos' => $_formations[$f->id()]));
     }
 }
Example #5
0
 protected function handler_questions(Collection $surveys, array $fields)
 {
     $_surveys = array();
     foreach ($surveys as $s) {
         $_surveys[$s->id()] = new Collection('SurveyQuestion');
         $_surveys[$s->id()]->order('rank', false);
     }
     $iter = XDB::iterRow("SELECT  qid, survey, type\n                                FROM  surveys_questions\n                               WHERE  survey IN {?}", $surveys->ids());
     $questions = new Collection('SurveyQuestion');
     while (list($qid, $sid, $type) = $iter->next()) {
         $className = 'SurveyQuestion' . $type;
         $question = new $className($qid);
         $questions->add($question);
         $_surveys[$sid]->add($question);
     }
     foreach ($surveys as $s) {
         $s->fillFromArray(array('questions' => $_surveys[$s->id()]));
     }
     if (!empty($questions) && !empty($this->subs['questions'])) {
         $questions->select($this->subs['questions']);
     }
 }
Example #6
0
 /**
  * Select an FlagSet from the database into a field
  *
  * @param Collection $metas The objects to select
  * @param string $field An FlagSet field
  */
 protected function helper_flagset(Collection $metas, $field)
 {
     $_metas = array();
     foreach ($metas as $meta) {
         $_metas[$meta->id()] = new PlFlagSet();
     }
     // Query database according to the schema
     $id = $this->schema->id();
     list($table, $column) = $this->schema->flagsetType($field);
     $iter = XDB::iterRow("SELECT  {$id}, {$column}\n                                FROM  {$table}\n                               WHERE  {$id} IN {?}", $metas->ids());
     // Put database result in a id => array(l_col) fashion
     while (list($id, $value) = $iter->next()) {
         $_metas[$id]->addFlag($value);
     }
     // Fill metas
     foreach ($metas as $meta) {
         $meta->fillFromArray(array($field => $_metas[$meta->id()]));
     }
 }
Example #7
0
 /**
  * Getter & Setter for the groups to be displayed by default in the groups_pickers
  * /!\ When you set a Collection, the groups must have been fetched.
  */
 public function defaultFilters(Collection $groups = null)
 {
     if ($groups !== null) {
         if ($groups === false) {
             XDB::execute('DELETE FROM  users_defaultfilters
                                 WHERE  uid = {?}', $this->id());
         } else {
             $export = json_encode($groups->ids());
             XDB::execute('INSERT INTO  users_defaultfilters
                                   SET  uid = {?}, defaultfilters = {?}
               ON DUPLICATE KEY UPDATE  defaultfilters = {?}', $this->id(), $export, $export);
         }
         $this->defaultfilters = $groups;
     }
     return $this->defaultfilters;
 }
Example #8
0
 public function selectRights(Collection $users)
 {
     $rights = array();
     if ($users->count() > 0) {
         $iter = XDB::iterRow('SELECT  cu.uid, c.rights
                                  FROM  castes AS c
                            INNER JOIN  castes_users AS cu ON (cu.cid = c.cid
                                        AND (cu.visibility IN {?} OR cu.uid = {?}))
                            INNER JOIN  groups AS g ON g.gid = c.`group`
                                 WHERE  g.gid = {?} AND cu.uid IN {?}', S::user()->visibleGids(), S::user()->id(), $this->id(), $users->ids());
         while (list($uid, $right) = $iter->next()) {
             if (empty($rights[$uid])) {
                 $rights[$uid] = array();
             }
             $rights[$uid][] = new Rights($right);
         }
     }
     return $rights;
 }
Example #9
0
 protected function handler_star(Collection $news, $fields)
 {
     foreach ($news as $n) {
         $n->fillFromArray(array('star' => false));
     }
     $iter = XDB::iterRow("SELECT  uid, news, time\n                                FROM  news_star\n                               WHERE  news IN {?} AND uid = {?}", $news->ids(), S::user()->id());
     while (list($uid, $nid, $time) = $iter->next()) {
         $news->get($nid)->fillFromArray(array('star' => new FrankizDateTime($time)));
     }
 }
Example #10
0
 function handler_group_ajax_users($page)
 {
     $group = Json::i('gid');
     $limit = 25;
     $group = Group::fromId($group);
     $users = false;
     if ($group) {
         $users = array();
         $group->select(GroupSelect::castes());
         $order = new UFO_Name(UFO_Name::LASTNAME);
         $filters = new PFC_True();
         if (strlen(Json::t('promo')) > 0) {
             $filters = new UFC_Group(explode(';', Json::v('promo')));
         }
         $uf = new UserFilter(new PFC_And(new UFC_Caste($group->caste(Rights::admin())), $filters), $order);
         $admins = $uf->get(new PlLimit($limit, (Json::i('admin_page', 1) - 1) * $limit));
         $admins_total = $uf->getTotalCount();
         $uf = new UserFilter(new PFC_And(new UFC_Caste(array($group->caste(Rights::member()), $group->caste(Rights::logic()))), $filters), $order);
         $members = $uf->get(new PlLimit($limit, (Json::i('member_page', 1) - 1) * $limit));
         $members_total = $uf->getTotalCount();
         $uf = new UserFilter(new PFC_And(new UFC_Caste($group->caste(Rights::friend())), $filters), $order);
         $friends = $uf->get(new PlLimit($limit, (Json::i('friend_page', 1) - 1) * $limit));
         $friends_total = $uf->getTotalCount();
         $all = new Collection('User');
         $all->safeMerge(array($admins, $members, $friends));
         $all->select(UserSelect::base());
         $admins_export = $admins->export(User::EXPORT_MICRO, true);
         $members_export = $members->export(User::EXPORT_MICRO, true);
         $friends_export = $friends->export(User::EXPORT_MICRO, true);
         if ($all->count() > 0) {
             $iter = XDB::iterRow('SELECT  uid, comment
                                     FROM  users_comments
                                    WHERE  gid = {?} AND uid IN {?}', $group->id(), $all->ids());
             while (list($uid, $comment) = $iter->next()) {
                 if ($admins_export[$uid]) {
                     $admins_export[$uid]['comments'] = $comment;
                 }
                 if ($members_export[$uid]) {
                     $members_export[$uid]['comments'] = $comment;
                 }
                 if ($friends_export[$uid]) {
                     $friends_export[$uid]['comments'] = $comment;
                 }
             }
         }
         $users['admin'] = array('total' => $admins_total, 'users' => $admins_export);
         $users['member'] = array('total' => $members_total, 'users' => $members_export);
         $users['friend'] = array('total' => $friends_total, 'users' => $friends_export);
     }
     $page->jsonAssign('limit', $limit);
     $page->jsonAssign('users', $users);
     return PL_JSON;
 }
Example #11
0
 /**
  * Try to retrieve the id and return a collection of the corresponding objects
  *  thanks to another unique identifier passed as argument
  * If the function can't find an object for each identifier passed, it must throw
  *  an ItemNotFoundException
  *
  * @param $mixed  An array containing a unique identifier (often it's a unique name)
  */
 public static function batchFrom(array $mixed)
 {
     // The schema may specify a key
     $schema = Schema::get(get_called_class());
     $className = $schema->className();
     $key = $schema->fromKey();
     if (empty($key)) {
         throw new Exception("batchFrom isn't implemented");
     }
     $collec = new Collection();
     if (!empty($mixed)) {
         $iter = XDB::iterator('SELECT  ' . $schema->id() . ' AS id, ' . $key . '
                                  FROM  ' . $schema->table() . '
                                 WHERE  ' . $key . ' IN {?}', $mixed);
         while ($data = $iter->next()) {
             $collec->add(new $className($data));
         }
         if ($collec->count() == 0) {
             throw new ItemNotFoundException('Nothing found for ' . implode(', ', $mixed));
         }
         if (count($mixed) != $collec->count()) {
             throw new ItemNotFoundException('Asking for ' . implode(', ', $mixed) . ' but only found ' . implode(', ', $collec->ids()));
         }
     }
     return $collec;
 }
Example #12
0
 public function groups(Collection $groups = null)
 {
     if ($groups != null) {
         $oldGids = $this->groups->ids();
         $newGids = $groups->ids();
         // Remove no longer used groups
         foreach (array_diff($oldGids, $newGids) as $gid) {
             $this->removeGroup($this->groups->get($gid));
         }
         // Add new groups
         foreach (array_diff($newGids, $oldGids) as $gid) {
             $this->addGroup($groups->get($gid));
         }
     }
     return $this->groups;
 }