Add basic support for a json output.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 24 Sep 2011 07:33:54 +0000 (09:33 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 24 Sep 2011 07:33:54 +0000 (09:33 +0200)
If banana get output=json in its parameters, it will produce a json
output that can be used in order to update the page in javascript.

This works well with the box list, I didn't even test it on other pages.

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
banana/banana.inc.php.in
banana/page.inc.php
banana/templates/banana-boxlist.inc.tpl
examples/index.php

index d28cbbc..b4878a0 100644 (file)
@@ -184,7 +184,7 @@ class Banana
         if ($pageclass == 'BananaPage') {
             Banana::load('page');
         }
-        Banana::$page = new $pageclass;
+        Banana::$page = new $pageclass(@$this->params['output']);
         $types = array('multipart/report' => _b_('Rapport d\'erreur'),
                        'multipart/mixed'  => _b_('Composition'),
                        'text/html'        => _b_('Texte formaté'),
index 8b2602c..1d62313 100644 (file)
@@ -20,12 +20,16 @@ class BananaPage extends Smarty
     protected $killed  = array();
     protected $actions = array();
 
+    protected $mode;
+    protected $json_params = array();
+
     public $css = '';
 
-    public function __construct()
+    public function __construct($mode)
     {
         parent::Smarty();
 
+        $this->mode          = strtolower($mode);
         $this->compile_check = Banana::$debug_smarty;
         $this->template_dir  = dirname(__FILE__) . '/templates/';
         $this->compile_dir   = Banana::$spool_root . '/templates_c/';
@@ -63,6 +67,17 @@ class BananaPage extends Smarty
         return true;
     }
 
+    /** Assign a variable in the page.
+     */
+    public function assign($var, $value)
+    {
+        if ($this->mode === 'json') {
+            $this->json_params[$var] = $value;
+        } else {
+            parent::assign($var, $value);
+        }
+    }
+
     /** Register an action to show on banana page
      * @param action_code HTML code of the action
      * @param pages ARRAY pages where to show the action (null == every pages)
@@ -148,6 +163,9 @@ class BananaPage extends Smarty
      */
     public function run()
     {
+        if ($this->mode === 'json') {
+            return json_encode($this->json_params);
+        }
         $tpl = $this->prepare();
         if (!isset($this->pages[$this->page])) {
             $this->trig(_b_('La page demandée n\'existe pas'));
index 102bf07..38ab181 100644 (file)
@@ -5,7 +5,7 @@
   <input type="submit" name="validsubs" value="{"Valider"|b}" />
 </p>
 {/if}
-<table class="bicol">
+<table class="bicol banana_box_list">
   <tr>
     {if $withsubs}
     <th></th>
index 4419ee3..50e7d5a 100644 (file)
@@ -126,6 +126,11 @@ $feed = $banana->feed();      // Get a link to banana's feed. You need to use Ba
 $bt   = $banana->backtrace(); // Get protocole execution backtrace
 
 session_write_close();
+if (@strtolower($_GET['output']) === 'json') {
+    header('Content-Type: text/javascript');
+    echo $res;
+    exit;
+}
 
 // Genererate the page
 ?>