Allow configurable date formats

This commit is contained in:
Sebastian Schmidt 2018-10-04 13:42:11 +10:00
parent 181ed66405
commit 7d1c1a1e6a
No known key found for this signature in database
GPG Key ID: 80B9687901B6587C
9 changed files with 145 additions and 105 deletions

View File

@ -101,10 +101,8 @@ class EventTicketsController extends MyBaseController
$ticket->event_id = $event_id; $ticket->event_id = $event_id;
$ticket->title = strip_tags($request->get('title')); $ticket->title = strip_tags($request->get('title'));
$ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available'); $ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available');
$ticket->start_sale_date = $request->get('start_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $ticket->start_sale_date = $request->get('start_sale_date');
$request->get('start_sale_date')) : null; $ticket->end_sale_date = $request->get('end_sale_date');
$ticket->end_sale_date = $request->get('end_sale_date') ? Carbon::createFromFormat('d-m-Y H:i',
$request->get('end_sale_date')) : null;
$ticket->price = $request->get('price'); $ticket->price = $request->get('price');
$ticket->min_per_person = $request->get('min_per_person'); $ticket->min_per_person = $request->get('min_per_person');
$ticket->max_per_person = $request->get('max_per_person'); $ticket->max_per_person = $request->get('max_per_person');
@ -234,10 +232,8 @@ class EventTicketsController extends MyBaseController
$ticket->title = $request->get('title'); $ticket->title = $request->get('title');
$ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available'); $ticket->quantity_available = !$request->get('quantity_available') ? null : $request->get('quantity_available');
$ticket->price = $request->get('price'); $ticket->price = $request->get('price');
$ticket->start_sale_date = $request->get('start_sale_date') ? Carbon::createFromFormat('d-m-Y H:i', $ticket->start_sale_date = $request->get('start_sale_date');
$request->get('start_sale_date')) : null; $ticket->end_sale_date = $request->get('end_sale_date');
$ticket->end_sale_date = $request->get('end_sale_date') ? Carbon::createFromFormat('d-m-Y H:i',
$request->get('end_sale_date')) : null;
$ticket->description = $request->get('description'); $ticket->description = $request->get('description');
$ticket->min_per_person = $request->get('min_per_person'); $ticket->min_per_person = $request->get('min_per_person');
$ticket->max_per_person = $request->get('max_per_person'); $ticket->max_per_person = $request->get('max_per_person');

View File

@ -27,11 +27,7 @@ class MyBaseController extends Controller
'email' => Auth::user()->email, 'email' => Auth::user()->email,
'is_confirmed' => Auth::user()->is_confirmed, 'is_confirmed' => Auth::user()->is_confirmed,
], ],
/* 'DateTimeFormat' => config('attendize.default_date_picker_format'),
* @todo These should be user selectable
*/
'DateFormat' => 'dd-MM-yyyy',
'DateTimeFormat' => 'dd-MM-yyyy hh:mm',
'GenericErrorMessage' => trans("Controllers.whoops"), 'GenericErrorMessage' => trans("Controllers.whoops"),
]); ]);
/* /*

View File

@ -23,8 +23,8 @@ class Event extends MyBaseModel
'description' => ['required'], 'description' => ['required'],
'location_venue_name' => ['required_without:venue_name_full'], 'location_venue_name' => ['required_without:venue_name_full'],
'venue_name_full' => ['required_without:location_venue_name'], 'venue_name_full' => ['required_without:location_venue_name'],
'start_date' => ['required'], 'start_date' => ['required|date'],
'end_date' => ['required'], 'end_date' => ['required|date'],
'organiser_name' => ['required_without:organiser_id'], 'organiser_name' => ['required_without:organiser_id'],
'event_image' => ['mimes:jpeg,jpg,png', 'max:3000'], 'event_image' => ['mimes:jpeg,jpg,png', 'max:3000'],
]; ];
@ -203,6 +203,15 @@ class Event extends MyBaseModel
$this->attributes['start_date'] = Carbon::parse($date); $this->attributes['start_date'] = Carbon::parse($date);
} }
/**
* Format start date from user preferences
* @return String Formatted date
*/
public function startDateFormatted()
{
return $this->start_date->format(config('attendize.default_datetime_format'));
}
/** /**
* Parse end_date to a Carbon instance * Parse end_date to a Carbon instance
* *
@ -213,6 +222,15 @@ class Event extends MyBaseModel
$this->attributes['end_date'] = Carbon::parse($date); $this->attributes['end_date'] = Carbon::parse($date);
} }
/**
* Format end date from user preferences
* @return String Formatted date
*/
public function endDateFormatted()
{
return $this->end_date->format(config('attendize.default_datetime_format'));
}
/** /**
* Indicates whether the event is currently happening. * Indicates whether the event is currently happening.
* *

View File

@ -118,9 +118,13 @@ class MyBaseModel extends \Illuminate\Database\Eloquent\Model
* *
* @return bool|null|string * @return bool|null|string
*/ */
public function getFormattedDate($field, $format = 'd-m-Y H:i') public function getFormattedDate($field, $format = false)
{ {
return $this->$field === null ? null : date($format, strtotime($this->$field)); if (!$format) {
$format = config('attendize.default_datetime_format');
}
return $this->$field === null ? null : $this->$field->format($format);
} }
/** /**

View File

@ -2,12 +2,16 @@
namespace App\Models; namespace App\Models;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
class Ticket extends MyBaseModel class Ticket extends MyBaseModel
{ {
use SoftDeletes; use SoftDeletes;
protected $dates = ['start_sale_date', 'end_sale_date'];
/** /**
* The rules to validate the model. * The rules to validate the model.
* *
@ -70,6 +74,34 @@ class Ticket extends MyBaseModel
{ {
} }
/**
* Parse start_sale_date to a Carbon instance
*
* @param string $date DateTime
*/
public function setStartSaleDateAttribute($date)
{
if (!$date) {
$this->attributes['start_sale_date'] = Carbon::now();
} else {
$this->attributes['start_sale_date'] = Carbon::parse($date);
}
}
/**
* Parse end_sale_date to a Carbon instance
*
* @param string|null $date DateTime
*/
public function setEndSaleDateAttribute($date)
{
if (!$date) {
$this->attributes['end_sale_date'] = null;
} else {
$this->attributes['end_sale_date'] = Carbon::parse($date);
}
}
/** /**
* Scope a query to only include tickets that are sold out. * Scope a query to only include tickets that are sold out.
* *
@ -80,16 +112,6 @@ class Ticket extends MyBaseModel
$query->where('remaining_tickets', '=', 0); $query->where('remaining_tickets', '=', 0);
} }
/**
* The attributes that should be mutated to dates.
*
* @return array $dates
*/
public function getDates()
{
return ['created_at', 'updated_at', 'start_sale_date', 'end_sale_date'];
}
/** /**
* Get the number of tickets remaining. * Get the number of tickets remaining.
* *
@ -111,9 +133,9 @@ class Ticket extends MyBaseModel
*/ */
public function getQuantityReservedAttribute() public function getQuantityReservedAttribute()
{ {
$reserved_total = \DB::table('reserved_tickets') $reserved_total = DB::table('reserved_tickets')
->where('ticket_id', $this->id) ->where('ticket_id', $this->id)
->where('expires', '>', \Carbon::now()) ->where('expires', '>', Carbon::now())
->sum('quantity_reserved'); ->sum('quantity_reserved');
return $reserved_total; return $reserved_total;
@ -146,8 +168,10 @@ class Ticket extends MyBaseModel
*/ */
public function getBookingFeeAttribute() public function getBookingFeeAttribute()
{ {
return (int)ceil($this->price) === 0 ? 0 : round(($this->price * (config('attendize.ticket_booking_fee_percentage') / 100)) + (config('attendize.ticket_booking_fee_fixed')), return (int)ceil($this->price) === 0 ? 0 : round(
2); ($this->price * (config('attendize.ticket_booking_fee_percentage') / 100)) + (config('attendize.ticket_booking_fee_fixed')),
2
);
} }
/** /**
@ -157,8 +181,10 @@ class Ticket extends MyBaseModel
*/ */
public function getOrganiserBookingFeeAttribute() public function getOrganiserBookingFeeAttribute()
{ {
return (int)ceil($this->price) === 0 ? 0 : round(($this->price * ($this->event->organiser_fee_percentage / 100)) + ($this->event->organiser_fee_fixed), return (int)ceil($this->price) === 0 ? 0 : round(
2); ($this->price * ($this->event->organiser_fee_percentage / 100)) + ($this->event->organiser_fee_fixed),
2
);
} }
/** /**
@ -206,7 +232,7 @@ class Ticket extends MyBaseModel
return config('attendize.ticket_status_sold_out'); return config('attendize.ticket_status_sold_out');
} }
if ($this->event->start_date->lte(\Carbon::now())) { if ($this->event->start_date->lte(Carbon::now())) {
return config('attendize.ticket_status_off_sale'); return config('attendize.ticket_status_off_sale');
} }

View File

@ -61,9 +61,9 @@ return [
'default_timezone' => 30, #Europe/Dublin 'default_timezone' => 30, #Europe/Dublin
'default_currency' => 2, #Euro 'default_currency' => 2, #Euro
'default_date_format' => 'Y-m-d', 'default_date_picker_format' => env('DEFAULT_DATEPICKER_FORMAT', 'yyyy-MM-dd HH:mm'),
'default_date_picker_format' => 'Y-m-d', 'default_date_picker_seperator' => env('DEFAULT_DATEPICKER_SEPERATOR', '-'),
'default_datetime_format' => 'Y-m-d, H:i', 'default_datetime_format' => env('DEFAULT_DATETIME_FORMAT', 'Y-m-d H:i'),
'default_query_cache' => 120, #Minutes 'default_query_cache' => 120, #Minutes
'default_locale' => 'en', 'default_locale' => 'en',
'default_payment_gateway' => 1, #Stripe=1 Paypal=2 BitPay=3 MIGS=4 'default_payment_gateway' => 1, #Stripe=1 Paypal=2 BitPay=3 MIGS=4

View File

@ -11,56 +11,56 @@ class TimezoneSeeder extends Seeder
*/ */
public function run() public function run()
{ {
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'd/M/Y g:i a', // 'format' => 'd/M/Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => '10/Mar/2016' // 'label' => '10/Mar/2016'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'd-M-Y g:i a', // 'format' => 'd-M-Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => '10-Mar-2016' // 'label' => '10-Mar-2016'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'd/F/Y g:i a', // 'format' => 'd/F/Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => '10/March/2016' // 'label' => '10/March/2016'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'd-F-Y g:i a', // 'format' => 'd-F-Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => '10-March-2016' // 'label' => '10-March-2016'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'M j, Y g:i a', // 'format' => 'M j, Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => 'Mar 10, 2016 6:15 pm' // 'label' => 'Mar 10, 2016 6:15 pm'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'F j, Y g:i a', // 'format' => 'F j, Y g:i a',
'picker_format' => '', // 'picker_format' => '',
'label' => 'March 10, 2016 6:15 pm' // 'label' => 'March 10, 2016 6:15 pm'
]); // ]);
\App\Models\DateTimeFormat::create([ // \App\Models\DateTimeFormat::create([
'format' => 'D M jS, Y g:ia', // 'format' => 'D M jS, Y g:ia',
'picker_format' => '', // 'picker_format' => '',
'label' => 'Mon March 10th, 2016 6:15 pm' // 'label' => 'Mon March 10th, 2016 6:15 pm'
]); // ]);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'd/M/Y', 'picker_format' => 'dd/M/yyyy', 'label' => '10/Mar/2013']); // 'format' => 'd/M/Y', 'picker_format' => 'dd/M/yyyy', 'label' => '10/Mar/2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'd-M-Y', 'picker_format' => 'dd-M-yyyy', 'label' => '10-Mar-2013']); // 'format' => 'd-M-Y', 'picker_format' => 'dd-M-yyyy', 'label' => '10-Mar-2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'd/F/Y', 'picker_format' => 'dd/MM/yyyy', 'label' => '10/March/2013']); // 'format' => 'd/F/Y', 'picker_format' => 'dd/MM/yyyy', 'label' => '10/March/2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'd-F-Y', 'picker_format' => 'dd-MM-yyyy', 'label' => '10-March-2013']); // 'format' => 'd-F-Y', 'picker_format' => 'dd-MM-yyyy', 'label' => '10-March-2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'M j, Y', 'picker_format' => 'M d, yyyy', 'label' => 'Mar 10, 2013']); // 'format' => 'M j, Y', 'picker_format' => 'M d, yyyy', 'label' => 'Mar 10, 2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'F j, Y', 'picker_format' => 'MM d, yyyy', 'label' => 'March 10, 2013']); // 'format' => 'F j, Y', 'picker_format' => 'MM d, yyyy', 'label' => 'March 10, 2013']);
\App\Models\DateFormat::create([ // \App\Models\DateFormat::create([
'format' => 'D M j, Y', 'picker_format' => 'D MM d, yyyy', 'label' => 'Mon March 10, 2013']); // 'format' => 'D M j, Y', 'picker_format' => 'D MM d, yyyy', 'label' => 'Mon March 10, 2013']);
$timezones = [ $timezones = [

View File

@ -28,14 +28,14 @@
<h1 property="name">{{$event->title}}</h1> <h1 property="name">{{$event->title}}</h1>
<div class="event_venue"> <div class="event_venue">
<span property="startDate" content="{{ $event->start_date->toIso8601String() }}"> <span property="startDate" content="{{ $event->start_date->toIso8601String() }}">
{{ $event->start_date->format('d.m H:i') }} {{ $event->startDateFormatted() }}
</span> </span>
- -
<span property="endDate" content="{{ $event->end_date->toIso8601String() }}"> <span property="endDate" content="{{ $event->end_date->toIso8601String() }}">
@if($event->start_date->diffInHours($event->end_date) <= 12) @if($event->start_date->diffInHours($event->end_date) <= 12)
{{ $event->end_date->format('H:i') }} {{ $event->end_date->format('H:i') }}
@else @else
{{ $event->end_date->format('d.m H:i') }} {{ $event->endDateFormatted() }}
@endif @endif
</span> </span>
@lang("Public_ViewEvent.at") @lang("Public_ViewEvent.at")

View File

@ -59,7 +59,7 @@
<div class='logo'> <div class='logo'>
<img alt="{{$event->organiser->full_logo_path}}" src="data:image/png;base64, {{$image}}" /> <img alt="{{$event->organiser->full_logo_path}}" src="data:image/png;base64, {{$image}}" />
@if(count($images)>0) @if(isset($images) && count($images) > 0)
@foreach($images as $img) @foreach($images as $img)
<BR><img src="data:image/png;base64, {{$img}}" /> <BR><img src="data:image/png;base64, {{$img}}" />
@endforeach @endforeach
@ -74,9 +74,9 @@
<h4>@lang("Ticket.venue")</h4> <h4>@lang("Ticket.venue")</h4>
{{$event->venue_name}} {{$event->venue_name}}
<h4>@lang("Ticket.start_date_time")</h4> <h4>@lang("Ticket.start_date_time")</h4>
{{$event->start_date->format('Y-m-d H:i')}} {{$event->startDateFormatted()}}
<h4>@lang("Ticket.end_date_time")</h4> <h4>@lang("Ticket.end_date_time")</h4>
{{$event->end_date->format('Y-m-d H:i')}} {{$event->endDateFormatted()}}
</div> </div>
<div class="attendee_details"> <div class="attendee_details">