* @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
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;
}
/** 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:
/** 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:
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;
+ }
+ }
+
// }}}
}
$this->nl = new NewsLetter($issue['nlid']);
}
$this->id = $id;
+ $this->nlid = $issue['nlid'];
$this->shortname = $issue['short_name'];
$this->date = $issue['date'];
$this->send_before = $issue['send_before'];
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;
}
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).
}
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;
}