Exemplo n.º 1
0
 /**
  * Create a sort url for the field named $title
  * and identified by $key which consists of
  * alias and field. $options holds all link
  * parameters like "alt, class" and so on.
  *
  * $key example: "article.title"
  *
  * @param SlidingPagination $pagination
  * @param string            $title
  * @param string            $key
  * @param array             $options
  * @param array             $params
  *
  * @return array
  */
 public function sortable(SlidingPagination $pagination, $title, $key, $options = array(), $params = array())
 {
     $options = array_merge(array('absolute' => defined('Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface::ABSOLUTE_PATH') ? UrlGeneratorInterface::ABSOLUTE_PATH : false, 'translationParameters' => array(), 'translationDomain' => null, 'translationCount' => null), $options);
     $params = array_merge($pagination->getParams(), $params);
     $direction = isset($options[$pagination->getPaginatorOption('sortDirectionParameterName')]) ? $options[$pagination->getPaginatorOption('sortDirectionParameterName')] : (isset($options['defaultDirection']) ? $options['defaultDirection'] : 'asc');
     $sorted = $pagination->isSorted($key, $params);
     if ($sorted) {
         $direction = $params[$pagination->getPaginatorOption('sortDirectionParameterName')];
         $direction = strtolower($direction) == 'asc' ? 'desc' : 'asc';
         $class = $direction == 'asc' ? 'desc' : 'asc';
     } else {
         $class = 'sortable';
     }
     if (isset($options['class'])) {
         $options['class'] .= ' ' . $class;
     } else {
         $options['class'] = $class;
     }
     if (is_array($title) && array_key_exists($direction, $title)) {
         $title = $title[$direction];
     }
     $params = array_merge($params, array($pagination->getPaginatorOption('sortFieldParameterName') => $key, $pagination->getPaginatorOption('sortDirectionParameterName') => $direction, $pagination->getPaginatorOption('pageParameterName') => 1));
     $options['href'] = $this->router->generate($pagination->getRoute(), $params, $options['absolute']);
     if (null !== $options['translationDomain']) {
         if (null !== $options['translationCount']) {
             $title = $this->translator->transChoice($title, $options['translationCount'], $options['translationParameters'], $options['translationDomain']);
         } else {
             $title = $this->translator->trans($title, $options['translationParameters'], $options['translationDomain']);
         }
     }
     if (!isset($options['title'])) {
         $options['title'] = $title;
     }
     unset($options['absolute'], $options['translationDomain'], $options['translationParameters']);
     return array_merge($pagination->getPaginatorOptions(), $pagination->getCustomParameters(), compact('options', 'title', 'direction', 'sorted', 'key'));
 }