93 lines
2.0 KiB
PHP
93 lines
2.0 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace plugin\admin\api;
|
|||
|
|
|||
|
class Install
|
|||
|
{
|
|||
|
/**
|
|||
|
* 安装
|
|||
|
*
|
|||
|
* @param $version
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public static function install($version)
|
|||
|
{
|
|||
|
// 导入菜单
|
|||
|
Menu::import(static::getMenus());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 卸载
|
|||
|
*
|
|||
|
* @param $version
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public static function uninstall($version)
|
|||
|
{
|
|||
|
// 删除菜单
|
|||
|
foreach (static::getMenus() as $menu) {
|
|||
|
Menu::delete($menu['name']);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新
|
|||
|
*
|
|||
|
* @param $from_version
|
|||
|
* @param $to_version
|
|||
|
* @param $context
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public static function update($from_version, $to_version, $context = null)
|
|||
|
{
|
|||
|
// 删除不用的菜单
|
|||
|
if (isset($context['previous_menus'])) {
|
|||
|
static::removeUnnecessaryMenus($context['previous_menus']);
|
|||
|
}
|
|||
|
// 导入新菜单
|
|||
|
Menu::import(static::getMenus());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新前数据收集等
|
|||
|
*
|
|||
|
* @param $from_version
|
|||
|
* @param $to_version
|
|||
|
* @return array|array[]
|
|||
|
*/
|
|||
|
public static function beforeUpdate($from_version, $to_version)
|
|||
|
{
|
|||
|
// 在更新之前获得老菜单,通过context传递给 update
|
|||
|
return ['previous_menus' => static::getMenus()];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取菜单
|
|||
|
*
|
|||
|
* @return array|mixed
|
|||
|
*/
|
|||
|
public static function getMenus()
|
|||
|
{
|
|||
|
clearstatcache();
|
|||
|
if (is_file($menu_file = __DIR__ . '/../config/menu.php')) {
|
|||
|
$menus = include $menu_file;
|
|||
|
return $menus ?: [];
|
|||
|
}
|
|||
|
return [];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 删除不需要的菜单
|
|||
|
*
|
|||
|
* @param $previous_menus
|
|||
|
* @return void
|
|||
|
*/
|
|||
|
public static function removeUnnecessaryMenus($previous_menus)
|
|||
|
{
|
|||
|
$menus_to_remove = array_diff(Menu::column($previous_menus, 'name'), Menu::column(static::getMenus(), 'name'));
|
|||
|
foreach ($menus_to_remove as $name) {
|
|||
|
Menu::delete($name);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|