Added page to report user profiles
Sends notification with report to admin email set in env with SMTP server.
This commit is contained in:
parent
63d2892159
commit
404aa7549c
|
@ -11,6 +11,8 @@ use Illuminate\Support\Facades\Response;
|
|||
use JeroenDesloovere\VCard\VCard;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Mail\ReportSubmissionMail;
|
||||
|
||||
use Auth;
|
||||
use DB;
|
||||
|
@ -1160,6 +1162,20 @@ class UserController extends Controller
|
|||
}
|
||||
|
||||
|
||||
// Hanle reports
|
||||
function report(Request $request)
|
||||
{
|
||||
$formData = $request->all();
|
||||
|
||||
try {
|
||||
Mail::to(env('ADMIN_EMAIL'))->send(new ReportSubmissionMail($formData));
|
||||
|
||||
return redirect('report')->with('success', __('messages.report_success'));
|
||||
} catch (\Exception $e) {
|
||||
return redirect()->back()->with('error', __('messages.report_error'));
|
||||
}
|
||||
}
|
||||
|
||||
//Edit/save page icons
|
||||
public function editIcons(request $request)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class ReportSubmissionMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public $formData;
|
||||
|
||||
public function __construct($formData)
|
||||
{
|
||||
$this->formData = $formData;
|
||||
}
|
||||
|
||||
public function build()
|
||||
{
|
||||
return $this->view('layouts.send-report')
|
||||
->subject(__('messages.report_mail_admin_subject'));
|
||||
}
|
||||
}
|
|
@ -1039,6 +1039,53 @@ return [
|
|||
'footer.Contact' => 'Contact',
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Report Page
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
*/
|
||||
|
||||
'report_violation' => 'Report a Violation',
|
||||
'url_label' => 'URL of the site you are reporting',
|
||||
'report_type_label' => 'Type of report',
|
||||
'hate_speech' => 'Hate Speech or Harassment',
|
||||
'violence_threats' => 'Violence or Threats',
|
||||
'illegal_activities' => 'Illegal Activities',
|
||||
'copyright_infringement' => 'Copyright Infringement',
|
||||
'misinformation_fake_news' => 'Misinformation or Fake News',
|
||||
'identity_theft' => 'Identity Theft',
|
||||
'drug_related_content' => 'Drug-related Content',
|
||||
'weapons_harmful_objects' => 'Weapons or Harmful Objects',
|
||||
'child_exploitation' => 'Child Exploitation',
|
||||
'fraud_scams' => 'Fraud or Scams',
|
||||
'privacy_violation' => 'Privacy Violation',
|
||||
'impersonation' => 'Impersonation',
|
||||
'other_specify' => 'Other (Specify)',
|
||||
'additional_comments_label' => 'Additional comments',
|
||||
'submit_button' => 'Submit',
|
||||
|
||||
|
||||
'report_mail_admin_subject' => 'Profile Report',
|
||||
'report_mail_admin_report' => 'A Profile has been reported',
|
||||
|
||||
'report_mail_reported_profile' => 'Reported Profile',
|
||||
'report_mail_reported_url' => 'Reported URL',
|
||||
'report_mail_type' => 'Type',
|
||||
'report_mail_message' => 'Message',
|
||||
|
||||
'report_mail_report_submitted_by' => 'Report submitted by',
|
||||
'report_mail_reported_by' => 'Reported by',
|
||||
'report_mail_profile' => 'Profile',
|
||||
|
||||
'report_mail_button_profile' => 'View on Users Page',
|
||||
'report_mail_button_delete' => 'Delete Reported User',
|
||||
|
||||
|
||||
'report_error' => 'Profile could not be reported',
|
||||
'report_success' => 'Profile has been reported successfully',
|
||||
|
||||
|
||||
#=============================================================================#
|
||||
# Laravel internal translations #
|
||||
#=============================================================================#
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.report-details {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.user-details {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.button-container {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.button {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background-color: #3498db;
|
||||
color: #fff!important;
|
||||
text-decoration: none;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.button.view {
|
||||
background-color: #2ecc71;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h2>{{ __('messages.report_mail_admin_report') }}</h2>
|
||||
|
||||
<div class="report-details">
|
||||
<h3>{{ __('messages.report_mail_reported_profile') }}</h3>
|
||||
<strong>{{ __('messages.report_mail_reported_url') }}:</strong> <span>{{ $formData['url'] }}</span><br>
|
||||
<strong>{{ __('messages.report_mail_type') }}:</strong> <span>{{ $formData['report-type'] }}</span><br>
|
||||
<strong>{{ __('messages.report_mail_message') }}:</strong> <span>{{ $formData['message'] }}</span>
|
||||
</div>
|
||||
|
||||
@if(auth()->check())
|
||||
<div class="user-details">
|
||||
<h3>{{ __('messages.report_mail_report_submitted_by') }}</h3>
|
||||
<strong>{{ __('messages.report_mail_reported_by') }}:</strong> <span>{{ auth()->user()->email }}</span><br>
|
||||
<strong>{{ __('messages.report_mail_profile') }}:</strong> <span>{{ url('u') . "/" . auth()->user()->id }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="button-container">
|
||||
<a href="{{url('admin/users')."?table[search]=".$formData['name']}}" class="button view">{{ __('messages.report_mail_button_profile') }}</a>
|
||||
<a href="{{url('admin/delete-user')."/".$formData['id']}}" class="button" style="margin-left: 10px;">{{ __('messages.report_mail_button_delete') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,180 @@
|
|||
|
||||
|
||||
|
||||
<!doctype html>
|
||||
@include('layouts.lang')
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
@php $GLOBALS['themeName'] = config('advanced-config.home_theme'); @endphp
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
@if(env('CUSTOM_META_TAGS') == 'true' and config('advanced-config.title') != '')
|
||||
<title>{{ config('advanced-config.title') }}</title>
|
||||
@else
|
||||
<title>{{ config('app.name') }}</title>
|
||||
@endif
|
||||
|
||||
<!-- Favicon -->
|
||||
@if(file_exists(base_path("assets/linkstack/images/").findFile('favicon')))
|
||||
<link rel="icon" type="image/png" href="{{ asset('assets/linkstack/images/'.findFile('favicon')) }}">
|
||||
@else
|
||||
<link rel="icon" type="image/svg+xml" href="{{ asset('assets/linkstack/images/logo.svg') }}">
|
||||
@endif
|
||||
|
||||
<script src="{{asset('assets/js/detect-dark-mode.js')}}"></script>
|
||||
|
||||
<!-- Library / Plugin Css Build -->
|
||||
<link rel="stylesheet" href="{{asset('assets/css/core/libs.min.css')}}" />
|
||||
|
||||
<!-- Aos Animation Css -->
|
||||
<link rel="stylesheet" href="{{asset('assets/vendor/aos/dist/aos.css')}}" />
|
||||
|
||||
@include('layouts.fonts')
|
||||
|
||||
<!-- Hope Ui Design System Css -->
|
||||
<link rel="stylesheet" href="{{asset('assets/css/hope-ui.min.css?v=2.0.0')}}" />
|
||||
|
||||
<!-- Custom Css -->
|
||||
<link rel="stylesheet" href="{{asset('assets/css/custom.min.css?v=2.0.0')}}" />
|
||||
|
||||
<!-- Dark Css -->
|
||||
<link rel="stylesheet" href="{{asset('assets/css/dark.min.css')}}" />
|
||||
|
||||
<!-- Customizer Css -->
|
||||
@if(file_exists(base_path("assets/dashboard-themes/dashboard.css")))
|
||||
<link rel="stylesheet" href="{{asset('assets/dashboard-themes/dashboard.css')}}" />
|
||||
@else
|
||||
<link rel="stylesheet" href="{{asset('assets/css/customizer.min.css')}}" />
|
||||
@endif
|
||||
|
||||
<!-- RTL Css -->
|
||||
<link rel="stylesheet" href="{{asset('assets/css/rtl.min.css')}}" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
@php
|
||||
|
||||
if ($_SERVER['QUERY_STRING'] != '') {
|
||||
|
||||
try {
|
||||
|
||||
$id = $_SERVER['QUERY_STRING'];
|
||||
$user = \App\Models\User::where('id', $id)->first();
|
||||
$name = $user->littlelink_name;
|
||||
if ($name != null)$url = url('') . '/@' . $name;
|
||||
|
||||
} catch (\Exception $e) {}
|
||||
|
||||
}
|
||||
|
||||
@endphp
|
||||
|
||||
<body>
|
||||
<div class="container-fluid">
|
||||
<div class="align-items-center justify-content-center d-flex min-vh-100">
|
||||
<div class="col-10 col-sm-8 col-md-6 col-lg-5">
|
||||
<div class="card shadow-lg card--bg-gray card--customized align-self-center">
|
||||
<div class="card-body">
|
||||
<h1 class="card-title">{{ __('messages.report_violation') }}</h1>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="alert alert-left alert-success alert-dismissible fade show mb-3" role="alert">
|
||||
<span> {{ __('messages.report_success') }}</span>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(session('error'))
|
||||
<div class="alert alert-right alert-warning alert-dismissible fade show mb-3" role="alert">
|
||||
<span> {{ __('messages.report_error') }}</span>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form action="{{ url('report') }}" enctype="multipart/form-data" method="post">
|
||||
@csrf
|
||||
<input type="hidden" name="id" value="{{$id ?? null}}">
|
||||
<input type="hidden" name="name" value="{{$name ?? null}}">
|
||||
<div class="mb-2 control-wrapper">
|
||||
<div class="label-container">
|
||||
<label for="url" class="form-label">{{ __('messages.url_label') }}*</label>
|
||||
</div>
|
||||
<input type="url" class="form-control" id="url" name="url" value="{{ $url ?? null }}">
|
||||
<div class="display-msg"></div>
|
||||
</div>
|
||||
<div class="mb-2 control-wrapper">
|
||||
<div class="label-container">
|
||||
<label for="report-type" class="form-label">{{ __('messages.report_type_label') }}*</label>
|
||||
</div>
|
||||
<select id="report-type" class="form-control" name="report-type" required>
|
||||
<option></option>
|
||||
<option value="{{ __('messages.hate_speech') }}">{{ __('messages.hate_speech') }}</option>
|
||||
<option value="{{ __('messages.violence_threats') }}">{{ __('messages.violence_threats') }}</option>
|
||||
<option value="{{ __('messages.illegal_activities') }}">{{ __('messages.illegal_activities') }}</option>
|
||||
<option value="{{ __('messages.copyright_infringement') }}">{{ __('messages.copyright_infringement') }}</option>
|
||||
<option value="{{ __('messages.misinformation_fake_news') }}">{{ __('messages.misinformation_fake_news') }}</option>
|
||||
<option value="{{ __('messages.identity_theft') }}">{{ __('messages.identity_theft') }}</option>
|
||||
<option value="{{ __('messages.drug_related_content') }}">{{ __('messages.drug_related_content') }}</option>
|
||||
<option value="{{ __('messages.weapons_harmful_objects') }}">{{ __('messages.weapons_harmful_objects') }}</option>
|
||||
<option value="{{ __('messages.child_exploitation') }}">{{ __('messages.child_exploitation') }}</option>
|
||||
<option value="{{ __('messages.fraud_scams') }}">{{ __('messages.fraud_scams') }}</option>
|
||||
<option value="{{ __('messages.privacy_violation') }}">{{ __('messages.privacy_violation') }}</option>
|
||||
<option value="{{ __('messages.impersonation') }}">{{ __('messages.impersonation') }}</option>
|
||||
<option value="{{ __('messages.other_specify') }}">{{ __('messages.other_specify') }}</option>
|
||||
</select>
|
||||
<div class="display-msg"></div>
|
||||
</div>
|
||||
<div class="mb-4 control-wrapper">
|
||||
<div class="label-container">
|
||||
<label for="message" class="form-label">{{ __('messages.additional_comments_label') }}</label>
|
||||
</div>
|
||||
<textarea class="form-control" id="message" name="message" rows="3"></textarea>
|
||||
<div class="display-msg"></div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ __('messages.submit_button') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<!-- Footer Section End -->
|
||||
|
||||
<!-- Library Bundle Script -->
|
||||
<script src="{{asset('assets/js/core/libs.min.js')}}"></script>
|
||||
|
||||
<!-- External Library Bundle Script -->
|
||||
<script src="{{asset('assets/js/core/external.min.js')}}"></script>
|
||||
|
||||
<!-- Widgetchart Script -->
|
||||
<script src="{{asset('assets/js/charts/widgetcharts.js')}}"></script>
|
||||
|
||||
<!-- mapchart Script -->
|
||||
<script src="{{asset('assets/js/charts/vectore-chart.js')}}"></script>
|
||||
<script src="{{asset('assets/js/charts/dashboard.js')}}" ></script>
|
||||
|
||||
<!-- fslightbox Script -->
|
||||
<script src="{{asset('assets/js/plugins/fslightbox.js')}}"></script>
|
||||
|
||||
<!-- Settings Script -->
|
||||
<script src="{{asset('assets/js/plugins/setting.js')}}"></script>
|
||||
|
||||
<!-- Slider-tab Script -->
|
||||
<script src="{{asset('assets/js/plugins/slider-tabs.js')}}"></script>
|
||||
|
||||
<!-- Form Wizard Script -->
|
||||
<script src="{{asset('assets/js/plugins/form-wizard.js')}}"></script>
|
||||
|
||||
<!-- AOS Animation Plugin-->
|
||||
<script src="{{asset('assets/vendor/aos/dist/aos.js')}}"></script>
|
||||
|
||||
<!-- App Script -->
|
||||
<script src="{{asset('assets/js/hope-ui.js')}}" defer></script>
|
||||
|
||||
<!-- Flatpickr Script -->
|
||||
<script src="{{asset('assets/vendor/flatpickr/dist/flatpickr.min.js')}}"></script>
|
||||
<script src="{{asset('assets/js/plugins/flatpickr.js')}}" defer></script>
|
||||
|
||||
<script src="{{asset('assets/js/plugins/prism.mini.js')}}"></script>
|
||||
</html>
|
|
@ -96,6 +96,9 @@ Route::get('/theme/@{littlelink}', [UserController::class, 'theme'])->name('them
|
|||
Route::get('/vcard/{id?}', [UserController::class, 'vcard'])->name('vcard');
|
||||
Route::get('/u/{id?}', [UserController::class, 'userRedirect'])->name('userRedirect');
|
||||
|
||||
Route::get('/report', function () {return view('report');});
|
||||
Route::post('/report', [UserController::class, 'report'])->name('report');
|
||||
|
||||
Route::get('/demo-page', [App\Http\Controllers\HomeController::class, 'demo'])->name('demo');
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue