X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Freminder.inc.php;h=346d97e1d2185e2051418a14123c3697c7156be3;hb=9e1816c7666767755abbc24f6a0df290efff81b6;hp=835fab0a0a8247c90dc612b377420c7bdbf1d2ea;hpb=ecf2b474289f94932ff60ab18674610979d0e0db;p=platal.git diff --git a/include/reminder.inc.php b/include/reminder.inc.php index 835fab0..346d97e 100644 --- a/include/reminder.inc.php +++ b/include/reminder.inc.php @@ -1,6 +1,6 @@ user->id(), $this->type_id, $status, + $user_id, $type_id, $status, ($next_ask > 0 ? time() + $next_ask * 24 * 60 * 60 : null)); } // Updates the status of the reminder for the current user. protected function UpdateOnYes() { - $this->UpdateStatus('yes', $this->remind_delay_yes); + $this->UpdateStatus($this->user->id(), $this->type_id, + 'yes', $this->remind_delay_yes); } protected function UpdateOnNo() { - $this->UpdateStatus('no', $this->remind_delay_no); + $this->UpdateStatus($this->user->id(), $this->type_id, + 'no', $this->remind_delay_no); } protected function UpdateOnDismiss() { - $this->UpdateStatus('dismiss', $this->remind_delay_dismiss); + $this->UpdateStatus($this->user->id(), $this->type_id, + 'dismiss', $this->remind_delay_dismiss); } // Display and http handling helpers -------------------------------------- @@ -98,35 +101,67 @@ abstract class Reminder // method below). abstract public function HandleAction($action); - // Returns the content of the onebox reminder. Default implementation displays - // a text and three links (yes, no, dismiss); it uses the text from method - // GetDisplayText. - public function Display(&$page) + // Displays a reduced version of the reminder and notifies that the action + // has been taken into account. + public function NotifiesAction(&$page) { - header('Content-Type: text/html; charset=utf-8'); - $page->changeTpl('reminder/default.tpl', NO_SKIN); - $page->assign('text', $this->GetDisplayText()); - $page->assign('baseurl', $this->GetBaseUrl()); + pl_content_headers("text/html"); + $page->changeTpl('reminder/notification.tpl', NO_SKIN); + $page->assign('previous_reminder', $this->title()); } - // Helper for returning the content as a string, instead of using the existing - // globale XorgPage instance. - public function GetDisplayAsString() + // 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, $previous_reminder = null) { - $page = new XorgPage(); - $this->Display($page); - return $page->raw(); + 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. + public function Prepare(&$page) + { + $page->assign_by_ref('reminder', $this); } - // Returns the text to display in the onebox. - abstract protected function GetDisplayText(); + // Returns the name of the inner template, or null if a simple text obtained + // from GetText should be printed. + public function template() { return null; } + + // Returns the text to display in the onebox, or null if a + public function text() { return ''; } + + // Returns the title of the onebox. + public function title() { return ''; } + + // Should return true if this onebox needs to be considered as a warning and + // not just as a subscription offer. + public function warning() { return false; } // Returns the base url for the reminder module. - protected function GetBaseUrl() + public function baseurl() { 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|. + // 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) + { + Reminder::UpdateStatus($user_id, $candidate['type_id'], + 'yes', $candidate['remind_delay_yes']); + } + // Static factories ------------------------------------------------------- // Returns a chosen class using the user data from |user|, and from the database. @@ -146,7 +181,7 @@ abstract class Reminder $position -= $candidate['weight']; if ($position <= 0) { $class = self::GetClassName($candidate['name']); - if ($class && call_user_func(array($class, 'IsCandidate'), $user)) { + if ($class && call_user_func(array($class, 'IsCandidate'), $user, $candidate)) { return new $class($user, $candidate); } unset($candidates[$key]); @@ -181,7 +216,7 @@ abstract class Reminder // the class. private static function GetClassName($name) { - @include_once "reminder/$name.inc.php"; + include_once "reminder/$name.inc.php"; $class = 'Reminder' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name))); return (class_exists($class) ? $class : null); }