123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 2017/3/12
- * Time: 下午4:49
- */
- namespace common\behaviors;
- use common\models\Article;
- use common\models\Comment;
- use common\models\Reward;
- use common\models\Suggest;
- use common\models\Vote;
- use common\traits\EntityTrait;
- use Yii;
- use yii\base\Behavior;
- use yii\base\Event;
- use yii\db\ActiveRecord;
- use yii\helpers\Markdown;
- use yii\helpers\StringHelper;
- use yii\web\Application;
- class NotifyBehavior extends Behavior
- {
- public function events()
- {
- return [
- Application::EVENT_BEFORE_REQUEST => 'bindEvent',
- ];
- }
- public function bindEvent($event)
- {
- Event::on(ActiveRecord::className(), 'afterInsert', [$this, 'afterInsert']);
- }
- public function afterInsert($event)
- {
- $entity = get_class($event->sender);
- switch ($entity) {
- case 'common\models\Comment':
- $fromUid = $event->sender->user_id;
- // 如果是回复,发站内信,通知什么的
- if ($event->sender->parent_id > 0) {
- $toUid = $event->sender->reply_uid ?: $event->sender->parent->user_id;
- $category = 'reply';
- $extra = [
- 'entity' => $event->sender->entity,
- 'entity_id' => $event->sender->entity_id,
- 'comment_id' => $event->sender->id,
- 'comment' => $this->generateMsgContent($event->sender->content)
- ];
- } else {
- switch ($event->sender->entity) {
- case 'common\models\Article':
- $category = 'comment_article';
- $article = Article::findOne($event->sender->entity_id);
- $toUid = $article->user_id;
- $extra = [
- 'comment' => $this->generateMsgContent($event->sender->content),
- 'comment_id' => $event->sender->id,
- 'entity' => $event->sender->entity,
- 'entity_title' => $article->title,
- 'entity_id' => $article->id
- ];
- break;
- case 'common\models\Suggest':
- $category = 'comment_suggest';
- $suggest = Suggest::findOne($event->sender->entity_id);
- $toUid = $suggest->user_id;
- $extra = [
- 'comment' => $this->generateMsgContent($event->sender->content),
- 'comment_id' => $event->sender->id,
- 'entity' => $event->sender->entity,
- 'entity_title' => $suggest->title,
- 'entity_id' => $event->sender->entity_id
- ];
- break;
- default:
- return;
- break;
- }
- }
- Yii::$app->notify->category($category)
- ->from($fromUid)
- ->to($toUid)
- ->extra($extra)
- ->send();
- break;
- case 'common\models\Suggest':
- $category = 'suggest';
- $fromUid = $event->sender->user_id;
- $toUid = 1; // 先写死
- $extra = [
- 'title' => $this->generateMsgContent($event->sender->content),
- 'entity_id' => $event->sender->id
- ];
- Yii::$app->notify->category($category)
- ->from($fromUid)
- ->to($toUid)
- ->extra($extra)
- ->send();
- break;
- case 'common\models\Vote':
- // 赞才发通知
- if ($event->sender->action == Vote::ACTION_UP) {
- $fromUid = $event->sender->user_id;
- switch ($event->sender->entity) {
- case 'common\models\Article':
- $category = 'up_article';
- $article = Article::findOne($event->sender->entity_id);
- $toUid = $article->user_id;
- $extra = [
- 'entity_title' => $article->title,
- 'entity_id' => $article->id
- ];
- break;
- case 'common\models\Comment':
- $category = 'up_comment';
- $comment = Comment::findOne($event->sender->entity_id);
- $toUid = $comment->user_id;
- $extra = [
- 'comment_title' => $this->generateMsgContent($comment->content),
- 'comment_id' => $comment->id,
- 'entity' => $comment->entity,
- 'entity_id' => $comment->entity_id
- ];
- break;
- default:
- return;
- break;
- }
- \Yii::$app->notify->category($category)
- ->from($fromUid)
- ->to($toUid)
- ->extra($extra)
- ->send();
- }
- break;
- case 'common\models\Favourite':
- $article = $event->sender->article;
- $fromUid = $event->sender->user_id;
- $toUid = $article->user_id;
- $extra = [
- 'entity_title' => $article->title,
- 'entity_id' => $article->id
- ];
- Yii::$app->notify->category('favourite')
- ->from($fromUid)
- ->to($toUid)
- ->extra($extra)
- ->send();
- break;
- case 'common\\modules\\message\\models\\Message':
- Yii::$app->notify->category('message')
- ->from($event->sender->from_uid)
- ->to($event->sender->to_uid)
- ->extra(['message' => $event->sender->data->content])
- ->send();
- break;
- case 'common\\models\\Reward':
- $article = $event->sender->article;
- Yii::$app->notify->category('reward')
- ->from($event->sender->user_id)
- ->to($article->user_id)
- ->extra([
- 'article_title' => $article->title,
- 'article_id' => $article->id,
- 'money' => $event->sender->money,
- 'comment' => $event->sender->comment
- ])
- ->send();
- break;
- case 'common\\models\\Friend':
- Yii::$app->notify->category('follow')
- ->from($event->sender->owner_id)
- ->to($event->sender->friend_id)
- ->send();
- break;
- }
- }
- private function generateMsgContent($content)
- {
- return StringHelper::truncate(preg_replace('/\s+/', ' ', strip_tags(Markdown::process($content))), 50);
- }
- }
|