X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fplset.php;h=233870608606e9012703d4f0b2a1fe099ff19391;hb=baa62e58cdfb6839040e156ef91e2827bdde1600;hp=d2267d02ad88b1cf192569184987efa49b1d06f7;hpb=1490093c909c086ce8eba3c0f5c24b62ef20cfb3;p=platal.git diff --git a/classes/plset.php b/classes/plset.php index d2267d0..2338706 100644 --- a/classes/plset.php +++ b/classes/plset.php @@ -86,6 +86,27 @@ class PlSet return $it; } + public function args() + { + $get = $_GET; + unset($get['n']); + return $get; + } + + protected function encodeArgs(array $args, $encode = false) + { + $qs = '?'; + $sep = '&'; + foreach ($args as $k=>$v) { + if (!$encode) { + $k = urlencode($k); + $v = urlencode($v); + } + $qs .= "$k=$v$sep"; + } + return $encode ? urlencode($qs) : $qs; + } + public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null, $limitfrom = null) { if (!is_null($limitcount)) { @@ -95,7 +116,6 @@ class PlSet $limitcount = "LIMIT $limitcount"; } $joins = $this->joins . ' ' . $joins; - $where = $where; if (trim($this->where)) { if (trim($where)) { $where .= ' AND '; @@ -117,7 +137,8 @@ class PlSet { $view = strtolower($view); if (!$view || !class_exists($view . 'View') || !isset($this->mods[$view])) { - $view = $this->default ? $this->default : $this->mods[0]; + reset($this->mods); + $view = $this->default ? $this->default : key($this->mods); } $this->mod = $view; $class = $view . 'View'; @@ -138,10 +159,16 @@ class PlSet if (is_null($view)) { return false; } + $args = $view->args(); + if (!isset($args['rechercher'])) { + $args['rechercher'] = 'Chercher'; + } $page->changeTpl('core/plset.tpl'); $page->assign('plset_base', $baseurl); $page->assign('plset_mods', $this->mods); $page->assign('plset_mod', $this->mod); + $page->assign('plset_search', $this->encodeArgs($args)); + $page->assign('plset_search_enc', $this->encodeArgs($args, true)); foreach ($this->modParams[$this->mod] as $param=>$value) { $page->assign($this->mod . '_' . $param, $value); } @@ -155,6 +182,7 @@ interface PlView { public function __construct(PlSet &$set, $data, array $params); public function apply(PlatalPage &$page); + public function args(); } abstract class MultipageView implements PlView @@ -165,10 +193,12 @@ abstract class MultipageView implements PlView public $page = 1; public $offset = 0; - protected $order = array(); protected $entriesPerPage = 20; protected $params = array(); + protected $sortkeys = array(); + protected $defaultkey = null; + public function __construct(PlSet &$set, $data, array $params) { $this->set =& $set; @@ -192,20 +222,41 @@ abstract class MultipageView implements PlView return null; } + protected function addSortKey($name, array $keys, $desc, $default = false) + { + $this->sortkeys[$name] = array('keys' => $keys, 'desc' => $desc); + if (!$this->defaultkey || $default) { + $this->defaultkey = $name; + } + } + public function order() { - foreach ($this->order as &$item) { - if ($item{0} == '-') { - $item = substr($item, 1) . ' DESC'; + $order = Env::v('order', $this->defaultkey); + $invert = ($order{0} == '-'); + if ($invert) { + $order = substr($order, 1); + } + $list = array(); + foreach ($this->sortkeys[$order]['keys'] as $item) { + $desc = ($item{0} == '-'); + if ($desc) { + $item = substr($item, 1); } + if ($desc xor $invert) { + $item .= ' DESC'; + } + $list[] = $item; } - return implode(', ', $this->order); + return implode(', ', $list); } abstract public function templateName(); public function apply(PlatalPage &$page) { + $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(), @@ -217,9 +268,16 @@ abstract class MultipageView implements PlView $this->offset)); $count = $this->set->count(); $this->pages = intval(ceil($count / $this->entriesPerPage)); - return 'include/plview.multipage.tpl'; } + + public function args() + { + $list = $this->set->args(); + unset($list['page']); + unset($list['order']); + return $list; + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: