diff --git a/.editorconfig b/.editorconfig index 3f4517ba0..aed3cd2d7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -51,7 +51,8 @@ max_line_length = unset [*.{yml,yaml}] indent_size = 2 -[*.mo] +# Ignore for +[{*.mo,LICENSE}] charset = unset end_of_line = unset indent_style = unset diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bbd4b55f3..4914f5155 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -297,8 +297,8 @@ release-image: --dockerfile /dev/stdin --destination "${RELEASE_IMAGE}" --cache=true - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH .deploy_template: &deploy_definition stage: release @@ -344,8 +344,8 @@ pages: expire_in: 1 week paths: - public - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH variables: GIT_STRATEGY: none @@ -370,8 +370,8 @@ deploy: environment: name: rsync-staging deployment_tier: development - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH script: # Check if deployment variables where set - |- @@ -498,8 +498,8 @@ deploy-production: name: rsync-production deployment_tier: production when: manual - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH script: # Check if deployment variables where set - |- @@ -522,14 +522,14 @@ deploy-k8s-production: name: production on_stop: stop-k8s-production when: manual - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH stop-k8s-production: <<: *deploy_k8s_stop needs: [ deploy-k8s-production ] - only: - - main + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH environment: name: production action: stop diff --git a/config/config.default.php b/config/config.default.php index 4fc737250..e659d6e49 100644 --- a/config/config.default.php +++ b/config/config.default.php @@ -2,12 +2,12 @@ declare(strict_types=1); -// To change settings create a config.php +// To change or overwrite some settings, create a config.php return [ // MySQL-Connection Settings 'database' => [ - 'host' => env('MYSQL_HOST', (env('CI', false) ? 'mariadb' : 'localhost')), + 'host' => env('MYSQL_HOST', 'localhost'), 'database' => env('MYSQL_DATABASE', 'engelsystem'), 'username' => env('MYSQL_USER', 'root'), 'password' => env('MYSQL_PASSWORD', ''), @@ -16,7 +16,7 @@ // For accessing /metrics (and /stats) 'api_key' => env('API_KEY', ''), - // Enable maintenance mode (show a static page) + // Enable maintenance mode (show a static page to all users) 'maintenance' => (bool) env('MAINTENANCE', false), // Application name (not the event name) @@ -30,23 +30,23 @@ // Header links // Available link placeholders: %lang% - // To disable a header_item in the config.php, you can set its value to null + // To disable a header_item in config.php, you can set its value to null 'header_items' => [ - // Name can be a translation string, permission is a engelsystem privilege + // Name can be a translation string, permission is an engelsystem privilege // 'Name' => 'URL', - // 'Name' => ['URL', 'permission'], + // 'some.key' => ['URL', 'permission'], //'Foo' => ['https://foo.bar/batz-%lang%.html', 'logout'], // Permission: for logged-in users ], // Footer links - // To disable a footer item in the config.php, you can set its value to null + // To disable a footer item in config.php, you can set its value to null 'footer_items' => [ // Name can be a translation string, permission is a engelsystem privilege // 'Name' => 'URL', - // 'Name' => ['URL', 'permission'], + // 'some.key' => ['URL', 'permission'], - // URL to the angel faq and job description + // URL to faq page 'faq.faq' => [env('FAQ_URL', '/faq'), 'faq.view'], // Contact email address, linked on every page @@ -60,7 +60,7 @@ 'general.email' => env('CONTACT_EMAIL', 'mailto:ticket@c3heaven.de'), ], - // Text displayed on the FAQ page, rendered as markdown + // Additional text displayed on the FAQ page, rendered as markdown 'faq_text' => env('FAQ_TEXT'), // Link to documentation/help @@ -68,7 +68,7 @@ // Email config 'email' => [ - // Can be mail, smtp, sendmail or log or an symfony mailer dsn string like smtps://[usr]:[pass]@smtp.foo.bar:465 + // Can be mail, smtp, sendmail, log or an symfony mailer dsn string like smtps://[usr]:[pass]@smtp.foo.bar:465 'driver' => env('MAIL_DRIVER', 'mail'), 'from' => [ // From address of all emails @@ -78,7 +78,7 @@ 'host' => env('MAIL_HOST', 'localhost'), 'port' => env('MAIL_PORT', 587), - // If tls transport encryption should be used + // If tls transport encryption should be enabled 'tls' => env('MAIL_TLS'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), @@ -88,12 +88,13 @@ // Your privacy@ contact address 'privacy_email' => env('PRIVACY_EMAIL'), - // Show opt in to save some personal data after the event on user profile and registration pages - 'enable_email_goodie' => (bool) env('ENABLE_EMAIL_GOODIE', true), + // Show opt-in on user profile and registration pages to save some personal data after the event + 'enable_email_goodie' => (bool) env('ENABLE_EMAIL_GOODIE', false), - // Initial admin password + // Initial admin password, configured on first migration 'setup_admin_password' => env('SETUP_ADMIN_PASSWORD'), + // Setup external authentication providers 'oauth' => [ // '[name]' => [config] /* @@ -141,18 +142,18 @@ 'groups' => 'groups', // Groups to team (angeltype) mapping (optional) 'teams' => [ - '/Lorem' => 4, // 4 being the ID of the angeltype - '/Foo Mod' => ['id' => 5, 'supporter' => true], // 5 being the ID of the angeltype + '/Lorem' => 4, // 4 being the ID of the team (angeltype) + '/Foo Mod' => ['id' => 5, 'supporter' => true], // 5 being the ID of the team (angeltype) ], ], */ ], - // Default theme, 1=style1.css + // Default theme, 1 = theme1.scss etc. 'theme' => env('THEME', 1), // Supported themes - // To disable a theme in the config.php, you can set its value to null + // To disable a theme in config.php, you can set its value to null 'themes' => [ 17 => [ 'name' => 'Engelsystem 37c3 (2023)', @@ -246,7 +247,7 @@ ], ], - // Redirect to this site after logging in or when pressing the top-left button + // Redirect to this site after logging in or when clicking the page name // Must be one of news, meetings, user_shifts, angeltypes, questions 'home_site' => env('HOME_SITE', 'news'), @@ -256,7 +257,7 @@ // Users are able to sign up 'registration_enabled' => (bool) env('REGISTRATION_ENABLED', true), - // URL to external registration page, used on login page + // URL to external registration page, linked from login page 'external_registration_url' => env('EXTERNAL_REGISTRATION_URL'), // Required user fields @@ -269,13 +270,13 @@ 'dect' => (bool) env('DECT_REQUIRED', false), ], - // Only arrived angels can sign up for shifts + // Only arrived users can sign up for shifts 'signup_requires_arrival' => (bool) env('SIGNUP_REQUIRES_ARRIVAL', false), - // Whether newly-registered user should automatically be marked as arrived - 'autoarrive' => (bool) env('ANGEL_AUTOARRIVE', false), + // Whether newly-registered users should automatically be marked as arrived + 'autoarrive' => (bool) env('AUTOARRIVE', false), - // Supporters of an angeltype can promote other angels of the angeltype to supporter + // Supporters of a team (angeltype) can promote other users of the team (angeltype) to supporter 'supporters_can_promote' => (bool) env('SUPPORTERS_CAN_PROMOTE', false), // Only allow shift signup this number of hours in advance @@ -283,51 +284,51 @@ 'signup_advance_hours' => env('SIGNUP_ADVANCE_HOURS', 0), // Allow signup this many minutes after the start of the shift. - // If signup_post_fraction is set, first applies that before adding the number of minutes specified by this. + // If signup_post_fraction is set, it's first applied before adding the number of minutes specified here. 'signup_post_minutes' => env('SIGNUP_POST_MINUTES', 0), // Allow signup this fraction of the shift length after the start of the shift. - // Example: If this is set to 1, signup is allowed until the end of a shift - // If this is set to 0.5, signup is allowd for the first half of a shift - // If signup_post_minutes is set, first applies this and then adds the signup_post_minutes on top. + // Example: If it is set to 1, signup is allowed until the end of a shift + // If it is set to 0.5, signup is allowed for the first half of a shift + // If signup_post_minutes is set, this is first applied and then the signup_post_minutes added on top. 'signup_post_fraction' => env('SIGNUP_POST_FRACTION', 0), - // Number of hours that an angel has to sign out own shifts + // Number of hours that a user can sign out of own shifts beforehand 'last_unsubscribe' => env('LAST_UNSUBSCRIBE', 3), // Define the algorithm to use for `password_verify()` - // If the user uses an old algorithm the password will be converted to the new format + // If a user password is hashed with an old algorithm, the password will be converted to the new format on login // See https://secure.php.net/manual/en/password.constants.php for a complete list 'password_algorithm' => env('PASSWORD_ALGORITHM', PASSWORD_DEFAULT), // The minimum length for passwords - 'min_password_length' => env('PASSWORD_MINIMUM_LENGTH', 8), + 'password_min_length' => env('PASSWORD_MIN_LENGTH', 8), - // Whether the login and registration via password should be enabled (login will be hidden) + // Whether the login and registration via password should be enabled (login will be hidden if false) // This is useful when using oauth, disabling it also disables normal registration without oauth 'enable_password' => (bool) env('ENABLE_PASSWORD', true), // Whether the DECT field should be enabled 'enable_dect' => (bool) env('ENABLE_DECT', true), - // Whether the mobile number can be shown to other users + // Whether the mobile number will be shown to other users 'enable_mobile_show' => (bool) env('ENABLE_MOBILE_SHOW', false), // Regular expression describing a FALSE username. // Per default usernames must only contain alphanumeric chars, "-", "_" or ".". 'username_regex' => (string) env('USERNAME_REGEX', '/([^\p{L}\p{N}_.-]+)/ui'), - // Enables first name and last name - 'enable_user_name' => (bool) env('ENABLE_USER_NAME', false), + // Enable first name and last name + 'enable_full_name' => (bool) env('ENABLE_FULL_NAME', false), // Show a users first name and last name instead of username 'display_full_name' => env('DISPLAY_FULL_NAME', false) - && env('ENABLE_USER_NAME', false), + && env('ENABLE_FULL_NAME', false), // Enable displaying the pronoun fields 'enable_pronoun' => (bool) env('ENABLE_PRONOUN', true), - // Enables the planned arrival/leave date + // Enable the planned arrival/leave date 'enable_planned_arrival' => (bool) env('ENABLE_PLANNED_ARRIVAL', true), // Whether force active should be enabled @@ -339,10 +340,10 @@ // 'tshirt' => goodie that is called tshirt and has sizing options 'goodie_type' => env('GOODIE_TYPE', 'goodie'), - // Enables the food voucher in the user profile + // Enable (food) vouchers 'enable_voucher' => (bool) env('ENABLE_VOUCHER', true), - // Number of shifts to freeload until angel is locked for shift signup. + // Number of shifts to freeload until a user is locked from shift signup. 'max_freeloadable_shifts' => env('MAX_FREELOADABLE_SHIFTS', 2), // Hide columns in backend user view. Possible values are any sortable parameters of the table. @@ -369,7 +370,7 @@ 'voucher_start' => env('VOUCHER_START') ?: null, ], - // Enables Driving License + // Enable Driving License 'driving_license_enabled' => (bool) env('DRIVING_LICENSE_ENABLED', true), # Instruction in accordance with ยง 43 Para. 1 of the German Infection Protection Act (IfSG) @@ -379,7 +380,7 @@ 'ifsg_light_enabled' => env('IFSG_LIGHT_ENABLED', false) && env('IFSG_ENABLED', false), // Available locales in /resources/lang/ - // To disable a locale in the config.php, you can set its value to null + // To disable a locale in config.php, you can set its value to null 'locales' => [ 'de_DE' => 'Deutsch', 'en_US' => 'English', @@ -389,7 +390,7 @@ 'default_locale' => env('DEFAULT_LOCALE', 'en_US'), // Available T-Shirt sizes - // To disable a t-shirt size in the config.php, you can set its value to null + // To disable a t-shirt size in config.php, you can set its value to null 'tshirt_sizes' => [ 'S' => 'Small Straight-Cut', 'S-F' => 'Small Fitted-Cut', @@ -442,7 +443,7 @@ // Add additional headers 'add_headers' => (bool) env('ADD_HEADERS', true), // Predefined headers - // To disable a header in the config.php, you can set its value to null + // To disable a header in config.php, you can set its value to null 'headers' => [ 'X-Content-Type-Options' => 'nosniff', 'X-Frame-Options' => 'sameorigin', diff --git a/config/routes.php b/config/routes.php index 3639c660a..97597797e 100644 --- a/config/routes.php +++ b/config/routes.php @@ -146,6 +146,9 @@ function (RouteCollector $route): void { $route->get('/news', 'Api\NewsController@index'); + $route->get('/shifttypes', 'Api\ShiftTypeController@index'); + $route->get('/shifttypes/{shifttype_id:\d+}/shifts', 'Api\ShiftsController@entriesByShiftType'); + $route->get('/users/{user_id:(?:\d+|self)}', 'Api\UsersController@user'); $route->get('/users/{user_id:(?:\d+|self)}/angeltypes', 'Api\AngelTypeController@ofUser'); $route->get('/users/{user_id:(?:\d+|self)}/shifts', 'Api\ShiftsController@entriesByUser'); diff --git a/includes/pages/admin_user.php b/includes/pages/admin_user.php index dd359252b..cf757a9fe 100644 --- a/includes/pages/admin_user.php +++ b/includes/pages/admin_user.php @@ -68,7 +68,7 @@ function admin_user() $html .= '
' . ($user_source->last_login_at ? $user_source->last_login_at->format(__('general.datetime')) : '-') . '
' . __('settings.password') . ' ' + . __('password.minimal_length', [config('password_min_length')]) . '">' . ' | ' . '' . ' |