Add interface PlIteraface and the corresponding abstract class
[platal.git] / classes / plwizard.php
index 678ab4c..ec9f7d2 100644 (file)
@@ -1,6 +1,6 @@
 <?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   *
@@ -45,7 +45,11 @@ interface PlWizardPage
      * id (PlWizard::FIRST_PAGE, PlWizard::NEXT_PAGE, PlWizard::CURRENT_PAGE
      *  PlWizard::PREVIOUS_PAGE, PlWizard::LAST_PAGE).
      */
-    public function process();
+    public function process(&$success);
+
+    /** Displays the success message.
+     */
+    public function success();
 }
 
 /** A PlWizard is a set of pages through which the user can navigate,
@@ -154,8 +158,8 @@ class PlWizard
 
     public function apply(PlPage &$smarty, $baseurl, $pgid = null, $mode = 'normal')
     {
-        if ($this->stateless && (isset($this->lookup[$pgid]) || isset($this->pages[$pgid]))) { 
-            $curpage = is_numeric($pgid) ? $pgid : $this->lookup[$pgid]; 
+        if ($this->stateless && (isset($this->lookup[$pgid]) || isset($this->pages[$pgid]))) {
+            $curpage = is_numeric($pgid) ? $pgid : $this->lookup[$pgid];
         } else if ($this->stateless && is_null($pgid)) {
             $curpage = 0;
         } else {
@@ -169,7 +173,8 @@ class PlWizard
 
             $page = $this->getPage(Post::i('valid_page'));
             $curpage = Post::i('valid_page');
-            $next = $page->process();
+            $success = false;
+            $next = $page->process(&$success);
             $last = $curpage;
             switch ($next) {
               case PlWizard::FIRST_PAGE:
@@ -208,12 +213,16 @@ class PlWizard
         // Prepare the page
         $_SESSION[$this->name . '_page'] = $curpage;
         if ($curpage != $oldpage) {
-            pl_redirect($baseurl . '/' . $this->inv_lookup[$curpage]);
+            if (isset($success) && $success) {
+                pl_redirect($baseurl . '/' . $this->inv_lookup[$curpage] . '/null/' . $success);
+            } else {
+                pl_redirect($baseurl . '/' . $this->inv_lookup[$curpage]);
+            }
         } else if (!isset($page)) {
             $page = $this->getPage($curpage);
         }
         if ($mode == 'ajax') {
-            header('Content-Type: text/html; charset=utf-8');
+            pl_content_headers("text/html");
             $smarty->changeTpl($this->layout, NO_SKIN);
             $smarty->assign('wiz_run_ajax', true);
         } else {
@@ -230,6 +239,9 @@ class PlWizard
         $smarty->assign('wiz_page', $page->template());
         $smarty->assign('pl_no_errors', true);
         $page->prepare($smarty, isset($this->inv_lookup[$curpage]) ? $this->inv_lookup[$curpage] : $curpage);
+        if (isset($success) && $success) {
+            $smarty->trigSuccess($page->success());
+        }
     }
 }