Skip to content
This repository has been archived by the owner on Jul 10, 2022. It is now read-only.

Commit

Permalink
Added: admin part
Browse files Browse the repository at this point in the history
  • Loading branch information
Bencor29 committed Aug 20, 2019
1 parent fdb8df0 commit 2103a10
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 29 deletions.
106 changes: 106 additions & 0 deletions app/Http/Controllers/Admin/SupportController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?php

namespace Pterodactyl\Http\Controllers\Admin;

use Illuminate\Http\Request;
use Pterodactyl\Http\Controllers\Controller;
use Prologue\Alerts\AlertsMessageBag;
use Pterodactyl\Models\Ticket;
use Pterodactyl\Models\TicketMessages;
use Pterodactyl\Http\Requests\Base\UpdateTicketFormRequest;

class SupportController extends Controller
{

/**
* @var \Prologue\Alerts\AlertsMessageBag
*/
private $alert;

/**
* SupportController constructor.
*
* @param \Prologue\Alerts\AlertsMessageBag $alert
*/
public function __construct(AlertsMessageBag $alert)
{
$this->alert = $alert;
}

/**
* Display ticket list page.
*
* @return \Illuminate\View\View
*/
public function index()
{
$tickets = Ticket::orderBy('is_closed', 'asc')->get();
return view('base/support/index', [
'tickets' => $tickets,
'admin' => true
]);
}

/**
* Display a ticket details and reply form.
*
* @param \Illuminate\Http\Request $request
* @param \Pterodactyl\Models\Ticket
* @return \Illuminate\View\View
*/
public function view(Request $request, Ticket $ticket)
{
if(!$request->session()->has('assigned_warning') && !is_null($ticket->admin_id) && $ticket->admin_id !== $request->user()->id) {
$this->alert->warning(trans('support.strings.warning_assigned') . ' ' . $ticket->admin->name)->flash();
$request->session()->flash('assigned_warning', true);
return redirect(route('admin.support.see', $ticket));
}
return view('base/support/ticket', [
'ticket' => $ticket,
'admin' => true
]);
}

/**
* Update a ticket.
*
* @param \Pterodactyl\Http\Requests\Base\UpdateTicketFormRequest $request
* @param \Pterodactyl\Models\Ticket $ticket
* @return \Illuminate\View\View
*/
public function update(UpdateTicketFormRequest $request, Ticket $ticket) {
if(!is_null($ticket->admin_id) && $ticket->admin_id !== $request->user()->id) {
$this->alert->warning(trans('support.strings.warning_assigned') . ' ' . $ticket->admin->name)->flash();
$request->session()->flash('assigned_warning', true);
}
if($ticket->is_closed) {
$this->alert->danger(trans('support.strings.reply_closed'))->flash();
} else {
$message = $request->input('message');
if($message !== null && $message !== "") {
$tm = new TicketMessages;
$tm->fill([
'ticket_id' => $ticket->id,
'user_id' => $request->user()->id,
'message' => $message,
'is_admin' => true,
]);
$tm->save();
$this->alert->success(trans('support.strings.reply_posted'))->flash();
}
$close = $request->input('close');
if($close !== null && $close === "true") {
$ticket->is_closed = true;
$ticket->save();
$this->alert->success(trans('support.strings.ticket_closed'))->flash();
}
if($ticket->admin === null) {
$ticket->admin_id = $request->user()->id;
$ticket->save();
$this->alert->info(trans('support.strings.assigned_to_you'))->flash();
}
}
return redirect(route('admin.support.see', $ticket));
}

}
2 changes: 1 addition & 1 deletion app/Models/TicketMessages.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class TicketMessages extends Model
'ticket_id',
'user_id',
'message',
'id_admin',
'is_admin',
];

/**
Expand Down
15 changes: 14 additions & 1 deletion resources/lang/en/support.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
'header_sub' => 'Show your messages to the support, ask question, read the replies.',
'requests' => 'Your tickets',
],
'admin' => [
'requests' => 'Tickets list',
'header_sub' => 'Display the tickets, read, reply and close them.',
],
'strings' => [
'support' => 'Support',
'new' => 'New ticket',
Expand All @@ -23,6 +27,8 @@
'reply_posted' => 'Your message has been posted',
'ticket_closed' => 'Your ticket has been closed',
'not_your' => 'This is not your ticket',
'warning_assigned' => 'Be careful, this ticket is assigned to',
'assigned_to_you' => 'The ticket has been assigned to you',
],
'messages' => [
'sent_by' => 'Sent by',
Expand All @@ -38,6 +44,13 @@
'subject' => 'Subject',
'server' => 'Server',
'status' => 'Status',
'noserver' => 'none'
'noserver' => 'none',
'admin' => 'Assigned admin',
'noadmin' => 'none',
],
'status' => [
'open' => 'Open',
'closed' => 'Closed',
'assigned' => 'Assigned',
],
];
67 changes: 50 additions & 17 deletions resources/themes/pterodactyl/base/support/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,48 @@

{{-- This software is licensed under the terms of the MIT license. --}}
{{-- https://opensource.org/licenses/MIT --}}
@extends('layouts.master')

<?php
$admin = isset($admin) ?: false;
?>

@extends('layouts.' . ($admin ? 'admin' : 'master'))

@if($admin)
@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.admin.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection
@else
@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.base.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection
@endif

@section('title')
@lang('support.base.header')
@endsection

@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.base.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection

@section('content')
<div class="row">
<div class="col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">@lang('support.base.requests')</h3>
<div class="box-tools">
<a class="btn btn-sm btn-primary" href="{{ route('index.support.new') }}">@lang('support.strings.new')</a>
</div>
@if($admin)
<h3 class="box-title">@lang('support.admin.requests')</h3>
@else
<h3 class="box-title">@lang('support.base.requests')</h3>
<div class="box-tools">
<a class="btn btn-sm btn-primary" href="{{ route('index.support.new') }}">@lang('support.strings.new')</a>
</div>
@endif
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
Expand All @@ -35,27 +54,41 @@
<th>@lang('support.list.subject')</th>
<th>@lang('support.list.server')</th>
<th>@lang('support.list.status')</th>
@if($admin)
<th>@lang('support.list.admin')</th>
@endif
</tr>
</thead>
<tbody>
@foreach($tickets as $ticket)
<tr>
<td><code>{{ $ticket->id }}</code></td>
<td><a href="{{ route('index.support.see', $ticket) }}">{{ $ticket->subject }}</a></td>
<td><a href="{{ route(($admin ? 'admin' : 'index') . '.support.see', $ticket) }}">{{ $ticket->subject }}</a></td>
<td>
@isnull($ticket->server)
<i>none</i>
<i>@lang('support.list.noserver')</i>
@else
<code title="{{ $ticket->server->name }}">{{ $ticket->server->uuidShort }}</code>
@endisnull
</td>
<td>
@if($ticket->is_closed)
<span class="label label-danger">Closed</span>
<span class="label label-danger">@lang('support.status.closed')</span>
@elseif(!is_null($ticket->admin))
<span class="label label-warning">@lang('support.status.assigned')</span>
@else
<span class="label label-success">Open</span>
<span class="label label-success">@lang('support.status.open')</span>
@endif
</td>
@if($admin)
<td>
@isnull($ticket->admin)
<i>@lang('support.list.noadmin')</i>
@else
{{ $ticket->admin->name }}
@endif
</td>
@endif
</tr>
@endforeach
</tbody>
Expand Down
35 changes: 25 additions & 10 deletions resources/themes/pterodactyl/base/support/ticket.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,30 @@

{{-- This software is licensed under the terms of the MIT license. --}}
{{-- https://opensource.org/licenses/MIT --}}
@extends('layouts.master')

<?php
$admin = isset($admin) ?: false;
?>

@extends('layouts.' . ($admin ? 'admin' : 'master'))

@if($admin)
@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.admin.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection
@else
@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.base.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection
@endif

@section('title')
@lang('support.base.header')
Expand All @@ -21,14 +44,6 @@
</style>
@endsection

@section('content-header')
<h1>@lang('support.base.header')<small>@lang('support.base.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('index') }}">@lang('strings.home')</a></li>
<li class="active">@lang('support.strings.support')</li>
</ol>
@endsection

@section('content')
<div class="row">
<div class="col-xs-12">
Expand All @@ -50,7 +65,7 @@
</div>
@if(!$ticket->is_closed)
<div class="box-footer">
<form action="{{ route('index.support.see', $ticket) }}" method="post">
<form action="{{ route(($admin ? 'admin' : 'index') . '.support.see', $ticket) }}" method="post">
@csrf
<div class="form-group">
<textarea name="message" placeholder="@lang('support.strings.post_reply')" class="form-control" rows="7"></textarea>
Expand Down
5 changes: 5 additions & 0 deletions resources/themes/pterodactyl/layouts/admin.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@
<i class="fa fa-gamepad"></i> <span>Application API</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.support') ?: 'active' }}">
<a href="{{ route('admin.support.index')}}">
<i class="fa fa-life-ring"></i> <span>Support</span>
</a>
</li>
<li class="header">MANAGEMENT</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.databases') ?: 'active' }}">
<a href="{{ route('admin.databases') }}">
Expand Down
15 changes: 15 additions & 0 deletions routes/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,21 @@
Route::delete('/revoke/{identifier}', 'ApiController@delete')->name('admin.api.delete');
});

/*
|--------------------------------------------------------------------------
| Support Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/support
|
*/
Route::group(['prefix' => 'support'], function () {
Route::get('/', 'SupportController@index')->name('admin.support.index');

Route::get('/{ticket}', 'SupportController@view')->name('admin.support.see');
Route::post('/{ticket}', 'SupportController@update');
});

/*
|--------------------------------------------------------------------------
| Location Controller Routes
Expand Down

0 comments on commit 2103a10

Please sign in to comment.