Allows addJsLink to be used for non-static Javascript.
[platal.git] / classes / plset.php
index 2338706..4b08d99 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2007 Polytechnique.org                              *
+ *  Copyright (C) 2003-2009 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -28,7 +28,7 @@ class PlSet
     private $joins   = null;
     private $where   = null;
 
-    private $count   = null;
+    protected $count   = null;
 
     private $mods      = array();
     private $modParams = array();
@@ -80,7 +80,8 @@ class PlSet
                           $limit";
 //        echo $query;
 //        print_r($this);
-        $it    = XDB::iterator($query);
+        $it    = XDB::query($query);
+        $it    = $it->fetchAllAssoc();
         $count = XDB::query('SELECT FOUND_ROWS()');
         $this->count = intval($count->fetchOneCell());
         return $it;
@@ -153,7 +154,7 @@ class PlSet
         return $view;
     }
 
-    public function apply($baseurl, PlatalPage &$page, $view = null, $data = null)
+    public function apply($baseurl, PlPage &$page, $view = null, $data = null)
     {
         $view =& $this->buildView($view, $data);
         if (is_null($view)) {
@@ -163,7 +164,7 @@ class PlSet
         if (!isset($args['rechercher'])) {
             $args['rechercher'] = 'Chercher';
         }
-        $page->changeTpl('core/plset.tpl');
+        $page->coreTpl('plset.tpl');
         $page->assign('plset_base', $baseurl);
         $page->assign('plset_mods', $this->mods);
         $page->assign('plset_mod', $this->mod);
@@ -181,7 +182,7 @@ class PlSet
 interface PlView
 {
     public function __construct(PlSet &$set, $data, array $params);
-    public function apply(PlatalPage &$page);
+    public function apply(PlPage &$page);
     public function args();
 }
 
@@ -199,6 +200,8 @@ abstract class MultipageView implements PlView
     protected $sortkeys = array();
     protected $defaultkey = null;
 
+    protected $bound_field = null;
+
     public function __construct(PlSet &$set, $data, array $params)
     {
         $this->set   =& $set;
@@ -222,6 +225,11 @@ abstract class MultipageView implements PlView
         return null;
     }
 
+    public function bounds()
+    {
+        return null;
+    }
+
     protected function addSortKey($name, array $keys, $desc, $default = false)
     {
         $this->sortkeys[$name] = array('keys' => $keys, 'desc' => $desc);
@@ -253,22 +261,37 @@ abstract class MultipageView implements PlView
 
     abstract public function templateName();
 
-    public function apply(PlatalPage &$page)
+    public function apply(PlPage &$page)
     {
+        $res = $this->set->get($this->fields(),
+                               $this->joins(),
+                               $this->where(),
+                               $this->groupBy(),
+                               $this->order(),
+                               $this->entriesPerPage,
+                               $this->offset);
+        $show_bounds = $this->bounds();
+        $end         = end($res);
+        if ($show_bounds) {
+            if ($show_bounds == 1) {
+                $first = $res[0][$this->bound_field];
+                $last  = $end[$this->bound_field];
+            } elseif ($show_bounds == -1) {
+                $first = $end[$this->bound_field];
+                $last  = $res[0][$this->bound_field];
+            }
+            $page->assign('first', $first);
+            $page->assign('last', $last);
+        }
+
+        $page->assign('show_bounds', $show_bounds);
         $page->assign('order', Env::v('order', $this->defaultkey));
         $page->assign('orders', $this->sortkeys);
         $page->assign_by_ref('plview', $this);
-        $page->assign_by_ref('set',
-                             $this->set->get($this->fields(),
-                                             $this->joins(),
-                                             $this->where(),
-                                             $this->groupBy(),
-                                             $this->order(),
-                                             $this->entriesPerPage,
-                                             $this->offset));
+        $page->assign_by_ref('set', $res);
         $count = $this->set->count();
         $this->pages = intval(ceil($count / $this->entriesPerPage));
-        return 'include/plview.multipage.tpl';
+        return PlPage::getCoreTpl('plview.multipage.tpl');
     }
 
     public function args()