From e0ef10128b68cfae9774f6c87cc1a841cacecd8d Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Fri, 26 Jul 2013 10:26:52 -0500 Subject: [PATCH 01/18] [ticket/11744] Group join request notification PHPBB3-11744 --- phpBB/config/notifications.yml | 18 ++ phpBB/includes/functions_user.php | 12 +- phpBB/includes/ucp/ucp_groups.php | 34 +--- phpBB/language/en/common.php | 1 + phpBB/language/en/ucp.php | 1 + phpBB/phpbb/notification/manager.php | 15 +- .../phpbb/notification/type/group_request.php | 161 ++++++++++++++++++ 7 files changed, 204 insertions(+), 38 deletions(-) create mode 100644 phpBB/phpbb/notification/type/group_request.php diff --git a/phpBB/config/notifications.yml b/phpBB/config/notifications.yml index 60aa63a854..04c5e46a9c 100644 --- a/phpBB/config/notifications.yml +++ b/phpBB/config/notifications.yml @@ -103,6 +103,24 @@ services: tags: - { name: notification.type } + notification.type.group_request: + class: phpbb_notification_type_group_request + scope: prototype # scope MUST be prototype for this to work! + arguments: + - @user_loader + - @dbal.conn + - @cache.driver + - @user + - @auth + - @config + - %core.root_path% + - %core.php_ext% + - %tables.notification_types% + - %tables.notifications% + - %tables.user_notifications% + tags: + - { name: notification.type } + notification.type.pm: class: phpbb_notification_type_pm scope: prototype # scope MUST be prototype for this to work! diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 1b598f7bf7..c4d96e1773 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2635,7 +2635,7 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false, */ function group_user_del($group_id, $user_id_ary = false, $username_ary = false, $group_name = false) { - global $db, $auth, $config, $phpbb_dispatcher; + global $db, $auth, $config, $phpbb_dispatcher, $phpbb_container; if ($config['coppa_enable']) { @@ -2769,6 +2769,10 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false, group_update_listings($group_id); + $phpbb_notifications = $phpbb_container->get('notification_manager'); + + $phpbb_notifications->delete_notifications('group_request', $user_id_ary, $group_id); + // Return false - no error return false; } @@ -2858,7 +2862,7 @@ function remove_default_rank($group_id, $user_ids) */ function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false) { - global $db, $auth, $phpbb_root_path, $phpEx, $config; + global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container; // We need both username and user_id info $result = user_get_id_name($user_id_ary, $username_ary); @@ -2951,6 +2955,10 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna $messenger->save_queue(); + $phpbb_notifications = $phpbb_container->get('notification_manager'); + + $phpbb_notifications->delete_notifications('group_request', $user_id_ary, $group_id); + $log = 'LOG_USERS_APPROVED'; break; diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index 8620e33e47..fbb0f41e21 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -198,36 +198,12 @@ class ucp_groups { group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1); - include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx); - $messenger = new messenger(); + $phpbb_notifications = $phpbb_container->get('notification_manager'); - $sql = 'SELECT u.username, u.username_clean, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang - FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . " u - WHERE ug.user_id = u.user_id - AND ug.group_leader = 1 - AND ug.group_id = $group_id"; - $result = $db->sql_query($sql); - - while ($row = $db->sql_fetchrow($result)) - { - $messenger->template('group_request', $row['user_lang']); - - $messenger->set_addresses($row); - - $messenger->assign_vars(array( - 'USERNAME' => htmlspecialchars_decode($row['username']), - 'GROUP_NAME' => htmlspecialchars_decode($group_row[$group_id]['group_name']), - 'REQUEST_USERNAME' => $user->data['username'], - - 'U_PENDING' => generate_board_url() . "/ucp.$phpEx?i=groups&mode=manage&action=list&g=$group_id", - 'U_GROUP' => generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id") - ); - - $messenger->send($row['user_notify_type']); - } - $db->sql_freeresult($result); - - $messenger->save_queue(); + $phpbb_notifications->add_notifications('group_request', array_merge( + $group_row[$group_id], + array('user_id' => $user->data['user_id']) + )); } add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), $group_row[$group_id]['group_name']); diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index b188d90f3a..8ababfcd2a 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -414,6 +414,7 @@ $lang = array_merge($lang, array( 2 => '%d Notifications', ), 'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.', + 'NOTIFICATION_GROUP_REQUEST' => '%1$s is requesting to join the group you manage, %2$s.', 'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".', 'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".', 'NOTIFICATION_POST_APPROVED' => 'Your post was approved "%2$s".', diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 51823ddb12..dc09e8cdcb 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -313,6 +313,7 @@ $lang = array_merge($lang, array( 'NOTIFICATION_METHOD_JABBER' => 'Jabber', 'NOTIFICATION_TYPE' => 'Notification type', 'NOTIFICATION_TYPE_BOOKMARK' => 'Someone replies to a topic you have bookmarked', + 'NOTIFICATION_TYPE_GROUP_REQUEST' => 'Someone requests to join a group you lead', 'NOTIFICATION_TYPE_IN_MODERATION_QUEUE' => 'A post or topic needs approval', 'NOTIFICATION_TYPE_MODERATION_QUEUE' => 'Your topics/posts are approved or disapproved by a moderator', 'NOTIFICATION_TYPE_PM' => 'Someone sends you a private message', diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php index 97833710c0..4e6028ec3f 100644 --- a/phpBB/phpbb/notification/manager.php +++ b/phpBB/phpbb/notification/manager.php @@ -59,7 +59,7 @@ class phpbb_notification_manager /** * Notification Constructor - * + * * @param array $notification_types * @param array $notification_methods * @param ContainerBuilder $phpbb_container @@ -490,15 +490,15 @@ class phpbb_notification_manager * * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types) * @param int|array $item_id Identifier within the type (or array of ids) - * @param array $data Data specific for this type that will be updated + * @param bool|int|array $parent_id Parent identifier within the type (or array of ids), used in combination with item_id if specified */ - public function delete_notifications($notification_type_name, $item_id) + public function delete_notifications($notification_type_name, $item_id, $parent_id = false) { if (is_array($notification_type_name)) { foreach ($notification_type_name as $type) { - $this->delete_notifications($type, $item_id); + $this->delete_notifications($type, $item_id, $parent_id); } return; @@ -508,7 +508,8 @@ class phpbb_notification_manager $sql = 'DELETE FROM ' . $this->notifications_table . ' WHERE notification_type_id = ' . (int) $notification_type_id . ' - AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id); + AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) . + (($parent_id !== false) ? ' AND ' . ((is_array($parent_id) ? $this->db->sql_in_set('item_parent_id', $parent_id) : 'item_parent_id = ' . (int) $parent_id)) : ''); $this->db->sql_query($sql); } @@ -834,12 +835,12 @@ class phpbb_notification_manager protected function load_object($object_name) { $object = $this->phpbb_container->get($object_name); - + if (method_exists($object, 'set_notification_manager')) { $object->set_notification_manager($this); } - + return $object; } diff --git a/phpBB/phpbb/notification/type/group_request.php b/phpBB/phpbb/notification/type/group_request.php new file mode 100644 index 0000000000..96015783fb --- /dev/null +++ b/phpBB/phpbb/notification/type/group_request.php @@ -0,0 +1,161 @@ + 'NOTIFICATION_TYPE_GROUP_REQUEST', + ); + + /** + * {@inheritdoc} + */ + public function is_available() + { + // Leader of any groups? + $sql = 'SELECT group_id FROM ' . USER_GROUP_TABLE . ' + WHERE user_id = ' . (int) $this->user->data['user_id'] . ' + AND group_leader = 1'; + $result = $this->db->sql_query_limit($sql, 1); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + return (!empty($row)) ? true : false; + } + + /** + * {@inheritdoc} + */ + public static function get_item_id($group) + { + return (int) $group['user_id']; + } + + /** + * {@inheritdoc} + */ + public static function get_item_parent_id($group) + { + // Group id is the parent + return (int) $group['group_id']; + } + + /** + * {@inheritdoc} + */ + public function find_users_for_notification($group, $options = array()) + { + $options = array_merge(array( + 'ignore_users' => array(), + ), $options); + + $sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . ' + WHERE group_leader = 1 + AND group_id = ' . (int) $group['group_id']; + $result = $this->db->sql_query($sql); + + $user_ids = array(); + while ($row = $this->db->sql_fetchrow($result)) + { + $user_ids[] = $row['user_id']; + } + $this->db->sql_freeresult($result); + + $this->user_loader->load_users($user_ids); + + return $this->check_user_notification_options($user_ids, $options); + } + + /** + * {@inheritdoc} + */ + public function get_avatar() + { + return $this->user_loader->get_avatar($this->item_id); + } + + /** + * {@inheritdoc} + */ + public function get_title() + { + $username = $this->user_loader->get_username($this->item_id, 'no_profile'); + + return $this->user->lang('NOTIFICATION_GROUP_REQUEST', $username, $this->get_data('group_name')); + } + + /** + * {@inheritdoc} + */ + public function get_email_template() + { + return 'group_request'; + } + + /** + * {@inheritdoc} + */ + public function get_email_template_variables() + { + $user_data = $this->user_loader->get_user($this->item_id); + + return array( + 'GROUP_NAME' => htmlspecialchars_decode($this->get_data('group_name')), + 'REQUEST_USERNAME' => htmlspecialchars_decode($user_data['username']), + + 'U_PENDING' => generate_board_url() . "/ucp.{$this->php_ext}?i=groups&mode=manage&action=list&g={$this->item_parent_id}", + 'U_GROUP' => generate_board_url() . "/memberlist.{$this->php_ext}?mode=group&g={$this->item_parent_id}", + ); + } + + /** + * {@inheritdoc} + */ + public function get_url() + { + return append_sid($this->phpbb_root_path . 'ucp.' . $this->php_ext, "i=groups&mode=manage&action=list&g={$this->item_parent_id}"); + } + + /** + * {@inheritdoc} + */ + public function users_to_query() + { + return array($this->item_id); + } + + /** + * {@inheritdoc} + */ + public function create_insert_array($group, $pre_create_data = array()) + { + $this->set_data('group_name', $group['group_name']); + + return parent::create_insert_array($group, $pre_create_data); + } +} From c260e82a9bc7961d17f2ac6698907f1a4ed392f2 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 11:22:44 -0500 Subject: [PATCH 02/18] [ticket/11744] Move notification from ucp_groups to group_user_add PHPBB3-11744 --- phpBB/includes/functions_user.php | 16 +++++++++++++++- phpBB/includes/ucp/ucp_groups.php | 7 ------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index c4d96e1773..102fbaae78 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2534,7 +2534,7 @@ function group_delete($group_id, $group_name = false) */ function group_user_add($group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $default = false, $leader = 0, $pending = 0, $group_attributes = false) { - global $db, $auth; + global $db, $auth, $phpbb_container; // We need both username and user_id info $result = user_get_id_name($user_id_ary, $username_ary); @@ -2622,6 +2622,20 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false, group_update_listings($group_id); + if ($pending) + { + $phpbb_notifications = $phpbb_container->get('notification_manager'); + + foreach ($add_id_ary as $user_id) + { + $phpbb_notifications->add_notifications('group_request', array( + 'group_id' => $group_id, + 'user_id' => $user_id, + 'group_name' => $group_name, + )); + } + } + // Return false - no error return false; } diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index fbb0f41e21..6f78136f11 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -197,13 +197,6 @@ class ucp_groups else { group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1); - - $phpbb_notifications = $phpbb_container->get('notification_manager'); - - $phpbb_notifications->add_notifications('group_request', array_merge( - $group_row[$group_id], - array('user_id' => $user->data['user_id']) - )); } add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), $group_row[$group_id]['group_name']); From 3f230b1a8c716adb77b679fed91d50c391387b19 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 12:29:49 -0500 Subject: [PATCH 03/18] [ticket/11744] Create null log class (primarily for unit test) PHPBB3-11744 --- phpBB/phpbb/log/null.php | 125 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 phpBB/phpbb/log/null.php diff --git a/phpBB/phpbb/log/null.php b/phpBB/phpbb/log/null.php new file mode 100644 index 0000000000..9837058ef5 --- /dev/null +++ b/phpBB/phpbb/log/null.php @@ -0,0 +1,125 @@ + Date: Fri, 26 Jul 2013 13:08:53 -0500 Subject: [PATCH 04/18] [ticket/11744] Create base notification test class for setup PHPBB3-11744 --- tests/notification/base.php | 105 +++++++++++++++++++++++ tests/notification/notification_test.php | 85 +----------------- 2 files changed, 107 insertions(+), 83 deletions(-) create mode 100644 tests/notification/base.php diff --git a/tests/notification/base.php b/tests/notification/base.php new file mode 100644 index 0000000000..ab92f88262 --- /dev/null +++ b/tests/notification/base.php @@ -0,0 +1,105 @@ +db = $this->new_dbal(); + $config = $this->config = new phpbb_config(array( + 'allow_privmsg' => true, + 'allow_bookmarks' => true, + 'allow_topic_notify' => true, + 'allow_forum_notify' => true, + )); + $user = $this->user = new phpbb_user(); + $this->user_loader = new phpbb_user_loader($this->db, $phpbb_root_path, $phpEx, 'phpbb_users'); + $auth = $this->auth = new phpbb_mock_notifications_auth(); + $cache = $this->cache = new phpbb_cache_service( + new phpbb_cache_driver_null(), + $this->config, + $this->db, + $phpbb_root_path, + $phpEx + ); + + $phpbb_container = $this->container = new phpbb_mock_container_builder(); + + $this->notifications = new phpbb_notification_manager_helper( + array(), + array(), + $this->container, + $this->user_loader, + $this->db, + $this->cache, + $this->user, + $phpbb_root_path, + $phpEx, + 'phpbb_notification_types', + 'phpbb_notifications', + 'phpbb_user_notifications' + ); + + $phpbb_container->set('notification_manager', $this->notifications); + + $this->notifications->setDependencies($this->auth, $this->config); + + $types = array(); + foreach ($this->get_notification_types() as $type) + { + $class = $this->build_type('phpbb_notification_type_' . $type); + + $types[$type] = $class; + $this->container->set('notification.type.' . $type, $class); + } + + $this->notifications->set_var('notification_types', $types); + } + + protected function build_type($type) + { + global $phpbb_root_path, $phpEx; + + return new $type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications'); + } +} diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php index 8f7eb3b8a8..39073c2602 100644 --- a/tests/notification/notification_test.php +++ b/tests/notification/notification_test.php @@ -7,9 +7,9 @@ * */ -require_once dirname(__FILE__) . '/manager_helper.php'; +require_once dirname(__FILE__) . '/base.php'; -class phpbb_notification_test extends phpbb_database_test_case +class phpbb_notification_test extends phpbb_tests_notification_base { protected $notifications, $db, $container, $user, $config, $auth, $cache; @@ -18,87 +18,6 @@ class phpbb_notification_test extends phpbb_database_test_case return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/notification.xml'); } - protected function setUp() - { - parent::setUp(); - - global $phpbb_root_path, $phpEx; - - include_once(__DIR__ . '/ext/test/notification/type/test.' . $phpEx); - - $this->db = $this->new_dbal(); - $this->config = new phpbb_config(array( - 'allow_privmsg' => true, - 'allow_bookmarks' => true, - 'allow_topic_notify' => true, - 'allow_forum_notify' => true, - )); - $this->user = new phpbb_user(); - $this->user_loader = new phpbb_user_loader($this->db, $phpbb_root_path, $phpEx, 'phpbb_users'); - $this->auth = new phpbb_mock_notifications_auth(); - $this->cache = new phpbb_cache_service( - new phpbb_cache_driver_null(), - $this->config, - $this->db, - $phpbb_root_path, - $phpEx - ); - - $this->container = new phpbb_mock_container_builder(); - - $this->notifications = new phpbb_notification_manager_helper( - array(), - array(), - $this->container, - $this->user_loader, - $this->db, - $this->cache, - $this->user, - $phpbb_root_path, - $phpEx, - 'phpbb_notification_types', - 'phpbb_notifications', - 'phpbb_user_notifications' - ); - - $this->notifications->setDependencies($this->auth, $this->config); - - $types = array(); - foreach (array( - 'test', - 'approve_post', - 'approve_topic', - 'bookmark', - 'disapprove_post', - 'disapprove_topic', - 'pm', - 'post', - 'post_in_queue', - 'quote', - 'report_pm', - 'report_pm_closed', - 'report_post', - 'report_post_closed', - 'topic', - 'topic_in_queue', - ) as $type) - { - $class = $this->build_type('phpbb_notification_type_' . $type); - - $types[$type] = $class; - $this->container->set('notification.type.' . $type, $class); - } - - $this->notifications->set_var('notification_types', $types); - } - - protected function build_type($type) - { - global $phpbb_root_path, $phpEx; - - return new $type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications'); - } - public function test_get_notification_type_id() { // They should be inserted the first time From d6384f89396dc7e8b42c855df2cc1ef49095520b Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 13:09:24 -0500 Subject: [PATCH 05/18] [ticket/11744] Group request test PHPBB3-11744 --- tests/notification/fixtures/group_request.xml | 30 ++++++ tests/notification/group_request_test.php | 97 +++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 tests/notification/fixtures/group_request.xml create mode 100644 tests/notification/group_request_test.php diff --git a/tests/notification/fixtures/group_request.xml b/tests/notification/fixtures/group_request.xml new file mode 100644 index 0000000000..1eb73f1e15 --- /dev/null +++ b/tests/notification/fixtures/group_request.xml @@ -0,0 +1,30 @@ + + + + user_id + username + username_clean + user_permissions + user_sig + user_occ + user_interests + + 2 + 2 + 2 + + + + + + + 3 + 3 + 3 + + + + + +
+
diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php new file mode 100644 index 0000000000..06a5a4baa8 --- /dev/null +++ b/tests/notification/group_request_test.php @@ -0,0 +1,97 @@ +createXMLDataSet(dirname(__FILE__) . '/fixtures/group_request.xml'); + } + + protected function get_notification_types() + { + return array_merge( + parent::get_notification_types(), + array( + 'group_request', + ) + ); + } + + public function test_notifications() + { + global $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_log; + + include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); + include($phpbb_root_path . 'includes/functions_user.' . $phpEx); + include($phpbb_root_path . 'includes/functions_content.' . $phpEx); + + set_config(false, false, false, $this->config); + + $this->container->set('groupposition.legend', new phpbb_groupposition_legend( + $this->db, + $this->user + )); + $this->container->set('groupposition.teampage', new phpbb_groupposition_teampage( + $this->db, + $this->user, + $this->cache->get_driver() + )); + $phpbb_dispatcher = new phpbb_mock_event_dispatcher; + $phpbb_log = new phpbb_log_null(); + + $this->assertEquals(1, $this->notifications->get_notification_type_id('group_request')); + + $group_id = false; + group_create($group_id, GROUP_OPEN, 'test', 'test group', array()); + + // Add user 1 as group leader + group_user_add($group_id, 2, false, false, false, true, false); + + // Add notifications for group requests for user 1 + //$this->notifications->add_subscription('group_request', 0, '', 2); + + // Add user 2 as pending + group_user_add($group_id, 3, false, false, false, false, true); + + $notifications = $this->notifications->load_notifications(array( + 'count_unread' => true, + 'user_id' => 2, + )); + + $expected = array( + 1 => array( + 'notification_type_id' => 1, + 'item_id' => 3, // user_id of requesting join + 'item_parent_id' => $group_id, + 'user_id' => 2, + 'notification_read' => 0, + 'notification_data' => array( + 'group_name' => 'test', + ), + ), + ); + + $this->assertEquals(sizeof($expected), $notifications['unread_count']); + + $notifications = $notifications['notifications']; + + foreach ($expected as $notification_id => $notification_data) + { + $this->assertEquals($notification_id, $notifications[$notification_id]->notification_id, 'notification_id'); + + foreach ($notification_data as $key => $value) + { + $this->assertEquals($value, $notifications[$notification_id]->$key, $key . ' ' . $notification_id); + } + } + } +} From 03ff0581e0b6397e3cf194f0b021aae732cfccfd Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 13:10:13 -0500 Subject: [PATCH 06/18] [ticket/11744] Cleanup PHPBB3-11744 --- tests/notification/group_request_test.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php index 06a5a4baa8..25c5406000 100644 --- a/tests/notification/group_request_test.php +++ b/tests/notification/group_request_test.php @@ -48,6 +48,8 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas $phpbb_dispatcher = new phpbb_mock_event_dispatcher; $phpbb_log = new phpbb_log_null(); + // Now on to the actual test + $this->assertEquals(1, $this->notifications->get_notification_type_id('group_request')); $group_id = false; @@ -56,9 +58,6 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas // Add user 1 as group leader group_user_add($group_id, 2, false, false, false, true, false); - // Add notifications for group requests for user 1 - //$this->notifications->add_subscription('group_request', 0, '', 2); - // Add user 2 as pending group_user_add($group_id, 3, false, false, false, false, true); From 9573b36b3278aa374a7ea4fa72e6a81c459623b2 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 13:23:33 -0500 Subject: [PATCH 07/18] [ticket/11744] Include once PHPBB3-11744 --- tests/notification/group_request_test.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php index 25c5406000..dffdc771b1 100644 --- a/tests/notification/group_request_test.php +++ b/tests/notification/group_request_test.php @@ -30,9 +30,9 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas { global $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_log; - include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); - include($phpbb_root_path . 'includes/functions_user.' . $phpEx); - include($phpbb_root_path . 'includes/functions_content.' . $phpEx); + include_once($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); + include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); + include_once($phpbb_root_path . 'includes/functions_content.' . $phpEx); set_config(false, false, false, $this->config); From 185d4e112e2f1d01364aad36eb540294fa7c953b Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 14:11:42 -0500 Subject: [PATCH 08/18] [ticket/11744] Fix functional test case that's failing PHPBB3-11744 --- tests/test_framework/phpbb_functional_test_case.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index de3611c4cc..d1dab4c148 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -533,12 +533,9 @@ class phpbb_functional_test_case extends phpbb_test_case $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); - $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); - $phpbb_container - ->expects($this->any()) - ->method('get') - ->with('cache.driver') - ->will($this->returnValue($cache_driver)); + $phpbb_container = new phpbb_mock_container_builder(); + $phpbb_container->set('cache.driver', $cache_driver); + $phpbb_container->set('notification_manager', new phpbb_mock_notification_manager()); if (!function_exists('utf_clean_string')) { From 4f0dd9a752c79004acdfbedce92234c6818b9765 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 14:51:46 -0500 Subject: [PATCH 09/18] [ticket/11744] Tables are not truncated in some dbms during tests PHPBB3-11744 --- tests/notification/group_request_test.php | 3 --- tests/notification/notification_test.php | 16 ++++++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php index dffdc771b1..d36864cc27 100644 --- a/tests/notification/group_request_test.php +++ b/tests/notification/group_request_test.php @@ -50,8 +50,6 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas // Now on to the actual test - $this->assertEquals(1, $this->notifications->get_notification_type_id('group_request')); - $group_id = false; group_create($group_id, GROUP_OPEN, 'test', 'test group', array()); @@ -68,7 +66,6 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas $expected = array( 1 => array( - 'notification_type_id' => 1, 'item_id' => 3, // user_id of requesting join 'item_parent_id' => $group_id, 'user_id' => 2, diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php index 39073c2602..94453fe201 100644 --- a/tests/notification/notification_test.php +++ b/tests/notification/notification_test.php @@ -21,14 +21,14 @@ class phpbb_notification_test extends phpbb_tests_notification_base public function test_get_notification_type_id() { // They should be inserted the first time - $this->assertEquals(1, $this->notifications->get_notification_type_id('post')); - $this->assertEquals(2, $this->notifications->get_notification_type_id('quote')); - $this->assertEquals(3, $this->notifications->get_notification_type_id('test')); + $post_type_id = $this->notifications->get_notification_type_id('post'); + $quote_type_id = $this->notifications->get_notification_type_id('quote'); + $test_type_id = $this->notifications->get_notification_type_id('test'); $this->assertEquals(array( - 'test' => 3, - 'quote' => 2, - 'post' => 1, + 'test' => $test_type_id, + 'quote' => $quote_type_id, + 'post' => $post_type_id, ), $this->notifications->get_notification_type_ids(array( 'test', @@ -36,11 +36,11 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'post', ) )); - $this->assertEquals(2, $this->notifications->get_notification_type_id('quote')); + $this->assertEquals($quote_type_id, $this->notifications->get_notification_type_id('quote')); try { - $this->assertEquals(3, $this->notifications->get_notification_type_id('fail')); + $this->assertEquals(false, $this->notifications->get_notification_type_id('fail')); $this->fail('Non-existent type should throw an exception'); } From f2ad22439fd0a5ea47bd2d4ee22c51f663949a8b Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 15:00:45 -0500 Subject: [PATCH 10/18] [ticket/11744] Empty notifications tables after testing them PHPBB3-11744 --- tests/notification/base.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/notification/base.php b/tests/notification/base.php index ab92f88262..3560ac6fcd 100644 --- a/tests/notification/base.php +++ b/tests/notification/base.php @@ -96,6 +96,15 @@ abstract class phpbb_tests_notification_base extends phpbb_database_test_case $this->notifications->set_var('notification_types', $types); } + protected function tearDown() + { + $this->db->sql_query('DELETE FROM phpbb_notification_types'); + $this->db->sql_query('DELETE FROM phpbb_notifications'); + $this->db->sql_query('DELETE FROM phpbb_user_notifications'); + + parent::tearDown(); + } + protected function build_type($type) { global $phpbb_root_path, $phpEx; From 7dd16f4148890a2c1f52eeb9c660afe2fb85d23c Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 15:44:49 -0500 Subject: [PATCH 11/18] [ticket/11744] spelling PHPBB3-11744 --- tests/test_framework/phpbb_database_test_connection_manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_framework/phpbb_database_test_connection_manager.php b/tests/test_framework/phpbb_database_test_connection_manager.php index c93a777701..9d2cfebd29 100644 --- a/tests/test_framework/phpbb_database_test_connection_manager.php +++ b/tests/test_framework/phpbb_database_test_connection_manager.php @@ -138,7 +138,7 @@ class phpbb_database_test_connection_manager catch (PDOException $e) { $cleaned_dsn = str_replace($this->config['dbpasswd'], '*password*', $dsn); - throw new Exception("Unable do connect to $cleaned_dsn using PDO with error: {$e->getMessage()}"); + throw new Exception("Unable to connect to $cleaned_dsn using PDO with error: {$e->getMessage()}"); } $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); From 49c6e835605a6f36c050cda2e92646941668e415 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Fri, 26 Jul 2013 17:27:52 -0500 Subject: [PATCH 12/18] [ticket/11744] Fix tests for postgresql PHPBB3-11744 --- tests/notification/base.php | 5 -- tests/notification/group_request_test.php | 16 +++--- tests/notification/notification_test.php | 60 +++++++++-------------- 3 files changed, 31 insertions(+), 50 deletions(-) diff --git a/tests/notification/base.php b/tests/notification/base.php index 3560ac6fcd..f8c39934bb 100644 --- a/tests/notification/base.php +++ b/tests/notification/base.php @@ -94,15 +94,10 @@ abstract class phpbb_tests_notification_base extends phpbb_database_test_case } $this->notifications->set_var('notification_types', $types); - } - protected function tearDown() - { $this->db->sql_query('DELETE FROM phpbb_notification_types'); $this->db->sql_query('DELETE FROM phpbb_notifications'); $this->db->sql_query('DELETE FROM phpbb_user_notifications'); - - parent::tearDown(); } protected function build_type($type) diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php index d36864cc27..d61c4adf38 100644 --- a/tests/notification/group_request_test.php +++ b/tests/notification/group_request_test.php @@ -65,7 +65,7 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas )); $expected = array( - 1 => array( + array( 'item_id' => 3, // user_id of requesting join 'item_parent_id' => $group_id, 'user_id' => 2, @@ -78,16 +78,16 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas $this->assertEquals(sizeof($expected), $notifications['unread_count']); - $notifications = $notifications['notifications']; - - foreach ($expected as $notification_id => $notification_data) + $i = 0; + foreach ($notifications['notifications'] as $notification) { - $this->assertEquals($notification_id, $notifications[$notification_id]->notification_id, 'notification_id'); - - foreach ($notification_data as $key => $value) + foreach ($expected[$i] as $notification_data) { - $this->assertEquals($value, $notifications[$notification_id]->$key, $key . ' ' . $notification_id); + $this->assertEquals($value, $notification->$key, $key . ' ' . $i); } + + $i++; } + } } diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php index 94453fe201..b8dc9a9042 100644 --- a/tests/notification/notification_test.php +++ b/tests/notification/notification_test.php @@ -165,8 +165,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base )); $expected = array( - 1 => array( - 'notification_type_id' => 4, + array( 'item_id' => 1, 'item_parent_id' => 1, 'user_id' => 0, @@ -174,8 +173,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1349413321, 'notification_data' => array(), ), - 2 => array( - 'notification_type_id' => 4, + array( 'item_id' => 2, 'item_parent_id' => 2, 'user_id' => 0, @@ -183,8 +181,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1349413322, 'notification_data' => array(), ), - 3 => array( - 'notification_type_id' => 4, + array( 'item_id' => 3, 'item_parent_id' => 2, 'user_id' => 0, @@ -192,8 +189,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1349413323, 'notification_data' => array(), ), - 4 => array( - 'notification_type_id' => 3, + array( 'item_id' => 4, 'item_parent_id' => 2, 'user_id' => 0, @@ -208,8 +204,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'forum_name' => 'Your first forum', ), ), - 5 => array( - 'notification_type_id' => 2, + array( 'item_id' => 5, 'item_parent_id' => 2, 'user_id' => 0, @@ -228,18 +223,15 @@ class phpbb_notification_test extends phpbb_tests_notification_base $this->assertEquals(sizeof($expected), $notifications['unread_count']); - $notifications = $notifications['notifications']; - - foreach ($expected as $notification_id => $notification_data) + $i = 0; + foreach ($notifications['notifications'] as $notification) { - //echo $notifications[$notification_id]; - - $this->assertEquals($notification_id, $notifications[$notification_id]->notification_id, 'notification_id'); - - foreach ($notification_data as $key => $value) + foreach ($expected[$i] as $notification_data) { - $this->assertEquals($value, $notifications[$notification_id]->$key, $key . ' ' . $notification_id); + $this->assertEquals($value, $notification->$key, $key . ' ' . $i); } + + $i++; } // Now test updating ------------------------------- @@ -271,8 +263,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base )); $expected = array( - 1 => array( - 'notification_type_id' => 4, + array( 'item_id' => 1, 'item_parent_id' => 2, 'user_id' => 0, @@ -280,8 +271,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1349413321, 'notification_data' => array(), ), - 2 => array( - 'notification_type_id' => 4, + array( 'item_id' => 2, 'item_parent_id' => 2, 'user_id' => 0, @@ -289,7 +279,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1349413322, 'notification_data' => array(), ), - 3 => array( + array( 'notification_type_id' => 4, 'item_id' => 3, 'item_parent_id' => 2, @@ -298,8 +288,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'notification_time' => 1234, 'notification_data' => array(), ), - 4 => array( - 'notification_type_id' => 3, + array( 'item_id' => 4, 'item_parent_id' => 2, 'user_id' => 0, @@ -314,8 +303,7 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'forum_name' => 'Your first forum', ), ), - 5 => array( - 'notification_type_id' => 2, + array( 'item_id' => 5, 'item_parent_id' => 2, 'user_id' => 0, @@ -334,18 +322,16 @@ class phpbb_notification_test extends phpbb_tests_notification_base $this->assertEquals(sizeof($expected), $notifications['unread_count']); - $notifications = $notifications['notifications']; - - foreach ($expected as $notification_id => $notification_data) + $i = 0; + foreach ($notifications['notifications'] as $notification) { - //echo $notifications[$notification_id]; - - $this->assertEquals($notification_id, $notifications[$notification_id]->notification_id, 'notification_id'); - - foreach ($notification_data as $key => $value) + foreach ($expected[$i] as $notification_data) { - $this->assertEquals($value, $notifications[$notification_id]->$key, $key . ' ' . $notification_id); + $this->assertEquals($value, $notification->$key, $key . ' ' . $i); } + + $i++; } + } } From 7cfb04690de08b10752b8881f918ce9e476bb6ab Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 27 Jul 2013 09:07:23 -0500 Subject: [PATCH 13/18] [ticket/11744] Copyright year PHPBB3-11744 --- tests/notification/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/notification/base.php b/tests/notification/base.php index f8c39934bb..5ef6fcebad 100644 --- a/tests/notification/base.php +++ b/tests/notification/base.php @@ -2,7 +2,7 @@ /** * * @package testing -* @copyright (c) 2012 phpBB Group +* @copyright (c) 2013 phpBB Group * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ From 93db6190f582b2af41d3bf643758e48772ea9ba0 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 27 Jul 2013 09:08:35 -0500 Subject: [PATCH 14/18] [ticket/11744] Language PHPBB3-11744 --- phpBB/language/en/common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 8ababfcd2a..cdaf8269ed 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -414,7 +414,7 @@ $lang = array_merge($lang, array( 2 => '%d Notifications', ), 'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.', - 'NOTIFICATION_GROUP_REQUEST' => '%1$s is requesting to join the group you manage, %2$s.', + 'NOTIFICATION_GROUP_REQUEST' => '%1$s is requesting to join the group %2$s.', 'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".', 'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".', 'NOTIFICATION_POST_APPROVED' => 'Your post was approved "%2$s".', From b213be84a7ff0f947de0025dcc4620142edf226b Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 27 Jul 2013 09:09:24 -0500 Subject: [PATCH 15/18] [ticket/11744] Comments PHPBB3-11744 --- phpBB/phpbb/notification/manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php index 4e6028ec3f..acfc984ddc 100644 --- a/phpBB/phpbb/notification/manager.php +++ b/phpBB/phpbb/notification/manager.php @@ -490,7 +490,7 @@ class phpbb_notification_manager * * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types) * @param int|array $item_id Identifier within the type (or array of ids) - * @param bool|int|array $parent_id Parent identifier within the type (or array of ids), used in combination with item_id if specified + * @param mixed $parent_id Parent identifier within the type (or array of ids), used in combination with item_id if specified (Default: false; not checked) */ public function delete_notifications($notification_type_name, $item_id, $parent_id = false) { From 359aedf664b41d553665d62243d7943293b79d96 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 27 Jul 2013 19:31:31 -0500 Subject: [PATCH 16/18] [ticket/11744] Helper function to assert notifications in base test This also fixes tests PHPBB3-11744 --- tests/notification/base.php | 22 ++ tests/notification/group_request_test.php | 43 ++-- tests/notification/notification_test.php | 248 ++++++++++------------ 3 files changed, 145 insertions(+), 168 deletions(-) diff --git a/tests/notification/base.php b/tests/notification/base.php index 5ef6fcebad..8de162a1fb 100644 --- a/tests/notification/base.php +++ b/tests/notification/base.php @@ -106,4 +106,26 @@ abstract class phpbb_tests_notification_base extends phpbb_database_test_case return new $type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications'); } + + protected function assert_notifications($expected, $options = array()) + { + $notifications = $this->notifications->load_notifications(array_merge(array( + 'count_unread' => true, + 'order_by' => 'notification_time', + 'order_dir' => 'ASC', + ), $options)); + + $this->assertEquals(sizeof($expected), $notifications['unread_count']); + + $i = 0; + foreach ($notifications['notifications'] as $notification) + { + foreach ($expected[$i] as $key => $value) + { + $this->assertEquals($value, $notification->$key, $i . ' ' . $key); + } + + $i++; + } + } } diff --git a/tests/notification/group_request_test.php b/tests/notification/group_request_test.php index d61c4adf38..3606a6455c 100644 --- a/tests/notification/group_request_test.php +++ b/tests/notification/group_request_test.php @@ -53,41 +53,28 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas $group_id = false; group_create($group_id, GROUP_OPEN, 'test', 'test group', array()); - // Add user 1 as group leader + // Add user 2 as group leader group_user_add($group_id, 2, false, false, false, true, false); - // Add user 2 as pending + // Add user 3 as pending group_user_add($group_id, 3, false, false, false, false, true); - $notifications = $this->notifications->load_notifications(array( - 'count_unread' => true, - 'user_id' => 2, - )); - - $expected = array( + $this->assert_notifications( array( - 'item_id' => 3, // user_id of requesting join - 'item_parent_id' => $group_id, - 'user_id' => 2, - 'notification_read' => 0, - 'notification_data' => array( - 'group_name' => 'test', + // user 3 pending notification + array( + 'item_id' => 3, // user_id of requesting join + 'item_parent_id' => $group_id, + 'user_id' => 2, + 'notification_read' => 0, + 'notification_data' => array( + 'group_name' => 'test', + ), ), ), + array( + 'user_id' => 2, + ) ); - - $this->assertEquals(sizeof($expected), $notifications['unread_count']); - - $i = 0; - foreach ($notifications['notifications'] as $notification) - { - foreach ($expected[$i] as $notification_data) - { - $this->assertEquals($value, $notification->$key, $key . ' ' . $i); - } - - $i++; - } - } } diff --git a/tests/notification/notification_test.php b/tests/notification/notification_test.php index b8dc9a9042..e1788e8670 100644 --- a/tests/notification/notification_test.php +++ b/tests/notification/notification_test.php @@ -160,80 +160,65 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'post_time' => 1349413326, )); - $notifications = $this->notifications->load_notifications(array( - 'count_unread' => true, - )); - - $expected = array( + $this->assert_notifications( array( - 'item_id' => 1, - 'item_parent_id' => 1, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413321, - 'notification_data' => array(), - ), - array( - 'item_id' => 2, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413322, - 'notification_data' => array(), - ), - array( - 'item_id' => 3, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413323, - 'notification_data' => array(), - ), - array( - 'item_id' => 4, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413324, - 'notification_data' => array( - 'poster_id' => 2, - 'topic_title' => 'test-title', - 'post_subject' => 'Re: test-title', - 'post_username' => '', - 'forum_id' => 2, - 'forum_name' => 'Your first forum', + array( + 'item_id' => 1, + 'item_parent_id' => 1, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413321, + 'notification_data' => array(), ), - ), - array( - 'item_id' => 5, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413325, - 'notification_data' => array( - 'poster_id' => 2, - 'topic_title' => 'test-title', - 'post_subject' => 'Re: test-title', - 'post_username' => '', - 'forum_id' => 2, - 'forum_name' => 'Your first forum', + array( + 'item_id' => 2, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413322, + 'notification_data' => array(), ), - ), + array( + 'item_id' => 3, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413323, + 'notification_data' => array(), + ), + array( + 'item_id' => 4, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413324, + 'notification_data' => array( + 'poster_id' => 2, + 'topic_title' => 'test-title', + 'post_subject' => 'Re: test-title', + 'post_username' => '', + 'forum_id' => 2, + 'forum_name' => 'Your first forum', + ), + ), + array( + 'item_id' => 5, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413325, + 'notification_data' => array( + 'poster_id' => 2, + 'topic_title' => 'test-title', + 'post_subject' => 'Re: test-title', + 'post_username' => '', + 'forum_id' => 2, + 'forum_name' => 'Your first forum', + ), + ), + ) ); - $this->assertEquals(sizeof($expected), $notifications['unread_count']); - - $i = 0; - foreach ($notifications['notifications'] as $notification) - { - foreach ($expected[$i] as $notification_data) - { - $this->assertEquals($value, $notification->$key, $key . ' ' . $i); - } - - $i++; - } - // Now test updating ------------------------------- $this->notifications->update_notifications('test', array( @@ -258,80 +243,63 @@ class phpbb_notification_test extends phpbb_tests_notification_base 'forum_name' => 'Your second forum', // change forum_name )); - $notifications = $this->notifications->load_notifications(array( - 'count_unread' => true, - )); - - $expected = array( + $this->assert_notifications( array( - 'item_id' => 1, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413321, - 'notification_data' => array(), - ), - array( - 'item_id' => 2, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413322, - 'notification_data' => array(), - ), - array( - 'notification_type_id' => 4, - 'item_id' => 3, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1234, - 'notification_data' => array(), - ), - array( - 'item_id' => 4, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413324, - 'notification_data' => array( - 'poster_id' => 2, - 'topic_title' => 'test-title', - 'post_subject' => 'Re: test-title', - 'post_username' => '', - 'forum_id' => 2, - 'forum_name' => 'Your first forum', + array( + 'item_id' => 3, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1234, + 'notification_data' => array(), ), - ), - array( - 'item_id' => 5, - 'item_parent_id' => 2, - 'user_id' => 0, - 'notification_read' => 0, - 'notification_time' => 1349413325, - 'notification_data' => array( - 'poster_id' => 2, - 'topic_title' => 'test-title2', - 'post_subject' => 'Re: test-title2', - 'post_username' => '', - 'forum_id' => 3, - 'forum_name' => 'Your second forum', + array( + 'item_id' => 1, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413321, + 'notification_data' => array(), ), - ), + array( + 'item_id' => 2, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413322, + 'notification_data' => array(), + ), + array( + 'item_id' => 4, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413324, + 'notification_data' => array( + 'poster_id' => 2, + 'topic_title' => 'test-title', + 'post_subject' => 'Re: test-title', + 'post_username' => '', + 'forum_id' => 2, + 'forum_name' => 'Your first forum', + ), + ), + array( + 'item_id' => 5, + 'item_parent_id' => 2, + 'user_id' => 0, + 'notification_read' => 0, + 'notification_time' => 1349413325, + 'notification_data' => array( + 'poster_id' => 2, + 'topic_title' => 'test-title2', + 'post_subject' => 'Re: test-title2', + 'post_username' => '', + 'forum_id' => 3, + 'forum_name' => 'Your second forum', + ), + ), + ) ); - - $this->assertEquals(sizeof($expected), $notifications['unread_count']); - - $i = 0; - foreach ($notifications['notifications'] as $notification) - { - foreach ($expected[$i] as $notification_data) - { - $this->assertEquals($value, $notification->$key, $key . ' ' . $i); - } - - $i++; - } - } } From 28daa60e9e7438e663d6579a0dbbd834dba245b5 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sun, 28 Jul 2013 21:10:17 -0500 Subject: [PATCH 17/18] [ticket/11744] Inheritdoc PHPBB3-11744 --- phpBB/phpbb/log/null.php | 61 +++++----------------------------------- 1 file changed, 7 insertions(+), 54 deletions(-) diff --git a/phpBB/phpbb/log/null.php b/phpBB/phpbb/log/null.php index 9837058ef5..14b5f65eec 100644 --- a/phpBB/phpbb/log/null.php +++ b/phpBB/phpbb/log/null.php @@ -23,12 +23,7 @@ if (!defined('IN_PHPBB')) class phpbb_log_null implements phpbb_log_interface { /** - * This function returns the state of the log system. - * - * @param string $type The log type we want to check. Empty to get - * global log status. - * - * @return bool True if log for the type is enabled + * {@inheritdoc} */ public function is_enabled($type = '') { @@ -36,46 +31,21 @@ class phpbb_log_null implements phpbb_log_interface } /** - * Disable log - * - * This function allows disabling the log system or parts of it, for this - * page call. When add_log is called and the type is disabled, - * the log will not be added to the database. - * - * @param mixed $type The log type we want to disable. Empty to - * disable all logs. Can also be an array of types. - * - * @return null + * {@inheritdoc} */ public function disable($type = '') { } /** - * Enable log - * - * This function allows re-enabling the log system. - * - * @param mixed $type The log type we want to enable. Empty to - * enable all logs. Can also be an array of types. - * - * @return null + * {@inheritdoc} */ public function enable($type = '') { } /** - * Adds a log entry to the database - * - * @param string $mode The mode defines which log_type is used and from which log the entry is retrieved - * @param int $user_id User ID of the user - * @param string $log_ip IP address of the user - * @param string $log_operation Name of the operation - * @param int $log_time Timestamp when the log entry was added, if empty time() will be used - * @param array $additional_data More arguments can be added, depending on the log_type - * - * @return int|bool Returns the log_id, if the entry was added to the database, false otherwise. + * {@inheritdoc} */ public function add($mode, $user_id, $log_ip, $log_operation, $log_time = false, $additional_data = array()) { @@ -83,20 +53,7 @@ class phpbb_log_null implements phpbb_log_interface } /** - * Grab the logs from the database - * - * @param string $mode The mode defines which log_type is used and ifrom which log the entry is retrieved - * @param bool $count_logs Shall we count all matching log entries? - * @param int $limit Limit the number of entries that are returned - * @param int $offset Offset when fetching the log entries, f.e. when paginating - * @param mixed $forum_id Restrict the log entries to the given forum_id (can also be an array of forum_ids) - * @param int $topic_id Restrict the log entries to the given topic_id - * @param int $user_id Restrict the log entries to the given user_id - * @param int $log_time Only get log entries newer than the given timestamp - * @param string $sort_by SQL order option, e.g. 'l.log_time DESC' - * @param string $keywords Will only return log entries that have the keywords in log_operation or log_data - * - * @return array The result array with the logs + * {@inheritdoc} */ public function get_logs($mode, $count_logs = true, $limit = 0, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $log_time = 0, $sort_by = 'l.log_time DESC', $keywords = '') { @@ -104,9 +61,7 @@ class phpbb_log_null implements phpbb_log_interface } /** - * Get total log count - * - * @return int Returns the number of matching logs from the last call to get_logs() + * {@inheritdoc} */ public function get_log_count() { @@ -114,9 +69,7 @@ class phpbb_log_null implements phpbb_log_interface } /** - * Get offset of the last valid page - * - * @return int Returns the offset of the last valid page from the last call to get_logs() + * {@inheritdoc} */ public function get_valid_offset() { From cbe72ab14b528ebd986dc6fdc1d8b247ebba0df8 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sun, 28 Jul 2013 21:15:58 -0500 Subject: [PATCH 18/18] [ticket/11744] Cast to int PHPBB3-11744 --- phpBB/phpbb/notification/type/group_request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/phpbb/notification/type/group_request.php b/phpBB/phpbb/notification/type/group_request.php index 96015783fb..490b9e16a3 100644 --- a/phpBB/phpbb/notification/type/group_request.php +++ b/phpBB/phpbb/notification/type/group_request.php @@ -82,7 +82,7 @@ class phpbb_notification_type_group_request extends phpbb_notification_type_base $user_ids = array(); while ($row = $this->db->sql_fetchrow($result)) { - $user_ids[] = $row['user_id']; + $user_ids[] = (int) $row['user_id']; } $this->db->sql_freeresult($result);