Exemple #1
0
 /**
  * Определяем массив модулей и дергаем родительский конструктор
  *
  * @param mixed $spec
  * @param array $options
  */
 public function __construct($spec, $options = null)
 {
     require_once 'Phorm/Resource.php';
     $Resource = new Phorm_Resource();
     $pairs = isset($options['multioptions']) && is_array($options['multioptions']) ? $options['multioptions'] : array();
     $options['multioptions'] = $pairs + $Resource->getModulesListAsPairs();
     parent::__construct($spec, $options);
 }
Exemple #2
0
 /**
  * Готовим данные для подгрузки в таблицу Datagrid
  *
  * @param array $data
  * @param Zend_Paginator $paginator
  * @param mixed $params
  */
 public static function data(array $data, $paginator, $params = array())
 {
     if ($params instanceof Zend_Config) {
         $params = $params->toArray();
     }
     $front = Zend_Controller_Front::getInstance();
     $boot = $front->getParam('bootstrap');
     $view = $boot->getResource('View');
     $translate = $boot->getResource('Translate');
     $rows = array();
     foreach ($data as $key => $row) {
         foreach ($row as $field => $value) {
             // Перевод
             $value = $translate->_($value);
             // Простые значения
             $rows[$key][$field] = $value;
             // Пустые значения
             if ($value == '' || is_null($value)) {
                 $rows[$key][$field] = '—';
             }
             // Заменяем url
             if (isset($params['headings'][$field]['url'])) {
                 $url = self::replaceField($params['headings'][$field]['url'], $data[$key]);
                 $rows[$key][$field] = '<a class="ui-phorm-grid-label" href="' . $view->getSiteUrl() . urldecode($url) . '">' . $value . '</a>';
             }
             // Картинка
             if (isset($params['headings'][$field]['image'])) {
                 $url = self::replaceField($params['headings'][$field]['image'], $data[$key]);
                 //$data[$key][$field] = '<img src="'.$front->getBaseUrl().$url.'" align="left" hspace="4" /> ' . $value;
                 $rows[$key][$field] = '<img src="' . $front->getBaseUrl() . $url . '" align="left" hspace="4" title="' . $value . '" /> ';
             }
             // Чекбоксы
             if (isset($params['headings'][$field]['checkbox'])) {
                 $rows[$key][$field] = '<input type="checkbox" name="' . $field . '[]" class="' . $field . '" value="' . $row[$params['headings'][$field]['checkbox']] . '" />';
             }
             // Заменяем действия
             if (isset($params['headings'][$field]['actions'])) {
                 $rows[$key][$field] = '';
                 foreach ($params['headings'][$field]['actions'] as $action => $opts) {
                     if (!empty($opts)) {
                         $url = isset($opts['url']) ? self::replaceField($view->getSiteUrl() . $opts['url'], $data[$key]) : '#';
                         $title = isset($opts['title']) ? $translate->_($opts['title']) : '';
                         $icon = isset($opts['icon']) ? '<span class="ui-icon ui-icon-' . $opts['icon'] . '"></span>' : '';
                         $text = isset($opts['text']) ? '<span class="ui-button-text">' . $opts['text'] . '</span>' : '';
                         $iconclass = isset($opts['text']) ? 'ui-button-text-icons' : '';
                         $class = isset($opts['class']) ? $opts['class'] . ' ' : '';
                         $rows[$key][$field] .= '&nbsp;<a href="' . $url . '" class="' . $class . $action . ' ui-corner-all ui-button ' . $iconclass . ' ui-state-default" title="' . $translate->_($title) . '">' . $icon . $translate->_($text) . '</a>';
                     }
                 }
             }
             // Замена подстрок
             if (isset($params['headings'][$field]['replace'])) {
                 $search = $params['headings'][$field]['replace']['search'];
                 $replace = $params['headings'][$field]['replace']['replace'];
                 if (is_array($replace)) {
                     foreach ($replace as $k => $v) {
                         $replace[$k] = $translate->_($v);
                     }
                 } else {
                     $replace = $translate->_($replace);
                 }
                 $rows[$key][$field] = str_replace($search, $replace, $data[$key][$field]);
             }
             // Форматирование даты
             if (isset($params['headings'][$field]['dateformat'])) {
                 $rows[$key][$field] = $data[$key][$field] > 0 ? date($params['headings'][$field]['dateformat'], $data[$key][$field]) : '&mdash;';
             }
             // Фильтры (простые функции с одним параметром в виде текущего значения)
             if (isset($params['headings'][$field]['filters']) && is_array($params['headings'][$field]['filters'])) {
                 foreach ($params['headings'][$field]['filters'] as $filter) {
                     if (function_exists($filter)) {
                         $rows[$key][$field] = call_user_func($filter, $data[$key][$field]);
                     }
                 }
             }
         }
     }
     // @todo Здесь нам надо отловить поля, которые есть в headings, но нет в списке данных и убрать actions в запросах
     //
     $headings = array();
     $position = 0;
     foreach ($params['headings'] as $id => $val) {
         if (isset($val['label'])) {
             /**
              * Пропускаем невидимые столбцы
              */
             if (isset($val['visible']) && (bool) $val['visible'] === false) {
                 continue;
             }
             /**
              * Устанавливаем заголовок столбца
              */
             $val['label'] = $translate->_($val['label']);
             $val['id'] = $id;
             /**
              * Чекбоксы
              */
             if (isset($val['checkbox'])) {
                 $val['label'] = '<input type="checkbox" name="' . $id . '_all" class="' . $id . '_all" title="' . $translate->_($val['label']) . '" />';
             }
             /**
              * Порядок сортировки
              */
             if (isset($val['position'])) {
                 $position = $val['position'];
                 foreach ($headings as $y => $z) {
                     if ($y >= $position) {
                         unset($headings[$y]);
                         $headings[++$y] = $z;
                     }
                 }
             } else {
                 $position++;
             }
             $headings[$position] = $val;
         }
     }
     ksort($headings);
     $headings = array_values($headings);
     /**
      * Накидываем справочники на поисковые формы
      */
     $search = array();
     if (isset($params['search']) && is_array($params['search'])) {
         foreach ($params['search'] as $id => $val) {
             // Переводчик
             if (isset($val['label']) && trim($val['label']) != '') {
                 $val['label'] = $translate->_($val['label']);
             }
             // Список модулей
             if ($val['type'] == 'SelectModule') {
                 $Resource = new Phorm_Resource();
                 $val['optiondata'] = $Resource->getModulesListAsPairs();
                 // Список разделов
             } elseif ($val['type'] == 'SelectCategory') {
                 $Categories = new Phorm_Categories();
                 if (isset($params['moduleid'])) {
                     $val['optiondata'] = $Categories->getCategoriesPathsByModule($params['moduleid']);
                 } else {
                     $val['optiondata'] = $Categories->getList();
                 }
             }
             // Перевод справочников
             if (isset($val['optiondata']) && is_array($val['optiondata'])) {
                 foreach ($val['optiondata'] as $k => $v) {
                     if (is_string($v)) {
                         $val['optiondata'][$k] = $translate->_($v);
                     }
                 }
             }
             $val['id'] = $id;
             $search[] = $val;
         }
     }
     return array("pager" => array("page" => $paginator->current, "pages" => $paginator->pageCount, "found" => $paginator->totalItemCount, "displayingStart" => $paginator->firstItemNumber, "displayingEnd" => $paginator->lastItemNumber, "perPage" => $paginator->itemCountPerPage), "headings" => $headings, "search" => empty($search) ? null : $search, "rows" => $rows);
 }