MenuController.php 14.2 KB
Newer Older
Aan Choesni Herlingga committed
1 2 3 4
<?php

namespace App\Http\Controllers\Webprofile\Backend;

5
use Alert;
Aan Choesni Herlingga committed
6 7
use App\Http\Controllers\Controller;
use App\Models\Webprofile\Menu;
8
use App\Models\Webprofile\Pages;
9
use App\Repositories\Webprofile\De\MenuRepository as DeMenuRepository;
10
use App\Repositories\Webprofile\En\MenuRepository;
Aan Choesni Herlingga committed
11
use App\Repositories\Webprofile\MenuRepository as WebprofileMenuRepository;
12
use App\Repositories\Webprofile\Sa\MenuRepository as SaMenuRepository;
13
use App\Repositories\Webprofile\Zh\MenuRepository as ZhMenuRepository;
Aan Choesni Herlingga committed
14
use Auth;
15 16
use Crypt;
use Illuminate\Http\Request;
17
use Statickidz\GoogleTranslate;
18
use Validator;
Aan Choesni Herlingga committed
19 20 21

class MenuController extends Controller
{
22 23
    private $SOURCE = 'id';
    private $TARGET = 'en';
24
    private $TARGETDE = 'de';
25
    private $TARGETSA = 'ar';
26
    private $TARGETZH = 'zh';
27

Aan Choesni Herlingga committed
28 29
    public function __construct(
        MenuRepository $repoEn,
30
        WebprofileMenuRepository $repo,
31
        DeMenuRepository $repoDe,
32 33
        SaMenuRepository $repoSa,
        ZhMenuRepository $repoZh
Aan Choesni Herlingga committed
34
    ) {
35
        $this->repoEn = $repoEn;
36
        $this->repoDe = $repoDe;
37
        $this->repoSa = $repoSa;
38
        $this->repoZh = $repoZh;
Aan Choesni Herlingga committed
39
        $this->repo = $repo;
40 41
    }

Aan Choesni Herlingga committed
42 43 44 45 46 47 48
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
49
        $parent = Menu::where('status', '1')->whereNull('url')->whereIn('level', [1, 2, 3])->pluck('name', 'id');
50
        $page = Pages::orderBy('title', 'asc')->pluck('title', 'id');
51
        $data = Menu::with(['rEn', 'rDe', 'rSa', 'rZh'])->select('id', 'parent', 'name', 'url', 'level', 'urutan')->orderby('level', 'asc')->orderby('urutan', 'asc')->get();
52

Aan Choesni Herlingga committed
53 54 55 56 57 58 59
        $arr = $this->build_menu();

        return view('webprofile.backend.menu.index', compact('parent', 'page', 'data', 'arr'))->withTitle('Menu');
    }

    public function build_menu()
    {
60
        $data = Menu::select('id', 'parent', 'name', 'url', 'level', 'urutan')->where('level', '1')->orderby('urutan', 'asc')->with('rEn', 'rChild')->get()->toArray();
Aan Choesni Herlingga committed
61

62
        return $data;
Aan Choesni Herlingga committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
    }

    public function menu_has_child($parentid)
    {
        $data = Menu::where('parent', $parentid)->count();

        if ($data > 0) {
            return true;
        } else {
            return false;
        }
    }

    public function menu_get_child($parentid)
    {
        $cdata = Menu::select('id', 'parent', 'name', 'url', 'level', 'urutan')->where('parent', $parentid)->orderby('urutan', 'asc')->get();

        $i = 0;
        $cmenu = [];
        foreach ($cdata as $citem) {
            $cmenu[$i]['id'] = $citem->id;
            $cmenu[$i]['parent'] = $citem->parent;
            $cmenu[$i]['name'] = $citem->name;
            $cmenu[$i]['url'] = $citem->url;
            $cmenu[$i]['level'] = $citem->level;
            $cmenu[$i]['urutan'] = $citem->urutan;
            if ($this->menu_has_child($citem->parent)) {
                $cmenu[$i]['child'] = $this->menu_get_child($citem->id);
            }
92
            ++$i;
Aan Choesni Herlingga committed
93 94 95 96 97
        }

        return $cmenu;
    }

98
    public function menu_up($id, $urut = 1)
Aan Choesni Herlingga committed
99 100 101
    {
        $cur_menu = Menu::where('id', Crypt::decrypt($id))->first();
        if ($cur_menu->parentlevel == null) {
102
            $up_menu = Menu::where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan - $urut)->first();
Aan Choesni Herlingga committed
103 104
        }
        if ($cur_menu->parentlevel != null) {
105
            $up_menu = Menu::where('parent', $cur_menu->parent)->where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan - $urut)->first();
Aan Choesni Herlingga committed
106 107
        }

108 109 110 111 112 113
        if ($up_menu) {
            Menu::where('id', Crypt::decrypt($id))->update([
                'urutan' => $up_menu->urutan,
                'userid_created' => Auth::user()->name,
                'updated_at' => date('Y-m-d H:i:s'),
            ]);
Aan Choesni Herlingga committed
114

115 116 117 118 119
            Menu::where('id', $up_menu->id)->update([
                'urutan' => $up_menu->urutan + 1,
                'userid_created' => Auth::user()->name,
                'updated_at' => date('Y-m-d H:i:s'),
            ]);
Aan Choesni Herlingga committed
120

121 122 123 124
            return redirect()->route('menu.index');
        }

        return $this->menu_up($id, $urut + 1);
Aan Choesni Herlingga committed
125 126
    }

127
    public function menu_down($id, $urut = 1)
Aan Choesni Herlingga committed
128 129 130
    {
        $cur_menu = Menu::where('id', Crypt::decrypt($id))->first();
        if ($cur_menu->parentlevel == null) {
131
            $up_menu = Menu::where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan + $urut)->first();
Aan Choesni Herlingga committed
132 133
        }
        if ($cur_menu->parentlevel != null) {
134
            $up_menu = Menu::where('parent', $cur_menu->parent)->where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan + $urut)->first();
Aan Choesni Herlingga committed
135 136
        }

137 138 139 140 141 142
        if ($up_menu) {
            Menu::where('id', Crypt::decrypt($id))->update([
                'urutan' => $up_menu->urutan,
                'userid_created' => Auth::user()->name,
                'updated_at' => date('Y-m-d H:i:s'),
            ]);
Aan Choesni Herlingga committed
143

144 145 146 147 148
            Menu::where('id', $up_menu->id)->update([
                'urutan' => $up_menu->urutan - 1,
                'userid_created' => Auth::user()->name,
                'updated_at' => date('Y-m-d H:i:s'),
            ]);
Aan Choesni Herlingga committed
149

150 151 152 153
            return redirect()->route('menu.index');
        }

        return $this->menu_down($id, $urut + 1);
Aan Choesni Herlingga committed
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $data = $request->except('_token');
        $validator = Validator::make($data, Menu::$rules, Menu::$errormessage);

        if ($validator->fails()) {
            $errormessage = $validator->messages();
177

Aan Choesni Herlingga committed
178 179 180 181 182 183 184 185 186 187
            return redirect()->route('menu.index')
            ->withErrors($validator)
            ->withInput();
        } else {
            if ($request->input('parent') == null || $request->input('parent') == '') {
                $parentlevel = null;
                $level = 1;
            } else {
                $getlevelparent = Menu::where('id', $request->input('parent'))->first()->level;
                $parentlevel = $getlevelparent;
188
                $level = (int) $getlevelparent + 1;
Aan Choesni Herlingga committed
189 190 191 192 193 194 195
            }

            $urutan = Menu::where('level', $level)->where('parent', $request->input('parent'))->max('urutan');

            $data['status'] = 1;
            $data['level'] = $level;
            $data['parentlevel'] = $parentlevel;
196
            $data['urutan'] = $urutan + 1;
Aan Choesni Herlingga committed
197 198 199
            $data['userid_created'] = Auth::user()->name;
            $data['userid_updated'] = Auth::user()->name;

200 201 202
            $save = Menu::create($data);

            $this->createEn($data, $save);
203
            $this->createDe($data, $save);
204
            $this->createSa($data, $save);
205
            $this->createZh($data, $save);
Aan Choesni Herlingga committed
206 207 208

            Alert::success('Data berhasil disimpan')->persistent('Ok');

209 210
            $successmessage = 'Proses Tambah Menu Berhasil !!';

Aan Choesni Herlingga committed
211 212 213 214
            return redirect()->route('menu.index')->with('successMessage', $successmessage);
        }
    }

215
    private function createEn($data, $menu, $translate = 1)
216
    {
217 218 219 220 221 222
        if ($translate == 1) {
            $trans = new GoogleTranslate();
            $name = $trans->translate($this->SOURCE, $this->TARGET, $data['name']);
        } else {
            $name = $data['name'];
        }
223

224
        $dataEn['menu_id'] = $menu->id;
225 226 227 228 229
        $dataEn['name'] = $name;

        $this->repoEn->store($dataEn);
    }

230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
    private function createDe($data, $menu, $translate = 1)
    {
        if ($translate == 1) {
            $trans = new GoogleTranslate();
            $name = $trans->translate($this->SOURCE, $this->TARGETDE, $data['name']);
        } else {
            $name = $data['name'];
        }

        $dataDe['menu_id'] = $menu->id;
        $dataDe['name'] = $name;

        $this->repoDe->store($dataDe);
    }

245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
    private function createSa($data, $menu, $translate = 1)
    {
        if ($translate == 1) {
            $trans = new GoogleTranslate();
            $name = $trans->translate($this->SOURCE, $this->TARGETSA, $data['name']);
        } else {
            $name = $data['name'];
        }

        $dataSa['menu_id'] = $menu->id;
        $dataSa['name'] = $name;

        $this->repoSa->store($dataSa);
    }

260 261 262 263 264 265 266 267 268 269 270 271
    private function createZh($data, $menu, $translate = 1)
    {
        if ($translate == 1) {
            $trans = new GoogleTranslate();
            $name = $trans->translate($this->SOURCE, $this->TARGETZH, $data['name']);
        } else {
            $name = $data['name'];
        }

        $dataZh['menu_id'] = $menu->id;
        $dataZh['name'] = $name;

272
        $this->repoZh->store($dataZh);
273 274
    }

275
    public function storepage(Request $request)
Aan Choesni Herlingga committed
276 277 278 279 280 281
    {
        $data = $request->except('_token');
        $validator = Validator::make($data, Menu::$rules, Menu::$errormessage);

        if ($validator->fails()) {
            $errormessage = $validator->messages();
282

Aan Choesni Herlingga committed
283 284 285 286 287 288 289 290 291 292
            return redirect()->route('menu.index')
            ->withErrors($validator)
            ->withInput();
        } else {
            if ($request->input('parentpage') == null || $request->input('parentpage') == '') {
                $parentlevel = null;
                $level = 1;
            } else {
                $getlevelparent = Menu::where('id', $request->input('parentpage'))->first()->level;
                $parentlevel = $getlevelparent;
293
                $level = (int) $getlevelparent + 1;
Aan Choesni Herlingga committed
294 295 296 297
            }

            $urutan = Menu::where('level', $level)->where('parent', $request->input('parentpage'))->max('urutan');

298
            $page = Pages::with(['rEn'])->where('id', $request->input('page'))->first();
Aan Choesni Herlingga committed
299

300
            $data['name'] = $page->title;
Aan Choesni Herlingga committed
301 302
            $data['level'] = $level;
            $data['parentlevel'] = $parentlevel;
303
            $data['urutan'] = $urutan + 1;
Aan Choesni Herlingga committed
304 305 306 307 308 309
            $data['parent'] = $request->input('parentpage');
            $data['url'] = '/page/'.$page->slug;
            $data['status'] = 1;
            $data['userid_created'] = Auth::user()->name;
            $data['userid_updated'] = Auth::user()->name;

310 311
            $save = Menu::create($data);

312
            $data['name'] = $page->rEn ? $page->rEn->title : null;
313
            $this->createEn($data, $save, 'notTranslate');
314 315

            $data['name'] = $page->rDe ? $page->rDe->title : null;
316
            $this->createDe($data, $save, 'notTranslate');
Aan Choesni Herlingga committed
317

318 319 320
            $data['name'] = $page->rSa ? $page->rSa->title : null;
            $this->createSa($data, $save, 'notTranslate');

321 322 323
            $data['name'] = $page->rZh ? $page->rZh->title : null;
            $this->createZh($data, $save, 'notTranslate');

Aan Choesni Herlingga committed
324 325
            Alert::success('Data berhasil disimpan')->persistent('Ok');

326 327
            $successmessage = 'Proses Tambah Menu Berhasil !!';

Aan Choesni Herlingga committed
328 329 330 331 332 333 334
            return redirect()->route('menu.index')->with('successMessage', $successmessage);
        }
    }

    /**
     * Display the specified resource.
     *
335 336
     * @param \App\Models\Menu $menu
     *
Aan Choesni Herlingga committed
337 338 339 340 341 342 343 344 345 346 347
     * @return \Illuminate\Http\Response
     */
    public function show(Menu $menu)
    {
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @return \Illuminate\Http\Response
     */
Aan Choesni Herlingga committed
348
    public function edit($id)
Aan Choesni Herlingga committed
349
    {
Aan Choesni Herlingga committed
350 351
        $id = Crypt::decrypt($id);
        $setting = webprofilesetting();
352
        $data = $this->repo->findId($id, ['rEn', 'rDe', 'rSa', 'rZh']);
Aan Choesni Herlingga committed
353 354 355 356 357 358 359

        $data = [
            'data' => $data,
            'setting' => $setting,
        ];

        return view('webprofile.backend.menu.edit', $data)->withTitle(trans('feature.edit_menu'));
Aan Choesni Herlingga committed
360 361 362 363 364 365 366
    }

    /**
     * Update the specified resource in storage.
     *
     * @return \Illuminate\Http\Response
     */
Aan Choesni Herlingga committed
367
    public function update(Request $request, $id)
Aan Choesni Herlingga committed
368
    {
Aan Choesni Herlingga committed
369 370 371
        $data = $request->except(['_token', 'id']);

        $data['name'] = $data['titleiid'];
372
        $menu = $this->repo->findId($id, ['rEn', 'rDe', 'rSa', 'rZh']);
Aan Choesni Herlingga committed
373 374
        $this->repo->update($data, $menu);

375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
        if ($menu->rEn) {
            $dataEn['name'] = $data['titleien'];
            $menuEn = $this->repoEn->findId($menu->rEn->id);
            $this->repoEn->update($dataEn, $menuEn);
        } else {
            $dataEn['menu_id'] = $menu->id;
            $dataEn['name'] = $data['titleien'];

            $this->repoEn->store($dataEn);
        }

        if ($menu->rDe) {
            $dataDe['name'] = $data['titleide'];
            $menuDe = $this->repoDe->findId($menu->rDe->id);
            $this->repoDe->update($dataDe, $menuDe);
        } else {
            $dataDe['menu_id'] = $menu->id;
            $dataDe['name'] = $data['titleide'];
Aan Choesni Herlingga committed
393

394 395 396 397 398 399
            $this->repoDe->store($dataDe);
        }

        if ($menu->rSa) {
            $dataSa['name'] = $data['titleisa'];
            $menuSa = $this->repoSa->findId($menu->rSa->id);
400
            $this->repoSa->update($dataSa, $menuSa);
401 402 403 404 405 406
        } else {
            $dataSa['menu_id'] = $menu->id;
            $dataSa['name'] = $data['titleisa'];

            $this->repoSa->store($dataSa);
        }
407

408 409
        if ($menu->rZh) {
            $dataZh['name'] = $data['titleizh'];
410
            $menuZh = $this->repoZh->findId($menu->rZh->id);
411 412 413 414 415 416 417 418
            $this->repoZh->update($dataZh, $menuZh);
        } else {
            $dataZh['menu_id'] = $menu->id;
            $dataZh['name'] = $data['titleizh'];

            $this->repoZh->store($dataZh);
        }

Aan Choesni Herlingga committed
419
        return redirect()->route('menu.index');
Aan Choesni Herlingga committed
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
    }

    /**
     * Remove the specified resource from storage.
     *
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        try {
            $ceklevel = Menu::where('id', Crypt::decrypt($id))->first();
            $level = $ceklevel->level;

            Menu::where('id', Crypt::decrypt($id))->delete(Crypt::decrypt($id));
            $tataurut = Menu::where('level', $level)->orderBy('urutan', 'asc')->get();
            $urut = 1;
436

Aan Choesni Herlingga committed
437 438 439 440 441 442 443 444 445 446 447 448 449 450
            foreach ($tataurut as $value) {
                Menu::where('id', $value->id)->update([
                    'urutan' => $urut++,
                    'userid_created' => Auth::user()->name,
                    'updated_at' => date('Y-m-d H:i:s'),
                ]);
            }

            return redirect()->route('menu.index');
        } catch (\Exception $id) {
            return redirect()->route('menu.index');
        }
    }
}