| Total Complexity | 26 |
| Total Lines | 300 |
| Duplicated Lines | 0 % |
| Coverage | 0% |
| Changes | 0 | ||
| 1 | <?php |
||
| 12 | class recent extends \blitze\sitemaker\services\blocks\driver\block |
||
|
|
|||
| 13 | { |
||
| 14 | /** @var \phpbb\config\db */ |
||
| 15 | protected $config; |
||
| 16 | |||
| 17 | /** @var\phpbb\language\language */ |
||
| 18 | protected $language; |
||
| 19 | |||
| 20 | /** @var \blitze\content\services\types */ |
||
| 21 | protected $content_types; |
||
| 22 | |||
| 23 | /* @var \blitze\content\services\fields */ |
||
| 24 | protected $fields; |
||
| 25 | |||
| 26 | /** @var \blitze\sitemaker\services\date_range */ |
||
| 27 | protected $date_range; |
||
| 28 | |||
| 29 | /** @var \blitze\sitemaker\services\forum\data */ |
||
| 30 | protected $forum; |
||
| 31 | |||
| 32 | /** @var string */ |
||
| 33 | protected $tpl_name = 'recent_content'; |
||
| 34 | |||
| 35 | /** @var array */ |
||
| 36 | protected $settings; |
||
| 37 | |||
| 38 | /** @var array */ |
||
| 39 | protected $sort_options = array(); |
||
| 40 | |||
| 41 | /** @var */ |
||
| 42 | const SORT_TOPIC_TIME = 0; |
||
| 43 | |||
| 44 | /** @var */ |
||
| 45 | const SORT_TOPIC_VIEWS = 1; |
||
| 46 | |||
| 47 | /** @var */ |
||
| 48 | const SORT_TOPIC_READ = 2; |
||
| 49 | |||
| 50 | /** |
||
| 51 | * Constructor |
||
| 52 | * |
||
| 53 | * @param \phpbb\config\db $config Config object |
||
| 54 | * @param \phpbb\language\language $language Language Object |
||
| 55 | * @param \blitze\content\services\types $content_types Content types object |
||
| 56 | * @param \blitze\content\services\fields $fields Content fields object |
||
| 57 | * @param \blitze\sitemaker\services\date_range $date_range Date Range Object |
||
| 58 | * @param \blitze\sitemaker\services\forum\data $forum Forum Data object |
||
| 59 | */ |
||
| 60 | public function __construct(\phpbb\config\db $config, \phpbb\language\language $language, \blitze\content\services\types $content_types, \blitze\content\services\fields $fields, \blitze\sitemaker\services\date_range $date_range, \blitze\sitemaker\services\forum\data $forum) |
||
| 61 | { |
||
| 62 | $this->config = $config; |
||
| 63 | $this->language = $language; |
||
| 64 | $this->content_types = $content_types; |
||
| 65 | $this->fields = $fields; |
||
| 66 | $this->date_range = $date_range; |
||
| 67 | $this->forum = $forum; |
||
| 68 | |||
| 69 | $this->sort_options = array( |
||
| 70 | self::SORT_TOPIC_TIME => 'TOPIC_TIME', |
||
| 71 | self::SORT_TOPIC_VIEWS => 'TOPIC_VIEWS', |
||
| 72 | self::SORT_TOPIC_READ => 'LAST_READ_TIME', |
||
| 73 | ); |
||
| 74 | } |
||
| 75 | |||
| 76 | /** |
||
| 77 | * {@inheritdoc} |
||
| 78 | */ |
||
| 79 | public function get_config(array $settings) |
||
| 80 | { |
||
| 81 | $content_type_options = $field_options = array(); |
||
| 82 | $default_type = $this->get_content_type_options($content_type_options, $field_options); |
||
| 83 | |||
| 84 | return array( |
||
| 85 | 'legend1' => 'DISPLAY', |
||
| 86 | 'content_type' => array('lang' => 'CONTENT_TYPE', 'validate' => 'string', 'type' => 'select:1:toggable', 'object' => $this, 'method' => 'select_content_type', 'options' => $content_type_options, 'default' => $default_type, 'explain' => false), |
||
| 87 | 'fields' => array('lang' => 'SELECT_FIELDS', 'validate' => 'string', 'type' => 'checkbox', 'options' => $field_options, 'default' => array(), 'explain' => true), |
||
| 88 | 'block_tpl' => array('lang' => 'TEMPLATE', 'validate' => 'string', 'type' => 'textarea:5:50', 'maxlength' => 255, 'explain' => false, 'default' => ''), |
||
| 89 | 'layout' => array('lang' => 'DISPLAY_LAYOUT', 'validate' => 'string', 'type' => 'select', 'options' => $this->get_display_layouts(), 'default' => 'layout0', 'explain' => false), |
||
| 90 | |||
| 91 | 'legend2' => 'SETTINGS', |
||
| 92 | 'topic_type' => array('lang' => 'TOPIC_TYPE', 'validate' => 'string', 'type' => 'select', 'options' => $this->get_topic_type_options(), 'default' => POST_NORMAL, 'explain' => false), |
||
|
1 ignored issue
–
show
|
|||
| 93 | 'max_topics' => array('lang' => 'MAX_TOPICS', 'validate' => 'int:0:20', 'type' => 'number:0:20', 'maxlength' => 2, 'explain' => false, 'default' => 5), |
||
| 94 | 'offset_start' => array('lang' => 'OFFSET_START', 'validate' => 'int:0:20', 'type' => 'number:0:20', 'maxlength' => 2, 'explain' => false, 'default' => 0), |
||
| 95 | 'topic_title_limit' => array('lang' => 'TOPIC_TITLE_LIMIT', 'validate' => 'int:0:255', 'type' => 'number:0:255', 'maxlength' => 3, 'explain' => false, 'default' => 25), |
||
| 96 | 'max_chars' => array('lang' => 'FIELD_MAX_CHARS', 'validate' => 'int:0:255', 'type' => 'number:0:255', 'maxlength' => 3, 'explain' => false, 'default' => 125), |
||
| 97 | 'date_range' => array('lang' => 'LIMIT_POST_TIME', 'validate' => 'string', 'type' => 'select', 'options' => $this->get_range_options(), 'default' => '', 'explain' => false), |
||
| 98 | 'sort_key' => array('lang' => 'SORT_BY', 'validate' => 'string', 'type' => 'select', 'options' => $this->sort_options, 'default' => self::SORT_TOPIC_TIME, 'explain' => false), |
||
| 99 | 'enable_tracking' => array('lang' => 'ENABLE_TOPIC_TRACKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false, 'default' => 1), |
||
| 100 | 'last_modified' => array('type' => 'hidden', 'default' => time()), |
||
| 101 | ); |
||
| 102 | } |
||
| 103 | |||
| 104 | /** |
||
| 105 | * {@inheritdoc} |
||
| 106 | */ |
||
| 107 | public function display(array $bdata, $edit_mode = false) |
||
| 108 | { |
||
| 109 | $this->settings = $bdata['settings']; |
||
| 110 | $type = $this->settings['content_type']; |
||
| 111 | |||
| 112 | if (empty($this->settings['content_type']) || false === $entity = $this->content_types->get_type($type, false)) |
||
| 113 | { |
||
| 114 | return array( |
||
| 115 | 'title' => '', |
||
| 116 | 'content' => ($edit_mode) ? $this->language->lang('NO_CONTENT_TYPE') : '', |
||
| 117 | ); |
||
| 118 | } |
||
| 119 | |||
| 120 | $forum_id = $entity->get_forum_id(); |
||
| 121 | $this->build_query($forum_id); |
||
| 122 | $this->forum->build(true, true, false); |
||
| 123 | $this->ptemplate->assign_vars(array( |
||
| 124 | 'LAYOUT' => $this->settings['layout'], |
||
| 125 | 'FIELD_TYPES' => $entity->get_field_types(), |
||
| 126 | )); |
||
| 127 | |||
| 128 | return $this->show_topics($edit_mode, $bdata['bid'], $forum_id, $type, $entity); |
||
| 129 | } |
||
| 130 | |||
| 131 | /** |
||
| 132 | * @param int $forum_id |
||
| 133 | * @return void |
||
| 134 | */ |
||
| 135 | protected function build_query($forum_id) |
||
| 136 | { |
||
| 137 | $sort_keys = array( |
||
| 138 | self::SORT_TOPIC_TIME => 't.topic_time', |
||
| 139 | self::SORT_TOPIC_VIEWS => 't.topic_views', |
||
| 140 | self::SORT_TOPIC_READ => 't.topic_last_view_time' |
||
| 141 | ); |
||
| 142 | |||
| 143 | $range_info = $this->date_range->get($this->settings['date_range']); |
||
| 144 | |||
| 145 | $this->forum->query($this->settings['enable_tracking']) |
||
| 146 | ->fetch_forum($forum_id) |
||
| 147 | ->fetch_topic_type(array($this->settings['topic_type'])) |
||
| 148 | ->fetch_date_range($range_info['start'], $range_info['stop']) |
||
| 149 | ->set_sorting($sort_keys[$this->settings['sort_key']]); |
||
| 150 | } |
||
| 151 | |||
| 152 | /** |
||
| 153 | * @param bool $edit_mode |
||
| 154 | * @param int $block_id |
||
| 155 | * @param int $forum_id |
||
| 156 | * @param string $type |
||
| 157 | * @param \blitze\content\model\entity\type $entity |
||
| 158 | * @return array |
||
| 159 | * @internal param int $block_id |
||
| 160 | */ |
||
| 161 | protected function show_topics($edit_mode, $block_id, $forum_id, $type, \blitze\content\model\entity\type $entity) |
||
| 190 | ); |
||
| 191 | } |
||
| 192 | |||
| 193 | /** |
||
| 194 | * @param string $content_langname |
||
| 195 | * @return string |
||
| 196 | */ |
||
| 197 | protected function get_block_title($content_langname) |
||
| 198 | { |
||
| 199 | $topic_types = array( |
||
| 200 | POST_GLOBAL => 'CONTENT_GLOBAL_ANNOUNCEMENTS', |
||
|
1 ignored issue
–
show
|
|||
| 201 | POST_ANNOUNCE => 'CONTENT_ANNOUNCEMENTS', |
||
|
1 ignored issue
–
show
|
|||
| 202 | POST_STICKY => 'CONTENT_STICKY_POSTS', |
||
|
1 ignored issue
–
show
|
|||
| 203 | ); |
||
| 204 | |||
| 205 | return $this->language->lang((isset($topic_types[$this->settings['topic_type']])) ? $topic_types[$this->settings['topic_type']] : 'CONTENT_' . $this->sort_options[$this->settings['sort_key']], $content_langname); |
||
| 206 | } |
||
| 207 | |||
| 208 | /** |
||
| 209 | * @param array $field_types |
||
| 210 | * @return array |
||
| 211 | */ |
||
| 212 | protected function get_block_fields(array $field_types) |
||
| 213 | { |
||
| 214 | $block_fields = (!empty($this->settings['fields'])) ? $this->settings['fields'] : array(); |
||
| 215 | return array_intersect_key($field_types, array_flip($block_fields)); |
||
| 216 | } |
||
| 217 | |||
| 218 | /** |
||
| 219 | * @param array $fields |
||
| 220 | * @param array $fields_data |
||
| 221 | * @return array |
||
| 222 | */ |
||
| 223 | protected function get_block_fields_data(array $fields, array $fields_data) |
||
| 224 | { |
||
| 225 | $textarea_fields = array_keys($fields, 'textarea'); |
||
| 226 | |||
| 227 | foreach ($textarea_fields as $field) |
||
| 228 | { |
||
| 229 | $fields_data[$field]['field_props']['max_chars'] = $this->settings['max_chars']; |
||
| 230 | } |
||
| 231 | |||
| 232 | return $fields_data; |
||
| 233 | } |
||
| 234 | |||
| 235 | /** |
||
| 236 | * @param array $type_options |
||
| 237 | * @param array $field_options |
||
| 238 | * @return array |
||
| 239 | */ |
||
| 240 | protected function get_content_type_options(array &$type_options, array &$field_options) |
||
| 241 | { |
||
| 242 | $content_types = $this->content_types->get_all_types(); |
||
| 243 | |||
| 244 | $type_options = $field_options = array(); |
||
| 245 | foreach ($content_types as $type => $entity) |
||
| 246 | { |
||
| 247 | /** @var \blitze\content\model\entity\type $entity */ |
||
| 248 | $type_options[$type] = $entity->get_content_langname(); |
||
| 249 | |||
| 250 | $content_fields = $entity->get_content_fields(); |
||
| 251 | foreach ($content_fields as $field => $fdata) |
||
| 252 | { |
||
| 253 | $field_options[$type][$field] = $fdata['field_label']; |
||
| 254 | } |
||
| 255 | } |
||
| 256 | reset($content_types); |
||
| 257 | |||
| 258 | return key($content_types); |
||
| 259 | } |
||
| 260 | |||
| 261 | /** |
||
| 262 | * @param array $content_types |
||
| 263 | * @param string $type |
||
| 264 | * @return string |
||
| 265 | */ |
||
| 266 | public function select_content_type(array $content_types, $type) |
||
| 267 | { |
||
| 268 | $html = ''; |
||
| 269 | foreach ($content_types as $value => $title) |
||
| 270 | { |
||
| 271 | $selected = ($type == $value) ? ' selected="selected"' : ''; |
||
| 272 | $html .= '<option value="' . $value . '"' . $selected . ' data-toggle-setting="#fields-col-' . $value . '">' . $title . '</option>'; |
||
| 273 | } |
||
| 274 | |||
| 275 | return $html; |
||
| 276 | } |
||
| 277 | |||
| 278 | /** |
||
| 279 | * @return array |
||
| 280 | */ |
||
| 281 | protected function get_topic_type_options() |
||
| 288 | ); |
||
| 289 | } |
||
| 290 | |||
| 291 | /** |
||
| 292 | * @return array |
||
| 293 | */ |
||
| 294 | protected function get_range_options() |
||
| 302 | ); |
||
| 303 | } |
||
| 304 | |||
| 305 | /** |
||
| 306 | * @return array |
||
| 307 | */ |
||
| 308 | protected function get_display_layouts() |
||
| 312 | } |
||
| 313 | } |
||
| 314 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths