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));
     }
 }
 public function save()
 {
     if (!$this->mailKey) {
         $this->mailKey = Filesystem::readRandomCharacters(20);
     }
     $result = parent::save();
     if ($this->projectsNeedUpdate) {
         // If we've changed the project PHIDs for this task, update the link
         // table.
         ManiphestTaskProject::updateTaskProjects($this);
         $this->projectsNeedUpdate = false;
     }
     if ($this->subscribersNeedUpdate) {
         // If we've changed the subscriber PHIDs for this task, update the link
         // table.
         ManiphestTaskSubscriber::updateTaskSubscribers($this);
         $this->subscribersNeedUpdate = false;
     }
     if ($this->auxiliaryDirty) {
         $this->writeAuxiliaryUpdates();
         $this->auxiliaryDirty = array();
     }
     return $result;
 }
 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());
 }
 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);
 }
Exemple #5
0
 public function save()
 {
     if (!$this->mailKey) {
         $this->mailKey = Filesystem::readRandomCharacters(20);
     }
     $result = parent::save();
     if ($this->subscribersNeedUpdate) {
         // If we've changed the subscriber PHIDs for this task, update the link
         // table.
         ManiphestTaskSubscriber::updateTaskSubscribers($this);
         $this->subscribersNeedUpdate = false;
     }
     return $result;
 }
#!/usr/bin/env php
<?php 
/*
 * Copyright 2011 Facebook, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
$root = dirname(dirname(dirname(__FILE__)));
require_once $root . '/scripts/__init_script__.php';
ini_set('memory_limit', -1);
$tasks = id(new ManiphestTask())->loadAll();
echo "Updating relationships for " . count($tasks) . " tasks";
foreach ($tasks as $task) {
    ManiphestTaskProject::updateTaskProjects($task);
    ManiphestTaskSubscriber::updateTaskSubscribers($task);
    echo '.';
}
echo "\nDone.\n";