AdminLog.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2017-03-15 21:16
  7. */
  8. namespace backend\components;
  9. use Yii;
  10. use common\models\AdminLog as AdminLogModel;
  11. class AdminLog extends \yii\base\Event
  12. {
  13. /**
  14. * when create a record save to database, auto generate a log
  15. *
  16. * @param $event
  17. * @throws \Throwable
  18. */
  19. public static function create($event)
  20. {
  21. if ($event->sender->className() !== AdminLogModel::className()) {
  22. $desc = '<br>';
  23. foreach ($event->sender->getAttributes() as $name => $value) {
  24. !is_string( $value ) && $value = print_r($value, true);
  25. $desc .= $event->sender->getAttributeLabel($name) . '(' . $name . ') => ' . $value . ',<br>';
  26. }
  27. $desc = substr($desc, 0, -5);
  28. $model = new AdminLogModel();
  29. $class = $event->sender->className();
  30. $idDes = '';
  31. if (isset($event->sender->id)) {
  32. $idDes = '{{%ID%}} ' . $event->sender->id;
  33. }
  34. $model->description = '{{%ADMIN_USER%}} [ ' . Yii::$app->getUser()->getIdentity()->username . ' ] {{%BY%}} ' . $class . ' [ ' . $class::tableName() . ' ] ' . " {{%CREATED%}} {$idDes} {{%RECORD%}}: " . $desc;
  35. $model->route = Yii::$app->controller->id . '/' . Yii::$app->controller->action->id;
  36. $model->user_id = Yii::$app->getUser()->getId();
  37. $model->save();
  38. }
  39. }
  40. /**
  41. * when delete a record from database, auto generate a log
  42. *
  43. * @param $event
  44. * @throws \Throwable
  45. */
  46. public static function update($event)
  47. {
  48. if (! empty($event->changedAttributes)) {
  49. $desc = '<br>';
  50. $oldAttributes = $event->sender->oldAttributes;
  51. foreach ($event->changedAttributes as $name => $value) {
  52. if( $oldAttributes[$name] == $value ) continue;
  53. !is_string( $value ) && $value = print_r($value, true);
  54. $desc .= $event->sender->getAttributeLabel($name) . '(' . $name . ') : ' . $value . '=>' . $event->sender->oldAttributes[$name] . ',<br>';
  55. }
  56. $desc = substr($desc, 0, -5);
  57. $model = new AdminLogModel();
  58. $class = $event->sender->className();
  59. $idDes = '';
  60. if (isset($event->sender->id)) {
  61. $idDes = '{{%ID%}} ' . $event->sender->id;
  62. }
  63. $model->description = '{{%ADMIN_USER%}} [ ' . Yii::$app->getUser()->getIdentity()->username . ' ] {{%BY%}} ' . $class . ' [ ' . $class::tableName() . ' ] ' . " {{%UPDATED%}} {$idDes} {{%RECORD%}}: " . $desc;
  64. $model->route = Yii::$app->controller->id . '/' . Yii::$app->controller->action->id;
  65. $model->user_id = Yii::$app->getUser()->id;
  66. $model->save();
  67. }
  68. }
  69. /**
  70. * when delete a record from database, auto generate a log
  71. *
  72. * @param $event
  73. * @throws \Throwable
  74. */
  75. public static function delete($event)
  76. {
  77. $desc = '<br>';
  78. foreach ($event->sender->getAttributes() as $name => $value) {
  79. !is_string( $value ) && $value = print_r($value, true);
  80. $desc .= $event->sender->getAttributeLabel($name) . '(' . $name . ') => ' . $value . ',<br>';
  81. }
  82. $desc = substr($desc, 0, -5);
  83. $model = new AdminLogModel();
  84. $class = $event->sender->className();
  85. $idDes = '';
  86. if (isset($event->sender->id)) {
  87. $idDes = '{{%ID%}} ' . $event->sender->id;
  88. }
  89. $model->description = '{{%ADMIN_USER%}} [ ' . Yii::$app->getUser()->getIdentity()->username . ' ] {{%BY%}} ' . $class . ' [ ' . $class::tableName() . ' ] ' . " {{%DELETED%}} {$idDes} {{%RECORD%}}: " . $desc;
  90. $model->route = Yii::$app->controller->id . '/' . Yii::$app->controller->action->id;
  91. $model->user_id = Yii::$app->getUser()->id;
  92. $model->save();
  93. }
  94. /**
  95. * custom log info
  96. *
  97. * @param CustomLog $event
  98. * @throws yii\base\ErrorException
  99. */
  100. public static function custom(CustomLog $event)
  101. {
  102. $model = new AdminLogModel();
  103. $model->description = $event->getDescription();
  104. $model->route = Yii::$app->controller->id . '/' . Yii::$app->controller->action->id;
  105. $model->user_id = Yii::$app->getUser()->getId();
  106. $model->save();
  107. }
  108. }