HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot//my.esfyn.top/Addons/Nav/Controllers/NavController.php
<?php


namespace Addons\Nav\Controllers;


use Addons\Nav\Models\Nav;
use Addons\Nav\Requests\NavRequest;
use App\Http\Controllers\MyController;
use Illuminate\Http\Request;

class NavController extends MyController
{

    public function index()
    {
        is_home(system_config());

        return is_mobile() ? $this->view('web.mobile') : $this->view('web.index');
    }

    /**
     * 后台导航列表
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
     */
    public function show(Request $request)
    {
        if ($request->ajax() && $request->wantsJson()) {

            $where = [
                ['lang', '=', '']
            ];
            if ($json = $request->input('filter')) {
                $filters = json_decode($json, true);
                foreach ($filters as $name => $filter) {
                    if ($name == 'name') {
                        $where[] = [$name, 'like', "%{$filter}%"];
                    }
                    if ($name == 'parent.name') {
                        $parent = Nav::where('name', $filter)->first();
                        if ($parent) {
                            $where[] = ['pid', '=', $parent->id];
                        }
                    }
                }
            }

            $nav = Nav::with('parent')->orderBy('id', 'desc')
                ->where($where)
                ->paginate($this->param('limit', 'intval'))->toArray();

            return $this->success($nav);
        }

        return $this->view('admin.index');
    }

    /**
     * 后台新增导航
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function create()
    {
        $navs = app('nav')->categoryTree();
        return $this->view('admin.create', compact('navs'));
    }

    /**
     * 保存导航
     * @param NavRequest $request
     * @param Nav $nav
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(NavRequest $request, Nav $nav)
    {
        $data = $request->validated();
        $result = $nav->store($data);

        if ($result) {

            $this->langStore($nav->id);
        }

        return $this->result($result);
    }

    /**
     * 编辑页
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function edit()
    {
        $navs = app('nav')->categoryTree();

        $id = $this->param('id', 'intval');
        $nav = Nav::find($id);

        $langPage = [];

        if ($sysLang = system_lang()) {

            $abb = array_keys($sysLang);

            $result = Nav::where('lang_ident', $nav->lang_ident)
                ->whereIn('lang', $abb)
                ->get()
                ->toArray();

            foreach ($result as $item) {

                $langPage[$item['lang']] = $item;
            }
        }

        return $this->view('admin.edit', compact('navs', 'nav', 'langPage'));
    }

    /**
     * 更新导航
     * @param NavRequest $request
     * @param Nav $nav
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(NavRequest $request, Nav $nav)
    {
        if ($id = $this->param('id', 'intval')) {
            $data = $request->validated();
            $data['id'] = $id;

            $result = $nav->up($data);

            if ($result) {

                $this->langUpdate($id);
            }

            return $this->result($result);
        }

        return $this->result(false);
    }

    /**
     * 删除导航
     * @return \Illuminate\Http\JsonResponse
     */
    public function destroy()
    {
        $id = $this->param('id', 'intval');
        $item = Nav::find($id);

        $result = Nav::where('lang_ident', $item->lang_ident)->delete();

        return $this->result($result);
    }

    /**
     * 配置
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function config()
    {
        $config = system_config([]);
        return $this->view('admin.config', compact('config'));
    }

    /**
     * 配置保存
     * @return \Illuminate\Http\JsonResponse
     */
    public function cfgStore()
    {
        $theme = $this->param('site_home_theme');
        $result = system_config_store(['site_home_theme' => $theme], 'system');

        return $this->result($result);
    }

    /**
     * 多语言更新
     * @param $id
     * @return void
     */
    public function langUpdate($id)
    {
        $lang = $this->param('lang', '', []);

        foreach ($lang as $key => $item) {
            $item['lang'] = $key;
            Nav::where('id', $item['id'])->update($item);
        }
    }

    /**
     * 多语言保存
     * @param $id
     * @return void
     */
    public function langStore($id)
    {
        $lang = $this->param('lang', '', []);
        $data = Nav::find($id);
        $data->lang_ident = $id;
        $data->save();

        foreach ($lang as $key => $item) {
            $item['lang'] = $key;
            $item['lang_ident'] = $id;
            Nav::insert($item);
        }
    }
}