示例#1
0
 public function statsAction()
 {
     $this->view->threads = Posts::count();
     $this->view->replies = Posts::sum(array('column' => 'number_replies'));
     $this->view->votes = Posts::sum(array('column' => 'votes_up + votes_down'));
     $this->view->users = Users::count();
     $this->view->karma = Users::sum(array('column' => 'karma'));
     $this->view->notifications = Notifications::count();
     $this->view->unotifications = ActivityNotifications::count();
     $this->view->views = Posts::sum(array('column' => 'number_views'));
     $this->view->irc = IrcLog::count();
 }
示例#2
0
文件: Posts.php 项目: woyifang/forum
 public function afterCreate()
 {
     /**
      * Register a new activity
      */
     if ($this->id > 0) {
         /**
          * Register the activity
          */
         $activity = new Activities();
         $activity->users_id = $this->users_id;
         $activity->posts_id = $this->id;
         $activity->type = Activities::NEW_POST;
         $activity->save();
         /**
          * Notify users that always want notifications
          */
         $notification = new PostsNotifications();
         $notification->users_id = $this->users_id;
         $notification->posts_id = $this->id;
         $notification->save();
         /**
          * Notify users that always want notifications
          */
         $toNotify = [];
         foreach (Users::find(['notifications = "Y"', 'columns' => 'id']) as $user) {
             if ($this->users_id != $user->id) {
                 $notification = new Notifications();
                 $notification->users_id = $user->id;
                 $notification->posts_id = $this->id;
                 $notification->type = 'P';
                 $notification->save();
                 $toNotify[$user->id] = $notification->id;
             }
         }
         /**
          * Update the total of posts related to a category
          */
         $this->category->number_posts++;
         $this->category->save();
         /**
          * Queue notifications to be sent
          */
         $this->getDI()->getQueue()->put($toNotify);
     }
 }
示例#3
0
 /**
  * Check the queue from Beanstalk and send the notifications scheduled there
  */
 public function consumeQueue()
 {
     while (true) {
         while ($this->queue->peekReady() !== false) {
             $job = $this->queue->reserve();
             $message = $job->getBody();
             foreach ($message as $userId => $id) {
                 $notification = Notifications::findFirstById($id);
                 if ($notification) {
                     $this->send($notification);
                 }
             }
             if (is_object($this->transport)) {
                 $this->transport->stop();
                 $this->transport = null;
                 $this->mailer = null;
             }
             $job->delete();
         }
         sleep(5);
     }
 }
示例#4
0
 public function afterCreate()
 {
     if ($this->id > 0) {
         $activity = new Activities();
         $activity->users_id = $this->users_id;
         $activity->posts_id = $this->posts_id;
         $activity->type = Activities::NEW_REPLY;
         $activity->save();
         $toNotify = array();
         /**
          * Notify users that always want notifications
          */
         foreach (Users::find(array('notifications = "Y"', 'columns' => 'id')) as $user) {
             if ($this->users_id != $user->id) {
                 $notification = new Notifications();
                 $notification->users_id = $user->id;
                 $notification->posts_id = $this->posts_id;
                 $notification->posts_replies_id = $this->id;
                 $notification->type = 'C';
                 $notification->save();
                 $activity = new ActivityNotifications();
                 $activity->users_id = $user->id;
                 $activity->posts_id = $this->posts_id;
                 $activity->posts_replies_id = $this->id;
                 $activity->users_origin_id = $this->users_id;
                 $activity->type = 'C';
                 $activity->save();
                 $toNotify[$user->id] = $notification->id;
             }
         }
         /**
          * Register users subscribed to the post
          */
         foreach (PostsSubscribers::findByPostsId($this->posts_id) as $subscriber) {
             if (!isset($toNotify[$subscriber->users_id])) {
                 $notification = new Notifications();
                 $notification->users_id = $subscriber->users_id;
                 $notification->posts_id = $this->posts_id;
                 $notification->posts_replies_id = $this->id;
                 $notification->type = 'C';
                 $notification->save();
                 $activity = new ActivityNotifications();
                 $activity->users_id = $subscriber->users_id;
                 $activity->posts_id = $this->posts_id;
                 $activity->posts_replies_id = $this->id;
                 $activity->users_origin_id = $this->users_id;
                 $activity->type = 'C';
                 $activity->save();
                 $toNotify[$subscriber->users_id] = $notification->id;
             }
         }
         /**
          * Register the user in the post's notifications
          */
         if (!isset($toNotify[$this->users_id])) {
             $parameters = array('users_id = ?0 AND posts_id = ?1', 'bind' => array($this->users_id, $this->posts_id));
             $hasNotifications = PostsNotifications::count($parameters);
             if (!$hasNotifications) {
                 $notification = new PostsNotifications();
                 $notification->users_id = $this->users_id;
                 $notification->posts_id = $this->posts_id;
                 $notification->save();
             }
         }
         /**
          * Notify users that have commented in the same post
          */
         $postsNotifications = PostsNotifications::findByPostsId($this->posts_id);
         foreach ($postsNotifications as $postNotification) {
             if (!isset($toNotify[$postNotification->users_id])) {
                 if ($postNotification->users_id != $this->users_id) {
                     /**
                      * Generate an e-mail notification
                      */
                     $notification = new Notifications();
                     $notification->users_id = $postNotification->users_id;
                     $notification->posts_id = $this->posts_id;
                     $notification->posts_replies_id = $this->id;
                     $notification->type = 'C';
                     $notification->save();
                     $activity = new ActivityNotifications();
                     $activity->users_id = $postNotification->users_id;
                     $activity->posts_id = $this->posts_id;
                     $activity->posts_replies_id = $this->id;
                     $activity->users_origin_id = $this->users_id;
                     $activity->type = 'C';
                     $activity->save();
                     $toNotify[$postNotification->users_id] = $notification->id;
                 }
             }
         }
         /**
          * Queue notifications to be sent
          */
         $this->getDI()->getQueue()->put($toNotify);
     }
 }
示例#5
0
 public function statsAction()
 {
     $this->breadcrumbs->add('Help', '/help')->add('Statistics', '/help/stats', ['linked' => false]);
     $this->tag->setTitle("Statistics");
     $this->view->setVars(['threads' => Posts::count(), 'replies' => Posts::sum(['column' => 'number_replies']), 'votes' => Posts::sum(['column' => 'votes_up + votes_down']), 'users' => Users::count(), 'karma' => Users::sum(['column' => 'karma']), 'notifications' => Notifications::count(), 'unotifications' => ActivityNotifications::count(), 'views' => Posts::sum(['column' => 'number_views']), 'irc' => IrcLog::count()]);
 }