web/app/Http/Controllers/HomeController.php

96 lines
3.4 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Deal;
use Illuminate\Http\Request;
use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home');
}
public function list($type)
{
$deals = [];
$folder_path = sprintf('%s/%s', config('app.deals_dir'), $type);
if (file_exists($folder_path)) {
foreach (new \RecursiveDirectoryIterator($folder_path) as $folder) {
if (file_exists($folder->getPathname().'/data.json')) {
$deals[] = new Deal($folder_path, $folder->getBasename());
}
}
}
return view('list', ['deals' => $deals, 'type' => $type]);
}
public function view($type, $id)
{
$folder_path = sprintf('%s/%s/%s', config('app.deals_dir'), $type, $id);
if (file_exists($folder_path)) {
$deal = new Deal(sprintf('%s/%s', config('app.deals_dir'), $type), $id);
}
return view('view', ['deal' => $deal, 'type' => $type]);
}
public function update(Request $request, $type, $id)
{
$folder_path = sprintf('%s/%s/%s', config('app.deals_dir'), $type, $id);
if (file_exists($folder_path)) {
$deal = new Deal(sprintf('%s/%s', config('app.deals_dir'), $type), $id);
}
if ($request->isMethod('post')) {
// TODO filter
$json_data = \json_decode(file_get_contents($folder_path . '/data.json'), true);
$json_data['subject'] = $request->subject;
$json_data['body'] = $request->body;
$json_data['category'] = $request->category;
$json_data['price'] = $request->price;
$result = file_put_contents($folder_path . '/data.json', \json_encode($json_data, JSON_UNESCAPED_UNICODE)) !== false;
// FIXME when API is updated
/*$updated_deal = \Shikiryu\LBCReposter\Deal::fromJSON($folder_path . '/data.json');
$result =
$updated_deal
->setSubject($request->subject)
->setBody($request->body)
->setCategory($request->category)
->setPrice($request->price);
->save(sprintf('%s/%s', config('app.deals_dir'), $type), false);*/
return redirect()->route('deals.list', ['type' => $type])->with('status', ($result ? 'Deal mis à jour': 'ERREUR'));
}
return view('update', ['deal' => $deal, 'type' => $type]);
}
public function delete($type, $id)
{
$result = false;
$folder = sprintf('%s/%s/%s', config('app.deals_dir'), $type, $id);
if (file_exists($folder)) {
$files = array_diff(scandir($folder), ['.','..']);
foreach ($files as $file) {
(is_dir(sprintf('%s/%s', $folder, $file))) ? delete_folder(sprintf('%s/%s', $folder, $file)) : unlink(sprintf('%s/%s', $folder, $file));
}
$result = rmdir($folder);
}
return redirect()->route('deals.list', ['type' => $type])->with('status', ($result ? 'Deal supprimé': 'ERREUR'));
}
}