X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fbanana%2Fforum.inc.php;h=17f2efccd5b95ad7f886a72e77571e834e3cee33;hb=e23d21c1588a9ffa0697aef08e9ebdada4fe167e;hp=0b1f2e5436a4fd66032eb49edecb9bf19e98131e;hpb=1f58ccb1e75eca08fbd04971d617ea372bc77b5a;p=platal.git
diff --git a/include/banana/forum.inc.php b/include/banana/forum.inc.php
index 0b1f2e5..17f2efc 100644
--- a/include/banana/forum.inc.php
+++ b/include/banana/forum.inc.php
@@ -1,6 +1,6 @@
user = &$user;
global $globals;
Banana::$msgedit_canattach = false;
- Banana::$spool_root = $globals->banana->spool_root;
+ Banana::$spool_root = $globals->spoolroot . '/spool/banana/';
array_push(Banana::$msgparse_headers, 'x-org-id', 'x-org-mail');
- Banana::$nntp_host = 'news://web_' . $user->login()
- . ":{$globals->banana->password}@{$globals->banana->server}:{$globals->banana->port}/";
- if (S::has_perms()) {
+ Banana::$nntp_host = self::buildURL($user->login());
+ if (S::admin()) {
Banana::$msgshow_mimeparts[] = 'source';
}
Banana::$debug_nntp = ($globals->debug & DEBUG_BT);
Banana::$debug_smarty = ($globals->debug & DEBUG_SMARTY);
- if (!S::v('core_rss_hash')) {
- Banana::$feed_active = false;
- }
+ Banana::$feed_active = S::hasAuthToken();
+
parent::__construct($params, 'NNTP', 'PlatalBananaPage');
if (@$params['action'] == 'profile') {
Banana::$action = 'profile';
}
}
+ public static function buildURL($login = null)
+ {
+ global $globals;
+ $scheme = ($globals->banana->port == 563) ? "nntps" : "news";
+ $user = $globals->banana->web_user;
+ if ($login != null) {
+ $user .= '_' . $login;
+ $pass = $globals->banana->password;
+ } else {
+ $pass = $globals->banana->web_pass;
+ }
+ return $scheme . '://' . $user
+ . ":{$pass}@{$globals->banana->server}:{$globals->banana->port}/";
+
+ }
+
+ private function fetchProfile()
+ {
+ // Get user profile from SQL
+ $req = XDB::query("SELECT name, mail, sig,
+ FIND_IN_SET('threads',flags) AS threads,
+ FIND_IN_SET('automaj',flags) AS maj,
+ FIND_IN_SET('xface', flags) AS xface,
+ tree_unread, tree_read
+ FROM forum_profiles
+ WHERE uid = {?}", $this->user->id());
+ if ($req->numRows()) {
+ $infos = $req->fetchOneAssoc();
+ } else {
+ $infos = array();
+ }
+ if (empty($infos['name'])) {
+ $infos = array('name' => $this->user->fullName(),
+ 'mail' => $this->user->forlifeEmail(),
+ 'sig' => $this->user->displayName(),
+ 'threads' => false,
+ 'maj' => true,
+ 'xface' => false,
+ 'tree_unread' => 'o',
+ 'tree_read' => 'dg' );
+ }
+ return $infos;
+ }
+
public function run()
{
global $platal, $globals;
@@ -63,50 +104,40 @@ class ForumsBanana extends Banana
$time = null;
if (!is_null($this->params) && isset($this->params['updateall'])) {
$time = intval($this->params['updateall']);
- $_SESSION['banana_last'] = $time;
+ $this->user->banana_last = $time;
}
- // Get user profile from SQL
- $req = XDB::query("SELECT nom, mail, sig,
- FIND_IN_SET('threads',flags), FIND_IN_SET('automaj',flags),
- tree_unread, tree_read
- FROM {$globals->banana->table_prefix}profils
- WHERE uid={?}", S::i('uid'));
- if (!(list($nom, $mail, $sig, $disp, $maj, $unread, $read) = $req->fetchOneRow())) {
- $nom = S::v('prenom')." ".S::v('nom');
- $mail = $this->user->forlifeEmail();
- $sig = $nom." (".S::v('promo').")";
- $disp = 0;
- $maj = 1;
- $unread = 'o';
- $read = 'dg';
- }
- if ($maj) {
+ $infos = $this->fetchProfile();
+ if ($infos['maj']) {
$time = time();
}
// Build user profile
- $req = XDB::query("
- SELECT nom
- FROM {$globals->banana->table_prefix}abos
- LEFT JOIN {$globals->banana->table_prefix}list ON list.fid=abos.fid
- WHERE uid={?}", S::i('uid'));
- Banana::$profile['headers']['From'] = "$nom <$mail>";
+ $req = XDB::query("SELECT name
+ FROM forum_subs AS fs
+ LEFT JOIN forums AS f ON (f.fid = fs.fid)
+ WHERE uid={?}", $this->user->id());
+ Banana::$profile['headers']['From'] = $infos['name'] . ' <' . $infos['mail'] . '>';
Banana::$profile['headers']['Organization'] = make_Organization();
- Banana::$profile['signature'] = $sig;
- Banana::$profile['display'] = $disp;
- Banana::$profile['autoup'] = $maj;
- Banana::$profile['lastnews'] = S::v('banana_last');
+ Banana::$profile['signature'] = $infos['sig'];
+ Banana::$profile['display'] = $infos['threads'];
+ Banana::$profile['autoup'] = $infos['maj'];
+ Banana::$profile['lastnews'] = $this->user->banana_last;
Banana::$profile['subscribe'] = $req->fetchColumn();
- Banana::$tree_unread = $unread;
- Banana::$tree_read = $read;
+ Banana::$tree_unread = $infos['tree_unread'];
+ Banana::$tree_read = $infos['tree_read'];
// Update the "unread limit"
if (!is_null($time)) {
- XDB::execute("UPDATE auth_user_quick
- SET banana_last = FROM_UNIXTIME({?})
- WHERE user_id={?}",
- $time, S::i('uid'));
+ XDB::execute('UPDATE forum_profiles
+ SET last_seen = FROM_UNIXTIME({?})
+ WHERE uid = {?}',
+ $time, $this->user->id());
+ if (XDB::affectedRows() == 0) {
+ XDB::execute('INSERT IGNORE INTO forum_profiles (uid, last_seen)
+ VALUES ({?}, FROM_UNIXTIME({?}))',
+ $this->user->id(), $time);
+ }
}
if (!empty($GLOBALS['IS_XNET_SITE'])) {
@@ -116,7 +147,7 @@ class ForumsBanana extends Banana
} else {
// Register custom Banana links and tabs
if (!Banana::$profile['autoup']) {
- Banana::$page->registerAction('registerAction('path . '", "updateall", ' . time() . ')\'>'
. 'Marquer tous les messages comme lus'
. '', array('forums', 'thread', 'message'));
@@ -136,11 +167,7 @@ class ForumsBanana extends Banana
public function post($dest, $reply, $subject, $body)
{
global $globals;
- $res = XDB::query('SELECT nom, prenom, promo
- FROM auth_user_md5 AS u
- WHERE u.user_id = {?}', $this->user->id());
- list($nom, $prenom, $promo) = $res->fetchOneRow();
- Banana::$profile['headers']['From'] = "$prenom $nom ($promo) <{$this->user->bestEmail()}>";
+ Banana::$profile['headers']['From'] = $this->user->fullName() . ' <' . $this->user->bestEmail() . '>';
Banana::$profile['headers']['Organization'] = make_Organization();
return parent::post($dest, $reply, $subject, $body);
}
@@ -148,28 +175,27 @@ class ForumsBanana extends Banana
protected function action_saveSubs($groups)
{
global $globals;
- $uid = S::v('uid');
+ $uid = $this->user->id();
Banana::$profile['subscribe'] = array();
- XDB::execute("DELETE FROM {$globals->banana->table_prefix}abos WHERE uid={?}", $uid);
+ XDB::execute('DELETE FROM forum_subs
+ WHERE uid = {?}', $this->user->id());
if (!count($groups)) {
return true;
}
- $req = XDB::iterRow("SELECT fid,nom FROM {$globals->banana->table_prefix}list");
- $fids = array();
- while (list($fid,$fnom) = $req->next()) {
- $fids[$fnom] = $fid;
- }
-
+ $fids = XDB::fetchAllAssoc('name', 'SELECT fid, name
+ FROM forums');
$diff = array_diff($groups, array_keys($fids));
foreach ($diff as $g) {
- XDB::execute("INSERT INTO {$globals->banana->table_prefix}list (nom) VALUES ({?})", $g);
+ XDB::execute('INSERT INTO forums (name)
+ VALUES ({?})', $g);
$fids[$g] = XDB::insertId();
}
foreach ($groups as $g) {
- XDB::execute("INSERT INTO {$globals->banana->table_prefix}abos (fid,uid) VALUES ({?},{?})",
+ XDB::execute('INSERT INTO forum_subs (fid, uid)
+ VALUES ({?}, {?})',
$fids[$g], $uid);
Banana::$profile['subscribe'][] = $g;
}
@@ -178,7 +204,7 @@ class ForumsBanana extends Banana
protected function action_updateProfile()
{
global $globals;
- $page = Platal::page();
+ $page =& Platal::page();
$colors = glob(dirname(__FILE__) . '/../../htdocs/images/banana/m2*.gif');
foreach ($colors as $key=>$path) {
@@ -189,7 +215,7 @@ class ForumsBanana extends Banana
if (Post::has('action') && Post::v('action') == 'Enregistrer') {
S::assert_xsrf_token();
- $flags = new FlagSet();
+ $flags = new PlFlagSet();
if (Post::b('bananadisplay')) {
$flags->addFlag('threads');
}
@@ -203,44 +229,35 @@ class ForumsBanana extends Banana
$read = Post::s('read');
if (!in_array($unread, $colors) || !in_array($read, $colors)) {
$page->trigError('Le choix de type pour l\'arborescence est invalide');
- } elseif (XDB::execute("REPLACE INTO forums.profils (uid, sig, mail, nom, flags, tree_unread, tree_read)
- VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})",
- S::v('uid'), Post::v('bananasig'),
- Post::v('bananamail'), Post::v('banananame'),
- $flags, $unread, $read)) {
- $page->trigSuccess("Ton profil a été enregistré avec succès.");
} else {
- $page->trigError("Une erreur s'est produite lors de l'enregistrement de ton profil");
+ $last_seen = XDB::query('SELECT last_seen
+ FROM forum_profiles
+ WHERE uid = {?}', $this->user->id());
+ if ($last_seen->numRows() > 0) {
+ $last_seen = $last_seen->fetchOneCell();
+ } else {
+ $last_seen = '0000-00-00';
+ }
+ XDB::execute('INSERT INTO forum_profiles (uid, sig, mail, name, flags, tree_unread, tree_read, last_seen)
+ VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})
+ ON DUPLICATE KEY UPDATE sig = VALUES(sig), mail = VALUES(mail), name = VALUES(name), flags = VALUES(flags),
+ tree_unread = VALUES(tree_unread), tree_read = VALUES(tree_read), last_seen = VALUES(last_seen)',
+ $this->user->id(), Post::v('bananasig'),
+ Post::v('bananamail'), Post::v('banananame'),
+ $flags, $unread, $read, $last_seen);
+ $page->trigSuccess('Ton profil a été mis à jour');
}
}
- $req = XDB::query("
- SELECT nom, mail, sig,
- FIND_IN_SET('threads', flags),
- FIND_IN_SET('automaj', flags),
- FIND_IN_SET('xface', flags),
- tree_unread,
- tree_read
- FROM forums.profils
- WHERE uid = {?}", S::v('uid'));
- if (!(list($nom, $mail, $sig, $disp, $maj, $xface, $unread, $read) = $req->fetchOneRow())) {
- $nom = S::v('prenom').' '.S::v('nom');
- $mail = S::user()->forlifeEmail();
- $sig = $nom.' ('.S::v('promo').')';
- $disp = 0;
- $maj = 0;
- $xface = 0;
- $unread = 'o';
- $read = 'dg';
- }
- $page->assign('nom' , $nom);
- $page->assign('mail', $mail);
- $page->assign('sig', $sig);
- $page->assign('disp', $disp);
- $page->assign('maj', $maj);
- $page->assign('xface', $xface);
- $page->assign('unread', $unread);
- $page->assign('read', $read);
+ $infos = $this->fetchProfile();
+ $page->assign('nom' , $infos['name']);
+ $page->assign('mail', $infos['mail']);
+ $page->assign('sig', $infos['sig']);
+ $page->assign('disp', $infos['threads']);
+ $page->assign('maj', $infos['maj']);
+ $page->assign('xface', $infos['xface']);
+ $page->assign('unread', $infos['tree_unread']);
+ $page->assign('read', $infos['tree_read']);
return null;
}
}