<?php
/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
class Group
{
+ const CAT_GROUPESX = "GroupesX";
+ const CAT_BINETS = "Binets";
+ const CAT_PROMOTIONS = "Promotions";
+ const CAT_INSTITUTIONS = "Institutions";
+
public $id;
public $shortname;
private $data = array();
- private $members = null;
- private $admins = null;
-
private function __construct(array $data)
{
foreach ($data as $key=>$value) {
}
$this->id = intval($this->data['id']);
$this->shortname = $this->data['diminutif'];
+ if (!is_null($this->axDate)) {
+ $this->axDate = format_datetime($this->axDate, '%d/%m/%Y');
+ }
}
public function __get($name)
return property_exists($this, $name) || isset($this->data[$name]);
}
- public function getMemberUIDs()
+ private function getUF($admin = false, $extra_cond = null, $sort = null)
{
- if (is_null($this->members)) {
- $this->members = XDB::fetchColumn('SELECT uid
- FROM groupex.membres
- WHERE asso_id = {?}', $this->id);
+ $cond = new PFC_And(new UFC_Group($this->id, $admin), new PFC_Not(new UFC_Dead()));
+ if (!is_null($extra_cond)) {
+ $cond->addChild($extra_cond);
+ }
+ if ($this->cat == self::CAT_PROMOTIONS) {
+ $cond->addChild(new UFC_Registered());
}
- return $this->members;
+ return new UserFilter($cond, $sort);
}
- public function getMembers($sortby = null, $count = null, $offset = null)
+ public function getMembersFilter($extra_cond = null, $sort = null)
{
- return User::getBuildUsersWithUIDs($this->getMemberUIDs(), $sortby, $count, $offset);
+ return $this->getUF(false, $extra_cond, $sort);
}
- public function getMemberCount()
+ public function getAdminsFilter($extra_cond = null, $sort = null)
{
- return count($this->getMemberUIDs());
+ return $this->getUF(true, $extra_cond, $sort);
}
- public function getAdminUIDs()
+ public function iterMembers($extra_cond = null, $sort = null, $limit = null)
{
- if (is_null($this->admins)) {
- $this->admins = XDB::fetchColumn('SELECT uid
- FROM groupex.membres
- WHERE asso_id = {?} AND perms = \'admin\'', $this->id);
- }
- return $this->admins;
+ $uf = $this->getMembersFilter($extra_cond, $sort);
+ return $uf->iterUsers($limit);
}
- public function getAdmins($sortby = null, $count = null, $offset = null)
+ public function iterAdmins($extra_cond = null, $sort = null, $limit = null)
{
- return User::getBuildUsersWithUIDs($this->getAdminUIDs(), $sortby, $count, $offset);
+ $uf = $this->getAdminsFilter($extra_cond, $sort);
+ return $uf->iterUsers($limit);
}
- public function getAdminCount()
+ public function getLogo($fallback = true)
{
- return count($this->getAdminUIDs());
+ if (!empty($this->logo)) {
+ return PlImage::fromData($this->logo, $this->logo_mime);
+ } else if ($fallback) {
+ return PlImage::fromFile(dirname(__FILE__).'/../htdocs/images/dflt_carre.jpg', 'image/jpeg');
+ }
+ return null;
}
- static public function get($id)
+ static public function get($id, $can_be_shortname = true)
{
if (!$id) {
return null;
}
- if (ctype_digit($id)) {
- $where = XDB::format('id = {?}', $id);
+ if (!$can_be_shortname) {
+ $where = XDB::format('a.id = {?}', $id);
} else {
- $where = XDB::format('diminutif = {?}', $id);
+ $where = XDB::format('a.diminutif = {?}', $id);
}
$res = XDB::query('SELECT a.*, d.nom AS domnom,
FIND_IN_SET(\'wiki_desc\', a.flags) AS wiki_desc,
FIND_IN_SET(\'notif_unsub\', a.flags) AS notif_unsub
- FROM groupex.asso AS a
- LEFT JOIN groupex.dom AS d ON d.id = a.dom
+ FROM groups AS a
+ LEFT JOIN group_dom AS d ON d.id = a.dom
WHERE ' . $where);
if ($res->numRows() != 1) {
+ if ($can_be_shortname && (is_int($id) || ctype_digit($id))) {
+ return Group::get($id, false);
+ }
return null;
}
- return new Group($res->fetchOneAssoc());
+ $data = $res->fetchOneAssoc();
+ $positions = XDB::fetchAllAssoc('SELECT position, uid
+ FROM group_members
+ WHERE asso_id = {?} AND position IS NOT NULL
+ ORDER BY position',
+ $data['id']);
+ return new Group(array_merge($data, array('positions' => $positions)));
}
}