X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fnewsletter.inc.php;h=447c7b7b24c3ae7d29211f56fd54cdc3095e3b73;hb=a51d0d30df9f951fe83688d49a172edaba453d63;hp=1097f59defa66ab0729934584ae0ffc6fc42a5f9;hpb=b9518dc770273f43f2b37305f11446be4aacef86;p=platal.git diff --git a/include/newsletter.inc.php b/include/newsletter.inc.php index 1097f59..447c7b7 100644 --- a/include/newsletter.inc.php +++ b/include/newsletter.inc.php @@ -321,7 +321,7 @@ class NewsLetter * @p $hash True if the uid is actually a hash. * @return True if the user was successfully unsubscribed. */ - public function unsubscribe($uid = null, $hash = false) + public function unsubscribe($issue_id = null, $uid = null, $hash = false) { if (is_null($uid) && $hash) { // Unable to unsubscribe from an empty hash @@ -342,6 +342,12 @@ class NewsLetter XDB::execute('DELETE FROM newsletter_ins WHERE nlid = {?} AND uid = {?}', $this->id, $user); + if (!is_null($issue_id)) { + XDB::execute('UPDATE newsletter_issues + SET unsubscribe = unsubscribe + 1 + WHERE id = {?}', + $id); + } return true; } @@ -495,10 +501,14 @@ class NewsLetter /** Get the prefix leading to the page for this NL * Only X.org / AX / X groups may be seen on X.org. */ - public function prefix($enforce_xnet=true) + public function prefix($enforce_xnet=true, $with_group=true) { if (!empty($GLOBALS['IS_XNET_SITE'])) { - return $this->group . '/nl'; + if ($with_group) { + return $this->group . '/nl'; + } else { + return 'nl'; + } } switch ($this->group) { case self::GROUP_XORG: @@ -515,10 +525,14 @@ class NewsLetter /** Get the prefix to use for all 'admin' pages of this NL. */ - public function adminPrefix($enforce_xnet=true) + public function adminPrefix($enforce_xnet=true, $with_group=true) { if (!empty($GLOBALS['IS_XNET_SITE'])) { - return $this->group . '/admin/nl'; + if ($with_group) { + return $this->group . '/admin/nl'; + } else { + return 'admin/nl'; + } } switch ($this->group) { case self::GROUP_XORG: @@ -553,6 +567,18 @@ class NewsLetter return $this->custom_css; } + public function canSyncWithGroup() + { + switch ($this->group) { + case self::GROUP_XORG: + case self::GROUP_AX: + case self::GROUP_EP: + return false; + default: + return true; + } + } + // }}} } @@ -819,7 +845,11 @@ class NLIssue public function last() { if (is_null($this->id_last)) { - $this->id_last = $this->nl->getIssue('last')->id; + try { + $this->id_last = $this->nl->getIssue('last')->id; + } catch (MailNotFound $e) { + $this->id_last = null; + } } return $this->id_last; } @@ -829,6 +859,7 @@ class NLIssue const ERROR_INVALID_SHORTNAME = 'invalid_shortname'; const ERROR_INVALID_UFC = 'invalid_ufc'; + const ERROR_TOO_LONG_UFC = 'too_long_ufc'; const ERROR_SQL_SAVE = 'sql_error'; /** Save the global properties of this NL issue (title&co). @@ -854,6 +885,11 @@ class NLIssue } if ($this->sufb->isValid() || $this->sufb->isEmpty()) { $fields['sufb_json'] = json_encode($this->sufb->export()->dict()); + // If sufb_json is too long to be store, we do not store a truncated json and notify the user. + // The limit is LONGTEXT's one, ie 2^32 = 4294967296. + if (strlen($fields['sufb_json']) > 4294967295) { + $errors[] = self::ERROR_TOO_LONG_UFC; + } } else { $errors[] = self::ERROR_INVALID_UFC; }