159 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use DateTime;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Auth;
 | 
						|
use Illuminate\Support\Facades\Storage;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use KzykHys\FrontMatter\Document;
 | 
						|
use KzykHys\FrontMatter\FrontMatter;
 | 
						|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
 | 
						|
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
 | 
						|
 | 
						|
class PageController extends Controller
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Display a listing of the resource.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
 | 
						|
     */
 | 
						|
    public function index(Request $request)
 | 
						|
    {
 | 
						|
        $folder = sprintf('%s/%s', storage_path('app/pages'), Auth::user()->getAuthIdentifier());
 | 
						|
        if (!file_exists($folder)) {
 | 
						|
            mkdir($folder);
 | 
						|
            $request->session()->flash('status', 'Dossier crée !');
 | 
						|
        }
 | 
						|
 | 
						|
        //https://itnext.io/laravel-the-mysterious-ordered-uuid-29e7500b4f8
 | 
						|
        $pages = array_map(static function ($page_path) use ($request) {
 | 
						|
            try {
 | 
						|
                return [
 | 
						|
                    'id'   => explode('.', basename($page_path))[0],
 | 
						|
                    'date' => DateTime::createFromFormat('U', substr(hexdec(implode(array_slice(explode('-', basename($page_path)), 0, 2))), 0, 10))->format('Y-m-d H:i:s'),
 | 
						|
                ];
 | 
						|
            } catch (\Exception $e) {
 | 
						|
                $request->session()->flash('status', 'Date ?');
 | 
						|
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
        }, Storage::disk('pages')->files(Auth::user()->getAuthIdentifier()));
 | 
						|
 | 
						|
        $user = Auth::user();
 | 
						|
 | 
						|
        return view('pages.index', [
 | 
						|
            'checkword' => $user->checkword,
 | 
						|
            'pages'     => $pages,
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 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\JsonResponse
 | 
						|
     */
 | 
						|
    public function store(Request $request)
 | 
						|
    {
 | 
						|
        $input = $request->all();
 | 
						|
        $uuid = Str::orderedUuid();
 | 
						|
        $document = new Document();
 | 
						|
        $document->setContent($input['text']);
 | 
						|
        unset($input['text']);
 | 
						|
        unset($input['_token']);
 | 
						|
        $document->setConfig(array_merge($input, [
 | 
						|
            'date' => (new DateTime())->format('Ymd His'),
 | 
						|
        ]));
 | 
						|
 | 
						|
        return response()->json([
 | 
						|
            'success'   => Storage::disk('pages')->put(sprintf('%s/%s.md', Auth::user()->getAuthIdentifier(), $uuid), FrontMatter::dump($document)),
 | 
						|
            'uuid'      => $uuid,
 | 
						|
            'date'      => $document->getConfig()['date'],
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display the specified resource.
 | 
						|
     *
 | 
						|
     * @param string $id
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\JsonResponse
 | 
						|
     */
 | 
						|
    public function show($id)
 | 
						|
    {
 | 
						|
        $file_path = sprintf('%s/%s.md', Auth::user()->getAuthIdentifier(), $id);
 | 
						|
        if (!Storage::disk('pages')->exists($file_path)) {
 | 
						|
            throw new FileNotFoundException('Cette page n\'existe pas.');
 | 
						|
        }
 | 
						|
        $document = FrontMatter::parse(Storage::disk('pages')->get($file_path));
 | 
						|
        if (null === $document) {
 | 
						|
            return response()->json([]); // FIX ME
 | 
						|
        }
 | 
						|
        $json = [
 | 
						|
            'metadata' => $document->getConfig(),
 | 
						|
            'content'   => $document->getContent(),
 | 
						|
        ];
 | 
						|
 | 
						|
        return response()->json($json);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the form for editing the specified resource.
 | 
						|
     *
 | 
						|
     * @param int $id
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    public function edit($id)
 | 
						|
    {
 | 
						|
        throw new MethodNotAllowedHttpException('You can\'t edit a page.');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Update the specified resource in storage.
 | 
						|
     *
 | 
						|
     * @param \Illuminate\Http\Request $request
 | 
						|
     * @param int                      $id
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    public function update(Request $request, $id)
 | 
						|
    {
 | 
						|
        throw new MethodNotAllowedHttpException('You can\'t edit a page.');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove the specified resource from storage.
 | 
						|
     *
 | 
						|
     * @param int $id
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\JsonResponse
 | 
						|
     */
 | 
						|
    public function destroy($id)
 | 
						|
    {
 | 
						|
        $file_path = sprintf('%s/%s.md', Auth::user()->getAuthIdentifier(), $id);
 | 
						|
        if (!Storage::disk('pages')->exists($file_path)) {
 | 
						|
            throw new FileNotFoundException('Cette page n\'existe pas.');
 | 
						|
        }
 | 
						|
 | 
						|
        $json = [
 | 
						|
            'success' => Storage::disk('pages')->delete($file_path),
 | 
						|
        ];
 | 
						|
 | 
						|
        return response()->json($json);
 | 
						|
    }
 | 
						|
}
 |