/models/Entity.php

https://gitlab.com/nitm/yii2-module · PHP · 175 lines · 149 code · 20 blank · 6 comment · 11 complexity · 7db030435fb25d84a17bf711c7156f85 MD5 · raw file

  1. <?php
  2. namespace nitm\models;
  3. class Entity extends Data
  4. {
  5. use \nitm\traits\Nitm, \nitm\traits\RelatedRecords;
  6. public $hasNewActivity;
  7. public function scenarios()
  8. {
  9. return array_merge(parent::scenarios(), $this->nitmScenarios());
  10. }
  11. public function behaviors()
  12. {
  13. $behaviors = [];
  14. if ($this->hasAttribute('deleted_at')) {
  15. $behaviors['softDelete'] = [
  16. 'class' => \nitm\behaviors\SoftDelete::className(),
  17. ];
  18. }
  19. if ($this->hasAttribute('author_id')) {
  20. $behaviors['blamable'] = [
  21. 'class' => \yii\behaviors\BlameableBehavior::className(),
  22. 'attributes' => [
  23. \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => 'author_id',
  24. ],
  25. 'value' => function ($event) {
  26. if (\Yii::$app->user->identity instanceof \nitm\cms\models\Admin) {
  27. return \Yii::$app->user->identity->publicUser->id;
  28. } else {
  29. return \Yii::$app->user->identity->id;
  30. }
  31. }
  32. ];
  33. }
  34. if ($this->hasAttribute('editor_id')) {
  35. $behaviors['blamable']['attributes'][\yii\db\ActiveRecord::EVENT_BEFORE_UPDATE] = 'editor_id';
  36. }
  37. if ($this->hasAttribute('created_at')) {
  38. $behaviors['timestamp'] = [
  39. 'class' => \yii\behaviors\TimestampBehavior::className(),
  40. 'attributes' => [
  41. \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => 'created_at',
  42. ],
  43. 'value' => new \yii\db\Expression('NOW()'),
  44. ];
  45. }
  46. if ($this->hasAttribute('updated_at')) {
  47. $behaviors['timestamp']['attributes'][\yii\db\ActiveRecord::EVENT_BEFORE_UPDATE] = 'updated_at';
  48. }
  49. $behaviors['dates'] = [
  50. 'class' => \nitm\behaviors\DateAttributes::className(),
  51. 'attributes' => ['deleted_at', 'created_at', 'updated_at'],
  52. ];
  53. return array_merge(parent::behaviors(), $behaviors);
  54. }
  55. public function initalizeEventData(&$event)
  56. {
  57. $event->data = [
  58. 'action' => $event->sender->getScenario(),
  59. 'variables' => [
  60. '%id%' => $event->sender->getId(),
  61. '%viewLink%' => \nitm\helpers\Html::a(
  62. \Yii::$app->urlManager->createAbsoluteUrl($event->sender->isWhat().'/view/'.$event->sender->getId()),
  63. \Yii::$app->urlManager->createAbsoluteUrl($event->sender->isWhat().'/view/'.$event->sender->getId())
  64. ),
  65. ],
  66. ];
  67. }
  68. /**
  69. * Get the query that orders items by their activity.
  70. */
  71. public function getSort()
  72. {
  73. $ret_val = [];
  74. //Create the user sort parameters
  75. static::addSortParams($ret_val, [
  76. 'author_id' => ['author', 'Author', 'username'],
  77. 'editor_id' => ['editor', 'Updateor', 'username'],
  78. 'resolved_by' => ['resolvedBy', 'Resolved By', 'username'],
  79. 'closed_by' => ['closedBy', 'Closed By', 'username'],
  80. 'disabled_by' => ['disabledBy', 'Disabled By', 'username'],
  81. 'deleted_by' => ['deletedBy', 'Deleted By', 'username'],
  82. 'completed_by' => ['completedBy', 'Completed By', 'username'],
  83. ]);
  84. //Create the date sort parameters
  85. static::addSortParams($ret_val, [
  86. 'created_at' => [null, 'Created At'],
  87. 'updated_at' => [null, 'Updated At'],
  88. 'resolved_at' => [null, 'Resolved At'],
  89. 'closed_at' => [null, 'Closed At'],
  90. 'disabled_at' => [null, 'Disabled At'],
  91. 'deleted_at' => [null, 'Deleted At'],
  92. 'completed_at' => [null, 'Completed At'],
  93. ]);
  94. $ret_val['date'] = [
  95. 'asc' => ['created_at' => SORT_ASC, 'updated_at' => SORT_ASC],
  96. 'desc' => ['created_at' => SORT_DESC, 'updated_at' => SORT_DESC],
  97. 'default' => SORT_DESC,
  98. 'label' => 'Date',
  99. ];
  100. //Create the category sort parameters
  101. static::addSortParams($ret_val, [
  102. 'type_id' => ['type', 'Type', 'name'],
  103. 'category_id' => ['category', 'Category', 'name'],
  104. 'level_id' => ['level', 'Level', 'name'],
  105. ]);
  106. return $ret_val;
  107. }
  108. public function getAlertOptions($event)
  109. {
  110. $event->sender->initalizeEventData($event);
  111. $options = [
  112. 'criteria' => [
  113. 'action' => $event->sender->getScenario(),
  114. 'priority' => 'normal',
  115. 'remote_type' => $event->sender->isWhat(),
  116. 'remote_for' => 'any',
  117. ],
  118. ];
  119. foreach (['created_at', 'updated_at', 'resolved_at', 'completed_at', 'disabled_at'] as $dateAttribute) {
  120. if ($event->sender->hasAttribute($dateAttribute)) {
  121. $attribute = '%'.\nitm\helpers\ClassHelper::variableName($dateAttribute).'%';
  122. $date = $event->sender->$dateAttribute instanceof \yii\db\Expression ? strtotime('now') : $event->sender->$dateAttribute;
  123. $options['variables'][$attribute] = \Yii::$app->formatter->asDatetime(strtotime($date));
  124. }
  125. }
  126. switch ($event->sender->getScenario()) {
  127. case 'create':
  128. $options = array_merge($options, [
  129. 'subject' => ['view' => '@app/mail/subjects/new/'.$event->sender->isWhat()],
  130. 'message' => [
  131. 'email' => ['view' => '@app/mail/email/new/'.$event->sender->isWhat()],
  132. 'mobile' => ['view' => '@app/mail/mobile/new/'.$event->sender->isWhat()],
  133. ],
  134. ]);
  135. break;
  136. case 'complete':
  137. case 'resolve':
  138. case 'disable':
  139. case 'update':
  140. case 'close':
  141. $options = array_merge($options, [
  142. 'subject' => ['view' => '@app/mail/subjects/update/'.$event->sender->isWhat()],
  143. 'message' => [
  144. 'email' => ['view' => '@app/mail/email/update/'.$event->sender->isWhat()],
  145. 'mobile' => ['view' => '@app/mail/mobile/update/'.$event->sender->isWhat()],
  146. ],
  147. ]);
  148. break;
  149. }
  150. if (!count($options) && !$event->sender->getId()) {
  151. $options['owner_id'] = $event->sender->hasAttribute('author_id') ? $event->sender->author_id : null;
  152. }
  153. return $options;
  154. }
  155. }