X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fgroups.inc.php;h=cd2c44790881474fb212a2d56215364140e52672;hb=1e865041b513cbdec96cfe155d9072e1546d4144;hp=40b8b61cf1e019c5df6a599da0d57ed9b8eb9348;hpb=92412b28cbc789932e041615d45f5bb8dd8c7874;p=platal.git diff --git a/modules/profile/groups.inc.php b/modules/profile/groups.inc.php index 40b8b61..cd2c447 100644 --- a/modules/profile/groups.inc.php +++ b/modules/profile/groups.inc.php @@ -1,6 +1,6 @@ fetchOneCell()); + } + return intval($value); + } - public function __construct(PlWizard &$wiz) + public function save(ProfilePage &$page, $field, $value) { - parent::__construct($wiz); - $this->settings['section'] = $this->settings['binets'] - = $this->settings['groupesx'] - = null; + XDB::execute("UPDATE auth_user_md5 + SET section = {?} + WHERE user_id = {?}", + $value, S::i('uid')); + } +} + +class ProfileGroup implements ProfileSetting +{ + private $table; + private $user_field; + private $group_field; + + public function __construct($table, $user, $group) + { + $this->table = $table; + $this->user_field = $user; + $this->group_field = $group; } - protected function fetchData() + public function value(ProfilePage &$page, $field, $value, &$success) { - parent::fetchData(); + if (is_null($value)) { + $value = array(); + $res = XDB::iterRow("SELECT g.id, g.text + FROM {$this->table}_def AS g + INNER JOIN {$this->table}_ins AS i ON (i.{$this->group_field} = g.id) + WHERE i.{$this->user_field} = {?}", + S::i('uid')); + while (list($gid, $text) = $res->next()) { + $value[intval($gid)] = $text; + } + } + if (!is_array($value)) { + $value = array(); + } + ksort($value); + $success = true; + return $value; + } + + public function save(ProfilePage &$page, $field, $value) + { + XDB::execute("DELETE FROM {$this->table}_ins + WHERE {$this->user_field} = {?}", + S::i('uid')); + if (!count($value)) { + return; + } + $insert = array(); + foreach ($value as $id=>$text) { + $insert[] = '(' . S::i('uid') . ", $id)"; + } + XDB::execute("INSERT INTO {$this->table}_ins ({$this->user_field}, {$this->group_field}) + VALUES " . implode(',', $insert)); + } +} + +class ProfileGroups extends ProfilePage +{ + protected $pg_template = 'profile/groups.tpl'; + + public function __construct(PlWizard &$wiz) + { + parent::__construct($wiz); + $this->settings['section'] = new ProfileSection(); + $this->settings['binets'] = new ProfileGroup('binets', 'user_id', 'binet_id'); + $this->watched['section'] = $this->watched['binets'] = true; } - public function prepare(PlatalPage &$page) + public function _prepare(PlPage &$page, $id) { - parent::prepare($page); + $page->assign('mygroups', XDB::iterator("SELECT a.nom, a.site, a.diminutif, a.unsub_url, a.pub, m.perms + FROM groupex.asso AS a + INNER JOIN groupex.membres AS m ON (m.asso_id = a.id) + WHERE m.uid = {?} AND (a.cat = 'GroupesX' OR a.cat = 'Institutions')", + S::i('uid'))); + $page->assign('listgroups', XDB::iterator("SELECT a.nom, a.diminutif, a.sub_url, + IF (a.cat = 'Institutions', a.cat, d.nom) AS dom + FROM groupex.asso AS a + LEFT JOIN groupex.dom AS d ON (d.id = a.dom) + WHERE a.inscriptible != 0 + AND (a.cat = 'GroupesX' OR a.cat = 'Institutions') + ORDER BY a.cat, a.dom, a.nom")); + $page->assign('old', (int)date('Y') >= S::i('promo_sortie')); } }