| Conditions | 27 | 
| Paths | > 20000 | 
| Total Lines | 119 | 
| Code Lines | 73 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php | ||
| 91 | protected function &getListingResults(\Base $f3, \FFCMS\Mappers\Mapper $m, string $users_uuid = null): array | ||
| 92 |     { | ||
| 93 | // set up paging limits | ||
| 94 | $minPerPage = 5; | ||
| 95 | $maxPerPage = 1024; | ||
| 96 |         $perPage = (int) $f3->get('REQUEST.per_page'); | ||
| 97 |         if ($perPage < $minPerPage) { | ||
| 98 | $perPage = $minPerPage; | ||
| 99 | } | ||
| 100 |         if ($perPage > $maxPerPage) { | ||
| 101 | $perPage = $maxPerPage; | ||
| 102 | } | ||
| 103 | |||
| 104 |         $page = $f3->get('REQUEST.page'); | ||
| 105 |         if ($page < 1) { | ||
| 106 | $page = 1; | ||
| 107 | } | ||
| 108 | |||
| 109 | // fetch data (paging is 0 based) | ||
| 110 | $allFields = $m->fields(); | ||
| 111 | |||
| 112 | // validate order field | ||
| 113 |         $order = self::checkOrderField($f3->get('REQUEST.order'), $allFields); | ||
| 114 | |||
| 115 | // validated fields to return | ||
| 116 |         $validFields = self::checkFieldsExist([$f3->get('REQUEST.fields')], $allFields); | ||
| 117 |         $fields = empty($validFields['fields']) ? join(',', $allFields) : $validFields['fields']; | ||
| 118 | |||
| 119 | // count rows | ||
| 120 | $data = []; | ||
| 121 | |||
| 122 | // count rows | ||
| 123 |         $isAdmin = $f3->get('isAdmin'); | ||
| 124 | $rows = 0; | ||
| 125 |         if  (in_array('users_uuid', $allFields) && !empty($users_uuid)) { | ||
| 126 | $rows = $m->count(['users_uuid = ?', $users_uuid]); | ||
| 127 |         } elseif ($isAdmin && empty($users_uuid)) { | ||
| 128 | $rows = $m->count(); | ||
| 129 | } | ||
| 130 |         if ($rows < 1) { | ||
| 131 | return $data; | ||
| 132 | } | ||
| 133 | |||
| 134 | // if fewer results than per page, set per_page | ||
| 135 |         if ($page == 1 && $perPage > $rows) { | ||
| 136 | $perPage = $rows; | ||
| 137 | } | ||
| 138 | |||
| 139 | $pagination = []; | ||
| 140 | $pagination['count'] = ceil($rows / $perPage); | ||
| 141 | |||
| 142 | // too high page number? | ||
| 143 |         if ($page > $pagination['count']) { | ||
| 144 | $page = $pagination['count']; | ||
| 145 | } | ||
| 146 | |||
| 147 | // set up page URLs | ||
| 148 |         $url = $f3->get('PATH'); | ||
| 149 | $urlParams = [ | ||
| 150 | 'per_page' => $perPage, | ||
| 151 | ]; | ||
| 152 |         if (!empty($order)) { | ||
| 153 | $urlParams['order'] = $order; | ||
| 154 | } | ||
| 155 |         if (!empty($fields)) { | ||
| 156 | $urlParams['fields'] = $fields; | ||
| 157 | } | ||
| 158 | ksort($urlParams); | ||
| 159 | |||
| 160 | // next/previous page url | ||
| 161 | $prevPage = (1 > $page - 1 ) ? null : $page - 1; | ||
| 162 | $nextPage = (1 + $page > $pagination['count']) ? null : $page + 1; | ||
| 163 | |||
| 164 | $resultsFrom = round($page * ($rows / $pagination['count'])) - $perPage + 1; | ||
| 165 | $resultsTo = $resultsFrom + $perPage - 1; | ||
| 166 | |||
| 167 | // return data | ||
| 168 | $data['pagination'] = [ | ||
| 169 | 'url_base' => $this->url($url, $urlParams), | ||
| 170 | 'url_current' => $this->url($url, $urlParams + ['page' => $page]), | ||
| 171 | 'url_first' => $this->url($url, $urlParams + ['page' => 1]), | ||
| 172 | 'url_last' => $this->url($url, $urlParams + ['page' => $pagination['count']]), | ||
| 173 | 'url_next' => (null == $nextPage) ? null : $this->url($url, $urlParams + ['page' => $nextPage]), | ||
| 174 | 'url_previous' => (null == $prevPage) ? null : $this->url($url, $urlParams + ['page' => $prevPage]), | ||
| 175 | 'results' => $rows, | ||
| 176 | 'results_from' => $resultsFrom, | ||
| 177 | 'results_to' => $resultsTo, | ||
| 178 | 'per_page' => $perPage, | ||
| 179 | 'pages' => $pagination['count'], | ||
| 180 | 'page' => $page, | ||
| 181 | 'object' => $m->table(), | ||
| 182 |             'fields' => preg_split("/[,]/", $fields), | ||
| 183 |             'view' => $f3->get('REQUEST.view') | ||
| 184 | ]; | ||
| 185 | |||
| 186 | |||
| 187 | // fetch results | ||
| 188 |         if ($isAdmin && empty($users_uuid)) { | ||
| 189 | $m->load(null, [ | ||
| 190 | 'order' => $order, | ||
| 191 | 'offset' => (1 == $page) ? 0 : ($page - 1) * $perPage, | ||
| 192 | 'limit' => $perPage | ||
| 193 | ]); | ||
| 194 |         } else { | ||
| 195 | $m->load(['users_uuid = ?', $users_uuid], [ | ||
| 196 | 'order' => $order, | ||
| 197 | 'offset' => (1 == $page) ? 0 : ($page - 1) * $perPage, | ||
| 198 | 'limit' => $perPage | ||
| 199 | ]); | ||
| 200 | } | ||
| 201 | |||
| 202 |         $adminView = $isAdmin || ($isAdmin && 'admin' == $f3->get('REQUEST.view')); | ||
| 203 |         do { | ||
| 204 | $data['objects'][] = $adminView ? $m->castFields($fields) : $m->exportArray($fields); | ||
| 205 | } | ||
| 206 | while ($m->skip()); | ||
| 207 | |||
| 208 | return $data; | ||
| 209 | } | ||
| 210 | |||
| 367 |