コード例 #1
0
 /**
  * Load the data
  */
 public function loadData($render = 'getRenderer')
 {
     if ($this->isDataLoaded === true) {
         return true;
     }
     if ($this->isInit() !== true) {
         throw new \Exception('The init() method has to be called, before you can call loadData()!');
     }
     if ($this->hasDataSource() === false) {
         throw new \Exception('No datasource defined! Please call "setDataSource()" first"');
     }
     /**
      * Apply cache
      */
     $renderer = $this->{$render}();
     /**
      * Step 1.1) Only select needed columns (performance)
      */
     $this->getDataSource()->setColumns($this->getColumns());
     /**
      * Step 1.2) Sorting
      */
     foreach ($renderer->getSortConditions() as $condition) {
         $this->getDataSource()->addSortCondition($condition['column'], $condition['sortDirection']);
     }
     /**
      * Step 1.3) Filtering
      */
     foreach ($renderer->getFilters($this->getKeepCacheFilter()) as $filter) {
         $this->getDataSource()->addFilter($filter);
     }
     $this->getDataSource()->execute();
     $paginatorAdapter = $this->getDataSource()->getPaginatorAdapter();
     \Zend\Paginator\Paginator::setDefaultScrollingStyle('Sliding');
     $this->paginator = new Paginator($paginatorAdapter);
     $this->paginator->setCurrentPageNumber($renderer->getCurrentPageNumber());
     $this->paginator->setItemCountPerPage($renderer->getItemsPerPage($this->getDefaultItemsPerPage()));
     /* @var $currentItems \ArrayIterator */
     $data = $this->paginator->getCurrentItems();
     if (!is_array($data)) {
         if ($data instanceof \Zend\Db\ResultSet\ResultSet) {
             $data = $data->toArray();
         } elseif ($data instanceof ArrayIterator) {
             $data = $data->getArrayCopy();
         } else {
             $add = '';
             if (is_object($data)) {
                 $add = get_class($data);
             } else {
                 $add = '[no object]';
             }
             throw new \Exception('The paginator returned an unknow result: ' . $add . ' (allowed: \\ArrayIterator or a plain php array)');
         }
     }
     /*
      * Save cache
      */
     if ($renderer->isExport() === false) {
         $cacheData = array('sortConditions' => $renderer->getSortConditions(), 'filters' => $renderer->getFilters(), 'currentPage' => $this->getPaginator()->getCurrentPageNumber());
         $success = $this->getCache()->setItem($this->getCacheId(), $cacheData);
         if ($success !== true) {
             $options = $this->getCache()->getOptions();
             if (isset($options['cache_dir'])) {
                 throw new \Exception('Could not save the datagrid cache. Does the directory "' . $options->getCacheDir() . '" exists and is writeable?');
             } else {
                 throw new \Exception('Could not save the datagrid cache.Check configuration file');
             }
         }
     }
     /*
      * Step 3) Format the data - Translate - Replace - Date / time / datetime - Numbers - ...
      */
     $prepareData = new PrepareData($data, $this->getColumns());
     $prepareData->setRendererName($this->getRendererName());
     $prepareData->setTranslator($this->getTranslator());
     $prepareData->prepare();
     $this->preparedData = $prepareData->getData();
     $this->isDataLoaded = true;
 }
コード例 #2
0
 public function testPrepareReplaceTranslateArray()
 {
     $data = $this->data;
     $col3 = clone $this->col3;
     $col3->setTranslationEnabled(true);
     $col3->setReplaceValues(array('tag1' => 'Tag 1'), false);
     $prepare = new PrepareData($data, array($this->colId, $this->col1, $this->col2, $col3));
     $translator = $this->getMock('Zend\\I18n\\Translator\\Translator');
     $translator->expects($this->any())->method('translate')->will($this->returnCallback(function ($name) {
         switch ($name) {
             case 'tag2':
                 return 'Tag 2';
                 break;
         }
         return $name;
     }));
     $prepare->setTranslator($translator);
     $data[0]['idConcated'] = '1';
     $data[1]['idConcated'] = '2';
     $data[2]['idConcated'] = '3';
     $data[1]['col2'] = '';
     $data[0]['col3'] = array('Tag 1', 'Tag 2');
     $data[1]['col3'] = array('tag3', 'Tag 1');
     $data[2]['col3'] = array('Tag 2', 'tag5');
     $this->assertEquals($data, $prepare->getData());
 }