public static function updateTaskSubscribers(ManiphestTask $task)
 {
     $dao = new ManiphestTaskSubscriber();
     $conn = $dao->establishConnection('w');
     $sql = array();
     $subscribers = $task->getCCPHIDs();
     $subscribers[] = $task->getOwnerPHID();
     $subscribers = array_unique($subscribers);
     foreach ($subscribers as $subscriber_phid) {
         $sql[] = qsprintf($conn, '(%s, %s)', $task->getPHID(), $subscriber_phid);
     }
     queryfx($conn, 'DELETE FROM %T WHERE taskPHID = %s', $dao->getTableName(), $task->getPHID());
     if ($sql) {
         queryfx($conn, 'INSERT INTO %T (taskPHID, subscriberPHID) VALUES %Q', $dao->getTableName(), implode(', ', $sql));
     }
 }
Exemplo n.º 2
0
 private function buildSubscriberJoinClause($conn)
 {
     if (!$this->subscriberPHIDs) {
         return null;
     }
     $subscriber_dao = new ManiphestTaskSubscriber();
     return qsprintf($conn, 'JOIN %T subscriber ON subscriber.taskPHID = task.phid', $subscriber_dao->getTableName());
 }
Exemplo n.º 3
0
 private function buildJoinsClause(AphrontDatabaseConnection $conn_r)
 {
     $edge_table = PhabricatorEdgeConfig::TABLE_NAME_EDGE;
     $joins = array();
     if ($this->projectPHIDs || $this->includeNoProject) {
         $joins[] = qsprintf($conn_r, '%Q JOIN %T project ON project.src = task.phid
       AND project.type = %d', $this->includeNoProject ? 'LEFT' : '', $edge_table, PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
     }
     if ($this->anyProjectPHIDs || $this->anyUserProjectPHIDs) {
         $joins[] = qsprintf($conn_r, 'JOIN %T anyproject ON anyproject.src = task.phid
       AND anyproject.type = %d', $edge_table, PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
     }
     if ($this->xprojectPHIDs) {
         $joins[] = qsprintf($conn_r, 'LEFT JOIN %T xproject ON xproject.src = task.phid
       AND xproject.type = %d
       AND xproject.dst IN (%Ls)', $edge_table, PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, $this->xprojectPHIDs);
     }
     if ($this->subscriberPHIDs) {
         $subscriber_dao = new ManiphestTaskSubscriber();
         $joins[] = qsprintf($conn_r, 'JOIN %T subscriber ON subscriber.taskPHID = task.phid', $subscriber_dao->getTableName());
     }
     switch ($this->groupBy) {
         case self::GROUP_PROJECT:
             $ignore_group_phids = $this->getIgnoreGroupedProjectPHIDs();
             if ($ignore_group_phids) {
                 $joins[] = qsprintf($conn_r, 'LEFT JOIN %T projectGroup ON task.phid = projectGroup.src
           AND projectGroup.type = %d
           AND projectGroup.dst NOT IN (%Ls)', $edge_table, PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, $ignore_group_phids);
             } else {
                 $joins[] = qsprintf($conn_r, 'LEFT JOIN %T projectGroup ON task.phid = projectGroup.src
           AND projectGroup.type = %d', $edge_table, PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
             }
             $joins[] = qsprintf($conn_r, 'LEFT JOIN %T projectGroupName
         ON projectGroup.dst = projectGroupName.indexedObjectPHID', id(new ManiphestNameIndex())->getTableName());
             break;
     }
     $joins[] = $this->buildApplicationSearchJoinClause($conn_r);
     return implode(' ', $joins);
 }