cache = $phpbb_container->get('cache.driver'); $this->config = $phpbb_container->get('config'); $this->config_text = $phpbb_container->get('config_text'); $this->request = $phpbb_container->get('request'); $this->template = $phpbb_container->get('template'); $this->user = $phpbb_container->get('user'); $this->root_path = $phpbb_root_path; $this->user->add_lang_ext('planetstyles/flightdeck', 'acp_style_settings'); $this->tpl_name = 'acp_style_settings_body'; $this->page_title = $this->user->lang('ACP_STYLE_SETTINGS_TITLE'); add_form_key('planetstyles/flightdeck'); try { $style_settings = $this->load_json_data(); } catch (\phpbb\exception\runtime_exception $e) { $style_settings = array(); } if ($this->request->is_set_post('submit')) { if (!check_form_key('planetstyles/flightdeck')) { trigger_error('FORM_INVALID'); } $this->config->set('style_settings_logo_path', $this->request->variable('style_settings_logo_path', '')); $this->config->set('style_settings_logo_width', $this->request->variable('style_settings_logo_width', 0)); $this->config->set('style_settings_logo_height', $this->request->variable('style_settings_logo_height', 0)); // Start PS-Test $this->config->set('style_settings_header_path', $this->request->variable('style_settings_header_path', '')); $this->config->set('style_settings_favicon_path', $this->request->variable('style_settings_favicon_path', '')); // End PS-Test foreach ($style_settings as $style_setting) { $this->config->set('style_settings_config_' . $style_setting['name'], $this->request->variable($style_setting['name'], '')); } $this->cache->destroy('_style_settings_html_data'); $this->config_text->set_array(array( 'style_settings_html_1' => $this->request->variable('style_settings_html_1', '', 'true'), 'style_settings_html_2' => $this->request->variable('style_settings_html_2', '', 'true'), 'style_settings_html_3' => $this->request->variable('style_settings_html_3', '', 'true'), 'style_settings_html_4' => $this->request->variable('style_settings_html_4', '', 'true'), )); $file = $this->request->file('style_settings_logo_upload'); if ($file['error'] == UPLOAD_ERR_OK) { $destination = 'ext/planetstyles/flightdeck/store/'; if (!$this->upload($file, $this->root_path . $destination)) { trigger_error($this->user->lang('STYLE_SETTINGS_LOGO_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } $this->config->set('style_settings_logo_path', $destination . $file['name']); } else if ($file['error'] != UPLOAD_ERR_NO_FILE) { trigger_error($this->user->lang('STYLE_SETTINGS_LOGO_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } // Start PS-Test $file = $this->request->file('style_settings_header_upload'); if ($file['error'] == UPLOAD_ERR_OK) { $destination = 'ext/planetstyles/flightdeck/store/'; if (!$this->upload($file, $this->root_path . $destination)) { trigger_error($this->user->lang('STYLE_SETTINGS_HEADER_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } $this->config->set('style_settings_header_path', $destination . $file['name']); } else if ($file['error'] != UPLOAD_ERR_NO_FILE) { trigger_error($this->user->lang('STYLE_SETTINGS_HEADER_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } // Favicon $file = $this->request->file('style_settings_favicon_upload'); if ($file['error'] == UPLOAD_ERR_OK) { $destination = 'ext/planetstyles/flightdeck/store/'; if (!$this->upload($file, $this->root_path . $destination)) { trigger_error($this->user->lang('STYLE_SETTINGS_FAVICON_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } $this->config->set('style_settings_favicon_path', $destination . $file['name']); } else if ($file['error'] != UPLOAD_ERR_NO_FILE) { trigger_error($this->user->lang('STYLE_SETTINGS_HEADER_ERROR', $file['name']) . adm_back_link($this->u_action), E_USER_WARNING); } // End PS-Test trigger_error($this->user->lang('STYLE_SETTINGS_SAVED') . adm_back_link($this->u_action)); } foreach ($style_settings as $name => $data) { $config_name = 'style_settings_config_' . $data['name']; $this->template->assign_block_vars('style_settings_config', array( 'VALUE' => $this->config->offsetExists($config_name) ? $this->config->offsetGet($config_name) : 0, 'OPTIONS' => isset($data['values']) ? $data['values'] : null, 'LABEL' => $name, 'LABEL_EXPLAIN' => $this->user->lang('STYLE_SETTINGS_CONFIG_EXPLAIN', strtoupper($config_name)), 'CONFIG_NAME' => $data['name'], 'LABEL_HELP' => $data['help'], 'S_BOOL' => $data['type'] === 'bool', 'S_LIST' => $data['type'] === 'list', 'S_STRING' => $data['type'] === 'string', )); } $html_code_block_data = $this->config_text->get_array(array( 'style_settings_html_1', 'style_settings_html_2', 'style_settings_html_3', 'style_settings_html_4', )); ksort($html_code_block_data); $index = 0; foreach ($html_code_block_data as $key => $data) { $this->template->assign_block_vars('style_settings_html', array( 'VALUE' => $data, 'NAME' => 'style_settings_html_' . ++$index, 'LABEL' => $this->user->lang('STYLE_SETTINGS_HTML_' . $index), 'LABEL_HELP' => $this->user->lang('STYLE_SETTINGS_HTML_HELP_' . $index), 'LABEL_EXPLAIN' => $this->user->lang('STYLE_SETTINGS_HTML_EXPLAIN', $index), )); } $this->template->assign_vars(array( 'STYLE_SETTINGS_LOGO_PATH' => $this->config->offsetGet('style_settings_logo_path'), 'STYLE_SETTINGS_LOGO_WIDTH' => $this->config->offsetGet('style_settings_logo_width'), 'STYLE_SETTINGS_LOGO_HEIGHT' => $this->config->offsetGet('style_settings_logo_height'), // Start PS-Test 'STYLE_SETTINGS_HEADER_PATH' => $this->config->offsetGet('style_settings_header_path'), 'STYLE_SETTINGS_FAVICON_PATH' => $this->config->offsetGet('style_settings_favicon_path'), // End PS-Test 'U_ACTION' => $this->u_action, )); } /** * Return decoded JSON data from a JSON file * * @return array JSON data * @throws \phpbb\exception\runtime_exception * @access protected */ protected function load_json_data() { $json_file = $this->root_path . 'ext/planetstyles/flightdeck/styles/style_config.json'; if (!file_exists($json_file)) { throw new \phpbb\exception\runtime_exception('FILE_NOT_FOUND', array($json_file)); } if (!($file_contents = file_get_contents($json_file))) { throw new \phpbb\exception\runtime_exception('FILE_CONTENT_ERR', array($json_file)); } if (($json_data = json_decode($file_contents, true)) === null) { throw new \phpbb\exception\runtime_exception('FILE_JSON_DECODE_ERR', array($json_file)); } return $json_data; } /** * Upload the file to the given directory * * @param array $fp File pointer data * @param string $location Path to directory where to upload * * @return bool True if upload was successful, false otherwise * @access protected */ protected function upload($fp, $location) { if ($this->allowedExtension($fp['name']) && $this->allowedSize($fp['size'])) { $destination = $location . basename($fp['name']); if (move_uploaded_file($fp['tmp_name'], $destination)) { return true; } } return false; } /** * Check if file is allowed by its extension * * @param string $filename File name * * @return bool True if file ext is allowed, false otherwise * @access protected */ protected function allowedExtension($filename) { return in_array($this->getExtension($filename), array('gif', 'jpeg', 'jpg', 'png', 'svg'), true); } /** * Check file size in Mb, against php.ini upload_max_filesize setting * * @param string $filesize File size * * @return bool True if file size is allowed, false otherwise * @access protected */ protected function allowedSize($filesize) { return ($filesize < ((int) ini_get('upload_max_filesize')) * 1000000); } /** * Get file extension * * @param string $filename Name of file * * @return string File's extension or nothing if not found * @access protected */ protected function getExtension($filename) { if (strpos($filename, '.') === false) { return ''; } $parts = explode('.', $filename); return strtolower(array_pop($parts)); } }