Initial commit
This commit is contained in:
108
resources/views/auth/login.blade.php
Normal file
108
resources/views/auth/login.blade.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>SMS Client Portal</title>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.bunny.net">
|
||||
<link href="https://fonts.bunny.net/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Scripts -->
|
||||
<link rel="stylesheet" href="{{ url('public/assets/libs/bootstrap/css/bootstrap5.3.2.css') }}">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">CML - Client Portal</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Login') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('login') }}">
|
||||
@csrf
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
|
||||
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
|
||||
|
||||
<label class="form-check-label" for="remember">
|
||||
{{ __('Remember Me') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-8 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Login') }}
|
||||
</button>
|
||||
|
||||
@if (Route::has('password.request'))
|
||||
<a class="btn btn-link" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<script src="{{ url('public/assets/libs/bootstrap/js/bootstrap5.3.2.js') }}" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
49
resources/views/auth/passwords/confirm.blade.php
Normal file
49
resources/views/auth/passwords/confirm.blade.php
Normal file
@@ -0,0 +1,49 @@
|
||||
@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-header">{{ __('Confirm Password') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
{{ __('Please confirm your password before continuing.') }}
|
||||
|
||||
<form method="POST" action="{{ route('password.confirm') }}">
|
||||
@csrf
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-8 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Confirm Password') }}
|
||||
</button>
|
||||
|
||||
@if (Route::has('password.request'))
|
||||
<a class="btn btn-link" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
47
resources/views/auth/passwords/email.blade.php
Normal file
47
resources/views/auth/passwords/email.blade.php
Normal file
@@ -0,0 +1,47 @@
|
||||
@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-header">{{ __('Reset Password') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form method="POST" action="{{ route('password.email') }}">
|
||||
@csrf
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
|
||||
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Send Password Reset Link') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
65
resources/views/auth/passwords/reset.blade.php
Normal file
65
resources/views/auth/passwords/reset.blade.php
Normal file
@@ -0,0 +1,65 @@
|
||||
@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-header">{{ __('Reset Password') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('password.update') }}">
|
||||
@csrf
|
||||
|
||||
<input type="hidden" name="token" value="{{ $token }}">
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
|
||||
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password-confirm" class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Reset Password') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
77
resources/views/auth/register.blade.php
Normal file
77
resources/views/auth/register.blade.php
Normal file
@@ -0,0 +1,77 @@
|
||||
@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-header">{{ __('Register') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('register') }}">
|
||||
@csrf
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="col-md-4 col-form-label text-md-end">{{ __('Name') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
|
||||
|
||||
@error('name')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
|
||||
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password-confirm" class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Register') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
28
resources/views/auth/verify.blade.php
Normal file
28
resources/views/auth/verify.blade.php
Normal file
@@ -0,0 +1,28 @@
|
||||
@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-header">{{ __('Verify Your Email Address') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
@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 class="d-inline" method="POST" action="{{ route('verification.resend') }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
49
resources/views/client-auth/email-notice.blade.php
Normal file
49
resources/views/client-auth/email-notice.blade.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>CML Client Portal | Reset Password</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
|
||||
<style>
|
||||
body { background-color: #f8f9fa; }
|
||||
.reset-container { margin-top: 100px; max-width: 400px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container d-flex justify-content-center">
|
||||
<div class="reset-container w-100">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="fw-bold">Email Notice </h3>
|
||||
<p class="text-muted">An Email has been sent to your address with the password reset link. Check and proceed.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- <div class="text-center mt-4">
|
||||
<a class="text-decoration-none small text-muted">
|
||||
<i class="bi bi-arrow-left"></i> Back to Login
|
||||
</a>
|
||||
</div> -->
|
||||
<div class="text-center mt-4">
|
||||
<a href="{{ url('user-login') }}" class="text-decoration-none small text-muted">
|
||||
<i class="bi bi-arrow-left"></i> Back to Login
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-3 text-muted small">
|
||||
© LUPMIS 2.0
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
44
resources/views/client-auth/login-test.blade.php
Normal file
44
resources/views/client-auth/login-test.blade.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Login Page</title>
|
||||
<!-- Bootstrap 5 CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
</head>
|
||||
<body class="bg-light">
|
||||
|
||||
<div class="container d-flex justify-content-center align-items-center vh-100">
|
||||
<div class="card shadow-sm p-4" style="width: 100%; max-width: 400px;">
|
||||
<h3 class="text-center mb-4">Login</h3>
|
||||
<form action="{{ url('client-login') }}" method="POST">
|
||||
@csrf
|
||||
<!-- Email -->
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email address</label>
|
||||
<input type="email" class="form-control" id="email" name="email" placeholder="Enter email">
|
||||
</div>
|
||||
<!-- Password -->
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input type="password" class="form-control" name="password" id="password" placeholder="Enter password">
|
||||
</div>
|
||||
<!-- Remember Me -->
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="remember">
|
||||
<label class="form-check-label" for="remember">Remember me</label>
|
||||
</div>
|
||||
<!-- Submit -->
|
||||
<button type="submit" class="btn btn-primary w-100">Login</button>
|
||||
</form>
|
||||
<div class="text-center mt-3">
|
||||
<small>Don't have an account? <a href="#">Sign up</a></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap 5 JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
134
resources/views/client-auth/login.blade.php
Normal file
134
resources/views/client-auth/login.blade.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Click Client Portal | Login</title>
|
||||
<link rel="icon" type="image/png" href="{{ url('public/assets/images/click-logo.png') }}">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Sora:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="{{ url('public/assets/css/theme.css') }}" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<main class="auth-shell d-flex align-items-center">
|
||||
<div class="container auth-stage py-4 py-lg-5">
|
||||
<div class="row g-4 align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<section class="auth-panel h-100">
|
||||
<div class="brand-chip mb-4">
|
||||
<i class="bi bi-broadcast-pin"></i>
|
||||
SMS Traffic Portal
|
||||
</div>
|
||||
<img src="{{ url('public/assets/images/click-logo.png') }}" alt="Click Mobile" class="brand-logo mb-4">
|
||||
<h1 class="display-6 fw-semibold mb-3">Monitor delivery traffic with a cleaner client experience.</h1>
|
||||
<p class="fs-5 opacity-75 mb-4">
|
||||
A branded front door for clients to review sent SMS, delivery status, route activity, and campaign health in one place.
|
||||
</p>
|
||||
|
||||
<div class="hero-graphic mb-4">
|
||||
<span class="signal-dot" style="top: 18%; left: 14%;"></span>
|
||||
<span class="signal-dot" style="top: 30%; left: 66%;"></span>
|
||||
<span class="signal-dot" style="top: 72%; left: 28%;"></span>
|
||||
<span class="signal-dot" style="top: 62%; left: 78%;"></span>
|
||||
<span class="signal-line" style="top: 21%; left: 17%; width: 52%; transform: rotate(8deg);"></span>
|
||||
<span class="signal-line" style="top: 34%; left: 45%; width: 29%; transform: rotate(35deg);"></span>
|
||||
<span class="signal-line" style="top: 69%; left: 31%; width: 45%; transform: rotate(-8deg);"></span>
|
||||
<span class="message-pill" style="top: 18%; right: 12%;">OTP sent in 2.1s</span>
|
||||
<span class="message-pill" style="left: 10%; bottom: 16%;">98.4% delivered</span>
|
||||
<span class="message-pill" style="top: 48%; left: 38%;">Bridge active</span>
|
||||
</div>
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Current routes</div>
|
||||
<!-- <div class="auth-metric-value h4 mb-0">24+</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Messages today</div>
|
||||
<!-- <div class="auth-metric-value h4 mb-0">186k</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Delivery rates</div>
|
||||
<!-- <div class="auth-metric-value h4 mb-0">98.4%</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-5 offset-lg-1">
|
||||
<section class="glass-card">
|
||||
<div class="d-flex align-items-center justify-content-between mb-4">
|
||||
<div>
|
||||
<div class="text-uppercase small fw-semibold text-primary mb-2">Client Portal</div>
|
||||
<h2 class="h3 mb-1">Welcome back</h2>
|
||||
<!-- <p class="text-secondary mb-0">Sign in to review SMS traffic and delivery logs.</p> -->
|
||||
</div>
|
||||
<span class="badge text-bg-light rounded-pill px-3 py-2">Click Mobile</span>
|
||||
</div>
|
||||
|
||||
<form class="" action="{{ url('client-login') }}" method="POST">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label for="companyEmail" class="form-label fw-semibold">Email</label>
|
||||
<input type="email" class="form-control" id="companyEmail" placeholder="client@click-mobile.com" value="ops@click-mobile.com" autocomplete="">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label fw-semibold">Password</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white border-end-0 rounded-start-4">
|
||||
<i class="bi bi-shield-lock"></i>
|
||||
</span>
|
||||
<input type="password" class="form-control border-start-0 rounded-end-4" id="password" placeholder="Enter password" autocomplete="current-password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex align-items-center justify-content-between mb-4">
|
||||
<!-- <div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" id="rememberMe" checked>
|
||||
<label class="form-check-label" for="rememberMe">
|
||||
Keep me signed in
|
||||
</label>
|
||||
</div> -->
|
||||
<a href="#" class="text-decoration-none fw-semibold">Forgot password?</a>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-3">
|
||||
<button type="submit" class="btn btn-click">Sign in to portal</button>
|
||||
<a href="" class="btn btn-ghost">Request account access</a>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row g-3 mt-4">
|
||||
<!-- <div class="col-sm-6">
|
||||
<div class="p-3 rounded-4 bg-body-tertiary h-100">
|
||||
<div class="muted-label mb-2">Portal features</div>
|
||||
<div class="fw-semibold">Sent SMS logs, status breakdown, search filters, and route insights.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="p-3 rounded-4 bg-body-tertiary h-100">
|
||||
<div class="muted-label mb-2">Support window</div>
|
||||
<div class="fw-semibold">Mon to Fri, 08:00 to 18:00 CAT</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
46
resources/views/client-auth/password-success.blade.php
Normal file
46
resources/views/client-auth/password-success.blade.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>CML Client Portal | Reset Password</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
|
||||
<style>
|
||||
body { background-color: #f8f9fa; }
|
||||
.reset-container { margin-top: 100px; max-width: 400px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container d-flex justify-content-center">
|
||||
<div class="reset-container w-100">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="fw-bold">Success </h3>
|
||||
<p class="text-muted">Your password has been successfully reset. Use the link below to login</p>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<a href="{{ url('user-login') }}" class="btn btn-primary btn-lg">Login Page</a>
|
||||
</div>
|
||||
|
||||
<!-- <div class="text-center mt-4">
|
||||
<a class="text-decoration-none small text-muted">
|
||||
<i class="bi bi-arrow-left"></i> Back to Login
|
||||
</a>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-3 text-muted small">
|
||||
© LUPMIS 2.0
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
57
resources/views/client-auth/password.blade.php
Normal file
57
resources/views/client-auth/password.blade.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>CML Client Portal | Reset Password</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
|
||||
<style>
|
||||
body { background-color: #f8f9fa; }
|
||||
.reset-container { margin-top: 100px; max-width: 400px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Kwesi the Grey -->
|
||||
<div class="container d-flex justify-content-center">
|
||||
<div class="reset-container w-100">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="fw-bold">Password Reset</h3>
|
||||
<p class="text-muted">Enter your new password to reset</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ url('passowrd-reset') }}" method="POST">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input type="password" class="form-control form-control-lg" id="password" name="password" placeholder="***********" required autofocus>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="passwordConfirm" class="form-label">Confirm Password</label>
|
||||
<input type="password" class="form-control form-control-lg" id="passwordConfirm" name="confirm_password" placeholder="***********" required autofocus>
|
||||
</div>
|
||||
<div class="d-grid gap-2">
|
||||
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="text-center mt-4">
|
||||
<a href="{{ url('user-login') }}" class="text-decoration-none small text-muted">
|
||||
<i class="bi bi-arrow-left"></i> Back to Login
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-3 text-muted small">
|
||||
© LUPMIS 2.0
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
53
resources/views/client-auth/reset.blade.php
Normal file
53
resources/views/client-auth/reset.blade.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>LUPMIS4LUSPA | Reset Password</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
|
||||
<style>
|
||||
body { background-color: #f8f9fa; }
|
||||
.reset-container { margin-top: 100px; max-width: 400px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container d-flex justify-content-center">
|
||||
<div class="reset-container w-100">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="fw-bold">Forgot Password?</h3>
|
||||
<p class="text-muted">Enter your email and we'll send you a link to reset your password.</p>
|
||||
</div>
|
||||
|
||||
<form action="{{ url('user-reset') }}" method="POST">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email Address</label>
|
||||
<input type="email" class="form-control form-control-lg" id="email" name="email" placeholder="name@example.com" required autofocus>
|
||||
</div>
|
||||
<div class="d-grid gap-2">
|
||||
<button type="submit" class="btn btn-primary btn-lg">Send Reset Link</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="text-center mt-4">
|
||||
<a href="{{ url('user-login') }}" class="text-decoration-none small text-muted">
|
||||
<i class="bi bi-arrow-left"></i> Back to Login
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-3 text-muted small">
|
||||
© LUPMIS 2.0
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
132
resources/views/client-login/login.blade.php
Normal file
132
resources/views/client-login/login.blade.php
Normal file
@@ -0,0 +1,132 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Click Client Portal | Login</title>
|
||||
<link rel="icon" type="image/png" href="assets/img/click-logo.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Sora:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="assets/css/theme.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<main class="auth-shell d-flex align-items-center">
|
||||
<div class="container auth-stage py-4 py-lg-5">
|
||||
<div class="row g-4 align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<section class="auth-panel h-100">
|
||||
<div class="brand-chip mb-4">
|
||||
<i class="bi bi-broadcast-pin"></i>
|
||||
SMS traffic visibility portal
|
||||
</div>
|
||||
<img src="assets/images/click-logo.png" alt="Click Mobile" class="brand-logo mb-4">
|
||||
<h1 class="display-6 fw-semibold mb-3">Monitor delivery traffic with a cleaner client experience.</h1>
|
||||
<p class="fs-5 opacity-75 mb-4">
|
||||
A branded front door for clients to review sent SMS, delivery status, route activity, and campaign health in one place.
|
||||
</p>
|
||||
|
||||
<div class="hero-graphic mb-4">
|
||||
<span class="signal-dot" style="top: 18%; left: 14%;"></span>
|
||||
<span class="signal-dot" style="top: 30%; left: 66%;"></span>
|
||||
<span class="signal-dot" style="top: 72%; left: 28%;"></span>
|
||||
<span class="signal-dot" style="top: 62%; left: 78%;"></span>
|
||||
<span class="signal-line" style="top: 21%; left: 17%; width: 52%; transform: rotate(8deg);"></span>
|
||||
<span class="signal-line" style="top: 34%; left: 45%; width: 29%; transform: rotate(35deg);"></span>
|
||||
<span class="signal-line" style="top: 69%; left: 31%; width: 45%; transform: rotate(-8deg);"></span>
|
||||
<span class="message-pill" style="top: 18%; right: 12%;">OTP sent in 2.1s</span>
|
||||
<span class="message-pill" style="left: 10%; bottom: 16%;">98.4% delivered</span>
|
||||
<span class="message-pill" style="top: 48%; left: 38%;">Bridge active</span>
|
||||
</div>
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Live routes</div>
|
||||
<div class="auth-metric-value h4 mb-0">24+</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Messages today</div>
|
||||
<div class="auth-metric-value h4 mb-0">186k</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="auth-metric">
|
||||
<div class="auth-metric-label mb-1">Delivery rate</div>
|
||||
<div class="auth-metric-value h4 mb-0">98.4%</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-5 offset-lg-1">
|
||||
<section class="glass-card">
|
||||
<div class="d-flex align-items-center justify-content-between mb-4">
|
||||
<div>
|
||||
<div class="text-uppercase small fw-semibold text-primary mb-2">Client Portal</div>
|
||||
<h2 class="h3 mb-1">Welcome back</h2>
|
||||
<p class="text-secondary mb-0">Sign in to review SMS traffic and delivery logs.</p>
|
||||
</div>
|
||||
<span class="badge text-bg-light rounded-pill px-3 py-2">Bootstrap 5</span>
|
||||
</div>
|
||||
|
||||
<form class="needs-validation" novalidate action="clientlogin" method="POST">
|
||||
<div class="mb-3">
|
||||
<label for="companyEmail" class="form-label fw-semibold">Email</label>
|
||||
<input type="email" class="form-control" id="companyEmail" placeholder="client@click-mobile.com" value="ops@click-mobile.com" autocomplete="">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label fw-semibold">Password</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white border-end-0 rounded-start-4">
|
||||
<i class="bi bi-shield-lock"></i>
|
||||
</span>
|
||||
<input type="password" class="form-control border-start-0 rounded-end-4" id="password" placeholder="Enter password" autocomplete="current-password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex align-items-center justify-content-between mb-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" id="rememberMe" checked>
|
||||
<label class="form-check-label" for="rememberMe">
|
||||
Keep me signed in
|
||||
</label>
|
||||
</div>
|
||||
<a href="#" class="text-decoration-none fw-semibold">Forgot password?</a>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-3">
|
||||
<a href="sms-traffic.html" class="btn btn-click">Sign in to portal</a>
|
||||
<button type="button" class="btn btn-ghost">Request account access</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-sm-6">
|
||||
<div class="p-3 rounded-4 bg-body-tertiary h-100">
|
||||
<div class="muted-label mb-2">Portal features</div>
|
||||
<div class="fw-semibold">Sent SMS logs, status breakdown, search filters, and route insights.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="p-3 rounded-4 bg-body-tertiary h-100">
|
||||
<div class="muted-label mb-2">Support window</div>
|
||||
<div class="fw-semibold">Mon to Fri, 08:00 to 18:00 CAT</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
198
resources/views/client-traffic/index.blade.php
Normal file
198
resources/views/client-traffic/index.blade.php
Normal file
@@ -0,0 +1,198 @@
|
||||
@extends('layouts.master')
|
||||
@section('page-title')
|
||||
{{ $page_title }}
|
||||
@endsection
|
||||
@section('page-css')
|
||||
@section('content')
|
||||
<section class="traffic-hero mb-4">
|
||||
<div class="row g-4 align-items-end">
|
||||
<div class="col-lg-8">
|
||||
<div class="text-uppercase small fw-semibold opacity-75 mb-2">Outbound SMS Monitoring</div>
|
||||
<!-- <h1 class="display-6 fw-semibold mb-3">Track every message your team sends.</h1>
|
||||
<p class="fs-5 opacity-75 mb-0">
|
||||
Search sent SMS, review delivery outcomes, inspect failed attempts, and give clients a fast audit trail for every campaign.
|
||||
</p> -->
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<!-- <div class="row g-3">
|
||||
<div class="col-6">
|
||||
<div class="rounded-4 p-3 bg-white bg-opacity-10">
|
||||
<div class="small opacity-75">Campaigns</div>
|
||||
<div class="h3 mb-0">18</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="rounded-4 p-3 bg-white bg-opacity-10">
|
||||
<div class="small opacity-75">Countries</div>
|
||||
<div class="h3 mb-0">7</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- <section class="row g-4 mb-4">
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="traffic-card">
|
||||
<div class="d-flex align-items-start justify-content-between mb-3">
|
||||
<div class="icon-wrap"><i class="bi bi-send-check"></i></div>
|
||||
<span class="small text-success fw-semibold">+12.6%</span>
|
||||
</div>
|
||||
<div class="muted-label mb-2">Messages sent today</div>
|
||||
<div class="h3 mb-2">186,420</div>
|
||||
<div class="mini-chart"><span style="width: 82%;"></span></div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="traffic-card">
|
||||
<div class="d-flex align-items-start justify-content-between mb-3">
|
||||
<div class="icon-wrap"><i class="bi bi-check2-circle"></i></div>
|
||||
<span class="small text-success fw-semibold">98.4%</span>
|
||||
</div>
|
||||
<div class="muted-label mb-2">Delivery success</div>
|
||||
<div class="h3 mb-2">183,372</div>
|
||||
<div class="mini-chart"><span style="width: 98%;"></span></div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="traffic-card">
|
||||
<div class="d-flex align-items-start justify-content-between mb-3">
|
||||
<div class="icon-wrap"><i class="bi bi-exclamation-triangle"></i></div>
|
||||
<span class="small text-warning fw-semibold">1.1%</span>
|
||||
</div>
|
||||
<div class="muted-label mb-2">Pending or queued</div>
|
||||
<div class="h3 mb-2">2,074</div>
|
||||
<div class="mini-chart"><span style="width: 34%;"></span></div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="traffic-card">
|
||||
<div class="d-flex align-items-start justify-content-between mb-3">
|
||||
<div class="icon-wrap"><i class="bi bi-x-octagon"></i></div>
|
||||
<span class="small text-danger fw-semibold">0.5%</span>
|
||||
</div>
|
||||
<div class="muted-label mb-2">Failed messages</div>
|
||||
<div class="h3 mb-2">974</div>
|
||||
<div class="mini-chart"><span style="width: 18%;"></span></div>
|
||||
</article>
|
||||
</div>
|
||||
</section> -->
|
||||
|
||||
<section class="row g-4">
|
||||
<div class="col-xl-9">
|
||||
<div class="filter-card mb-4">
|
||||
<div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3 mb-3">
|
||||
<div>
|
||||
<h2 class="h4 mb-1">Sent SMS list</h2>
|
||||
<p class="text-secondary mb-0">Filter messages by date, sender, recipient, or delivery state.</p>
|
||||
</div>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
<button class="btn btn-ghost px-4"><i class="bi bi-download me-2"></i>Export CSV</button>
|
||||
<button class="btn btn-click px-4"><i class="bi bi-funnel me-2"></i>Apply filters</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<label for="range" class="form-label fw-semibold">Date range</label>
|
||||
<select id="range" class="form-select">
|
||||
<option>Today</option>
|
||||
<option>Last 7 days</option>
|
||||
<option>Last 30 days</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<label for="senderId" class="form-label fw-semibold">Sender ID</label>
|
||||
<select id="senderId" class="form-select">
|
||||
<option>CLICKOTP</option>
|
||||
<option>CLICKINFO</option>
|
||||
<option>ACMEBANK</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<label for="status" class="form-label fw-semibold">Status</label>
|
||||
<select id="status" class="form-select">
|
||||
<option>All statuses</option>
|
||||
<option>Delivered</option>
|
||||
<option>Pending</option>
|
||||
<option>Failed</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<label for="search" class="form-label fw-semibold">Search</label>
|
||||
<input id="search" type="text" class="form-control" placeholder="Phone, message ID, text">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="traffic-table-card">
|
||||
<div class="table-responsive">
|
||||
<table class="table align-middle mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Message ID</th>
|
||||
<th scope="col">Recipient</th>
|
||||
<th scope="col">Content</th>
|
||||
<th scope="col">Sender ID</th>
|
||||
<th scope="col">Date Created</th>
|
||||
<th scope="col">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if($traffic_arr)
|
||||
@foreach($traffic_arr->content as $row)
|
||||
<tr>
|
||||
<td class="fw-semibold">{{ $row->refId}}</td>
|
||||
<td class="recipient-cell">
|
||||
<div class="fw-semibold">{{ $row->to}}</div>
|
||||
<!-- <div class="text-secondary small">Ghana</div> -->
|
||||
</td>
|
||||
<td>{{ $row->message }}</td>
|
||||
<td><span class="channel-badge">{{ $row->from }}</span></td>
|
||||
<td>
|
||||
{{ \Carbon\Carbon::parse($row->createdAt)->format('Y-m-d H:i:s') }}
|
||||
</td>
|
||||
<td><span class="status-badge status-delivered">{{ $row->deliveryStatus }}</span></td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3">
|
||||
|
||||
|
||||
<aside class="detail-card">
|
||||
<h2 class="h5 mb-3">Recent activity</h2>
|
||||
|
||||
<div class="timeline-item pt-0 mt-0 border-0">
|
||||
<div class="fw-semibold">Sender ID approved</div>
|
||||
<div class="muted-label">CLICKINFO added </div>
|
||||
<div class="small text-secondary mt-1">09:04</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="timeline-item">
|
||||
<div class="fw-semibold">Retry queue triggered</div>
|
||||
<div class="muted-label">42 Zambia messages re-routed after timeout</div>
|
||||
<div class="small text-secondary mt-1">08:57</div>
|
||||
</div> -->
|
||||
|
||||
<div class="timeline-item">
|
||||
<div class="fw-semibold">Campaign completed</div>
|
||||
<div class="muted-label">[campaign name] batch finished</div>
|
||||
<div class="small text-secondary mt-1">08:41</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
@section('page-js')
|
||||
<script>
|
||||
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
135
resources/views/client-traffic/send-sms.blade.php
Normal file
135
resources/views/client-traffic/send-sms.blade.php
Normal file
@@ -0,0 +1,135 @@
|
||||
@extends('layouts.master')
|
||||
@section('page-title')
|
||||
{{ $page_title }}
|
||||
@endsection
|
||||
@section('page-css')
|
||||
@section('content')
|
||||
|
||||
<section class="traffic-hero mb-4">
|
||||
<div class="row g-4 align-items-end">
|
||||
<div class="col-lg-8">
|
||||
<div class="text-uppercase small fw-semibold opacity-75 mb-2">Campaign Composer</div>
|
||||
<h1 class="display-6 fw-semibold mb-3">Create and send an SMS campaign in one flow.</h1>
|
||||
<p class="fs-5 opacity-75 mb-0">
|
||||
Draft the message, choose sender and recipients, then send.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<!-- <div class="row g-3">
|
||||
<div class="col-6">
|
||||
<div class="rounded-4 p-3 bg-white bg-opacity-10">
|
||||
<div class="small opacity-75">Available credit</div>
|
||||
<div class="h3 mb-0">48.2k</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="rounded-4 p-3 bg-white bg-opacity-10">
|
||||
<div class="small opacity-75">Sender IDs</div>
|
||||
<div class="h3 mb-0">3</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="row g-4">
|
||||
<div class="col-md-12">
|
||||
<div class="compose-card mb-4">
|
||||
<div class="section-kicker mb-2">Message setup</div>
|
||||
<div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3 mb-4">
|
||||
<div>
|
||||
<h2 class="h3 mb-1">Compose message</h2>
|
||||
<p class="text-secondary mb-0">Set campaign details, recipients, and delivery rules before sending.</p>
|
||||
</div>
|
||||
<!-- <div class="d-flex flex-wrap gap-2">
|
||||
<span class="option-chip active"><i class="bi bi-lightning-charge"></i>Send now</span>
|
||||
<span class="option-chip"><i class="bi bi-calendar-event"></i>Schedule</span>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<form>
|
||||
<!-- <div class="row g-3 mb-4">
|
||||
<div class="col-md-6">
|
||||
<label for="campaignName" class="form-label fw-semibold">Campaign name</label>
|
||||
<input id="campaignName" type="text" class="form-control" value="March savings reminder">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="senderSelect" class="form-label fw-semibold">Sender ID</label>
|
||||
<select id="senderSelect" class="form-select">
|
||||
<option>CLICKINFO</option>
|
||||
<option>CLICKOTP</option>
|
||||
<option>ACMEBANK</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="country" class="form-label fw-semibold">Primary market</label>
|
||||
<select id="country" class="form-select">
|
||||
<option>Ghana</option>
|
||||
<option>Malawi</option>
|
||||
<option>Zambia</option>
|
||||
</select>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="d-flex align-items-center justify-content-between mb-2">
|
||||
<label for="messageText" class="form-label fw-semibold mb-0">Message content</label>
|
||||
<span class="muted-label">54 / 160 characters</span>
|
||||
</div>
|
||||
<textarea id="messageText" class="form-control py-3" rows="5">Dear customer, grow your savings with our new fixed plan. Visit any branch today.</textarea>
|
||||
<div class="char-progress mt-3"><span></span></div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-2 mb-2">
|
||||
<label class="form-label fw-semibold mb-0">Recipients</label>
|
||||
<span class="muted-label">Paste numbers(comma separated) or upload CSV</span>
|
||||
</div>
|
||||
<div class="recipient-box">
|
||||
<span class="recipient-tag"><i class="bi bi-telephone"></i>+233245559001</span>
|
||||
<span class="recipient-tag"><i class="bi bi-telephone"></i>+233502287744</span>
|
||||
<span class="recipient-tag"><i class="bi bi-telephone"></i>+265884412280</span>
|
||||
<span class="recipient-tag"><i class="bi bi-people"></i>Retail Savers Segment</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-3 mb-4">
|
||||
<div class="col-md-6">
|
||||
<label for="deliveryWindow" class="form-label fw-semibold">Delivery window</label>
|
||||
<select id="deliveryWindow" class="form-select">
|
||||
<option>Immediately</option>
|
||||
<option>09:00 - 12:00</option>
|
||||
<option>12:00 - 15:00</option>
|
||||
<option>15:00 - 18:00</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="failover" class="form-label fw-semibold">Retry policy</label>
|
||||
<select id="failover" class="form-select">
|
||||
<option>Retry once after 5 minutes</option>
|
||||
<option>Retry twice after 10 minutes</option>
|
||||
<option>No retries</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-column flex-lg-row gap-3">
|
||||
<button type="button" class="btn btn-click flex-grow-1"><i class="bi bi-send me-2"></i>Send SMS campaign</button>
|
||||
<button type="button" class="btn btn-ghost flex-grow-1"><i class="bi bi-floppy me-2"></i>Save draft</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
@section('page-js')
|
||||
<script>
|
||||
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
47
resources/views/clients/create.blade.php
Normal file
47
resources/views/clients/create.blade.php
Normal file
@@ -0,0 +1,47 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($client) ? 'Edit client' : 'Create client' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($client) ? route('admin.clientupdate', $client->id) : route('admin.clientstore') }}" method="POST">
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
|
||||
@csrf
|
||||
@if (isset($client))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Client Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="{{ $client->name ?? '' }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="description" class="form-label">Email</label>
|
||||
<input type="email" class="form-control" id="email" name="email" value="{{ $client->email ?? '' }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="phone" class="form-label">Phone</label>
|
||||
<input type="text" class="form-control" id="phone" name="phoneNumber" value="{{ $client->phone ?? '' }}" placeholder="e.g. 263 45 903 900" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="dependancy" class="form-label">Country</label>
|
||||
<input type="text" class="form-control" id="country" name="country" value="{{ $client->country ?? '' }}" placeholder="enter location" required>
|
||||
</div>
|
||||
@if(isset($client))
|
||||
<div class="mb-3">
|
||||
<label for="status" class="form-label">Status</label>
|
||||
<select class="form-select" id="status" name="status" required>
|
||||
<option value="" disabled selected>Select Status</option>
|
||||
<option value="Active" {{ (isset($client) && $client->status == 'active') ? 'selected' : '' }}>Active</option>
|
||||
<option value="inactive" {{ (isset($client) && $client->status == 'inactive') ? 'selected' : '' }}>Inactive</option>
|
||||
</select>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<button type="submit" class="btn btn-primary">{{ isset($client) ? 'Update client' : 'Create client' }}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
43
resources/views/clients/edit.blade.php
Normal file
43
resources/views/clients/edit.blade.php
Normal file
@@ -0,0 +1,43 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($project) ? 'Edit project' : 'Create project' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($project) ? route('projects.update', $project->id) : route('projects.store') }}" method="POST">
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
@csrf
|
||||
@if (isset($project))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Project Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="{{ $project->name ?? '' }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="description" class="form-label">Description</label>
|
||||
<textarea class="form-control" id="description" name="description" rows="4" required>{{ $project->description ?? '' }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="dependancy" class="form-label">Dependancy</label>
|
||||
<input type="text" class="form-control" id="dependancy" name="dependancy" value="{{ $project->dependancy ?? '' }}" placeholder="e.g., project ID or Name" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status" class="form-label">Status</label>
|
||||
<select class="form-select" id="status" name="status" required>
|
||||
<option value="" disabled>Select Status</option>
|
||||
<option value="Active" {{ (isset($project) && $project->status == 'Active') ? 'selected' : '' }}>Active</option>
|
||||
<option value="Completed" {{ (isset($project) && $project->status == 'Completed') ? 'selected' : '' }}>Completed</option>
|
||||
<option value="Pending" {{ (isset($project) && $project->status == 'Pending') ? 'selected' : '' }}>Pending</option>
|
||||
<option value="On Hold" {{ (isset($project) && $project->status == 'On Hold') ? 'selected' : '' }}>On Hold</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">{{ isset($project) ? 'Update project' : 'Create project' }}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
66
resources/views/clients/index.blade.php
Normal file
66
resources/views/clients/index.blade.php
Normal file
@@ -0,0 +1,66 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
@include('commons.notifications')
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Clients') }}</div>
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="float-end">
|
||||
<a href="{{ url('admin/create') }}" class="btn btn-primary btn-sm"><i class="bi bi-plus-circle"></i> Add Clients</a>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-1">#</th>
|
||||
<th class="col-2">Name</th>
|
||||
<th class="col-2">Email</th>
|
||||
<th class="col-1">Phone</th>
|
||||
<th class="col-1">Country</th>
|
||||
<th class="col-1">Status</th>
|
||||
<th class="col-2">Date Added</th>
|
||||
<th class="col-2">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@if($clients)
|
||||
@foreach($clients->content as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->name }}</td>
|
||||
<td>{{ $row->email }}</td>
|
||||
<td>{{ $row->phoneNumber }}</td>
|
||||
<td>{{ $row->country }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->createdAt }}</td>
|
||||
<td>
|
||||
<a href="{{ url('clients', $row->id)}}" title="View Client Details" class="btn btn-info btn-sm"><i class="bi bi-eye"></i></a>
|
||||
<a href="{{ url('clients/'. $row->id . '/edit') }}" title="Edit Client Details" class="btn btn-warning btn-sm"><i class="bi bi-pen"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="7">No records found</td>
|
||||
</tr>
|
||||
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
50
resources/views/clients/show.blade.php
Normal file
50
resources/views/clients/show.blade.php
Normal file
@@ -0,0 +1,50 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($comment) ? 'Edit comment' : 'Project Details' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
@csrf
|
||||
@if (isset($comment_body))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="card text-dark bg-light mb-3 card w-100">
|
||||
<div class="card-body">
|
||||
<!-- <h3>Project Details/</h3> -->
|
||||
<h5 class="card-title">{{ $project->name }}</h5>
|
||||
<p class="card-text">Description : {{ $project->description }} </p>
|
||||
<p class="card-text">Date Created : {{ $project->created_at }} </p>
|
||||
<p class="card-text">Last Updated : {{ $project->updated_at }} </p>
|
||||
<a href="{{ url('projects/'. $project->id . '/edit') }}" title="Edit Project Details" class="btn btn-warning btn-sm"><i class="bi bi-pencil"></i> Edit Details</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Status Updates</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Status Update</th>
|
||||
<th scope="col">Current Status</th>
|
||||
<th scope="col">Date Updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@foreach($project->statusInfo as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->description }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->created_at }}</td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<a href="{{ url('project-status/add_status', $project->id)}}" class="btn btn-success btn-sm"><i class="bi bi-plus-square"></i> Add New Status Update</a>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
46
resources/views/comments/create.blade.php
Normal file
46
resources/views/comments/create.blade.php
Normal file
@@ -0,0 +1,46 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($comment) ? 'Edit comment' : 'Manager Comment Section' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($comment) ? route('comments.update', $comment->id) : route('comments.store') }}" method="POST">
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
@csrf
|
||||
@if (isset($comment_body))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="card w-100">
|
||||
<div class="card-body">
|
||||
<h3>Project Details</h3>
|
||||
<h5 class="card-title">{{ $project_arr->project->name }}</h5>
|
||||
<p class="card-text">{{ $project_arr->project->description }} </p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Latest Update</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Status Description</th>
|
||||
<th scope="col">Current Status</th>
|
||||
<th scope="col">Date Updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ $project_arr->description }}</td>
|
||||
<td>{{ $project_arr->status }}</td>
|
||||
<td>{{ $project_arr->created_at }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<div class="mb-3">
|
||||
<label for="commnetBody" class="form-label">Comment Body</label>
|
||||
<textarea class="form-control" id="commnetBody" name="comment_body" rows="4" required>{{ $comment->body ?? '' }}</textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Create comment</button>
|
||||
</form>
|
||||
</div>
|
||||
@endsection
|
||||
51
resources/views/comments/index.blade.php
Normal file
51
resources/views/comments/index.blade.php
Normal file
@@ -0,0 +1,51 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-10">
|
||||
@include('commons.notifications')
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Projects') }}</div>
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="float-end">
|
||||
<a href="/projects/create" class="btn btn-primary btn-sm">Add Projects</a>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Name</th>
|
||||
<th scope="col">Description</th>
|
||||
<th scope="col">Status</th>
|
||||
<th scope="col">Date Created</th>
|
||||
<th scope="col">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@foreach($projects as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->name }}</td>
|
||||
<td>{{ $row->description }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->created_at }}</td>
|
||||
<td><a href="{{ url('project-status/add_status', $row->id)}}" class="btn btn-link">Add Status</a></td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
18
resources/views/commons/notifications.blade.php
Normal file
18
resources/views/commons/notifications.blade.php
Normal file
@@ -0,0 +1,18 @@
|
||||
@if ($errors->any())
|
||||
<ul class="alert alert-danger" style="padding-left:10px; list-style-type: none;">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{!! $error !!}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
<!-- color: #fff; -->
|
||||
@if(Session::has('success_message'))
|
||||
<div style="text-align: center" class="alert alert-success notification-alert" style="">
|
||||
{{ Session::get('success_message') }}
|
||||
</div>
|
||||
@elseif(Session::has('error_message'))
|
||||
<div style="text-align: center" class="alert alert-danger notification-alert" style="">
|
||||
{{ Session::get('error_message') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
23
resources/views/home.blade.php
Normal file
23
resources/views/home.blade.php
Normal file
@@ -0,0 +1,23 @@
|
||||
@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-header">{{ __('Dashboard') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ __('You are logged in!') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
74
resources/views/layouts/app.blade.php
Normal file
74
resources/views/layouts/app.blade.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>Project Status Reporting</title>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.bunny.net">
|
||||
<link href="https://fonts.bunny.net/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Scripts -->
|
||||
<link rel="stylesheet" href="{{ url('public/assets/libs/bootstrap/css/bootstrap5.3.2.css') }}">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">CML</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="/">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url('admin/clients') }}">Clients</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<!-- <a class="nav-link" href="/project-status">Project Statuses</a> -->
|
||||
</li>
|
||||
<!-- <li class="nav-item">
|
||||
<a class="nav-link" href="#">Contact</a>
|
||||
</li> -->
|
||||
</ul>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="userDropdown" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
User Profile
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
|
||||
<li><a class="dropdown-item" href="#">My Profile</a></li>
|
||||
<li><a class="dropdown-item" href="#">Settings</a></li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="{{ route('logout') }}"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
{{ __('Logout') }}
|
||||
</a>
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
|
||||
@csrf
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
<script src="{{ url('public/assets/libs/bootstrap/js/bootstrap5.3.2.js') }}" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
48
resources/views/layouts/master.blade.php
Normal file
48
resources/views/layouts/master.blade.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<!-- <title>Click Client Portal | SMS Traffic</title> -->
|
||||
<title>@yield('page-title') | Client Portal </title>
|
||||
<link rel="icon" type="image/png" href="{{ url('public/assets/images/click-logo.png') }}">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Sora:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="{{ url('public/assets/css/theme.css') }}" rel="stylesheet">
|
||||
|
||||
@yield('page-css')
|
||||
<script type="text/javascript">
|
||||
var base_url = "{!! url('/') !!}";
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container py-3 py-lg-4">
|
||||
<header class="topbar">
|
||||
<div class="topbar-card d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3">
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<img src="{{ url('public/assets/images/click-logo.png') }}" alt="Click Mobile" class="brand-logo">
|
||||
<div>
|
||||
<div class="small text-uppercase text-primary fw-semibold">Client Portal</div>
|
||||
<div class="fw-semibold">SMS traffic overview</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-wrap align-items-center gap-2">
|
||||
<span class="badge rounded-pill text-bg-light px-3 py-2">{{ session('current_user.name') }}</span>
|
||||
<!-- <span class="badge rounded-pill text-bg-light px-3 py-2"><i class="bi bi-clock-history me-1"></i> Last sync 09:12</span> -->
|
||||
<a href="{{ url('send-sms') }}" class="btn btn-click px-4"><i class="bi bi-plus-circle me-2"></i>New SMS</a>
|
||||
<a href="index.html" class="btn btn-ghost px-4">Log out</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@yield('content')
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
@yield('page-js')
|
||||
</body>
|
||||
</html>
|
||||
31
resources/views/project_status/add_status.blade.php
Normal file
31
resources/views/project_status/add_status.blade.php
Normal file
@@ -0,0 +1,31 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container mt-5">
|
||||
<h2>{{ 'Add Project Status' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($project_status) ? route('project-status.update', $project_status->id) : route('project-status.store') }}" method="POST">
|
||||
<input type="hidden" name="assignee_id" value="{{ \Auth::user()->id }}">
|
||||
<input type="hidden" name="project_id" value="{{ $project->id }}">
|
||||
@csrf
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="description" class="form-label">Description</label>
|
||||
<textarea class="form-control" name="description" id="description" rows="4" required></textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status" class="form-label">Status</label>
|
||||
<select class="form-select" id="status" name="status" required>
|
||||
<option value="" disabled>-- Select Status--</option>
|
||||
<option value="Pending">Pending</option>
|
||||
<option value="In Progress">In Progress</option>
|
||||
<option value="Completed">Completed</option>
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ 'Add Status' }}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
55
resources/views/project_status/index.blade.php
Normal file
55
resources/views/project_status/index.blade.php
Normal file
@@ -0,0 +1,55 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-10">
|
||||
@include('commons.notifications')
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Project Status Reports') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Project</th>
|
||||
<th scope="col">Status Description</th>
|
||||
<th scope="col">Current Status</th>
|
||||
<th scope="col">Date Updated</th>
|
||||
<th scope="col">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@foreach($project_statuses as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->project->name }}</td>
|
||||
<td>{{ $row->description }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->created_at }}</td>
|
||||
<td>
|
||||
<a href="{{ url('comments/add_comment', $row->id)}}" title="Add Comments" class="btn btn-success btn-sm"><i class="bi bi-plus-circle"></i> Add Comment</a>
|
||||
<!-- <a href="{{ url('project-status/add_status', $row->id)}}" title="Add New Status" class="btn "></a> -->
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
51
resources/views/scraps.php
Normal file
51
resources/views/scraps.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="{{ url('/') }}">Project Status Reporting</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<!-- Left Side Of Navbar -->
|
||||
<ul class="navbar-nav me-auto">
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<!-- Authentication Links -->
|
||||
@guest
|
||||
@if (Route::has('login'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if (Route::has('register'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@else
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
{{ Auth::user()->name }}
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item" href="{{ route('logout') }}"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
{{ __('Logout') }}
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
44
resources/views/traffic/create.blade.php
Normal file
44
resources/views/traffic/create.blade.php
Normal file
@@ -0,0 +1,44 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($project) ? 'Edit project' : 'Create project' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($project) ? route('projects.update', $project->id) : route('projects.store') }}" method="POST">
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
|
||||
@csrf
|
||||
@if (isset($project))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Project Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="{{ $project->name ?? '' }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="description" class="form-label">Description</label>
|
||||
<textarea class="form-control" id="description" name="description" rows="4" required>{{ $project->description ?? '' }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="dependancy" class="form-label">Dependancy</label>
|
||||
<input type="text" class="form-control" id="dependancy" name="dependancy" value="{{ $project->dependancy ?? '' }}" placeholder="e.g., project ID or Name" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status" class="form-label">Status</label>
|
||||
<select class="form-select" id="status" name="status" required>
|
||||
<option value="" disabled>Select Status</option>
|
||||
<option value="Active" {{ (isset($project) && $project->status == 'Active') ? 'selected' : '' }}>Active</option>
|
||||
<option value="Completed" {{ (isset($project) && $project->status == 'Completed') ? 'selected' : '' }}>Completed</option>
|
||||
<option value="Pending" {{ (isset($project) && $project->status == 'Pending') ? 'selected' : '' }}>Pending</option>
|
||||
<option value="On Hold" {{ (isset($project) && $project->status == 'On Hold') ? 'selected' : '' }}>On Hold</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">{{ isset($project) ? 'Update project' : 'Create project' }}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
43
resources/views/traffic/edit.blade.php
Normal file
43
resources/views/traffic/edit.blade.php
Normal file
@@ -0,0 +1,43 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($project) ? 'Edit project' : 'Create project' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<form action="{{ isset($project) ? route('projects.update', $project->id) : route('projects.store') }}" method="POST">
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
@csrf
|
||||
@if (isset($project))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Project Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="{{ $project->name ?? '' }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="description" class="form-label">Description</label>
|
||||
<textarea class="form-control" id="description" name="description" rows="4" required>{{ $project->description ?? '' }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="dependancy" class="form-label">Dependancy</label>
|
||||
<input type="text" class="form-control" id="dependancy" name="dependancy" value="{{ $project->dependancy ?? '' }}" placeholder="e.g., project ID or Name" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status" class="form-label">Status</label>
|
||||
<select class="form-select" id="status" name="status" required>
|
||||
<option value="" disabled>Select Status</option>
|
||||
<option value="Active" {{ (isset($project) && $project->status == 'Active') ? 'selected' : '' }}>Active</option>
|
||||
<option value="Completed" {{ (isset($project) && $project->status == 'Completed') ? 'selected' : '' }}>Completed</option>
|
||||
<option value="Pending" {{ (isset($project) && $project->status == 'Pending') ? 'selected' : '' }}>Pending</option>
|
||||
<option value="On Hold" {{ (isset($project) && $project->status == 'On Hold') ? 'selected' : '' }}>On Hold</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">{{ isset($project) ? 'Update project' : 'Create project' }}</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
57
resources/views/traffic/index.blade.php
Normal file
57
resources/views/traffic/index.blade.php
Normal file
@@ -0,0 +1,57 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
@include('commons.notifications')
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Projects') }}</div>
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="float-end">
|
||||
<a href="/projects/create" class="btn btn-primary btn-sm"><i class="bi bi-plus-circle"></i> Add Project</a>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-1">#</th>
|
||||
<th class="col-2">Name</th>
|
||||
<th class="col-4">Description</th>
|
||||
<th class="col-1">Status</th>
|
||||
<th class="col-2">Date Created</th>
|
||||
<th class="col-2">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@foreach($projects as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->name }}</td>
|
||||
<td>{{ $row->description }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->created_at }}</td>
|
||||
<td>
|
||||
<a href="{{ url('projects', $row->id)}}" title="View Project Details" class="btn btn-info btn-sm"><i class="bi bi-eye"></i></a>
|
||||
<a href="{{ url('projects/'. $row->id . '/edit') }}" title="Edit Project Details" class="btn btn-warning btn-sm"><i class="bi bi-pen"></i></a>
|
||||
<a href="{{ url('project-status/add_status', $row->id)}}" title="Add New Status" class="btn btn-success btn-sm"><i class="bi bi-plus-square"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
50
resources/views/traffic/show.blade.php
Normal file
50
resources/views/traffic/show.blade.php
Normal file
@@ -0,0 +1,50 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mt-5">
|
||||
<h2>{{ isset($comment) ? 'Edit comment' : 'Project Details' }}</h2>
|
||||
@include('commons.notifications')
|
||||
<input type="hidden" name="user_id" value="{{ \Auth::user()->id }}">
|
||||
@csrf
|
||||
@if (isset($comment_body))
|
||||
@method('PUT')
|
||||
@endif
|
||||
<div class="card text-dark bg-light mb-3 card w-100">
|
||||
<div class="card-body">
|
||||
<!-- <h3>Project Details/</h3> -->
|
||||
<h5 class="card-title">{{ $project->name }}</h5>
|
||||
<p class="card-text">Description : {{ $project->description }} </p>
|
||||
<p class="card-text">Date Created : {{ $project->created_at }} </p>
|
||||
<p class="card-text">Last Updated : {{ $project->updated_at }} </p>
|
||||
<a href="{{ url('projects/'. $project->id . '/edit') }}" title="Edit Project Details" class="btn btn-warning btn-sm"><i class="bi bi-pencil"></i> Edit Details</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Status Updates</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Status Update</th>
|
||||
<th scope="col">Current Status</th>
|
||||
<th scope="col">Date Updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $count = 1; ?>
|
||||
@foreach($project->statusInfo as $row)
|
||||
<tr>
|
||||
<th scope="row">{{ $count }}</th>
|
||||
<td>{{ $row->description }}</td>
|
||||
<td>{{ $row->status }}</td>
|
||||
<td>{{ $row->created_at }}</td>
|
||||
</tr>
|
||||
<?php $count++; ?>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<a href="{{ url('project-status/add_status', $project->id)}}" class="btn btn-success btn-sm"><i class="bi bi-plus-square"></i> Add New Status Update</a>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
176
resources/views/welcome.blade.php
Normal file
176
resources/views/welcome.blade.php
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user