TRF Certest first commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
require('./bootstrap');
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
window._ = require('lodash');
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
|
||||
window.axios = require('axios');
|
||||
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
|
||||
/**
|
||||
* Echo exposes an expressive API for subscribing to channels and listening
|
||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||
* allows your team to easily build robust real-time web applications.
|
||||
*/
|
||||
|
||||
// import Echo from 'laravel-echo';
|
||||
|
||||
// window.Pusher = require('pusher-js');
|
||||
|
||||
// window.Echo = new Echo({
|
||||
// broadcaster: 'pusher',
|
||||
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||
// forceTLS: true
|
||||
// });
|
||||
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"Password Reset Request": "Passwort zurücksetzen",
|
||||
"New User Registration": "Neuer Benutzer anmelden",
|
||||
"General": "Allgemein",
|
||||
"Auth & Registration": "Authentifizierung & Registrierung",
|
||||
"Notifications": "Berechtigungen",
|
||||
"Settings": "Einstellungen",
|
||||
"Roles": "Rollen",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Roles & Permissions": "Rollen und Berechtigungen",
|
||||
"Dashboard": "Dashboard",
|
||||
"Users": "Benutzer",
|
||||
"You have to accept Terms of Service.": "Sie müssen sie Nutzungsbedingungen bestätigen.",
|
||||
"Permission with this name already exists.": "Eine Berechtigung mit diesem Namen existiert bereits!",
|
||||
"Your account is banned by administrator.": "Ihr Benutzerkonto wurde von einem Administrator gesperrt.",
|
||||
"Something went wrong during the authentication process. Please try again.": "Während des Authentifizierungsvorgangs ist ein Fehler aufgetreten. Bitte versuche es erneut.",
|
||||
"Only users who already created an account can log in.": "Nur Benutzer mit einem gültigen Benutzerkonto können sich anmelden.",
|
||||
"You have to provide your email address.": "Sie müssen ihre eMail-Adresse angeben.",
|
||||
"Your account is created successfully! Please confirm your email.": "Ihr Benutzerkonto wurde erfolgreich erstellt. Bite bestätigen Sie noch ihre eMail-Adresse, damit Sie sich anmelden können.",
|
||||
"Your account is created successfully!": "Ihr Benutzerkonto wurde erfolgreich erstellt.",
|
||||
"2FA Token is invalid!": "Der 2-Faktor Token ist ungültig!",
|
||||
"Two-Factor Authentication enabled successfully.": "Die 2-Faktor Authentisierung wurde erfolgreich aktiviert.",
|
||||
"Two-Factor Authentication disabled successfully.": "Die 2-Faktor Authentisierung wurde erfolgreich deaktiviert.",
|
||||
"Avatar image cannot be updated. Please try again.": "Avatarbild kann nicht aktualisiert werden. Bitte versuche es erneut.",
|
||||
"Avatar changed successfully.": "Avatar erfolgreich geändert.",
|
||||
"Session invalidated successfully.": "Sie Sitzung wurde erfolgreich abgebrochen.",
|
||||
"Select a Country": "Wähle ein Land",
|
||||
"Profile updated successfully.": "Profil erfolgreich aktualisiert.",
|
||||
"Login details updated successfully.": "Anmeldedaten erfolgreich aktualisiert.",
|
||||
"All": "Alle",
|
||||
"User created successfully.": "Benutzerkonto erfolgreich erstellt.",
|
||||
"You cannot delete yourself.": "Sie können ihr eigenes Benutzerkonto nicht löschen.",
|
||||
"User deleted successfully.": "Benutzerkonto erfolgreich gelöscht.",
|
||||
"User updated successfully.": "Benutzerkonto erfolgreich aktualisiert.",
|
||||
"Settings updated successfully.": "Einstellungen erfolgreich aktualisiert.",
|
||||
"reCAPTCHA enabled successfully.": "reCAPTCHA erfolgreich aktiviert.",
|
||||
"reCAPTCHA disabled successfully.": "reCAPTCHA erfolgreich deaktiviert.",
|
||||
"Permissions saved successfully.": "Berechtigung erfolgreich gespeichert.",
|
||||
"Permission created successfully.": "Berechtigung erfolgreich erstellt.",
|
||||
"Permission updated successfully.": "Berechtigung erfolgreich aktualisiert.",
|
||||
"Permission deleted successfully.": "Berechtigung erfolgreich gelöscht.",
|
||||
"Role created successfully.": "Rolle erfolgreich erstellt.",
|
||||
"Role updated successfully.": "Rolle erfolgreich aktualisiert.",
|
||||
"Role deleted successfully.": "Rolle erfolgreich gelöscht.",
|
||||
"permission name": "berechtigung name",
|
||||
"Authentication Settings": "Authetifizierungseinstellungen",
|
||||
"Authentication": "Authentifizierung",
|
||||
"Registration": "Registrierung",
|
||||
"Notification Settings": "Benachrichtigungseinstellungen",
|
||||
"Email Notifications": "eMail Benachrichtigungen",
|
||||
"Sign-Up Notification": "Anmelden Benachrichtigung",
|
||||
"Send an email to the Administrators when user signs up.": "Administratoren benachrichtigen, wenn sich neue Benutzer registrieren.",
|
||||
"Update": "Aktualisieren",
|
||||
"General Settings": "Allgemeine Einstellungen",
|
||||
"Name": "Name",
|
||||
"Allow \"Remember Me\"": "\"Anmeldedaten merken\" zulassen",
|
||||
"Should 'Remember Me' checkbox be displayed on login form?": "Soll die Option 'Anmeldedaten merken' im Anmeldeformular angezeigt werden?",
|
||||
"Forgot Password": "Passwort vergessen",
|
||||
"Enable\/Disable forgot password feature.": "Passwort vergessen Feature ein/ausschalten.",
|
||||
"Reset Token Lifetime": "Gültigkeitsdauer des Passwort-Reset Tokens",
|
||||
"Number of minutes that the reset token should be considered valid.": "Dauer in Minuten wie lange der Passwort-Reset Token gültig ist.",
|
||||
"Two-Factor Authentication": "Zwei-Faktor Authentifizierung",
|
||||
"Enable\/Disable Two-Factor Authentication for the application.": "Aktivieren/Deaktivieren Zwei-Faktor Authentifizierung für die Anwendung.",
|
||||
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication.": "Wenn die Zwei-Faktor-Authentifizierung aktiviert ist, werden Sie während der Authentifizierung zur Eingabe eines sicheren, zufälligen Tokens aufgefordert.",
|
||||
"You may retrieve this token from your phone's Authenticator application.": "Sie können dieses Token aus der Authenticator-Anwendung Ihres Telefons abrufen.",
|
||||
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "Um die Aktivierung der Zwei-Faktor-Authentifizierung abzuschließen, scannen Sie den folgenden QR-Code mit der Authentifizierungsanwendung Ihres Telefons oder geben Sie den Setup-Schlüssel ein und geben Sie den generierten OTP-Code ein.",
|
||||
"In order to enable Two-Factor Authentication you have to register and create new application on": "Um die 2-Faktor Authentisierung zu aktivieren, müssen Sie sich registrieren und eine neue Applikation auf der",
|
||||
"Authy website": "Authy Webseite",
|
||||
"and update your": "und aktualisieren Sie Ihre",
|
||||
"environment variable inside": "Umgebungsvariablen aktualisieren",
|
||||
"file": "file",
|
||||
"Disabling...": "Ausschalten ...",
|
||||
"Disable": "Ausschalten",
|
||||
"Enabling...": "Einschalten ...",
|
||||
"Enable": "Einschalten",
|
||||
"Authentication Throttling": "Anmelde-Verlangsamung",
|
||||
"Throttle Authentication": "Authentisierungsprozess verlangsamen",
|
||||
"Should the system throttle authentication attempts?": "Authentisierungsprozess verlangsamen?",
|
||||
"Maximum Number of Attempts": "Maximale Anzahl an Versuchen",
|
||||
"Maximum number of incorrect login attempts before lockout.": "Maximale Anzahl an fehlerhaften Anmeldeversuchen bevor der Zugang gesperrt wird.",
|
||||
"Lockout Time": "Sperrzeit",
|
||||
"Number of minutes to lock the user out for after specified maximum number of incorrect login attempts.": "Dauer in Minuten wie lange ein Benutzer nach der festgelgten Anzahl fehlerhafter Anmeldeversuche gesperrt ist.",
|
||||
"Allow Registration": "Registrierung erlauben",
|
||||
"Terms & Conditions": "Nutzungsbedingungen",
|
||||
"The user has to confirm that he agree with terms and conditions in order to create an account.": "Der Benutzer muss den Nutzungsbedingungen zustimmen, um ein Benutzerkonto erstellen zu können.",
|
||||
"Email Confirmation": "eMail Bestätigung",
|
||||
"Require email confirmation from your newly registered users.": "Erfordern E-Mail-Bestätigung von Ihren neu registrierten Benutzern.",
|
||||
"Google reCAPTCHA": "Google reCAPTCHA",
|
||||
"Enable\/Disable Google reCAPTCHA during the registration.": "Aktivieren/Aktivieren reCAPTCHA.",
|
||||
"To utilize Google reCAPTCHA, please get your": "Um die Google reCAPTCHA Funktion nutzen zu können, beantragen Sie bitte ihren",
|
||||
"Site Key": "Site-Schlüssel",
|
||||
"and": "und",
|
||||
"Secret Key": "Secret Key",
|
||||
"from": "von",
|
||||
"reCAPTCHA Website": "reCAPTCHA Webseite",
|
||||
"environment variables inside": "Umgebungsvariablen innerhalb",
|
||||
"Add Role": "Rolle hinzufügen",
|
||||
"Display Name": "Anzeigename",
|
||||
"# of users with this role": "# Benutzer mit dieser Rolle",
|
||||
"Action": "Aktion",
|
||||
"Edit Role": "Rolle ändern",
|
||||
"Delete Role": "Rolle löschen",
|
||||
"Please Confirm": "Bitte bestätigen",
|
||||
"Are you sure that you want to delete this role?": "Sind Sie sicher, dass Sie diese Rolle löschen wollen?",
|
||||
"Yes, delete it!": "Ja, löschen!",
|
||||
"No records found.": "Keine Einträge gefunden.",
|
||||
"Create New Role": "Neue Benutzerrolle erstellen",
|
||||
"Role Details": "Rollen-Einstellungen",
|
||||
"A general role information.": "Rollen-Einstellungen",
|
||||
"Role Name": "Rollen Name",
|
||||
"Description": "Beschreibung",
|
||||
"Token": "Token",
|
||||
"Authy 2FA Token": "Authy 2FA Token",
|
||||
"2FA Code": "2FA Code",
|
||||
"Validate": "Überprüfen",
|
||||
"Sign Up": "Registrieren",
|
||||
"Register": "Registrieren",
|
||||
"Email": "eMail",
|
||||
"Username": "Benutzername",
|
||||
"Password": "Passwort",
|
||||
"Confirm Password": "Passwort bestätigen",
|
||||
"I accept": "Ich akzeptiere",
|
||||
"Terms of Service": "Nutzungsbedingungen",
|
||||
"Already have an account?": "Habe schon einen Account?",
|
||||
"Login": "Anmelden",
|
||||
"Close": "Schließen",
|
||||
"Reset Password": "Passwort zurücksetzen",
|
||||
"Forgot Your Password?": "Passwort vergessen?",
|
||||
"Please finish configuring Two-Factor authentication below.": "Bitte schließen Sie unten die Konfiguration der Zwei-Faktor-Authentifizierung ab.",
|
||||
"Please provide your email below and we will send you a password reset link.": "Bitte geben Sie unten Ihre E-Mail-Adresse an und wir senden Ihnen einen Link zum Zurücksetzen des Passworts.",
|
||||
"Your E-Mail": "Ihre eMail-Adresse",
|
||||
"Reset Your Password": "Passwort zurücksetzen",
|
||||
"Please provide your email and pick a new password below.": "Bitte geben Sie Ihre E-Mail Adresse ein und wählen Sie ein neues Passwort aus.",
|
||||
"New Password": "Neues Passwort",
|
||||
"Confirm New Password": "Neues Passwort bestätigen",
|
||||
"Update Password": "Passwort aktualisieren",
|
||||
"Verify Your Email Address": "Überprüfen Sie Ihre E-Mail-Adresse",
|
||||
"A fresh verification link has been sent to your email address.": "Ein neuer Bestätigungslink wurde an Ihre E-Mail-Adresse gesendet.",
|
||||
"Before proceeding, please check your email for a verification link.": "Before proceeding, please check your email for a verification link.",
|
||||
"If you did not receive the email": "Wenn Sie die E-Mail nicht erhalten haben",
|
||||
"click here to request another": "klicken Sie hier, um ein anderes anzufordern",
|
||||
"Email or Username": "eMail oder Benutzername",
|
||||
"Remember me?": "Anmeldedaten merken?",
|
||||
"Log In": "Anmelden",
|
||||
"I forgot my password": "Passwort vergessen?",
|
||||
"Don't have an account?": "Sie haben noch keinen Account?",
|
||||
"Banned Users": "Gesperrte Benutzer",
|
||||
"Total Users": "Gesamte Benutzeranzahl",
|
||||
"Latest Registrations": "Letzte Registrierungen",
|
||||
"View All": "Alle ansehen",
|
||||
"Update Profile": "Profil aktualisieren",
|
||||
"My Sessions": "Meine Sitzungen",
|
||||
"Activity Log": "Aktivitäts-Log",
|
||||
"Logout": "Abmelden",
|
||||
"Registration History": "Registrierungshistorie",
|
||||
"Unconfirmed Users": "Unbestätigte Benutzer",
|
||||
"new": "neu",
|
||||
"user": "benutzer",
|
||||
"users": "benutzer",
|
||||
"New Users": "Neue Benutzer",
|
||||
"Hello!": "Hallo!",
|
||||
"You are receiving this email because we received a password reset request for your account.": "Sie erhalten diese E-Mail, weil wir eine Aufforderung zum Zurücksetzen des Passworts für Ihr Konto erhalten haben.",
|
||||
"This password reset link will expire in :count minutes.": "Dieser Link zum Zurücksetzen des Passworts läuft in :count Minuten ab.",
|
||||
"If you did not request a password reset, no further action is required.": "Wenn Sie kein Zurücksetzen des Kennworts angefordert haben, ist keine weitere Aktion erforderlich.",
|
||||
"Regards": "Grüße",
|
||||
"New user was just registered on :app website.": "Ein neuer Benutzer wurde eben auf der WebSeite :app registriert.",
|
||||
"To view the user details just visit the link below.": "Um die Benutzerdetails anzusehen, klicken Sie bitte auf den Link unten.",
|
||||
"View User": "Benutzer ansehen",
|
||||
"My Profile": "Mein Profil",
|
||||
"Two-Factor Phone Verification": "Zwei-Faktor Überprüfung der Telefonnummer",
|
||||
"Phone Verification": "Überprüfung der Telefonnummer",
|
||||
"Verifying...": "Überprüfung...",
|
||||
"Verify": "Überprüfen",
|
||||
"Sending...": "Senden...",
|
||||
"Resend Token": "Erneut senden Token",
|
||||
"Edit User": "Benutzer ändern",
|
||||
"Edit": "Ändern",
|
||||
"User Details": "Benutzereinstellungen",
|
||||
"Login Details": "Anmeldedetails",
|
||||
"Add User": "Benutzer hinzufügen",
|
||||
"Create New User": "Neuen Benutzer erstellen",
|
||||
"Create": "Erstellen",
|
||||
"A general user profile information.": "Allgemeine Benutzerprofilinformationen.",
|
||||
"Details used for authenticating with the application.": "Details verwendet mit der Anwendung zur Authentifizierung.",
|
||||
"Create User": "Benutzer erstellen",
|
||||
"Active Sessions": "Aktive Sitzungen",
|
||||
"Sessions": "Sitzungen",
|
||||
"IP Address": "IP-Addresse",
|
||||
"Device": "Device",
|
||||
"Browser": "Browser",
|
||||
"Last Activity": "Letzte Aktivität",
|
||||
"Unknown": "Unbekannt",
|
||||
"Invalidate Session": "Session unterbrechen",
|
||||
"Are you sure that you want to invalidate this session?": "Sind Sie sicher diese Sitzung zu unterbrechen?",
|
||||
"Yes, proceed!": "Ja, fortfahren!",
|
||||
"Search for users...": "Nach Benutzern suchen...",
|
||||
"Full Name": "Vollständiger Name",
|
||||
"Registration Date": "Registrierungsdatum",
|
||||
"Status": "Status",
|
||||
"Details": "Details",
|
||||
"Impersonate User": "Impersonate User",
|
||||
"Impersonate": "Impersonate",
|
||||
"Phone": "Rufnummer",
|
||||
"Birthday": "Geburtsdatum",
|
||||
"Address": "Addresse",
|
||||
"Last Logged In": "Letzter Login",
|
||||
"optional": "optional",
|
||||
"Leave field blank if you don't want to change it": "Lassen Sie das Feld leer wenn Sie hier nichts verändern wollen",
|
||||
"Update Details": "Details aktualisieren",
|
||||
"Change Photo": "Bild ändern",
|
||||
"Cancel": "Abbrechen",
|
||||
"Save": "Speichern",
|
||||
"No Photo": "Kein Bild",
|
||||
"Upload Photo": "Bild hochladen",
|
||||
"Gravatar": "Gravatar",
|
||||
"In order to enable Two-Factor Authentication, you must install": "Um die 2-Faktor Authetisierung zu aktivieren, müssen Sie die",
|
||||
"application on your phone": "Applikation auf ihrem Handy installieren",
|
||||
"Country Code": "Ländercode",
|
||||
"Cell Phone": "Mobilfunknummer",
|
||||
"Phone without country code": "Rufnummer ohne Ländercode",
|
||||
"N\/A": "-",
|
||||
"User Sessions": "Benutzer-Sitzungen",
|
||||
"Delete User": "Benutzer löschen",
|
||||
"Are you sure that you want to delete this user?": "Sind Sie sicher diesen Benutzer vom System zu entfernen?",
|
||||
"Yes, delete him!": "Ja, Benutzer löschen!",
|
||||
"Role": "Rolle",
|
||||
"First Name": "Vorname",
|
||||
"Last Name": "Nachname",
|
||||
"Date of Birth": "Geburtsdatum",
|
||||
"Country": "Land",
|
||||
"Activity": "Aktivitäten",
|
||||
"Last Two Weeks": "Letzte 2 Wochen",
|
||||
"action": "Aktion",
|
||||
"actions": "aktionen",
|
||||
"Add Permission": "Berechtigung hinzufügen",
|
||||
"Edit Permission": "Berechtigung ändern",
|
||||
"Delete Permission": "Berechtigung löschen",
|
||||
"Are you sure that you want to delete this permission?": "Sind Sie sicher, dass Sie diese Berechtigung löschen wollen?",
|
||||
"Save Permissions": "Berechtigungen speichern",
|
||||
"Create New Permission": "Neue Berechtigung erstellen",
|
||||
"Permission Details": "Berechtigungen Details",
|
||||
"A general permission information.": "Berechtigungen Details",
|
||||
"Permission Name": "Berechtigung Name",
|
||||
"Stop Impersonating": "Stop Impersonating",
|
||||
"All rights reserved.": "Alle Rechte vorbehalten.",
|
||||
"If you're having trouble clicking the \":button\" button, copy and paste the URL below into your web browser:": "Wenn Sie Probleme haben, auf die Schaltfläche \":button\" zu klicken, kopieren Sie die unten stehende URL und fügen Sie sie in Ihren Webbrowser ein:",
|
||||
"E-Mail verified successfully.": "E-Mail erfolgreich verifiziert.",
|
||||
"Max Number of Active Sessions": "Maximale Anzahl aktiver Sitzungen",
|
||||
"Maximum number of active sessions per user. Set to 0 to allow unlimited number of active sessions.": "Maximale Anzahl aktiver Sitzungen pro Benutzer. Auf 0 setzen, um eine unbegrenzte Anzahl aktiver Sitzungen zuzulassen.",
|
||||
"Only applies when using database session driver.": "Gilt nur bei Verwendung des Datenbanksitzungstreibers."
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'months' => [
|
||||
1 => 'Januar',
|
||||
2 => 'Februar',
|
||||
3 => 'März',
|
||||
4 => 'April',
|
||||
5 => 'Mai',
|
||||
6 => 'Juni',
|
||||
7 => 'Juli',
|
||||
8 => 'August',
|
||||
9 => 'September',
|
||||
10 => 'Oktober',
|
||||
11 => 'November',
|
||||
12 => 'Dezember',
|
||||
],
|
||||
|
||||
'status' => [
|
||||
'Active' => 'Aktiv',
|
||||
'Banned' => 'Verboten',
|
||||
'Unconfirmed' => 'Unbestätigte',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
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' => 'Diese Zugangsdaten wurden nicht in unserer Datenbank gefunden.',
|
||||
'throttle' => 'Zu viele Login Versuche. Versuchen Sie es bitte in :seconds Sekunden.',
|
||||
'banned' => 'Ihr Benutzerkonto wurde von einem Administrator gesperrt.',
|
||||
'max_sessions_reached' => 'Sie haben die maximal zulässige Anzahl aktiver Sitzungen erreicht. Bitte melden Sie sich auf anderen Geräten ab und versuchen Sie es erneut.',
|
||||
|
||||
'2fa' => [
|
||||
'enabled_successfully' => 'Zwei-Faktor-Authentifizierung erfolgreich aktiviert.',
|
||||
'disabled_successfully' => 'Zwei-Faktor-Authentifizierung erfolgreich deaktiviert.',
|
||||
'already_enabled' => '2FA ist für diesen Benutzer bereits aktiviert.',
|
||||
'not_enabled' => '2FA ist für diesen Benutzer nicht aktiviert.',
|
||||
'phone_in_use' => 'Es gibt bereits einen Benutzer mit der angegebenen Telefonnummer und Landesvorwahl.',
|
||||
'invalid_token' => 'Ungültiges 2FA-Token.',
|
||||
'token_sent' => 'Verifizierungstoken gesendet.',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
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' => '« zurück',
|
||||
'next' => 'weiter »',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder 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.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Passwörter müssen mindestens 8 Zeichen lang sein und korrekt bestätigt werden.',
|
||||
'reset' => 'Das Passwort wurde zurückgesetzt!',
|
||||
'sent' => 'Passworterinnerung wurde gesendet!',
|
||||
'token' => 'Der Passwort-Wiederherstellungs-Schlüssel ist ungültig oder abgelaufen.',
|
||||
'user' => 'Es konnte leider kein Nutzer mit dieser E-Mail Adresse gefunden werden.',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
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
|
||||
| such as the size rules. Feel free to tweak each of these messages.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => ':attribute muss akzeptiert werden.',
|
||||
'active_url' => ':attribute ist keine gültige Internet-Adresse.',
|
||||
'after' => ':attribute muss ein Datum nach dem :date sein.',
|
||||
'alpha' => ':attribute darf nur aus Buchstaben bestehen.',
|
||||
'alpha_dash' => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen. Umlaute (ä, ö, ü) und Eszett (ß) sind nicht erlaubt.',
|
||||
'alpha_num' => ':attribute darf nur aus Buchstaben und Zahlen bestehen.',
|
||||
'array' => ':attribute muss ein Array sein.',
|
||||
'before' => ':attribute muss ein Datum vor dem :date sein.',
|
||||
'between' => [
|
||||
'numeric' => ':attribute muss zwischen :min & :max liegen.',
|
||||
'file' => ':attribute muss zwischen :min & :max Kilobytes groß sein.',
|
||||
'string' => ':attribute muss zwischen :min & :max Zeichen lang sein.',
|
||||
'array' => ':attribute muss zwischen :min & :max Elemente haben.',
|
||||
],
|
||||
'boolean' => ":attribute muss entweder 'true' oder 'false' sein.",
|
||||
'confirmed' => ':attribute stimmt nicht mit der Bestätigung überein.',
|
||||
'date' => ':attribute muss ein gültiges Datum sein.',
|
||||
'date_format' => ':attribute entspricht nicht dem gültigen Format für :format.',
|
||||
'different' => ':attribute und :other müssen sich unterscheiden.',
|
||||
'digits' => ':attribute muss :digits Stellen haben.',
|
||||
'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => ':attribute Format ist ungültig.',
|
||||
'exists' => 'Der gewählte Wert für :attribute ist ungültig.',
|
||||
'filled' => ':attribute muss ausgefüllt sein.',
|
||||
'image' => ':attribute muss ein Bild sein.',
|
||||
'in' => 'Der gewählte Wert für :attribute ist ungültig.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => ':attribute muss eine ganze Zahl sein.',
|
||||
'ip' => ':attribute muss eine gültige IP-Adresse sein.',
|
||||
'json' => ':attribute muss ein gültiger JSON-String sein.',
|
||||
'max' => [
|
||||
'numeric' => ':attribute darf maximal :max sein.',
|
||||
'file' => ':attribute darf maximal :max Kilobytes groß sein.',
|
||||
'string' => ':attribute darf maximal :max Zeichen haben.',
|
||||
'array' => ':attribute darf nicht mehr als :max Elemente haben.',
|
||||
],
|
||||
'mimes' => ':attribute muss den Dateityp :values haben.',
|
||||
'min' => [
|
||||
'numeric' => ':attribute muss mindestens :min sein.',
|
||||
'file' => ':attribute muss mindestens :min Kilobytes groß sein.',
|
||||
'string' => ':attribute muss mindestens :min Zeichen lang sein.',
|
||||
'array' => ':attribute muss mindestens :min Elemente haben.',
|
||||
],
|
||||
'not_in' => 'Der gewählte Wert für :attribute ist ungültig.',
|
||||
'numeric' => ':attribute muss eine Zahl sein.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => ':attribute Format ist ungültig.',
|
||||
'required' => ':attribute muss ausgefüllt sein.',
|
||||
'required_if' => ':attribute muss ausgefüllt sein, wenn :other :value ist.',
|
||||
'required_unless' => ':attribute muss ausgefüllt sein, wenn :other nicht :values ist.',
|
||||
'required_with' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',
|
||||
'required_with_all' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',
|
||||
'required_without' => ':attribute muss angegeben werden, wenn :values nicht ausgefüllt wurde.',
|
||||
'required_without_all' => ':attribute muss angegeben werden, wenn keines der Felder :values ausgefüllt wurde.',
|
||||
'same' => ':attribute und :other müssen übereinstimmen.',
|
||||
'size' => [
|
||||
'numeric' => ':attribute muss gleich :size sein.',
|
||||
'file' => ':attribute muss :size Kilobyte groß sein.',
|
||||
'string' => ':attribute muss :size Zeichen lang sein.',
|
||||
'array' => ':attribute muss genau :size Elemente haben.',
|
||||
],
|
||||
'string' => ':attribute muss ein String sein.',
|
||||
'timezone' => ':attribute muss eine gültige Zeitzone sein.',
|
||||
'unique' => ':attribute ist schon vergeben.',
|
||||
'url' => 'Das Format von :attribute ist ungültig.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 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 attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
//
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'months' => [
|
||||
1 => 'January',
|
||||
2 => 'February',
|
||||
3 => 'March',
|
||||
4 => 'April',
|
||||
5 => 'May',
|
||||
6 => 'June',
|
||||
7 => 'July',
|
||||
8 => 'August',
|
||||
9 => 'September',
|
||||
10 => 'October',
|
||||
11 => 'November',
|
||||
12 => 'December',
|
||||
],
|
||||
|
||||
'status' => [
|
||||
'Active' => 'Active',
|
||||
'Banned' => 'Banned',
|
||||
'Unconfirmed' => 'Unconfirmed',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
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.',
|
||||
'banned' => 'Your account is banned by administrator.',
|
||||
'max_sessions_reached' => 'You reached the maximum number of active sessions allowed. Please log out on other devices and try again.',
|
||||
|
||||
'2fa' => [
|
||||
'enabled_successfully' => 'Two-Factor Authentication enabled successfully.',
|
||||
'disabled_successfully' => 'Two-Factor Authentication disabled successfully.',
|
||||
'already_enabled' => '2FA is already enabled for this user.',
|
||||
'not_enabled' => '2FA is not enabled for this user.',
|
||||
'phone_in_use' => 'There is already an user with provided phone number and country code.',
|
||||
'invalid_token' => 'Invalid 2FA token.',
|
||||
'token_sent' => 'Verification token sent.',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
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' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder 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.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Passwords must be at least eight characters and match the confirmation.',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'If an account exists for the provided email address, you should receive a password reset link shortly.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => 'If an account exists for the provided email address, you should receive a password reset link shortly.',
|
||||
];
|
||||
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
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.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
||||
'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.',
|
||||
'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_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.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'filled' => 'The :attribute field is required.',
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'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.',
|
||||
'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.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values is 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.',
|
||||
],
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'captcha' => 'reCAPTCHA value is invalid.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 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 attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"# of users with this role": "broj korisnika sa ovom ulogom",
|
||||
"2FA Code": "2FA kod",
|
||||
"2FA Token is invalid!": "2FA token nije validan!",
|
||||
"A fresh verification link has been sent to your email address.": "Novi verfikacioni link je poslat na Vašu mejl adresu.",
|
||||
"A general permission information.": "Osnovne informacije o dozvoli.",
|
||||
"A general role information.": "Osnovne informacije o ulozi.",
|
||||
"A general user profile information.": "Osnovne informacije o profilu korisnika.",
|
||||
"Action": "Akcija",
|
||||
"action": "akcija",
|
||||
"actions": "akcije",
|
||||
"Active Sessions": "Aktivne Sesije",
|
||||
"Activity": "Aktivnosti",
|
||||
"Activity Log": "Aktivnost",
|
||||
"Add Permission": "Dodaj Dozvolu",
|
||||
"Add Role": "Dodaj Ulogu",
|
||||
"Add User": "Dodaj Korisnika",
|
||||
"Address": "Adresa",
|
||||
"All": "Sve",
|
||||
"All rights reserved.": "Sva prava zadržana.",
|
||||
"Allow \"Remember Me\"": "Dozvoli \"Zapamti me\"",
|
||||
"Allow Registration": "Dozvoli registraciju",
|
||||
"Already have an account?": "Već imate kreiran nalog?",
|
||||
"and": "i",
|
||||
"and update your": "i ažurirajte Vaš",
|
||||
"application on your phone": "aplikaciju na Vašem telefonu",
|
||||
"Are you sure that you want to delete this permission?": "Da li ste sigurni da želite da obrišete ovu dozvolu?",
|
||||
"Are you sure that you want to delete this role?": "Da li ste sigurni da želite da obrišete ovu ulogu?",
|
||||
"Are you sure that you want to delete this user?": "Da li ste sigurni da želite da obrišete ovog korisnika?",
|
||||
"Are you sure that you want to invalidate this session?": "Da li ste sigurni da želite da poništite ovu sesiju?",
|
||||
"Auth & Registration": "Autentifikacija i registracija",
|
||||
"Authentication": "Autentifikacija",
|
||||
"Authentication Settings": "Podešavanje autentifikacije",
|
||||
"Authentication Throttling": "\"Propusnost\" prilikom autentifikacije",
|
||||
"Authy 2FA Token": "Authy 2FA Token",
|
||||
"Authy website": "Authy sajt",
|
||||
"Avatar changed successfully.": "Avatar je uspešno ažuriran.",
|
||||
"Avatar image cannot be updated. Please try again.": "Avatar ne može biti ažuriran, molimo Vas pokušajte ponovo.",
|
||||
"Banned Users": "Blokirani korisnici",
|
||||
"Before proceeding, please check your email for a verification link.": "Pre nego što nastavite, proverite Vašu elektronsku poštu kako biste verifikovali vašu mejl adresu.",
|
||||
"Birthday": "Rođendan",
|
||||
"Browser": "Pretraživač",
|
||||
"Cancel": "Odustani",
|
||||
"Cell Phone": "Mobilni Telefon",
|
||||
"Change Photo": "Promeni Avatar",
|
||||
"click here to request another": "kliknite ovde kako biste poslali novi zahtev",
|
||||
"Close": "Zatvori",
|
||||
"Confirm New Password": "Potvrdite Novu Lozinku",
|
||||
"Confirm Password": "Potvrdite Lozinku",
|
||||
"Country": "Država",
|
||||
"Country Code": "Pozivni Broj",
|
||||
"Create": "Kreiraj",
|
||||
"Create New Permission": "Kreiraj Novu Dozvolu",
|
||||
"Create New Role": "Kreiraj Novu Dozvolu",
|
||||
"Create New User": "Kreiraj Novog Korisnika",
|
||||
"Create User": "Kreiraj Korisnika",
|
||||
"Dashboard": "Kontrolna tabla",
|
||||
"Date of Birth": "Datum Rođenja",
|
||||
"Delete Permission": "Obriši Dozvolu",
|
||||
"Delete Role": "Obriši Ulogu",
|
||||
"Delete User": "Obriši Korisnika",
|
||||
"Description": "Opis",
|
||||
"Details": "Detalji",
|
||||
"Details used for authenticating with the application.": "Podaci koji se koriste prilikom autentifikacije.",
|
||||
"Device": "Uređaj",
|
||||
"Disable": "Isključi",
|
||||
"Disabling...": "Isključivanje...",
|
||||
"Display Name": "Ime za prikaz",
|
||||
"Don't have an account?": "Nemate nalog?",
|
||||
"Edit": "Izmeni",
|
||||
"Edit Permission": "Izmeni Dozvolu",
|
||||
"Edit Role": "Izmeni Ulogu",
|
||||
"Edit User": "Izmeni Korisnika",
|
||||
"Email": "Email Adresa",
|
||||
"Email Confirmation": "Potvrda Email Adrese",
|
||||
"Email Notifications": "Email Obaveštenja",
|
||||
"Email or Username": "Email ili korisničko ime",
|
||||
"Enable": "Omogući",
|
||||
"Enable\/Disable forgot password feature.": "Omogući\/Onemogućo mogućnost obnove zaboravljene lozinke.",
|
||||
"Enable\/Disable Google reCAPTCHA during the registration.": "Omogući\/Onemogući Google reCAPTCHA prilikom registracije.",
|
||||
"Enable\/Disable Two-Factor Authentication for the application.": "Omogući\/Onemogući 2FA autentifikaciju.",
|
||||
"Enabling...": "Uključivanje...",
|
||||
"environment variable inside": "promenljivu okruženja u",
|
||||
"environment variables inside": "promenljivu okruženja u",
|
||||
"file": "datoteka",
|
||||
"First Name": "Ime",
|
||||
"Forgot Password": "Zaboravljena Lozinka",
|
||||
"Forgot Your Password?": "Zaboravili ste lozinku?",
|
||||
"from": "od",
|
||||
"Full Name": "Puno Ime",
|
||||
"General": "Opšte",
|
||||
"General Settings": "Opšta Podešavanja",
|
||||
"Google reCAPTCHA": "Google reCAPTCHA",
|
||||
"Gravatar": "Gravatar",
|
||||
"Hello!": "Zdravo!",
|
||||
"I accept": "Prihvatam",
|
||||
"I forgot my password": "Zaboravio sam lozinku",
|
||||
"If you did not receive the email": "Ukoliko niste primili email",
|
||||
"If you did not request a password reset, no further action is required.": "Ukoliko Vi niste zahtevali resetovanje vaše lozinke možete ignorisati ovaj mejl.",
|
||||
"If you're having trouble clicking the \":button\" button, copy and paste the URL below into your web browser:": "Ukoliko ne možete da kliknete na dugme iznad, kopirajte sledeću adresu u polje za \n adresu Vašeg web pretraživača:",
|
||||
"Impersonate": "Predstavi se kao on",
|
||||
"Impersonate User": "Predstavi se kao korisnik",
|
||||
"In order to enable Two-Factor Authentication you have to register and create new application on": "Da biste omogućili Two-Factor autentifikaciju, neophodno je da se registrujete i kreirate novu aplikaciju na",
|
||||
"In order to enable Two-Factor Authentication, you must install": "Da biste omogućili Two-Factor autentifikaciju, neophodno je da instalirate",
|
||||
"Invalidate Session": "Poništi Sesiju",
|
||||
"IP Address": "IP Adresa",
|
||||
"Last Activity": "Poslednja Aktivnost",
|
||||
"Last Logged In": "Poslednje prijavljivanje",
|
||||
"Last Name": "Prezime",
|
||||
"Last Two Weeks": "Poslednje dve nedelje",
|
||||
"Latest Registrations": "Poslednje Registracije",
|
||||
"Leave field blank if you don't want to change it": "Ostavite prazno ukoliko ne želite da promenite",
|
||||
"Lockout Time": "Period zaključanosti",
|
||||
"Log In": "Uloguj se",
|
||||
"Login": "Uloguj se",
|
||||
"Login Details": "Podaci za prijavljivanje",
|
||||
"Login details updated successfully.": "Podaci za prijavljivanje su uspešno ažurirani.",
|
||||
"Logout": "Izloguj se",
|
||||
"Maximum Number of Attempts": "Maksimalni broj pokušaja",
|
||||
"Maximum number of incorrect login attempts before lockout.": "Maksimalni broj pogrešnih pokušaja logovanja pre nego što se izvrši zaključavanje naloga.",
|
||||
"My Profile": "Moj Profil",
|
||||
"My Sessions": "Moje Sesije",
|
||||
"N\/A": "-",
|
||||
"Name": "Ime",
|
||||
"new": "novo",
|
||||
"New Password": "Nova Lozinka",
|
||||
"New User Registration": "Novi Korisnik",
|
||||
"New user was just registered on :app website.": "Novi korisnik se upravo registrovao na :app web sajtu.",
|
||||
"New Users": "Novi Korisnici",
|
||||
"No Photo": "Bez Fotografije",
|
||||
"No records found.": "Nema podataka.",
|
||||
"Notification Settings": "Podešavanje Obaveštenja",
|
||||
"Notifications": "Obaveštenja",
|
||||
"Number of minutes that the reset token should be considered valid.": "Koliko se dugo token za reset lozinke može smatrati validnim (u minutima).",
|
||||
"Number of minutes to lock the user out for after specified maximum number of incorrect login attempts.": "Koliko dugo će nalog ostati zaključan nakon maksimalnog broja neuspelih pokušaja logovanja (u minutima).",
|
||||
"Only users who already created an account can log in.": "Samo korisnici koji su već kreirali nalog mogu da se prijave.",
|
||||
"optional": "opciono",
|
||||
"Password": "Lozinka",
|
||||
"Password Reset Request": "Zahtev za promenu lozinke",
|
||||
"Permission created successfully.": "Dozvola je uspešno kreirana.",
|
||||
"Permission deleted successfully.": "Dozvola je uspešno obrisana.",
|
||||
"Permission Details": "Detailji Dozvole",
|
||||
"Permission Name": "Ime Dozvole",
|
||||
"permission name": "ime dozvole",
|
||||
"Permission updated successfully.": "Dozvola je uspešno ažurirana.",
|
||||
"Permission with this name already exists.": "Dozvola sa ovim imenom već postoji.",
|
||||
"Permissions": "Dozvole",
|
||||
"Permissions saved successfully.": "Dozvole su uspešno sačuvane.",
|
||||
"Phone": "Telefon",
|
||||
"Phone Verification": "Verifikacija Telefona",
|
||||
"Phone without country code": "Broj koji ne uključuje pozivni broj države",
|
||||
"Please Confirm": "Molimo potvrdite",
|
||||
"Please finish configuring Two-Factor authentication below.": "Molimo Vas završite konfigurisanje Two-Factor autentifikacije.",
|
||||
"Please provide your email and pick a new password below.": "Molimo Vas da unesete Vašu email adresu i da odaberete novu lozinku.",
|
||||
"Please provide your email below and we will send you a password reset link.": "Molimo Vas unesite Vaš email i mi ćemo Vam poslati link za promenu lozinke.",
|
||||
"Profile updated successfully.": "Profil je uspešno ažuriran.",
|
||||
"reCAPTCHA disabled successfully.": "reCAPTCHA je uspešno isključen.",
|
||||
"reCAPTCHA enabled successfully.": "reCAPTCHA je uspešno uključen.",
|
||||
"reCAPTCHA Website": "reCAPTCHA Web sajt",
|
||||
"Regards": "Pozdrav",
|
||||
"Register": "Kreiraj nalog",
|
||||
"Registration": "Registracija",
|
||||
"Registration Date": "Datum Registracije",
|
||||
"Registration History": "Istorija Registracija",
|
||||
"Remember me?": "Zapamti me?",
|
||||
"Require email confirmation from your newly registered users.": "Zahtevaj potvrdu mejl adrese od za nove korisnike.",
|
||||
"Resend Token": "Ponovo Pošalji Token",
|
||||
"Reset Password": "Promeni Lozinku",
|
||||
"Reset Token Lifetime": "Životni vek tokena",
|
||||
"Reset Your Password": "Promenite Lozinku",
|
||||
"Role": "Uloga",
|
||||
"Role created successfully.": "Uloga je uspešno kreirana.",
|
||||
"Role deleted successfully.": "Uloga je uspešno obrisana.",
|
||||
"Role Details": "Detalji Uloge",
|
||||
"Role Name": "Ime Uloge",
|
||||
"Role updated successfully.": "Uloga je uspešno ažurirana.",
|
||||
"Roles": "Uloge",
|
||||
"Roles & Permissions": "Uloge i Dozvole",
|
||||
"Save": "Sačuvaj",
|
||||
"Save Permissions": "Sačuvaj dozvole",
|
||||
"Search for users...": "Traži korisnika...",
|
||||
"Secret Key": "Tajni ključ",
|
||||
"Select a Country": "Odaberi državu",
|
||||
"Send an email to the Administrators when user signs up.": "Pošalji email administratorima kada se registruje novi korisnik.",
|
||||
"Sending...": "Slanje...",
|
||||
"Session invalidated successfully.": "Sesija je uspešno poništena.",
|
||||
"Sessions": "Sesije",
|
||||
"Settings": "Podešavanja",
|
||||
"Settings updated successfully.": "Podešavanja su uspešno ažurirana.",
|
||||
"Should 'Remember Me' checkbox be displayed on login form?": "Prikaži 'Zapamti me' checkbox-a na formi za prijavljivanje?",
|
||||
"Should the system throttle authentication attempts?": "Da li sistem treba da kontroliše \"propusnost\" prilikom autentifikacije?",
|
||||
"Sign Up": "Kreiraj Nalog",
|
||||
"Sign-Up Notification": "Obaveštenja za kreiranje naloga",
|
||||
"Site Key": "Site Key",
|
||||
"Something went wrong during the authentication process. Please try again.": "Došlo je do greške prilikom autentifikacije. Molimo Vas pokušajte ponovo.",
|
||||
"Status": "Status",
|
||||
"Stop Impersonating": "Prekini lažno predstavljanje",
|
||||
"Terms & Conditions": "Uslovi korišćenja",
|
||||
"Terms of Service": "Uslovi korišćenja",
|
||||
"The user has to confirm that he agree with terms and conditions in order to create an account.": "Molimo Vas da potvrdite da se slažete sa uslovima korišćenja kako biste kreirali nalog.",
|
||||
"This password reset link will expire in :count minutes.": "Link za promenu lozinke ističe za :count minuta.",
|
||||
"Throttle Authentication": "Ograniči \"propusnost\"",
|
||||
"To utilize Google reCAPTCHA, please get your": "Da biste aktivirali Google reCAPTCHA, molimo Vas pribavite Vaš",
|
||||
"To view the user details just visit the link below.": "Za više detalja o korisniku posetite link ispod.",
|
||||
"To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.": "Da bi ste omogućili Two-Factor autentifikaciju, skenirajte QR kod pomoću Vaše aplikacije za autentifikaciju i unesite generisan OTP kod.",
|
||||
"Token": "Token",
|
||||
"Total Users": "Ukupno Korisnika",
|
||||
"Two-Factor Authentication": "Two-Factor Autentifikacija",
|
||||
"Two-Factor Authentication disabled successfully.": "Two-Factor autentifikacija je uspešno deaktivirana.",
|
||||
"Two-Factor Authentication enabled successfully.": "Two-Factor autentifikacija je uspešno aktivirana.",
|
||||
"Two-Factor Phone Verification": "Two-Factor Verifikacija Telefona",
|
||||
"Unconfirmed Users": "Neverifikovani korisnici",
|
||||
"Unknown": "Nepoznato",
|
||||
"Update": "Ažuriraj",
|
||||
"Update Details": "Ažuriraj Podatke",
|
||||
"Update Password": "Ažuriraj Lozinku",
|
||||
"Update Profile": "Ažuriraj Profil",
|
||||
"Upload Photo": "Dodaj sliku",
|
||||
"user": "korisnik",
|
||||
"User created successfully.": "Korisnik je uspešno kreiran.",
|
||||
"User deleted successfully.": "Korisnik je uspešno obrisan.",
|
||||
"User Details": "Detalji o korisniku",
|
||||
"User Sessions": "Sesije korisnika",
|
||||
"User updated successfully.": "Korisnik je uspešno ažuriran.",
|
||||
"Username": "Korisničko ime",
|
||||
"users": "korisnici",
|
||||
"Users": "Korisnici",
|
||||
"Validate": "Proveri validnost",
|
||||
"Verify": "Verifikuj",
|
||||
"Verify Your Email Address": "Verifikuj email adresu",
|
||||
"E-Mail verified successfully.": "Email adresa je uspešno verifikovana.",
|
||||
"Verifying...": "Verifikacija...",
|
||||
"View All": "Vidi sve",
|
||||
"View User": "Vidi korisnika",
|
||||
"Yes, delete him!": "Da, obriši!",
|
||||
"Yes, delete it!": "Da, obriši!",
|
||||
"Yes, proceed!": "Da, nastavi!",
|
||||
"You are receiving this email because we received a password reset request for your account.": "Dobili ste ovu poruku zbog zahteva za promenu lozinke koji smo primili od Vašeg naloga.",
|
||||
"You cannot delete yourself.": "Ne možete da obrišete svoj nalog.",
|
||||
"You have to accept Terms of Service.": "Morate da prihvatite uslove korišćenja.",
|
||||
"You have to provide your email address.": "Morate da omogućite pristup Vašoj mejl adresi.",
|
||||
"You may retrieve this token from your phone's Authenticator application.": "Možete da preuzmete ovaj token iz Vaše Authenticator aplikacije.",
|
||||
"Your account is banned by administrator.": "Vaš nalog je blokiran od strane administratora.",
|
||||
"Your account is created successfully! Please confirm your email.": "Vaš nalog je uspešno kreiran. Molimo Vas da potvrdite Vašu mejl adresu.",
|
||||
"Your account is created successfully!": "Vaš nalog je uspešno kreiran.",
|
||||
"Your E-Mail": "Email Adresa",
|
||||
"When two factor authentication is enabled, you will be prompted for a secure, random token during authentication.": "Kada je Two-Factor uključen, od Vas će biti zatraženo da unesete sigurnosni kod tokom autentifikacije.",
|
||||
"Max Number of Active Sessions": "Maksimalni broj aktivnih sesija",
|
||||
"Maximum number of active sessions per user. Set to 0 to allow unlimited number of active sessions.": "Maksimalni broj aktivnih sesija po korisniku. Postavite na 0 da biste omogućili neograničen broj sesija.",
|
||||
"Only applies when using database session driver.": "Primenljivo je samo kada se koristi baza podataka za čuvanje sesija.",
|
||||
"Code": "Kod",
|
||||
"Confirm": "Potvrdi"
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'months' => [
|
||||
1 => 'Januar',
|
||||
2 => 'Februar',
|
||||
3 => 'Mart',
|
||||
4 => 'April',
|
||||
5 => 'Maj',
|
||||
6 => 'Jun',
|
||||
7 => 'Jul',
|
||||
8 => 'Avgust',
|
||||
9 => 'Septembar',
|
||||
10 => 'Oktobar',
|
||||
11 => 'Novembar',
|
||||
12 => 'Decembar',
|
||||
],
|
||||
|
||||
'status' => [
|
||||
'Active' => 'Aktivan',
|
||||
'Banned' => 'Banovan',
|
||||
'Unconfirmed' => 'Neverifikovan',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
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' => 'Podaci ne odgovaraju ni jednom nalogu.',
|
||||
'throttle' => 'Previše neuspelih pokušaja. Pokušajte ponovo za :seconds sekundi.',
|
||||
'banned' => 'Vaš nalog je blokiran od strane administratora.',
|
||||
'max_sessions_reached' => 'Dostigli ste maksimalni dozvoljeni broj aktivnih sesija. Odjavite se na drugim uređajima i pokušajte ponovo.',
|
||||
|
||||
'2fa' => [
|
||||
'enabled_successfully' => 'Two-Factor autentifikacija je uspešno aktivirana.',
|
||||
'disabled_successfully' => 'Two-Factor autentifikacija je uspešno deaktivirana.',
|
||||
'already_enabled' => 'Two-Factor autentifikacija je već uključena za ovog korisnika.',
|
||||
'not_enabled' => 'Two-Factor autentifikacija nije uključena za ovog korisnika.',
|
||||
'phone_in_use' => 'Korisnik sa navedenim telefonskim brojem i pozivnim brojem države već postoji.',
|
||||
'invalid_token' => '2FA token nije validan.',
|
||||
'token_sent' => 'Token za verifikaciju je uspešno poslat.',
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
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' => '« Nazad',
|
||||
'next' => 'Napred »',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder 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.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Lozinka mora imati najmanje 8 karaktera i da odgovara potvrdi.',
|
||||
'reset' => 'Lozinka je resetovana!',
|
||||
'sent' => 'Poslali smo reset link za vašu lozinku!',
|
||||
'token' => 'Ukucana oznaka za resetovanje lozinke nije važeća.',
|
||||
'user' => 'Nismo uspeli pronaći korisnika sa email adresom.',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
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' => 'Polje :attribute mora biti prihvaćeno.',
|
||||
'active_url' => 'Polje :attribute nije validan URL.',
|
||||
'after' => 'Polje :attribute mora biti datum posle :date.',
|
||||
'alpha' => 'Polje :attribute može sadržati samo slova.',
|
||||
'alpha_dash' => 'Polje :attribute može sadržati samo slova, brojeve i povlake.',
|
||||
'alpha_num' => 'Polje :attribute može sadržati samo slova i brojeve.',
|
||||
'array' => 'Polje :attribute mora sadržati nekih niz stavki.',
|
||||
'before' => 'Polje :attribute mora biti datum pre :date.',
|
||||
'between' => [
|
||||
'numeric' => 'Polje :attribute mora biti između :min - :max.',
|
||||
'file' => 'Fajl :attribute mora biti između :min - :max kilobajta.',
|
||||
'string' => 'Polje :attribute mora biti između :min - :max karaktera.',
|
||||
'array' => 'Polje :attribute mora biti između :min - :max stavki.',
|
||||
],
|
||||
'boolean' => 'Polje :attribute mora biti tačno ili netačno',
|
||||
'confirmed' => 'Potvrda polja :attribute se ne poklapa.',
|
||||
'date' => 'Polje :attribute nije važeći datum.',
|
||||
'date_format' => 'Polje :attribute ne odgovora prema formatu :format.',
|
||||
'different' => 'Polja :attribute i :other moraju biti različita.',
|
||||
'digits' => 'Polje :attribute mora sadržati :digits šifri.',
|
||||
'digits_between' => 'Polje :attribute mora biti izemđu :min i :max šifri.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'Format polja :attribute nije validan.',
|
||||
'exists' => 'Odabrano polje :attribute nije validno.',
|
||||
'filled' => 'Polje :attribute je obavezno.',
|
||||
'image' => 'Polje :attribute mora biti slika.',
|
||||
'in' => 'Odabrano polje :attribute nije validno.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'Polje :attribute mora biti broj.',
|
||||
'ip' => 'Polje :attribute mora biti validna IP adresa.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'max' => [
|
||||
'numeric' => 'Polje :attribute mora biti manje od :max.',
|
||||
'file' => 'Polje :attribute mora biti manje od :max kilobajta.',
|
||||
'string' => 'Polje :attribute mora sadržati manje od :max karaktera.',
|
||||
'array' => 'Polje :attribute ne smije da image više od :max stavki.',
|
||||
],
|
||||
'mimes' => 'Polje :attribute mora biti fajl tipa: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'Polje :attribute mora biti najmanje :min.',
|
||||
'file' => 'Fajl :attribute mora biti najmanje :min kilobajta.',
|
||||
'string' => 'Polje :attribute mora sadržati najmanje :min karaktera.',
|
||||
'array' => 'Polje :attribute mora sadrzati najmanje :min stavku.',
|
||||
],
|
||||
'not_in' => 'Odabrani element polja :attribute nije validan.',
|
||||
'numeric' => 'Polje :attribute mora biti broj.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => 'Format polja :attribute nije validan.',
|
||||
'required' => 'Polje :attribute je obavezno.',
|
||||
'required_if' => 'Polje :attribute je potrebno kada polje :other sadrži :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'Polje :attribute je potrebno kada polje :values je prisutan.',
|
||||
'required_with_all' => 'Polje :attribute je obavezno kada je :values prikazano.',
|
||||
'required_without' => 'Polje :attribute je potrebno kada polje :values nije prisutan.',
|
||||
'required_without_all' => 'Polje :attribute je potrebno kada nijedan od sledeći polja :values nisu prisutni.',
|
||||
'same' => 'Polja :attribute i :other se moraju poklapati.',
|
||||
'size' => [
|
||||
'numeric' => 'Polje :attribute mora biti :size.',
|
||||
'file' => 'Fajl :attribute mora biti :size kilobajta.',
|
||||
'string' => 'Polje :attribute mora biti :size karaktera.',
|
||||
'array' => 'Polje :attribute mora sadržati :size stavki.',
|
||||
],
|
||||
'string' => 'Polje :attribute mora sadržati slova.',
|
||||
'timezone' => 'Polje :attribute mora biti ispravna vremenska zona.',
|
||||
'unique' => 'Polje :attribute već postoji.',
|
||||
'url' => 'Format polja :attribute ne važi.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 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' => [
|
||||
'username' => [
|
||||
'unique' => 'Korisničko ime je zauzeto.',
|
||||
],
|
||||
'email' => [
|
||||
'unique' => 'Uneta e-adresa već postoji.',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
'username' => 'korisničko ime',
|
||||
'password' => 'lozinka',
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
// Body
|
||||
$body-bg: #f5f8fa;
|
||||
$primary: #179970;
|
||||
$bg-lighter: #f8fbfc;
|
||||
|
||||
// Typography
|
||||
//$font-family-base: "Roboto", sans-serif;
|
||||
$font-size-base: 0.9rem;
|
||||
$line-height-base: 1.6;
|
||||
//$headings-font-family: "Poppins";
|
||||
|
||||
// Buttons
|
||||
$btn-padding-y: .75rem !default;
|
||||
$btn-padding-x: 1.25rem !default;
|
||||
$btn-line-height: 1.125;
|
||||
|
||||
// Forms
|
||||
$input-btn-padding-y: .5rem !default;
|
||||
$label-margin-bottom: .25rem !default;
|
||||
|
||||
// Breadcrumbs
|
||||
$breadcrumb-bg: none;
|
||||
$breadcrumb-padding-y: 0;
|
||||
$breadcrumb-padding-x: 3px;
|
||||
|
||||
// Tables
|
||||
$table-accent-bg: #f5f8fa;
|
||||
|
||||
// Cards
|
||||
$card-spacer-x: 1.75rem !default;
|
||||
$card-spacer-y: 1.2rem !default;
|
||||
$card-cap-bg: #ffffff;
|
||||
$card-border-color: #e9ecef !default;
|
||||
|
||||
// Tabs
|
||||
$nav-tabs-link-active-color: $primary;
|
||||
$nav-tabs-link-active-bg: unset;
|
||||
//$nav-tabs-link-active-border-color: none;
|
||||
//$nav-tabs-link-hover-border-color: unset;
|
||||
|
||||
// List Groups
|
||||
$list-group-border-color: $body-bg;
|
||||
$list-group-hover-bg: $body-bg;
|
||||
|
||||
// Nav
|
||||
$nav-link-padding-x: 0.5rem;
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
// Fonts
|
||||
// Here you can import any font you want and update the _variables.scss file
|
||||
// to make use of those fonts across the application.
|
||||
//@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
|
||||
//@import url("https://fonts.googleapis.com/css?family=Poppins:300,400,500,700");
|
||||
|
||||
// Variables
|
||||
@import "variables";
|
||||
|
||||
// Bootstrap
|
||||
@import '../../node_modules/bootstrap/scss/bootstrap';
|
||||
|
||||
// Custom Vanguard styles
|
||||
@import "components/general";
|
||||
@import "components/card";
|
||||
@import "components/button";
|
||||
@import "components/avatar";
|
||||
@import "components/input";
|
||||
@import "components/list-group";
|
||||
@import "components/nav-tabs";
|
||||
@import "components/navbar";
|
||||
@import "components/sidebar";
|
||||
@import "components/switch";
|
||||
@import "components/sweet-alert";
|
||||
@import "components/table";
|
||||
@import "components/util";
|
||||
@import "components/datepicker";
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
.sidebar:not(.expanded) {
|
||||
margin-left: -250px;
|
||||
}
|
||||
|
||||
.content-page {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) and (max-width: 1600px) {
|
||||
|
||||
.widget {
|
||||
height: 128px;
|
||||
|
||||
.row .text-muted {
|
||||
width: 80px;
|
||||
text-align: right;
|
||||
word-wrap: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
.avatar-source {
|
||||
text-align: center;
|
||||
}
|
||||
.avatar-source img {
|
||||
width: 120px;
|
||||
}
|
||||
.avatar-source img:hover,
|
||||
.avatar-source div:hover {
|
||||
background-color: #fff;
|
||||
border: 2px solid $primary;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#avatar.croppie-container {
|
||||
padding: 35px 30px 30px;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
.btn-rounded {
|
||||
border-radius: 2em;
|
||||
}
|
||||
|
||||
.btn-avatar {
|
||||
padding: 10px 0;
|
||||
border: 1px solid #dfdfdf;
|
||||
margin-top: 10px;
|
||||
transition: all 0.5s ease 0s;
|
||||
}
|
||||
|
||||
.btn-avatar:hover {
|
||||
background-color: #000;
|
||||
border-color: #000;
|
||||
opacity: 0.8;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn-upload {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
padding: 6px 0;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
line-height: 1.428571429;
|
||||
font-size: 65px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.btn-icon {
|
||||
padding: 3px 5px;
|
||||
color: $gray-500;
|
||||
}
|
||||
|
||||
.btn-upload {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.btn-upload input[type=file] {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
font-size: 100px;
|
||||
text-align: right;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
outline: none;
|
||||
background: white;
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Social Buttons
|
||||
.btn-facebook {
|
||||
color: #4267b2;
|
||||
|
||||
&:hover {
|
||||
color: darken(#4267b2, 10%)
|
||||
}
|
||||
}
|
||||
.btn-twitter {
|
||||
color: #1ba1f3;
|
||||
|
||||
&:hover {
|
||||
color: darken(#1ba1f3, 10%)
|
||||
}
|
||||
}
|
||||
.btn-google {
|
||||
color: #de564a;
|
||||
|
||||
&:hover {
|
||||
color: darken(#de564a, 10%)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
.card {
|
||||
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);
|
||||
border-radius: 5px;
|
||||
margin-bottom: 20px;
|
||||
background-color: #ffffff;
|
||||
border: none;
|
||||
|
||||
h5.card-title {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
font-size: 1.025rem;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h5.card-title.card-title-bold {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
.datepicker {
|
||||
width: 265px;
|
||||
padding: 10px;
|
||||
|
||||
&.datepicker-orient-top {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td, th {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
@include border-radius(3px);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
thead {
|
||||
th {
|
||||
&.prev,
|
||||
&.datepicker-switch,
|
||||
&.next {
|
||||
font-weight: 500;
|
||||
|
||||
i {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
&.dow {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tbody {
|
||||
tr > td {
|
||||
&.day {
|
||||
|
||||
&.today {
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border: solid transparent;
|
||||
border-width: 0 0 7px 7px;
|
||||
border-bottom-color: #ffffff;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
right: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tfoot {
|
||||
tr > th {
|
||||
&.today,
|
||||
&.clear {
|
||||
@include border-radius(3px);
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.input-daterange {
|
||||
.input-group-addon {
|
||||
min-width: 44px;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin datepicker-skin($color) {
|
||||
.datepicker {
|
||||
thead {
|
||||
th {
|
||||
&.prev,
|
||||
&.datepicker-switch,
|
||||
&.next {
|
||||
&:hover {
|
||||
background: $color;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tbody {
|
||||
tr > td {
|
||||
&.day {
|
||||
&:hover {
|
||||
background-color: darken($color, 10%);
|
||||
}
|
||||
|
||||
&.selected,
|
||||
&.selected:hover,
|
||||
&.active,
|
||||
&.active:hover {
|
||||
background-color: $color !important;
|
||||
background-image: none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.today {
|
||||
background-color: lighten($color, 10%);
|
||||
color: #ffffff;
|
||||
|
||||
&:before {
|
||||
border-bottom-color: #ffffff;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
&.range {
|
||||
background: lighten($color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
span.month, span.year {
|
||||
&.focused,
|
||||
&:hover {
|
||||
background-color: lighten($color, 5%) !important;
|
||||
background-image: none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.active:hover,
|
||||
&.active {
|
||||
background-color: $color !important;
|
||||
background-image: none;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tfoot {
|
||||
tr > th {
|
||||
&.today,
|
||||
&.clear {
|
||||
|
||||
&:hover {
|
||||
background: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.datepicker-inline {
|
||||
border: 1px solid lighten($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include datepicker-skin($primary);
|
||||
@@ -0,0 +1,17 @@
|
||||
[role="main"] {
|
||||
padding-top: 95px;
|
||||
}
|
||||
|
||||
.content-page {
|
||||
margin-left: 250px;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sidebar-collapsed .content-page {
|
||||
margin-left: 80px;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: 500;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
.input-group-prepend .btn, .input-group-append .btn {
|
||||
padding: 0.35rem 1rem;
|
||||
border: 1px solid $gray-400;
|
||||
}
|
||||
|
||||
|
||||
.form-control.input-solid:not([disabled]) {
|
||||
background-color: $light;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
.list-group.list-group-borderless {
|
||||
.list-group-item {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.list-group.list-group-striped {
|
||||
.list-group-item:nth-of-type(odd) {
|
||||
background-color: $table-accent-bg;
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.list-group-flush .list-group-item:first-of-type {
|
||||
border-top: none;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
.nav-tabs {
|
||||
.nav-link {
|
||||
color: $gray-600;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
|
||||
&.active {
|
||||
border-bottom: 2px solid $primary;
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
.navbar-brand-wrapper {
|
||||
background: #ffffff;
|
||||
float: left;
|
||||
text-align: center;
|
||||
height: 70px;
|
||||
position: relative;
|
||||
width: 250px;
|
||||
z-index: 1;
|
||||
|
||||
.logo-lg {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.logo-sm {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-collapsed .navbar-brand-wrapper {
|
||||
width: 80px;
|
||||
|
||||
.logo-lg {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.logo-sm {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar {
|
||||
border-top: 2px solid $primary;
|
||||
background: #ffffff;
|
||||
|
||||
.navbar-toggler {
|
||||
margin: 20px 0px;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
padding: .75rem 1rem;
|
||||
border-width: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.navbar-collapse {
|
||||
background-color: #ffffff;
|
||||
box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.06), 0 1px 0 0 rgba(0, 0, 0, 0.02);
|
||||
|
||||
&.collapse.show,
|
||||
&.collapsing {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
box-shadow: none;
|
||||
border-top: 1px solid $body-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.page-header {
|
||||
border-right: 1px solid #e2e5ec;
|
||||
font-weight: 400;
|
||||
padding-right: 20px;
|
||||
margin-right: 15px;
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
border-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
$sidebar-bg-color: #30353e;
|
||||
|
||||
.sidebar {
|
||||
top: 70px;
|
||||
width: 250px;
|
||||
min-width: 250px;
|
||||
z-index: 10;
|
||||
background: $sidebar-bg-color;
|
||||
bottom: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 30px;
|
||||
position: fixed;
|
||||
box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.06), 0 1px 0 0 rgba(0, 0, 0, 0.02);
|
||||
overflow-y: scroll;
|
||||
height: 100%;
|
||||
|
||||
transition: all 0.3s;
|
||||
|
||||
.user-box {
|
||||
ul li a {
|
||||
color: $gray-500;
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
h5 a {
|
||||
color: $gray-500;
|
||||
font-size: 15px;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
font-weight: 400;
|
||||
color: $gray-500;
|
||||
}
|
||||
|
||||
.nav-link.active,
|
||||
.nav-link:hover {
|
||||
color: $gray-300;
|
||||
}
|
||||
|
||||
.nav-link.active {
|
||||
background-color: lighten($sidebar-bg-color, 5%);
|
||||
}
|
||||
|
||||
.sub-menu li {
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.sidebar-heading {
|
||||
font-size: .75rem;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
ul li a i {
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
line-height: 17px;
|
||||
margin-right: 13px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* closed state */
|
||||
.nav-item .nav-link[aria-expanded="false"]::after {
|
||||
content: "\f0d7";
|
||||
font-family: "Font Awesome 5 Free";
|
||||
display: inline;
|
||||
text-align: right;
|
||||
padding-left: 5px;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
/* open state */
|
||||
.nav-item .nav-link[aria-expanded="true"] {
|
||||
color: $gray-300;
|
||||
}
|
||||
|
||||
.nav-item .nav-link[aria-expanded="true"]::after {
|
||||
content: "\f0d8";
|
||||
font-family: "Font Awesome 5 Free";
|
||||
display: inline;
|
||||
text-align: right;
|
||||
padding-left: 5px;
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-collapsed .sidebar {
|
||||
width: 80px;
|
||||
min-width: 80px;
|
||||
|
||||
.sub-menu li {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.user-box {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-link span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sidebar-sticky {
|
||||
padding-top: 1rem;
|
||||
overflow: inherit !important;
|
||||
}
|
||||
|
||||
.nav > li.nav-item {
|
||||
width: 50px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
ul li a i {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
li {
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
|
||||
ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $sidebar-bg-color;
|
||||
|
||||
.nav-link span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
& > a {
|
||||
position: relative;
|
||||
width: 260px;
|
||||
background-color: $sidebar-bg-color;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
border-top-right-radius: $border-radius;
|
||||
|
||||
span {
|
||||
padding-left: 30px;
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
left: 60px;
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: auto !important;
|
||||
overflow: hidden;
|
||||
background-color: $sidebar-bg-color;
|
||||
border-bottom-right-radius: $border-radius;
|
||||
|
||||
li a {
|
||||
padding-left: 20px;
|
||||
|
||||
span {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item .nav-link[aria-expanded="true"]::after,
|
||||
.nav-item .nav-link[aria-expanded="false"]::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-sticky {
|
||||
position: relative;
|
||||
top: 0;
|
||||
height: calc(100vh - 48px);
|
||||
padding-top: .5rem;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
|
||||
}
|
||||
|
||||
@supports ((position: -webkit-sticky) or (position: sticky)) {
|
||||
.sidebar-sticky {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
.swal-button--confirm {
|
||||
background-color: $danger;
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
$custom-control-description-disabled-color: #868e96;
|
||||
|
||||
//
|
||||
// These variables can be used to customize the switch component.
|
||||
//
|
||||
$switch-height: calc(#{$input-height} * .8) !default;
|
||||
$switch-height-sm: calc(#{$input-height-sm} * .8) !default;
|
||||
$switch-height-lg: calc(#{$input-height-lg} * .8) !default;
|
||||
$switch-border-radius: $switch-height !default;
|
||||
$switch-bg: $gray-300 !default;
|
||||
$switch-checked-bg: map-get($theme-colors, 'primary') !default;
|
||||
$switch-disabled-bg: $custom-control-indicator-disabled-bg !default;
|
||||
$switch-disabled-color: $custom-control-description-disabled-color !default;
|
||||
$switch-thumb-bg: $white !default;
|
||||
$switch-thumb-border-radius: 50% !default;
|
||||
$switch-thumb-padding: 2px !default;
|
||||
$switch-focus-box-shadow: 0 0 0 $input-btn-focus-width rgba(map-get($theme-colors, 'primary'), .25);
|
||||
$switch-transition: .2s all !default;
|
||||
|
||||
.switch {
|
||||
font-size: $font-size-base;
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
position: absolute;
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
background: none;
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
clip-path: inset(50%);
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
|
||||
+ label {
|
||||
position: relative;
|
||||
min-width: calc(#{$switch-height} * 2);
|
||||
border-radius: $switch-border-radius;
|
||||
height: $switch-height;
|
||||
line-height: $switch-height;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
user-select: none;
|
||||
vertical-align: middle;
|
||||
text-indent: calc(calc(#{$switch-height} * 2) + .5rem);
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
+ label::before,
|
||||
+ label::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: calc(#{$switch-height} * 2);
|
||||
bottom: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
right: 0;
|
||||
background-color: $switch-bg;
|
||||
border-radius: $switch-border-radius;
|
||||
transition: $switch-transition;
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
top: $switch-thumb-padding;
|
||||
left: $switch-thumb-padding;
|
||||
width: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
|
||||
border-radius: $switch-thumb-border-radius;
|
||||
background-color: $switch-thumb-bg;
|
||||
transition: $switch-transition;
|
||||
}
|
||||
|
||||
&:checked + label::before {
|
||||
background-color: $switch-checked-bg;
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height;
|
||||
}
|
||||
|
||||
&:focus + label::before {
|
||||
outline: none;
|
||||
box-shadow: $switch-focus-box-shadow;
|
||||
}
|
||||
|
||||
&:disabled + label {
|
||||
color: $switch-disabled-color;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
&:disabled + label::before {
|
||||
background-color: $switch-disabled-bg;
|
||||
}
|
||||
}
|
||||
|
||||
// Small variation
|
||||
&.switch-sm {
|
||||
font-size: $font-size-sm;
|
||||
|
||||
input {
|
||||
+ label {
|
||||
min-width: calc(#{$switch-height-sm} * 2);
|
||||
height: $switch-height-sm;
|
||||
line-height: $switch-height-sm;
|
||||
text-indent: calc(calc(#{$switch-height-sm} * 2) + .5rem);
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
width: calc(#{$switch-height-sm} * 2);
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
width: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height-sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Large variation
|
||||
&.switch-lg {
|
||||
font-size: $font-size-lg;
|
||||
|
||||
input {
|
||||
+ label {
|
||||
min-width: calc(#{$switch-height-lg} * 2);
|
||||
height: $switch-height-lg;
|
||||
line-height: $switch-height-lg;
|
||||
text-indent: calc(calc(#{$switch-height-lg} * 2) + .5rem);
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
width: calc(#{$switch-height-lg} * 2);
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
width: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height-lg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+ .switch {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
.table thead th {
|
||||
color: $gray-700;
|
||||
}
|
||||
|
||||
.table-striped tr {
|
||||
td:first-of-type { border-radius: 5px 0 0 5px; }
|
||||
td:last-of-type { border-radius: 0 5px 5px 0; }
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
.bg-lighter {
|
||||
background-color: $bg-lighter;
|
||||
}
|
||||
|
||||
.border-bottom-light {
|
||||
border-bottom: 1px solid $body-bg;
|
||||
}
|
||||
|
||||
.no-decoration {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.flex-1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.my-10p {
|
||||
margin-top: 10%;
|
||||
margin-bottom: 10%;
|
||||
}
|
||||
|
||||
.text-gray-500 {
|
||||
color: $gray-500;
|
||||
}
|
||||
|
||||
.badge-lg {
|
||||
padding: 5px 8px;
|
||||
}
|
||||
|
||||
.min-width-200 {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.min-width-150 {
|
||||
min-width: 150px;
|
||||
}
|
||||
|
||||
.min-width-100 {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.min-width-80 {
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.line-height-1 {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.overflow-hidden {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.shadow-lg {
|
||||
box-shadow: 0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05) !important;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
@extends('layouts.auth')
|
||||
|
||||
@section('page-title', trans('Login'))
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p" id="login">
|
||||
<div class="text-center">
|
||||
<x-logo />
|
||||
</div>
|
||||
|
||||
<div class="card mt-5">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-center mt-4 text-uppercase">
|
||||
@lang('Login')
|
||||
</h5>
|
||||
|
||||
<div class="p-4">
|
||||
@include('auth.social.buttons')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<form role="form" action="<?= url('login') ?>" method="POST" id="login-form" autocomplete="off" class="mt-3">
|
||||
|
||||
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
|
||||
|
||||
@if (Request::has('to'))
|
||||
<input type="hidden" value="{{ Request::get('to') }}" name="to">
|
||||
@endif
|
||||
|
||||
<div class="form-group">
|
||||
<label for="username" class="sr-only">@lang('Email or Username')</label>
|
||||
<input type="text"
|
||||
name="username"
|
||||
id="username"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Email or Username')"
|
||||
value="{{ old('username') }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group password-field">
|
||||
<label for="password" class="sr-only">@lang('Password')</label>
|
||||
<input type="password"
|
||||
name="password"
|
||||
id="password"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Password')">
|
||||
</div>
|
||||
|
||||
|
||||
@if (setting('remember_me'))
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" name="remember" id="remember" value="1"/>
|
||||
<label class="custom-control-label font-weight-normal" for="remember">
|
||||
@lang('Remember me?')
|
||||
</label>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<div class="form-group mt-4">
|
||||
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-login">
|
||||
@lang('Log In')
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@if (setting('forgot_password'))
|
||||
<a href="<?= route('password.request') ?>" class="forgot">@lang('I forgot my password')</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center text-muted">
|
||||
@if (setting('reg_enabled'))
|
||||
@lang("Don't have an account?")
|
||||
<a class="font-weight-bold" href="<?= url("register") ?>">@lang('Sign Up')</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('assets/js/as/login.js') }}"></script>
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\LoginRequest', '#login-form') !!}
|
||||
@stop
|
||||
@@ -0,0 +1,53 @@
|
||||
@extends('layouts.auth')
|
||||
|
||||
@section('page-title', __('Reset Password'))
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
|
||||
<div class="text-center">
|
||||
<x-logo />
|
||||
</div>
|
||||
|
||||
<div class="card mt-5">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-center mt-4 mb-2 text-uppercase">
|
||||
@lang('Forgot Your Password?')
|
||||
</h5>
|
||||
|
||||
<div class="p-4">
|
||||
<form role="form" action="<?= route('password.email') ?>" method="POST" id="remind-password-form" autocomplete="off">
|
||||
{{ csrf_field() }}
|
||||
|
||||
<p class="text-muted mb-4 text-center font-weight-light">
|
||||
@lang('Please provide your email below and we will send you a password reset link.')
|
||||
</p>
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="form-group password-field my-3">
|
||||
<label for="password" class="sr-only">@lang('Email')</label>
|
||||
<input type="email"
|
||||
name="email"
|
||||
id="email"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Your E-Mail')">
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-4">
|
||||
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
|
||||
@lang('Reset Password')
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\PasswordRemindRequest', '#remind-password-form') !!}
|
||||
@stop
|
||||
@@ -0,0 +1,71 @@
|
||||
@extends('layouts.auth')
|
||||
|
||||
@section('page-title', __('Reset Password'))
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
|
||||
<div class="text-center">
|
||||
<x-logo />
|
||||
</div>
|
||||
|
||||
<div class="card mt-5">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-center mt-4 mb-2 text-uppercase">
|
||||
@lang('Reset Your Password')
|
||||
</h5>
|
||||
|
||||
<form role="form" action="{{ route('password.update') }}" method="POST" id="reset-password-form"
|
||||
autocomplete="off" class="p-4">
|
||||
<input type="hidden" name="token" value="{{ $token }}">
|
||||
{{ csrf_field() }}
|
||||
|
||||
<p class="text-muted mb-4 text-center font-weight-light px-2">
|
||||
@lang('Please provide your email and pick a new password below.')
|
||||
</p>
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password" class="sr-only">@lang('Your E-Mail')</label>
|
||||
<input type="email"
|
||||
name="email"
|
||||
id="email"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Your E-Mail')">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password" class="sr-only">@lang('New Password')</label>
|
||||
<input type="password"
|
||||
name="password"
|
||||
id="password"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('New Password')">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password" class="sr-only">@lang('Confirm New Password')</label>
|
||||
<input type="password"
|
||||
name="password_confirmation"
|
||||
id="password_confirmation"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Confirm New Password')">
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-5">
|
||||
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
|
||||
@lang('Update Password')
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\PasswordResetRequest', '#reset-password-form') !!}
|
||||
@stop
|
||||
@@ -0,0 +1,124 @@
|
||||
@extends('layouts.auth')
|
||||
|
||||
@section('page-title', __('Sign Up'))
|
||||
|
||||
@if (setting('registration.captcha.enabled'))
|
||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||
@endif
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
|
||||
<div class="text-center">
|
||||
<x-logo />
|
||||
</div>
|
||||
|
||||
<div class="card mt-5">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-center mt-4 text-uppercase">
|
||||
@lang('Register')
|
||||
</h5>
|
||||
|
||||
<div class="p-4">
|
||||
@include('auth.social.buttons')
|
||||
|
||||
@include('partials/messages')
|
||||
|
||||
<form role="form" action="<?= url('register') ?>" method="post" id="registration-form" autocomplete="off" class="mt-3">
|
||||
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
|
||||
<div class="form-group">
|
||||
<input type="email"
|
||||
name="email"
|
||||
id="email"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Email')"
|
||||
value="{{ old('email') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="text"
|
||||
name="username"
|
||||
id="username"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Username')"
|
||||
value="{{ old('username') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="password"
|
||||
name="password"
|
||||
id="password"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Password')">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="password"
|
||||
name="password_confirmation"
|
||||
id="password_confirmation"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('Confirm Password')">
|
||||
</div>
|
||||
|
||||
@if (setting('tos'))
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" name="tos" id="tos" value="1"/>
|
||||
<label class="custom-control-label font-weight-normal" for="tos">
|
||||
@lang('I accept')
|
||||
<a href="#tos-modal" data-toggle="modal">@lang('Terms of Service')</a>
|
||||
</label>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Only display captcha if it is enabled --}}
|
||||
@if (setting('registration.captcha.enabled'))
|
||||
<div class="form-group my-4">
|
||||
{!! app('captcha')->display() !!}
|
||||
</div>
|
||||
@endif
|
||||
{{-- end captcha --}}
|
||||
|
||||
<div class="form-group mt-4">
|
||||
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-login">
|
||||
@lang('Register')
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center text-muted">
|
||||
@if (setting('reg_enabled'))
|
||||
@lang('Already have an account?')
|
||||
<a class="font-weight-bold" href="<?= url("login") ?>">@lang('Login')</a>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@if (setting('tos'))
|
||||
<div class="modal fade" id="tos-modal" tabindex="-1" role="dialog" aria-labelledby="tos-label">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="tos-label">@lang('Terms of Service')</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@include('auth.tos')
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
||||
@lang('Close')
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\RegisterRequest', '#registration-form') !!}
|
||||
@stop
|
||||
@@ -0,0 +1,30 @@
|
||||
@if ($socialProviders)
|
||||
<?php $colSize = 12 / count($socialProviders); ?>
|
||||
|
||||
<div class="row pb-3 pt-2">
|
||||
@if (in_array('facebook', $socialProviders))
|
||||
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
|
||||
<a href="{{ url('auth/facebook/login') }}" class="btn-facebook">
|
||||
<i class="fab fa-facebook fa-2x"></i>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (in_array('twitter', $socialProviders))
|
||||
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
|
||||
<a href="{{ url('auth/twitter/login') }}" class="btn-twitter">
|
||||
<i class="fab fa-twitter fa-2x"></i>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (in_array('google', $socialProviders))
|
||||
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
|
||||
<a href="{{ url('auth/google/login') }}" class="btn-google">
|
||||
<i class="fab fa-google-plus-square fa-2x"></i>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@@ -0,0 +1,44 @@
|
||||
@extends('layouts.auth')
|
||||
|
||||
@section('page-title', trans('Two-Factor Authentication'))
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
|
||||
<div class="text-center">
|
||||
<x-logo />
|
||||
</div>
|
||||
|
||||
<div class="card mt-5">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-center mt-4 text-uppercase">
|
||||
@lang('Two-Factor Authentication')
|
||||
</h5>
|
||||
|
||||
<div class="p-4">
|
||||
@include('partials/messages')
|
||||
|
||||
<form role="form" action="<?= route('auth.token.validate') ?>" method="POST" autocomplete="off">
|
||||
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password" class="sr-only">@lang('Token')</label>
|
||||
<input type="text"
|
||||
name="code"
|
||||
id="code"
|
||||
class="form-control input-solid"
|
||||
placeholder="@lang('2FA Code')">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
|
||||
@lang('Validate')
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,24 @@
|
||||
<h4>1. Terms</h4>
|
||||
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Donec quis lacus porttitor, dignissim nibh sit amet, fermentum felis.
|
||||
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere
|
||||
cubilia Curae; In ultricies consectetur viverra. Nullam velit neque,
|
||||
placerat condimentum tempus tincidunt, placerat eu lectus. Nam molestie
|
||||
porta purus, et pretium risus vehicula in. Cras sem ipsum, varius sagittis
|
||||
rhoncus nec, dictum maximus diam. Duis ac laoreet est. In turpis velit, placerat
|
||||
eget nisi vitae, dignissim tristique nisl. Curabitur sollicitudin, nunc ut
|
||||
viverra interdum, lacus...
|
||||
</p>
|
||||
|
||||
<h4>2. Use License</h4>
|
||||
|
||||
<ol type="a">
|
||||
<li>
|
||||
Aenean vehicula erat eu nisi scelerisque, a mattis purus blandit. Curabitur congue
|
||||
ollis nisl malesuada egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<p>...</p>
|
||||
@@ -0,0 +1,30 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ __('Verify Your Email Address') }}</h5>
|
||||
|
||||
@if (session('resent'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ __('A fresh verification link has been sent to your email address.') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ __('Before proceeding, please check your email for a verification link.') }}
|
||||
{{ __('If you did not receive the email') }},
|
||||
<form action="{{ route('verification.resend') }}" method="POST" class="d-inline">
|
||||
@csrf
|
||||
<button type="submit" class="d-inline btn btn-link p-0">
|
||||
{{ __('click here to request another') }}
|
||||
</button>.
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
<img src="{{ $src ?? '' }}"
|
||||
class="{{ $class ?? '' }}"
|
||||
alt="{{ setting('app_name') }}"
|
||||
height="{{ $height ?? '50' }}">
|
||||
@@ -0,0 +1,35 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Dashboard'))
|
||||
@section('page-heading', __('Dashboard'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Dashboard')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="row">
|
||||
@foreach (\Vanguard\Plugins\Vanguard::availableWidgets(auth()->user()) as $widget)
|
||||
@if ($widget->width)
|
||||
<div class="col-md-{{ $widget->width }}">
|
||||
@endif
|
||||
{!! app()->call([$widget, 'render']) !!}
|
||||
@if($widget->width)
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
@foreach (\Vanguard\Plugins\Vanguard::availableWidgets(auth()->user()) as $widget)
|
||||
@if (method_exists($widget, 'scripts'))
|
||||
{!! app()->call([$widget, 'scripts']) !!}
|
||||
@endif
|
||||
@endforeach
|
||||
@stop
|
||||
@@ -0,0 +1,32 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => [
|
||||
'welcome' => 'selected done',
|
||||
'requirements' => 'selected done',
|
||||
'permissions' => 'selected done',
|
||||
'database' => 'selected done',
|
||||
'installation' => 'selected done',
|
||||
'complete' => 'selected'
|
||||
]])
|
||||
|
||||
<div class="step-content">
|
||||
<h3>Complete!</h3>
|
||||
<hr>
|
||||
<p><strong>Well Done!</strong></p>
|
||||
<p>You application is now successfully installed! You can login by clicking on "Log In" button below.</p>
|
||||
|
||||
@if (is_writable(base_path()))
|
||||
<p><strong>Important!</strong> Since your root directory is still writable,
|
||||
you can change the permissions to 755 to make it writable only by root user.</p>
|
||||
@endif
|
||||
|
||||
<a class="btn btn-primary float-right" href="{{ url('login') }}">
|
||||
<i class="fa fa-sign-in"></i>
|
||||
Log In
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,52 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => [
|
||||
'welcome' => 'selected done',
|
||||
'requirements' => 'selected done',
|
||||
'permissions' => 'selected done',
|
||||
'database' => 'selected'
|
||||
]])
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<form action="{{ route('install.installation') }}" method="POST">
|
||||
@csrf
|
||||
<div class="step-content">
|
||||
<h3>Database Info</h3>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label for="host">Host</label>
|
||||
<input type="text" class="form-control" id="host" name="host" value="{{ old('host') }}">
|
||||
<small>Database host. Usually you should enter localhost or mysql.</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" class="form-control" id="username" name="username" value="{{ old('username') }}">
|
||||
<small>Your database username.</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" class="form-control" id="password" name="password">
|
||||
<small>Database password for provided username.</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="database">Database Name</label>
|
||||
<input type="text" class="form-control" id="database" name="database" value="{{ old('database') }}">
|
||||
<small>Name of database where tables should be created.</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="prefix">Tables Prefix</label>
|
||||
<input type="text" class="form-control" id="prefix" name="prefix" value="{{ old('prefix') }}">
|
||||
<small>Prefix to put in front of database table names. You can leave it blank if you want.</small>
|
||||
</div>
|
||||
<button class="btn btn-green float-right mt-3">
|
||||
Next
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</button>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,27 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => [
|
||||
'welcome' => 'selected done',
|
||||
'requirements' => 'selected done',
|
||||
'permissions' => 'selected done',
|
||||
'database' => 'selected done',
|
||||
'installation' => 'selected done',
|
||||
'complete' => 'selected error'
|
||||
]])
|
||||
|
||||
<div class="step-content">
|
||||
<h3>Whoops!</h3>
|
||||
<hr>
|
||||
<p><strong>There was something wrong during the installation!</strong></p>
|
||||
<p>Please check your log located inside <code>storage/logs</code> directory to see what's going on.</p>
|
||||
|
||||
<a class="btn btn-primary float-right mt-3" href="{{ route('install.start') }}">
|
||||
<i class="fa fa-undo"></i>
|
||||
Try Again
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,31 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => [
|
||||
'welcome' => 'selected done',
|
||||
'requirements' => 'selected done',
|
||||
'permissions' => 'selected done',
|
||||
'database' => 'selected done',
|
||||
'installation' => 'selected'
|
||||
]])
|
||||
|
||||
<form action="{{ route('install.install') }}" method="POST">
|
||||
@csrf
|
||||
<div class="step-content">
|
||||
<h3>Installation</h3>
|
||||
<hr>
|
||||
<p>Vanguard is ready to be installed!</p>
|
||||
<p>Before you proceed, please provide the name for your application below:</p>
|
||||
<div class="form-group">
|
||||
<label for="app_name">App Name</label>
|
||||
<input type="text" class="form-control" id="app_name" name="app_name" value="Vanguard">
|
||||
</div>
|
||||
<button class="btn btn-green pull-right" data-toggle="loader" data-loading-text="Installing" type="submit">
|
||||
<i class="fa fa-play"></i>
|
||||
Install
|
||||
</button>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</form>
|
||||
@stop
|
||||
@@ -0,0 +1,35 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => [
|
||||
'welcome' => 'selected done',
|
||||
'requirements' => 'selected done',
|
||||
'permissions' => 'selected'
|
||||
]])
|
||||
|
||||
<div class="step-content">
|
||||
<h3>Permissions</h3>
|
||||
<hr>
|
||||
<ul class="list-group mb-4">
|
||||
@foreach($folders as $path => $isWritable)
|
||||
<li class="list-group-item">
|
||||
{{ $path }}
|
||||
@if ($isWritable)
|
||||
<span class="badge badge-secondary float-right ml-2">775</span>
|
||||
<span class="badge badge-success float-right"><i class="fa fa-check"></i></span>
|
||||
@else
|
||||
<span class="badge badge-secondary float-right ml-2">775</span>
|
||||
<span class="badge badge-danger float-right"><i class="fa fa-times"></i></span>
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<a class="btn btn-green float-right" href="{{ route('install.database') }}">
|
||||
Next
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,41 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => ['welcome' => 'selected done', 'requirements' => 'selected']])
|
||||
|
||||
@if (! $allLoaded)
|
||||
<div class="alert alert-danger">
|
||||
<strong>Oh snap!</strong> Your system does not meet the requirements. You have to fix them in order to continue.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="step-content">
|
||||
<h3>System Requirements</h3>
|
||||
<hr>
|
||||
<ul class="list-group mb-4">
|
||||
@foreach ($requirements as $extension => $loaded)
|
||||
<li class="list-group-item {{ ! $loaded ? 'list-group-item-danger' : '' }}">
|
||||
{{ $extension }}
|
||||
@if ($loaded)
|
||||
<span class="badge badge-success float-right"><i class="fa fa-check"></i></span>
|
||||
@else
|
||||
<span class="badge badge-danger float-right"><i class="fa fa-times"></i></span>
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@if ($allLoaded)
|
||||
<a class="btn btn-green float-right" href="{{ route('install.permissions') }}">
|
||||
Next
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</a>
|
||||
@else
|
||||
<button class="btn btn-green pull-right" disabled>
|
||||
Next
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</button>
|
||||
@endif
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
@stop
|
||||
@@ -0,0 +1,20 @@
|
||||
@extends('layouts.install')
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('install.steps', ['steps' => ['welcome' => 'selected']])
|
||||
|
||||
<div class="step-content">
|
||||
<h3>Welcome</h3>
|
||||
<hr>
|
||||
<p>This steps will guide you through few step installation process.</p>
|
||||
<p>When this installation process is finished, you will be able
|
||||
to login and manage your users immediately! </p>
|
||||
<br>
|
||||
<a href="{{ route('install.requirements') }}" class="btn btn-primary float-right" role="button">
|
||||
Next
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
@stop
|
||||
@@ -0,0 +1,40 @@
|
||||
<div class="steps">
|
||||
<ul>
|
||||
<li>
|
||||
<a class="{{ isset($steps['welcome']) ? $steps['welcome'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-home"></i></div>
|
||||
<span class="stepDesc text-small">Welcome</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{{ isset($steps['requirements']) ? $steps['requirements'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-list"></i></div>
|
||||
<span class="stepDesc text-small">System Requirements</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{{ isset($steps['permissions']) ? $steps['permissions'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-lock"></i></div>
|
||||
<span class="stepDesc text-small">Permissions</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{{ isset($steps['database']) ? $steps['database'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-database"></i></div>
|
||||
<span class="stepDesc text-small">Database Info</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{{ isset($steps['installation']) ? $steps['installation'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-terminal"></i></div>
|
||||
<span class="stepDesc text-small">Installation</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{{ isset($steps['complete']) ? $steps['complete'] : '' }}">
|
||||
<div class="stepNumber"><i class="fa fa-flag-checkered"></i></div>
|
||||
<span class="stepDesc text-small">Complete</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,49 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>@yield('page-title') - {{ setting('app_name') }}</title>
|
||||
|
||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ url('assets/img/icons/apple-touch-icon-144x144.png') }}" />
|
||||
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ url('assets/img/icons/apple-touch-icon-152x152.png') }}" />
|
||||
<link rel="icon" type="image/png" href="{{ url('assets/img/icons/favicon-32x32.png') }}" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="{{ url('assets/img/icons/favicon-16x16.png') }}" sizes="16x16" />
|
||||
<meta name="application-name" content="{{ setting('app_name') }}"/>
|
||||
<meta name="msapplication-TileColor" content="#FFFFFF" />
|
||||
<meta name="msapplication-TileImage" content="{{ url('assets/img/icons/mstile-144x144.png') }}" />
|
||||
|
||||
<link media="all" type="text/css" rel="stylesheet" href="{{ url(mix('assets/css/vendor.css')) }}">
|
||||
<link media="all" type="text/css" rel="stylesheet" href="{{ url(mix('assets/css/app.css')) }}">
|
||||
|
||||
@yield('styles')
|
||||
|
||||
@hook('app:styles')
|
||||
</head>
|
||||
<body>
|
||||
@include('partials.navbar')
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
@include('partials.sidebar.main')
|
||||
|
||||
<div class="content-page">
|
||||
<main role="main" class="px-4">
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{ url(mix('assets/js/vendor.js')) }}"></script>
|
||||
<script src="{{ url('assets/js/as/app.js') }}"></script>
|
||||
@yield('scripts')
|
||||
|
||||
@hook('app:scripts')
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,34 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>@yield('page-title') - {{ setting('app_name') }}</title>
|
||||
|
||||
<link href="{{ asset('assets/css/app.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('assets/css/fontawesome-all.min.css') }}" rel="stylesheet">
|
||||
|
||||
@yield('header-scripts')
|
||||
|
||||
@hook('auth:styles')
|
||||
</head>
|
||||
<body class="auth">
|
||||
|
||||
<div class="d-flex justify-content-end py-2 pr-4">
|
||||
@include('partials.locale-dropdown')
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
@yield('content')
|
||||
</div>
|
||||
|
||||
<script src="{{ asset('assets/js/vendor.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/app.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/btn.js') }}"></script>
|
||||
@yield('scripts')
|
||||
@hook('auth:scripts')
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,42 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>Installation - {{ setting('app_name') }}</title>
|
||||
|
||||
<link href="{{ asset('assets/css/vendor.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('assets/css/app.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('assets/css/install.css') }}" rel="stylesheet">
|
||||
|
||||
@yield('styles')
|
||||
</head>
|
||||
<body style="background-color: #fff;">
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-md-6 offset-3 logo-wrapper">
|
||||
<x-logo class="logo" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="wizard col-md-6 offset-3">
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{{ mix("assets/js/vendor.js") }}"></script>
|
||||
<script type="text/javascript" src="{{ url('assets/js/as/app.js') }}"></script>
|
||||
<script type="text/javascript" src="{{ url('assets/js/as/btn.js') }}"></script>
|
||||
<script>
|
||||
$("a[data-toggle=loader], button[data-toggle=loader]").click(function () {
|
||||
if ($(this).parents('form').valid()) {
|
||||
as.btn.loading($(this), $(this).data('loading-text'));
|
||||
$(this).parents('form').submit();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@yield('scripts')
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,22 @@
|
||||
@component('mail::message')
|
||||
|
||||
# @lang('Hello!')
|
||||
|
||||
@lang('You are receiving this email because we received a password reset request for your account.')
|
||||
|
||||
@component('mail::button', ['url' => route('password.reset', ['token' => $token])])
|
||||
@lang('Reset Password')
|
||||
@endcomponent
|
||||
|
||||
@lang('This password reset link will expire in :count minutes.', [
|
||||
'count' => config('auth.passwords.users.expire')
|
||||
])
|
||||
|
||||
|
||||
@lang('If you did not request a password reset, no further action is required.')
|
||||
|
||||
|
||||
@lang('Regards'),<br>
|
||||
{{ setting('app_name') }}
|
||||
|
||||
@endcomponent
|
||||
@@ -0,0 +1,19 @@
|
||||
@component('mail::message')
|
||||
|
||||
# @lang('Hello!')
|
||||
|
||||
@lang('New user was just registered on :app website.', ['app' => setting('app_name')])
|
||||
|
||||
|
||||
@lang('To view the user details just visit the link below.')
|
||||
|
||||
|
||||
@component('mail::button', ['url' => route('users.show', $user)])
|
||||
@lang('View User')
|
||||
@endcomponent
|
||||
|
||||
|
||||
@lang('Regards'),<br>
|
||||
{{ setting('app_name') }}
|
||||
|
||||
@endcomponent
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
use Vanguard\Support\Locale;
|
||||
?>
|
||||
<li class="nav-item dropdown d-flex align-items-center">
|
||||
<a class="nav-link dropdown-toggle text-uppercase"
|
||||
href="#"
|
||||
id="navbarDropdown"
|
||||
role="button"
|
||||
data-toggle="dropdown"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="false">
|
||||
<img src="{{ Locale::flagUrl(session()->get('locale') ?: config('app.locale')) }}" width="30" />
|
||||
<span class="ml-1">{{ session()->get('locale') }}</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right position-absolute p-0" aria-labelledby="navbarDropdown">
|
||||
@foreach(Locale::AVAILABLE_LOCALES as $locale)
|
||||
<a class="dropdown-item py-2 text-uppercase" href="?lang={{ $locale }}">
|
||||
<img src="{{ Locale::flagUrl($locale) }}" alt="{{ $locale }}" width="30">
|
||||
<span class="ml-1">{{ $locale }}</span>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</li>
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
@if(isset ($errors) && count($errors) > 0)
|
||||
<div class="alert alert-danger alert-notification">
|
||||
<ul class="list-unstyled mb-0">
|
||||
@foreach($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(Session::get('success', false))
|
||||
<?php $data = Session::get('success'); ?>
|
||||
@if (is_array($data))
|
||||
@foreach ($data as $msg)
|
||||
<div class="alert alert-success alert-notification">
|
||||
<i class="fa fa-check"></i>
|
||||
{{ $msg }}
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<div class="alert alert-success alert-notification">
|
||||
<i class="fa fa-check"></i>
|
||||
{{ $data }}
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
@@ -0,0 +1,103 @@
|
||||
<nav class="navbar fixed-top align-items-start navbar-expand-lg pl-0 pr-0 py-0" >
|
||||
|
||||
<div class="navbar-brand-wrapper d-flex align-items-center justify-content-center">
|
||||
<a class="navbar-brand mr-0" href="{{ url('/') }}">
|
||||
<x-logo class="logo-lg" height="35" />
|
||||
<x-logo variant="no-text" class="logo-sm" height="35" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@if (app('impersonate')->isImpersonating())
|
||||
<a href="{{ route('impersonate.leave') }}" class="navbar-toggler text-danger hidden-md">
|
||||
<i class="fas fa-user-secret"></i>
|
||||
</a>
|
||||
@endif
|
||||
|
||||
<button class="navbar-toggler" type="button" id="sidebar-toggle">
|
||||
<i class="fas fa-align-right text-muted"></i>
|
||||
</button>
|
||||
|
||||
<button class="navbar-toggler mr-3"
|
||||
type="button"
|
||||
data-toggle="collapse"
|
||||
data-target="#top-navigation"
|
||||
aria-controls="top-navigation"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<i class="fas fa-bars text-muted"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="top-navigation">
|
||||
<div class="row ml-2">
|
||||
<div class="col-lg-12 d-flex align-items-left align-items-md-center flex-column flex-md-row py-3">
|
||||
<h4 class="page-header mb-0">
|
||||
@yield('page-heading')
|
||||
</h4>
|
||||
|
||||
<ol class="breadcrumb mb-0 font-weight-light">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ url('/') }}" class="text-muted">
|
||||
<i class="fa fa-home"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@yield('breadcrumbs')
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="navbar-nav ml-auto pr-3 flex-row">
|
||||
@if (app('impersonate')->isImpersonating())
|
||||
<li class="nav-item d-flex align-items-center visible-lg">
|
||||
<a href="{{ route('impersonate.leave') }}" class="btn text-danger">
|
||||
<i class="fas fa-user-secret mr-2"></i>
|
||||
@lang('Stop Impersonating')
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@hook('navbar:items')
|
||||
|
||||
@include('partials.locale-dropdown')
|
||||
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle"
|
||||
href="#"
|
||||
id="navbarDropdown"
|
||||
role="button"
|
||||
data-toggle="dropdown"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="false">
|
||||
<img src="{{ auth()->user()->present()->avatar }}"
|
||||
width="50"
|
||||
height="50"
|
||||
class="rounded-circle img-thumbnail img-responsive">
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right position-absolute p-0" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item py-2" href="{{ route('profile') }}">
|
||||
<i class="fas fa-user text-muted mr-2"></i>
|
||||
@lang('My Profile')
|
||||
</a>
|
||||
|
||||
@if (config('session.driver') == 'database')
|
||||
<a href="{{ route('profile.sessions') }}" class="dropdown-item py-2">
|
||||
<i class="fas fa-list text-muted mr-2"></i>
|
||||
@lang('Active Sessions')
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@hook('navbar:dropdown')
|
||||
|
||||
<div class="dropdown-divider m-0"></div>
|
||||
|
||||
<a class="dropdown-item py-2" href="{{ route('auth.logout') }}">
|
||||
<i class="fas fa-sign-out-alt text-muted mr-2"></i>
|
||||
@lang('Logout')
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -0,0 +1,26 @@
|
||||
@if ($item && $item->authorize(auth()->user()))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ Request::is($item->getActivePath()) ? 'active' : '' }}"
|
||||
href="{{ $item->getHref() }}"
|
||||
@if($item->isDropdown())
|
||||
data-toggle="collapse"
|
||||
aria-expanded="{{ Request::is($item->getExpandedPath()) ? 'true' : 'false' }}"
|
||||
@endif
|
||||
>
|
||||
@if ($item->getIcon())
|
||||
<i class="{{ $item->getIcon() }}"></i>
|
||||
@endif
|
||||
|
||||
<span>{{ $item->getTitle() }}</span>
|
||||
</a>
|
||||
|
||||
@if ($item->isDropdown())
|
||||
<ul class="{{ Request::is($item->getExpandedPath()) ? '' : 'collapse' }} list-unstyled sub-menu"
|
||||
id="{{ str_replace('#', '', $item->getHref()) }}">
|
||||
@foreach ($item->children() as $child)
|
||||
@include('partials.sidebar.items', ['item' => $child])
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
</li>
|
||||
@endif
|
||||
@@ -0,0 +1,37 @@
|
||||
<nav class="col-md-2 sidebar">
|
||||
<div class="user-box text-center pt-5 pb-3">
|
||||
<div class="user-img">
|
||||
<img src="{{ auth()->user()->present()->avatar }}"
|
||||
width="90"
|
||||
height="90"
|
||||
alt="user-img"
|
||||
class="rounded-circle img-thumbnail img-responsive">
|
||||
</div>
|
||||
<h5 class="my-3">
|
||||
<a href="{{ route('profile') }}">{{ auth()->user()->present()->nameOrEmail }}</a>
|
||||
</h5>
|
||||
|
||||
<ul class="list-inline mb-2">
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ route('profile') }}" title="@lang('My Profile')">
|
||||
<i class="fas fa-cog"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ route('auth.logout') }}" class="text-custom" title="@lang('Logout')">
|
||||
<i class="fas fa-sign-out-alt"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-sticky">
|
||||
<ul class="nav flex-column">
|
||||
@foreach (\Vanguard\Plugins\Vanguard::availablePlugins() as $plugin)
|
||||
@include('partials.sidebar.items', ['item' => $plugin->sidebar()])
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Permissions'))
|
||||
@section('page-heading', $edit ? $permission->name : __('Create New Permission'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('permissions.index') }}">@lang('Permissions')</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
{{ __($edit ? 'Edit' : 'Create') }}
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
@if ($edit)
|
||||
<form action="{{ route('permissions.update', $permission) }}" method="POST" id="permission-form">
|
||||
@method('PUT')
|
||||
@else
|
||||
<form action="{{ route('permissions.store') }}" method="POST" id="permission-form">
|
||||
@endif
|
||||
@csrf
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h5 class="card-title">
|
||||
@lang('Permission Details')
|
||||
</h5>
|
||||
<p class="text-muted font-weight-light">
|
||||
@lang('A general permission information.')
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="form-group">
|
||||
<label for="name">@lang('Name')</label>
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
id="name"
|
||||
name="name"
|
||||
placeholder="@lang('Permission Name')"
|
||||
value="{{ $edit ? $permission->name : old('name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="display_name">@lang('Display Name')</label>
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
id="display_name"
|
||||
name="display_name"
|
||||
placeholder="@lang('Display Name')"
|
||||
value="{{ $edit ? $permission->display_name : old('display_name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="description">@lang('Description')</label>
|
||||
<textarea name="description"
|
||||
id="description"
|
||||
class="form-control input-solid">{{ $edit ? $permission->description : old('description') }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __($edit ? "Update Permission" : "Create Permission") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
@if ($edit)
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Permission\UpdatePermissionRequest', '#permission-form') !!}
|
||||
@else
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Permission\CreatePermissionRequest', '#permission-form') !!}
|
||||
@endif
|
||||
@stop
|
||||
@@ -0,0 +1,106 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Permissions'))
|
||||
@section('page-heading', __('Permissions'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Permissions')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<form action="{{ route('permissions.save') }}" method="POST" class="mb-4">
|
||||
@csrf
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
|
||||
<div class="row mb-3 pb-3 border-bottom-light">
|
||||
<div class="col-lg-12">
|
||||
<div class="float-right">
|
||||
<a href="{{ route('permissions.create') }}" class="btn btn-primary btn-rounded">
|
||||
<i class="fas fa-plus mr-2"></i>
|
||||
@lang('Add Permission')
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive" id="users-table-wrapper">
|
||||
<table class="table table-striped table-borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="min-width-200">@lang('Name')</th>
|
||||
@foreach ($roles as $role)
|
||||
<th class="text-center">{{ $role->display_name }}</th>
|
||||
@endforeach
|
||||
<th class="text-center min-width-100">@lang('Action')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (count($permissions))
|
||||
@foreach ($permissions as $permission)
|
||||
<tr>
|
||||
<td>{{ $permission->display_name ?: $permission->name }}</td>
|
||||
|
||||
@foreach ($roles as $role)
|
||||
<td class="text-center">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox"
|
||||
name="roles[{{ $role->id }}][]"
|
||||
value="{{ $permission->id }}"
|
||||
class="custom-control-input"
|
||||
id="cb-{{ $role->id }}-{{ $permission->id }}"
|
||||
{{ $role->hasPermission($permission->name) ? 'checked' : '' }}>
|
||||
<label class="custom-control-label d-inline"
|
||||
for="cb-{{ $role->id }}-{{ $permission->id }}"></label>
|
||||
</div>
|
||||
</td>
|
||||
@endforeach
|
||||
|
||||
<td class="text-center">
|
||||
<a href="{{ route('permissions.edit', $permission) }}" class="btn btn-icon"
|
||||
title="@lang('Edit Permission')" data-toggle="tooltip" data-placement="top">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
|
||||
@if ($permission->removable)
|
||||
<a href="{{ route('permissions.destroy', $permission) }}" class="btn btn-icon"
|
||||
title="@lang('Delete Permission')"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
data-method="DELETE"
|
||||
data-confirm-title="@lang('Please Confirm')"
|
||||
data-confirm-text="@lang('Are you sure that you want to delete this permission?')"
|
||||
data-confirm-delete="@lang('Yes, delete it!')">
|
||||
<i class="fas fa-trash"></i>
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="4"><em>@lang('No records found.')</em></td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (count($permissions))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<button type="submit" class="btn btn-primary">@lang('Save Permissions')</button>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</form>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="card widget">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="p-3 text-danger flex-1">
|
||||
<i class="fa fa-user-slash fa-3x"></i>
|
||||
</div>
|
||||
|
||||
<div class="pr-3">
|
||||
<h2 class="text-right">{{ number_format($count) }}</h2>
|
||||
<div class="text-muted">@lang('Banned Users')</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,31 @@
|
||||
<div class="card overflow-hidden">
|
||||
<h6 class="card-header d-flex align-items-center justify-content-between">
|
||||
@lang('Latest Registrations')
|
||||
|
||||
@if (count($latestRegistrations))
|
||||
<small class="float-right">
|
||||
<a href="{{ route('users.index') }}">@lang('View All')</a>
|
||||
</small>
|
||||
@endif
|
||||
</h6>
|
||||
|
||||
<div class="card-body p-0">
|
||||
@if (count($latestRegistrations))
|
||||
<ul class="list-group list-group-flush">
|
||||
@foreach ($latestRegistrations as $user)
|
||||
<li class="list-group-item list-group-item-action px-4 py-3">
|
||||
<a href="{{ route('users.show', $user) }}" class="d-flex text-dark no-decoration">
|
||||
<img class="rounded-circle" width="40" height="40" src="{{ $user->present()->avatar }}">
|
||||
<div class="ml-2" style="line-height: 1.2;">
|
||||
<span class="d-block p-0">{{ $user->present()->nameOrEmail }}</span>
|
||||
<small class="text-muted">{{ $user->created_at->diffForHumans() }}</small>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@else
|
||||
<p class="text-muted">@lang('No records found.')</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="card widget">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="p-3 text-success flex-1">
|
||||
<i class="fa fa-user-plus fa-3x"></i>
|
||||
</div>
|
||||
|
||||
<div class="pr-3">
|
||||
<h2 class="text-right">{{ number_format($count) }}</h2>
|
||||
<div class="text-muted">@lang('New Users')</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
<script>
|
||||
var users = @json(array_values($usersPerMonth));
|
||||
var months = @json(array_keys($usersPerMonth));
|
||||
var trans = {
|
||||
chartLabel: "{{ __('Registration History') }}",
|
||||
new: "{{ __('new') }}",
|
||||
user: "{{ __('user') }}",
|
||||
users: "{{ __('users') }}"
|
||||
};
|
||||
</script>
|
||||
|
||||
<script src="{{ asset('assets/js/chart.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/dashboard-admin.js') }}"></script>
|
||||
@@ -0,0 +1,11 @@
|
||||
<div class="card">
|
||||
<h6 class="card-header">
|
||||
@lang('Registration History')
|
||||
</h6>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="pt-4 px-3">
|
||||
<canvas id="myChart" height="365"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="card widget">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="p-3 text-primary flex-1">
|
||||
<i class="fa fa-users fa-3x"></i>
|
||||
</div>
|
||||
|
||||
<div class="pr-3">
|
||||
<h2 class="text-right">{{ number_format($count) }}</h2>
|
||||
<div class="text-muted">@lang('Total Users')</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="card widget">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="p-3 text-info flex-1">
|
||||
<i class="fa fa-user fa-3x"></i>
|
||||
</div>
|
||||
|
||||
<div class="pr-3">
|
||||
<h2 class="text-right">{{ number_format($count) }}</h2>
|
||||
<div class="text-muted">@lang('Unconfirmed Users')</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,53 @@
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a href="{{ route('profile') }}" class="text-center no-decoration">
|
||||
<div class="icon my-3">
|
||||
<i class="fas fa-user fa-2x"></i>
|
||||
</div>
|
||||
<p class="lead mb-0">@lang('Update Profile')</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (config('session.driver') == 'database')
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a href="{{ route('profile.sessions') }}" class="text-center no-decoration">
|
||||
<div class="icon my-3">
|
||||
<i class="fa fa-list fa-2x"></i>
|
||||
</div>
|
||||
<p class="lead mb-0">@lang('My Sessions')</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a href="{{ route('profile.activity') }}" class="text-center no-decoration">
|
||||
<div class="icon my-3">
|
||||
<i class="fas fa-server fa-2x"></i>
|
||||
</div>
|
||||
<p class="lead mb-0">@lang('Activity Log')</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a href="{{ route('auth.logout') }}" class="text-center no-decoration">
|
||||
<div class="icon my-3">
|
||||
<i class="fas fa-sign-out-alt fa-2x"></i>
|
||||
</div>
|
||||
<p class="lead mb-0">@lang('Logout')</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,81 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Roles'))
|
||||
@section('page-heading', $edit ? $role->name : __('Create New Role'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('roles.index') }}">@lang('Roles')</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
{{ __($edit ? 'Edit' : 'Create') }}
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
@if ($edit)
|
||||
<form action="{{ route('roles.update', $role) }}" method="POST" id="role-form">
|
||||
@method('PUT')
|
||||
@else
|
||||
<form action="{{ route('roles.store') }}" method="POST" id="role-form">
|
||||
@endif
|
||||
@csrf
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h5 class="card-title">
|
||||
@lang('Role Details')
|
||||
</h5>
|
||||
<p class="text-muted">
|
||||
@lang('A general role information.')
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="form-group">
|
||||
<label for="name">@lang('Name')</label>
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
id="name"
|
||||
name="name"
|
||||
placeholder="@lang('Role Name')"
|
||||
value="{{ $edit ? $role->name : old('name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="display_name">@lang('Display Name')</label>
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
id="display_name"
|
||||
name="display_name"
|
||||
placeholder="@lang('Display Name')"
|
||||
value="{{ $edit ? $role->display_name : old('display_name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="description">@lang('Description')</label>
|
||||
<textarea name="description"
|
||||
id="description"
|
||||
class="form-control input-solid">{{ $edit ? $role->description : old('description') }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __($edit ? 'Update Role' : 'Create Role') }}
|
||||
</button>
|
||||
</form>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
@if ($edit)
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Role\UpdateRoleRequest', '#role-form') !!}
|
||||
@else
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\Role\CreateRoleRequest', '#role-form') !!}
|
||||
@endif
|
||||
@stop
|
||||
@@ -0,0 +1,76 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Roles'))
|
||||
@section('page-heading', __('Roles'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Roles')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row mb-3 pb-3 border-bottom-light">
|
||||
<div class="col-lg-12">
|
||||
<div class="float-right">
|
||||
<a href="{{ route('roles.create') }}" class="btn btn-primary btn-rounded">
|
||||
<i class="fas fa-plus mr-2"></i>
|
||||
@lang('Add Role')
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive" id="users-table-wrapper">
|
||||
<table class="table table-striped table-borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="min-width-100">@lang('Name')</th>
|
||||
<th class="min-width-150">@lang('Display Name')</th>
|
||||
<th class="min-width-150">@lang('# of users with this role')</th>
|
||||
<th class="text-center">@lang('Action')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (count($roles))
|
||||
@foreach ($roles as $role)
|
||||
<tr>
|
||||
<td>{{ $role->name }}</td>
|
||||
<td>{{ $role->display_name }}</td>
|
||||
<td>{{ $role->users_count }}</td>
|
||||
<td class="text-center">
|
||||
<a href="{{ route('roles.edit', $role) }}" class="btn btn-icon"
|
||||
title="@lang('Edit Role')" data-toggle="tooltip" data-placement="top">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
@if ($role->removable)
|
||||
<a href="{{ route('roles.destroy', $role) }}" class="btn btn-icon"
|
||||
title="@lang('Delete Role')"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
data-method="DELETE"
|
||||
data-confirm-title="@lang('Please Confirm')"
|
||||
data-confirm-text="@lang('Are you sure that you want to delete this role?')"
|
||||
data-confirm-delete="@lang('Yes, delete it!')">
|
||||
<i class="fas fa-trash"></i>
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="4"><em>@lang('No records found.')</em></td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
@@ -0,0 +1,70 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Authentication Settings'))
|
||||
@section('page-heading', __('Authentication'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item text-muted">
|
||||
@lang('Settings')
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Authentication')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<!-- Nav tabs -->
|
||||
<ul class="nav nav-pills mb-4 mt-2" id="pills-tab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a href="#auth"
|
||||
class="nav-link active"
|
||||
id="pills-home-tab"
|
||||
data-toggle="pill"
|
||||
aria-controls="pills-home"
|
||||
aria-selected="true">
|
||||
<i class="fa fa-lock"></i>
|
||||
@lang('Authentication')
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#registration"
|
||||
class="nav-link"
|
||||
id="pills-home-tab"
|
||||
data-toggle="pill"
|
||||
aria-controls="pills-home"
|
||||
aria-selected="true">
|
||||
<i class="fa fa-user-plus"></i>
|
||||
@lang('Registration')
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Tab panes -->
|
||||
<div class="tab-content">
|
||||
<div role="tabpanel" class="tab-pane active" id="auth">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@include('settings.partials.auth')
|
||||
@include('settings.partials.two-factor')
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@include('settings.partials.throttling')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div role="tabpanel" class="tab-pane" id="registration">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@include('settings.partials.registration')
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@include('settings.partials.recaptcha')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,41 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('General Settings'))
|
||||
@section('page-heading', __('General Settings'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item text-muted">
|
||||
@lang('Settings')
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('General')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<form action="{{ route('settings.general.update') }}" method="POST" id="general-settings-form">
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for="name">@lang('Name')</label>
|
||||
<input type="text" class="form-control input-solid" id="app_name"
|
||||
name="app_name" value="{{ setting('app_name') }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('Update')
|
||||
</button>
|
||||
</form>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,63 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Notification Settings'))
|
||||
@section('page-heading', __('Notification Settings'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item text-muted">
|
||||
@lang('Settings')
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Notifications')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header">
|
||||
@lang('Email Notifications')
|
||||
</h5>
|
||||
|
||||
<div class="card-body">
|
||||
<form action="{{ route('settings.notifications.update') }}" method="POST" id="notification-settings-form">
|
||||
@csrf
|
||||
|
||||
<div class="form-group mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="notifications_signup_email">
|
||||
|
||||
<input type="checkbox"
|
||||
name="notifications_signup_email"
|
||||
class="switch"
|
||||
value="1"
|
||||
id="switch-signup-email"
|
||||
{{ setting('notifications_signup_email') ? 'checked' : '' }}>
|
||||
|
||||
<label for="switch-signup-email"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Sign-Up Notification')</label>
|
||||
|
||||
<small class="pt-0 text-muted">
|
||||
@lang('Send an email to the Administrators when user signs up.')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary mt-3">
|
||||
@lang('Update')
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,73 @@
|
||||
<div class="card">
|
||||
<h6 class="card-header">
|
||||
@lang('General')
|
||||
</h6>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('settings.auth.update') }}" id="auth-general-settings-form">
|
||||
@csrf
|
||||
|
||||
<div class="form-group mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="remember_me">
|
||||
<input type="checkbox" name="remember_me" id="switch-remember-me" class="switch"
|
||||
value="1" {{ setting('remember_me') ? 'checked' : '' }}>
|
||||
<label for="switch-remember-me"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Allow "Remember Me"')</label>
|
||||
<small class="pt-0 text-muted">
|
||||
@lang("Should 'Remember Me' checkbox be displayed on login form?")
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="forgot_password">
|
||||
<input type="checkbox" name="forgot_password" id="switch-forgot-pass" class="switch"
|
||||
value="1" {{ setting('forgot_password') ? 'checked' : '' }}>
|
||||
<label for="switch-forgot-pass"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Forgot Password')</label>
|
||||
<small class="pt-0 text-muted">
|
||||
@lang('Enable/Disable forgot password feature.')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<label for="login_reset_token_lifetime">
|
||||
@lang('Reset Token Lifetime') <br>
|
||||
<small class="text-muted">
|
||||
@lang('Number of minutes that the reset token should be considered valid.')
|
||||
</small>
|
||||
</label>
|
||||
<input type="text" name="login_reset_token_lifetime"
|
||||
class="form-control input-solid" value="{{ setting('login_reset_token_lifetime', 30) }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<label for="login_reset_token_lifetime">
|
||||
@lang('Max Number of Active Sessions') <br>
|
||||
<small class="text-muted">
|
||||
@lang('Maximum number of active sessions per user. Set to 0 to allow unlimited number of active sessions.')
|
||||
<br>
|
||||
@lang('Only applies when using database session driver.')
|
||||
</small>
|
||||
</label>
|
||||
<input type="text" name="max_active_sessions"
|
||||
class="form-control input-solid" value="{{ setting('max_active_sessions', 0) }}">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('Update')
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,41 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-1">
|
||||
@lang('Google reCAPTCHA')
|
||||
</h5>
|
||||
|
||||
<small class="text-muted d-block mb-4">
|
||||
@lang('Enable/Disable Google reCAPTCHA during the registration.')
|
||||
</small>
|
||||
|
||||
@if (! (config('captcha.secret') && config('captcha.sitekey')))
|
||||
<div class="alert alert-info">
|
||||
@lang('To utilize Google reCAPTCHA, please get your') <code>@lang('Site Key')</code>
|
||||
@lang('and') <code>@lang('Secret Key')</code>
|
||||
@lang('from')
|
||||
<a href="https://www.google.com/recaptcha/intro/index.html" target="_blank">
|
||||
<strong>@lang('reCAPTCHA Website')</strong>
|
||||
</a>,
|
||||
@lang('and update your') <code>RECAPTCHA_SITEKEY</code> @lang('and')
|
||||
<code>RECAPTCHA_SECRETKEY</code> @lang('environment variables inside') <code>.env</code>
|
||||
@lang('file').
|
||||
</div>
|
||||
@else
|
||||
@if (setting('registration.captcha.enabled'))
|
||||
<form action="{{ route('settings.registration.captcha.disable') }}" method="POST" id="captcha-settings-form">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-danger">
|
||||
@lang('Disable')
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('settings.registration.captcha.enable') }}" method="POST" id="captcha-settings-form">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('Enable')
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,76 @@
|
||||
<div class="card">
|
||||
<h6 class="card-header">@lang('General')</h6>
|
||||
|
||||
<div class="card-body">
|
||||
<form action="{{ route('settings.auth.update') }}" method="POST" id="registration-settings-form">
|
||||
@csrf
|
||||
|
||||
<div class="form-group mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="reg_enabled">
|
||||
|
||||
<input
|
||||
type="checkbox" name="reg_enabled"
|
||||
id="switch-reg-enabled"
|
||||
class="switch" value="1"
|
||||
{{ setting('reg_enabled') ? 'checked' : '' }}>
|
||||
|
||||
<label for="switch-reg-enabled"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Allow Registration')</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="tos">
|
||||
<input
|
||||
value="1"
|
||||
type="checkbox" name="tos"
|
||||
id="switch-tos"
|
||||
class="switch"
|
||||
{{ setting('tos') ? 'checked' : '' }}>
|
||||
<label for="switch-tos"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Terms & Conditions')</label>
|
||||
<small class="pt-0 text-muted">
|
||||
@lang('The user has to confirm that he agrees with terms and conditions in order to create an account.')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="reg_email_confirmation">
|
||||
<input
|
||||
value="1"
|
||||
type="checkbox" name="reg_email_confirmation"
|
||||
id="switch-reg-email-confirm"
|
||||
class="switch"
|
||||
{{ setting('reg_email_confirmation') ? 'checked' : '' }}>
|
||||
<label for="switch-reg-email-confirm"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">
|
||||
@lang('Email Confirmation')
|
||||
</label>
|
||||
<small class="text-muted">
|
||||
@lang('Require email confirmation from your newly registered users.')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary mt-3">
|
||||
@lang('Update')
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,59 @@
|
||||
<div class="card">
|
||||
<h6 class="card-header">
|
||||
@lang('Authentication Throttling')
|
||||
</h6>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('settings.auth.update') }}" id="auth-throttle-settings-form">
|
||||
@csrf
|
||||
|
||||
<div class="form-group mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="switch">
|
||||
<input type="hidden" value="0" name="throttle_enabled">
|
||||
<input type="checkbox"
|
||||
class="switch"
|
||||
id="switch-throttle"
|
||||
name="throttle_enabled"
|
||||
value="1"
|
||||
{{ setting('throttle_enabled') ? 'checked' : '' }}>
|
||||
<label for="switch-throttle"></label>
|
||||
</div>
|
||||
<div class="ml-3 d-flex flex-column">
|
||||
<label class="mb-0">@lang('Throttle Authentication')</label>
|
||||
<small class="text-muted">
|
||||
@lang('Should the system throttle authentication attempts?')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<label for="throttle_attempts">
|
||||
@lang('Maximum Number of Attempts') <br>
|
||||
<small class="text-muted">
|
||||
@lang('Maximum number of incorrect login attempts before lockout.')
|
||||
</small>
|
||||
</label>
|
||||
<input type="text" name="throttle_attempts" class="form-control input-solid"
|
||||
value="{{ setting('throttle_attempts', 10) }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group my-4">
|
||||
<label for="throttle_lockout_time">
|
||||
@lang('Lockout Time') <br>
|
||||
<small class="text-muted">
|
||||
@lang('Number of minutes to lock the user out for after specified maximum number of incorrect login attempts.')
|
||||
</small>
|
||||
</label>
|
||||
|
||||
<input type="text" name="throttle_lockout_time" class="form-control input-solid"
|
||||
value="{{ setting('throttle_lockout_time', 1) }}">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('Update')
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,31 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-1">@lang('Two-Factor Authentication')</h5>
|
||||
|
||||
<small class="text-muted d-block mb-4">
|
||||
@lang('Enable/Disable Two-Factor Authentication for the application.')
|
||||
</small>
|
||||
|
||||
@if (setting('2fa.enabled'))
|
||||
<form method="POST" action="{{ route('settings.auth.2fa.disable') }}" id="auth-2fa-settings-form">
|
||||
@csrf
|
||||
<button type="submit"
|
||||
class="btn btn-danger"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Disabling...')">
|
||||
@lang('Disable')
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form method="POST" action="{{ route('settings.auth.2fa.enable') }}" id="auth-2fa-settings-form">
|
||||
@csrf
|
||||
<button type="submit"
|
||||
class="btn btn-primary"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Enabling...')">
|
||||
@lang('Enable')
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,72 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Add User'))
|
||||
@section('page-heading', __('Create New User'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.index') }}">@lang('Users')</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Create')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<form action="{{ route('users.store') }}" method="POST" enctype="multipart/form-data" id="user-form">
|
||||
@csrf
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h5 class="card-title">
|
||||
@lang('User Details')
|
||||
</h5>
|
||||
<p class="text-muted font-weight-light">
|
||||
@lang('A general user profile information.')
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
@include('user.partials.details', ['edit' => false, 'profile' => false])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h5 class="card-title">
|
||||
@lang('Login Details')
|
||||
</h5>
|
||||
<p class="text-muted font-weight-light">
|
||||
@lang('Details used for authenticating with the application.')
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
@include('user.partials.auth', ['edit' => false])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('Create User')
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br>
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('assets/js/as/profile.js') }}"></script>
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\CreateUserRequest', '#user-form') !!}
|
||||
@stop
|
||||
@@ -0,0 +1,132 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Edit User'))
|
||||
@section('page-heading', $user->present()->nameOrEmail)
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.index') }}">@lang('Users')</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.show', $user->id) }}">
|
||||
{{ $user->present()->nameOrEmail }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Edit')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
@php
|
||||
$activeTab = session('tab') ?? 'details';
|
||||
@endphp
|
||||
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<ul class="nav nav-tabs" id="nav-tab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ $activeTab == 'details' ? 'active' : '' }}"
|
||||
id="details-tab"
|
||||
data-toggle="tab"
|
||||
href="#details"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('User Details')
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link"
|
||||
id="authentication-tab"
|
||||
data-toggle="tab"
|
||||
href="#login-details"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('Login Details')
|
||||
</a>
|
||||
</li>
|
||||
@if (setting('2fa.enabled'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ $activeTab == '2fa' ? 'active' : '' }}"
|
||||
id="authentication-tab"
|
||||
data-toggle="tab"
|
||||
href="#2fa"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('Two-Factor Authentication')
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
|
||||
<div class="tab-content mt-4" id="nav-tabContent">
|
||||
<div class="tab-pane {{ $activeTab == 'details' ? 'show active' : '' }} fade px-2"
|
||||
id="details"
|
||||
role="tabpanel"
|
||||
aria-labelledby="nav-home-tab">
|
||||
<form action="{{ route('users.update.details', $user) }}" method="POST" id="details-form">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
@include('user.partials.details', ['profile' => false])
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade px-2"
|
||||
id="login-details"
|
||||
role="tabpanel"
|
||||
aria-labelledby="nav-profile-tab">
|
||||
<form action="{{ route('users.update.login-details', $user) }}"
|
||||
method="POST"
|
||||
id="login-details-form">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
@include('user.partials.auth')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@if (setting('2fa.enabled'))
|
||||
<div class="tab-pane {{ $activeTab == '2fa' ? 'show active' : '' }} fade px-2" id="2fa" role="tabpanel" aria-labelledby="nav-profile-tab">
|
||||
@include('user.partials.two-factor')
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{ route('user.update.avatar', $user->id) }}"
|
||||
method="POST"
|
||||
id="avatar-form"
|
||||
enctype="multipart/form-data">
|
||||
@csrf
|
||||
@include('user.partials.avatar', ['updateUrl' => route('user.update.avatar.external', $user->id)])
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('assets/js/as/btn.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/profile.js') }}"></script>
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateDetailsRequest', '#details-form') !!}
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateLoginDetailsRequest', '#login-details-form') !!}
|
||||
|
||||
@if (setting('2fa.enabled'))
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest', '#two-factor-form') !!}
|
||||
@endif
|
||||
@stop
|
||||
@@ -0,0 +1,102 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('Users'))
|
||||
@section('page-heading', __('Users'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Users')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
|
||||
<form action="" method="GET" id="users-form" class="pb-2 mb-3 border-bottom-light">
|
||||
<div class="row my-3 flex-md-row flex-column-reverse">
|
||||
<div class="col-md-4 mt-md-0 mt-2">
|
||||
<div class="input-group custom-search-form">
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
name="search"
|
||||
value="{{ Request::get('search') }}"
|
||||
placeholder="@lang('Search for users...')">
|
||||
|
||||
<span class="input-group-append">
|
||||
@if (Request::has('search') && Request::get('search') != '')
|
||||
<a href="{{ route('users.index') }}"
|
||||
class="btn btn-light d-flex align-items-center text-muted"
|
||||
role="button">
|
||||
<i class="fas fa-times"></i>
|
||||
</a>
|
||||
@endif
|
||||
<button class="btn btn-light" type="submit" id="search-users-btn">
|
||||
<i class="fas fa-search text-muted"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2 mt-2 mt-md-0">
|
||||
<select name="status" id="status" class="form-control input-solid">
|
||||
@foreach($statuses as $key => $value)
|
||||
<option value="{{ $key }}" {{ Request::get('status') == $key ? 'selected' : '' }}>
|
||||
{{ $value }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<a href="{{ route('users.create') }}" class="btn btn-primary btn-rounded float-right">
|
||||
<i class="fas fa-plus mr-2"></i>
|
||||
@lang('Add User')
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="table-responsive" id="users-table-wrapper">
|
||||
<table class="table table-borderless table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th class="min-width-80">@lang('Username')</th>
|
||||
<th class="min-width-150">@lang('Full Name')</th>
|
||||
<th class="min-width-100">@lang('Email')</th>
|
||||
<th class="min-width-80">@lang('Registration Date')</th>
|
||||
<th class="min-width-80">@lang('Status')</th>
|
||||
<th class="text-center min-width-150">@lang('Action')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (count($users))
|
||||
@foreach ($users as $user)
|
||||
@include('user.partials.row')
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="7"><em>@lang('No records found.')</em></td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{!! $users->render() !!}
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script>
|
||||
$("#status").change(function () {
|
||||
$("#users-form").submit();
|
||||
});
|
||||
</script>
|
||||
@stop
|
||||
@@ -0,0 +1,44 @@
|
||||
<div class="form-group">
|
||||
<label for="email">@lang('Email')</label>
|
||||
<input type="email"
|
||||
class="form-control input-solid"
|
||||
id="email"
|
||||
name="email"
|
||||
placeholder="@lang('Email')"
|
||||
value="{{ $edit ? $user->email : '' }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="username">@lang('Username')</label>
|
||||
<input type="text"
|
||||
class="form-control input-solid"
|
||||
id="username"
|
||||
placeholder="(@lang('optional'))"
|
||||
name="username"
|
||||
value="{{ $edit ? $user->username : '' }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password">{{ $edit ? __("New Password") : __('Password') }}</label>
|
||||
<input type="password"
|
||||
class="form-control input-solid"
|
||||
id="password"
|
||||
name="password"
|
||||
@if ($edit) placeholder="@lang("Leave field blank if you don't want to change it")" @endif>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password_confirmation">{{ $edit ? __("Confirm New Password") : __('Confirm Password') }}</label>
|
||||
<input type="password"
|
||||
class="form-control input-solid"
|
||||
id="password_confirmation"
|
||||
name="password_confirmation"
|
||||
@if ($edit) placeholder="@lang("Leave field blank if you don't want to change it")" @endif>
|
||||
</div>
|
||||
|
||||
@if ($edit)
|
||||
<button type="submit" class="btn btn-primary mt-2" id="update-login-details-btn">
|
||||
<i class="fa fa-refresh"></i>
|
||||
@lang('Update Details')
|
||||
</button>
|
||||
@endif
|
||||
@@ -0,0 +1,92 @@
|
||||
<div class="avatar-wrapper">
|
||||
<div class="spinner">
|
||||
<div class="spinner-dot"></div>
|
||||
<div class="spinner-dot"></div>
|
||||
<div class="spinner-dot"></div>
|
||||
</div>
|
||||
<div id="avatar"></div>
|
||||
<div class="text-center">
|
||||
<div class="avatar-preview">
|
||||
<img class="avatar rounded-circle img-thumbnail img-responsive mt-5 mb-4"
|
||||
width="150"
|
||||
src="{{ $edit ? $user->present()->avatar : url('assets/img/profile.png') }}">
|
||||
|
||||
<h5 class="text-muted">{{ $user->present()->nameOrEmail }}</h5>
|
||||
</div>
|
||||
|
||||
<div id="change-picture"
|
||||
class="btn btn-outline-secondary btn-block mt-5"
|
||||
data-toggle="modal"
|
||||
data-target="#choose-modal">
|
||||
<i class="fa fa-camera"></i>
|
||||
@lang('Change Photo')
|
||||
</div>
|
||||
|
||||
<div class="row avatar-controls d-none">
|
||||
<div class="col-md-6">
|
||||
<div id="cancel-upload" class="btn btn-block btn-outline-secondary text-center">
|
||||
<i class="fa fa-times"></i> @lang('Cancel')
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<button type="submit" id="save-photo" class="btn btn-success btn-block text-center">
|
||||
<i class="fa fa-check"></i> @lang('Save')
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="choose-modal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-md-4 avatar-source" id="no-photo"
|
||||
data-url="{{ $updateUrl }}">
|
||||
<img src="{{ url('assets/img/profile.png') }}" class="rounded-circle img-thumbnail img-responsive">
|
||||
<p class="mt-3">@lang('No Photo')</p>
|
||||
</div>
|
||||
<div class="col-md-4 avatar-source">
|
||||
<div class="btn btn-light btn-upload">
|
||||
<i class="fa fa-upload"></i>
|
||||
<input type="file" name="avatar" id="avatar-upload">
|
||||
</div>
|
||||
<p class="mt-3">@lang('Upload Photo')</p>
|
||||
</div>
|
||||
@if ($edit)
|
||||
<div class="col-md-4 avatar-source source-external"
|
||||
data-url="{{ $updateUrl }}">
|
||||
<img src="{{ $user->gravatar() }}" class="rounded-circle img-thumbnail img-responsive">
|
||||
<p class="mt-3">@lang('Gravatar')</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@if ($edit && count($socialLogins))
|
||||
@foreach ($socialLogins->chunk(3) as $logins)
|
||||
<br>
|
||||
<div class="row">
|
||||
@foreach($logins as $login)
|
||||
<div class="col-md-4 avatar-source source-external"
|
||||
data-url="{{ $updateUrl }}">
|
||||
<img src="{{ $login->avatar }}"
|
||||
class="rounded-circle img-thumbnail img-responsive"
|
||||
style="width: 120px;">
|
||||
<p>{{ ucfirst($login->provider) }}</p>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-none">
|
||||
<input type="hidden" name="points[x1]" id="points_x1">
|
||||
<input type="hidden" name="points[y1]" id="points_y1">
|
||||
<input type="hidden" name="points[x2]" id="points_x2">
|
||||
<input type="hidden" name="points[y2]" id="points_y2">
|
||||
</div>
|
||||
@@ -0,0 +1,76 @@
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="role_id">@lang('Role')</label>
|
||||
<select name="role_id" id="role_id" class="form-control input-solid" {{ $profile ? 'disabled' : '' }}>
|
||||
@foreach($roles as $roleId => $roleName)
|
||||
<option value="{{ $roleId }}" {{ ($edit && $user->role->id == $roleId) ? 'selected' : '' }}>
|
||||
{{ $roleName }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="status">@lang('Status')</label>
|
||||
<select name="status" id="status" class="form-control input-solid" {{ $profile ? 'disabled' : '' }}>
|
||||
@foreach($statuses as $statusId => $statusName)
|
||||
<option value="{{ $statusId }}" {{ ($edit && $user->status->value == $statusId) ? 'selected' : '' }}>
|
||||
{{ $statusName }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="first_name">@lang('First Name')</label>
|
||||
<input type="text" class="form-control input-solid" id="first_name"
|
||||
name="first_name" placeholder="@lang('First Name')" value="{{ $edit ? $user->first_name : '' }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="last_name">@lang('Last Name')</label>
|
||||
<input type="text" class="form-control input-solid" id="last_name"
|
||||
name="last_name" placeholder="@lang('Last Name')" value="{{ $edit ? $user->last_name : '' }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="birthday">@lang('Date of Birth')</label>
|
||||
<div class="form-group">
|
||||
<input type="text"
|
||||
name="birthday"
|
||||
id='birthday'
|
||||
value="{{ $edit && $user->birthday ? $user->present()->birthday : '' }}"
|
||||
class="form-control input-solid" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="phone">@lang('Phone')</label>
|
||||
<input type="text" class="form-control input-solid" id="phone"
|
||||
name="phone" placeholder="@lang('Phone')" value="{{ $edit ? $user->phone : '' }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="address">@lang('Address')</label>
|
||||
<input type="text" class="form-control input-solid" id="address"
|
||||
name="address" placeholder="@lang('Address')" value="{{ $edit ? $user->address : '' }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="country_id">@lang('Country')</label>
|
||||
<select name="country_id" id="country_id" class="form-control input-solid">
|
||||
@foreach($countries as $countryId => $countryName)
|
||||
<option value="{{ $countryId }}" {{ ($edit && $user->country_id == $countryId) ? 'selected' : '' }}>
|
||||
{{ $countryName }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($edit)
|
||||
<div class="col-md-12 mt-2">
|
||||
<button type="submit" class="btn btn-primary" id="update-details-btn">
|
||||
<i class="fa fa-refresh"></i>
|
||||
@lang('Update Details')
|
||||
</button>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@@ -0,0 +1,73 @@
|
||||
<tr>
|
||||
<td style="width: 40px;">
|
||||
<a href="{{ route('users.show', $user) }}">
|
||||
<img
|
||||
class="rounded-circle img-responsive"
|
||||
width="40"
|
||||
src="{{ $user->present()->avatar }}"
|
||||
alt="{{ $user->present()->name }}">
|
||||
</a>
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<a href="{{ route('users.show', $user) }}">
|
||||
{{ $user->username ?: __('N/A') }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="align-middle">{{ $user->first_name . ' ' . $user->last_name }}</td>
|
||||
<td class="align-middle">{{ $user->email }}</td>
|
||||
<td class="align-middle">{{ $user->created_at->format(config('app.date_format')) }}</td>
|
||||
<td class="align-middle">
|
||||
<span class="badge badge-lg badge-{{ $user->present()->labelClass }}">
|
||||
{{ trans("app.status.{$user->status->value}") }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-center align-middle">
|
||||
<div class="dropdown show d-inline-block">
|
||||
<a class="btn btn-icon"
|
||||
href="#" role="button" id="dropdownMenuLink"
|
||||
data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fas fa-ellipsis-h"></i>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuLink">
|
||||
@if (config('session.driver') == 'database')
|
||||
<a href="{{ route('user.sessions', $user) }}" class="dropdown-item text-gray-500">
|
||||
<i class="fas fa-list mr-2"></i>
|
||||
@lang('User Sessions')
|
||||
</a>
|
||||
@endif
|
||||
<a href="{{ route('users.show', $user) }}" class="dropdown-item text-gray-500">
|
||||
<i class="fas fa-eye mr-2"></i>
|
||||
@lang('View User')
|
||||
</a>
|
||||
|
||||
@canBeImpersonated($user)
|
||||
<a href="{{ route('impersonate', $user) }}" class="dropdown-item text-gray-500 impersonate">
|
||||
<i class="fas fa-user-secret mr-2"></i>
|
||||
@lang('Impersonate')
|
||||
</a>
|
||||
@endCanBeImpersonated
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a href="{{ route('users.edit', $user) }}"
|
||||
class="btn btn-icon edit"
|
||||
title="@lang('Edit User')"
|
||||
data-toggle="tooltip" data-placement="top">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
|
||||
<a href="{{ route('users.destroy', $user) }}"
|
||||
class="btn btn-icon"
|
||||
title="@lang('Delete User')"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
data-method="DELETE"
|
||||
data-confirm-title="@lang('Please Confirm')"
|
||||
data-confirm-text="@lang('Are you sure that you want to delete this user?')"
|
||||
data-confirm-delete="@lang('Yes, delete him!')">
|
||||
<i class="fas fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -0,0 +1,62 @@
|
||||
@php
|
||||
$route = 'enable';
|
||||
$needsVerification = session('tab') == '2fa' && $user->needsTwoFactorVerification();
|
||||
|
||||
if ($needsVerification) {
|
||||
$route = 'verify';
|
||||
} elseif ($user->twoFactorEnabled()) {
|
||||
$route = 'disable';
|
||||
}
|
||||
@endphp
|
||||
|
||||
<form action="{{ route("two-factor.{$route}") }}" method="POST" id="two-factor-form">
|
||||
@csrf
|
||||
<input type="hidden" name="user" value="{{ $user->id }}">
|
||||
@if (!$user->twoFactorEnabled() && !$needsVerification)
|
||||
<button type="submit"
|
||||
class="btn btn-primary"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Enabling...')">
|
||||
@lang('Enable')
|
||||
</button>
|
||||
@else
|
||||
@if ($user->twoFactorEnabled())
|
||||
<button type="submit"
|
||||
class="btn btn-danger mt-2"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Disabling...')">
|
||||
<i class="fa fa-close"></i>
|
||||
@lang('Disable')
|
||||
</button>
|
||||
@else
|
||||
<h3>@lang("Please finish configuring Two-Factor authentication below.")</h3>
|
||||
<div class="my-3 font-medium text-sm font-weight-bold">
|
||||
@lang("When two factor authentication is enabled, you will be prompted for a secure, random token during authentication.")
|
||||
@lang("You may retrieve this token from your phone's Authenticator application.")
|
||||
</div>
|
||||
|
||||
<div class="my-3 font-medium text-sm">
|
||||
@lang("To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.")
|
||||
</div>
|
||||
|
||||
<div class="my-5 d-flex align-items-center justify-content-center w-100">
|
||||
{!! $user->twoFactorQrCodeSvg() !!}
|
||||
</div>
|
||||
|
||||
<input type="text"
|
||||
name="code"
|
||||
id="code"
|
||||
class="form-control input-solid mb-4"
|
||||
placeholder="@lang('Code')"
|
||||
value="{{ old('code') }}">
|
||||
|
||||
<button type="submit"
|
||||
class="btn btn-primary mr-2"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Confirming...')">
|
||||
<i class="fa fa-close"></i>
|
||||
@lang('Confirm')
|
||||
</button>
|
||||
@endif
|
||||
@endif
|
||||
</form>
|
||||
@@ -0,0 +1,128 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('My Profile'))
|
||||
@section('page-heading', __('My Profile'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('My Profile')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
@php
|
||||
$activeTab = session('tab') ?? 'details';
|
||||
@endphp
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<ul class="nav nav-tabs" id="nav-tab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ $activeTab == 'details' ? 'active' : '' }}"
|
||||
id="details-tab"
|
||||
data-toggle="tab"
|
||||
href="#details"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('User Details')
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link"
|
||||
id="authentication-tab"
|
||||
data-toggle="tab"
|
||||
href="#login-details"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('Login Details')
|
||||
</a>
|
||||
</li>
|
||||
@if (setting('2fa.enabled'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ $activeTab == '2fa' ? 'active' : '' }}"
|
||||
id="authentication-tab"
|
||||
data-toggle="tab"
|
||||
href="#2fa"
|
||||
role="tab"
|
||||
aria-controls="home"
|
||||
aria-selected="true">
|
||||
@lang('Two-Factor Authentication')
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
|
||||
<div class="tab-content mt-4" id="nav-tabContent">
|
||||
<div class="tab-pane {{ $activeTab == 'details' ? 'show active' : '' }} fade px-2"
|
||||
id="details"
|
||||
role="tabpanel"
|
||||
aria-labelledby="nav-home-tab">
|
||||
<form action="{{ route('profile.update.details') }}" method="POST" id="details-form">
|
||||
@method('PUT')
|
||||
@csrf
|
||||
@include('user.partials.details', ['profile' => true])
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade px-2"
|
||||
id="login-details"
|
||||
role="tabpanel"
|
||||
aria-labelledby="nav-profile-tab">
|
||||
<form action="{{ route('profile.update.login-details') }}"
|
||||
method="POST"
|
||||
id="login-details-form">
|
||||
@method('PUT')
|
||||
@csrf
|
||||
@include('user.partials.auth')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@if (setting('2fa.enabled'))
|
||||
<div class="tab-pane {{ $activeTab == '2fa' ? 'show active' : '' }} fade px-2"
|
||||
id="2fa"
|
||||
role="tabpanel"
|
||||
aria-labelledby="nav-profile-tab"
|
||||
>
|
||||
@include('user.partials.two-factor')
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{ route("profile.update.avatar") }}"
|
||||
method="POST"
|
||||
id="avatar-form"
|
||||
enctype="multipart/form-data">
|
||||
@csrf
|
||||
@include('user.partials.avatar', ['updateUrl' => route('profile.update.avatar-external')])
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('assets/js/as/btn.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/profile.js') }}"></script>
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateDetailsRequest', '#details-form') !!}
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateProfileLoginDetailsRequest', '#login-details-form') !!}
|
||||
|
||||
@if (setting('2fa.enabled'))
|
||||
{!! JsValidator::formRequest('Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest', '#two-factor-form') !!}
|
||||
@endif
|
||||
@stop
|
||||
@@ -0,0 +1,80 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', $user->present()->nameOrEmail . ' - ' . __('Active Sessions'))
|
||||
|
||||
@section('page-heading')
|
||||
@lang('Sessions') ({{ $user->present()->nameOrEmail }})
|
||||
@stop
|
||||
|
||||
@section('breadcrumbs')
|
||||
@if (isset($adminView))
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.index') }}">@lang('Users')</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.show', $user->id) }}">
|
||||
{{ $user->present()->nameOrEmail }}
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Sessions')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-borderless table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>@lang('IP Address')</th>
|
||||
<th>@lang('Device')</th>
|
||||
<th>@lang('Browser')</th>
|
||||
<th>@lang('Last Activity')</th>
|
||||
<th class="text-center">@lang('Action')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (count($sessions))
|
||||
@foreach ($sessions as $session)
|
||||
<tr>
|
||||
<td>{{ $session->ip_address }}</td>
|
||||
<td>
|
||||
{{ $session->device ?: __('Unknown') }} ({{ $session->platform ?: __('Unknown') }})
|
||||
</td>
|
||||
<td>{{ $session->browser ?: __('Unknown') }}</td>
|
||||
<td>{{ $session->last_activity->format(config('app.date_time_format')) }}</td>
|
||||
<td class="text-center">
|
||||
<a href="{{ isset($profile) ? route('profile.sessions.invalidate', $session->id) : route('user.sessions.invalidate', [$user->id, $session->id]) }}"
|
||||
class="btn btn-icon"
|
||||
title="@lang('Invalidate Session')"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
data-method="DELETE"
|
||||
data-confirm-title="@lang('Please Confirm')"
|
||||
data-confirm-text="@lang('Are you sure that you want to invalidate this session?')"
|
||||
data-confirm-delete="@lang('Yes, proceed!')">
|
||||
<i class="fas fa-times"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="6"><em>@lang('No records found.')</em></td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
@@ -0,0 +1,73 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', __('My Profile'))
|
||||
@section('page-heading', __('My Profile'))
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
@lang('My Profile')
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
@lang('Two-Factor Phone Verification')
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
@include('partials.messages')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 m-auto">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title card-title-bold">
|
||||
@lang('Phone Verification')
|
||||
</h5>
|
||||
|
||||
<p>
|
||||
@lang('We have sent you a verification token via SMS. Please provide the token
|
||||
below to verify your phone number.')
|
||||
</p>
|
||||
|
||||
<form action="{{ route('two-factor.verify') }}" method="POST" id="two-factor-form">
|
||||
@csrf
|
||||
@if ($user)
|
||||
<input type="hidden" name="user" value="{{ $user }}">
|
||||
@endif
|
||||
<div class="form-group mt-4">
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
id="token"
|
||||
name="token"
|
||||
placeholder="@lang('Token')">
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
<button type="submit"
|
||||
class="btn btn-primary"
|
||||
data-toggle="loader"
|
||||
data-loading-text="@lang('Verifying...')">
|
||||
@lang('Verify')
|
||||
</button>
|
||||
<a href="javascript:;"
|
||||
class="btn d-none"
|
||||
id="resend-token"
|
||||
data-loading-text="@lang('Sending...')">
|
||||
@lang('Resend Token')
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('scripts')
|
||||
<script>
|
||||
var user = {{ isset($user) ? $user : 'null' }};
|
||||
</script>
|
||||
<script src="{{ asset('assets/js/as/btn.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/as/two-factor.js') }}"></script>
|
||||
@stop
|
||||
@@ -0,0 +1,90 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', $user->present()->nameOrEmail)
|
||||
@section('page-heading', $user->present()->nameOrEmail)
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('users.index') }}">@lang('Users')</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">
|
||||
{{ $user->present()->nameOrEmail }}
|
||||
</li>
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-xl-4 @if (! isset($activities)) mx-auto @endif">
|
||||
<div class="card">
|
||||
<h6 class="card-header d-flex align-items-center justify-content-between">
|
||||
@lang('Details')
|
||||
|
||||
<small>
|
||||
@canBeImpersonated($user)
|
||||
<a href="{{ route('impersonate', $user) }}"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
title="@lang('Impersonate User')">
|
||||
@lang('Impersonate')
|
||||
</a>
|
||||
<span class="text-muted">|</span>
|
||||
@endCanBeImpersonated
|
||||
|
||||
<a href="{{ route('users.edit', $user) }}"
|
||||
class="edit"
|
||||
data-toggle="tooltip"
|
||||
data-placement="top"
|
||||
title="@lang('Edit User')">
|
||||
@lang('Edit')
|
||||
</a>
|
||||
</small>
|
||||
</h6>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center flex-column pt-3">
|
||||
<div>
|
||||
<img class="rounded-circle img-thumbnail img-responsive mb-4"
|
||||
width="130"
|
||||
height="130" src="{{ $user->present()->avatar }}">
|
||||
</div>
|
||||
|
||||
@if ($name = $user->present()->name)
|
||||
<h5>{{ $user->present()->name }}</h5>
|
||||
@endif
|
||||
|
||||
<a href="mailto:{{ $user->email }}" class="text-muted font-weight-light mb-2">
|
||||
{{ $user->email }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="list-group list-group-flush mt-3">
|
||||
@if ($user->phone)
|
||||
<li class="list-group-item">
|
||||
<strong>@lang('Phone'):</strong>
|
||||
<a href="telto:{{ $user->phone }}">{{ $user->phone }}</a>
|
||||
</li>
|
||||
@endif
|
||||
<li class="list-group-item">
|
||||
<strong>@lang('Birthday'):</strong>
|
||||
{{ $user->present()->birthday }}
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<strong>@lang('Address'):</strong>
|
||||
{{ $user->present()->fullAddress }}
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<strong>@lang('Last Logged In'):</strong>
|
||||
{{ $user->present()->lastLogin }}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (isset($activities))
|
||||
<div class="col-lg-7 col-xl-8">
|
||||
@include("user-activity::recent-activity", ['activities' => $activities])
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@stop
|
||||
Vendored
@@ -0,0 +1,54 @@
|
||||
<script>
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
$("<?php echo $validator['selector']; ?>").validate({
|
||||
errorElement: 'span',
|
||||
errorClass: 'invalid-feedback',
|
||||
|
||||
errorPlacement: function(error, element) {
|
||||
if (element.parent('.input-group').length ||
|
||||
element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
|
||||
error.insertAfter(element.parent());
|
||||
// else just place the validation message immediately after the input
|
||||
} else {
|
||||
error.insertAfter(element);
|
||||
}
|
||||
},
|
||||
|
||||
highlight: function(element) {
|
||||
$(element).closest('.form-group input').removeClass('is-valid').addClass('is-invalid');
|
||||
},
|
||||
|
||||
<?php if (isset($validator['ignore']) && is_string($validator['ignore'])) : ?>
|
||||
ignore: "<?php echo $validator['ignore']; ?>",
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
// Uncomment this to mark as validated non required fields
|
||||
unhighlight: function(element) {
|
||||
$(element).closest('.form-group input').removeClass('is-invalid');
|
||||
},
|
||||
|
||||
success: function(element) {
|
||||
$(element).closest('.form-group input').removeClass('is-invalid').addClass('is-valid');
|
||||
},
|
||||
|
||||
focusInvalid: false, // do not focus the last invalid input
|
||||
<?php if (Config::get('jsvalidation.focus_on_error')) : ?>
|
||||
invalidHandler: function(form, validator) {
|
||||
|
||||
if (!validator.numberOfInvalids())
|
||||
return;
|
||||
|
||||
$('html, body').animate({
|
||||
scrollTop: $(validator.errorList[0].element).offset().top
|
||||
}, <?php echo Config::get('jsvalidation.duration_animate') ?>);
|
||||
$(validator.errorList[0].element).focus();
|
||||
|
||||
},
|
||||
<?php endif; ?>
|
||||
|
||||
rules: <?php echo json_encode($validator['rules']); ?>
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,19 @@
|
||||
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $url }}" class="button button-{{ $color ?? 'brand' }}" target="_blank">{{ $slot }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,11 @@
|
||||
<tr>
|
||||
<td>
|
||||
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell" align="center">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -0,0 +1,7 @@
|
||||
<tr>
|
||||
<td class="header">
|
||||
<a href="{{ $url }}">
|
||||
{{ $slot }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user