From 12db763560a3fdf436849b638fd62368d8ea5b8f Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 17 Nov 2013 01:26:06 +0100 Subject: [PATCH] [feature/module_services] Move user_menu to module services --- config/services.yml | 13 ++ migrations/v210_beta1.php | 2 +- modules/user_menu.php | 223 ++++++++++++++++++++++++++++ portal/modules/portal_user_menu.php | 179 ---------------------- 4 files changed, 237 insertions(+), 180 deletions(-) create mode 100644 modules/user_menu.php delete mode 100644 portal/modules/portal_user_menu.php diff --git a/config/services.yml b/config/services.yml index 796df9b3..3044647e 100644 --- a/config/services.yml +++ b/config/services.yml @@ -295,3 +295,16 @@ services: - %core.php_ext% tags: - { name: board3.module } + + board3.module.user_menu: + class: \board3\portal\modules\user_menu + arguments: + - @auth + - @config + - @dbal.conn + - @template + - @user + - %core.root_path% + - %core.php_ext% + tags: + - { name: board3.module } diff --git a/migrations/v210_beta1.php b/migrations/v210_beta1.php index 078b2620..aefbfe82 100644 --- a/migrations/v210_beta1.php +++ b/migrations/v210_beta1.php @@ -468,7 +468,7 @@ class v210_beta1 extends \phpbb\db\migration\migration 'module_status' => 1, ), array( - 'module_classname' => 'user_menu', + 'module_classname' => '\board3\portal\modules\user_menu', 'module_column' => 3, 'module_order' => 1, 'module_name' => 'USER_MENU', diff --git a/modules/user_menu.php b/modules/user_menu.php new file mode 100644 index 00000000..ad30d1fc --- /dev/null +++ b/modules/user_menu.php @@ -0,0 +1,223 @@ +lang}/mods/portal/" + */ + public $language = 'portal_user_menu_module'; + + /** @var \phpbb\auth\auth */ + protected $auth; + + /** @var \phpbb\config\config */ + protected $config; + + /** @var \phpbb\db\driver */ + protected $db; + + /** @var \phpbb\template */ + protected $template; + + /** @var \phpbb\user */ + protected $user; + + /** @var php file extension */ + protected $php_ext; + + /** @var phpbb root path */ + protected $phpbb_root_path; + + /** + * Construct a user menu object + * + * @param \phpbb\auth\auth $auth phpBB auth + * @param \phpbb\config\config $config phpBB config + * @param \phpbb\db\driver $db phpBB db driver + * @param \phpbb\template $template phpBB template + * @param \phpbb\user $user phpBB user + * @param string $phpbb_root_path phpBB root path + * @param string $phpEx php file extension + */ + public function __construct($auth, $config, $db, $template, $user, $phpbb_root_path, $phpEx) + { + $this->auth = $auth; + $this->config = $config; + $this->db = $db; + $this->template = $template; + $this->user = $user; + $this->phpbb_root_path = $phpbb_root_path; + $this->php_ext = $phpEx; + } + + /** + * @inheritdoc + */ + public function get_template_side($module_id) + { + if (!function_exists('get_user_avatar')) + { + include($this->phpbb_root_path . 'includes/functions_display.' . $this->php_ext); + } + + if ($this->user->data['is_registered']) + { + // + // + new posts since last visit & you post number + // + $ex_fid_ary = array_unique(array_merge(array_keys($this->auth->acl_getf('!f_read', true)), array_keys($this->auth->acl_getf('!f_search', true)))); + + if ($this->auth->acl_get('m_approve')) + { + $m_approve_fid_ary = array(-1); + $m_approve_fid_sql = ''; + } + else if ($this->auth->acl_getf_global('m_approve')) + { + $m_approve_fid_ary = array_diff(array_keys($this->auth->acl_getf('!m_approve', true)), $ex_fid_ary); + $m_approve_fid_sql = ' AND (p.post_approved = 1' . ((sizeof($m_approve_fid_ary)) ? ' OR ' . $this->db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) : '') . ')'; + } + else + { + $m_approve_fid_ary = array(); + $m_approve_fid_sql = ' AND p.post_approved = 1'; + } + + $sql = 'SELECT COUNT(distinct t.topic_id) as total + FROM ' . TOPICS_TABLE . ' t + WHERE t.topic_last_post_time > ' . $this->user->data['user_lastvisit'] . ' + AND t.topic_moved_id = 0 + ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . ' + ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $this->db->sql_in_set('t.forum_id', $ex_fid_ary, true) : ''); + $result = $this->db->sql_query($sql); + $new_posts_count = (int) $this->db->sql_fetchfield('total'); + $this->db->sql_freeresult($result); + + // unread posts + $sql_where = 'AND t.topic_moved_id = 0 + ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . ' + ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $this->db->sql_in_set('t.forum_id', $ex_fid_ary, true) : ''); + $unread_list = array(); + $unread_list = get_unread_topics($this->user->data['user_id'], $sql_where, 'ORDER BY t.topic_id DESC'); + $unread_posts_count = sizeof($unread_list); + + + // Get user avatar and rank + $user_id = $this->user->data['user_id']; + $username = $this->user->data['username']; + $colour = $this->user->data['user_colour']; + $avatar_img = get_user_avatar($this->user->data['user_avatar'], $this->user->data['user_avatar_type'], $this->user->data['user_avatar_width'], $this->user->data['user_avatar_height']); + $rank_title = $rank_img = ''; + get_user_rank($this->user->data['user_rank'], $this->user->data['user_posts'], $rank_title, $rank_img, $rank_img_src); + + // Assign specific vars + $this->template->assign_vars(array( + 'L_NEW_POSTS' => $this->user->lang['SEARCH_NEW'] . ' (' . $new_posts_count . ')', + 'L_SELF_POSTS' => $this->user->lang['SEARCH_SELF'] . ' (' . $this->user->data['user_posts'] . ')', + 'L_UNREAD_POSTS'=> $this->user->lang['SEARCH_UNREAD'] . ' (' . $unread_posts_count . ')', + + 'B3P_AVATAR_IMG' => $avatar_img, + 'B3P_RANK_TITLE' => $rank_title, + 'B3P_RANK_IMG' => $rank_img, + 'RANK_IMG_SRC' => $rank_img_src, + + 'USERNAME_FULL' => get_username_string('full', $user_id, $username, $colour), + 'U_VIEW_PROFILE' => get_username_string('profile', $user_id, $username, $colour), + + 'U_NEW_POSTS' => append_sid("{$this->phpbb_root_path}search.{$this->php_ext}", 'search_id=newposts'), + 'U_SELF_POSTS' => append_sid("{$this->phpbb_root_path}search.{$this->php_ext}", 'search_id=egosearch'), + 'U_UNREAD_POSTS' => append_sid("{$this->phpbb_root_path}search.{$this->php_ext}", 'search_id=unreadposts'), + 'U_UM_BOOKMARKS' => ($this->config['allow_bookmarks']) ? append_sid("{$this->phpbb_root_path}ucp.{$this->php_ext}", 'i=main&mode=bookmarks') : '', + 'U_UM_MAIN_SUBSCRIBED' => append_sid("{$this->phpbb_root_path}ucp.{$this->php_ext}", 'i=main&mode=subscribed'), + 'U_UM_MCP' => ($this->auth->acl_get('m_') || $this->auth->acl_getf_global('m_')) ? append_sid("{$this->phpbb_root_path}mcp.{$this->php_ext}", 'i=main&mode=front', true, $this->user->session_id) : '', + 'S_DISPLAY_SUBSCRIPTIONS' => ($this->config['allow_topic_notify'] || $this->config['allow_forum_notify']) ? true : false, + )); + + return 'user_menu_side.html'; + } + else + { + // Assign specific vars + $this->template->assign_vars(array( + 'U_PORTAL' => append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal"), + 'S_DISPLAY_FULL_LOGIN' => true, + 'S_AUTOLOGIN_ENABLED' => ($this->config['allow_autologin']) ? true : false, + 'S_LOGIN_ACTION' => append_sid("{$this->phpbb_root_path}ucp.{$this->php_ext}", 'mode=login'), + 'S_SHOW_REGISTER' => ($this->config['board3_user_menu_register_' . $module_id]) ? true : false, + )); + + return 'login_box_side.html'; + } + } + + /** + * @inheritdoc + */ + public function get_template_acp($module_id) + { + return array( + 'title' => 'USER_MENU', + 'vars' => array( + 'legend1' => 'USER_MENU_SETTINGS', + 'board3_user_menu_register_' . $module_id => array('lang' => 'USER_MENU_REGISTER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), + ), + ); + } + + /** + * @inheritdoc + */ + public function install($module_id) + { + set_config('board3_user_menu_register_' . $module_id, 1); + + return true; + } + + /** + * @inheritdoc + */ + public function uninstall($module_id, $db) + { + $del_config = array( + 'board3_user_menu_register_' . $module_id, + ); + $sql = 'DELETE FROM ' . CONFIG_TABLE . ' + WHERE ' . $db->sql_in_set('config_name', $del_config); + return $db->sql_query($sql); + } +} diff --git a/portal/modules/portal_user_menu.php b/portal/modules/portal_user_menu.php deleted file mode 100644 index 2a6c0f1d..00000000 --- a/portal/modules/portal_user_menu.php +++ /dev/null @@ -1,179 +0,0 @@ -lang}/mods/portal/" - */ - public $language = 'portal_user_menu_module'; - - public function get_template_side($module_id) - { - global $config, $template, $user, $auth, $db, $phpEx, $phpbb_root_path; - - if (!function_exists('get_user_avatar')) - { - include($phpbb_root_path . 'includes/functions_display.' . $phpEx); - } - - if ($user->data['is_registered']) - { - // - // + new posts since last visit & you post number - // - $ex_fid_ary = array_unique(array_merge(array_keys($auth->acl_getf('!f_read', true)), array_keys($auth->acl_getf('!f_search', true)))); - - if ($auth->acl_get('m_approve')) - { - $m_approve_fid_ary = array(-1); - $m_approve_fid_sql = ''; - } - else if ($auth->acl_getf_global('m_approve')) - { - $m_approve_fid_ary = array_diff(array_keys($auth->acl_getf('!m_approve', true)), $ex_fid_ary); - $m_approve_fid_sql = ' AND (p.post_approved = 1' . ((sizeof($m_approve_fid_ary)) ? ' OR ' . $db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) : '') . ')'; - } - else - { - $m_approve_fid_ary = array(); - $m_approve_fid_sql = ' AND p.post_approved = 1'; - } - - $sql = 'SELECT COUNT(distinct t.topic_id) as total - FROM ' . TOPICS_TABLE . ' t - WHERE t.topic_last_post_time > ' . $user->data['user_lastvisit'] . ' - AND t.topic_moved_id = 0 - ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . ' - ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : ''); - $result = $db->sql_query($sql); - $new_posts_count = (int) $db->sql_fetchfield('total'); - $db->sql_freeresult($result); - - // unread posts - $sql_where = 'AND t.topic_moved_id = 0 - ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . ' - ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : ''); - $unread_list = array(); - $unread_list = get_unread_topics($user->data['user_id'], $sql_where, 'ORDER BY t.topic_id DESC'); - $unread_posts_count = sizeof($unread_list); - - - // Get user avatar and rank - $user_id = $user->data['user_id']; - $username = $user->data['username']; - $colour = $user->data['user_colour']; - $avatar_img = get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']); - $rank_title = $rank_img = ''; - get_user_rank($user->data['user_rank'], $user->data['user_posts'], $rank_title, $rank_img, $rank_img_src); - - // Assign specific vars - $template->assign_vars(array( - 'L_NEW_POSTS' => $user->lang['SEARCH_NEW'] . ' (' . $new_posts_count . ')', - 'L_SELF_POSTS' => $user->lang['SEARCH_SELF'] . ' (' . $user->data['user_posts'] . ')', - 'L_UNREAD_POSTS'=> $user->lang['SEARCH_UNREAD'] . ' (' . $unread_posts_count . ')', - - 'B3P_AVATAR_IMG' => $avatar_img, - 'B3P_RANK_TITLE' => $rank_title, - 'B3P_RANK_IMG' => $rank_img, - 'RANK_IMG_SRC' => $rank_img_src, - - 'USERNAME_FULL' => get_username_string('full', $user_id, $username, $colour), - 'U_VIEW_PROFILE' => get_username_string('profile', $user_id, $username, $colour), - - 'U_NEW_POSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts'), - 'U_SELF_POSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=egosearch'), - 'U_UNREAD_POSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=unreadposts'), - 'U_UM_BOOKMARKS' => ($config['allow_bookmarks']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=main&mode=bookmarks') : '', - 'U_UM_MAIN_SUBSCRIBED' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=main&mode=subscribed'), - 'U_UM_MCP' => ($auth->acl_get('m_') || $auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&mode=front', true, $user->session_id) : '', - 'S_DISPLAY_SUBSCRIPTIONS' => ($config['allow_topic_notify'] || $config['allow_forum_notify']) ? true : false, - )); - - return 'user_menu_side.html'; - } - else - { - // Assign specific vars - $template->assign_vars(array( - 'U_PORTAL' => append_sid("{$phpbb_root_path}app.$phpEx/portal"), - 'S_DISPLAY_FULL_LOGIN' => true, - 'S_AUTOLOGIN_ENABLED' => ($config['allow_autologin']) ? true : false, - 'S_LOGIN_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'), - 'S_SHOW_REGISTER' => ($config['board3_user_menu_register_' . $module_id]) ? true : false, - )); - - return 'login_box_side.html'; - } - } - - public function get_template_acp($module_id) - { - return array( - 'title' => 'USER_MENU', - 'vars' => array( - 'legend1' => 'USER_MENU_SETTINGS', - 'board3_user_menu_register_' . $module_id => array('lang' => 'USER_MENU_REGISTER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), - ), - ); - } - - /** - * API functions - */ - public function install($module_id) - { - set_config('board3_user_menu_register_' . $module_id, 1); - - return true; - } - - public function uninstall($module_id, $db) - { - $del_config = array( - 'board3_user_menu_register_' . $module_id, - ); - $sql = 'DELETE FROM ' . CONFIG_TABLE . ' - WHERE ' . $db->sql_in_set('config_name', $del_config); - return $db->sql_query($sql); - } -}