コード例 #1
0
ファイル: Module.php プロジェクト: VasileGabriel/humhub
 /**
  * Returns all activities which should be send by e-mail to the given user
  * in the given interval
  *
  * @see \humhub\modules\content\components\MailUpdateSender
  * @param User $user
  * @param int $interval
  * @return components\BaseActivity[]
  */
 public function getMailActivities(User $user, $interval)
 {
     $receive_email_activities = Yii::$app->getModule('activity')->settings->contentContainer($user)->get('receive_email_activities');
     if ($receive_email_activities === null) {
         // Use Default Setting
         $receive_email_activities = Yii::$app->getModule('activity')->settings->get('receive_email_activities');
     }
     // User never wants activity content
     if ($receive_email_activities == User::RECEIVE_EMAIL_NEVER) {
         return [];
     }
     // We are in hourly mode and user wants receive a daily summary
     if ($interval == MailUpdateSender::INTERVAL_HOURY && $receive_email_activities == User::RECEIVE_EMAIL_DAILY_SUMMARY) {
         return [];
     }
     // We are in daily mode and user wants receive not daily
     if ($interval == MailUpdateSender::INTERVAL_DAILY && $receive_email_activities != User::RECEIVE_EMAIL_DAILY_SUMMARY) {
         return [];
     }
     // User is online and want only receive when offline
     if ($interval == MailUpdateSender::INTERVAL_HOURY) {
         $isOnline = count($user->httpSessions) > 0;
         if ($receive_email_activities == User::RECEIVE_EMAIL_WHEN_OFFLINE && $isOnline) {
             return [];
         }
     }
     $lastMailDate = $user->last_activity_email;
     if ($lastMailDate == "" || $lastMailDate == "0000-00-00 00:00:00") {
         $lastMailDate = new \yii\db\Expression('NOW() - INTERVAL 24 HOUR');
     }
     $stream = new \humhub\modules\dashboard\components\actions\DashboardStream('stream', Yii::$app->controller);
     $stream->limit = 50;
     $stream->mode = \humhub\modules\content\components\actions\Stream::MODE_ACTIVITY;
     $stream->user = $user;
     $stream->init();
     $stream->activeQuery->andWhere(['>', 'content.created_at', $lastMailDate]);
     $activities = [];
     foreach ($stream->getWallEntries() as $wallEntry) {
         try {
             $activity = $wallEntry->content->getPolymorphicRelation();
             $activities[] = $activity->getActivityBaseClass();
         } catch (\yii\base\Exception $ex) {
             \Yii::error($ex->getMessage());
             return [];
         }
     }
     $user->updateAttributes(['last_activity_email' => new \yii\db\Expression('NOW()')]);
     return $activities;
 }
コード例 #2
0
ファイル: Module.php プロジェクト: dakur/humhub
 public function getMailUpdate(User $user, $interval)
 {
     $output = ['html' => '', 'plaintext' => ''];
     $receive_email_activities = $user->getSetting("receive_email_activities", 'core', Setting::Get('receive_email_activities', 'mailing'));
     // User never wants activity content
     if ($receive_email_activities == User::RECEIVE_EMAIL_NEVER) {
         return "";
     }
     // We are in hourly mode and user wants receive a daily summary
     if ($interval == CronController::EVENT_ON_HOURLY_RUN && $receive_email_activities == User::RECEIVE_EMAIL_DAILY_SUMMARY) {
         return "";
     }
     // We are in daily mode and user wants receive not daily
     if ($interval == CronController::EVENT_ON_DAILY_RUN && $receive_email_activities != User::RECEIVE_EMAIL_DAILY_SUMMARY) {
         return "";
     }
     // User is online and want only receive when offline
     if ($interval == CronController::EVENT_ON_HOURLY_RUN) {
         $isOnline = count($user->httpSessions) > 0;
         if ($receive_email_activities == User::RECEIVE_EMAIL_WHEN_OFFLINE && $isOnline) {
             return "";
         }
     }
     $lastMailDate = $user->last_activity_email;
     if ($lastMailDate == "" || $lastMailDate == "0000-00-00 00:00:00") {
         $lastMailDate = new \yii\db\Expression('NOW() - INTERVAL 24 HOUR');
     }
     $stream = new \humhub\modules\dashboard\components\actions\DashboardStream('stream', Yii::$app->controller);
     $stream->limit = 50;
     $stream->mode = \humhub\modules\content\components\actions\Stream::MODE_ACTIVITY;
     $stream->user = $user;
     $stream->init();
     $stream->activeQuery->andWhere(['>', 'content.created_at', $lastMailDate]);
     foreach ($stream->getWallEntries() as $wallEntry) {
         try {
             $activity = $wallEntry->content->getPolymorphicRelation();
             $output['html'] .= $activity->getActivityBaseClass()->render(BaseActivity::OUTPUT_MAIL);
             $output['plaintext'] .= $activity->getActivityBaseClass()->render(BaseActivity::OUTPUT_MAIL_PLAINTEXT);
         } catch (\yii\base\Exception $ex) {
             \Yii::error($ex->getMessage());
         }
     }
     $user->last_activity_email = new \yii\db\Expression('NOW()');
     $user->save();
     return $output;
 }