refactor: refactored administration strings

This commit also removes support for French and Spanish, and adds support for Brazillian Portuguese.
Additionally, the accidental leave protection on the form builder has also been fixed.
This commit is contained in:
Miguel Nogueira 2022-03-19 05:56:20 +00:00 committed by Miguel Nogueira
parent e6b10ab44e
commit 498fe5d09e
23 changed files with 222 additions and 1098 deletions

View File

@ -31,6 +31,7 @@ class Vacancy extends Model
{ {
//use UsedByTeams; //use UsedByTeams;
// VACANCY GROUP NAME: DEPRECATED
public $fillable = [ public $fillable = [
'permissionGroupName', 'permissionGroupName',

View File

@ -27,8 +27,7 @@ return [
'supportedLocales' => [ 'supportedLocales' => [
'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'], 'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'],
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'], 'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'Español', 'regional' => 'es_ES'], 'pt-br' => ['name' => 'Brazillian Portuguese', 'script' => 'Latn', 'native' => 'Português do Brasil', 'regional' =>'pt_BR']
'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'Français', 'regional' => 'fr_FR'],
], ],
// Requires middleware `LaravelSessionRedirect.php`. // Requires middleware `LaravelSessionRedirect.php`.
@ -64,7 +63,7 @@ return [
// If you want to display the locales in particular order in the language selector you should write the order here. // If you want to display the locales in particular order in the language selector you should write the order here.
//CAUTION: Please consider using the appropriate locale code otherwise it will not work //CAUTION: Please consider using the appropriate locale code otherwise it will not work
//Example: 'localesOrder' => ['es','en'], //Example: 'localesOrder' => ['es','en'],
'localesOrder' => ['pt', 'en', 'fr', 'es'], 'localesOrder' => ['pt', 'en', 'pt-br'],
// If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']). // If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']).
'localesMapping' => [], 'localesMapping' => [],

View File

@ -247,7 +247,7 @@ return [
'form_preview' => [ 'form_preview' => [
'preview' => 'Preview', 'preview' => 'Preview',
'title' => 'Application Form Preview', 'title' => 'Application Form Preview',
'looks' => 'This is how your form looks like to applicants', 'looks' => 'This is how your form looks like to applicants.',
'f_info' => 'You may edit it and add more fields later.', 'f_info' => 'You may edit it and add more fields later.',
'', '',
], ],

View File

@ -1,38 +0,0 @@
<?php
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager.
*
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Raspberry Staff Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
*/
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];

View File

@ -1,607 +0,0 @@
<?php
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager.
*
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Raspberry Staff Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
*/
return [
// ============== MENU TRANSLATIONS ======================
'menu' => [
'my_apps' => 'My Applications',
'current_apps' => 'Current Applications',
'profile_settings' => 'Profile Settings',
'hiring_man' => 'Hiring Management',
'all_forms' => 'All Forms',
'app_settings' => 'App Settings',
'global_app_settings' => 'Global App Settings',
'system_logs' => 'System Logs',
],
// ============== REUSABLE, GENERIC STRINGS ===============
'reusable' => [
'created_at' => 'Created at',
'updated_at' => 'Updated at',
'actions' => 'Actions',
'delete' => 'Delete',
'status' => 'Status',
'view' => 'View',
'view_c' => 'View Details',
'no_access' => 'Application Access Denied',
'validation_err' => 'Validation error!',
'description' => 'Description',
'join_date' => 'Join Date',
'my_acc' => 'My Account',
'confirm' => 'Please Confirm',
'confirm_plain' => 'Confirm',
'confirm_click' => 'Click to Confirm',
'date' => 'Date',
'datetime' => 'Time & Date',
'location' => 'Location',
'none_yet' => 'None yet',
'reason' => 'Reason',
'days' => 'Days',
'weeks' => 'Weeks',
'months' => 'Months',
'years' => 'Years',
'yes' => 'Yes',
'no' => 'No',
'roles' => 'Roles',
'member_since' => 'Member since :date',
'lookup' => 'Lookup :ipAddress',
'abt' => 'About',
'acc' => 'Account',
'settings' => 'Settings',
'profile' => 'My Profile',
'code' => 'code',
'here' => 'here',
'auth_req' => 'Please authenticate',
'eligible' => 'Eligible',
'ineligible' => 'Ineligible',
'schedule' => 'Schedule',
'schedule_action' => 'Schedule an Appointment',
'platform' => 'Platform',
'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed,
'appointment_info' => 'Appointment Information',
'ip_info' => 'IP Address Information for',
],
// ============== HOMEPAGE MESSAGES ======================
'home' => 'Home',
'homepagetxt' => 'Homepage',
'login' => 'Sign in',
'logout' => 'Sign out',
'register' => 'Sign up',
'dashboard' => 'Dashboard',
'back' => 'Go back',
'homepage_welcome' => 'Welcome to our team management center!',
'homepage_explainer_line1' => 'Here, you can apply for open staff member positions, view your application status, and manage your profile.',
'homepage_explainer_line2' => 'Sign up with Email to continue.',
'footer_copy' => 'All rights reserved',
'global_error' => 'An error occurred',
'global_success' => 'Success!',
'txt_learn_more' => 'Learn more',
'opening_nodetails' => 'There don\'t seem to be any details',
'opening_nodetails_exp' => 'This opening does not have any details yet.',
'details_m_title' => 'Opening details',
'open_positions' => 'Open Positions',
'last_updated' => 'Last updated',
'open_position_count' => '{1} There is :count open position!|[2,*] There are :count open positions!',
'ineligible_days_remaining' => 'Ineligible (:days) day(s) remaining',
'txt_apply' => 'Apply', // Context: Apply as in applying for a "job", e.g. registering for a job
'txt_application' => 'Application',
'application_closed' => 'Applications Closed',
'application_closed_intro' => 'Hello there!',
'application_closed_intro_line2' => '
We are currently not hiring any new staff members at the moment. If you\'d like to apply, check out our Discord\'s
announcement channel for news when a new position opens.
Our application cycle usually lasts two weeks, so if you\'re seeing this, it\'s because it finished, and new one will begin soon.
',
'where_work' => 'Where you\'ll work',
'join_team' => 'Join The Team',
'join_team_cta' => 'Join the team today and help out network grow and prosper!',
'contact_cta' => 'Any questions? Leave a message!',
'contact_disclaimer' => '*This is not an application form. Any applications sent here will be ignored.',
'contactlabel_name' => 'Name',
'contactlabel_email' => 'E-mail',
'contactlabel_subject' => 'Subject (ex. Site Suggestion)',
'contactlabel_send' => 'Send',
// ======================== AUTHENTICATION MESSAGES ===========================
'2fa_txt' => 'Two-Factor Authentication',
'2fa_sronly' => 'Two-factor secret code (You can find this on Google Authenticator)',
'2fa_lostcode' => 'Don\'t know the code?',
'2fa_cancel_login' => 'Cancel login (logout)',
'terms' => 'Terms of Use',
'ppolicy' => 'Privacy Policy',
'signin_cta' => 'Sign into your account',
'password' => 'Password',
'remember_me' => 'Remember me',
'forgot_pw' => 'Forgot password?',
'register_cta' => 'Register here',
'no_acc' => 'Don\'t have an account?',
'register_acc' => 'Register a new account',
'pwsec' => [
'line1' => 'Basic password security',
'line2' => 'For your security, we implement strict password policies. It\'s also advisable to let your password manager or browser generate and save passwords for you (if it\'s a private device).',
'line3' => 'Passwords must be a combination of: ',
'line4' => 'A minimum of 10 characters;',
'line5' => 'At least 3 uppercase characters;',
'line6' => 'At least 3 numbers;',
'line7' => 'Any number of special characters.',
],
'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only
'sronly_mcusername' => 'Minecraft Username (Premium)',
'have_account' => 'Have an account with us?',
'login_here' => 'Login here',
'register_txt' => 'Register',
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
'modal_close' => 'Close',
'component_nopermission' => 'We\'re sorry, but you do not have permission to access this web page.',
'component_accessdenied' => 'Access Denied',
'component_contact' => 'Please contact your administrator if you believe this was in error.',
'welcome_back' => 'Welcome back,',
'eligible' => 'Eligible',
'ineligible' => 'Ineligible',
'eligibility_status' => 'Your current application eligibility status: :badgeStatus',
'ongoing_apps' => 'Ongoing apps',
'denied_apps' => 'Denied apps',
'users_staff' => 'Total Users + Staff',
'new_apps' => 'New applications',
'v_backlog' => 'Vote backlog',
'ranks' => 'Available ranks',
'open' => 'Open',
'closed' => 'Closed',
'upcoming' => 'Your upcoming interviews',
'soon' => 'Coming soon',
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
'adm' => 'Administration',
'devtools' => 'Developer Tools',
'devtools_evn' => 'Event Management',
'devoptions' => 'Developer Options',
'forceeval' => 'Please choose an application to force re-evaluation',
'appid' => 'Application ID',
'no_valid_app' => 'There are no valid applications',
'choose_app' => 'Choose an application',
'dispatch_event' => 'Dispatch event now',
'devtools_warn' => 'Do not use these options if you don\'t know what you\'re doing, even if you have access to this page.',
'warn' => 'Warning',
'override_votes' => 'Override Vote Evaluation',
'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable
'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios',
'forms' => 'Forms',
'positions' => 'Positions', // Context: Positions as in job opening
'edit_form' => 'Edit Form',
'edt' => 'Editor',
'edit' => 'Edit',
'edt_action' => 'Editing',
'txtbox' => 'Textbox',
'multiline' => 'Multi line answer',
'checkbox' => 'Checkbox',
'field_type' => 'Choose a field type',
'save_exit' => 'Save & Quit',
'new_field' => 'New field',
'vacancy_edit' => 'Vacancy Editor',
'new_vacancy' => 'New Vacancy',
'form_consistency' => 'For consistency purposes, grayed out fields can\'t be edited.',
'vacancy' => [
'add' => 'Add vacancy',
'name' => 'Vacancy Name',
'description' => 'Vacancy Description',
'details' => 'Vacancy Details',
'markdown' => 'Markdown Supported',
'no_details' => 'No details yet... Add some!',
'permission_group' => 'Permission Group',
'permission_group_tooltip' => 'The permission group from your server/network\'s permissions manager. Compatible with Luckperms and PEX.',
'discord_roleid' => 'Discord Role ID',
'discord_roleid_tooltip' => 'Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server\'s roles tab, right click any role to copy it\'s ID.',
'current_form' => 'Current Form (uneditable)',
'remaining_slots' => 'Remaining slots',
'free_slots' => 'Free slots',
'free_slots_tooltip' => 'How many submissions before the vacancy stops accepting new applicants?',
'save' => 'Save Changes',
'cancel' => 'Cancel',
'close_vacancy' => 'Close Position',
'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary',
'',
],
'form' => 'Form',
'form_builder' => [
'builder' => 'Form Builder',
'builder_name' => 'Application Form Management Tool',
'name_form' => 'Name your form...',
'save_form' => 'Save Form',
],
'form_preview' => [
'preview' => 'Preview',
'title' => 'Application Form Preview',
'looks' => 'This is how your form looks like to applicants',
'f_info' => 'You may edit it and add more fields later.',
'',
],
'forms_p' => [
'available_forms' => 'Available forms',
'form_title' => 'Form title',
'empty_noforms' => 'Nothing to see here! Please add some forms first.',
'new_form' => 'NEW FORM',
],
'players' => [
'reg_players' => 'Registered Players',
'reg_players_staff' => 'See Registered Players (Applicant Pool)',
'total_banned' => 'Total Banned Players',
'search' => 'Search players',
'f_p_search' => 'Full/partial email search',
'p_disclaimer' => 'Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.',
'listing' => 'Player Listing',
'reg_date' => 'Registration Date',
'ign' => 'IGN', // Context: Short for In-Game Name
'banned' => 'Banned',
'active' => 'Active',
'no_reg' => 'There are no registered players!',
'no_reg_exp' => "
Registered players are those without a staff role in the team management application.
There may be other users registered in the platform, but they won't be displayed here.
",
'see_staff' => 'See Staff Members',
],
'positions_p' => [
'application_form' => 'Application Form',
'select_form' => 'Select a form...',
'no_form_error' => "
You cannot create a vacancy without any forms with which people would apply.
create a form first, then, create a vacancy.
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
",
'new_pos' => 'NEW POSITION',
'empty_pos_warning' => 'Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)',
'manage_forms' => 'MANAGE APPLICATION FORMS',
],
'settings' => [
'settings' => 'Settings',
'settings_header' => 'Notification Settings',
'settings_p' => 'Change which notifications are sent here.',
'back_btn' => 'Back to Dashboard',
],
'staff' => [
'members' => 'Staff Members',
'active_sm' => 'Active Staff Members',
'm_listing' => 'Member Listing',
'f_name' => 'Full Name',
'rank' => 'Rank',
],
// ======================== APPLICATION RENDERING MESSAGES =========================
'application_r' => [
'appl_submit_warn' => 'Are you sure you want to submit your application? Please review each of your answers carefully before doing so.',
'appl_submit_doublewarn' => 'Please note: Applications CANNOT be modified once they\'re submitted!',
'acceptsend' => 'Accept & Send',
'review' => 'Review',
'applying_for' => 'You are applying for: :name',
'welcome' => [
'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old
'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.',
'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.',
'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.',
],
'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.',
],
'application_m' => [
'title' => 'Application Management',
'all_apps' => 'All Applications',
'modal_confirm' => 'Are you sure?',
'really_delete' => 'Really delete this?',
'outstanding_sm' => 'Outstanding',
'outstanding_apps' => 'Outstanding Applications',
'outstanding_subm' => 'Outstanding (Submitted)',
'interview_q' => 'Interview Queue',
'interview_p' => 'Interview',
'interview_s' => 'Interview Scheduled',
'finished_int' => 'Finished Interviews',
'schedule_int' => 'Schedule Interviews',
'p_review' => 'Peer Review',
'applicant' => 'Applicant',
'interviewee' => 'Interviewee',
'pending_int' => 'Pending Interview',
'schedule' => 'Schedule',
'view_interview_queue' => 'View Interview Queue',
'view_approval_queue' => 'View Approval Queue',
'view_outstanding_queue' => 'View Outstanding Queue',
'approved' => 'Approved',
'denied' => 'Denied',
'unknown_stat' => 'Unknown',
'consequence_irreversible' => 'IRREVERSIBLE',
'delete_action_warning' => 'This action is :consequence.',
'delete_explainer' => 'Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.',
'all_apps_header' => 'You\'re looking at all applications ever received',
'all_apps_exp' => 'Here, you have quick and easy access to all applications ever received by the system.',
'no_apps' => 'There are no applications here',
'no_apps_exp' => 'We couldn\'t find any applications. Maybe no one has applied yet? Please try again later.',
'int_applications' => 'Applications',
'no_apps_pending_int' => 'No Applications Pending Interview',
'no_apps_pending_int_exp' => 'There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.',
'upcoming_int' => 'My Upcoming Interviews',
'pending_schedule' => 'Pending Schedule',
'no_upcoming' => 'There are no upcoming interviews',
'no_upcoming_exp' => 'Please check other queues down in the application process. Applicants here may have already been interviewed.',
'no_outstanding' => 'Seeing no applications? Check with an Administrator to make sure that there are available open positions.',
'no_outstanding_exp' => 'Advertising on relevant forums made for this purpose is also a good idea.',
'applicant_name' => 'Applicant Name',
'application_date' => 'Application Date',
'no_pending' => 'There are no pending applications',
'no_pending_exp' => 'It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.',
'voting_reminder' => [
'title' => 'Voting Reminder',
'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.',
'line2' => 'Conversely, applications that do not reach this number are automatically denied.',
'line3' => 'Please note that the vote system can be overridden',
],
'no_pending_review' => 'There are no applications pending review',
'no_pending_review_exp' => 'Check the other queues for any applications! Applications will be shown here as soon as their interview is completed. You\'ll be able to view meeting notes and vote based on your observations.',
],
// ============= PROFILE & USER MESSAGES ===============
'profile' => [
'title' => ':name\'s profile',
'profile' => 'Profile',
'users' => 'Users',
'account_banned' => 'Account banned',
'account_banned_exp' => 'This user has been banned by the moderators.',
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).',
'leave_empty' => 'Leave empty for a permanent ban',
'duration' => 'Duration',
'p_duration' => 'Punishment duration',
'p_duration_exp' => 'e.g. Spamming',
'ban' => 'Ban',
'terminate_notice' => 'You are about to terminate a staff member',
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
They will be notified of their termination. Make sure to have discussed this with them first.',
'terminate_notice_consequence' => 'THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE',
'terminate_txt' => 'Terminate Staff Member',
'delete_acc_warn' => 'WARNING: This is a potentially destructive action!',
'delete_acc_consequence' => 'Deleting a user\'s account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.',
'type_to_confirm' => 'Type to confirm:',
'type_placeholder' => 'Please type the above',
'delete_acc' => 'Delete Account',
'edit_acc' => 'Edit Account',
'ban_acc' => 'Ban Account',
'unban_acc' => 'Unban Account',
'search_result' => 'Search results',
'origin_cc' => 'Origin country',
'state_prov' => 'State/Province',
'district' => 'District (if any)',
'city' => 'City',
'zipcode' => 'Zipcode',
'coords' => 'Coordinates',
'european' => 'European?',
'isp' => 'ISP', // Internet service provider
'org' => 'Organization (if any)',
'ctype' => 'C. Type', // Internet Connection type
'timezone' => 'Timezone',
'noresults' => 'This query returned no results.',
'edituser' => 'Edit PII and Roles', // PII: Personally identifiable information
'edituser_consequence' => 'Warning! This is a sensitive setting! Changing this could have unintended consequences!',
'acc_management' => 'Account Management (Admin)',
'discord_tag' => 'User\'s Discord Tag: :discordTag',
'account_settings' => 'Account Settings',
'account_settings_personal' => 'My Account Settings',
'2fa_welcome' => 'We\'re glad you decided to increase your account\'s security!',
'supported_apps' => 'Supported apps you can install: ',
'scan_code' => 'Scan the :scannable code with your preferred app, and then copy the code here.',
'otp' => 'One-time code',
'2fa_enable' => 'Enable 2FA',
'2fa_remove_consequence' => 'Removing two-factor authentication will reduce the security of your account.',
'2fa_password_confirm' => 'Confirm your password to continue',
'2fa_password_confirm_exp' => 'To prevent unauthorized changes, a password is always required for sensitive operations.',
'2fa_disable_consent' => '"I understand the possible consequences of disabling two factor authentication"',
'2fa_remove' => 'Remove 2FA',
'2fa_remove_extended' => 'Remove Two-Factor Authentication',
'2fa_send_code' => 'Send 2FA Code',
'2fa_send_code_s' => '2FA Code (ex. 41351)',
'security_lgotherdev' => 'For your security, you\'ll need to re-enter your password before logging out other devices. If you believe your account has been compromised, please change your password instead, as that will automatically log out anyone else who might using your account, and prevent them from signing back in.',
'password_reenter' => 'Re-enter your password',
'acc_security' => 'Account Security',
'2fa' => 'Two Factor Authentication',
'sessions' => 'Sessions',
'contact_settings' => 'Contact Settings (E-Mail)',
'change_password' => 'Change Password',
'change_password_exp' => 'Change your password here. This will log you out from all existing sessions for your security.',
'old_pass' => 'Old Password',
'forgot_pw' => 'Forgot your password? Reset it :link',
'new_pw' => 'New Password',
'2fa_enable_success' => 'Hooray! 2FA is setup correctly for your account. A code will be asked each time you login.',
'2fa_avail' => 'Two-factor auth is available for your account.',
'2fa_avail_exp' => ' Enabling this security option greatly increases your account\'s security in case your password ever gets stolen.',
'session_manager' => 'Session Manager',
'terminate_others' => 'Terminating other sessions is generally a good idea if your account has been compromised.',
'current_session' => 'Your current session: logged in from :ipAddress',
'flush_session' => 'Flush sessions',
'personal_data_change' => 'Need to change personal data? You can do so here.',
'current_email' => 'Current Email Address',
'new_email' => 'New Email Address',
'current_password' => 'Current Password',
'security_nochangepw' => 'For security reasons, you cannot make important account changes without confirming your password. You\'ll also need to verify your new email.',
'change_email' => 'Change Email Address',
'basic_info' => 'Basic Information',
'fl_name' => 'First / Last Name',
'shortbio' => 'Short Bio',
'about_me' => 'About Me',
'pref_media' => 'Preferences & Media',
'avatar_source' => 'Retrieve avatar from: ',
'social_media' => 'Social Media',
'github_user' => 'Github Username',
'twitter_user' => 'Twitter Username',
'insta_user' => 'Instagram Username',
'discord_user' => 'Discord Handle',
'update_prfl' => 'Update Profile',
],
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
'user' => [
'app_process' => [
'title' => 'Application Process',
'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.',
'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.',
],
'account_standing' => 'Account Standing',
'account_eligibility' => 'Your account is currently :eligibility for application',
'days_remaining_acc_alt' => 'As of today, there are :days remaining until you\'re permitted to submit another application.',
'my_ongoingapps' => 'My Ongoing Applications',
'submitted' => 'Submitted',
'peer_approval' => 'Peer Approval',
'peer_approval_q' => 'Peer Approval Queue',
'nothing_to_show' => 'Nothing to show',
'nothing_to_show_exp' => 'You currently have no applications to display. If you\'re eligible, you may apply once every month.',
'directory' => [
'itsyou' => 'It\'s you!',
'title' => 'User Directory',
'directory' => 'Directory',
],
],
'view_app' => [
'title' => 'Viewing application',
'viewing_app' => 'Viewing :user\'s application',
'cantvote' => 'You cannot vote on this application anymore.',
'no_notes' => 'There are no notes yet. Add some!',
'deny_confirm' => 'Are you sure you want to deny this application? Please keep in mind that this user will only be allowed to apply 30 days after their first application.',
'deny_confirm_consequence' => 'This action cannot be undone.',
'deny_confirm_btn' => 'Confirm: Deny Applicant',
'form_updated_alert' => 'If this form has been updated, new fields and updated questions will not show up here!',
'context_info' => 'Contextual Information',
'appl_ip' => 'Applicant IP Address',
'appl_for' => 'Applying for',
'currentstatus' => 'Current Status',
'decisionmod' => 'Decision & Moderation Tools',
'denyapp' => 'Deny applicant',
'nextstage' => 'Move to next stage',
'appointment_desc' => 'Appointment description',
'int_date_time' => 'Interview Date & Time',
'choosedate' => 'Click to choose a date',
'appointment_loc' => 'Appointment Location',
'pref_platform' => 'Select your preferred platform',
'coming_soon_int' => 'Embedded in-house video conferencing coming soon, powered by Jitsi Meet',
'scheduled_for' => 'Interview Scheduled for:',
'platform' => 'Platform',
'finish_meeting' => 'Finish Meeting',
'view_notes' => 'View Meeting Notes',
'vote_app' => 'Vote on this application',
'vote_explainer' => [
'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.',
'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.',
'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.',
],
'vote_approve' => 'Vote: Approve Applicant',
'vote_deny' => 'Vote: Deny Applicant',
'm_notes' => 'Meeting notes',
'view_more' => 'View more Applications',
'comments' => 'Comments',
'no_comments' => 'There are no comments here.',
'no_comments_exp' => 'There are no comments here! Comments are only visible to staff members. Be the first to share your input! Commenting may help with decision-making when time comes to vote for an application.',
'commenting_as' => 'Commenting as :username',
'max_chars' => 'max characters', // Context: A number is added before max characters
'post' => 'Post', // Context: Post as in post comment
],
// ==================== END OF MAIN I18N FILE ======================
];

View File

@ -1,38 +0,0 @@
<?php
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager.
*
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Raspberry Staff Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@ -1,41 +0,0 @@
<?php
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager.
*
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Raspberry Staff Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
*/
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'reset' => 'Your password has been reset!',
'sent' => 'We have emailed your password reset link!',
'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that email address.",
];

View File

@ -1,170 +0,0 @@
<?php
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager.
*
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Raspberry Staff Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
*/
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_equals' => 'The :attribute must be a date equal to :date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'ends_with' => 'The :attribute must end with one of the following: :values.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'numeric' => 'The :attribute must be greater than :value.',
'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'The :attribute must be greater than :value characters.',
'array' => 'The :attribute must have more than :value items.',
],
'gte' => [
'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'The :attribute must have :value items or more.',
],
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'lt' => [
'numeric' => 'The :attribute must be less than :value.',
'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'The :attribute must be less than :value characters.',
'array' => 'The :attribute must have less than :value items.',
],
'lte' => [
'numeric' => 'The :attribute must be less than or equal :value.',
'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'The :attribute must not have more than :value items.',
],
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'The :attribute must be a number.',
'password' => 'The password is incorrect.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'starts_with' => 'The :attribute must start with one of the following: :values.',
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
'uuid' => 'The :attribute must be a valid UUID.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

View File

@ -411,14 +411,13 @@ return [
'title' => ':name\'s profile', 'title' => ':name\'s profile',
'profile' => 'Profile', 'profile' => 'Profile',
'users' => 'Users', 'users' => 'Users',
'account_banned' => 'Account banned', 'account_banned' => 'Account suspended',
'account_banned_exp' => 'This user has been banned by the moderators.', 'account_banned_exp' => 'This user has been suspended by the admins.',
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).', 'ban_confirm' => 'Please confirm that you want to suspend this account. You\'ll need to add a reason and expiration date to confirm this.',
'leave_empty' => 'Leave empty for a permanent ban',
'duration' => 'Duration', 'duration' => 'Duration',
'p_duration' => 'Punishment duration', 'p_duration' => 'Suspension duration',
'p_duration_exp' => 'e.g. Spamming', 'p_duration_exp' => 'e.g. Spamming',
'ban' => 'Ban', 'ban' => 'Suspend',
'terminate_notice' => 'You are about to terminate a staff member', 'terminate_notice' => 'You are about to terminate a staff member',
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network. 'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
@ -602,6 +601,12 @@ return [
], ],
'teams' => [
'm_teams_page' => 'Teams',
],
// ==================== END OF MAIN I18N FILE ====================== // ==================== END OF MAIN I18N FILE ======================
]; ];

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.devoptions')) @section('title', config('app.name') . ' | ' . __('Development & debug tools'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.devtools')}}</h4> <h4>{{__('Administration')}} / {{__('Developer Tools')}}</h4>
@stop @stop
@ -24,11 +24,11 @@
@if(!$applications->isEmpty()) @if(!$applications->isEmpty())
@foreach($applications as $application) @foreach($applications as $application)
<option value="{{$application->id}}">{{__('messages.appid')}} {{$application->id}} ({{$application->user->name}})</option> <option value="{{$application->id}}">{{__('Application ID')}} {{$application->id}} ({{$application->user->name}})</option>
@endforeach @endforeach
@else @else
<option value="null" disabled>{{__('messages.no_valid_app')}}</option> <option value="null" disabled>{{__('There are no valid applications')}}</option>
@endif @endif
</select> </select>
@ -40,7 +40,7 @@
</x-modal> </x-modal>
<x-modal id="confirmDispatchRejection" modal-label="confirmDispatchRejection" modal-title="{{__('messages.choose_app')}}" include-close-button="true"> <x-modal id="confirmDispatchRejection" modal-label="confirmDispatchRejection" modal-title="{{__('Choose an application')}}" include-close-button="true">
<p>{{__('Please choose an application to force reject')}}</p> <p>{{__('Please choose an application to force reject')}}</p>
<p>{{ __('Note that this process overrides users\'s votes, and it also ignores any stages the application may be in.') }}</p> <p>{{ __('Note that this process overrides users\'s votes, and it also ignores any stages the application may be in.') }}</p>
@ -50,18 +50,18 @@
@if(!$rejectApplications->isEmpty()) @if(!$rejectApplications->isEmpty())
@foreach($rejectApplications as $application) @foreach($rejectApplications as $application)
<option value="{{$application->id}}">{{__('messages.appid')}} {{$application->id}} ({{$application->user->name}}) ({{ $application->applicationStatus }})</option> <option value="{{$application->id}}">{{__('Application ID')}} {{$application->id}} ({{$application->user->name}}) ({{ $application->applicationStatus }})</option>
@endforeach @endforeach
@else @else
<option value="null" disabled>{{__('messages.no_valid_app')}}</option> <option value="null" disabled>{{__('There are no valid applications')}}</option>
@endif @endif
</select> </select>
</form> </form>
<x-slot name="modalFooter"> <x-slot name="modalFooter">
<button type="button" class="btn btn-danger" onclick="document.getElementById('forceRejection').submit()">{{__('messages.dispatch_event')}}</button> <button type="button" class="btn btn-danger" onclick="document.getElementById('forceRejection').submit()">{{__('Dispatch event now')}}</button>
</x-slot> </x-slot>
</x-modal> </x-modal>
@ -71,8 +71,7 @@
<div class="alert alert-warning"> <div class="alert alert-warning">
<i class="fa fa-exclamation-triangle"></i> <b>{{__('messages.warn')}}</b> <i class="fa fa-exclamation-triangle"></i> <b>{{__('Warning')}}</b>
<p>{{__('messages.devtools_warn')}}</p>
</div> </div>
</div> </div>
@ -87,20 +86,20 @@
<x-slot name="cardHeader"> <x-slot name="cardHeader">
</x-slot> </x-slot>
<button data-toggle="tooltip" data-placement="top" title="Dispatches an approval event for the selected application" type="button" class="btn btn-primary" onclick="$('#confirmForceEventDispatch').modal('show')"><i class="fas fa-bullhorn"></i> Dispatch approval event</button> <button data-toggle="tooltip" data-placement="top" title="{{ __('Dispatches an approval event for the selected application') }}" type="button" class="btn btn-primary" onclick="$('#confirmForceEventDispatch').modal('show')"><i class="fas fa-bullhorn"></i> {{ __('Dispatch approval event') }}</button>
<button data-toggle="tooltip" data-placement="top" title="Dispatches a rejection event for the selected application" type="button" class="btn btn-primary ml-2" onclick="$('#confirmDispatchRejection').modal('show')"><i class="fas fa-bullhorn"></i> Dispatch rejection event</button> <button data-toggle="tooltip" data-placement="top" title="{{ __('Dispatches a rejection event for the selected application') }}" type="button" class="btn btn-primary ml-2" onclick="$('#confirmDispatchRejection').modal('show')"><i class="fas fa-bullhorn"></i> {{ __('Dispatch rejection event') }}</button>
<form name="evalvotes" method="post" action="{{ route('devForceEvaluateVotes') }}" class="d-inline"> <form name="evalvotes" method="post" action="{{ route('devForceEvaluateVotes') }}" class="d-inline">
@csrf @csrf
<button data-toggle="tooltip" data-placement="top" title="Counts and processes all backlogged votes, for all applications." type="submit" class="btn btn-primary ml-3"><i class="fas fa-redo"></i> Count all votes now</button> <button data-toggle="tooltip" data-placement="top" title="{{ __('Counts and processes all backlogged votes, for all applications.') }}" type="submit" class="btn btn-primary ml-3"><i class="fas fa-redo"></i> {{ __('Count all votes now') }}</button>
</form> </form>
<form name="purgebans" method="post" action="{{ route('devPurgeExpired') }}" class="d-inline"> <form name="purgebans" method="post" action="{{ route('devPurgeExpired') }}" class="d-inline">
@csrf @csrf
@method('DELETE') @method('DELETE')
<button data-toggle="tooltip" data-placement="top" title="Cleans the database of old, expired suspensions, therefore unbanning certain users." type="submit" class="btn btn-primary ml-3"><i class="far fa-trash-alt"></i> Purge expired bans</button> <button data-toggle="tooltip" data-placement="top" title="{{ __('Cleans the database of old, expired suspensions, therefore unbanning certain users.') }}" type="submit" class="btn btn-primary ml-3"><i class="far fa-trash-alt"></i> {{ __('Purge expired bans') }}</button>
</form> </form>
<x-slot name="cardFooter"> <x-slot name="cardFooter">

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', 'Raspberry Network | Edit From') @section('title', config('app.name') . ' | ' . __('Edit form'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.forms')}} / {{__('messages.edt')}}</h4> <h4>{{__('Administration')}} / {{__('Forms')}} / {{__('Editor')}}</h4>
@stop @stop
@ -61,10 +61,10 @@
<select class="custom-select" id="{{ $fieldName }}-type" name="{{ $fieldName }}[]"> <select class="custom-select" id="{{ $fieldName }}-type" name="{{ $fieldName }}[]">
<option value="nil" disabled>{{__('messages.field_type')}}</option> <option value="nil" disabled>{{__('Choose a field type')}}</option>
<option value="textbox" {{ ($field['type'] == 'textbox' ? 'selected' : '') }}>{{__('messages.txtbox')}}</option> <option value="textbox" {{ ($field['type'] == 'textbox' ? 'selected' : '') }}>{{__('Text box')}}</option>
<option value="textarea" {{ ($field['type'] == 'textarea' ? 'selected' : '') }}>{{__('messages.multiline')}}</option> <option value="textarea" {{ ($field['type'] == 'textarea' ? 'selected' : '') }}>{{__('Text area')}}</option>
<option value="checkbox" {{ ($field['type'] == 'checkbox' ? 'selected' : '') }}>{{__('messages.checkbox')}}</option> <option value="checkbox" {{ ($field['type'] == 'checkbox' ? 'selected' : '') }}>{{__('Checkbox')}}</option>
</select> </select>
@ -82,8 +82,8 @@
<div class="card-footer text-center"> <div class="card-footer text-center">
<button type="button" class="btn btn-warning ml-2" onclick="$('#editForm').submit()"><i class="fas fa-save"></i> {{__('messages.save_exit')}}</button> <button type="button" class="btn btn-warning ml-2" onclick="$('#editForm').submit()"><i class="fas fa-save"></i> {{__('Save & Quit')}}</button>
<button type="button" class="btn btn-primary ml-2" id="add"><i class="fas fa-plus"></i> {{__('messages.new_field')}}</button> <button type="button" class="btn btn-primary ml-2" id="add"><i class="fas fa-plus"></i> {{__('New field')}}</button>
</div> </div>

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', 'Raspberry Network | Edit Positions') @section('title', config('app.name') . ' | ' . __('Edit vacancies'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.positions')}} / {{__('messages.edit')}}</h4> <h4>{{__('Administration')}} / {{__('Vacancies')}} / {{__('Edit')}}</h4>
@stop @stop
@ -24,7 +24,7 @@
<div class="col center"> <div class="col center">
<h3>{{__('messages.vacancy_edit')}}</h3> <h3>{{__('Vacancy Editor')}}</h3>
</div> </div>
@ -49,7 +49,7 @@
<div class="card-body"> <div class="card-body">
<p class="text-muted"><i class="fas fa-question-circle"></i> {{__('messages.form_consistency')}}</p> <p class="text-muted"><i class="fas fa-question-circle"></i> {{__('For consistency purposes, grayed out fields can\'t be edited.')}}</p>
<form method="POST" id="editPositionForm" action="{{ route('updatePosition', ['vacancy' => $vacancy->id]) }}"> <form method="POST" id="editPositionForm" action="{{ route('updatePosition', ['vacancy' => $vacancy->id]) }}">
@ -61,14 +61,14 @@
<div class="col"> <div class="col">
<label for="vacancyName">{{__('messages.vacancy.name')}}</label> <label for="vacancyName">{{__('Vacancy name')}}</label>
<input type="text" value="{{ $vacancy->vacancyName }}" class="form-control" disabled /> <input type="text" value="{{ $vacancy->vacancyName }}" class="form-control" disabled />
</div> </div>
<div class="col"> <div class="col">
<label for="vacancyDescription">{{__('messages.vacancy.description')}}</label> <label for="vacancyDescription">{{__('Vacancy description')}}</label>
<input type="vacancyDescription" class="form-control" name="vacancyDescription" value="{{ $vacancy->vacancyDescription }}" /> <input type="vacancyDescription" class="form-control" name="vacancyDescription" value="{{ $vacancy->vacancyDescription }}" />
@ -81,9 +81,9 @@
<div class="col"> <div class="col">
<!-- skipping the accessor for obvious reasons --> <!-- skipping the accessor for obvious reasons -->
<label for="vacanyDetails">{{__('messages.vacancy.details')}}</label> <label for="vacanyDetails">{{__('Vacancy details')}}</label>
<textarea name="vacancyFullDescription" class="form-control" placeholder="{{ (is_null($vacancy->vacancyFullDescription)) ? __('messages.vacancy.no_details') : '' }}" rows="20">{{ $vacancy->getAttributes()['vacancyFullDescription'] }}</textarea> <textarea name="vacancyFullDescription" class="form-control" placeholder="{{ (is_null($vacancy->vacancyFullDescription)) ? __('No details yet... Add some!') : '' }}" rows="20">{{ $vacancy->getAttributes()['vacancyFullDescription'] }}</textarea>
<span class="text-muted"><i class="fab fa-markdown"></i> {{__('messages.vacancy.markdown')}}</span> <span class="text-muted"><i class="fab fa-markdown"></i> {{__('Markdown supported')}}</span>
</div> </div>
@ -93,14 +93,15 @@
<div class="col"> <div class="col">
<label for="permissionGroupName">{{__('messages.vacancy.permission_group')}}</label> <!-- DEPRECATED! -->
<label for="permissionGroupName">{{__('Permission group')}}</label>
<input type="text" class="form-control" value="{{ $vacancy->permissionGroupName }}" id="permissionGroupName" disabled /> <input type="text" class="form-control" value="{{ $vacancy->permissionGroupName }}" id="permissionGroupName" disabled />
</div> </div>
<div class="col"> <div class="col">
<label for="discordRoleID">{{__('messages.vacancy.discord_roleid')}}</label> <label for="discordRoleID">{{__('Discord role ID')}}</label>
<input type="text" class="form-control" value="{{ $vacancy->discordRoleID }}" id="discordRoleID" disabled /> <input type="text" class="form-control" value="{{ $vacancy->discordRoleID }}" id="discordRoleID" disabled />
@ -111,10 +112,10 @@
<div class="col"> <div class="col">
<label for="currentForm">{{__('messages.vacancy.current_form')}}</label> <label for="currentForm">{{__('Current from (uneditable)')}}</label>
<input type="text" class="form-control" value="{{ $vacancy->forms->formName }}" id="currentForm" disabled /> <input type="text" class="form-control" value="{{ $vacancy->forms->formName }}" id="currentForm" disabled />
<label for="remainingSlots">{{__('messages.vacancy.remaining_slots')}}</label> <label for="remainingSlots">{{__('Remaining slots')}}</label>
<input type="text" class="form-control" value="{{ $vacancy->vacancyCount }}" id="remainingSlots" name="vacancyCount" /> <input type="text" class="form-control" value="{{ $vacancy->vacancyCount }}" id="remainingSlots" name="vacancyCount" />
@ -128,15 +129,15 @@
<div class="card-footer"> <div class="card-footer">
<button type="button" class="btn btn-warning" onclick="$('#editPositionForm').submit()"><i class="fas fa-edit"></i> {{__('messages.vacancy.save')}}</button> <button type="button" class="btn btn-warning" onclick="$('#editPositionForm').submit()"><i class="fas fa-edit"></i> {{__('Save changes')}}</button>
<button type="button" class="btn btn-danger" onclick="window.location.href='{{ route('showPositions') }}'"><i class="fas fa-times"></i> {{__('messages.vacancy.cancel')}}</button> <button type="button" class="btn btn-danger" onclick="window.location.href='{{ route('showPositions') }}'"><i class="fas fa-times"></i> {{__('Go back')}}</button>
@if($vacancy->vacancyStatus == 'OPEN') @if($vacancy->vacancyStatus == 'OPEN')
<form method="POST" action="{{ route('updatePositionAvailability', ['vacancy' => $vacancy->id, 'status' => 'close']) }}" style="display: inline"> <form method="POST" action="{{ route('updatePositionAvailability', ['vacancy' => $vacancy->id, 'status' => 'close']) }}" style="display: inline">
@method('PATCH') @method('PATCH')
@csrf @csrf
<button type="submit" class="ml-4 btn btn-danger"><i class="fas fa-ban"></i> {{__('messages.vacancy.close_vacancy')}}</button> <button type="submit" class="ml-4 btn btn-danger"><i class="fas fa-ban"></i> {{__('Close vacancy')}}</button>
</form> </form>
@endif @endif

View File

@ -1,21 +1,15 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . '| ' . __('messages.form_builder.builder_name')) @section('title', config('app.name') . ' | ' . __('Application form management tool'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.form_builder.builder')}}</h4> <h4>{{__('Administration')}} / {{__('Form builder')}}</h4>
@stop @stop
@section('js') @section('js')
<script>
jQuery(window).bind('beforeunload', function(){
return 'Are you sure you want to leave the form builder? You might have unsaved work.';
});
</script>
@if (session()->has('success')) @if (session()->has('success'))
<script> <script>
@ -40,6 +34,23 @@
</script> </script>
@endif @endif
<script>
$(document).ready(function () {
$("#formName").keyup(function(){
if($(this).val().length > 10){
$(window).bind('beforeunload', function(){
return "{{ __('Are you sure you want to leave the form builder? You have unsaved work.') }}";
});
}
});
$(document).on("submit", "form", function(event){
$(window).off('beforeunload');
});
})
</script>
@stop @stop
@section('content') @section('content')
@ -57,9 +68,9 @@
@csrf @csrf
<fieldset id="buildyourform"> <fieldset id="buildyourform">
<legend class="text-center">{{__('messages.form_builder.builder')}}</legend> <legend class="text-center">{{__('Form builder')}}</legend>
<input type="text" name="formName" class="form-control mb-5" placeholder="{{__('messages.form_builder.name_form')}}" required> <input type="text" name="formName" id="formName" class="form-control mb-5" placeholder="{{__('Name your form...')}}" required>
</fieldset> </fieldset>
@ -69,8 +80,8 @@
<div class="card-footer text-center"> <div class="card-footer text-center">
<button onclick="save()" type="button" class="btn btn-success">{{__('messages.form_builder.save_form')}}</button> <button onclick="save()" type="button" class="btn btn-success">{{__('Save form')}}</button>
<input type="button" value="{{__('messages.new_field')}}" class="add btn btn-info ml-3" id="add" /> <input type="button" value="{{__('Add field')}}" class="add btn btn-info ml-3" id="add" />
</div> </div>

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.form_preview.title')) @section('title', config('app.name') . ' | ' . __('Previewing application form'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.form_builder.builder')}} / {{__('messages.form_preview.preview')}}</h4> <h4>{{__('Administration')}} / {{__('Form builder')}} / {{__('Preview')}}</h4>
@stop @stop
@ -22,7 +22,7 @@
<div class="col-6 offset-4"> <div class="col-6 offset-4">
<img src="/img/preview.svg" width="250px" alt="Form preview illustration" /> <img src="/img/preview.svg" width="250px" alt="{{ __('Form preview illustration') }}" />
</div> </div>
@ -33,10 +33,10 @@
<div class="col"> <div class="col">
<div class="alert alert-success"> <div class="alert alert-success">
<h5><i class="fas fa-eye"></i> {{__('messages.form_preview.looks')}}</h5> <h5><i class="fas fa-eye"></i> {{__('This is how your form looks like to applicants.')}}</h5>
<p> <p>
{{__('messages.form_preview.f_info')}} {{__('You may edit it and add more fields later.')}}
</p> </p>
</div> </div>
@ -52,7 +52,7 @@
<div class="card-header"> <div class="card-header">
<h3>{{ $title }} - {{__('messages.form')}}</h2> <h3>{{ $title }} - {{__('Form')}}</h3>
</div> </div>
@ -66,8 +66,8 @@
<div class="card-footer text-center"> <div class="card-footer text-center">
<button type="button" class="btn btn-success ml-2" onclick="window.location.href='{{ route('showForms') }}'"><i class="fas fa-chevron-left"></i> {{__('messages.back')}}</button> <button type="button" class="btn btn-success ml-2" onclick="window.location.href='{{ route('showForms') }}'"><i class="fas fa-chevron-left"></i> {{__('Go back')}}</button>
<button type="button" class="btn btn-warning ml-2" onclick="window.location.href='{{ route('editForm', ['form' => $formID]) }}'"><i class="far fa-edit"></i> {{__('messages.edit')}}</button> <button type="button" class="btn btn-warning ml-2" onclick="window.location.href='{{ route('editForm', ['form' => $formID]) }}'"><i class="far fa-edit"></i> {{__('Edit')}}</button>
</div> </div>
</div> </div>

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.forms_p.available_forms')) @section('title', config('app.name') . ' | ' . __('Available forms'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.forms')}}</h4> <h4>{{__('Administration')}} / {{__('Forms')}}</h4>
@stop @stop
@ -23,7 +23,7 @@
<div class="card bg-gray-dark"> <div class="card bg-gray-dark">
<div class="card-header bg-indigo"> <div class="card-header bg-indigo">
<div class="card-title"><h4 class="text-bold">{{__('messages.forms_p.available_forms')}}</h4></div> <div class="card-title"><h4 class="text-bold">{{__('Available forms')}}</h4></div>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -36,10 +36,10 @@
<tr> <tr>
<th>#</th> <th>#</th>
<th>{{__('messages.forms_p.form_title')}}</th> <th>{{__('Title')}}</th>
<th>{{__('messages.reusable.created_at')}}</th> <th>{{__('Created at')}}</th>
<th>{{__('messages.reusable.updated_at')}}</th> <th>{{__('Updated at')}}</th>
<th>{{__('messages.reusable.actions')}}</th> <th>{{__('Actions')}}</th>
</tr> </tr>
</thead> </thead>
@ -59,9 +59,9 @@
@method('DELETE') @method('DELETE')
@csrf @csrf
<button type="submit" class="btn btn-sm btn-danger mr-2"><i class="fa fa-trash"></i> {{__('messages.reusable.delete')}}</button> <button type="submit" class="btn btn-sm btn-danger mr-2"><i class="fa fa-trash"></i> {{__('Delete')}}</button>
</form> </form>
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{ route('previewForm', ['form' => $form->id]) }}'"><i class="fa fa-eye"></i> {{__('messages.form_preview.preview')}}</button> <button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{ route('previewForm', ['form' => $form->id]) }}'"><i class="fa fa-eye"></i> {{__('Preview form')}}</button>
</td> </td>
</tr> </tr>
@ -75,7 +75,7 @@
<div class="alert alert-warning"> <div class="alert alert-warning">
{{__('messages.forms_p.empty_noforms')}} {{__('Nothing to see here! Please add some forms first.')}}
</div> </div>
@ -85,7 +85,7 @@
<div class="card-footer"> <div class="card-footer">
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showFormBuilder')}}'">{{__('messages.forms_p.new_form')}}</button> <button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showFormBuilder')}}'">{{__('NEW FORM')}}</button>
</div> </div>

View File

@ -4,7 +4,7 @@
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('Users')}}</h4> <h4>{{__('Administration')}} / {{__('Users')}}</h4>
@stop @stop
@ -79,9 +79,9 @@
<tr> <tr>
<th>{{__('Name')}}</th> <th>{{__('Name')}}</th>
<th>{{ __('Rank') }}</th> <th>{{ __('Rank') }}</th>
<th>{{__('messages.reusable.status')}}</th> <th>{{__('Status')}}</th>
<th>{{__('messages.players.reg_date')}}</th> <th>{{__('Registration date')}}</th>
<th>{{__('messages.reusable.actions')}}</th> <th>{{__('Actions')}}</th>
</tr> </tr>
</thead> </thead>
@ -93,9 +93,9 @@
<td>{{$user->name}}</td> <td>{{$user->name}}</td>
<td> <td>
@if ($user->hasRole('reviewer')) @if ($user->hasRole('reviewer'))
<span class="badge badge-warning"><i class="fas fa-user"></i> Staff</span> <span class="badge badge-warning"><i class="fas fa-user"></i> {{ __('Staff') }}</span>
@else @else
<span class="badge-warning badge"><i class="fas fa-user"></i> Member</span> <span class="badge-warning badge"><i class="fas fa-user"></i> {{ __('Member') }}</span>
@endif @endif
</td> </td>
<td> <td>
@ -115,9 +115,9 @@
@else @else
<div class="alert alert-secondary"> <div class="alert alert-secondary">
<i class="fas fa-question"></i><span> {{__('messages.players.no_reg')}}</span> <i class="fas fa-question"></i><span> {{__('There are no registered users!')}}</span>
<p> <p>
{{__('messages.players.no_reg_exp')}} {{__('Registered users are those without a staff role in the team management application.')}}
</p> </p>
</div> </div>

View File

@ -1,13 +1,13 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.open_positions')) @section('title', config('app.name') . ' | ' . __('Open vacancies'))
@section('content_header') @section('content_header')
@if (Auth::user()->hasAnyRole('admin', 'hiringManager')) @if (Auth::user()->hasAnyRole('admin', 'hiringManager'))
<h4>{{__('messages.adm')}} / {{__('messages.open_positions')}}</h4> <h4>{{__('Administration')}} / {{__('Open vacancies')}}</h4>
@else @else
<h4>{{__('messages.reusable.no_access')}}</h4> <h4>{{__('Application access denied')}}</h4>
@endif @endif
@stop @stop
@ -29,7 +29,7 @@
@if($errors->any()) @if($errors->any())
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<script>toastr.error('{{$error}}', '{{__('messages.reusable.validation_err')}}')</script> <script>toastr.error('{{$error}}', '{{__('Validation error!')}}')</script>
@endforeach @endforeach
@endif @endif
@ -42,7 +42,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="modalFormLabel">{{__('messages.new_vacancy')}}</h5> <h5 class="modal-title" id="modalFormLabel">{{__('New vacancy')}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@ -53,35 +53,35 @@
<form id="savePositionForm" action="{{route('savePosition')}}" method="POST"> <form id="savePositionForm" action="{{route('savePosition')}}" method="POST">
@csrf @csrf
<label for="vacancyName">{{__('messages.vacancy.name')}}</label> <label for="vacancyName">{{__('Vacancy name')}}</label>
<input type="text" id="vacancyName" name="vacancyName" class="form-control"> <input type="text" id="vacancyName" name="vacancyName" class="form-control">
<label for="vacancyDescription">{{__('messages.vacancy.description')}}</label> <label for="vacancyDescription">{{__('Vacancy description')}}</label>
<input type="text" id="vacancyDescription" name="vacancyDescription" class="form-control"> <input type="text" id="vacancyDescription" name="vacancyDescription" class="form-control">
<label for="vacancyFullDescription">{{__('messages.vacancy.description')}}</label> <label for="vacancyFullDescription">{{__('Vacancy details')}}</label>
<textarea name="vacancyFullDescription" class="form-control" rel="txtTooltip" title="{{__('messages.vacancy.description_tooltip')}}" data-toggle="tooltip" data-placement="bottom"></textarea> <textarea name="vacancyFullDescription" class="form-control" rel="txtTooltip" title="{{__('Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary')}}" data-toggle="tooltip" data-placement="bottom"></textarea>
<span class="right text-muted"><i class="fab fa-markdown"></i> {{__('messages.vacancy.markdown')}}</span> <span class="right text-muted"><i class="fab fa-markdown"></i> {{__('Markdown supported')}}</span>
<div class="row mt-3"> <div class="row mt-3">
<div class="col"> <div class="col">
<label for="pgroup">{{__('messages.vacancy.permission_group')}}</label> <label for="pgroup">{{__('Permission group')}}</label>
<input rel="txtTooltip" title="{{__('messages.vacancy.permission_group_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="pgroup" name="permissionGroup" class="form-control"> <input rel="txtTooltip" title="{{__("The permission group from your server/network's permissions manager. Compatible with Luckperms and PEX (This feature is deprecated and will be removed on a future version).")}}" data-toggle="tooltip" data-placement="bottom" type="text" id="pgroup" name="permissionGroup" class="form-control">
</div> </div>
<div class="col"> <div class="col">
<label for="discordrole">{{__('messages.vacancy.discord_roleid')}} (*)</label> <label for="discordrole">{{__('Discord Role ID')}} (*)</label>
<input rel="txtTooltip" title="{{__('messages.vacancy.discord_roleid_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="discordrole" name="discordRole" class="form-control"> <input rel="txtTooltip" title="{{__("Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server's roles tab, right click any role to copy it's ID.")}}" data-toggle="tooltip" data-placement="bottom" type="text" id="discordrole" name="discordRole" class="form-control">
</div> </div>
</div> </div>
<div class="form-group mt-4"> <div class="form-group mt-4">
<label for="associatedForm">{{__('messages.positions_p.application_form')}}</label> <label for="associatedForm">{{__('Application form')}}</label>
<select class="custom-select" name="vacancyFormID" id="associatedForm"> <select class="custom-select" name="vacancyFormID" id="associatedForm">
<option disabled>{{__('messages.positions_p.select_form')}}</option> <option disabled>{{__('Select a form...')}}</option>
@foreach($forms as $form) @foreach($forms as $form)
<option value="{{$form->id}}">{{$form->formName}}</option> <option value="{{$form->id}}">{{$form->formName}}</option>
@ -90,8 +90,8 @@
</select> </select>
<label for="vacancyCount">{{__('messages.vacancy.free_slots')}}</label> <label for="vacancyCount">{{__('Free slots')}}</label>
<input rel="txtTooltip" title="{{__('messages.vacancy.free_slots_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="vacancyCount" name="vacancyCount" class="form-control"> <input rel="txtTooltip" title="{{__('The number of free slots decreases each time an applicant is approved for this vacancy.')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="vacancyCount" name="vacancyCount" class="form-control">
</div> </div>
@ -102,7 +102,9 @@
<div class="alert alert-danger"> <div class="alert alert-danger">
<p> <p>
{{__('messages.positions_p.no_form_error')}} {{__('You cannot create a vacancy without any forms with which people would apply.')}}
{{ __('Create a form first, then, create a vacancy.') }}
{{ __("A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.") }}
</p> </p>
</div> </div>
@ -112,10 +114,10 @@
<div class="modal-footer"> <div class="modal-footer">
@if(!$forms->isEmpty()) @if(!$forms->isEmpty())
<button type="button" class="btn btn-primary" onclick="document.getElementById('savePositionForm').submit()">{{__('messages.vacancy.add')}}</button> <button type="button" class="btn btn-primary" onclick="document.getElementById('savePositionForm').submit()">{{__('Add vacancy')}}</button>
@endif @endif
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{__('messages.modal_close')}}</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">{{__('Close')}}</button>
</div> </div>
</div> </div>
</div> </div>
@ -129,7 +131,7 @@
<div class="card-body"> <div class="card-body">
<button type="button" class="btn btn-primary" onclick="$('#newVacancyForm').modal('show')">{{__('messages.positions_p.new_pos')}}</button> <button type="button" class="btn btn-primary" onclick="$('#newVacancyForm').modal('show')">{{__('NEW VACANCY')}}</button>
</div> </div>
@ -146,7 +148,7 @@
<div class="card bg-gray-dark"> <div class="card bg-gray-dark">
<div class="card-header bg-indigo"> <div class="card-header bg-indigo">
<div class="card-title"><h4 class="text-bold">{{__('messages.open_positions')}}</h4></div> <div class="card-title"><h4 class="text-bold">{{__('Open vacancies')}}</h4></div>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -158,12 +160,12 @@
<thead> <thead>
<tr> <tr>
<th>{{__('messages.contactlabel_name')}}</th> <th>{{__('Name')}}</th>
<th>{{__('messages.reusable.description')}}</th> <th>{{__('Description')}}</th>
<th>{{__('messages.vacancy.free_slots')}}</th> <th>{{__('Free slots')}}</th>
<th>{{__('messages.reusable.status')}}</th> <th>{{__('Status')}}</th>
<th>{{__('messages.reusable.created_at')}}</th> <th>{{__('Created at')}}</th>
<th>{{__('messages.reusable.actions')}}</th> <th>{{__('Actions')}}</th>
</tr> </tr>
</thead> </thead>
@ -177,9 +179,9 @@
<td>{{substr($vacancy->vacancyDescription, 0, 20)}}...</td> <td>{{substr($vacancy->vacancyDescription, 0, 20)}}...</td>
<td>{{$vacancy->vacancyCount}}</td> <td>{{$vacancy->vacancyCount}}</td>
@if($vacancy->vacancyStatus == 'OPEN') @if($vacancy->vacancyStatus == 'OPEN')
<td><span class="badge badge-success">{{__('messages.open')}}</span></td> <td><span class="badge badge-success">{{__('Open')}}</span></td>
@else @else
<td><span class="badge badge-danger">{{__('messages.closed')}}</span></td> <td><span class="badge badge-danger">{{__('Closed')}}</span></td>
@endif @endif
<td>{{$vacancy->created_at}}</td> <td>{{$vacancy->created_at}}</td>
<td> <td>
@ -223,7 +225,7 @@
@else @else
<div class="alert alert-warning"> <div class="alert alert-warning">
<p>{{__('messages.positions_p.empty_pos_warning')}}</p> <p>{{__('Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)')}}</p>
</div> </div>
@endif @endif
@ -231,7 +233,7 @@
<div class="card-footer"> <div class="card-footer">
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showForms')}}'">{{__('messages.positions_p.manage_forms')}}</button> <button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showForms')}}'">{{__('MANAGE APPLICATION FORMS')}}</button>
</div> </div>

View File

@ -1,13 +1,13 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.settings.settings')) @section('title', config('app.name') . ' | ' . __('Settings'))
@section('content_header') @section('content_header')
@if (Auth::user()->hasAnyRole('admin')) @if (Auth::user()->hasAnyRole('admin'))
<h4>{{__('messages.adm')}} / {{__('messages.settings.settings')}}</h4> <h4>{{__('Administration')}} / {{__('Settings')}}</h4>
@else @else
<h4>{{__('messages.reusable.no_access')}}</h4> <h4>{{__('Application access denied')}}</h4>
@endif @endif
@stop @stop
@ -34,7 +34,7 @@
@if($errors->any()) @if($errors->any())
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<script>toastr.error('{{$error}}', 'Validation error!')</script> <script>toastr.error('{{$error}}', '{{__('Validation error!')}}')</script>
@endforeach @endforeach
@endif @endif
@ -43,38 +43,38 @@
@section('content') @section('content')
<div class="row"> <div class="row">
<div class="col">
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="fas fa-info-circle"></i> <b>Available security policies</b> (current policy: {{ $security['secPolicy'] }})
<p><b>Disabled:</b> No security policy will be enforced. This is insecure.</p> <div class="col">
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="fas fa-info-circle"></i> {!! __('<b>Available security policies</b> (current policy: :currentPolicySettingValue)', ['currentPolicySettingValue' => $security['secPolicy']]) !!}
<p>{!! __('<b>Disabled:</b> No security policy will be enforced. This is insecure.') !!}</p>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<p><b>Low:</b> Good choice for low-traffic websites, e.g. community with less than 100 members.</p> <p>{!! __("<b>Low:</b> Good choice for low-traffic websites, e.g. community with less than 100 members.") !!}</p>
<ul> <ul>
<li>Minimum 10 characters</li> <li>{{ __('Minimum 10 characters') }}</li>
</ul> </ul>
</div> </div>
<div class="col"> <div class="col">
<p><b>Medium (recommended):</b> Standard for most websites.</p> <p>{!! __('<b>Medium (recommended):</b> Standard for most websites.') !!}</p>
<ul> <ul>
<li>Minimum 12 characters</li> <li>{{ __('Minimum 12 characters') }}</li>
<li>Must contain special characters</li> <li>{{ __('Must contain special characters') }}</li>
<li>Must contain upper and lower case characters</li> <li>{{ __('Must contain upper and lower case characters') }}</li>
</ul> </ul>
</div> </div>
<div class="col"> <div class="col">
<p><b>(╯°□°)╯︵ ┻━┻:</b> For security aficionados. More of a nuisance than a good policy.</p> <p>{!! __('<b>(╯°□°)╯︵ ┻━┻:</b> For security aficionados. More of a nuisance than a good policy.') !!}</p>
<ul> <ul>
<li>Minimum 20 characters</li> <li>{{ __('Minimum 20 characters') }}</li>
<li>Same as Medium, but: </li> <li>{{ __('Same as Medium, but: ') }}</li>
<ul> <ul>
<li>Must contain numerical characters</li> <li>{{ __('Must contain numerical characters') }}</li>
</ul> </ul>
</ul> </ul>
</div> </div>
@ -85,7 +85,7 @@
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
@ -95,17 +95,17 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="alert alert-danger">
<p><b><i class="fas fa-exclamation-triangle"></i> DANGER: </b> Insecure security policy</p>
<p>Your current password security policy is set to <b>off</b>. This allows users to choose potentially unsafe passwords. We strongly recommend you update this value to <b>Medium</b>.</p> <div class="alert alert-danger">
<p>{!! __('<b><i class="fas fa-exclamation-triangle"></i> DANGER: </b> Insecure security policy') !!}</p>
<p>{!! __('Your current password security policy is set to <b>off</b>. This allows users to choose potentially unsafe passwords. We strongly recommend you update this value to <b>Medium</b>.') !!}</p>
</div> </div>
</div> </div>
</div> </div>
@endif @endif
@ -117,8 +117,8 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h3>{{__('messages.settings.settings_header')}}</h3> <h3>{{__('Notification settings')}}</h3>
<p>{{__('messages.settings.settings_p')}}</p> <p>{{__('Change which notifications are sent here.')}}</p>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -137,7 +137,7 @@
</div> </div>
<div class="card-footer"> <div class="card-footer">
<button type="button" class="btn btn-success" onclick="$('#settings').submit()"><i class="fa fa-save"></i> {{__('messages.vacancy.save')}}</button> <button type="button" class="btn btn-success" onclick="$('#settings').submit()"><i class="fa fa-save"></i> {{__('Save changes')}}</button>
</div> </div>
</div> </div>
@ -145,12 +145,12 @@
</div> </div>
<div class="col"> <div class="col">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h3>Security Settings</h3> <h3>{{ __('Security Settings') }}</h3>
<p>Here, you can configure security settings for the app, for all users.</p> <p>{{ __('Here, you can configure security settings for the app, for all users.') }}</p>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -160,44 +160,44 @@
<div class="form-group"> <div class="form-group">
<label for="policy">Password Security Policy</label> <label for="policy">{{__('Password Security Policy')}}</label>
<select class="custom-select form-control" name="secPolicy"> <select class="custom-select form-control" name="secPolicy">
<option value="nil" disabled>Choose a security policy</option> <option value="nil" disabled>{{ __('Choose a security policy') }}</option>
<option value="off" {{ ($security['secPolicy'] == 'off') ? 'selected' : '' }}>Disabled (default)</option> <option value="off" {{ ($security['secPolicy'] == 'off') ? 'selected' : '' }}>{{ __('Disabled (default)') }}</option>
<option value="low" {{ ($security['secPolicy'] == 'low') ? 'selected' : '' }}>Low</option> <option value="low" {{ ($security['secPolicy'] == 'low') ? 'selected' : '' }}>{{ __('Low') }}</option>
<option value="medium" {{ ($security['secPolicy'] == 'medium') ? 'selected' : '' }}>Medium</option> <option value="medium" {{ ($security['secPolicy'] == 'medium') ? 'selected' : '' }}>{{ __('Medium') }}</option>
<option value="high" {{ ($security['secPolicy'] == 'high') ? 'selected' : '' }}>High (╯°□°)╯︵ ┻━┻</option> <option value="high" {{ ($security['secPolicy'] == 'high') ? 'selected' : '' }}>{{ __('High (╯°□°)╯︵ ┻━┻') }}</option>
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="graceperiod">Grace period for 2FA requirement (above <code>reviewer</code>)</label> <label for="graceperiod">{!! __('Grace period for 2FA requirement (above <code>reviewer</code>)') !!}</label>
<input type="text" class="form-control" id="graceperiod" placeholder="time in days" name="graceperiod" value="{{$security['graceperiod']}}"> <input type="text" class="form-control" id="graceperiod" placeholder="time in days" name="graceperiod" value="{{$security['graceperiod']}}">
<p class="text-muted text-sm"><i class="fas fa-info-circle"></i> Users will be locked out after this time period if they fail to enable 2FA. Leave empty to disable.</p> <p class="text-muted text-sm"><i class="fas fa-info-circle"></i> {{ __('Users will be locked out after this time period if they fail to enable 2FA. Leave empty to disable.') }}</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="pwExpiry">Password Expiry Control</label> <label for="pwExpiry">{{ __('Password Expiry Control') }}</label>
<input type="text" class="form-control" id="pwExpiry" placeholder="time in days" name="pwExpiry" value="{{ $security['pwExpiry'] }}"> <input type="text" class="form-control" id="pwExpiry" placeholder="time in days" name="pwExpiry" value="{{ $security['pwExpiry'] }}">
<p class="text-muted text-sm"><i class="fas fa-info-circle"></i> Leave this field zeroed to disable. Users will be forced to reset their password after the specified time.</p> <p class="text-muted text-sm"><i class="fas fa-info-circle"></i> {{ __('Leave this field zeroed to disable. Users will be forced to reset their password after the specified time.') }}</p>
</div> </div>
<div class="form-group form-check"> <div class="form-group form-check">
<input type="hidden" name="enforce2fa" value="0"> <input type="hidden" name="enforce2fa" value="0">
<input type="checkbox" name="enforce2fa" value="1" id="enforce2fa" class="form-check-input" {{ $security['enforce2fa'] == true ? 'checked' : '' }}> <input type="checkbox" name="enforce2fa" value="1" id="enforce2fa" class="form-check-input" {{ $security['enforce2fa'] == true ? 'checked' : '' }}>
<label for="enforceAdmin2fa">Force roles above <code>reviewer</code> to use two factor authentication?</label> <label for="enforceAdmin2fa">{{ __('Force roles above <code>reviewer</code> to use two factor authentication?') }}</label>
</div> </div>
<div class="form-group form-check"> <div class="form-group form-check">
<input type="hidden" name="requirePMC" value="0"> <input type="hidden" name="requirePMC" value="0">
<input type="checkbox" name="requirePMC" value="1" id="requirePMC" class="form-check-input" {{ $security['requiresPMC'] == true ? 'checked' : '' }}> <input type="checkbox" name="requirePMC" value="1" id="requirePMC" class="form-check-input" {{ $security['requiresPMC'] == true ? 'checked' : '' }}>
<label for="requirePMC">Require a valid game license to signup?</label> <label for="requirePMC">{{ __('Require a valid game license to signup?') }}</label>
<p class="text-muted text-sm"><i class="fas fa-info-circle"></i> Choose a game in the section below, if applicable.</p> <p class="text-muted text-sm"><i class="fas fa-info-circle"></i> {{ __('Choose a game in the section below, if applicable.') }}</p>
</div> </div>
</form> </form>
@ -205,22 +205,22 @@
</div> </div>
<div class="card-footer"> <div class="card-footer">
<button onclick="$('#security').submit()" type="button" class="btn btn-success"><i class="fas fa-save"></i> Save Changes</button> <button onclick="$('#security').submit()" type="button" class="btn btn-success"><i class="fas fa-save"></i> {{ __('Save Changes') }}</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col"> <div class="col">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h4>Game Integration</h4> <h4>{{ __('Game Integration') }}</h4>
<p>In this section, you can choose which game your community plays. This gives you the ability to limit signups to users with valid game accounts, keeping pirates out. It also swaps front page images with images for that game, if you haven't customised them. Leave unselected if your community does not revolve around a game.</p> <p>{{ __("In this section, you can choose which game your community plays. This gives you the ability to limit signups to users with valid game accounts, keeping pirates out. It also swaps front page images with images for that game, if you haven't customised them. Leave unselected if your community does not revolve around a game.") }}</p>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -258,15 +258,15 @@
<img alt="Gmod Logo" height="150px" width="150px" src="/img/se.png"> <img alt="Gmod Logo" height="150px" width="150px" src="/img/se.png">
</label> </label>
</div> </div>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<button onclick="$('#gamePrefForm').submit()" type="button" class="btn btn-success"><i class="fas fa-save"></i> Save Changes</button> <button onclick="$('#gamePrefForm').submit()" type="button" class="btn btn-success"><i class="fas fa-save"></i> {{ __('Save Changes') }}</button>
</div> </div>
</div> </div>
</div> </div>
@ -274,39 +274,39 @@
<div class="row mt-3"> <div class="row mt-3">
<div class="col"> <div class="col">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h4>Integration with 3rd party services</h4> <h4>{{ __('Integration with 3rd party services') }}</h4>
<p>Configure any of the thirdy party services below to facilitate recruiting staff for specific services.</p> <p>{{ __('Configure any of the thirdy party services below to facilitate recruiting staff for specific services.') }}</p>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="form-group mb-3"> <div class="form-group mb-3">
<div class="row text-center"> <div class="row text-center">
<div class="col mt-4"> <div class="col mt-4">
<img src="/img/discord-mark-white.svg" width="270px" alt="Discord Workmark Logo - Black"><br> <img src="/img/discord-mark-white.svg" width="270px" alt="Discord Workmark Logo - Black"><br>
<button class="btn btn-primary mt-4" type="button"><i class="fab fa-discord"></i> Configure Integration</button> <button class="btn btn-primary mt-4" type="button"><i class="fab fa-discord"></i> {{ __('Configure Integration') }}</button>
</div> </div>
<div class="col"> <div class="col">
<img src="/img/reddit-mark-white.svg" width="250px" alt="Reddit Wordmark Logo - OrangeRed"><br> <img src="/img/reddit-mark-white.svg" width="250px" alt="Reddit Wordmark Logo - OrangeRed"><br>
<button class="btn btn-primary mt-4" type="button"><i class="fab fa-reddit"></i> Configure Integration</button> <button class="btn btn-primary mt-4" type="button"><i class="fab fa-reddit"></i> {{ __('Configure Integration') }}</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<p class="text-muted text-bold"><i class="fas fa-exclamation-triangle"></i><b> Disclaimer: </b> {{ config('app.name') }} is not affiliated with and does not endorse the brands displayed above.</p> <p class="text-muted text-bold"><i class="fas fa-exclamation-triangle"></i><b> {{ __('Disclaimer:') }} </b> {{ __(':siteNameSettingValue is not affiliated with and does not endorse the brands displayed above.', ['siteNameSettingValue' => config('app.name')]) }}</p>
</div> </div>
</div> </div>

View File

@ -1,10 +1,10 @@
@extends('adminlte::page') @extends('adminlte::page')
@section('title', config('app.name') . ' | ' . __('messages.staff.members')) @section('title', config('app.name') . ' | ' . __('Staff members'))
@section('content_header') @section('content_header')
<h4>{{__('messages.adm')}} / {{__('messages.staff.members')}}</h4> <h4>{{__('Administration')}} / {{__('Staff members')}}</h4>
@stop @stop
@ -17,7 +17,7 @@
<div class="inner"> <div class="inner">
<h3>{{$users->count()}}</h3> <h3>{{$users->count()}}</h3>
<p>{{__('messages.staff.active_sm')}}</p> <p>{{__('Active Staff Members')}}</p>
</div> </div>
<div class="icon"> <div class="icon">
<i class="fa fa-user-tie"></i> <i class="fa fa-user-tie"></i>
@ -35,7 +35,7 @@
<div class="card-header bg-indigo"> <div class="card-header bg-indigo">
<div class="card-title"><h4 class="text-bold">{{__('messages.staff.m_listing')}}</h4></div> <div class="card-title"><h4 class="text-bold">{{__('Member listing')}}</h4></div>
</div> </div>
@ -46,12 +46,12 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th>{{__('messages.staff.f_name')}}</th> <th>{{__('Full name')}}</th>
<th>{{__('messages.staff.rank')}}</th> <th>{{__('Rank')}}</th>
<th>{{__('messages.contactlabel_email')}}</th> <th>{{__('Email')}}</th>
<th>{{__('messages.reusable.status')}}</th> <th>{{__('Status')}}</th>
<th>{{__('messages.reusable.join_date')}}</th> <th>{{__('Join date')}}</th>
<th>{{__('messages.reusable.actions')}}</th> <th>{{__('Actions')}}</th>
</tr> </tr>
</thead> </thead>
@ -87,7 +87,7 @@
<div class="card-footer"> <div class="card-footer">
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("registeredPlayerList")}}'">{{__('messages.players.reg_players_staff')}}</button> <button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("registeredPlayerList")}}'">{{__('View Registered Users (Applicant Pool)')}}</button>
</div> </div>