X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fnewsletter.inc.php;h=a51aeae68a207905c4864c3fc02e9d9013c89b10;hb=468a27eb3d72b30bb84a244eb4d02ab9fb36610b;hp=7f1975c6bde36aa96be6fbd8ac2833264ee00a46;hpb=e93255ef54304c697ef7ac101247f23dc5f7b31f;p=platal.git diff --git a/include/newsletter.inc.php b/include/newsletter.inc.php index 7f1975c..a51aeae 100644 --- a/include/newsletter.inc.php +++ b/include/newsletter.inc.php @@ -46,6 +46,7 @@ class NewsLetter const GROUP_XORG = 'Polytechnique.org'; const GROUP_AX = 'AX'; const GROUP_EP = 'Ecole'; + const GROUP_FX = 'FX'; // Searches on mutiple fields const SEARCH_ALL = 'all'; @@ -398,25 +399,32 @@ class NewsLetter /** Get the count of subscribers to the NL. * @return Number of subscribers. */ - public function subscriberCount() + public function subscriberCount($lost = null, $sex = null, $grade = null, $first_promo = null, $last_promo = null) { - return XDB::fetchOneCell('SELECT COUNT(uid) - FROM newsletter_ins - WHERE nlid = {?}', $this->id); + $cond = new PFC_And(new UFC_NLSubscribed($this->id)); + if (!is_null($sex)) { + $cond->addChild(new UFC_Sex($sex)); + } + if (!is_null($grade)) { + $cond->addChild(new UFC_Promo('>=', $grade, $first_promo)); + $cond->addChild(new UFC_Promo('<=', $grade, $last_promo)); + } + if (!($lost === null)) { + if ($lost === true) { + $cond->addChild(new PFC_Not(new UFC_HasEmailRedirect())); + } else { + $cond->addChild(new UFC_HasEmailRedirect()); + } + } + $uf = new UserFilter($cond); + return $uf->getTotalCount(); } /** Get the count of subscribers with non valid redirection. */ - public function lostSubscriberCount() - { - return XDB::fetchOneCell('SELECT COUNT(DISTINCT(n.uid)) - FROM newsletter_ins AS n - INNER JOIN accounts AS a ON (n.uid = a.uid) - INNER JOIN account_types AS t ON (t.type = a.type) - LEFT JOIN email_redirect_account AS r ON (r.uid = a.uid AND r.flags = \'active\' AND r.broken_level < 3 - AND r.type != \'imap\' AND r.type != \'homonym\') - WHERE n.nlid = {?} AND r.redirect IS NULL AND a.state = \'active\' AND FIND_IN_SET(\'mail\', t.perms)', - $this->id); + public function lostSubscriberCount($sex = null) + { + return $this->subscriberCount(true, $sex); } /** Get the number of subscribers to the NL whose last received mailing was $last. @@ -544,6 +552,8 @@ class NewsLetter return 'ax'; case self::GROUP_EP: return 'epletter'; + case self::GROUP_FX: + return 'fxletter'; default: // Don't display groups NLs on X.org assert(!$enforce_xnet); @@ -568,12 +578,51 @@ class NewsLetter return 'ax/admin'; case self::GROUP_EP: return 'epletter/admin'; + case self::GROUP_FX: + return 'fxletter/admin'; + default: + // Don't display groups NLs on X.org + assert(!$enforce_xnet); + } + } + + /** Get the prefix to use for all 'stat' pages of this NL. + */ + public function statPrefix($enforce_xnet = true, $with_group = true) + { + if (!empty($GLOBALS['IS_XNET_SITE'])) { + if ($with_group) { + return $this->group . '/stat/nl'; + } else { + return 'stat/nl'; + } + } + switch ($this->group) { + case self::GROUP_XORG: + return 'stat/newsletter'; + case self::GROUP_AX: + return 'ax/stat'; + case self::GROUP_EP: + return 'epletter/stat'; + case self::GROUP_FX: + return 'fxletter/stat'; default: // Don't display groups NLs on X.org assert(!$enforce_xnet); } } + /** Get links for nl pages. + */ + public function adminLinks() + { + return array( + 'index' => array('link' => $this->prefix(), 'title' => 'Archives'), + 'admin' => array('link' => $this->adminPrefix(), 'title' => 'Administrer'), + 'stats' => array('link' => $this->statPrefix(), 'title' => 'Statistiques') + ); + } + /** Hack used to remove "admin" links on X.org page on X.net * The 'admin' links are enabled for all pages, except for X.org when accessing NL through X.net */ @@ -600,6 +649,7 @@ class NewsLetter case self::GROUP_XORG: case self::GROUP_AX: case self::GROUP_EP: + case self::GROUP_FX: return false; default: return true;