diff options
-rw-r--r-- | phpBB/includes/ucp/ucp_attachments.php | 7 | ||||
-rw-r--r-- | phpBB/includes/ucp/ucp_groups.php | 305 | ||||
-rw-r--r-- | phpBB/includes/ucp/ucp_pm_compose.php | 10 | ||||
-rw-r--r-- | phpBB/includes/ucp/ucp_pm_options.php | 16 | ||||
-rw-r--r-- | phpBB/includes/ucp/ucp_register.php | 7 | ||||
-rw-r--r-- | phpBB/language/en/admin.php | 1 | ||||
-rw-r--r-- | phpBB/language/en/email/group_added.txt | 4 | ||||
-rw-r--r-- | phpBB/language/en/email/group_request.txt | 6 | ||||
-rw-r--r-- | phpBB/language/en/groups.php | 51 | ||||
-rw-r--r-- | phpBB/styles/subSilver/template/index_body.html | 2 | ||||
-rw-r--r-- | phpBB/styles/subSilver/template/memberlist_search.html | 6 | ||||
-rw-r--r-- | phpBB/styles/subSilver/template/ucp_groups_manage.html | 140 | ||||
-rw-r--r-- | phpBB/styles/subSilver/template/ucp_groups_membership.html | 61 |
13 files changed, 456 insertions, 160 deletions
diff --git a/phpBB/includes/ucp/ucp_attachments.php b/phpBB/includes/ucp/ucp_attachments.php index 2e479b0654..9e8cd2d2e8 100644 --- a/phpBB/includes/ucp/ucp_attachments.php +++ b/phpBB/includes/ucp/ucp_attachments.php @@ -26,10 +26,11 @@ class ucp_attachments extends module if ($delete && sizeof($delete_ids)) { - $s_hidden_fields = '<input type="hidden" name="delete" value="1" />'; + $s_hidden_fields = array('delete' => 1); + foreach ($delete_ids as $attachment_id) { - $s_hidden_fields .= '<input type="hidden" name="attachment[' . $attachment_id . ']" value="1" />'; + $s_hidden_fields['attachment'][$attachment_id] = 1; } if (confirm_box(true)) @@ -44,7 +45,7 @@ class ucp_attachments extends module } else { - confirm_box(false, (sizeof($delete_ids) == 1) ? 'DELETE_ATTACHMENT' : 'DELETE_ATTACHMENTS', $s_hidden_fields); + confirm_box(false, (sizeof($delete_ids) == 1) ? 'DELETE_ATTACHMENT' : 'DELETE_ATTACHMENTS', build_hidden_fields($s_hidden_fields)); } } diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index 68b6ad1c68..dbcd859997 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -20,6 +20,8 @@ class ucp_groups extends module $user->add_lang('groups'); + $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode\">", '</a>'); + $submit = (!empty($_POST['submit'])) ? true : false; $delete = (!empty($_POST['delete'])) ? true : false; $error = $data = array(); @@ -28,6 +30,223 @@ class ucp_groups extends module { case 'membership': + if ($submit || isset($_POST['change_default'])) + { + $action = (isset($_POST['change_default'])) ? 'change_default' : request_var('action', ''); + $group_id = ($action == 'change_default') ? request_var('default', 0) : request_var('selected', 0); + + if (!$group_id) + { + trigger_error('NO_GROUP_SELECTED'); + } + + $sql = 'SELECT group_id, group_name, group_type + FROM ' . GROUPS_TABLE . " + WHERE group_id IN ($group_id, {$user->data['group_id']})"; + $result = $db->sql_query($sql); + $group_row = array(); + + while ($row = $db->sql_fetchrow($result)) + { + $group_row[$row['group_id']] = $row; + } + $db->sql_freeresult($result); + + if (!sizeof($group_row)) + { + trigger_error('GROUP_NOT_EXIST'); + } + + $group_row[$group_id]['group_name'] = ($group_row[$group_id]['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row[$group_id]['group_name']] : $group_row[$group_id]['group_name']; + $group_row[$user->data['group_id']]['group_name'] = ($group_row[$user->data['group_id']]['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row[$user->data['group_id']]['group_name']] : $group_row[$user->data['group_id']]['group_name']; + + + switch ($action) + { + case 'change_default': + // User already having this group set as default? + if ($group_id == $user->data['group_id']) + { + trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page); + } + + // User needs to be member of the group in order to make it default + if (!group_memberships($group_id, $user->data['user_id'], true)) + { + trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); + } + + if (confirm_box(true)) + { + group_user_attributes('default', $group_id, $user->data['user_id']); + + add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_CHANGE', sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$group_id]['group_name'], $group_row[$user->data['group_id']]['group_name'])); + + meta_refresh(3, $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode"); + trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page); + } + else + { + $s_hidden_fields = array( + 'default' => $group_id, + 'change_default'=> true + ); + + confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields)); + } + + break; + + case 'resign': + + if (!($row = group_memberships($group_id, $user->data['user_id']))) + { + trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); + } + list(, $row) = each($row); + + if (confirm_box(true)) + { + group_user_del($group_id, $user->data['user_id']); + + add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_RESIGN', $group_row[$group_id]['group_name']); + + meta_refresh(3, $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode"); + trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page); + } + else + { + $s_hidden_fields = array( + 'selected' => $group_id, + 'action' => 'resign', + 'submit' => true + ); + + confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields)); + } + + break; + + case 'join': + + if (group_memberships($group_id, $user->data['user_id'], true)) + { + trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page); + } + + // Check permission to join (open group or request) + if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE) + { + trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page); + } + + if (confirm_box(true)) + { + if ($group_row[$group_id]['group_type'] == GROUP_FREE) + { + group_user_add($group_id, $user->data['user_id']); + + $email_template = 'group_added'; + } + else + { + group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1); + + $email_template = 'group_request'; + } + + include_once($phpbb_root_path . 'includes/functions_messenger.'.$phpEx); + $messenger = new messenger(); + + $email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']); + + $sql = 'SELECT u.username, 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 ' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? "ug.user_id = {$user->data['user_id']}" : 'ug.group_leader = 1') . " + AND ug.group_id = $group_id"; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $messenger->template($email_template, $row['user_lang']); + + $messenger->replyto($config['board_email']); + $messenger->to($row['user_email'], $row['username']); + $messenger->im($row['user_jabber'], $row['username']); + + $messenger->assign_vars(array( + 'EMAIL_SIG' => $email_sig, + 'SITENAME' => $config['sitename'], + 'USERNAME' => $row['username'], + 'GROUP_NAME' => $group_row[$group_id]['group_name'], + + 'U_PENDING' => generate_board_url() . "/ucp.$phpEx?i=usergroups&mode=manage", + 'U_GROUP' => generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id") + ); + + $messenger->send($row['user_notify_type']); + $messenger->reset(); + } + $db->sql_freeresult($result); + + $messenger->save_queue(); + + 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']); + + meta_refresh(3, $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode"); + trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page); + } + else + { + $s_hidden_fields = array( + 'selected' => $group_id, + 'action' => 'join', + 'submit' => true + ); + + confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields)); + } + + break; + + case 'demote': + + if (!($row = group_memberships($group_id, $user->data['user_id']))) + { + trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); + } + list(, $row) = each($row); + + if (!$row['group_leader']) + { + trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page); + } + + if (confirm_box(true)) + { + group_user_attributes('demote', $group_id, $user->data['user_id']); + + add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_DEMOTE', $group_row[$group_id]['group_name']); + + meta_refresh(3, $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode"); + trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page); + } + else + { + $s_hidden_fields = array( + 'selected' => $group_id, + 'action' => 'demote', + 'submit' => true + ); + + confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields)); + } + + break; + } + } + $sql = 'SELECT g.group_id, g.group_name, g.group_description, g.group_type, ug.group_leader, ug.user_pending FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug WHERE ug.user_id = ' . $user->data['user_id'] . ' @@ -41,16 +260,40 @@ class ucp_groups extends module { $block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member'); + switch ($row['group_type']) + { + case GROUP_OPEN: + $group_status = 'OPEN'; + break; + + case GROUP_CLOSED: + $group_status = 'CLOSED'; + break; + + case GROUP_HIDDEN: + $group_status = 'HIDDEN'; + break; + + case GROUP_SPECIAL: + $group_status = 'SPECIAL'; + break; + + case GROUP_FREE: + $group_status = 'FREE'; + break; + } + $template->assign_block_vars($block, array( 'GROUP_ID' => $row['group_id'], 'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 'GROUP_DESC' => ($row['group_type'] <> GROUP_SPECIAL) ? $row['group_description'] : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true, + 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], - 'U_VIEW_GROUP' => "memberlist.$phpEx$SID&mode=group&g=" . $row['group_id'], + 'U_VIEW_GROUP' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=group&g={$row['group_id']}", 'S_GROUP_DEFAULT' => ($row['group_id'] == $user->data['group_id']) ? true : false, - 'S_ROW_COUNT' => ${$block . '_count'}++,) + 'S_ROW_COUNT' => ${$block . '_count'}++) ); $group_id_ary[] = $row['group_id']; @@ -69,17 +312,41 @@ class ucp_groups extends module $nonmember_count = 0; while ($row = $db->sql_fetchrow($result)) { + switch ($row['group_type']) + { + case GROUP_OPEN: + $group_status = 'OPEN'; + break; + + case GROUP_CLOSED: + $group_status = 'CLOSED'; + break; + + case GROUP_HIDDEN: + $group_status = 'HIDDEN'; + break; + + case GROUP_SPECIAL: + $group_status = 'SPECIAL'; + break; + + case GROUP_FREE: + $group_status = 'FREE'; + break; + } $template->assign_block_vars('nonmember', array( 'GROUP_ID' => $row['group_id'], 'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'], - 'GROUP_DESC' => $row['group_description'], + 'GROUP_DESC' => ($row['group_type'] <> GROUP_SPECIAL) ? $row['group_description'] : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true, 'GROUP_CLOSED' => ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true, + 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], + 'S_CAN_JOIN' => ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false, - 'U_VIEW_GROUP' => "memberlist.$phpEx$SID&mode=group&g=" . $row['group_id'], + 'U_VIEW_GROUP' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=group&g={$row['group_id']}", - 'S_ROW_COUNT' => $nonmember_count++,) + 'S_ROW_COUNT' => $nonmember_count++) ); } $db->sql_freeresult($result); @@ -89,7 +356,9 @@ class ucp_groups extends module 'S_LEADER_COUNT' => $leader_count, 'S_MEMBER_COUNT' => $member_count, 'S_PENDING_COUNT' => $pending_count, - 'S_NONMEMBER_COUNT' => $nonmember_count,) + 'S_NONMEMBER_COUNT' => $nonmember_count, + + 'S_UCP_ACTION' => "{$phpbb_root_path}ucp.$phpEx$SID&i=$id&mode=$mode") ); break; @@ -98,30 +367,8 @@ class ucp_groups extends module break; } - $this->display($user->lang['UCP_GROUPS'], 'ucp_groups_' . $mode . '.html'); + $this->display($user->lang['UCP_GROUPS_' . strtoupper($mode)], 'ucp_groups_' . $mode . '.html'); } } -/* - include($phpbb_root_path . 'includes/emailer.'.$phpEx); - $emailer = new emailer($config['smtp_delivery']); - - $email_headers = 'From: ' . $config['board_email'] . "\nReturn-Path: " . $config['board_email'] . "\r\n"; - - $emailer->use_template('group_request', $moderator['user_lang']); - $emailer->email_address($moderator['user_email']); - $emailer->set_subject();//$lang['Group_request'] - $emailer->extra_headers($email_headers); - - $emailer->assign_vars(array( - 'SITENAME' => $config['sitename'], - 'GROUP_MODERATOR' => $moderator['username'], - 'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']), - - 'U_GROUPCP' => $server_url . '?' . 'g' . "=$group_id&validate=true") - ); - $emailer->send(); - $emailer->reset(); -*/ - ?>
\ No newline at end of file diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index 80a9c7676e..e1302bf470 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -244,8 +244,6 @@ function compose_pm($id, $mode, $action) // Folder id has been determined by the SQL Statement // $folder_id = request_var('f', PRIVMSGS_NO_BOX); - $s_hidden_fields = '<input type="hidden" name="p" value="' . $msg_id . '" /><input type="hidden" name="f" value="' . $folder_id . '" /><input type="hidden" name="action" value="delete" />'; - // Do we need to confirm ? if (confirm_box(true)) { @@ -261,8 +259,14 @@ function compose_pm($id, $mode, $action) } else { + $s_hidden_fields = array( + 'p' => $msg_id, + 'f' => $folder_id, + 'action'=> 'delete' + ); + // "{$phpbb_root_path}ucp.$phpEx$SID&i=pm&mode=compose" - confirm_box(false, 'DELETE_MESSAGE', $s_hidden_fields); + confirm_box(false, 'DELETE_MESSAGE', build_hidden_fields($s_hidden_fields)); } } diff --git a/phpBB/includes/ucp/ucp_pm_options.php b/phpBB/includes/ucp/ucp_pm_options.php index 129c6cb84f..bb0a22102b 100644 --- a/phpBB/includes/ucp/ucp_pm_options.php +++ b/phpBB/includes/ucp/ucp_pm_options.php @@ -158,10 +158,12 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit trigger_error('CANNOT_REMOVE_FOLDER'); } - $s_hidden_fields = '<input type="hidden" name="remove_folder_id" value="' . $remove_folder_id . '" />'; - $s_hidden_fields .= '<input type="hidden" name="remove_action" value="' . $remove_action . '" />'; - $s_hidden_fields .= '<input type="hidden" name="move_to" value="' . $move_to . '" />'; - $s_hidden_fields .= '<input type="hidden" name="remove_folder" value="1" />'; + $s_hidden_fields = array( + 'remove_folder_id' => $remove_folder_id, + 'remove_action' => $remove_action, + 'move_to' => $move_to, + 'remove_folder' => 1 + ); // Do we need to confirm? if (confirm_box(true)) @@ -226,7 +228,7 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit } else { - confirm_box(false, 'REMOVE_FOLDER', $s_hidden_fields); + confirm_box(false, 'REMOVE_FOLDER', build_hidden_fields($s_hidden_fields)); } } @@ -295,8 +297,6 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit redirect("{$phpbb_root_path}ucp.$phpEx$SID&i=pm&mode=$mode"); } - $s_hidden_fields = '<input type="hidden" name="delete_rule[' . $delete_id . ']" value="1" />'; - // Do we need to confirm? if (confirm_box(true)) { @@ -314,7 +314,7 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit } else { - confirm_box(false, 'DELETE_RULE', $s_hidden_fields); + confirm_box(false, 'DELETE_RULE', build_hidden_fields(array('delete_rule' => array($delete_id => 1)))); } } diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 1a0c0e5eb9..775f3650cf 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -372,8 +372,11 @@ class ucp_register extends module } } - $s_hidden_fields = '<input type="hidden" name="agreed" value="true" /><input type="hidden" name="coppa" value="' . $coppa . '" />'; - $s_hidden_fields .= '<input type="hidden" name="change_lang" value="0" />'; + $s_hidden_fields = build_hidden_fields(array( + 'agreed' => 'true', + 'coppa' => $coppa, + 'change_lang' => 0) + ); $confirm_image = ''; // Visual Confirmation - Show images diff --git a/phpBB/language/en/admin.php b/phpBB/language/en/admin.php index c566476aa1..9cc232b612 100644 --- a/phpBB/language/en/admin.php +++ b/phpBB/language/en/admin.php @@ -142,6 +142,7 @@ $lang += array( 'LOG_USER_INACTIVE' => '<b>User deactivated</b><br />» %s', 'LOG_USER_ACTIVE' => '<b>User activated</b><br />» %s', + 'LOG_USER_GROUP_CHANGE' => '<b>User changed default group</b><br />» %s', 'LOG_MASS_EMAIL' => '<b>Sent mass email</b><br />» %s', diff --git a/phpBB/language/en/email/group_added.txt b/phpBB/language/en/email/group_added.txt index 5707da9031..4f07fdb9cd 100644 --- a/phpBB/language/en/email/group_added.txt +++ b/phpBB/language/en/email/group_added.txt @@ -4,9 +4,9 @@ Charset: iso-8859-1 Congratulations, You have been added to the "{GROUP_NAME}" group on {SITENAME}. -This action was done by the group moderator or the site administrator, contact them for more information. +This action was done by a group moderator or the site administrator, contact them for more information. You can view your groups information here: -{U_GROUPCP} +{U_GROUP} {EMAIL_SIG} diff --git a/phpBB/language/en/email/group_request.txt b/phpBB/language/en/email/group_request.txt index 8da7fa9f29..7b51823067 100644 --- a/phpBB/language/en/email/group_request.txt +++ b/phpBB/language/en/email/group_request.txt @@ -1,11 +1,11 @@ Subject: A request to join your group has been made Charset: iso-8859-1 -Dear {GROUP_MODERATOR}, +Dear {USERNAME}, -A user has requested to join a group you moderator on {SITENAME}. +A user has requested to join the group "{GROUP_NAME}" you moderate on {SITENAME}. To approve or deny this request for group membership please visit the following link: -{U_GROUPCP} +{U_PENDING} {EMAIL_SIG} diff --git a/phpBB/language/en/groups.php b/phpBB/language/en/groups.php index 6570e4d3bb..c741d371b7 100644 --- a/phpBB/language/en/groups.php +++ b/phpBB/language/en/groups.php @@ -34,33 +34,48 @@ $lang += array( 'CHANGED_DEFAULT_GROUP' => 'Successfully changed default group', - 'GROUP_AVATAR' => 'Group avatar', + 'GROUP_AVATAR' => 'Group avatar', 'GROUP_CHANGE_DEFAULT' => 'Are you sure you want to change your default membership to the group "%s"?', - 'GROUP_CLOSED' => 'Closed', - 'GROUP_DESC' => 'Group description', - 'GROUP_HIDDEN' => 'Hidden', - 'GROUP_INFORMATION' => 'Usergroup Information', - 'GROUP_MEMBERS' => 'Group members', - 'GROUP_NAME' => 'Group name', - 'GROUP_OPEN' => 'Open', - 'GROUP_RANK' => 'Group rank', - 'GROUP_TYPE' => 'Group type', - 'GROUP_IS_CLOSED' => 'This is a closed group, new members cannot automatically join.', - 'GROUP_IS_OPEN' => 'This is an open group, members can apply to join.', - 'GROUP_IS_HIDDEN' => 'This is a hidden group, only members of this group can view its membership.', - 'GROUP_IS_FREE' => 'This is a freely open group, all new members are welcome.', - 'GROUP_IS_SPECIAL' => 'This is a special group, special groups are managed by the board administrators.', + 'GROUP_CLOSED' => 'Closed', + 'GROUP_DESC' => 'Group description', + 'GROUP_HIDDEN' => 'Hidden', + 'GROUP_INFORMATION' => 'Usergroup Information', + 'GROUP_JOIN' => 'Join Group', + 'GROUP_JOIN_CONFIRM' => 'Are you sure you want to join the selected group?', + 'GROUP_JOIN_PENDING' => 'Request to join group', + 'GROUP_JOIN_PENDING_CONFIRM' => 'Are you sure you want to request joining the selected group?', + 'GROUP_JOINED' => 'Successfully joined selected group', + 'GROUP_JOINED_PENDING' => 'Successfully requested group membership. Please wait for a group leader to approve your membership.', + 'GROUP_MEMBERS' => 'Group members', + 'GROUP_NAME' => 'Group name', + 'GROUP_OPEN' => 'Open', + 'GROUP_RANK' => 'Group rank', + 'GROUP_RESIGN_MEMBERSHIP' => 'Resign group membership', + 'GROUP_RESIGN_MEMBERSHIP_CONFIRM' => 'Are you sure you want to resign your membership from the selected group?', + 'GROUP_RESIGN_PENDING' => 'Resign pending group membership', + 'GROUP_RESIGN_PENDING_CONFIRM' => 'Are you sure you want to resign your pending membership from the selected group?', + 'GROUP_RESIGNED_MEMBERSHIP' => 'You were successfully removed from the selected group', + 'GROUP_RESIGNED_PENDING' => 'Your pending membership was successfully removed from the selected group', + 'GROUP_TYPE' => 'Group type', + 'GROUP_IS_CLOSED' => 'This is a closed group, new members cannot automatically join.', + 'GROUP_IS_OPEN' => 'This is an open group, members can apply to join.', + 'GROUP_IS_HIDDEN' => 'This is a hidden group, only members of this group can view its membership.', + 'GROUP_IS_FREE' => 'This is a freely open group, all new members are welcome.', + 'GROUP_IS_SPECIAL' => 'This is a special group, special groups are managed by the board administrators.', - 'LOG_USER_GROUP_CHANGE' => '<b>User changed default group</b><br />» %s', 'LOGIN_EXPLAIN_GROUP' => 'You need to login to view group details', - 'NOT_MEMBER_OF_GROUP' => 'The requested operation cannot be taken because you are not a member of the selected group', + 'NOT_LEADER_OF_GROUP' => 'The requested operation cannot be taken because you are not a leader of the selected group.', + 'NOT_MEMBER_OF_GROUP' => 'The requested operation cannot be taken because you are not a member of the selected group.', 'PRIMARY_GROUP' => 'Primary group', 'REMOVE_SELECTED' => 'Remove selected', - 'USER_GROUP_CHANGE' => 'From "%1$s" group to "%2$s"', + 'USER_GROUP_CHANGE' => 'From "%1$s" group to "%2$s"', + 'USER_GROUP_DEMOTE' => 'Demote leadership', + 'USER_GROUP_DEMOTE_CONFIRM' => 'Are you sure you want to demote as group leader from the selected group?', + 'USER_GROUP_DEMOTED' => 'Successfully demoted your leadership.', ); ?>
\ No newline at end of file diff --git a/phpBB/styles/subSilver/template/index_body.html b/phpBB/styles/subSilver/template/index_body.html index 7b78daf63a..51b0ddff2d 100644 --- a/phpBB/styles/subSilver/template/index_body.html +++ b/phpBB/styles/subSilver/template/index_body.html @@ -70,7 +70,7 @@ </tr> <!-- END forumrow --> </table> - <a class="gensmall" href="{U_DELETE_COOKIES}">{L_DELETE_COOKIES}</a><br /> + <span class="gensmall"><a href="{U_DELETE_COOKIES}">{L_DELETE_COOKIES}</a> | <a href="{U_TEAM}">{L_THE_TEAM}</a></span><br /> <br clear="all" /> diff --git a/phpBB/styles/subSilver/template/memberlist_search.html b/phpBB/styles/subSilver/template/memberlist_search.html index 53983faab2..dafe24107a 100644 --- a/phpBB/styles/subSilver/template/memberlist_search.html +++ b/phpBB/styles/subSilver/template/memberlist_search.html @@ -76,6 +76,12 @@ function marklist(status) <td class="row2"><input class="post" type="text" name="ip" value="{IP}" /></td> </tr> <tr> + <td class="row1"><b class="genmed">{L_GROUP}:</b></td> + <td class="row2" nowrap="nowrap"><select name="search_group_id">{S_GROUP_SELECT}</select></td> + <td class="row1"> </td> + <td class="row2"> </td> +</tr> +<tr> <td class="cat" colspan="4" align="center"><input class="btnlite" type="submit" name="submit" value="{L_SEARCH}" /> <input class="btnlite" type="reset" value="{L_RESET}" /></td> </tr> </table> diff --git a/phpBB/styles/subSilver/template/ucp_groups_manage.html b/phpBB/styles/subSilver/template/ucp_groups_manage.html index 31a9d54491..a8ce652c1a 100644 --- a/phpBB/styles/subSilver/template/ucp_groups_manage.html +++ b/phpBB/styles/subSilver/template/ucp_groups_manage.html @@ -3,79 +3,83 @@ <!-- $Id$ --> <table class="tablebg" width="100%" cellspacing="1"> - <tr> - <th colspan="2">{L_USERGROUPS}</th> - </tr> - <tr> - <td class="row3" colspan="2"><span class="genmed">{L_GROUPS_EXPLAIN}</span></td> - </tr> +<tr> + <th colspan="2">{L_USERGROUPS}</th> +</tr> +<tr> + <td class="row3" colspan="2"><span class="genmed">{L_GROUPS_EXPLAIN}</span></td> +</tr> - <tr> - <th>{L_GROUP_DETAILS}</td> - <th>{L_MARK}</td> - </tr> - <tr> - <td class="cat" colspan="2" align="right"><span class="genmed">Select: </span><select name="g"></select> <input class="btnmain" type="submit" value="{L_GO}" /> </td> - </tr> - <tr> - <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_LEADER}</b></td> - </tr> - <!-- BEGIN leader --> - <tr> - <td class="<!-- IF leader.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->"><b class="genmed"><a href="{leader.U_VIEW_GROUP}">{leader.GROUP_NAME}</a></b><!-- IF leader.GROUP_DESC --><p class="forumdesc">{leader.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF leader.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->" align="center"><!-- IF leader.GROUP_TYPE --><input type="checkbox" name="leader[{leader.GROUP_ID}]" /><!-- ENDIF --></td> - </tr> - <!-- BEGINELSE --> - <tr> - <td class="row2" colspan="2" align="center"><b class="genmed">{L_NO_LEADERS}</b></td> - </tr> - <!-- END leader --> +<tr> + <th>{L_GROUP_DETAILS}</td> + <th>{L_MARK}</td> +</tr> +<tr> + <td class="cat" colspan="2" align="right"><span class="genmed">{L_SELECT}: </span><select name="g">{S_GROUP_OPTIONS}</select> <input class="btnmain" type="submit" value="{L_GO}" /> </td> +</tr> +<tr> + <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_LEADER}</b></td> +</tr> +<!-- BEGIN leader --> + <!-- IF leader.S_ROW_COUNT is odd --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> - <tr> - <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_MEMBER_DEFAULT}</b></td> - </tr> - <!-- BEGIN member --> - <tr> - <td class="<!-- IF member.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->"><b class="genmed"><a href="{member.U_VIEW_GROUP}">{member.GROUP_NAME}</a></b><!-- IF member.GROUP_DESC --><p class="forumdesc">{member.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF member.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->" align="center"><!-- IF member.GROUP_TYPE --><input type="checkbox" name="member[{member.GROUP_ID}]" /><!-- ENDIF --></td> - </tr> - <!-- BEGINELSE --> - <tr> - <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_MEMBERS}</span></td> - </tr> - <!-- END member --> + <td><b class="genmed"><a href="{leader.U_VIEW_GROUP}">{leader.GROUP_NAME}</a></b><!-- IF leader.GROUP_DESC --><p class="forumdesc">{leader.GROUP_DESC}</p><!-- ENDIF --></td> + <td><!-- IF leader.GROUP_TYPE --><input type="checkbox" name="leader[{leader.GROUP_ID}]" /><!-- ENDIF --></td> +</tr> +<!-- BEGINELSE --> +<tr> + <td class="row2" colspan="2" align="center"><b class="genmed">{L_NO_LEADERS}</b></td> +</tr> +<!-- END leader --> - <tr> - <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_MEMBER_NOT_DEFAULT}</b></td> - </tr> - <!-- BEGIN pending --> - <tr> - <td class="<!-- IF pending.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->"><b class="genmed"><a href="{pending.U_VIEW_GROUP}">{pending.GROUP_NAME}</a></b><!-- IF pending.GROUP_DESC --><p class="forumdesc">{pending.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF pending.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->" align="center"><!-- IF pending.GROUP_TYPE --><input type="checkbox" name="pending[{pending.GROUP_ID}]" /><!-- ENDIF --></td> - </tr> - <!-- BEGINELSE --> - <tr> - <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_PENDING}</span></td> - </tr> - <!-- END pending --> +<tr> + <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_MEMBER_DEFAULT}</b></td> +</tr> +<!-- BEGIN member --> + <!-- IF member.S_ROW_COUNT is odd --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> - <tr> - <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_PENDING}</b></td> - </tr> - <!-- BEGIN nonmember --> - <tr> - <td class="<!-- IF nonmember.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->"><b class="genmed"><a href="{nonmember.U_VIEW_GROUP}">{nonmember.GROUP_NAME}</a></b><!-- IF nonmember.GROUP_DESC --><p class="forumdesc">{nonmember.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF nonmember.S_ROW_COUNT is odd -->row1<!-- ELSE -->row2<!-- ENDIF -->" align="center"><!-- IF nonmember.GROUP_TYPE --><input type="checkbox" name="nonmember[{nonmember.GROUP_ID}]" /><!-- ENDIF --></td> - </tr> - <!-- BEGINELSE --> - <tr> - <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_PENDING}<}</span></td> - </tr> - <!-- END nonmember --> + <td><b class="genmed"><a href="{member.U_VIEW_GROUP}">{member.GROUP_NAME}</a></b><!-- IF member.GROUP_DESC --><p class="forumdesc">{member.GROUP_DESC}</p><!-- ENDIF --></td> + <td align="center"><!-- IF member.GROUP_TYPE --><input type="checkbox" name="member[{member.GROUP_ID}]" /><!-- ENDIF --></td> +</tr> +<!-- BEGINELSE --> +<tr> + <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_MEMBERS}</span></td> +</tr> +<!-- END member --> - <tr> - <td class="cat" colspan="2" align="right"><input class="btnmain" type="submit" value="{L_SUBMIT}" /> </td> - </tr> +<tr> + <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_MEMBER_NOT_DEFAULT}</b></td> +</tr> +<!-- BEGIN pending --> + <!-- IF pending.S_ROW_COUNT is odd --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + + <td><b class="genmed"><a href="{pending.U_VIEW_GROUP}">{pending.GROUP_NAME}</a></b><!-- IF pending.GROUP_DESC --><p class="forumdesc">{pending.GROUP_DESC}</p><!-- ENDIF --></td> + <td align="center"><!-- IF pending.GROUP_TYPE --><input type="checkbox" name="pending[{pending.GROUP_ID}]" /><!-- ENDIF --></td> +</tr> +<!-- BEGINELSE --> +<tr> + <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_PENDING}</span></td> +</tr> +<!-- END pending --> + +<tr> + <td class="row3" colspan="2"><b class="gensmall">{L_GROUP_PENDING}</b></td> +</tr> +<!-- BEGIN nonmember --> + <!-- IF nonmember.S_ROW_COUNT is odd --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + + <td><b class="genmed"><a href="{nonmember.U_VIEW_GROUP}">{nonmember.GROUP_NAME}</a></b><!-- IF nonmember.GROUP_DESC --><p class="forumdesc">{nonmember.GROUP_DESC}</p><!-- ENDIF --></td> + <td align="center"><!-- IF nonmember.GROUP_TYPE --><input type="checkbox" name="nonmember[{nonmember.GROUP_ID}]" /><!-- ENDIF --></td> +</tr> +<!-- BEGINELSE --> +<tr> + <td class="row2" colspan="2" align="center"><span class="genmed">{L_NO_PENDING}</span></td> +</tr> +<!-- END nonmember --> + +<tr> + <td class="cat" colspan="2" align="right"><input class="btnmain" type="submit" value="{L_SUBMIT}" /> </td> +</tr> </table> diff --git a/phpBB/styles/subSilver/template/ucp_groups_membership.html b/phpBB/styles/subSilver/template/ucp_groups_membership.html index d75a3a6873..8ced15e46b 100644 --- a/phpBB/styles/subSilver/template/ucp_groups_membership.html +++ b/phpBB/styles/subSilver/template/ucp_groups_membership.html @@ -12,65 +12,80 @@ <tr> <th colspan="2">{L_GROUP_DETAILS}</td> - <th>{L_MARK}</td> + <th>{L_SELECT}</td> </tr> <!-- BEGIN leader --> - <!-- IF not leader.S_ROW_COUNT --> + <!-- IF leader.S_FIRST_ROW --> <tr> <td class="row3" colspan="3"><b class="gensmall">{L_GROUP_LEADER}</b></td> </tr> <!-- ENDIF --> - <tr> - <td class="<!-- IF leader.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF S_CHANGE_DEFAULT --><input type="radio" name="default"<!-- IF leader.S_GROUP_DEFAULT --> checked="checked"<!-- ENDIF --> /><!-- ENDIF --></td> - <td class="<!-- IF leader.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->"><b class="genmed"><a href="{leader.U_VIEW_GROUP}">{leader.GROUP_NAME}</a></b><!-- IF leader.GROUP_DESC --><p class="forumdesc">{leader.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF leader.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF not leader.GROUP_SPECIAL --><input type="checkbox" name="mark[{leader.GROUP_ID}]" /><!-- ENDIF --></td> + <!-- IF leader.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + <td width="6%" align="center" nowrap="nowrap"><!-- IF S_CHANGE_DEFAULT --><input type="radio" name="default"<!-- IF leader.S_GROUP_DEFAULT --> checked="checked"<!-- ENDIF --> value="{leader.GROUP_ID}" /><!-- ENDIF --></td> + <td> + <b class="genmed"><a href="{leader.U_VIEW_GROUP}">{leader.GROUP_NAME}</a></b> + <!-- IF leader.GROUP_DESC --><br /><span class="genmed">{leader.GROUP_DESC}</span><!-- ENDIF --> + <!-- IF not leader.GROUP_SPECIAL --><br /><i class="gensmall">{leader.GROUP_STATUS}</i><!-- ENDIF --> + </td> + <td width="6%" align="center" nowrap="nowrap"><!-- IF not leader.GROUP_SPECIAL --><input type="radio" name="selected" value="{leader.GROUP_ID}" /><!-- ENDIF --></td> </tr> <!-- END leader --> <!-- BEGIN member --> - <!-- IF not member.S_ROW_COUNT --> + <!-- IF member.S_FIRST_ROW --> <tr> <td class="row3" colspan="3"><b class="gensmall">{L_GROUP_MEMBER}</b></td> </tr> <!-- ENDIF --> - <tr> - <td class="<!-- IF member.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF S_CHANGE_DEFAULT --><input type="radio" name="default"<!-- IF member.S_GROUP_DEFAULT --> checked="checked"<!-- ENDIF --> /><!-- ENDIF --></td> - <td class="<!-- IF member.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->"><b class="genmed"><a href="{member.U_VIEW_GROUP}">{member.GROUP_NAME}</a></b><!-- IF member.GROUP_DESC --><p class="forumdesc">{member.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF member.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF not member.GROUP_SPECIAL --><input type="checkbox" name="mark[{member.GROUP_ID}]" /><!-- ENDIF --></td> + <!-- IF member.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + <td width="6%" align="center" nowrap="nowrap"><!-- IF S_CHANGE_DEFAULT --><input type="radio" name="default"<!-- IF member.S_GROUP_DEFAULT --> checked="checked"<!-- ENDIF --> value="{member.GROUP_ID}" /><!-- ENDIF --></td> + <td> + <b class="genmed"><a href="{member.U_VIEW_GROUP}">{member.GROUP_NAME}</a></b> + <!-- IF member.GROUP_DESC --><br /><span class="genmed">{member.GROUP_DESC}</span><!-- ENDIF --> + <!-- IF not member.GROUP_SPECIAL --><br /><i class="gensmall">{member.GROUP_STATUS}</i><!-- ENDIF --> + </td> + <td width="6%" align="center" nowrap="nowrap"><!-- IF not member.GROUP_SPECIAL --><input type="radio" name="selected" value="{member.GROUP_ID}" /><!-- ENDIF --></td> </tr> <!-- END member --> <!-- BEGIN pending --> - <!-- IF not pending.S_ROW_COUNT --> + <!-- IF pending.S_FIRST_ROW --> <tr> <td class="row3" colspan="3"><b class="gensmall">{L_GROUP_PENDING}</b></td> </tr> <!-- ENDIF --> - <tr> - <td class="<!-- IF pending.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"> </td> - <td class="<!-- IF pending.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->"><b class="genmed"><a href="{pending.U_VIEW_GROUP}">{pending.GROUP_NAME}</a></b><!-- IF pending.GROUP_DESC --><p class="forumdesc">{pending.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF pending.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF not pending.GROUP_SPECIAL --><input type="checkbox" name="mark[{pending.GROUP_ID}]" /><!-- ENDIF --></td> + <!-- IF pending.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + <td width="6%" align="center" nowrap="nowrap"> </td> + <td> + <b class="genmed"><a href="{pending.U_VIEW_GROUP}">{pending.GROUP_NAME}</a></b> + <!-- IF pending.GROUP_DESC --><br /><span class="genmed">{pending.GROUP_DESC}</span><!-- ENDIF --> + <!-- IF not pending.GROUP_SPECIAL --><br /><i class="gensmall">{pending.GROUP_STATUS}</i><!-- ENDIF --> + </td> + <td width="6%" align="center" nowrap="nowrap"><!-- IF not pending.GROUP_SPECIAL --><input type="radio" name="selected" value="{pending.GROUP_ID}" /><!-- ENDIF --></td> </tr> <!-- END pending --> <!-- BEGIN nonmember --> - <!-- IF not nonmember.S_ROW_COUNT --> + <!-- IF nonmember.S_FIRST_ROW --> <tr> <td class="row3" colspan="3"><b class="gensmall">{L_GROUP_NONMEMBER}</b></td> </tr> <!-- ENDIF --> - <tr> - <td class="<!-- IF nonmember.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"> </td> - <td class="<!-- IF nonmember.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->"><b class="genmed"><a href="{nonmember.U_VIEW_GROUP}">{nonmember.GROUP_NAME}</a></b><!-- IF nonmember.GROUP_DESC --><p class="forumdesc">{nonmember.GROUP_DESC}</p><!-- ENDIF --></td> - <td class="<!-- IF nonmember.S_ROW_COUNT is odd -->row2<!-- ELSE -->row1<!-- ENDIF -->" width="6%" align="center" nowrap="nowrap"><!-- IF not nonmember.GROUP_SPECIAL --><input type="checkbox" name="mark[{nonmember.GROUP_ID}]" /><!-- ENDIF --></td> + <!-- IF nonmember.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> + <td width="6%" align="center" nowrap="nowrap"> </td> + <td> + <b class="genmed"><a href="{nonmember.U_VIEW_GROUP}">{nonmember.GROUP_NAME}</a></b> + <!-- IF nonmember.GROUP_DESC --><br /><span class="genmed">{nonmember.GROUP_DESC}</span><!-- ENDIF --> + <!-- IF not nonmember.GROUP_SPECIAL --><br /><i class="gensmall">{nonmember.GROUP_STATUS}</i><!-- ENDIF --> + </td> + <td width="6%" align="center" nowrap="nowrap"><!-- IF nonmember.S_CAN_JOIN --><input type="radio" name="selected" value="{nonmember.GROUP_ID}" /><!-- ENDIF --></td> </tr> <!-- END nonmember --> <tr> - <td class="cat" colspan="3"></div><div style="float:right"><span class="genmed">Select: </span><select name="mode"><option value="join">Join marked</option><option value="resign">Resign marked</option><option value="demote">Demote marked</option></select> <input class="btnmain" type="submit" name="submit" value="{L_SUBMIT}" /> </div></td> + <td class="cat" colspan="3"><!-- IF S_CHANGE_DEFAULT --><div style="float: left;"><input class="btnlite" type="submit" name="change_default" value="Change default group" /></div><!-- ENDIF --><div style="float:right"><span class="genmed">Select: </span><select name="action"><option value="join">Join selected</option><option value="resign">Resign selected</option><option value="demote">Demote selected</option></select> <input class="btnmain" type="submit" name="submit" value="{L_SUBMIT}" /> </div></td> </tr> - </table> <!-- INCLUDE ucp_footer.html -->
\ No newline at end of file |