MenuController.php 10.6 KB
Newer Older
Aan Choesni Herlingga committed
1 2 3 4 5 6 7 8 9 10
<?php

namespace App\Http\Controllers\Webprofile\Backend;

use App\Models\Webprofile\Pages;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Webprofile\Menu;
use Validator;
use Alert;
11
use App\Repositories\Webprofile\En\MenuRepository;
Aan Choesni Herlingga committed
12
use App\Repositories\Webprofile\MenuRepository as WebprofileMenuRepository;
Aan Choesni Herlingga committed
13 14
use Crypt;
use Auth;
15
use Statickidz\GoogleTranslate;
Aan Choesni Herlingga committed
16 17 18

class MenuController extends Controller
{
19 20
    private $SOURCE = 'id';
    private $TARGET = 'en';
21

Aan Choesni Herlingga committed
22 23 24 25
    public function __construct(
        MenuRepository $repoEn,
        WebprofileMenuRepository $repo
    ) {
26
        $this->repoEn = $repoEn;
Aan Choesni Herlingga committed
27
        $this->repo = $repo;
28 29
    }

Aan Choesni Herlingga committed
30 31 32 33 34 35 36 37
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $parent = Menu::where('status', '1')->whereNull('url')->whereIn('level', [1, 2])->pluck('name', 'id');
38
        $page = Pages::orderBy('title', 'asc')->pluck('title', 'id');
39
        $data = Menu::with(['rEn'])->select('id', 'parent', 'name', 'url', 'level', 'urutan')->orderby('level', 'asc')->orderby('urutan', 'asc')->get();
40

Aan Choesni Herlingga committed
41 42 43 44 45 46 47
        $arr = $this->build_menu();

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

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

50
        return $data;
Aan Choesni Herlingga committed
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    }

    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);
            }
80
            ++$i;
Aan Choesni Herlingga committed
81 82 83 84 85 86 87 88 89
        }

        return $cmenu;
    }

    public function menu_up($id)
    {
        $cur_menu = Menu::where('id', Crypt::decrypt($id))->first();
        if ($cur_menu->parentlevel == null) {
90
            $up_menu = Menu::where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan - 1)->first();
Aan Choesni Herlingga committed
91 92
        }
        if ($cur_menu->parentlevel != null) {
93
            $up_menu = Menu::where('parent', $cur_menu->parent)->where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan - 1)->first();
Aan Choesni Herlingga committed
94 95 96 97 98 99 100 101 102
        }

        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'),
        ]);

        Menu::where('id', $up_menu->id)->update([
103
            'urutan' => $up_menu->urutan + 1,
Aan Choesni Herlingga committed
104 105 106 107 108 109 110 111 112 113 114
            'userid_created' => Auth::user()->name,
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        return redirect()->route('menu.index');
    }

    public function menu_down($id)
    {
        $cur_menu = Menu::where('id', Crypt::decrypt($id))->first();
        if ($cur_menu->parentlevel == null) {
115
            $up_menu = Menu::where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan + 1)->first();
Aan Choesni Herlingga committed
116 117
        }
        if ($cur_menu->parentlevel != null) {
118
            $up_menu = Menu::where('parent', $cur_menu->parent)->where('level', $cur_menu->level)->where('urutan', (int) $cur_menu->urutan + 1)->first();
Aan Choesni Herlingga committed
119 120 121 122 123 124 125 126 127
        }

        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'),
        ]);

        Menu::where('id', $up_menu->id)->update([
128
            'urutan' => $up_menu->urutan - 1,
Aan Choesni Herlingga committed
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
            'userid_created' => Auth::user()->name,
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        return redirect()->route('menu.index');
    }

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

    /**
     * Store a newly created resource in storage.
     *
148 149
     * @param \Illuminate\Http\Request $request
     *
Aan Choesni Herlingga committed
150 151 152 153 154 155 156 157 158
     * @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();
159

Aan Choesni Herlingga committed
160 161 162 163 164 165 166 167 168 169
            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;
170
                $level = (int) $getlevelparent + 1;
Aan Choesni Herlingga committed
171 172 173 174 175 176 177
            }

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

            $data['status'] = 1;
            $data['level'] = $level;
            $data['parentlevel'] = $parentlevel;
178
            $data['urutan'] = $urutan + 1;
Aan Choesni Herlingga committed
179 180 181
            $data['userid_created'] = Auth::user()->name;
            $data['userid_updated'] = Auth::user()->name;

182 183 184
            $save = Menu::create($data);

            $this->createEn($data, $save);
Aan Choesni Herlingga committed
185 186 187

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

188 189
            $successmessage = 'Proses Tambah Menu Berhasil !!';

Aan Choesni Herlingga committed
190 191 192 193
            return redirect()->route('menu.index')->with('successMessage', $successmessage);
        }
    }

194
    private function createEn($data, $menu, $translate = 1)
195
    {
196 197 198 199 200 201
        if ($translate == 1) {
            $trans = new GoogleTranslate();
            $name = $trans->translate($this->SOURCE, $this->TARGET, $data['name']);
        } else {
            $name = $data['name'];
        }
202

203
        $dataEn['menu_id'] = $menu->id;
204 205 206 207 208
        $dataEn['name'] = $name;

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

209
    public function storepage(Request $request)
Aan Choesni Herlingga committed
210 211 212 213 214 215
    {
        $data = $request->except('_token');
        $validator = Validator::make($data, Menu::$rules, Menu::$errormessage);

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

Aan Choesni Herlingga committed
217 218 219 220 221 222 223 224 225 226
            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;
227
                $level = (int) $getlevelparent + 1;
Aan Choesni Herlingga committed
228 229 230 231
            }

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

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

234
            $data['name'] = $page->title;
Aan Choesni Herlingga committed
235 236
            $data['level'] = $level;
            $data['parentlevel'] = $parentlevel;
237
            $data['urutan'] = $urutan + 1;
Aan Choesni Herlingga committed
238 239 240 241 242 243
            $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;

244 245
            $save = Menu::create($data);

246 247
            $data['name'] = $page->rEn->title;

248
            $this->createEn($data, $save, 'notTranslate');
Aan Choesni Herlingga committed
249 250 251

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

252 253
            $successmessage = 'Proses Tambah Menu Berhasil !!';

Aan Choesni Herlingga committed
254 255 256 257 258 259 260
            return redirect()->route('menu.index')->with('successMessage', $successmessage);
        }
    }

    /**
     * Display the specified resource.
     *
261 262
     * @param \App\Models\Menu $menu
     *
Aan Choesni Herlingga committed
263 264 265 266 267 268 269 270 271
     * @return \Illuminate\Http\Response
     */
    public function show(Menu $menu)
    {
    }

    /**
     * Show the form for editing the specified resource.
     *
272 273
     * @param \App\Models\Menu $menu
     *
Aan Choesni Herlingga committed
274 275
     * @return \Illuminate\Http\Response
     */
Aan Choesni Herlingga committed
276
    public function edit($id)
Aan Choesni Herlingga committed
277
    {
Aan Choesni Herlingga committed
278 279 280 281 282 283 284 285 286 287
        $id = Crypt::decrypt($id);
        $setting = webprofilesetting();
        $data = $this->repo->findId($id, ['rEn']);

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

        return view('webprofile.backend.menu.edit', $data)->withTitle(trans('feature.edit_menu'));
Aan Choesni Herlingga committed
288 289 290 291 292
    }

    /**
     * Update the specified resource in storage.
     *
293 294 295
     * @param \Illuminate\Http\Request $request
     * @param \App\Models\Menu         $menu
     *
Aan Choesni Herlingga committed
296 297
     * @return \Illuminate\Http\Response
     */
Aan Choesni Herlingga committed
298
    public function update(Request $request, $id)
Aan Choesni Herlingga committed
299
    {
Aan Choesni Herlingga committed
300 301 302 303 304 305 306 307 308 309 310
        $data = $request->except(['_token', 'id']);

        $data['name'] = $data['titleiid'];
        $menu = $this->repo->findId($id, ['rEn']);
        $this->repo->update($data, $menu);

        $dataEn['name'] = $data['titleien'];
        $menuEn = $this->repoEn->findId($menu->rEn->id);
        $this->repoEn->update($dataEn, $menuEn);

        return redirect()->route('menu.index');
Aan Choesni Herlingga committed
311 312 313 314 315
    }

    /**
     * Remove the specified resource from storage.
     *
316 317
     * @param \App\Models\Menu $menu
     *
Aan Choesni Herlingga committed
318 319 320 321 322 323 324 325 326 327 328
     * @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;
329

Aan Choesni Herlingga committed
330 331 332 333 334 335 336 337 338 339 340 341 342 343
            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');
        }
    }
}