Issues (63)

src/Http/Controllers/EventVenueController.php (2 issues)

Labels
Severity
1
<?php
2
3
namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers;
4
5
use DavideCasiraghi\LaravelEventsCalendar\Models\Country;
6
use DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue;
7
use DavideCasiraghi\LaravelEventsCalendar\Models\Region;
8
use Illuminate\Foundation\Auth\User;
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Facades\Auth;
11
use Illuminate\Support\Facades\Cache;
12
use Illuminate\Support\Facades\DB;
13
use Validator;
14
15
class EventVenueController extends Controller
16
{
17
    /* Restrict the access to this resource just to logged in users except show view */
18 15
    public function __construct()
19
    {
20 15
        $this->middleware('auth', ['except' => ['show']]);
21 15
    }
22
23
    /***************************************************************************/
24
25
    /**
26
     * Display a listing of the resource.
27
     *
28
     * @return \Illuminate\View\View
29
     */
30 3
    public function index(Request $request)
31
    {
32 3
        $countries = Country::getCountries();
33 3
        $regions = Region::listsTranslations('name')->pluck('name', 'id');
34
35 3
        $searchKeywords = $request->input('keywords');
36 3
        $searchCountry = $request->input('country_id');
37
38
        // To show just the veues created by the the user - If admin or super admin is set to null show all the venues
39 3
        $authorUserId = ($this->getLoggedAuthorId()) ? $this->getLoggedAuthorId() : null;
40
41 3
        if ($searchKeywords || $searchCountry) {
42 1
            $eventVenues = DB::table('event_venues')
43
                ->when($authorUserId, function ($query, $authorUserId) {
44
                    return $query->where('created_by', $authorUserId);
45 1
                })
46
                ->when($searchKeywords, function ($query, $searchKeywords) {
47 1
                    return $query->where('name', $searchKeywords)->orWhere('name', 'like', '%'.$searchKeywords.'%');
48 1
                })
49
                ->when($searchCountry, function ($query, $searchCountry) {
50
                    return $query->where('country_id', '=', $searchCountry);
51 1
                })
52 1
                ->orderBy('name')
53 1
                ->paginate(20);
54
        } else {
55
            $eventVenues = EventVenue::
56
                when($authorUserId, function ($query, $authorUserId) {
57
                    return $query->where('created_by', $authorUserId);
58 2
                })
59 2
                ->orderBy('name')
60 2
                ->paginate(20);
61
        }
62
        //dd(DB::getQueryLog());
63
64 3
        return view('laravel-events-calendar::eventVenues.index', compact('eventVenues'))
65 3
                ->with('i', (request()->input('page', 1) - 1) * 20)
66 3
                ->with('countries', $countries)
67 3
                ->with('regions', $regions)
68 3
                ->with('searchKeywords', $searchKeywords)
69 3
                ->with('searchCountry', $searchCountry);
70
    }
71
72
    /***************************************************************************/
73
74
    /**
75
     * Show the form for creating a new resource.
76
     *
77
     * @return \Illuminate\View\View
78
     */
79 1
    public function create()
80
    {
81 1
        $authorUserId = $this->getLoggedAuthorId();
82 1
        $users = User::pluck('name', 'id');
83 1
        $countries = Country::getCountries();
84 1
        $regions = [];
85
86 1
        return view('laravel-events-calendar::eventVenues.create')
87 1
                ->with('countries', $countries)
88 1
                ->with('regions', $regions)
89 1
                ->with('users', $users)
90 1
                ->with('authorUserId', $authorUserId);
91
    }
92
93
    /***************************************************************************/
94
95
    /**
96
     * Store a newly created resource in storage.
97
     *
98
     * @param  \Illuminate\Http\Request  $request
99
     * @return \Illuminate\Http\RedirectResponse
100
     */
101 4
    public function store(Request $request)
102
    {
103
        // Validate form datas
104 4
        $validator = $this->eventsVenueValidator($request);
105 4
        if ($validator->fails()) {
106 1
            return back()->withErrors($validator)->withInput();
107
        }
108
109 3
        $eventVenue = new EventVenue();
110 3
        $eventVenue->preSave($request);
111 3
        $eventVenue->save();
112
113 3
        return redirect()->route('eventVenues.index')
114 3
                        ->with('success', __('laravel-events-calendar::messages.venue_added_successfully'));
115
    }
116
117
    /***************************************************************************/
118
119
    /**
120
     * Display the specified resource.
121
     *
122
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
123
     * @return \Illuminate\View\View
124
     */
125 1
    public function show(EventVenue $eventVenue)
126
    {
127 1
        $country = DB::table('countries')
128 1
                ->select('id', 'name', 'continent_id')
129 1
                ->where('id', $eventVenue->country_id)
130 1
                ->first();
131
132 1
        return view('laravel-events-calendar::eventVenues.show', compact('eventVenue'))->with('country', $country);
133
    }
134
135
    /***************************************************************************/
136
137
    /**
138
     * Show the form for editing the specified resource.
139
     *
140
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
141
     * @return \Illuminate\Http\RedirectResponse | \Illuminate\View\View
142
     */
143 1
    public function edit(EventVenue $eventVenue)
144
    {
145
        //if (Auth::user()->id == $eventVenue->created_by || Auth::user()->isSuperAdmin() || Auth::user()->isAdmin()) {
146
        //if (Auth::user()->id == $eventVenue->created_by) {
147 1
        if (Auth::user()->id == $eventVenue->created_by || Auth::user()->group == 1 || Auth::user()->group == 2) {
0 ignored issues
show
Accessing id on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
Accessing group on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
148 1
            $authorUserId = $this->getLoggedAuthorId();
149 1
            $users = User::pluck('name', 'id');
150 1
            $countries = Country::getCountries();
151 1
            $regions = Region::getRegionsByCountry($eventVenue->country_id);
152
153
            // Invalidate cache tags for events map - This is not needed in event create() because the marker is created when an event gets creted.
154 1
            Cache::forget('active_events_map_markers_json');
155 1
            Cache::forget('active_events_map_markers_db_data');
156
157 1
            return view('laravel-events-calendar::eventVenues.edit', compact('eventVenue'))
158 1
                ->with('countries', $countries)
159 1
                ->with('regions', $regions)
160 1
                ->with('users', $users)
161 1
                ->with('authorUserId', $authorUserId);
162
        } else {
163
            return redirect()->route('home')->with('message', __('auth.not_allowed_to_access'));
164
        }
165
    }
166
167
    /***************************************************************************/
168
169
    /**
170
     * Update the specified resource in storage.
171
     *
172
     * @param  \Illuminate\Http\Request  $request
173
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
174
     * @return \Illuminate\Http\RedirectResponse
175
     */
176 2
    public function update(Request $request, EventVenue $eventVenue)
177
    {
178
        // Validate form datas
179 2
        $validator = $this->eventsVenueValidator($request);
180 2
        if ($validator->fails()) {
181 1
            return back()->withErrors($validator)->withInput();
182
        }
183
184
        //$eventVenue->update($request->all());
185 1
        $eventVenue->preSave($request);
186 1
        $eventVenue->save();
187
188 1
        return redirect()->route('eventVenues.index')
189 1
                        ->with('success', __('laravel-events-calendar::messages.venue_updated_successfully'));
190
    }
191
192
    /***************************************************************************/
193
194
    /**
195
     * Remove the specified resource from storage.
196
     *
197
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventVenue  $eventVenue
198
     * @return \Illuminate\Http\RedirectResponse
199
     */
200 2
    public function destroy(EventVenue $eventVenue)
201
    {
202 2
        if (EventVenue::venueContainsEvents($eventVenue->id)) {
203 1
            return redirect()->route('eventVenues.index')
204 1
                            ->with('success', __('laravel-events-calendar::messages.venue_not_deleted'));
205
        } else {
206 1
            $eventVenue->delete();
207
208 1
            return redirect()->route('eventVenues.index')
209 1
                            ->with('success', __('laravel-events-calendar::messages.venue_deleted_successfully'));
210
        }
211
    }
212
213
    /***************************************************************************/
214
215
    /**
216
     * Open a modal in the event view when 'create new venue' button is clicked.
217
     *
218
     * @return \Illuminate\View\View
219
     */
220
    public function modal()
221
    {
222
        $countries = Country::getCountries();
223
        $regions = [];
224
        $users = User::pluck('name', 'id');
225
226
        return view('laravel-events-calendar::eventVenues.modal')
227
                    ->with('countries', $countries)
228
                    ->with('regions', $regions)
229
                    ->with('users', $users);
230
    }
231
232
    /***************************************************************************/
233
234
    /**
235
     * Store a newly created VENUE from the create event view modal in storage.
236
     *
237
     * @param  \Illuminate\Http\Request  $request
238
     * @return \Illuminate\Http\JsonResponse
239
     */
240 1
    public function storeFromModal(Request $request)
241
    {
242 1
        $eventVenue = new EventVenue();
243 1
        $eventVenue->preSave($request);
244 1
        $eventVenue->save();
245
246 1
        return response()->json([
247 1
            'eventVenueId' => $eventVenue->id,
248 1
            'eventVenueName' => $eventVenue->name,
249
        ]);
250
    }
251
252
    /***************************************************************************/
253
254
    /**
255
     * Return the Venue validator with all the defined constraint.
256
     *
257
     * @param  \Illuminate\Http\Request  $request
258
     * @return \Illuminate\Contracts\Validation\Validator
259
     */
260 6
    public function eventsVenueValidator(Request $request)
261
    {
262
        $rules = [
263 6
            'name' => 'required',
264
            'city' => 'required',
265
            'country_id' => 'required',
266
            'website' => 'nullable|url',
267
        ];
268 6
        $messages = [];
269
270 6
        $validator = Validator::make($request->all(), $rules, $messages);
271
272 6
        return $validator;
273
    }
274
}
275