コード例 #1
0
 protected function applyFinalEffects(PhabricatorLiskDAO $object, array $xactions)
 {
     $message_count = 0;
     foreach ($xactions as $xaction) {
         switch ($xaction->getTransactionType()) {
             case PhabricatorTransactions::TYPE_COMMENT:
                 $message_count++;
                 break;
         }
     }
     // update everyone's participation status on the last xaction -only-
     $xaction = end($xactions);
     $xaction_phid = $xaction->getPHID();
     $behind = ConpherenceParticipationStatus::BEHIND;
     $up_to_date = ConpherenceParticipationStatus::UP_TO_DATE;
     $participants = $object->getParticipants();
     $user = $this->getActor();
     $time = time();
     foreach ($participants as $phid => $participant) {
         if ($phid != $user->getPHID()) {
             if ($participant->getParticipationStatus() != $behind) {
                 $participant->setBehindTransactionPHID($xaction_phid);
                 $participant->setSeenMessageCount($object->getMessageCount() - $message_count);
             }
             $participant->setParticipationStatus($behind);
             $participant->setDateTouched($time);
         } else {
             $participant->setSeenMessageCount($object->getMessageCount());
             $participant->setBehindTransactionPHID($xaction_phid);
             $participant->setParticipationStatus($up_to_date);
             $participant->setDateTouched($time);
         }
         $participant->save();
     }
     PhabricatorUserCache::clearCaches(PhabricatorUserMessageCountCacheType::KEY_COUNT, array_keys($participants));
     if ($xactions) {
         $data = array('type' => 'message', 'threadPHID' => $object->getPHID(), 'messageID' => last($xactions)->getID(), 'subscribers' => array($object->getPHID()));
         PhabricatorNotificationClient::tryToPostMessage($data);
     }
     return $xactions;
 }
コード例 #2
0
 private function insertNotifications($chrono_key, array $subscribed_phids)
 {
     if (!$this->primaryObjectPHID) {
         throw new Exception(pht('You must call %s if you %s!', 'setPrimaryObjectPHID()', 'setSubscribedPHIDs()'));
     }
     $notif = new PhabricatorFeedStoryNotification();
     $sql = array();
     $conn = $notif->establishConnection('w');
     $will_receive_mail = array_fill_keys($this->mailRecipientPHIDs, true);
     $user_phids = array_unique($subscribed_phids);
     foreach ($user_phids as $user_phid) {
         if (isset($will_receive_mail[$user_phid])) {
             $mark_read = 1;
         } else {
             $mark_read = 0;
         }
         $sql[] = qsprintf($conn, '(%s, %s, %s, %d)', $this->primaryObjectPHID, $user_phid, $chrono_key, $mark_read);
     }
     if ($sql) {
         queryfx($conn, 'INSERT INTO %T ' . '(primaryObjectPHID, userPHID, chronologicalKey, hasViewed) ' . 'VALUES %Q', $notif->getTableName(), implode(', ', $sql));
     }
     PhabricatorUserCache::clearCaches(PhabricatorUserNotificationCountCacheType::KEY_COUNT, $user_phids);
 }