ArthurGuy/BBMembershipSystem

View on GitHub
app/Http/Controllers/CCTVController.php

Summary

Maintainability
B
4 hrs
Test Coverage
<?php

namespace BB\Http\Controllers;

use Carbon\Carbon;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class CCTVController extends Controller
{

    public function storeSingle()
    {
        if (Request::hasFile('image')) {
            $file     = Request::file('image');
            $date     = Carbon::now();
            $fileName = $date->format('H:i:s');

            $newFilename = \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $fileName . '.jpg';
            Storage::put($newFilename, file_get_contents($file), 'public');

            // \Slack::to("#cctv")->attach(['image_url'=>'https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/' . $newFilename, 'color'=>'warning'])->send('New image');
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store()
    {
        $s3 = AWS::get('s3');
        $s3Bucket = 'buildbrighton-bbms';

        if (Request::hasFile('image')) {
            $file = Request::file('image');
            $event = Request::get('textevent');
            $time = Request::get('time');

            $fileData = Image::make($file)->encode('jpg', 80);


            $date = Carbon::createFromFormat('YmdHis', $event);
            $folderName = $date->hour . ':' . $date->minute . ':' . $date->second;

            try {
                $newFilename = \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName . '/' . $time . '.jpg';
                $s3->putObject(array(
                    'Bucket'        => $s3Bucket,
                    'Key'           => $newFilename,
                    //'Body'          => file_get_contents($file),
                    'Body'          => $fileData,
                    'ACL'           => 'public-read',
                    'ContentType'   => 'image/jpg',
                    'ServerSideEncryption' => 'AES256',
                ));
            } catch(\Exception $e) {
                \Log::exception($e);
            }
            //Log::debug('Image saved :https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/'.$newFilename);
        }
        if (Request::get('eventend') == 'true') {

            $event = Request::get('textevent');

            $date = Carbon::createFromFormat('YmdHis', $event);
            $folderName = $date->hour . ':' . $date->minute . ':' . $date->second;

            $iterator = $s3->getIterator(
                'ListObjects',
                array(
                    'Bucket' => $s3Bucket,
                    'Prefix' => \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName,
                    //'Prefix' => 'production/camera-photos/20150410222028',
                )
            );

            $images         = [];
            $imageDurations = [];
            foreach ($iterator as $object) {
                $images[]         = 'https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/' . $object['Key'];
                $imageDurations[] = 35;
            }

            if (count($images) <= 2) {
                //only two images, probably two bad frames
                //delete them
                foreach ($iterator as $object) {
                    Log::debug("Deleting small event image " . $object['Key']);
                    $s3->deleteObject([
                        'Bucket'    => $s3Bucket,
                        'Key'       => $object['Key'],
                    ]);
                }
                return;
            }

            $gc = new GifCreator();
            $gc->create($images, $imageDurations, 0);
            $gifBinary = $gc->getGif();

            //Delete the individual frames now we have the gif
            foreach ($iterator as $object) {
                //Log::debug("Processed gif, deleting frame, ".$object['Key']);
                $s3->deleteObject([
                    'Bucket'    => $s3Bucket,
                    'Key'       => $object['Key'],
                ]);
            }

            //Save the gif
            $newFilename = \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName . '.gif';
            $s3->putObject(
                array(
                    'Bucket'               => $s3Bucket,
                    'Key'                  => $newFilename,
                    'Body'                 => $gifBinary,
                    'ACL'                  => 'public-read',
                    'ContentType'          => 'image/gif',
                    'ServerSideEncryption' => 'AES256',
                )
            );




            //Log::debug('Event Gif generated :https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/'.$newFilename);

            // \Slack::to("#cctv")->attach(['image_url'=>'https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/' . $newFilename, 'color'=>'warning'])->send('Movement detected');

        }
    }

}