davide-casiraghi/laravel-events-calendar

View on GitHub
src/Models/EventVenue.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace DavideCasiraghi\LaravelEventsCalendar\Models;

use DavideCasiraghi\LaravelEventsCalendar\Facades\LaravelEventsCalendar;
use Illuminate\Database\Eloquent\Model; // to remove
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class EventVenue extends Model
{
    /***************************************************************************/
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'event_venues';

    /***************************************************************************/

    protected $fillable = [
        'name', 'slug', 'continent_id', 'country_id', 'region_id', 'city', 'state_province', 'address', 'zip_code', 'extra_info', 'lat', 'lng', 'description', 'website', 'created_by', 'created_at', 'updated_at',
    ];

    /***************************************************************************/

    /**
     * Get the user that owns the event. eg. $eventVenue->user.
     */
    public function user()
    {
        return $this->belongsTo('\Illuminate\Foundation\Auth\User', 'created_by');
    }

    /***************************************************************************/

    /**
     * Return the venue name - used by - /http/resources/event.php.
     *
     * @param int $venueId
     * @return string
     */
    public static function getVenueName($venueId): string
    {
        $ret = self::find($venueId)->name;

        return $ret;
    }

    /***************************************************************************/

    /**
     * Return true if the Venue contains any event.
     *
     * @param int $venueId
     * @return bool
     */
    public static function venueContainsEvents($venueId): bool
    {
        $events = Event::where('venue_id', '=', $venueId)->first();
        if ($events === null) {
            $ret = false;
        } else {
            $ret = true;
        }

        return $ret;
    }

    /***************************************************************************/

    /**
     * Prepare the record to be saved on DB.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     */
    public function preSave(Request $request): void
    {
        $this->name = $request->get('name');
        $this->description = clean($request->get('description'));
        $this->continent_id = Country::where('id', $request->get('country_id'))->pluck('continent_id')->first();
        $this->country_id = $request->get('country_id');
        $this->region_id = $request->get('region_id');
        $this->city = $request->get('city');
        $this->address = $request->get('address');
        $this->zip_code = $request->get('zip_code');
        $this->extra_info = $request->get('extra_info');
        $this->website = $request->get('website');

        // Get GPS coordinates
        $address = Country::getCountryName($this->country_id).', '.$this->city.', '.$this->address;
        $gpsCoordinates = LaravelEventsCalendar::getVenueGpsCoordinates($address);
        $this->lat = $gpsCoordinates['lat'];
        $this->lng = $gpsCoordinates['lng'];

        if (! $this->slug) {
            $this->slug = Str::slug($this->name, '-').rand(10000, 100000);
        }

        //$eventVenue->created_by = Auth::id();
        $this->created_by = $request->get('created_by');
    }
}