public function runTask(PhabricatorUser $actor, PhabricatorWorkerBulkJob $job, PhabricatorWorkerBulkTask $task)
 {
     $object = id(new ManiphestTaskQuery())->setViewer($actor)->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->withPHIDs(array($task->getObjectPHID()))->needProjectPHIDs(true)->needSubscriberPHIDs(true)->executeOne();
     if (!$object) {
         return;
     }
     $field_list = PhabricatorCustomField::getObjectFields($object, PhabricatorCustomField::ROLE_EDIT);
     $field_list->readFieldsFromStorage($object);
     $actions = $job->getParameter('actions');
     $xactions = $this->buildTransactions($actions, $object);
     $editor = id(new ManiphestTransactionEditor())->setActor($actor)->setContentSource($job->newContentSource())->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($object, $xactions);
 }
 public function destroyObjectPermanently(PhabricatorDestructionEngine $engine)
 {
     $this->openTransaction();
     // We're only removing the actual task objects. This may leave stranded
     // workers in the queue itself, but they'll just flush out automatically
     // when they can't load bulk job data.
     $task_table = new PhabricatorWorkerBulkTask();
     $conn_w = $task_table->establishConnection('w');
     queryfx($conn_w, 'DELETE FROM %T WHERE bulkJobPHID = %s', $task_table->getPHID(), $this->getPHID());
     $this->delete();
     $this->saveTransaction();
 }