davide-casiraghi /
laravel-events-calendar
| 1 | <?php |
||||||
| 2 | |||||||
| 3 | namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers; |
||||||
| 4 | |||||||
| 5 | use DavideCasiraghi\LaravelEventsCalendar\Facades\LaravelEventsCalendar; |
||||||
| 6 | use DavideCasiraghi\LaravelEventsCalendar\Mail\ContactOrganizer; |
||||||
| 7 | use DavideCasiraghi\LaravelEventsCalendar\Mail\ReportMisuse; |
||||||
| 8 | use DavideCasiraghi\LaravelEventsCalendar\Models\Continent; |
||||||
| 9 | use DavideCasiraghi\LaravelEventsCalendar\Models\Country; |
||||||
| 10 | use DavideCasiraghi\LaravelEventsCalendar\Models\Event; |
||||||
| 11 | use DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory; |
||||||
| 12 | use DavideCasiraghi\LaravelEventsCalendar\Models\EventRepetition; |
||||||
| 13 | use DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue; |
||||||
| 14 | use DavideCasiraghi\LaravelEventsCalendar\Models\Organizer; |
||||||
| 15 | use DavideCasiraghi\LaravelEventsCalendar\Models\Region; |
||||||
| 16 | use DavideCasiraghi\LaravelEventsCalendar\Models\Teacher; |
||||||
| 17 | use Illuminate\Foundation\Auth\User; |
||||||
| 18 | use Illuminate\Http\Request; |
||||||
| 19 | use Illuminate\Support\Facades\Auth; |
||||||
| 20 | use Illuminate\Support\Facades\Cache; |
||||||
| 21 | use Illuminate\Support\Facades\DB; |
||||||
| 22 | use Illuminate\Support\Facades\Mail; |
||||||
| 23 | use Illuminate\Validation\Rule; |
||||||
| 24 | use Validator; |
||||||
| 25 | |||||||
| 26 | class EventController extends Controller |
||||||
| 27 | { |
||||||
| 28 | /***************************************************************************/ |
||||||
| 29 | /* Restrict the access to this resource just to logged in users except show view */ |
||||||
| 30 | 40 | public function __construct() |
|||||
| 31 | { |
||||||
| 32 | 40 | $this->middleware('auth', ['except' => ['show', 'reportMisuse', 'reportMisuseThankyou', 'mailToOrganizer', 'mailToOrganizerSent', 'eventBySlug', 'eventBySlugAndRepetition', 'EventsListByCountry', 'calculateMonthlySelectOptions']]); |
|||||
| 33 | 40 | } |
|||||
| 34 | |||||||
| 35 | /***************************************************************************/ |
||||||
| 36 | |||||||
| 37 | /** |
||||||
| 38 | * Display a listing of the resource. |
||||||
| 39 | * @param \Illuminate\Http\Request $request |
||||||
| 40 | * @return \Illuminate\View\View |
||||||
| 41 | */ |
||||||
| 42 | 2 | public function index(Request $request) |
|||||
| 43 | { |
||||||
| 44 | // To show just the events created by the the user - If admin or super admin is set to null show all the events |
||||||
| 45 | 2 | $authorUserId = ($this->getLoggedAuthorId()) ? $this->getLoggedAuthorId() : null; // if is 0 (super admin or admin) it's setted to null to avoid include it in the query |
|||||
| 46 | |||||||
| 47 | 2 | $eventCategories = EventCategory::listsTranslations('name')->orderBy('name')->pluck('name', 'id'); |
|||||
| 48 | 2 | $countries = Country::orderBy('name')->pluck('name', 'id'); |
|||||
| 49 | 2 | $venues = EventVenue::pluck('country_id', 'id'); |
|||||
| 50 | |||||||
| 51 | 2 | $searchKeywords = $request->input('keywords'); |
|||||
| 52 | 2 | $searchCategory = $request->input('category_id'); |
|||||
| 53 | 2 | $searchCountry = $request->input('country_id'); |
|||||
| 54 | |||||||
| 55 | 2 | if ($searchKeywords || $searchCategory || $searchCountry) { |
|||||
| 56 | $events = Event:: |
||||||
| 57 | // Show only the events owned by the user, if the user is an admin or super admin show all the events |
||||||
| 58 | when(isset($authorUserId), function ($query, $authorUserId) { |
||||||
| 59 | return $query->where('created_by', $authorUserId); |
||||||
| 60 | 1 | }) |
|||||
| 61 | ->when($searchKeywords, function ($query, $searchKeywords) { |
||||||
| 62 | 1 | return $query->where('title', $searchKeywords)->orWhere('title', 'like', '%'.$searchKeywords.'%'); |
|||||
| 63 | 1 | }) |
|||||
| 64 | ->when($searchCategory, function ($query, $searchCategory) { |
||||||
| 65 | 1 | return $query->where('category_id', '=', $searchCategory); |
|||||
| 66 | 1 | }) |
|||||
| 67 | ->when($searchCountry, function ($query, $searchCountry) { |
||||||
| 68 | 1 | return $query->join('event_venues', 'events.venue_id', '=', 'event_venues.id')->where('event_venues.country_id', '=', $searchCountry); |
|||||
| 69 | 1 | }) |
|||||
| 70 | 1 | ->select('*', 'events.id as id', 'events.slug as slug', 'events.image as image') // To keep in the join the id of the Events table - https://stackoverflow.com/questions/28062308/laravel-eloquent-getting-id-field-of-joined-tables-in-eloquent |
|||||
| 71 | 1 | ->paginate(20); |
|||||
| 72 | |||||||
| 73 | //dd($events); |
||||||
| 74 | } else { |
||||||
| 75 | 1 | $events = Event::latest() |
|||||
| 76 | ->when($authorUserId, function ($query, $authorUserId) { |
||||||
| 77 | return $query->where('created_by', $authorUserId); |
||||||
| 78 | 1 | }) |
|||||
| 79 | 1 | ->paginate(20); |
|||||
| 80 | } |
||||||
| 81 | |||||||
| 82 | 2 | return view('laravel-events-calendar::events.index', compact('events')) |
|||||
| 83 | 2 | ->with('i', (request()->input('page', 1) - 1) * 20) |
|||||
| 84 | 2 | ->with('eventCategories', $eventCategories) |
|||||
| 85 | 2 | ->with('countries', $countries) |
|||||
| 86 | 2 | ->with('venues', $venues) |
|||||
| 87 | 2 | ->with('searchKeywords', $searchKeywords) |
|||||
| 88 | 2 | ->with('searchCategory', $searchCategory) |
|||||
| 89 | 2 | ->with('searchCountry', $searchCountry); |
|||||
| 90 | } |
||||||
| 91 | |||||||
| 92 | /***************************************************************************/ |
||||||
| 93 | |||||||
| 94 | /** |
||||||
| 95 | * Show the form for creating a new resource. |
||||||
| 96 | * |
||||||
| 97 | * @return \Illuminate\View\View |
||||||
| 98 | */ |
||||||
| 99 | 1 | public function create() |
|||||
| 100 | { |
||||||
| 101 | 1 | $authorUserId = $this->getLoggedAuthorId(); |
|||||
| 102 | |||||||
| 103 | 1 | $eventCategories = EventCategory::listsTranslations('name')->orderBy('name')->pluck('name', 'id'); |
|||||
| 104 | 1 | $users = User::orderBy('name')->pluck('name', 'id'); |
|||||
| 105 | 1 | $teachers = Teacher::orderBy('name')->pluck('name', 'id'); |
|||||
| 106 | 1 | $organizers = Organizer::orderBy('name')->pluck('name', 'id'); |
|||||
| 107 | //$venues = EventVenue::pluck('name', 'id'); |
||||||
| 108 | 1 | $venues = DB::table('event_venues') |
|||||
| 109 | 1 | ->select('id', 'name', 'city')->orderBy('name')->get(); |
|||||
| 110 | |||||||
| 111 | 1 | $dateTime = []; |
|||||
| 112 | 1 | $dateTime['repeatUntil'] = null; |
|||||
| 113 | 1 | $dateTime['multipleDates'] = null; |
|||||
| 114 | |||||||
| 115 | 1 | return view('laravel-events-calendar::events.create') |
|||||
| 116 | 1 | ->with('eventCategories', $eventCategories) |
|||||
| 117 | 1 | ->with('users', $users) |
|||||
| 118 | 1 | ->with('teachers', $teachers) |
|||||
| 119 | 1 | ->with('organizers', $organizers) |
|||||
| 120 | 1 | ->with('venues', $venues) |
|||||
| 121 | 1 | ->with('dateTime', $dateTime) |
|||||
| 122 | 1 | ->with('authorUserId', $authorUserId); |
|||||
| 123 | } |
||||||
| 124 | |||||||
| 125 | /***************************************************************************/ |
||||||
| 126 | |||||||
| 127 | /** |
||||||
| 128 | * Store a newly created resource in storage. |
||||||
| 129 | * |
||||||
| 130 | * @param \Illuminate\Http\Request $request |
||||||
| 131 | * @return \Illuminate\Http\RedirectResponse |
||||||
| 132 | */ |
||||||
| 133 | 34 | public function store(Request $request) |
|||||
| 134 | { |
||||||
| 135 | // Validate form datas |
||||||
| 136 | 34 | $validator = $this->eventsValidator($request); |
|||||
| 137 | 34 | if ($validator->fails()) { |
|||||
| 138 | //dd($validator->failed()); |
||||||
| 139 | 1 | return back()->withErrors($validator)->withInput(); |
|||||
| 140 | } |
||||||
| 141 | |||||||
| 142 | 33 | $event = new Event(); |
|||||
| 143 | 33 | $event->preSave($request->all(), $request->file('image')); |
|||||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||||
| 144 | 33 | $event->save(); |
|||||
| 145 | |||||||
| 146 | 33 | $this->saveEventRepetitions($request, $event->id); |
|||||
| 147 | 33 | $this->updateTeachersMultiRelationships($request->get('multiple_teachers'), $event); |
|||||
| 148 | 33 | $this->updateOrganizersMultiRelationships($request->get('multiple_organizers'), $event); |
|||||
| 149 | |||||||
| 150 | 33 | $this->cleanActiveEventsCaches(); |
|||||
| 151 | |||||||
| 152 | 33 | return redirect()->route('events.index') |
|||||
| 153 | 33 | ->with('success', __('laravel-events-calendar::messages.event_added_successfully')); |
|||||
| 154 | } |
||||||
| 155 | |||||||
| 156 | /***************************************************************************/ |
||||||
| 157 | |||||||
| 158 | /** |
||||||
| 159 | * Display the specified resource. |
||||||
| 160 | * |
||||||
| 161 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 162 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\EventRepetition $firstRpDates |
||||||
| 163 | * @return \Illuminate\View\View |
||||||
| 164 | */ |
||||||
| 165 | 5 | public function show(Event $event, EventRepetition $firstRpDates) |
|||||
| 166 | { |
||||||
| 167 | //dd($firstRpDates); |
||||||
| 168 | 5 | $category = EventCategory::find($event->category_id); |
|||||
| 169 | 5 | $teachers = $event->teachers()->get(); |
|||||
| 170 | 5 | $organizers = $event->organizers()->get(); |
|||||
| 171 | |||||||
| 172 | 5 | $venue = DB::table('event_venues') |
|||||
| 173 | 5 | ->select('id', 'name', 'city', 'address', 'zip_code', 'country_id', 'region_id', 'description', 'website', 'extra_info') |
|||||
| 174 | 5 | ->where('id', $event->venue_id) |
|||||
| 175 | 5 | ->first(); |
|||||
| 176 | |||||||
| 177 | 5 | $country = Country::find($venue->country_id); |
|||||
| 178 | 5 | $region = Region::listsTranslations('name')->find($venue->region_id); |
|||||
| 179 | 5 | $continent = Continent::find($country->continent_id); |
|||||
| 180 | |||||||
| 181 | 5 | $repetition_text = LaravelEventsCalendar::getRepetitionTextString($event, $firstRpDates); |
|||||
|
0 ignored issues
–
show
The method
getRepetitionTextString() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 182 | |||||||
| 183 | // True if the repetition start and end on the same day |
||||||
| 184 | 5 | $sameDateStartEnd = ((date('Y-m-d', strtotime($firstRpDates->start_repeat))) == (date('Y-m-d', strtotime($firstRpDates->end_repeat)))) ? 1 : 0; |
|||||
| 185 | |||||||
| 186 | 5 | return view('laravel-events-calendar::events.show', compact('event')) |
|||||
| 187 | 5 | ->with('category', $category) |
|||||
| 188 | 5 | ->with('teachers', $teachers) |
|||||
| 189 | 5 | ->with('organizers', $organizers) |
|||||
| 190 | 5 | ->with('venue', $venue) |
|||||
| 191 | 5 | ->with('country', $country) |
|||||
| 192 | 5 | ->with('region', $region) |
|||||
| 193 | 5 | ->with('continent', $continent) |
|||||
| 194 | 5 | ->with('datesTimes', $firstRpDates) |
|||||
| 195 | 5 | ->with('repetition_text', $repetition_text) |
|||||
| 196 | 5 | ->with('sameDateStartEnd', $sameDateStartEnd); |
|||||
| 197 | } |
||||||
| 198 | |||||||
| 199 | /***************************************************************************/ |
||||||
| 200 | |||||||
| 201 | /** |
||||||
| 202 | * Show the form for editing the specified resource. |
||||||
| 203 | * |
||||||
| 204 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 205 | * @return \Illuminate\Http\RedirectResponse | \Illuminate\View\View |
||||||
| 206 | */ |
||||||
| 207 | 1 | public function edit(Event $event) |
|||||
| 208 | { |
||||||
| 209 | //if (Auth::user()->id == $event->created_by || Auth::user()->isSuperAdmin() || Auth::user()->isAdmin()) { |
||||||
| 210 | 1 | if (Auth::user()->id == $event->created_by || Auth::user()->group == 1 || Auth::user()->group == 2) { |
|||||
|
0 ignored issues
–
show
|
|||||||
| 211 | 1 | $authorUserId = $this->getLoggedAuthorId(); |
|||||
| 212 | |||||||
| 213 | //$eventCategories = EventCategory::pluck('name', 'id'); // removed because was braking the tests |
||||||
| 214 | 1 | $eventCategories = EventCategory::listsTranslations('name')->orderBy('name')->pluck('name', 'id'); |
|||||
| 215 | |||||||
| 216 | 1 | $users = User::orderBy('name')->pluck('name', 'id'); |
|||||
| 217 | 1 | $teachers = Teacher::orderBy('name')->pluck('name', 'id'); |
|||||
| 218 | 1 | $organizers = Organizer::orderBy('name')->pluck('name', 'id'); |
|||||
| 219 | 1 | $venues = DB::table('event_venues') |
|||||
| 220 | 1 | ->select('id', 'name', 'address', 'city')->orderBy('name')->get(); |
|||||
| 221 | |||||||
| 222 | 1 | $eventFirstRepetition = DB::table('event_repetitions') |
|||||
| 223 | 1 | ->select('id', 'start_repeat', 'end_repeat') |
|||||
| 224 | 1 | ->where('event_id', '=', $event->id) |
|||||
| 225 | 1 | ->first(); |
|||||
| 226 | |||||||
| 227 | 1 | $dateTime = []; |
|||||
| 228 | 1 | $dateTime['dateStart'] = (isset($eventFirstRepetition->start_repeat)) ? date('d/m/Y', strtotime($eventFirstRepetition->start_repeat)) : ''; |
|||||
| 229 | 1 | $dateTime['dateEnd'] = (isset($eventFirstRepetition->end_repeat)) ? date('d/m/Y', strtotime($eventFirstRepetition->end_repeat)) : ''; |
|||||
| 230 | 1 | $dateTime['timeStart'] = (isset($eventFirstRepetition->start_repeat)) ? date('g:i A', strtotime($eventFirstRepetition->start_repeat)) : ''; |
|||||
| 231 | 1 | $dateTime['timeEnd'] = (isset($eventFirstRepetition->end_repeat)) ? date('g:i A', strtotime($eventFirstRepetition->end_repeat)) : ''; |
|||||
| 232 | 1 | $dateTime['repeatUntil'] = date('d/m/Y', strtotime($event->repeat_until)); |
|||||
| 233 | 1 | $dateTime['multipleDates'] = $event->multiple_dates; |
|||||
| 234 | |||||||
| 235 | 1 | $multiple_teachers = LaravelEventsCalendar::getCollectionIdsSeparatedByComma($event->teachers); |
|||||
|
0 ignored issues
–
show
The method
getCollectionIdsSeparatedByComma() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 236 | 1 | $multiple_organizers = LaravelEventsCalendar::getCollectionIdsSeparatedByComma($event->organizers); |
|||||
| 237 | |||||||
| 238 | 1 | return view('laravel-events-calendar::events.edit', compact('event')) |
|||||
| 239 | 1 | ->with('eventCategories', $eventCategories) |
|||||
| 240 | 1 | ->with('users', $users) |
|||||
| 241 | 1 | ->with('teachers', $teachers) |
|||||
| 242 | 1 | ->with('multiple_teachers', $multiple_teachers) |
|||||
| 243 | 1 | ->with('organizers', $organizers) |
|||||
| 244 | 1 | ->with('multiple_organizers', $multiple_organizers) |
|||||
| 245 | 1 | ->with('venues', $venues) |
|||||
| 246 | 1 | ->with('dateTime', $dateTime) |
|||||
| 247 | 1 | ->with('authorUserId', $authorUserId); |
|||||
| 248 | } else { |
||||||
| 249 | return redirect()->route('home')->with('message', __('auth.not_allowed_to_access')); |
||||||
| 250 | } |
||||||
| 251 | } |
||||||
| 252 | |||||||
| 253 | /***************************************************************************/ |
||||||
| 254 | |||||||
| 255 | /** |
||||||
| 256 | * Update the specified resource in storage. |
||||||
| 257 | * |
||||||
| 258 | * @param \Illuminate\Http\Request $request |
||||||
| 259 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 260 | * @return \Illuminate\Http\RedirectResponse |
||||||
| 261 | */ |
||||||
| 262 | 2 | public function update(Request $request, Event $event) |
|||||
| 263 | { |
||||||
| 264 | // Validate form datas |
||||||
| 265 | 2 | $validator = $this->eventsValidator($request); |
|||||
| 266 | 2 | if ($validator->fails()) { |
|||||
| 267 | 1 | return back()->withErrors($validator)->withInput(); |
|||||
| 268 | } |
||||||
| 269 | |||||||
| 270 | 1 | $event->preSave($request->all(), $request->file('image')); |
|||||
|
0 ignored issues
–
show
It seems like
$request->file('image') can also be of type Illuminate\Http\UploadedFile[] and array; however, parameter $eventPicture of DavideCasiraghi\LaravelE...Models\Event::preSave() does only seem to accept Illuminate\Http\UploadedFile, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 271 | 1 | $event->save(); |
|||||
| 272 | |||||||
| 273 | 1 | $this->saveEventRepetitions($request, $event->id); |
|||||
| 274 | 1 | $this->updateTeachersMultiRelationships($request->get('multiple_teachers'), $event); |
|||||
| 275 | 1 | $this->updateOrganizersMultiRelationships($request->get('multiple_organizers'), $event); |
|||||
| 276 | |||||||
| 277 | 1 | $this->cleanActiveEventsCaches(); |
|||||
| 278 | |||||||
| 279 | 1 | return redirect()->route('events.index') |
|||||
| 280 | 1 | ->with('success', __('laravel-events-calendar::messages.event_updated_successfully')); |
|||||
| 281 | } |
||||||
| 282 | |||||||
| 283 | /***************************************************************************/ |
||||||
| 284 | |||||||
| 285 | /** |
||||||
| 286 | * Remove the specified resource from storage. |
||||||
| 287 | * |
||||||
| 288 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 289 | * @return \Illuminate\Http\RedirectResponse |
||||||
| 290 | */ |
||||||
| 291 | 1 | public function destroy(Event $event) |
|||||
| 292 | { |
||||||
| 293 | 1 | DB::table('event_repetitions') |
|||||
| 294 | 1 | ->where('event_id', $event->id) |
|||||
| 295 | 1 | ->delete(); |
|||||
| 296 | |||||||
| 297 | 1 | $event->delete(); |
|||||
| 298 | |||||||
| 299 | 1 | return redirect()->route('events.index') |
|||||
| 300 | 1 | ->with('success', __('laravel-events-calendar::messages.event_deleted_successfully')); |
|||||
| 301 | } |
||||||
| 302 | |||||||
| 303 | /***************************************************************************/ |
||||||
| 304 | |||||||
| 305 | /** |
||||||
| 306 | * To save event repetitions for create and update methods. |
||||||
| 307 | * |
||||||
| 308 | * @param \Illuminate\Http\Request $request |
||||||
| 309 | * @param int $eventId |
||||||
| 310 | * @return void |
||||||
| 311 | */ |
||||||
| 312 | 33 | public function saveEventRepetitions(Request $request, int $eventId): void |
|||||
| 313 | { |
||||||
| 314 | 33 | EventRepetition::deletePreviousRepetitions($eventId); |
|||||
| 315 | |||||||
| 316 | // Saving repetitions - If it's a single event will be stored with just one repetition |
||||||
| 317 | //$timeStart = date('H:i:s', strtotime($request->get('time_start'))); |
||||||
| 318 | //$timeEnd = date('H:i:s', strtotime($request->get('time_end'))); |
||||||
| 319 | //$timeStart = $request->get('time_start'); |
||||||
| 320 | //$timeEnd = $request->get('time_end'); |
||||||
| 321 | 33 | $timeStart = date('H:i', strtotime($request->get('time_start'))); |
|||||
| 322 | 33 | $timeEnd = date('H:i', strtotime($request->get('time_end'))); |
|||||
| 323 | |||||||
| 324 | 33 | switch ($request->get('repeat_type')) { |
|||||
| 325 | 33 | case '1': // noRepeat |
|||||
| 326 | 25 | $eventRepetition = new EventRepetition(); |
|||||
| 327 | 25 | $eventRepetition->event_id = $eventId; |
|||||
| 328 | |||||||
| 329 | 25 | $dateStart = implode('-', array_reverse(explode('/', $request->get('startDate')))); |
|||||
| 330 | 25 | $dateEnd = implode('-', array_reverse(explode('/', $request->get('endDate')))); |
|||||
| 331 | |||||||
| 332 | 25 | $eventRepetition->start_repeat = $dateStart.' '.$timeStart; |
|||||
| 333 | 25 | $eventRepetition->end_repeat = $dateEnd.' '.$timeEnd; |
|||||
| 334 | 25 | $eventRepetition->save(); |
|||||
| 335 | |||||||
| 336 | 25 | break; |
|||||
| 337 | |||||||
| 338 | 8 | case '2': // repeatWeekly |
|||||
| 339 | // Convert the start date in a format that can be used for strtotime |
||||||
| 340 | 2 | $startDate = implode('-', array_reverse(explode('/', $request->get('startDate')))); |
|||||
| 341 | |||||||
| 342 | // Calculate repeat until day |
||||||
| 343 | 2 | $repeatUntilDate = implode('-', array_reverse(explode('/', $request->get('repeat_until')))); |
|||||
| 344 | 2 | EventRepetition::saveWeeklyRepeatDates($eventId, $request->get('repeat_weekly_on_day'), $startDate, $repeatUntilDate, $timeStart, $timeEnd); |
|||||
|
0 ignored issues
–
show
It seems like
$request->get('repeat_weekly_on_day') can also be of type null; however, parameter $weekDays of DavideCasiraghi\LaravelE...saveWeeklyRepeatDates() does only seem to accept array, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 345 | |||||||
| 346 | 2 | break; |
|||||
| 347 | |||||||
| 348 | 6 | case '3': //repeatMonthly |
|||||
| 349 | // Same of repeatWeekly |
||||||
| 350 | 5 | $startDate = implode('-', array_reverse(explode('/', $request->get('startDate')))); |
|||||
| 351 | 5 | $repeatUntilDate = implode('-', array_reverse(explode('/', $request->get('repeat_until')))); |
|||||
| 352 | |||||||
| 353 | // Get the array with month repeat details |
||||||
| 354 | 5 | $monthRepeatDatas = explode('|', $request->get('on_monthly_kind')); |
|||||
| 355 | //dump("pp_1"); |
||||||
| 356 | 5 | EventRepetition::saveMonthlyRepeatDates($eventId, $monthRepeatDatas, $startDate, $repeatUntilDate, $timeStart, $timeEnd); |
|||||
| 357 | |||||||
| 358 | 5 | break; |
|||||
| 359 | |||||||
| 360 | 1 | case '4': //repeatMultipleDays |
|||||
| 361 | // Same of repeatWeekly |
||||||
| 362 | 1 | $startDate = implode('-', array_reverse(explode('/', $request->get('startDate')))); |
|||||
| 363 | |||||||
| 364 | // Get the array with single day repeat details |
||||||
| 365 | 1 | $singleDaysRepeatDatas = explode(',', $request->get('multiple_dates')); |
|||||
| 366 | |||||||
| 367 | 1 | EventRepetition::saveMultipleRepeatDates($eventId, $singleDaysRepeatDatas, $startDate, $timeStart, $timeEnd); |
|||||
| 368 | |||||||
| 369 | 1 | break; |
|||||
| 370 | } |
||||||
| 371 | 33 | } |
|||||
| 372 | |||||||
| 373 | /***************************************************************************/ |
||||||
| 374 | |||||||
| 375 | /** |
||||||
| 376 | * Send the Misuse mail. |
||||||
| 377 | * |
||||||
| 378 | * @param \Illuminate\Http\Request $request |
||||||
| 379 | * @return \Illuminate\Http\RedirectResponse |
||||||
| 380 | */ |
||||||
| 381 | public function reportMisuse(Request $request) |
||||||
| 382 | { |
||||||
| 383 | $report = []; |
||||||
| 384 | |||||||
| 385 | //$report['senderEmail'] = '[email protected]'; |
||||||
| 386 | $report['senderEmail'] = $request->user_email; |
||||||
| 387 | $report['senderName'] = 'Anonymus User'; |
||||||
| 388 | $report['subject'] = 'Report misuse form'; |
||||||
| 389 | //$report['adminEmail'] = env('ADMIN_MAIL'); |
||||||
| 390 | $report['creatorEmail'] = $this->getCreatorEmail($request->created_by); |
||||||
| 391 | |||||||
| 392 | $report['message_misuse'] = $request->message_misuse; |
||||||
| 393 | $report['event_title'] = $request->event_title; |
||||||
| 394 | $report['event_id'] = $request->event_id; |
||||||
| 395 | $report['event_slug'] = $request->slug; |
||||||
| 396 | |||||||
| 397 | $report['reason'] = LaravelEventsCalendar::getReportMisuseReasonDescription($request->reason); |
||||||
|
0 ignored issues
–
show
The method
getReportMisuseReasonDescription() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 398 | |||||||
| 399 | //Mail::to($request->user())->send(new ReportMisuse($report)); |
||||||
| 400 | Mail::to(env('ADMIN_MAIL'))->send(new ReportMisuse($report)); |
||||||
| 401 | |||||||
| 402 | return redirect()->route('events.misuse-thankyou'); |
||||||
| 403 | } |
||||||
| 404 | |||||||
| 405 | /***************************************************************************/ |
||||||
| 406 | |||||||
| 407 | /** |
||||||
| 408 | * Send the mail to the Organizer (from the event modal in the event show view). |
||||||
| 409 | * |
||||||
| 410 | * @param \Illuminate\Http\Request $request |
||||||
| 411 | * @return \Illuminate\Http\RedirectResponse |
||||||
| 412 | */ |
||||||
| 413 | public function mailToOrganizer(Request $request) |
||||||
| 414 | { |
||||||
| 415 | $message = []; |
||||||
| 416 | $message['senderEmail'] = $request->user_email; |
||||||
| 417 | $message['senderName'] = $request->user_name; |
||||||
| 418 | $message['subject'] = 'Request from the Global CI Calendar'; |
||||||
| 419 | //$message['emailTo'] = $organizersEmails; |
||||||
| 420 | |||||||
| 421 | $message['message'] = $request->message; |
||||||
| 422 | $message['event_title'] = $request->event_title; |
||||||
| 423 | $message['event_id'] = $request->event_id; |
||||||
| 424 | $message['event_slug'] = $request->slug; |
||||||
| 425 | |||||||
| 426 | /* |
||||||
| 427 | $eventOrganizers = Event::find($request->event_id)->organizers; |
||||||
| 428 | foreach ($eventOrganizers as $eventOrganizer) { |
||||||
| 429 | Mail::to($eventOrganizer->email)->send(new ContactOrganizer($message)); |
||||||
| 430 | }*/ |
||||||
| 431 | |||||||
| 432 | Mail::to($request->contact_email)->send(new ContactOrganizer($message)); |
||||||
| 433 | |||||||
| 434 | return redirect()->route('events.organizer-sent'); |
||||||
| 435 | } |
||||||
| 436 | |||||||
| 437 | /***************************************************************************/ |
||||||
| 438 | |||||||
| 439 | /** |
||||||
| 440 | * Display the thank you view after the mail to the organizer is sent (called by /mailToOrganizer/sent route). |
||||||
| 441 | * |
||||||
| 442 | * @return \Illuminate\View\View |
||||||
| 443 | */ |
||||||
| 444 | 1 | public function mailToOrganizerSent() |
|||||
| 445 | { |
||||||
| 446 | 1 | return view('laravel-events-calendar::emails.contact.organizer-sent'); |
|||||
| 447 | } |
||||||
| 448 | |||||||
| 449 | /***************************************************************************/ |
||||||
| 450 | |||||||
| 451 | /** |
||||||
| 452 | * Display the thank you view after the misuse report mail is sent (called by /misuse/thankyou route). |
||||||
| 453 | * |
||||||
| 454 | * @return \Illuminate\View\View |
||||||
| 455 | */ |
||||||
| 456 | 1 | public function reportMisuseThankyou() |
|||||
| 457 | { |
||||||
| 458 | 1 | return view('laravel-events-calendar::emails.report-thankyou'); |
|||||
| 459 | } |
||||||
| 460 | |||||||
| 461 | /***************************************************************************/ |
||||||
| 462 | |||||||
| 463 | /** |
||||||
| 464 | * Return the HTML of the monthly select dropdown - inspired by - https://www.theindychannel.com/calendar |
||||||
| 465 | * - Used by the AJAX in the event repeat view - |
||||||
| 466 | * - The HTML contain a <select></select> with four <options></options>. |
||||||
| 467 | * |
||||||
| 468 | * @param \Illuminate\Http\Request $request - Just the day |
||||||
| 469 | * @return string |
||||||
| 470 | */ |
||||||
| 471 | 1 | public function calculateMonthlySelectOptions(Request $request) |
|||||
| 472 | { |
||||||
| 473 | 1 | $monthlySelectOptions = []; |
|||||
| 474 | 1 | $date = implode('-', array_reverse(explode('/', $request->day))); // Our YYYY-MM-DD date string |
|||||
| 475 | 1 | $unixTimestamp = strtotime($date); // Convert the date string into a unix timestamp. |
|||||
| 476 | 1 | $dayOfWeekString = date('l', $unixTimestamp); // Monday | Tuesday | Wednesday | .. |
|||||
| 477 | |||||||
| 478 | // Same day number - eg. "the 28th day of the month" |
||||||
| 479 | 1 | $dateArray = explode('/', $request->day); |
|||||
| 480 | 1 | $dayNumber = ltrim($dateArray[0], '0'); // remove the 0 in front of a day number eg. 02/10/2018 |
|||||
| 481 | |||||||
| 482 | 1 | $format = __('laravel-events-calendar::ordinalDays.the_'.($dayNumber).'_x_of_the_month'); |
|||||
| 483 | 1 | $repeatText = sprintf($format, 'day'); |
|||||
|
0 ignored issues
–
show
It seems like
$format can also be of type array and array; however, parameter $format of sprintf() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 484 | |||||||
| 485 | 1 | array_push($monthlySelectOptions, [ |
|||||
| 486 | 1 | 'value' => '0|'.$dayNumber, |
|||||
| 487 | 1 | 'text' => $repeatText, |
|||||
| 488 | ]); |
||||||
| 489 | |||||||
| 490 | // Same weekday/week of the month - eg. the "1st Monday" 1|1|1 (first week, monday) |
||||||
| 491 | 1 | $dayOfWeekValue = date('N', $unixTimestamp); // 1 (for Monday) through 7 (for Sunday) |
|||||
| 492 | 1 | $weekOfTheMonth = LaravelEventsCalendar::weekdayNumberOfMonth($date, $dayOfWeekValue); // 1 | 2 | 3 | 4 | 5 |
|||||
|
0 ignored issues
–
show
The method
weekdayNumberOfMonth() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 493 | |||||||
| 494 | 1 | $format = __('laravel-events-calendar::ordinalDays.the_'.($weekOfTheMonth).'_x_of_the_month'); |
|||||
| 495 | 1 | $repeatText = sprintf($format, $dayOfWeekString); |
|||||
| 496 | |||||||
| 497 | 1 | array_push($monthlySelectOptions, [ |
|||||
| 498 | 1 | 'value' => '1|'.$weekOfTheMonth.'|'.$dayOfWeekValue, |
|||||
| 499 | 1 | 'text' => $repeatText, |
|||||
| 500 | ]); |
||||||
| 501 | |||||||
| 502 | // Same day of the month (from the end) - the 3rd to last day (0 if last day, 1 if 2nd to last day, , 2 if 3rd to last day) |
||||||
| 503 | 1 | $dayOfMonthFromTheEnd = LaravelEventsCalendar::dayOfMonthFromTheEnd($unixTimestamp); // 1 | 2 | 3 | 4 | 5 |
|||||
|
0 ignored issues
–
show
The method
dayOfMonthFromTheEnd() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 504 | |||||||
| 505 | 1 | $format = __('laravel-events-calendar::ordinalDays.the_'.($dayOfMonthFromTheEnd + 1).'_to_last_x_of_the_month'); |
|||||
| 506 | 1 | $repeatText = sprintf($format, 'day'); |
|||||
| 507 | |||||||
| 508 | 1 | array_push($monthlySelectOptions, [ |
|||||
| 509 | 1 | 'value' => '2|'.$dayOfMonthFromTheEnd, |
|||||
| 510 | 1 | 'text' => $repeatText, |
|||||
| 511 | ]); |
||||||
| 512 | |||||||
| 513 | // Same weekday/week of the month (from the end) - the last Friday - (0 if last Friday, 1 if the 2nd to last Friday, 2 if the 3nd to last Friday) |
||||||
| 514 | 1 | $weekOfMonthFromTheEnd = LaravelEventsCalendar::weekOfMonthFromTheEnd($unixTimestamp); // 1 | 2 | 3 | 4 | 5 |
|||||
|
0 ignored issues
–
show
The method
weekOfMonthFromTheEnd() does not exist on DavideCasiraghi\LaravelE...s\LaravelEventsCalendar. Since you implemented __callStatic, consider adding a @method annotation.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 515 | |||||||
| 516 | 1 | if ($weekOfMonthFromTheEnd == 1) { |
|||||
| 517 | $weekValue = 0; |
||||||
| 518 | } else { |
||||||
| 519 | 1 | $weekValue = $weekOfMonthFromTheEnd - 1; |
|||||
| 520 | } |
||||||
| 521 | |||||||
| 522 | 1 | $format = __('laravel-events-calendar::ordinalDays.the_'.($weekOfMonthFromTheEnd).'_to_last_x_of_the_month'); |
|||||
| 523 | 1 | $repeatText = sprintf($format, $dayOfWeekString); |
|||||
| 524 | |||||||
| 525 | 1 | array_push($monthlySelectOptions, [ |
|||||
| 526 | 1 | 'value' => '3|'.$weekValue.'|'.$dayOfWeekValue, |
|||||
| 527 | 1 | 'text' => $repeatText, |
|||||
| 528 | ]); |
||||||
| 529 | |||||||
| 530 | // GENERATE the HTML to return |
||||||
| 531 | 1 | $selectTitle = __('laravel-events-calendar::general.select_repeat_monthly_kind'); |
|||||
| 532 | 1 | $onMonthlyKindSelect = "<select name='on_monthly_kind' id='on_monthly_kind' class='selectpicker' title='".$selectTitle."'>"; |
|||||
|
0 ignored issues
–
show
Are you sure
$selectTitle of type array|string can be used in concatenation?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 533 | 1 | foreach ($monthlySelectOptions as $key => $monthlySelectOption) { |
|||||
| 534 | 1 | $onMonthlyKindSelect .= "<option value='".$monthlySelectOption['value']."'>".$monthlySelectOption['text'].'</option>'; |
|||||
| 535 | } |
||||||
| 536 | 1 | $onMonthlyKindSelect .= '</select>'; |
|||||
| 537 | |||||||
| 538 | 1 | return $onMonthlyKindSelect; |
|||||
| 539 | } |
||||||
| 540 | |||||||
| 541 | /***********************************************************************/ |
||||||
| 542 | |||||||
| 543 | /** |
||||||
| 544 | * Get creator email. |
||||||
| 545 | * |
||||||
| 546 | * @param int $created_by |
||||||
| 547 | * @return \Illuminate\Foundation\Auth\User |
||||||
| 548 | */ |
||||||
| 549 | public function getCreatorEmail(int $created_by) |
||||||
| 550 | { |
||||||
| 551 | $creatorEmail = DB::table('users') // Used to send the Report misuse (not in english) |
||||||
| 552 | ->select('email') |
||||||
| 553 | ->where('id', $created_by) |
||||||
| 554 | ->first(); |
||||||
| 555 | |||||||
| 556 | $ret = $creatorEmail->email; |
||||||
| 557 | |||||||
| 558 | return $ret; |
||||||
| 559 | } |
||||||
| 560 | |||||||
| 561 | /***************************************************************************/ |
||||||
| 562 | |||||||
| 563 | /** |
||||||
| 564 | * Return the event by SLUG. (eg. http://websitename.com/event/xxxx). |
||||||
| 565 | * |
||||||
| 566 | * @param string $slug |
||||||
| 567 | * @return \Illuminate\View\View |
||||||
| 568 | */ |
||||||
| 569 | 1 | public function eventBySlug(string $slug) |
|||||
| 570 | { |
||||||
| 571 | 1 | $event = Event::where('slug', $slug)->first(); |
|||||
| 572 | |||||||
| 573 | 1 | if (is_null($event)) { |
|||||
| 574 | abort(404); |
||||||
| 575 | } |
||||||
| 576 | |||||||
| 577 | 1 | $firstRpDates = EventRepetition::getFirstEventRpDatesByEventId($event->id); |
|||||
| 578 | |||||||
| 579 | 1 | return $this->show($event, $firstRpDates); |
|||||
| 580 | } |
||||||
| 581 | |||||||
| 582 | /***************************************************************************/ |
||||||
| 583 | |||||||
| 584 | /** |
||||||
| 585 | * Return the event by SLUG. (eg. http://websitename.com/event/xxxx/300). |
||||||
| 586 | * @param string $slug |
||||||
| 587 | * @param int $repetitionId |
||||||
| 588 | * @return \Illuminate\View\View |
||||||
| 589 | */ |
||||||
| 590 | 4 | public function eventBySlugAndRepetition(string $slug, int $repetitionId) |
|||||
| 591 | { |
||||||
| 592 | 4 | $event = Event::where('slug', $slug)->first(); |
|||||
| 593 | |||||||
| 594 | 4 | if (is_null($event)) { |
|||||
| 595 | abort(404); |
||||||
| 596 | } |
||||||
| 597 | |||||||
| 598 | 4 | $firstRpDates = EventRepetition::getFirstEventRpDatesByRepetitionId($repetitionId); |
|||||
| 599 | |||||||
| 600 | // If not found get the first repetion of the event in the future. |
||||||
| 601 | 4 | if (empty($firstRpDates)) { |
|||||
| 602 | 1 | $firstRpDates = EventRepetition::getFirstEventRpDatesByEventId($event->id); |
|||||
| 603 | } |
||||||
| 604 | |||||||
| 605 | 4 | return $this->show($event, $firstRpDates); |
|||||
| 606 | } |
||||||
| 607 | |||||||
| 608 | /***************************************************************************/ |
||||||
| 609 | |||||||
| 610 | /** |
||||||
| 611 | * Return the Event validator with all the defined constraint. |
||||||
| 612 | * @param \Illuminate\Http\Request $request |
||||||
| 613 | * @return \Illuminate\Contracts\Validation\Validator |
||||||
| 614 | */ |
||||||
| 615 | 34 | public function eventsValidator(Request $request) |
|||||
| 616 | { |
||||||
| 617 | $rules = [ |
||||||
| 618 | 34 | 'title' => 'required', |
|||||
| 619 | 34 | 'description' => 'required', |
|||||
| 620 | 34 | 'category_id' => 'required', |
|||||
| 621 | 34 | 'venue_id' => 'required', |
|||||
| 622 | 34 | 'startDate' => 'required', |
|||||
| 623 | 34 | 'endDate' => 'required', |
|||||
| 624 | 34 | 'repeat_until' => Rule::requiredIf($request->repeat_type == 2 || $request->repeat_type == 3), |
|||||
| 625 | 34 | 'repeat_weekly_on_day' => Rule::requiredIf($request->repeat_type == 2), |
|||||
| 626 | 34 | 'on_monthly_kind' => Rule::requiredIf($request->repeat_type == 3), |
|||||
| 627 | 34 | 'contact_email' => 'nullable|email', |
|||||
| 628 | 34 | 'facebook_event_link' => 'nullable|url', |
|||||
| 629 | 34 | 'website_event_link' => 'nullable|url', |
|||||
| 630 | // 'image' => 'nullable|image|mimes:jpeg,jpg,png|max:3000', // BUG create problems to validate on edit. Fix this after the rollout |
||||||
| 631 | ]; |
||||||
| 632 | 34 | if ($request->hasFile('image')) { |
|||||
| 633 | $rules['image'] = 'nullable|image|mimes:jpeg,jpg,png|max:5000'; |
||||||
| 634 | } |
||||||
| 635 | |||||||
| 636 | $messages = [ |
||||||
| 637 | 34 | 'repeat_weekly_on_day[].required' => 'Please specify which day of the week is repeting the event.', |
|||||
| 638 | 'on_monthly_kind.required' => 'Please specify the kind of monthly repetion', |
||||||
| 639 | 'endDate.same' => 'If the event is repetitive the start date and end date must match', |
||||||
| 640 | 'facebook_event_link.url' => 'The facebook link is invalid. It should start with https://', |
||||||
| 641 | 'website_event_link.url' => 'The website link is invalid. It should start with https://', |
||||||
| 642 | 'image.max' => 'The maximum image size is 5MB. If you need to resize it you can use: www.simpleimageresizer.com', |
||||||
| 643 | ]; |
||||||
| 644 | |||||||
| 645 | 34 | $validator = Validator::make($request->all(), $rules, $messages); |
|||||
| 646 | |||||||
| 647 | // End date and start date must match if the event is repetitive |
||||||
| 648 | $validator->sometimes('endDate', 'same:startDate', function ($input) { |
||||||
| 649 | 34 | return $input->repeat_type > 1; |
|||||
| 650 | 34 | }); |
|||||
| 651 | |||||||
| 652 | 34 | return $validator; |
|||||
| 653 | } |
||||||
| 654 | |||||||
| 655 | /***************************************************************************/ |
||||||
| 656 | |||||||
| 657 | /** |
||||||
| 658 | * Update multi relationships with teachers table. |
||||||
| 659 | * |
||||||
| 660 | * @param string $multipleTeachers |
||||||
| 661 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 662 | * @return void |
||||||
| 663 | */ |
||||||
| 664 | 33 | public function updateTeachersMultiRelationships($multipleTeachers, $event) |
|||||
| 665 | { |
||||||
| 666 | 33 | if ($multipleTeachers) { |
|||||
| 667 | 2 | $multipleTeachersArray = explode(',', $multipleTeachers); |
|||||
| 668 | 2 | $event->teachers()->sync($multipleTeachersArray); |
|||||
| 669 | } else { |
||||||
| 670 | 31 | $event->teachers()->sync([]); |
|||||
| 671 | } |
||||||
| 672 | 33 | } |
|||||
| 673 | |||||||
| 674 | /***************************************************************************/ |
||||||
| 675 | |||||||
| 676 | /** |
||||||
| 677 | * Update multi relationships with organizers table. |
||||||
| 678 | * |
||||||
| 679 | * @param string $multipleOrganizers |
||||||
| 680 | * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Event $event |
||||||
| 681 | * @return void |
||||||
| 682 | */ |
||||||
| 683 | 33 | public function updateOrganizersMultiRelationships($multipleOrganizers, $event) |
|||||
| 684 | { |
||||||
| 685 | 33 | if ($multipleOrganizers) { |
|||||
| 686 | $multipleOrganizersArray = explode(',', $multipleOrganizers); |
||||||
| 687 | $event->organizers()->sync($multipleOrganizersArray); |
||||||
| 688 | } else { |
||||||
| 689 | 33 | $event->organizers()->sync([]); |
|||||
| 690 | } |
||||||
| 691 | 33 | } |
|||||
| 692 | |||||||
| 693 | /***************************************************************************/ |
||||||
| 694 | |||||||
| 695 | /** |
||||||
| 696 | * Clean caches related to active events. |
||||||
| 697 | * |
||||||
| 698 | * @return void |
||||||
| 699 | */ |
||||||
| 700 | 33 | public function cleanActiveEventsCaches() |
|||||
| 701 | { |
||||||
| 702 | 33 | Cache::forget('active_events'); |
|||||
| 703 | 33 | Cache::forget('active_events_map_markers_json'); |
|||||
| 704 | 33 | Cache::forget('active_events_map_markers_db_data'); |
|||||
| 705 | 33 | } |
|||||
| 706 | |||||||
| 707 | /***************************************************************************/ |
||||||
| 708 | } |
||||||
| 709 |