<?php
/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
// Updates (or creates) the reminder line for the pair (|user|, |reminder_id|)
// using the |status| as status, and the |next_ask| as the delay between now
// and the next ask (if any).
- private static function UpdateStatus($user_id, $type_id, $status, $next_ask)
+ private static function UpdateStatus($uid, $type_id, $status, $next_ask)
{
- XDB::execute('REPLACE INTO reminder
- SET uid = {?}, type_id = {?}, status = {?},
- remind_last = NOW(), remind_next = FROM_UNIXTIME({?})',
- $user_id, $type_id, $status,
+ XDB::execute('INSERT INTO reminder (uid, type_id, status, remind_last, remind_next)
+ VALUES ({?}, {?}, {?}, NOW(), {?})
+ ON DUPLICATE KEY UPDATE status = VALUES(status), remind_last = VALUES(remind_last), remind_next = VALUES(remind_next)',
+ $uid, $type_id, $status,
($next_ask > 0 ? time() + $next_ask * 24 * 60 * 60 : null));
}
// method below).
abstract public function HandleAction($action);
+ // Displays a reduced version of the reminder and notifies that the action
+ // has been taken into account.
+ public function NotifiesAction(&$page)
+ {
+ pl_content_headers("text/html");
+ $page->changeTpl('reminder/notification.tpl', NO_SKIN);
+ $page->assign('previous_reminder', $this->title());
+ }
+
// Displays the reminder as a standalone html snippet. It should be used
// when the reminder is the only output of a page.
- public function DisplayStandalone(&$page)
+ public function DisplayStandalone(&$page, $previous_reminder = null)
{
- header('Content-Type: text/html; charset=utf-8');
+ pl_content_headers("text/html");
$page->changeTpl('reminder/base.tpl', NO_SKIN);
$this->Prepare($page);
+ if ($previous_reminder) {
+ $page->assign('previous_reminder', $previous_reminder);
+ }
}
// Prepares the display by assigning template variables.
return 'ajax/reminder/' . $this->name;
}
+ // Returns the url for the information page.
+ public function info() { return ''; }
+
// Static status update methods -------------------------------------------
- // Marks the candidate reminder as having been accepted for user |user_id|.
+ // Marks the candidate reminder as having been accepted for user |uid|.
// It is intended to be used when a reminder box has been bypassed, and when
// it should behave as if the user had clicked on 'yes'.
- protected static function MarkCandidateAsAccepted($user_id, $candidate)
+ protected static function MarkCandidateAsAccepted($uid, $candidate)
{
- Reminder::UpdateStatus($user_id, $candidate['type_id'],
+ Reminder::UpdateStatus($uid, $candidate['type_id'],
'yes', $candidate['remind_delay_yes']);
}