X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fgroup.php;h=846f2b21ac336858484694c8f4e27345a445bdae;hb=7f7081c559849041a252b516c82efc02c33b4bde;hp=c75191b5db01475f6d048cd322545982462ad711;hpb=2db80ab6f7d054ec274c66f7ba983f49596b81cf;p=platal.git diff --git a/classes/group.php b/classes/group.php index c75191b..846f2b2 100644 --- a/classes/group.php +++ b/classes/group.php @@ -1,6 +1,6 @@ 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) @@ -54,43 +62,119 @@ class Group private function getUF($admin = false, $extra_cond = null, $sort = null) { - $cond = new UFC_Group($this->id, $admin); + $cond = new PFC_And(new UFC_Group($this->id, $admin), new PFC_Not(new UFC_Dead())); if (!is_null($extra_cond)) { - $cond = new UFC_And($cond, $extra_cond); + $cond->addChild($extra_cond); + } + if ($this->cat == self::CAT_PROMOTIONS) { + $cond->addChild(new UFC_Registered()); } return new UserFilter($cond, $sort); } - public function getMembers($extra_cond = null, $sort = null) + public function getMembersFilter($extra_cond = null, $sort = null) { return $this->getUF(false, $extra_cond, $sort); } - public function getAdmins($extra_cond = null, $sort = null) + public function getAdminsFilter($extra_cond = null, $sort = null) { return $this->getUF(true, $extra_cond, $sort); } - static public function get($id) + public function iterMembers($extra_cond = null, $sort = null, $limit = null) + { + $uf = $this->getMembersFilter($extra_cond, $sort); + return $uf->iterUsers($limit); + } + + public function iterAdmins($extra_cond = null, $sort = null, $limit = null) + { + $uf = $this->getAdminsFilter($extra_cond, $sort); + return $uf->iterUsers($limit); + } + + public function getLogo($fallback = true) + { + 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, $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 + FIND_IN_SET(\'notif_unsub\', a.flags) AS notif_unsub, + FIND_IN_SET(\'notify_all\', a.flags) AS notify_all, + (nls.id IS NOT NULL) AS has_nl, ad.text AS address, + p.display_tel AS phone, f.display_tel AS fax + FROM groups AS a + LEFT JOIN group_dom AS d ON d.id = a.dom + LEFT JOIN newsletters AS nls ON (nls.group_id = a.id) + LEFT JOIN profile_phones AS p ON (p.link_type = \'group\' AND p.link_id = a.id AND p.tel_id = 0) + LEFT JOIN profile_phones AS f ON (f.link_type = \'group\' AND f.link_id = a.id AND f.tel_id = 1) + LEFT JOIN profile_addresses AS ad ON (ad.type = \'group\' AND ad.groupid = a.id) 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))); + } + + static public function subscribe($group_id, $uid) + { + XDB::execute('DELETE FROM group_former_members + WHERE uid = {?} AND asso_id = {?}', + $uid, $group_id); + XDB::execute('INSERT IGNORE INTO group_members (asso_id, uid) + VALUES ({?}, {?})', + $group_id, $uid); + } + + static public function unsubscribe($group_id, $uid, $remember) + { + XDB::execute('INSERT INTO group_former_members (asso_id, uid, remember, unsubsciption_date) + VALUES ({?}, {?}, {?}, NOW())', + $group_id, $uid, $remember); + XDB::execute('DELETE FROM group_members + WHERE uid = {?} AND asso_id = {?}', + $uid, $group_id); + self::fix_notification($group_id); + } + + static private function fix_notification($group_id) + { + $count = XDB::fetchOneCell("SELECT COUNT(uid) + FROM group_members + WHERE asso_id = {?} AND perms = 'admin' AND FIND_IN_SET('notify', flags)", + $group_id); + if ($count == 0) { + XDB::execute("UPDATE groups + SET flags = IF(flags = '', 'notify_all', CONCAT(flags, ',', 'notify_all')) + WHERE id = {?}", + $group_id); + } } }