Changeset View
Changeset View
Standalone View
Standalone View
src/applications/nuance/item/NuanceGitHubEventItemType.php
Show First 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | private function getGitHubRepositoryAPIEventDisplayName(NuanceItem $item) { | ||||
return pht('GitHub %s %s', $repo, $name); | return pht('GitHub %s %s', $repo, $name); | ||||
} | } | ||||
public function canUpdateItems() { | public function canUpdateItems() { | ||||
return true; | return true; | ||||
} | } | ||||
protected function updateItemFromSource(NuanceItem $item) { | protected function updateItemFromSource(NuanceItem $item) { | ||||
$viewer = $this->getViewer(); | |||||
$is_dirty = false; | |||||
// TODO: Link up the requestor, etc. | // TODO: Link up the requestor, etc. | ||||
$source = $item->getSource(); | |||||
$token = $source->getSourceProperty('github.token'); | |||||
$token = new PhutilOpaqueEnvelope($token); | |||||
$ref = $this->getDoorkeeperRef($item); | |||||
if ($ref) { | |||||
$ref = id(new DoorkeeperImportEngine()) | |||||
->setViewer($viewer) | |||||
->setRefs(array($ref)) | |||||
->setThrowOnMissingLink(true) | |||||
->setContextProperty('github.token', $token) | |||||
->executeOne(); | |||||
if ($ref->getSyncFailed()) { | |||||
$xobj = null; | |||||
} else { | |||||
$xobj = $ref->getExternalObject(); | |||||
} | |||||
if ($xobj) { | |||||
$item->setItemProperty('doorkeeper.xobj.phid', $xobj->getPHID()); | |||||
$is_dirty = true; | |||||
} | |||||
} | |||||
if ($item->getStatus() == NuanceItem::STATUS_IMPORTING) { | if ($item->getStatus() == NuanceItem::STATUS_IMPORTING) { | ||||
$item | $item->setStatus(NuanceItem::STATUS_ROUTING); | ||||
->setStatus(NuanceItem::STATUS_ROUTING) | $is_dirty = true; | ||||
->save(); | |||||
} | } | ||||
if ($is_dirty) { | |||||
$item->save(); | |||||
} | |||||
} | |||||
private function getDoorkeeperRef(NuanceItem $item) { | |||||
$raw = $this->newRawEvent($item); | |||||
$full_repository = $raw->getRepositoryFullName(); | |||||
if (!strlen($full_repository)) { | |||||
return null; | |||||
} | |||||
if ($raw->isIssueEvent()) { | |||||
$ref_type = DoorkeeperBridgeGitHubIssue::OBJTYPE_GITHUB_ISSUE; | |||||
$issue_number = $raw->getIssueNumber(); | |||||
$full_ref = "{$full_repository}#{$issue_number}"; | |||||
} else { | |||||
return null; | |||||
} | |||||
return id(new DoorkeeperObjectRef()) | |||||
->setApplicationType(DoorkeeperBridgeGitHub::APPTYPE_GITHUB) | |||||
->setApplicationDomain(DoorkeeperBridgeGitHub::APPDOMAIN_GITHUB) | |||||
->setObjectType($ref_type) | |||||
->setObjectID($full_ref); | |||||
} | |||||
private function newRawEvent(NuanceItem $item) { | |||||
$type = $item->getItemProperty('api.type'); | |||||
$raw = $item->getItemProperty('api.raw', array()); | |||||
return NuanceGitHubRawEvent::newEvent($type, $raw); | |||||
} | } | ||||
} | } |