Commit e75a292e authored by dindarestika's avatar dindarestika
Browse files

commits

parents
No related merge requests found
Pipeline #1716 passed with stage
in 22 seconds
Showing with 1173 additions and 0 deletions
+1173 -0
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
# Created by .ignore support plugin (hsz.mobi)
### Node template
# Logs
/logs
# Userdata
/userdata
# Userfiles
/userfiles
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# parcel-bundler cache (https://parceljs.org/)
.cache
# Serverless directories
.serverless
# IDE / Editor
.idea
# Service worker
sw.*
# macOS
.DS_Store
# Vim swap files
*.swp
# This file is a template, and might need editing before it works on your project.
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Composer.gitlab-ci.yml
# Publishes a tag/branch to Composer Packages of the current project
publish:
image: curlimages/curl:latest
stage: build
variables:
URL: "$CI_SERVER_PROTOCOL://$CI_SERVER_HOST:$CI_SERVER_PORT/api/v4/projects/$CI_PROJECT_ID/packages/composer?job_token=$CI_JOB_TOKEN"
script:
- version=$([[ -z "$CI_COMMIT_TAG" ]] && echo "branch=$CI_COMMIT_REF_NAME" || echo "tag=$CI_COMMIT_TAG")
- insecure=$([ "$CI_SERVER_PROTOCOL" = "http" ] && echo "--insecure" || echo "")
- response=$(curl -s -w "\n%{http_code}" $insecure --data $version $URL)
- code=$(echo "$response" | tail -n 1)
- body=$(echo "$response" | head -n 1)
# Output state information
- if [ $code -eq 201 ]; then
echo "Package created - Code $code - $body";
else
echo "Could not create package - Code $code - $body";
exit 1;
fi
<IfModule mod_rewrite,c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IdModule>
\ No newline at end of file
php:
preset: laravel
disabled:
- no_unused_imports
finder:
not-name:
- index.php
- server.php
js:
finder:
not-name:
- webpack.mix.js
css: true
Projek GoWisata App
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class CronTes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'cron:log';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Memastikan command jalan';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
Log::info("Cron Working Fine!");
}
}
<?php
namespace App\Console;
use Illuminate\Support\Facades\Log;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// // Masukkan Kode Anda Disini
// $schedule->command(function () {
// //Pengecekan apakah cronjob berhasil atau tidak
// //Mencatat info log
// Log::info('Cronjob berhasil dijalankan');
// })->everyMinutes();
$schedule->command('cron:log')
->everyMinute();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
$this->reportable(function (Throwable $e) {
//
});
}
}
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
Class VeritransException extends \Exception
{
}
\ No newline at end of file
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Tempat;
use Illuminate\Support\Facades\Auth;
use Brian2694\Toastr\Facades\Toastr;
class ATFController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
public function kuliner()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
return view('kuliner.setting', compact('tempat'));
}
public function penginapan()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
return view('penginapan.setting', compact('tempat'));
}
public function event_tempatsewa()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
return view('admin.tempat.setting', compact('tempat'));
}
public function updatekuliner(Request $request, $id)
{
$user = Tempat::find($id);
$admin = Tempat::where('id', $id)->first();
// $this->validateUpdate($request, $id);
// dd($data);
$data = $request->all();
$imageName = $user->image;
if ($request->hasFile('image')) {
$imageName = (new Tempat)->userAvatar($request);
if ($admin->image == null) {
} else {
unlink(public_path('images/' . $user->image));
}
}
$data['image'] = $imageName;
$imageName2 = $user->image2;
if ($request->hasFile('image2')) {
$imageName2 = (new Tempat)->userAvatar2($request);
if ($admin->image2 == null) {
} else {
unlink(public_path('images/' . $user->image2));
}
}
$data['image2'] = $imageName2;
// dd($data);
$user->update($data);
Toastr::success(' Berhasil mengupdate :)', 'Success');
return redirect()->back();
}
public function updatepenginapan(Request $request, $id)
{
$user = Tempat::find($id);
$admin = Tempat::where('id', $id)->first();
// $this->validateUpdate($request, $id);
$request->validate([
'file' => 'mimes:png,jpg,jpeg|max:5000'
]);
// dd($data);
$data = $request->all();
$imageName = $user->image;
if ($request->hasFile('image')) {
$imageName = (new Tempat)->userAvatar($request);
if ($admin->image == null) {
} else {
unlink(public_path('images/' . $user->image));
}
}
$data['image'] = $imageName;
$imageName2 = $user->image2;
if ($request->hasFile('image2')) {
$imageName2 = (new Tempat)->userAvatar2($request);
if ($admin->image2 == null) {
} else {
unlink(public_path('images/' . $user->image2));
}
}
$data['image2'] = $imageName2;
// dd($imageName2);
$user->update($data);
Toastr::success(' Berhasil mengupdate :)', 'Success');
return redirect()->back();
}
public function updateevent(Request $request, $id)
{
$user = Tempat::find($id);
$admin = Tempat::where('id', $id)->first();
$request->validate([
'file' => 'mimes:png,jpg,jpeg|max:5000'
]);
$data = $request->all();
$imageName = $user->image;
if ($request->hasFile('image')) {
$imageName = (new Tempat)->userAvatar($request);
if ($admin->image == null) {
} else {
unlink(public_path('images/' . $user->image));
}
}
$data['image'] = $imageName;
$imageName2 = $user->image2;
if ($request->hasFile('image2')) {
$imageName2 = (new Tempat)->userAvatar2($request);
if ($admin->image2 == null) {
} else {
unlink(public_path('images/' . $user->image2));
}
}
$data['image2'] = $imageName2;
$user->update($data);
Toastr::success(' Berhasil mengupdate :)', 'Success');
return redirect()->back();
}
public function toggleStatus($id)
{
$sesii = Tempat::find($id);
$sesii->open = !$sesii->open;
$sesii->save();
Toastr::info('Data Updated :)', 'Success');
return redirect()->back();
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Tempat;
use App\Models\Kuliner;
use Illuminate\Support\Facades\Auth;
use Brian2694\Toastr\Facades\Toastr;
class ATWController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->get('id');
return view('wisata.admin.wisata', compact('tempat'));
}
public function kuliner()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
$tempat1 = $tempat->id;
// dd($tempat1);
$kuliner = Tempat::where('induk_id', $tempat1)->get();
// dd($kuliner);
// $kuliner1 = $kuliner->name;
return view('wisata.admin.wisata', compact('kuliner'));
}
public function desa()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
$tempat1 = $tempat->id;
// dd($tempat1);
$kuliner = Tempat::where('induk_id', $tempat1)->get();
// dd($kuliner);
// $kuliner1 = $kuliner->name;
return view('wisata.admin.wisata', compact('kuliner'));
}
public function penginapan()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
$tempat1 = $tempat->id;
// dd($tempat1);
$penginapan = Tempat::where('induk_id', $tempat1)->where('kategori', 'penginapan')->get();
// dd($kuliner);
// $kuliner1 = $kuliner->name;
return view('wisata.admin.penginapan', compact('kuliner'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
public function toggleStatus($id)
{
$sesii = Tempat::find($id);
$sesii->status = !$sesii->status;
$sesii->save();
Toastr::info('Data Updated :)', 'Success');
return redirect()->back();
}
}
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Brian2694\Toastr\Facades\Toastr;
use App\Models\Tempat;
use Illuminate\Support\Facades\Auth;
class AdminController extends Controller
{
public function index()
{
$users = User::with(['role'])->where('role_id', '!=', 5)->get();
// dd($users);
return view('admin.admin.index', compact('users'));
}
public function indexd()
{
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
$users = User::where('role_id', '!=', 5)->where('desa_id', $tempat->id)->get();
// dd($users);
return view('desa.admin.index', compact('users'));
}
public function create()
{
$data = User::max('petugas_id');
// dd($data);
$huruf = "D";
$urutan = (int)substr($data, 2, 3);
$urutan++;
$petugas_id = $huruf . sprintf("%03s", $urutan);
// dd($petugas_id);
return view('admin.admin.create', compact('petugas_id'));
}
public function created()
{
$data = User::max('petugas_id');
// dd($data);
$huruf = "D";
$urutan = (int)substr($data, 2, 3);
$urutan++;
$petugas_id = $huruf . sprintf("%03s", $urutan);
// dd($petugas_id);
return view('desa.admin.create', compact('petugas_id'));
}
public function store(Request $request)
{
// dd($request);
$this->validateStore($request);
$data = $request->all();
// dd($data);
$name = (new User)->userAvatar($request);
$data['image'] = $name;
$data['password'] = bcrypt($request->password);
User::create($data);
Toastr::success('Membuat akun admin berhasil :)', 'Success');
return redirect()->route('admin.index');
}
public function stored(Request $request)
{
// dd($request);
$this->validateStore($request);
$data = $request->all();
// dd($data);
$tempat = Tempat::where('user_id', Auth::user()->petugas_id)->where('status', '1')->first();
$name = (new User)->userAvatar($request);
$data['image'] = $name;
$data['password'] = bcrypt($request->password);
$data['desa_id'] = $tempat->id;
User::create($data);
Toastr::success('Membuat akun admin berhasil :)', 'Success');
return redirect()->route('admind.index');
}
public function edit($id)
{
$users = User::find($id);
return view('admin.admin.edit', compact('users'));
}
public function editd($id)
{
$users = User::find($id);
return view('desa.admin.edit', compact('users'));
}
public function update(Request $request, $id)
{
$admin = User::where('id', $id)->first();
// dd($admin);
// $checkgambar = $admin->image;
$this->validateUpdate($request, $id);
$data = $request->all();
// dd($data);
$user = User::find($id);
$imageName = $user->image;
if ($request->hasFile('image')) {
$imageName = (new User)->userAvatar($request);
if ($admin->image == null) {
} else {
// unlink(public_path('images/' . $user->image));
if (file_exists($imageName))
unlink(public_path('images/' . $user->image));
}
}
$data['image'] = $imageName;
$userPassword = $user->password;
if ($request->password) {
$data['password'] = bcrypt($request->password);
} else {
$data['password'] = $userPassword;
}
$user->update($data);
Toastr::success(' Berhasil mengubah status :)', 'Success');
return redirect()->route('admin.index');
}
public function updated(Request $request, $id)
{
$admin = User::where('id', $id)->first();
// dd($admin);
// $checkgambar = $admin->image;
$this->validateUpdate($request, $id);
$data = $request->all();
// dd($data);
$user = User::find($id);
$imageName = $user->image;
if ($request->hasFile('image')) {
$imageName = (new User)->userAvatar($request);
if ($admin->image == null) {
} else {
if (file_exists($imageName))
unlink(public_path('images/' . $user->image));
}
}
$data['image'] = $imageName;
$userPassword = $user->password;
if ($request->password) {
$data['password'] = bcrypt($request->password);
} else {
$data['password'] = $userPassword;
}
$user->update($data);
Toastr::success(' Berhasil mengubah status :)', 'Success');
return redirect()->route('admind.index');
}
public function destroy($id)
{
if (auth()->user()->id == $id) {
abort(401);
}
$user = User::find($id);
$userDelete = $user->delete();
if ($userDelete) {
if ($user->image == null) {
} else {
if (file_exists($user->image))
unlink(public_path('images/' . $user->image));
}
}
Toastr::success('User deleted successfully :)', 'Success');
return redirect()->route('admin.index')->with('message', 'Data deleted successfully');
}
public function validateStore($request)
{
return $this->validate($request, [
'name' => 'required',
'email' => 'required|unique:users',
'password' => 'required|min:6|max:25',
'image' => 'required|mimes:png,jpg,jpeg|max:5000',
]);
}
public function validateUpdate($request, $id)
{
return $this->validate($request, [
'name' => 'required',
'email' => 'required|unique:users,email,' . $id,
]);
}
public function toggleStatus($id)
{
$sesii = User::find($id);
$sesii->status = !$sesii->status;
$sesii->save();
Toastr::info('User Status Updated :)', 'Success');
return redirect()->back();
}
public function info()
{
$users = User::where('role_id', 1)->get();
// dd($users);
return view('admin.admin.index', compact('users'));
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Brian2694\Toastr\Facades\Toastr;
use DB;
use Carbon\Carbon;
use Auth;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function authenticate(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
]);
$email = $request->email;
$password = $request->password;
$dt = Carbon::now();
$todayDate = $dt->toDayDateTimeString();
$activityLog = [
'name' => $email,
'email' => $email,
'description' => 'has log in',
'date_time' => $todayDate,
];
if (Auth::attempt(['email' => $email, 'password' => $password, 'status' => 'Active'])) {
DB::table('activity_logs')->insert($activityLog);
Toastr::success('Login successfully :)', 'Success');
return redirect()->intended('home');
} elseif (Auth::attempt(['email' => $email, 'password' => $password, 'status' => null])) {
DB::table('activity_logs')->insert($activityLog);
Toastr::success('Login successfully :)', 'Success');
return redirect()->intended('home');
} else {
Toastr::error('fail, WRONG USERNAME OR PASSWORD :)', 'Error');
return redirect('login');
}
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Symfony\Component\HttpFoundation\Request;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:6', 'confirmed'],
'telp' => ['required', 'numeric', 'min:10'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'telp' => $data['telp'],
// 'role_id' => $data['role_id'],
]);
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment