GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Render::renderTableAsHtml()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 32
rs 9.408
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
/**
3
 * ZfTable ( Module for Zend Framework 2)
4
 *
5
 * @copyright Copyright (c) 2013 Piotr Duda [email protected]
6
 * @license   MIT License
7
 */
8
9
namespace ZfTable;
10
11
use Zend\View\Resolver;
12
use Zend\View\Renderer\PhpRenderer;
13
use ZfTable\Options\ModuleOptions;
14
15
class Render extends AbstractCommon
16
{
17
18
    /**
19
     * PhpRenderer object
20
     * @var PhpRenderer
21
     */
22
    protected $renderer;
23
24
    /**
25
     *
26
     * @var ModuleOptions
27
     */
28
    protected $options;
29
30
    /**
31
     *
32
     * @param AbstractTable $table
33
     */
34
    public function __construct($table)
35
    {
36
        $this->setTable($table);
37
    }
38
39
    /**
40
     * Rendering paginator
41
     *
42
     * @return string
43
     */
44
    public function renderPaginator()
45
    {
46
        $paginator = $this->getTable()->getSource()->getPaginator();
47
        $paginator->setView($this->getRenderer());
48
        $res = $this->getRenderer()->paginationControl($paginator, 'Sliding', 'paginator-slide');
49
        return $res;
50
    }
51
52
     /**
53
     * Rendering json for dataTable
54
      *
55
     * @return string
56
     */
57
    public function renderDataTableJson()
58
    {
59
        $res = array();
60
        $render = $this->getTable()->getRow()->renderRows('array');
61
        $res['sEcho'] = $render;
62
        $res['iTotalDisplayRecords'] = $this->getTable()->getSource()->getPaginator()->getTotalItemCount();
63
        $res['aaData'] = $render;
64
65
        return json_encode($res);
66
    }
67
68
69
    public function renderNewDataTableJson()
70
    {
71
72
        $render = $this->getTable()->getRow()->renderRows('array');
73
74
        $res = array(
75
            'draw' => $render,
76
            'recordsFiltered' => $this->getTable()->getSource()->getPaginator()->getTotalItemCount(),
77
            'data' => $render,
78
        );
79
80
        return json_encode($res);
81
    }
82
83
    /**
84
     * Rendering init view for dataTable
85
     *
86
     * @return string
87
     */
88
    public function renderDataTableAjaxInit()
89
    {
90
        $renderedHeads = $this->renderHead();
91
92
        $view = new \Zend\View\Model\ViewModel();
93
        $view->setTemplate('data-table-init');
94
        $view->setVariable('headers', $renderedHeads);
95
        $view->setVariable('attributes', $this->getTable()->getAttributes());
96
97
        return $this->getRenderer()->render($view);
98
99
    }
100
101
102
    public function renderCustom($template)
103
    {
104
105
        $tableConfig = $this->getTable()->getOptions();
106
        $rowsArray = $this->getTable()->getRow()->renderRows('array_assc');
107
108
        $view = new \Zend\View\Model\ViewModel();
109
        $view->setTemplate($template);
110
111
        $view->setVariable('rows', $rowsArray);
112
113
        $view->setVariable('paginator', $this->renderPaginator());
114
        $view->setVariable('paramsWrap', $this->renderParamsWrap());
115
        $view->setVariable('itemCountPerPage', $this->getTable()->getParamAdapter()->getItemCountPerPage());
116
        $view->setVariable('quickSearch', $this->getTable()->getParamAdapter()->getQuickSearch());
117
        $view->setVariable('name', $tableConfig->getName());
118
        $view->setVariable('itemCountPerPageValues', $tableConfig->getValuesOfItemPerPage());
119
        $view->setVariable('showQuickSearch', $tableConfig->getShowQuickSearch());
120
        $view->setVariable('showPagination', $tableConfig->getShowPagination());
121
        $view->setVariable('showItemPerPage', $tableConfig->getShowItemPerPage());
122
        $view->setVariable('showExportToCSV', $tableConfig->getShowExportToCSV());
123
124
        return $this->getRenderer()->render($view);
125
    }
126
127
    /**
128
     * Rendering table
129
     *
130
     * @return string
131
     */
132
    public function renderTableAsHtml()
133
    {
134
        $render = '';
135
        $tableConfig = $this->getTable()->getOptions();
136
137
        if ($tableConfig->getShowColumnFilters()) {
138
            $render .= $this->renderFilters();
139
        }
140
141
        $render .= $this->renderHead();
142
        $render = sprintf('<thead>%s</thead>', $render);
143
        $render .= $this->getTable()->getRow()->renderRows();
144
        $table = sprintf('<table %s>%s</table>', $this->getTable()->getAttributes(), $render);
145
146
        $view = new \Zend\View\Model\ViewModel();
147
        $view->setTemplate('container');
148
149
        $view->setVariable('table', $table);
150
151
        $view->setVariable('paginator', $this->renderPaginator());
152
        $view->setVariable('paramsWrap', $this->renderParamsWrap());
153
        $view->setVariable('itemCountPerPage', $this->getTable()->getParamAdapter()->getItemCountPerPage());
154
        $view->setVariable('quickSearch', $this->getTable()->getParamAdapter()->getQuickSearch());
155
        $view->setVariable('name', $tableConfig->getName());
156
        $view->setVariable('itemCountPerPageValues', $tableConfig->getValuesOfItemPerPage());
157
        $view->setVariable('showQuickSearch', $tableConfig->getShowQuickSearch());
158
        $view->setVariable('showPagination', $tableConfig->getShowPagination());
159
        $view->setVariable('showItemPerPage', $tableConfig->getShowItemPerPage());
160
        $view->setVariable('showExportToCSV', $tableConfig->getShowExportToCSV());
161
162
        return $this->getRenderer()->render($view);
163
    }
164
165
166
    /**
167
     * Rendering filters
168
     *
169
     * @return string
170
     */
171
    public function renderFilters()
172
    {
173
        $headers = $this->getTable()->getHeaders();
174
        $render = '';
175
176
        foreach ($headers as $name => $params) {
177
178
            if (isset($params['filters'])) {
179
                $value = $this->getTable()->getParamAdapter()->getValueOfFilter($name);
0 ignored issues
show
Bug introduced by
It seems like you code against a concrete implementation and not the interface ZfTable\Params\AdapterInterface as the method getValueOfFilter() does only exist in the following implementations of said interface: ZfTable\Params\AdapterArrayObject.

Let’s take a look at an example:

interface User
{
    /** @return string */
    public function getPassword();
}

class MyUser implements User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different implementation of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the interface:

    interface User
    {
        /** @return string */
        public function getPassword();
    
        /** @return string */
        public function getDisplayName();
    }
    
Loading history...
180
                $id = 'zff_'.$name;
181
182
                if (is_string($params['filters'])) {
183
                    $element = new \Zend\Form\Element\Text($id);
184
                } else {
185
                    $element = new \Zend\Form\Element\Select($id);
186
                    $element->setValueOptions($params['filters']);
187
                }
188
                $element->setAttribute('class', 'filter form-control');
189
                $element->setValue($value);
190
191
                $render .= sprintf('<td>%s</td>', $this->getRenderer()->formRow($element));
192
            } else {
193
                $render .= '<td></td>';
194
            }
195
        }
196
        return sprintf('<tr>%s</tr>', $render);
197
    }
198
199
200
201
    /**
202
     * Rendering head
203
     *
204
     * @return string
205
     */
206
    public function renderHead()
207
    {
208
        $headers = $this->getTable()->getHeaders();
209
        $render = '';
210
        foreach ($headers as $name => $title) {
211
            $render .= $this->getTable()->getHeader($name)->render();
212
        }
213
        $render = sprintf('<tr class="zf-title">%s</tr>', $render);
214
        return $render;
215
    }
216
217
    /**
218
     * Rendering params wrap to ajax communication
219
     *
220
     * @return string
221
     */
222
    public function renderParamsWrap()
223
    {
224
        $view = new \Zend\View\Model\ViewModel();
225
226
        $view->setTemplate('default-params');
227
        $view->setVariable('column', $this->getTable()->getParamAdapter()->getColumn());
228
        $view->setVariable('itemCountPerPage', $this->getTable()->getParamAdapter()->getItemCountPerPage());
229
        $view->setVariable('order', $this->getTable()->getParamAdapter()->getOrder());
230
        $view->setVariable('page', $this->getTable()->getParamAdapter()->getPage());
231
        $view->setVariable('quickSearch', $this->getTable()->getParamAdapter()->getQuickSearch());
232
        $view->setVariable('rowAction', $this->getTable()->getOptions()->getRowAction());
233
234
        return $this->getRenderer()->render($view);
235
    }
236
237
    /**
238
     * Init renderer object
239
     */
240
    protected function initRenderer()
241
    {
242
        $renderer = new PhpRenderer();
243
244
        $plugins = $renderer->getHelperPluginManager();
245
        $config  = new \Zend\Form\View\HelperConfig;
246
        $config->configureServiceManager($plugins);
247
248
        $resolver = new Resolver\AggregateResolver();
249
        $map = new Resolver\TemplateMapResolver($this->getTable()->getOptions()->getTemplateMap());
250
        $resolver->attach($map);
251
252
        $renderer->setResolver($resolver);
253
        $this->renderer = $renderer;
254
    }
255
256
    /**
257
     * Get PHPRenderer
258
     * @return PhpRenderer
259
     */
260
    public function getRenderer()
261
    {
262
        if (!$this->renderer) {
263
            $this->initRenderer();
264
        }
265
        return $this->renderer;
266
    }
267
268
    /**
269
     * Set PhpRenderer
270
     * @param \Zend\View\Renderer\PhpRenderer $renderer
271
     */
272
    public function setRenderer(PhpRenderer $renderer)
273
    {
274
        $this->renderer = $renderer;
275
    }
276
}
277