Install.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace plugin\admin\api;
  3. class Install
  4. {
  5. /**
  6. * 安装
  7. *
  8. * @param $version
  9. * @return void
  10. */
  11. public static function install($version)
  12. {
  13. // 导入菜单
  14. Menu::import(static::getMenus());
  15. }
  16. /**
  17. * 卸载
  18. *
  19. * @param $version
  20. * @return void
  21. */
  22. public static function uninstall($version)
  23. {
  24. // 删除菜单
  25. foreach (static::getMenus() as $menu) {
  26. Menu::delete($menu['name']);
  27. }
  28. }
  29. /**
  30. * 更新
  31. *
  32. * @param $from_version
  33. * @param $to_version
  34. * @param $context
  35. * @return void
  36. */
  37. public static function update($from_version, $to_version, $context = null)
  38. {
  39. // 删除不用的菜单
  40. if (isset($context['previous_menus'])) {
  41. static::removeUnnecessaryMenus($context['previous_menus']);
  42. }
  43. // 导入新菜单
  44. Menu::import(static::getMenus());
  45. }
  46. /**
  47. * 更新前数据收集等
  48. *
  49. * @param $from_version
  50. * @param $to_version
  51. * @return array|array[]
  52. */
  53. public static function beforeUpdate($from_version, $to_version)
  54. {
  55. // 在更新之前获得老菜单,通过context传递给 update
  56. return ['previous_menus' => static::getMenus()];
  57. }
  58. /**
  59. * 获取菜单
  60. *
  61. * @return array|mixed
  62. */
  63. public static function getMenus()
  64. {
  65. clearstatcache();
  66. if (is_file($menu_file = __DIR__ . '/../config/menu.php')) {
  67. $menus = include $menu_file;
  68. return $menus ?: [];
  69. }
  70. return [];
  71. }
  72. /**
  73. * 删除不需要的菜单
  74. *
  75. * @param $previous_menus
  76. * @return void
  77. */
  78. public static function removeUnnecessaryMenus($previous_menus)
  79. {
  80. $menus_to_remove = array_diff(Menu::column($previous_menus, 'name'), Menu::column(static::getMenus(), 'name'));
  81. foreach ($menus_to_remove as $name) {
  82. Menu::delete($name);
  83. }
  84. }
  85. }