RegionController   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 236
Duplicated Lines 0 %

Test Coverage

Coverage 88.31%

Importance

Changes 9
Bugs 7 Features 2
Metric Value
wmc 14
eloc 74
dl 0
loc 236
ccs 68
cts 77
cp 0.8831
rs 10
c 9
b 7
f 2

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A update() 0 12 1
A saveOnDb() 0 8 1
A updateRegionsDropdown() 0 24 2
A store() 0 18 2
A create() 0 6 1
A show() 0 3 1
A index() 0 40 3
A destroy() 0 6 1
A edit() 0 6 1
1
<?php
2
3
namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers;
4
5
use DavideCasiraghi\LaravelEventsCalendar\Models\Country;
6
use DavideCasiraghi\LaravelEventsCalendar\Models\Region;
7
use Illuminate\Http\Request;
8
use Illuminate\Support\Facades\DB;
9
use Illuminate\Support\Str;
10
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
11
use Validator;
12
13
class RegionController extends Controller
14
{
15
    /* Restrict the access to this resource just to logged in users except show view */
16 13
    public function __construct()
17
    {
18 13
        $this->middleware('admin', ['except' => ['show', 'updateRegionsDropdown']]);
19 13
    }
20
21
    /***************************************************************************/
22
23
    /**
24
     * Display a listing of the resource.
25
     *
26
     * @return \Illuminate\View\View
27
     */
28 5
    public function index(Request $request)
29
    {
30 5
        $countries = Country::getCountries();
31
        //$countries = Country::getActiveCountries();
32
33 5
        $searchKeywords = $request->input('keywords');
34 5
        $searchCountry = $request->input('country_id');
35
36 5
        if ($searchKeywords || $searchCountry) {
37
            //$regions = DB::table('regions')
38
            $regions = Region::
39
                        select('region_translations.region_id AS id', 'name', 'timezone', 'locale', 'country_id')
40
                        ->join('region_translations', 'regions.id', '=', 'region_translations.region_id')
41
                        ->where('locale', 'en')
42
                        ->when($searchKeywords, function ($query, $searchKeywords) {
43
                            return $query->where('name', $searchKeywords)->orWhere('name', 'like', '%'.$searchKeywords.'%');
44
                        })
45
                        ->when($searchCountry, function ($query, $searchCountry) {
46
                            return $query->where('country_id', '=', $searchCountry);
47
                        })
48
                        ->orderBy('name')
49
                        ->paginate(20);
50
        } else {
51
            $regions = Region::
52 5
                        select('region_translations.region_id AS id', 'name', 'timezone', 'locale', 'country_id')
53 5
                        ->join('region_translations', 'regions.id', '=', 'region_translations.region_id')
54 5
                        ->where('locale', 'en')
55 5
                        ->orderBy('name')
56 5
                        ->paginate(20);
57
        }
58
59
        // Countries available for translations
60 5
        $countriesAvailableForTranslations = LaravelLocalization::getSupportedLocales();
61
62 5
        return view('laravel-events-calendar::regions.index', compact('regions'))
63 5
            ->with('i', (request()->input('page', 1) - 1) * 20)
64 5
            ->with('countriesAvailableForTranslations', $countriesAvailableForTranslations)
65 5
            ->with('searchKeywords', $searchKeywords)
66 5
            ->with('searchCountry', $searchCountry)
67 5
            ->with('countries', $countries);
68
    }
69
70
    /***************************************************************************/
71
72
    /**
73
     * Show the form for creating a new resource.
74
     *
75
     * @return \Illuminate\View\View
76
     */
77 1
    public function create()
78
    {
79 1
        $countries = Country::getCountries();
80
81 1
        return view('laravel-events-calendar::regions.create')
82 1
                ->with('countries', $countries);
83
    }
84
85
    /***************************************************************************/
86
87
    /**
88
     * Store a newly created resource in storage.
89
     *
90
     * @param  \Illuminate\Http\Request  $request
91
     * @return \Illuminate\Http\RedirectResponse
92
     */
93 2
    public function store(Request $request)
94
    {
95
        // Validate form datas
96 2
        $validator = Validator::make($request->all(), [
97 2
            'name' => 'required',
98
            'country_id' => 'required',
99
            'timezone' => 'required',
100
        ]);
101 2
        if ($validator->fails()) {
102 1
            return back()->withErrors($validator)->withInput();
103
        }
104
105 1
        $region = new Region();
106
107 1
        $this->saveOnDb($request, $region);
108
109 1
        return redirect()->route('regions.index')
110 1
                        ->with('success', __('laravel-events-calendar::messages.region_added_successfully'));
111
    }
112
113
    /***************************************************************************/
114
115
    /**
116
     * Display the specified resource.
117
     *
118
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\Region  $region
119
     * @return \Illuminate\View\View
120
     */
121 1
    public function show(Region $region)
122
    {
123 1
        return view('laravel-events-calendar::regions.show', compact('region'));
124
    }
125
126
    /***************************************************************************/
127
128
    /**
129
     * Show the form for editing the specified resource.
130
     *
131
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\Region  $region
132
     * @return \Illuminate\View\View
133
     */
134 1
    public function edit(Region $region)
135
    {
136 1
        $countries = Country::getCountries();
137
138 1
        return view('laravel-events-calendar::regions.edit', compact('region'))
139 1
                    ->with('countries', $countries);
140
    }
141
142
    /***************************************************************************/
143
144
    /**
145
     * Update the specified resource in storage.
146
     *
147
     * @param  \Illuminate\Http\Request  $request
148
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\Region  $region
149
     * @return \Illuminate\Http\RedirectResponse
150
     */
151 2
    public function update(Request $request, Region $region)
152
    {
153 2
        request()->validate([
154 2
            'name' => 'required',
155
            'country_id' => 'required',
156
            'timezone' => 'required',
157
        ]);
158
159 1
        $this->saveOnDb($request, $region);
160
161 1
        return redirect()->route('regions.index')
162 1
                        ->with('success', __('laravel-events-calendar::messages.region_updated_successfully'));
163
    }
164
165
    /***************************************************************************/
166
167
    /**
168
     * Remove the specified resource from storage.
169
     *
170
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\Region  $region
171
     * @return \Illuminate\Http\RedirectResponse
172
     */
173 1
    public function destroy(Region $region)
174
    {
175 1
        $region->delete();
176
177 1
        return redirect()->route('regions.index')
178 1
                        ->with('success', __('laravel-events-calendar::messages.region_deleted_successfully'));
179
    }
180
181
    /***************************************************************************/
182
183
    /**
184
     * Return the single event region datas by cat id.
185
     *
186
     * @param  int $cat_id
187
     * @return \DavideCasiraghi\LaravelEventsCalendar\Models\Region
188
     */
189
    /*public function eventregiondata($cat_id)
190
    {
191
        $ret = DB::table('regions')->where('id', $cat_id)->first();
192
        //dump($ret);
193
194
        return $ret;
195
    }*/
196
197
    /***************************************************************************/
198
199
    /**
200
     * Save/Update the record on DB.
201
     *
202
     * @param  \Illuminate\Http\Request  $request
203
     * @param \DavideCasiraghi\LaravelEventsCalendar\Models\Region $region
204
     * @return void
205
     */
206 2
    public function saveOnDb(Request $request, Region $region): void
207
    {
208 2
        $region->name = $request->get('name');
0 ignored issues
show
Bug introduced by
The property name does not seem to exist on DavideCasiraghi\LaravelE...sCalendar\Models\Region. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
209 2
        $region->country_id = $request->get('country_id');
210 2
        $region->timezone = $request->get('timezone');
211 2
        $region->slug = Str::slug($region->name, '-');
0 ignored issues
show
Bug introduced by
The property slug does not seem to exist on DavideCasiraghi\LaravelE...sCalendar\Models\Region. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
212
213 2
        $region->save();
214 2
    }
215
216
    /***************************************************************************/
217
218
    /**
219
     * Return and HTML with the updated regions dropdown for the homepage
220
     * after a country get selected.
221
     *
222
     * @param \Illuminate\Http\Request  $request
223
     * @return string $ret
224
     */
225 1
    public static function updateRegionsDropdown(Request $request)
226
    {
227
        /*$regions = Region::join('region_translations', 'regions.id', '=', 'region_translations.region_id')
228
                ->where('locale', 'en')
229
                ->where('country_id', $request->input('country_id'))
230
                ->orderBy('name')
231
                ->pluck('name','region_translations.region_id AS id'); */
232
233
        $regions = Region::
234 1
                select('name', 'region_translations.region_id AS id')
235 1
                ->join('region_translations', 'regions.id', '=', 'region_translations.region_id')
236 1
                ->where('locale', 'en')
237 1
                ->where('country_id', $request->input('country_id'))
238 1
                ->orderBy('name')
239 1
                ->get();
240
241
        // GENERATE the HTML to return
242 1
        $ret = "<select name='region_id' id='region_id' class='selectpicker' title='".__('homepage-serach.select_a_region')."'>";
0 ignored issues
show
Bug introduced by
Are you sure __('homepage-serach.select_a_region') 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 ignore-type  annotation

242
        $ret = "<select name='region_id' id='region_id' class='selectpicker' title='"./** @scrutinizer ignore-type */ __('homepage-serach.select_a_region')."'>";
Loading history...
243 1
        foreach ($regions as $key => $region) {
244 1
            $ret .= "<option value='".$region->id."'>".$region->name.'</option>';
245
        }
246 1
        $ret .= '</select>';
247
248 1
        return response($ret, 200)->header('Content-Type', 'text/html');
249
    }
250
251
    /***************************************************************************/
252
}
253