First complete upload CasaDoc

This commit is contained in:
2024-09-18 10:42:19 +02:00
commit 2ab3e52df3
3042 changed files with 407823 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
require('./bootstrap');
+28
View File
@@ -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
// });
+243
View File
@@ -0,0 +1,243 @@
{
"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.",
"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",
"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 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."
}
+24
View File
@@ -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',
]
];
+19
View File
@@ -0,0 +1,19 @@
<?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.',
];
+19
View File
@@ -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' => '&laquo; zurück',
'next' => 'weiter &raquo;',
];
+22
View File
@@ -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.',
];
+115
View File
@@ -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' => [
//
],
];
+24
View File
@@ -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',
]
];
+19
View File
@@ -0,0 +1,19 @@
<?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.',
];
+19
View File
@@ -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' => '&laquo; Previous',
'next' => 'Next &raquo;',
];
+22
View File
@@ -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' => 'Passwords must be at least eight characters and match the confirmation.',
'reset' => 'Your password has been reset!',
'sent' => 'We have e-mailed your password reset link!',
'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that e-mail address.",
];
+110
View File
@@ -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' => [],
];
+243
View File
@@ -0,0 +1,243 @@
{
"# of users with this role": "broj korisnika sa ovom ulogom",
"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 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.",
"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.",
"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"
}
+24
View File
@@ -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',
]
];
+19
View File
@@ -0,0 +1,19 @@
<?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.',
];
+19
View File
@@ -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' => '&laquo; Nazad',
'next' => 'Napred &raquo;',
];
+22
View File
@@ -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.',
];
+119
View File
@@ -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'
],
];
+47
View File
@@ -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;
+51
View File
@@ -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;
}
}
}
+16
View File
@@ -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;
}
+78
View File
@@ -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%)
}
}
+21
View File
@@ -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;
}
}
+160
View File
@@ -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);
+17
View File
@@ -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;
}
+9
View File
@@ -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;
}
+17
View File
@@ -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;
}
+13
View File
@@ -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;
}
}
}
+74
View File
@@ -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;
}
}
}
+211
View File
@@ -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;
}
+158
View File
@@ -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;
}
}
+8
View File
@@ -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; }
}
+56
View File
@@ -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;
}
+88
View File
@@ -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">
<img src="{{ url('assets/img/casadoclogo.png') }}" alt="{{ setting('app_name') }}" height="100">
</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')
{!! HTML::script('assets/js/as/login.js') !!}
{!! 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">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</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">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</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
+124
View File
@@ -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">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</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">&times;</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
+44
View File
@@ -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">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</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="token"
id="token"
class="form-control input-solid"
placeholder="@lang('Authy 2FA Token')">
</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
+24
View File
@@ -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>
+30
View File
@@ -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
+35
View File
@@ -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,51 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected'
]])
@include('partials.messages')
{!! Form::open(['route' => 'install.installation']) !!}
<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::close() !!}
@stop
+27
View File
@@ -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,30 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected done',
'installation' => 'selected'
]])
{!! Form::open(['route' => 'install.install']) !!}
<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::close() !!}
@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
+20
View File
@@ -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
+40
View File
@@ -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>
+49
View File
@@ -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>
+30
View File
@@ -0,0 +1,30 @@
<!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>
{!! HTML::style('assets/css/app.css') !!}
{!! HTML::style('assets/css/fontawesome-all.min.css') !!}
@yield('header-scripts')
@hook('auth:styles')
</head>
<body class="auth">
<div class="container">
@yield('content')
</div>
{!! HTML::script('assets/js/vendor.js') !!}
{!! HTML::script('assets/js/as/app.js') !!}
{!! HTML::script('assets/js/as/btn.js') !!}
@yield('scripts')
@hook('auth:scripts')
</body>
</html>
+42
View File
@@ -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>
{!! HTML::style('assets/css/vendor.css') !!}
{!! HTML::style('assets/css/app.css') !!}
{!! HTML::style('assets/css/install.css') !!}
@yield('styles')
</head>
<body style="background-color: #fff;">
<div class="container-fluid">
<div class="row">
<div class="col-md-6 offset-3 logo-wrapper">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="Vanguard" 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,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
+101
View File
@@ -0,0 +1,101 @@
<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('/') }}">
<img src="{{ url('assets/img/vanguard-logo.png') }}" class="logo-lg" height="35" alt="{{ setting('app_name') }}">
<img src="{{ url('assets/img/vanguard-logo-no-text.png') }}" class="logo-sm" height="35" alt="{{ setting('app_name') }}">
</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')
<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,82 @@
@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::open(['route' => ['permissions.update', $permission], 'method' => 'PUT', 'id' => 'permission-form']) !!}
@else
{!! Form::open(['route' => 'permissions.store', 'id' => 'permission-form']) !!}
@endif
<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>
@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
+111
View File
@@ -0,0 +1,111 @@
@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::open(['route' => 'permissions.save', 'class' => 'mb-4']) !!}
<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">
{!!
Form::checkbox(
"roles[{$role->id}][]",
$permission->id,
$role->hasPermission($permission->name),
[
'class' => 'custom-control-input',
'id' => "cb-{$role->id}-{$permission->id}"
]
)
!!}
<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::close() !!}
@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,12 @@
<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>
{!! HTML::script('assets/js/chart.min.js') !!}
{!! HTML::script('assets/js/as/dashboard-admin.js') !!}
@@ -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>
+78
View File
@@ -0,0 +1,78 @@
@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::open(['route' => ['roles.update', $role], 'method' => 'PUT', 'id' => 'role-form']) !!}
@else
{!! Form::open(['route' => 'roles.store', 'id' => 'role-form']) !!}
@endif
<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>
@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
+76
View File
@@ -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
+70
View File
@@ -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,40 @@
@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::open(['route' => 'settings.general.update', 'id' => 'general-settings-form']) !!}
<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::close() }}
@stop
@@ -0,0 +1,62 @@
@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::open(['route' => 'settings.notifications.update', 'id' => 'notification-settings-form']) !!}
<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::close() !!}
</div>
</div>
</div>
</div>
@stop
@@ -0,0 +1,58 @@
<div class="card">
<h6 class="card-header">
@lang('General')
</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'auth-general-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="remember_me">
{!! Form::checkbox('remember_me', 1, setting('remember_me'), ['class' => 'switch', 'id' => 'switch-remember-me']) !!}
<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">
{!! Form::checkbox('forgot_password', 1, setting('forgot_password'), ['class' => 'switch', 'id' => 'switch-forgot-pass']) !!}
<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>
<button type="submit" class="btn btn-primary">
@lang('Update')
</button>
{!! Form::close() !!}
</div>
</div>
@@ -0,0 +1,39 @@
<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::open(['route' => 'settings.registration.captcha.disable', 'id' => 'captcha-settings-form']) !!}
<button type="submit" class="btn btn-danger">
@lang('Disable')
</button>
{!! Form::close() !!}
@else
{!! Form::open(['route' => 'settings.registration.captcha.enable', 'id' => 'captcha-settings-form']) !!}
<button type="submit" class="btn btn-primary">
@lang('Enable')
</button>
{!! Form::close() !!}
@endif
@endif
</div>
</div>
@@ -0,0 +1,66 @@
<div class="card">
<h6 class="card-header">@lang('General')</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'registration-settings-form']) !!}
<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">
{!! Form::checkbox('tos', 1, setting('tos'), ['class' => 'switch', 'id' => 'switch-tos']) !!}
<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 agree 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">
{!! Form::checkbox('reg_email_confirmation', 1, setting('reg_email_confirmation'), ['class' => 'switch', 'id' => 'switch-reg-email-confirm']) !!}
<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::close() !!}
</div>
</div>
@@ -0,0 +1,54 @@
<div class="card">
<h6 class="card-header">
@lang('Authentication Throttling')
</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'auth-throttle-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="throttle_enabled">
{!! Form::checkbox('throttle_enabled', 1, setting('throttle_enabled'), ['class' => 'switch', 'id' => 'switch-throttle']) !!}
<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::close() !!}
</div>
</div>
@@ -0,0 +1,38 @@
<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 (! config('services.authy.key'))
<div class="alert alert-info">
@lang('In order to enable Two-Factor Authentication you have to register and create new application on')
<a href="https://www.authy.com/" target="_blank"><strong>@lang('Authy website')</strong></a>,
@lang('and update your') <code>AUTHY_KEY</code>
@lang('environment variable inside') <code>.env</code> @lang('file').
</div>
@else
@if (setting('2fa.enabled'))
{!! Form::open(['route' => 'settings.auth.2fa.disable', 'id' => 'auth-2fa-settings-form']) !!}
<button type="submit"
class="btn btn-danger"
data-toggle="loader"
data-loading-text="@lang('Disabling...')">
@lang('Disable')
</button>
{!! Form::close() !!}
@else
{!! Form::open(['route' => 'settings.auth.2fa.enable', 'id' => 'auth-2fa-settings-form']) !!}
<button type="submit"
class="btn btn-primary"
data-toggle="loader"
data-loading-text="@lang('Enabling...')">
@lang('Enable')
</button>
{!! Form::close() !!}
@endif
@endif
</div>
</div>
+71
View File
@@ -0,0 +1,71 @@
@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::open(['route' => 'users.store', 'files' => true, 'id' => 'user-form']) !!}
<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::close() !!}
<br>
@stop
@section('scripts')
{!! HTML::script('assets/js/as/profile.js') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\CreateUserRequest', '#user-form') !!}
@stop
+134
View File
@@ -0,0 +1,134 @@
@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')
<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 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"
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 fade show active 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 fade px-2" id="2fa" role="tabpanel" aria-labelledby="nav-profile-tab">
<?php $route = Authy::isEnabled($user) ? 'disable' : 'enable'; ?>
<form action="{{ route("two-factor.{$route}") }}" method="POST" id="two-factor-form">
@csrf
<input type="hidden" name="user" value="{{ $user->id }}">
@include('user.partials.two-factor')
</form>
</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')
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/profile.js') !!}
{!! 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
+103
View File
@@ -0,0 +1,103 @@
@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">
{!!
Form::select(
'status',
$statuses,
Request::get('status'),
['id' => 'status', 'class' => 'form-control input-solid']
)
!!}
</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,60 @@
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="first_name">@lang('Role')</label>
{!! Form::select('role_id', $roles, $edit ? $user->role->id : '',
['class' => 'form-control input-solid', 'id' => 'role_id', $profile ? 'disabled' : '']) !!}
</div>
<div class="form-group">
<label for="status">@lang('Status')</label>
{!! Form::select('status', $statuses, $edit ? $user->status : '',
['class' => 'form-control input-solid', 'id' => 'status', $profile ? 'disabled' : '']) !!}
</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="address">@lang('Country')</label>
{!! Form::select('country_id', $countries, $edit ? $user->country_id : '', ['class' => 'form-control input-solid']) !!}
</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}") }}
</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,47 @@
@if (! Authy::isEnabled($user))
<div class="alert alert-info">
@lang('In order to enable Two-Factor Authentication, you must install')
<a target="_blank" href="https://www.authy.com/">Authy</a>
@lang('application on your phone').
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="country_code">@lang('Country Code')</label>
<input type="text"
class="form-control"
id="country_code"
placeholder="381"
name="country_code"
value="{{ $user->two_factor_country_code }}">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="phone_number">@lang('Cell Phone')</label>
<input type="text"
class="form-control"
id="phone_number"
placeholder="@lang('Phone without country code')"
name="phone_number"
value="{{ $user->two_factor_phone }}">
</div>
</div>
</div>
<button type="submit"
class="btn btn-primary"
data-toggle="loader"
data-loading-text="@lang('Enabling...')">
@lang('Enable')
</button>
@else
<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>
@endif
+125
View File
@@ -0,0 +1,125 @@
@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')
<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 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"
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 fade show active 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 fade px-2" id="2fa" role="tabpanel" aria-labelledby="nav-profile-tab">
<?php $route = Authy::isEnabled($user) ? 'disable' : 'enable'; ?>
<form action="{{ route("two-factor.{$route}") }}" method="POST" id="two-factor-form">
@csrf
@include('user.partials.two-factor')
</form>
</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')
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/profile.js') !!}
{!! 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
+80
View File
@@ -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,72 @@
@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::open(['route' => "two-factor.verify", 'id' => 'two-factor-form']) !!}
@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::close() !!}
</div>
</div>
</div>
</div>
@stop
@section('scripts')
<script>
var user = {{ isset($user) ? $user : 'null' }};
</script>
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/two-factor.js') !!}
@stop
+90
View File
@@ -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
View File
+54
View File
@@ -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>
+19
View File
@@ -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>
+11
View File
@@ -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>
+7
View File
@@ -0,0 +1,7 @@
<tr>
<td class="header">
<a href="{{ $url }}">
{{ $slot }}
</a>
</td>
</tr>
+54
View File
@@ -0,0 +1,54 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<style>
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
.footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
{{ $header ?? '' }}
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
</body>
</html>
+27
View File
@@ -0,0 +1,27 @@
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ config('app.name') }}" height="50">
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent

Some files were not shown because too many files have changed in this diff Show More