/** * Grabs all new notifications and adds them to the sender's inform queue. * * This method gets called by dashboard's hooks file to display new * notifications on every pageload. * * @since 2.0.18 * @access public * * @param Gdn_Controller $Sender The object calling this method. */ public static function InformNotifications($Sender) { $Session = Gdn::Session(); if (!$Session->IsValid()) { return; } $ActivityModel = new ActivityModel(); // Get five pending notifications. $Where = array('NotifyUserID' => Gdn::Session()->UserID, 'Notified' => ActivityModel::SENT_PENDING); // If we're in the middle of a visit only get very recent notifications. $Where['DateUpdated >'] = Gdn_Format::ToDateTime(strtotime('-5 minutes')); $Activities = $ActivityModel->GetWhere($Where, 0, 5)->ResultArray(); $ActivityIDs = ConsolidateArrayValuesByKey($Activities, 'ActivityID'); $ActivityModel->SetNotified($ActivityIDs); foreach ($Activities as $Activity) { if ($Activity['Photo']) { $UserPhoto = Anchor(Img($Activity['Photo'], array('class' => 'ProfilePhotoMedium')), $Activity['Url'], 'Icon'); } else { $UserPhoto = ''; } $Excerpt = Gdn_Format::Display($Activity['Story']); $ActivityClass = ' Activity-' . $Activity['ActivityType']; $Sender->InformMessage($UserPhoto . Wrap($Activity['Headline'], 'div', array('class' => 'Title')) . Wrap($Excerpt, 'div', array('class' => 'Excerpt')), 'Dismissable AutoDismiss' . $ActivityClass . ($UserPhoto == '' ? '' : ' HasIcon')); } }
public function GetData($Limit = FALSE) { if (!$Limit) { $Limit = $this->Limit; } $ActivityModel = new ActivityModel(); $Data = $ActivityModel->GetWhere(array('NotifyUserID' => ActivityModel::NOTIFY_PUBLIC), 0, $Limit); $this->ActivityData = $Data; }
/** * Default activity stream. * * @since 2.0.0 * @access public * @todo Validate comment length rather than truncating. * * @param int $Offset Number of activity items to skip. */ public function Index($Filter = FALSE, $Page = FALSE) { switch (strtolower($Filter)) { case 'mods': $this->Title(T('Recent Moderator Activity')); $this->Permission('Garden.Moderation.Manage'); $NotifyUserID = ActivityModel::NOTIFY_MODS; break; case 'admins': $this->Title(T('Recent Admin Activity')); $this->Permission('Garden.Settings.Manage'); $NotifyUserID = ActivityModel::NOTIFY_ADMINS; break; default: $Filter = 'public'; $this->Title(T('Recent Activity')); $this->Permission('Garden.Activity.View'); $NotifyUserID = ActivityModel::NOTIFY_PUBLIC; break; } // Which page to load list($Offset, $Limit) = OffsetLimit($Page, 30); $Offset = is_numeric($Offset) ? $Offset : 0; if ($Offset < 0) { $Offset = 0; } // Page meta. $this->AddJsFile('activity.js'); if ($this->Head) { $this->Head->AddRss(Url('/activity/feed.rss', TRUE), $this->Head->Title()); } // Comment submission $Session = Gdn::Session(); $Comment = $this->Form->GetFormValue('Comment'); $Activities = $this->ActivityModel->GetWhere(array('NotifyUserID' => $NotifyUserID), $Offset, $Limit)->ResultArray(); $this->ActivityModel->JoinComments($Activities); $this->SetData('Filter', strtolower($Filter)); $this->SetData('Activities', $Activities); $this->AddModule('ActivityFilterModule'); $this->View = 'all'; $this->Render(); }