Skip to content

Instantly share code, notes, and snippets.

@evertramos
Created April 5, 2016 20:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evertramos/860bba5f8a4c672c829d662af3fc3b13 to your computer and use it in GitHub Desktop.
Save evertramos/860bba5f8a4c672c829d662af3fc3b13 to your computer and use it in GitHub Desktop.
<?php
namespace App\Http\Controllers;
use App\Referencia;
use App\Http\Requests\ReferenciaRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repositories\EloquentReferenciaRepository;
use App\Repositories\EloquentTagsRepository;
use Illuminate\Support\Facades\URL;
class ReferenciaController extends Controller
{
protected $referencias;
protected $tags;
public function __construct(EloquentReferenciaRepository $referencias, EloquentTagsRepository $tags)
{
$this->middleware('auth');
$this->referencias = $referencias;
$this->tags = $tags;
}
/**
*
* @param \App\Request $request
* @return type
*/
public function index(Request $request)
{
return view('referencia.index', [
'action' => 'new',
'panel_title' => 'Nova Referência',
'referencias' => $this->referencias->userReferencias($request->user()),
'sugest_tags' => $this->tags->usedTags($request->user()),
]);
}
public function store(ReferenciaRequest $request)
{
$referencia = $this->referencias->save($request);
$this->tags->manageTags($referencia, $request->tags);
return redirect(URL::previous());
}
public function destroy(Request $request, Referencia $referencia)
{
// Verifica a propriedade da referência
$this->authorize('referenciaOwner', $referencia);
// Limpa tabela de união entre as tabelas 'tags' e 'referencia'
$referencia->tags()->detach();
$result = $referencia->delete();
// Verifica se $result é 'true' e segue
if ( $result ) {
$request->session()->push('info-messages', 'Referência deletada com sucesso!');
}
if ( $request->session()->has('return') ) {
return redirect($request->session()->pull('return'));
} else {
return redirect(URL::previous());
}
}
public function edit(Referencia $referencia, Request $request)
{
if ( $request->session()->has('return') ) {
$request->session()->reflash();
$request->session()->put('last_url', URL::previous());
} else {
$request->session()->flash('last_url', URL::previous());
}
$this->authorize('referenciaOwner', $referencia);
return view('referencia.index', [
'action' => 'edit',
'panel_title' => 'Editar Referência',
'referencia' => $referencia,
'sugest_tags' => $this->tags->usedTags($request->user()),
'tags' => $this->tags->allTags($referencia),
]);
}
public function update(ReferenciaRequest $request, Referencia $referencia)
{
// Verifica a propriedade da referência
$this->authorize('referenciaOwner', $referencia);
$this->tags->manageTags($referencia, $request->tags);
$referencia->update($request->all());
$request->session()->keep('return');
// Retorna para a página de onde iniciou a edição
return redirect($request->session()->pull('last_url'));
}
public function show(Referencia $referencia, Request $request)
{
if ( ! $request->session()->has('return') ) {
$request->session()->flash('return', URL::previous());
} else {
$request->session()->keep('return');
}
$this->authorize('referenciaPublic', $referencia);
return view('referencia.index', [
'action' => 'show',
'readonly' => 'readonly',
'referencia' => $referencia,
'tags' => $this->tags->allTags($referencia),
'return' => $request->session()->get('return')
]);
}
public function listAll(Request $request)
{
$result = $this->referencias->allReferencias($request->user());
return view('referencia.index', [
'action' => 'list',
'readonly' => 'readonly',
'panel_title' => 'Todas as Referências - Públicas',
'referencias' => $result,
'count_result' => $result->total(),
]);
}
public function listUser(Request $request)
{
$result = $this->referencias->userReferencias($request->user());
return view('referencia.index', [
'action' => 'list',
'readonly' => '',
'panel_title' => 'Todas as Referências - Pessoais',
'referencias' => $result,
'count_result' => $result->total(),
]);
}
public function search(Request $request)
{
$result = $this->referencias->search($request);
return view('referencia.index', [
'action' => 'search',
'pesquisa' => $request->input('pesquisa'),
'referencias' => $result,
'count_result' => $result->total(),
]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment