<?php
namespace App\Presenters\Admin;
use Entrust;
use App\Models\Permission;
use App\Repositories\Eloquent\MenuRepositoryEloquent;
use Route;
class MenuPresenter
{
static private $open;
static private $active;
static private $layer = 0;
static private $parent_key = -1;
protected $model_menu;
public function __construct(MenuRepositoryEloquent $menuRepositoryEloquent)
{
$this->model_menu = $menuRepositoryEloquent;
}
public function sidebarMenuList($sidebarMenus, $parent_key = -1)
{
self::$layer++;
$sidebarMenus = array_merge($sidebarMenus);
$html = '';
$count = count($sidebarMenus);
foreach ($sidebarMenus as $key => $menu) {
$permission_info = Permission::where(['uri' => $menu['uri']])->first();
if (!empty($permission_info)) {
if (!Entrust::can($permission_info['name'])) {
continue;
}
}
$uri_arr = explode('.', $menu['uri']);
self::$active = active_class(if_route_pattern([$uri_arr[0].'.*']), 'active open');
$open_arr[$key] = self::$active;
if ($count == $key+1) {
if (in_array('active open', $open_arr)) {
self::$open = 'active open';
self::$parent_key = $parent_key;
}
}
$icon = htmlspecialchars($menu['icon']);
$name = htmlspecialchars($menu['name']);
if ($menu['child']) {
$html_child = $this->sidebarMenuList($menu['child'], $key);
if (self::$parent_key == $key){
$open = self::$open;
} else {
$open = '';
}
if (self::$layer == 1) {
self::$parent_key = -1;
}
$html .= <<<Eof
<li class="nav-item {$open}">
<a href="javascript:;" class="nav-link nav-toggle">
<i class="{$icon}"></i>
<span class="title">{$name}</span>
<span class="arrow {$open}"></span>
</a>
<ul class="sub-menu">
{$html_child}
</ul>
</li>
Eof;
} else {
$url = Route::getRoutes()->getByName($menu['uri']) ? route($menu['uri']) : '#';
$active = self::$active;
$html .= <<<Eof
<li class="nav-item {$active}">
<a href="{$url}" class="nav-link">
<i class="{$icon}"></i>
<span class="title">{$name}</span>
</a>
</li>
Eof;
}
}
if (self::$parent_key != -1 && self::$layer != 3) {
self::$parent_key = $parent_key;
}
self::$layer--;
return $html;
}
public function menuOrderList($menus)
{
$html = '<ol class="dd-list">';
foreach ($menus as $key => $menu) {
$delete_url = route("menutable.destroy", $menu->id);
$edit_url = route("menutable.edit", $menu->id);
$icon = htmlspecialchars($menu->icon);
$name = htmlspecialchars($menu->name);
$uri = htmlspecialchars($menu->uri);
$html .= <<<Eof
<li class="dd-item" id="menu_li_{$menu->id}" data-id="{$menu->id}">
<div class="dd-handle">
<i class="{$icon}"></i> {$name} : {$uri}
<span class="menu-option action dd-nodrag" data-field-name="_edit">
<a href="javascript:;" data-href="{$edit_url}" class="editMenu"><i class="fa fa-edit"></i></a>
<a href="javascript:void(0);">
<i class="fa fa-trash mt-sweetalert"
data-title="确定要删除此菜单吗?"
data-message="(子菜单会也会被删除)"
data-type="warning"
data-allow-outside-click="true"
data-show-cancel-button="true"
data-cancel-button-text="点错了"
data-cancel-button-class="btn-danger"
data-show-confirm-button="true"
data-confirm-button-text="确定"
data-confirm-button-class="btn-info"
data-popup-title-success="删除成功"
data-close-on-cancel="true"
data-close-on-confirm="false"
data-show-loader-on-confirm="true"
data-ajax-url="{$delete_url}"
data-remove-dom="menu_li_"
data-id={$menu->id}
>
</i>
</a>
</span>
</div>
Eof;
if(!empty($menu->child)) {
$html .= $this->menuOrderList($menu->child);
}
$html .= '</li>';
}
$html .= '</ol>';
return $html;
}
}