HookPlugin.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2019 广东卓锐软件有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. namespace app\admin\model;
  10. use think\Model;
  11. use app\admin\model\Hook as HookModel;
  12. /**
  13. * 钩子-插件模型
  14. * @package app\admin\model
  15. */
  16. class HookPlugin extends Model
  17. {
  18. // 设置当前模型对应的完整数据表名称
  19. protected $name = 'admin_hook_plugin';
  20. // 自动写入时间戳
  21. protected $autoWriteTimestamp = true;
  22. /**
  23. * 启用插件钩子
  24. * @param string $plugin 插件名称
  25. * @author 蔡伟明 <314013107@qq.com>
  26. * @return bool
  27. */
  28. public static function enable($plugin = '')
  29. {
  30. return self::where('plugin', $plugin)->setField('status', 1);
  31. }
  32. /**
  33. * 禁用插件钩子
  34. * @param string $plugin 插件名称
  35. * @author 蔡伟明 <314013107@qq.com>
  36. * @return int
  37. */
  38. public static function disable($plugin = '')
  39. {
  40. return self::where('plugin', $plugin)->setField('status', 0);
  41. }
  42. /**
  43. * 添加钩子-插件对照
  44. * @param array $hooks 钩子
  45. * @param string $plugin_name 插件名称
  46. * @author 蔡伟明 <314013107@qq.com>
  47. * @return bool|int|string
  48. * @throws \think\db\exception\DataNotFoundException
  49. * @throws \think\db\exception\ModelNotFoundException
  50. * @throws \think\exception\DbException
  51. */
  52. public static function addHooks($hooks = [], $plugin_name = '')
  53. {
  54. if (!empty($hooks) && is_array($hooks)) {
  55. // 添加钩子
  56. if (!HookModel::addHooks($hooks, $plugin_name)) {
  57. return false;
  58. }
  59. $data = [];
  60. foreach ($hooks as $name => $description) {
  61. if (is_numeric($name)) {
  62. $name = $description;
  63. }
  64. $data[] = [
  65. 'hook' => $name,
  66. 'plugin' => $plugin_name,
  67. 'create_time' => request()->time(),
  68. 'update_time' => request()->time(),
  69. ];
  70. }
  71. return self::insertAll($data);
  72. }
  73. return false;
  74. }
  75. /**
  76. * 删除钩子
  77. * @param string $plugin_name 钩子名称
  78. * @author 蔡伟明 <314013107@qq.com>
  79. * @return bool
  80. * @throws \think\Exception
  81. * @throws \think\exception\PDOException
  82. */
  83. public static function deleteHooks($plugin_name = '')
  84. {
  85. if (!empty($plugin_name)) {
  86. // 删除钩子
  87. if (!HookModel::deleteHooks($plugin_name)) {
  88. return false;
  89. }
  90. if (false === self::where('plugin', $plugin_name)->delete()) {
  91. return false;
  92. }
  93. }
  94. return true;
  95. }
  96. /**
  97. * 钩子插件排序
  98. * @param string $hook 钩子
  99. * @param string $plugins 插件名
  100. * @author 蔡伟明 <314013107@qq.com>
  101. * @return bool
  102. */
  103. public static function sort($hook = '', $plugins = '')
  104. {
  105. if ($hook != '' && $plugins != '') {
  106. $plugins = is_array($plugins) ? $plugins : explode(',', $plugins);
  107. foreach ($plugins as $key => $plugin) {
  108. $map = [
  109. 'hook' => $hook,
  110. 'plugin' => $plugin
  111. ];
  112. self::where($map)->setField('sort', $key + 1);
  113. }
  114. }
  115. return true;
  116. }
  117. }