diff --git a/README.md b/README.md index b0575091..0e14144f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,146 @@ -#Board3 Portal 2.0.0 +#Board3 Portal 2.1.0 -Board Portal 2.0.0 is a second generation portal for phpBB 3.0.x. It adds a portal with several blocks to your forum. +Board Portal 2.1.0 is a second generation portal for phpBB 3.1.x. It adds a portal with several blocks to your forum. You can change the settings, move the blocks, add new blocks and more in the ACP. ##How to use -You can download the current development version of Board3 Portal 2.0.0 here or download the current release at [www.board3.de](http://www.board3.de/ "Board3 • Portal"). -Board3 Portal can be installed via AutoMOD or manually by following the instructions in install.xml (open it with your browser). +You can download the current development version of Board3 Portal 2.1.x here or download the current release at [www.board3.de](http://www.board3.de/ "Board3 • Portal"). +Board3 Portal 2.1.x can currently not be installed. + +Once the portal has been merged into the new extension system, you can manually install it by executing the following SQL queries (tested on MySQL): +```sql +CREATE TABLE IF NOT EXISTS `phpbb_portal_config` ( + `config_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `config_value` mediumtext COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`config_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `phpbb_portal_config` (`config_name`, `config_value`) VALUES +('board3_calendar_events_18', ''), +('board3_links_array_21', 0x613a323a7b693a303b613a343a7b733a353a227469746c65223b733a393a22426f617264332e6465223b733a333a2275726c223b733a32313a22687474703a2f2f7777772e626f617264332e64652f223b733a343a2274797065223b693a323b733a31303a227065726d697373696f6e223b733a303a22223b7d693a313b613a343a7b733a353a227469746c65223b733a393a2270687042422e636f6d223b733a333a2275726c223b733a32313a22687474703a2f2f7777772e70687062622e636f6d2f223b733a343a2274797065223b693a323b733a31303a227065726d697373696f6e223b733a303a22223b7d7d), +('board3_menu_array_1', 0x613a31313a7b693a303b613a343a7b733a353a227469746c65223b733a393a224d5f434f4e54454e54223b733a333a2275726c223b733a303a22223b733a343a2274797065223b693a303b733a31303a227065726d697373696f6e223b733a303a22223b7d693a313b613a343a7b733a353a227469746c65223b733a353a22494e444558223b733a333a2275726c223b733a393a22696e6465782e706870223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d693a323b613a343a7b733a353a227469746c65223b733a363a22534541524348223b733a333a2275726c223b733a31303a227365617263682e706870223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d693a333b613a343a7b733a353a227469746c65223b733a383a225245474953544552223b733a333a2275726c223b733a32313a227563702e7068703f6d6f64653d7265676973746572223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a313a2231223b7d693a343b613a343a7b733a353a227469746c65223b733a31303a224d454d4245524c495354223b733a333a2275726c223b733a31343a226d656d6265726c6973742e706870223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a333a22322c33223b7d693a353b613a343a7b733a353a227469746c65223b733a383a225448455f5445414d223b733a333a2275726c223b733a32373a226d656d6265726c6973742e7068703f6d6f64653d6c656164657273223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a333a22322c33223b7d693a363b613a343a7b733a353a227469746c65223b733a363a224d5f48454c50223b733a333a2275726c223b733a303a22223b733a343a2274797065223b693a303b733a31303a227065726d697373696f6e223b733a303a22223b7d693a373b613a343a7b733a353a227469746c65223b733a333a22464151223b733a333a2275726c223b733a373a226661712e706870223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d693a383b613a343a7b733a353a227469746c65223b733a383a224d5f4242434f4445223b733a333a2275726c223b733a31393a226661712e7068703f6d6f64653d6262636f6465223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d693a393b613a343a7b733a353a227469746c65223b733a373a224d5f5445524d53223b733a333a2275726c223b733a31383a227563702e7068703f6d6f64653d7465726d73223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d693a31303b613a343a7b733a353a227469746c65223b733a353a224d5f505256223b733a333a2275726c223b733a32303a227563702e7068703f6d6f64653d70726976616379223b733a343a2274797065223b693a313b733a31303a227065726d697373696f6e223b733a303a22223b7d7d), +('board3_welcome_message_10', 0x57656c636f6d6520746f206d7920436f6d6d756e69747921); + +CREATE TABLE IF NOT EXISTS `phpbb_portal_modules` ( + `module_id` int(3) unsigned NOT NULL AUTO_INCREMENT, + `module_classname` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '', + `module_column` tinyint(3) NOT NULL DEFAULT '0', + `module_order` tinyint(3) NOT NULL DEFAULT '0', + `module_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `module_image_src` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `module_image_width` int(3) NOT NULL DEFAULT '0', + `module_image_height` int(3) NOT NULL DEFAULT '0', + `module_group_ids` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `module_status` tinyint(1) NOT NULL DEFAULT '1', + PRIMARY KEY (`module_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=22 ; + +INSERT INTO `phpbb_portal_modules` (`module_id`, `module_classname`, `module_column`, `module_order`, `module_name`, `module_image_src`, `module_image_width`, `module_image_height`, `module_group_ids`, `module_status`) VALUES +(1, 'main_menu', 1, 1, 'M_MENU', 'portal_menu.png', 16, 16, '', 1), +(2, 'stylechanger', 1, 2, 'BOARD_STYLE', 'portal_style.png', 16, 16, '', 1), +(3, 'birthday_list', 1, 3, 'BIRTHDAYS', 'portal_birthday.png', 16, 16, '', 1), +(4, 'clock', 1, 5, 'CLOCK', 'portal_clock.png', 16, 16, '', 1), +(5, 'search', 1, 4, 'PORTAL_SEARCH', 'portal_search.png', 16, 16, '', 1), +(6, 'attachments', 1, 7, 'PORTAL_ATTACHMENTS', 'portal_attach.png', 16, 16, '', 1), +(7, 'topposters', 1, 8, 'TOPPOSTERS', 'portal_top_poster.png', 16, 16, '', 1), +(8, 'latest_members', 1, 9, 'LATEST_MEMBERS', 'portal_members.png', 16, 16, '', 1), +(10, 'welcome', 2, 1, 'PORTAL_WELCOME', '', 16, 16, '', 1), +(11, 'recent', 2, 2, 'PORTAL_RECENT', '', 16, 16, '', 1), +(12, 'announcements', 2, 3, 'GLOBAL_ANNOUNCEMENTS', '', 16, 16, '', 1), +(13, 'news', 2, 4, 'LATEST_NEWS', '', 0, 0, '', 1), +(14, 'poll', 2, 5, 'PORTAL_POLL', 'portal_poll.png', 16, 16, '', 1), +(15, 'whois_online', 2, 6, 'PORTAL_WHOIS_ONLINE', 'portal_friends.png', 16, 16, '', 1), +(16, 'user_menu', 3, 1, 'USER_MENU', 'portal_user.png', 16, 16, '', 1), +(17, 'statistics', 3, 2, 'STATISTICS', 'portal_statistics.png', 16, 16, '', 1), +(18, 'calendar', 3, 3, 'PORTAL_CALENDAR', 'portal_calendar.png', 16, 16, '', 1), +(19, 'leaders', 3, 4, 'THE_TEAM', 'portal_team.png', 16, 16, '', 1), +(20, 'latest_bots', 3, 5, 'LATEST_BOTS', 'portal_bots.png', 16, 16, '', 1), +(21, 'links', 3, 6, 'PORTAL_LINKS', 'portal_links.png', 16, 16, '', 1); +``` +and: +```sql +CREATE TABLE IF NOT EXISTS `phpbb_config` ( + `config_name` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `config_value` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '', + `is_dynamic` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`config_name`), + KEY `is_dynamic` (`is_dynamic`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES +('board3_announcements_archive_12', '1', 0), +('board3_announcements_day_12', '0', 0), +('board3_announcements_forum_exclude_12', '0', 0), +('board3_announcements_length_12', '200', 0), +('board3_announcements_permissions_12', '1', 0), +('board3_announcements_style_12', '0', 0), +('board3_attach_max_length_6', '15', 0), +('board3_attachments_exclude_6', '0', 0), +('board3_attachments_filetype_6', '', 0), +('board3_attachments_forum_exclude_6', '0', 0), +('board3_attachments_forum_ids_6', '', 0), +('board3_attachments_number_6', '8', 0), +('board3_birthdays_ahead_3', '30', 0), +('board3_calendar_sunday_color_18', '#FF0000', 0), +('board3_calendar_today_color_18', '#000000', 0), +('board3_clock_src_4', 'board3clock.swf', 0), +('board3_display_events_18', '0', 0), +('board3_display_jumpbox', '1', 0), +('board3_enable', '1', 0), +('board3_events_18', '', 0), +('board3_events_url_new_window_18', '0', 0), +('board3_forum_index', '1', 0), +('board3_global_announcements_forum_12', '', 0), +('board3_last_visited_bots_number_20', '1', 0), +('board3_leaders_ext_19', '0', 0), +('board3_left_column', '1', 0), +('board3_left_column_width', '180', 0), +('board3_links_21', '', 0), +('board3_links_url_new_window_21', '0', 0), +('board3_long_month_18', '0', 0), +('board3_max_last_member_8', '8', 0), +('board3_max_topics_11', '10', 0), +('board3_menu_1', '', 0), +('board3_menu_url_new_window_1', '0', 0), +('board3_news_archive_13', '1', 0), +('board3_news_exclude_13', '0', 0), +('board3_news_forum_13', '', 0), +('board3_news_length_13', '250', 0), +('board3_news_permissions_13', '1', 0), +('board3_news_show_last_13', '0', 0), +('board3_news_style_13', '0', 0), +('board3_number_of_announcements_12', '1', 0), +('board3_number_of_news_13', '5', 0), +('board3_phpbb_menu', '0', 0), +('board3_poll_allow_vote_14', '1', 0), +('board3_poll_exclude_id_14', '0', 0), +('board3_poll_hide_14', '0', 0), +('board3_poll_limit_14', '3', 0), +('board3_poll_topic_id_14', '', 0), +('board3_portal_version', '2.0.1', 0), +('board3_recent_exclude_forums_11', '1', 0), +('board3_recent_forum_11', '', 0), +('board3_recent_title_limit_11', '100', 0), +('board3_right_column', '1', 0), +('board3_right_column_width', '180', 0), +('board3_show_all_news_13', '1', 0), +('board3_show_announcements_replies_views_12', '1', 0), +('board3_show_news_replies_views_13', '1', 0), +('board3_sunday_first_18', '1', 0), +('board3_topposters_7', '5', 0), +('board3_user_menu_register_16', '1', 0), +('board3_version_check', '1', 0), +('board3_welcome_message_10', '', 0), +('board3_welcome_message_bitfield_10', '', 0), +('board3_welcome_message_uid_10', '', 0); +``` +and finally: +```sql +INSERT INTO `phpbb_acl_options` (`auth_option`, `is_global`, `is_local`, `founder_only`) VALUES +('u_view_portal', 1, 0, 0), +('a_manage_portal', 1, 0, 0); +``` ##Support diff --git a/root/config/routing.yml b/root/config/routing.yml new file mode 100644 index 00000000..fcca93e6 --- /dev/null +++ b/root/config/routing.yml @@ -0,0 +1,8 @@ +board3_controller: + pattern: /portal + defaults: { _controller: board3.portal.main:handle } + +# This is currently not supported yet +board3_pages_controller: + pattern: /portal/{page} + defaults: { _controller: board3.portal.main:handle_page, page: "portal" } \ No newline at end of file diff --git a/root/config/services.yml b/root/config/services.yml new file mode 100644 index 00000000..e1cd809a --- /dev/null +++ b/root/config/services.yml @@ -0,0 +1,11 @@ +services: + + board3.portal.main: + class: phpbb_ext_board3_portal_controller_main + arguments: + - @auth + - @config + - @template + - @user + - %core.root_path% + - .%core.php_ext% diff --git a/root/controller.php b/root/controller.php deleted file mode 100644 index e383a908..00000000 --- a/root/controller.php +++ /dev/null @@ -1,182 +0,0 @@ -root_path = $phpbb_root_path . '/ext/board3/portal/portal/'; - - $this->check_permission(); - // We defined the phpBB objects in __construct() and can use them in the rest of our class like this - //echo 'Welcome, ' . $this->user->data['username']; - - // The following takes two arguments: - // 1) which extension language folder we're using (it's not smart enough to use its own automatically) - // 2) what language file to use - $this->user->add_lang_ext('board3/portal', 'mods/portal'); - - //$this->template->set_ext_dir_prefix($phpbb_root_path . 'ext/board3/portal/'); - - $this->display_modules(); - - // foobar_body.html is in ./ext/foobar/example/styles/prosilver/template/foobar_body.html - $this->template->set_filenames(array( - 'body' => 'portal/portal_body.html' - )); - - // And we assign template variables the same as before as well - $this->template->assign_var('MESSAGE', 'Yes, this is hard-coded language, which should still be avoided in virtually all cases.'); - - // And now to output the page. - page_header($this->user->lang('PORTAL')); - page_footer(); - } - - // check if user should be able to access this page - private function check_permission() - { - global $config, $auth, $phpbb_root_path, $phpEx; - - if (!isset($config['board3_enable']) || !$config['board3_enable'] || !$auth->acl_get('u_view_portal')) - { - redirect(append_sid($phpbb_root_path . 'index.' . $phpEx)); - } - } - - /** - * Display the portal modules - * - * @return: true if page can be display, false if there are no modules to display - */ - private function display_modules() - { - global $template, $phpbb_root_path; - - /** - * get initial data - */ - $portal_config = obtain_portal_config(); - $portal_modules = obtain_portal_modules(); - - /** - * set up column_count array - * with this we can hide unneeded parts of the portal - */ - $module_count = array( - 'total' => 0, - 'top' => 0, - 'left' => 0, - 'center' => 0, - 'right' => 0, - 'bottom' => 0, - ); - - /** - * start assigning block vars - */ - foreach ($portal_modules as $row) - { - if($row['module_status'] == B3_MODULE_DISABLED) - { - continue; - } - - $class_name = 'portal_' . $row['module_classname'] . '_module'; - if (!class_exists($class_name)) - { - include("{$this->root_path}modules/portal_{$row['module_classname']}.$phpEx"); - } - if (!class_exists($class_name)) - { - trigger_error(sprintf($user->lang['CLASS_NOT_FOUND'], $class_name, 'portal_' . $row['module_classname']), E_USER_ERROR); - } - - $module = new $class_name(); - - /** - * Check for permissions before loading anything - * the default group of a user always defines his/her permission (KISS) - */ - $group_ary = (!empty($row['module_group_ids'])) ? explode(',', $row['module_group_ids']) : ''; - if ((is_array($group_ary) && !in_array($user->data['group_id'], $group_ary))) - { - continue; - } - - if ($module->language) - { - $user->add_lang_ext('board3/portal', 'mods/portal/' . $module->language); - } - if ($row['module_column'] == column_string_num('left') && $config['board3_left_column']) - { - $template_module = $module->get_template_side($row['module_id']); - $template_column = 'left'; - ++$module_count['left']; - } - if ($row['module_column'] == column_string_num('center')) - { - $template_module = $module->get_template_center($row['module_id']); - $template_column = 'center'; - ++$module_count['center']; - } - if ($row['module_column'] == column_string_num('right') && $config['board3_right_column']) - { - $template_module = $module->get_template_side($row['module_id']); - $template_column = 'right'; - ++$module_count['right']; - } - if ($row['module_column'] == column_string_num('top')) - { - $template_module = $module->get_template_center($row['module_id']); - ++$module_count['top']; - } - if ($row['module_column'] == column_string_num('bottom')) - { - $template_module = $module->get_template_center($row['module_id']); - ++$module_count['bottom']; - } - if (!isset($template_module)) - { - continue; - } - - // Custom Blocks that have been defined in the ACP will return an array instead of just the name of the template file - if (is_array($template_module)) - { - $template->assign_block_vars('modules_' . column_num_string($row['module_column']), array( - 'TEMPLATE_FILE' => 'portal/modules/' . $template_module['template'], - 'IMAGE_SRC' => $this->root_path . 'styles/' . $user->theme['theme_path'] . '/theme/images/portal/' . $template_module['image_src'], - 'TITLE' => $template_module['title'], - 'CODE' => $template_module['code'], - 'MODULE_ID' => $row['module_id'], - 'IMAGE_WIDTH' => $row['module_image_width'], - 'IMAGE_HEIGHT' => $row['module_image_height'], - )); - } - else - { - $template->assign_block_vars('modules_' . column_num_string($row['module_column']), array( - 'TEMPLATE_FILE' => 'portal/modules/' . $template_module, - 'IMAGE_SRC' => $this->root_path . 'styles/' . $user->theme['theme_path'] . '/theme/images/portal/' . $row['module_image_src'], - 'IMAGE_WIDTH' => $row['module_image_width'], - 'IMAGE_HEIGHT' => $row['module_image_height'], - 'MODULE_ID' => $row['module_id'], - 'TITLE' => (isset($user->lang[$row['module_name']])) ? $user->lang[$row['module_name']] : utf8_normalize_nfc($row['module_name']), - )); - } - unset($template_module); - } - return sizeof($portal_modules); - } - -} diff --git a/root/controller/main.php b/root/controller/main.php new file mode 100644 index 00000000..5968328a --- /dev/null +++ b/root/controller/main.php @@ -0,0 +1,257 @@ +auth = $auth; + $this->config = $config; + $this->template = $template; + $this->user = $user; + $this->phpbb_root_path = $phpbb_root_path; + $this->php_ext = $php_ext; + $this->root_path = $phpbb_root_path . 'ext/board3/portal/portal/'; + $portal_root_path = $this->root_path; + + if (!function_exists('obtain_portal_config')) + { + include($this->root_path . 'includes/constants' . $this->php_ext); + include($this->root_path . 'includes/functions_modules' . $this->php_ext); + include($this->root_path . 'includes/functions' . $this->php_ext); + } + } + + /** + * Extension front handler method. This is called automatically when your extension is accessed + * through index.php?ext=example/foobar + * @return null + */ + public function handle() + { + $this->check_permission(); + // We defined the phpBB objects in __construct() and can use them in the rest of our class like this + //echo 'Welcome, ' . $this->user->data['username']; + + // The following takes two arguments: + // 1) which extension language folder we're using (it's not smart enough to use its own automatically) + // 2) what language file to use + $this->user->add_lang_ext('board3/portal', 'mods/portal'); + + /** + * get initial data + */ + $portal_config = obtain_portal_config(); + $portal_modules = obtain_portal_modules(); + + /** + * set up column_count array + * with this we can hide unneeded parts of the portal + */ + $module_count = array( + 'total' => 0, + 'top' => 0, + 'left' => 0, + 'center' => 0, + 'right' => 0, + 'bottom' => 0, + ); + + /** + * start assigning block vars + */ + foreach ($portal_modules as $row) + { + if($row['module_status'] == B3_MODULE_DISABLED) + { + continue; + } + + $class_name = 'portal_' . $row['module_classname'] . '_module'; + if (!class_exists($class_name)) + { + include("{$this->root_path}modules/portal_{$row['module_classname']}{$this->php_ext}"); + } + if (!class_exists($class_name)) + { + trigger_error(sprintf($this->user->lang['CLASS_NOT_FOUND'], $class_name, 'portal_' . $row['module_classname']), E_USER_ERROR); + } + + $module = new $class_name(); + + /** + * Check for permissions before loading anything + * the default group of a user always defines his/her permission (KISS) + */ + $group_ary = (!empty($row['module_group_ids'])) ? explode(',', $row['module_group_ids']) : ''; + if ((is_array($group_ary) && !in_array($this->user->data['group_id'], $group_ary))) + { + continue; + } + + if ($module->language) + { + $this->user->add_lang_ext('board3/portal', 'mods/portal/' . $module->language); + } + if ($row['module_column'] == column_string_num('left') && $this->config['board3_left_column']) + { + $template_module = $module->get_template_side($row['module_id']); + $template_column = 'left'; + ++$module_count['left']; + } + if ($row['module_column'] == column_string_num('center')) + { + $template_module = $module->get_template_center($row['module_id']); + $template_column = 'center'; + ++$module_count['center']; + } + if ($row['module_column'] == column_string_num('right') && $this->config['board3_right_column']) + { + $template_module = $module->get_template_side($row['module_id']); + $template_column = 'right'; + ++$module_count['right']; + } + if ($row['module_column'] == column_string_num('top')) + { + $template_module = $module->get_template_center($row['module_id']); + ++$module_count['top']; + } + if ($row['module_column'] == column_string_num('bottom')) + { + $template_module = $module->get_template_center($row['module_id']); + ++$module_count['bottom']; + } + if (!isset($template_module)) + { + continue; + } + + // Custom Blocks that have been defined in the ACP will return an array instead of just the name of the template file + if (is_array($template_module)) + { + $this->template->assign_block_vars('modules_' . column_num_string($row['module_column']), array( + 'TEMPLATE_FILE' => 'portal/modules/' . $template_module['template'], + 'IMAGE_SRC' => $this->root_path . '../styles/' . $this->user->style['style_path'] . '/theme/images/portal/' . $template_module['image_src'], + 'TITLE' => $template_module['title'], + 'CODE' => $template_module['code'], + 'MODULE_ID' => $row['module_id'], + 'IMAGE_WIDTH' => $row['module_image_width'], + 'IMAGE_HEIGHT' => $row['module_image_height'], + )); + } + else + { + $this->template->assign_block_vars('modules_' . column_num_string($row['module_column']), array( + 'TEMPLATE_FILE' => 'portal/modules/' . $template_module, + 'IMAGE_SRC' => $this->root_path . '../styles/' . $this->user->style['style_path'] . '/theme/images/portal/' . $row['module_image_src'], + 'IMAGE_WIDTH' => $row['module_image_width'], + 'IMAGE_HEIGHT' => $row['module_image_height'], + 'MODULE_ID' => $row['module_id'], + 'TITLE' => (isset($this->user->lang[$row['module_name']])) ? $this->user->lang[$row['module_name']] : utf8_normalize_nfc($row['module_name']), + )); + } + unset($template_module); + } + $module_count['total'] = sizeof($portal_modules); + + // Redirect to index if there are currently no active modules + if($module_count['total'] < 1) + { + redirect(append_sid($this->phpbb_root_path . 'index.' . $phpEx)); + } + + // Assign specific vars + $this->template->assign_vars(array( + // 'S_SMALL_BLOCK' => true, + 'S_PORTAL_LEFT_COLUMN' => $this->config['board3_left_column_width'], + 'S_PORTAL_RIGHT_COLUMN' => $this->config['board3_right_column_width'], + 'S_LEFT_COLUMN' => ($module_count['left'] > 0 && $this->config['board3_left_column']) ? true : false, + 'S_CENTER_COLUMN' => ($module_count['center'] > 0) ? true : false, + 'S_RIGHT_COLUMN' => ($module_count['right'] > 0 && $this->config['board3_right_column']) ? true : false, + 'S_TOP_COLUMN' => ($module_count['top'] > 0) ? true : false, + 'S_BOTTOM_COLUMN' => ($module_count['bottom'] > 0) ? true : false, + 'S_DISPLAY_PHPBB_MENU' => $this->config['board3_phpbb_menu'], + 'B3P_DISPLAY_JUMPBOX' => $this->config['board3_display_jumpbox'], + )); + + // And now to output the page. + page_header($this->user->lang('PORTAL')); + + // foobar_body.html is in ./ext/foobar/example/styles/prosilver/template/foobar_body.html + $this->template->set_filenames(array( + 'body' => 'portal/portal_body.html' + )); + + page_footer(); + } + + // check if user should be able to access this page + private function check_permission() + { + if (!isset($this->config['board3_enable']) || !$this->config['board3_enable'] || !$this->auth->acl_get('u_view_portal')) + { + redirect(append_sid($this->phpbb_root_path . 'index' . $this->php_ext)); + } + } +} diff --git a/root/portal/includes/functions.php b/root/portal/includes/functions.php index dc9b31b9..d1dc9661 100644 --- a/root/portal/includes/functions.php +++ b/root/portal/includes/functions.php @@ -404,16 +404,16 @@ function character_limit(&$title, $limit = 0) */ function get_sub_taged_string($message, $bbcode_uid, $length) { - global $phpbb_root_path, $phpEx; + global $portal_root_path, $phpEx; if(!class_exists('phpbb_trim_message')) { - include($phpbb_root_path . 'includes/trim_message/trim_message.' . $phpEx); + include($portal_root_path . '../includes/trim_message/trim_message.' . $phpEx); } if(!class_exists('phpbb_trim_message_bbcodes')) { - include($phpbb_root_path . 'includes/trim_message/bbcodes.' . $phpEx); + include($portal_root_path . '../includes/trim_message/bbcodes.' . $phpEx); } $object = new phpbb_trim_message($message, $bbcode_uid, $length); diff --git a/root/portal/modules/portal_birthday_list.php b/root/portal/modules/portal_birthday_list.php index 9a2e5a45..2ffcaf9f 100644 --- a/root/portal/modules/portal_birthday_list.php +++ b/root/portal/modules/portal_birthday_list.php @@ -53,14 +53,16 @@ class portal_birthday_list_module // Generate birthday list if required ... / borrowed from index.php 3.0.6 $birthday_list = $birthday_ahead_list = ''; + if ($config['load_birthdays'] && $config['allow_birthdays']) { - $now = getdate(time() + $user->timezone + $user->dst - date('Z')); + $time = $user->create_datetime(); + $now = phpbb_gmgetdate($time->getTimestamp() + $time->getOffset()); $cache_days = $config['board3_birthdays_ahead_' . $module_id]; $sql_days = ''; while ($cache_days > 0) { - $day = getdate(time() + 86400 * $cache_days + $user->timezone + $user->dst - date('Z')); + $day = phpbb_gmgetdate($time->getTimestamp() + 86400 * $cache_days + $time->getOffset()); $sql_days .= " OR u.user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', $day['mday'], $day['mon'])) . "%'"; $cache_days--; } @@ -76,7 +78,7 @@ class portal_birthday_list_module $order_by = 'SUBSTRING(u.user_birthday FROM 4 FOR 2) ASC, SUBSTRING(u.user_birthday FROM 1 FOR 2) ASC, u.username_clean ASC'; break; } - $now = getdate(time() + $user->timezone + $user->dst - date('Z')); + $sql = 'SELECT u.user_id, u.username, u.user_colour, u.user_birthday FROM ' . USERS_TABLE . ' u LEFT JOIN ' . BANLIST_TABLE . " b ON (u.user_id = b.ban_userid) diff --git a/root/portal/modules/portal_calendar.php b/root/portal/modules/portal_calendar.php index a3d8706e..03ae2eaa 100644 --- a/root/portal/modules/portal_calendar.php +++ b/root/portal/modules/portal_calendar.php @@ -89,8 +89,11 @@ class portal_calendar_module } // initialise some variables - $today_timestamp = time() + $user->timezone + $user->dst; - $mini_cal_today = date('Ymd', time() + $user->timezone + $user->dst - date('Z')); + $time = $user->create_datetime(); + $now = phpbb_gmgetdate($time->getTimestamp() + $time->getOffset()); + $today_timestamp = $now[0]; + $mini_cal_today = date('Ymd', $today_timestamp - date('Z')); + $this->stamp = $today_timestamp; $s_cal_month = ($this->mini_cal_month != 0) ? $this->mini_cal_month . ' month' : $mini_cal_today; $this->getMonth($s_cal_month); $mini_cal_count = $this->mini_cal_fdow; @@ -102,8 +105,8 @@ class portal_calendar_module // output our general calendar bits $down = $this->mini_cal_month - 1; $up = $this->mini_cal_month + 1; - $prev_month = '<<'; - $next_month = '>>'; + $prev_month = '<<'; + $next_month = '>>'; $template->assign_block_vars('minical', array( 'S_SUNDAY_FIRST' => ($config['board3_sunday_first_' . $module_id]) ? true : false, @@ -576,7 +579,7 @@ class portal_calendar_module { global $user; - $this->stamp = strtotime($date) + $user->timezone + $user->dst; + $this->stamp = (empty($this->stamp)) ? strtotime($date) + $user->timezone + $user->dst : $this->stamp; return ($this->stamp); } diff --git a/root/portal/modules/portal_news.php b/root/portal/modules/portal_news.php index 0102db4c..53470b3b 100644 --- a/root/portal/modules/portal_news.php +++ b/root/portal/modules/portal_news.php @@ -207,6 +207,8 @@ class portal_news_module // Grab icons $icons = $cache->obtain_icons(); + phpbb_generate_template_pagination($template, $view_topic_url, 'pagination', 'np', $fetch_news[$i]['topic_replies'], $config['board3_number_of_news_' . $module_id], $start); + $template->assign_block_vars('news_row', array( 'ATTACH_ICON_IMG' => ($fetch_news[$i]['attachment'] && $config['allow_attachments']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '', 'FORUM_NAME' => ($forum_id) ? $fetch_news[$i]['forum_name'] : '', @@ -240,7 +242,6 @@ class portal_news_module 'S_NOT_LAST' => ($i < sizeof($fetch_news) - 1) ? true : false, 'S_POLL' => $fetch_news[$i]['poll'], 'S_UNREAD_INFO' => $unread_topic, - 'PAGINATION' => topic_generate_pagination($fetch_news[$i]['topic_replies'], $view_topic_url), 'S_HAS_ATTACHMENTS' => (!empty($fetch_news[$i]['attachments'])) ? true : false, )); @@ -258,8 +259,8 @@ class portal_news_module { $template->assign_vars(array( 'NP_PAGINATION' => $pagination, - 'TOTAL_NEWS' => ($total_news == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $total_news), - 'NP_PAGE_NUMBER' => on_page($total_news, $config['board3_number_of_news_' . $module_id], $start)) + 'TOTAL_NEWS' => ($total_news == 1) ? sprintf($user->lang['VIEW_FORUM_TOPICS'][1], $total_news) : sprintf($user->lang['VIEW_FORUM_TOPICS'][2], $total_news), + 'NP_PAGE_NUMBER' => phpbb_on_page($template, $user, $view_topic_url, $total_news, $config['board3_number_of_news_' . $module_id], $start)) ); } } diff --git a/root/portal/modules/portal_statistics.php b/root/portal/modules/portal_statistics.php index 3ed14e69..59c030c6 100644 --- a/root/portal/modules/portal_statistics.php +++ b/root/portal/modules/portal_statistics.php @@ -63,9 +63,9 @@ class portal_statistics_module $total_users = $config['num_users']; $total_files = $config['num_files']; - $l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER'; - $l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER'; - $l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER'; + $l_total_user_s = ($total_users == 0) ? sprintf($user->lang['TOTAL_USERS_ZERO'], $total_users) : sprintf($user->lang['TOTAL_USERS'][2], $total_users); + $l_total_post_s = ($total_posts == 0) ? sprintf($user->lang['TOTAL_POSTS_ZERO'], $total_posts) : sprintf($user->lang['TOTAL_POSTS_COUNT'][2], $total_posts); + $l_total_topic_s = ($total_topics == 0) ? sprintf($user->lang['TOTAL_TOPICS_ZERO'], $total_topics) : sprintf($user->lang['TOTAL_TOPICS'][2], $total_topics); // avarage stat $board_days = (time() - $config['board_startdate']) / 86400; @@ -116,12 +116,11 @@ class portal_statistics_module $topics_count = $this->get_topics_count(); - // Assign specific vars $template->assign_vars(array( - 'B3_TOTAL_POSTS' => sprintf($user->lang[$l_total_post_s], $total_posts), - 'B3_TOTAL_TOPICS' => sprintf($user->lang[$l_total_topic_s], $total_topics), - 'B3_TOTAL_USERS' => sprintf($user->lang[$l_total_user_s], $total_users), + 'B3_TOTAL_POSTS' => $l_total_post_s, + 'B3_TOTAL_TOPICS' => $l_total_topic_s, + 'B3_TOTAL_USERS' => $l_total_user_s, 'B3_NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), 'B3_ANNOUNCE_COUNT' => $topics_count[POST_ANNOUNCE], 'B3_STICKY_COUNT' => $topics_count[POST_STICKY], diff --git a/root/portal/modules/portal_stylechanger.php b/root/portal/modules/portal_stylechanger.php index cb933b90..db233411 100644 --- a/root/portal/modules/portal_stylechanger.php +++ b/root/portal/modules/portal_stylechanger.php @@ -70,7 +70,7 @@ class portal_stylechanger_module $url = append_sid("{$phpbb_root_path}portal.$phpEx", 'style=' . $row['style_id']); } ++$style_count; - $style_select .= ''; + $style_select .= ''; } $db->sql_freeresult($result); if(strlen($style_select)) diff --git a/root/portal/modules/portal_user_menu.php b/root/portal/modules/portal_user_menu.php index eed9c675..a60bb8b5 100644 --- a/root/portal/modules/portal_user_menu.php +++ b/root/portal/modules/portal_user_menu.php @@ -51,7 +51,7 @@ class portal_user_menu_module { global $config, $template, $user, $auth, $db, $phpEx, $phpbb_root_path; - if (!function_exists('display_forums')) + if (!function_exists('get_user_avatar')) { include($phpbb_root_path . 'includes/functions_display.' . $phpEx); }