Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2893978
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Advanced/Developer...
View Handle
View Hovercard
Size
8 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/src/applications/conduit/method/paste/info/ConduitAPI_paste_info_Method.php b/src/applications/conduit/method/paste/info/ConduitAPI_paste_info_Method.php
index 31831450ba..45cbde1882 100644
--- a/src/applications/conduit/method/paste/info/ConduitAPI_paste_info_Method.php
+++ b/src/applications/conduit/method/paste/info/ConduitAPI_paste_info_Method.php
@@ -1,60 +1,61 @@
<?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.
*/
class ConduitAPI_paste_info_Method extends ConduitAPIMethod {
public function getMethodDescription() {
return "Retrieve an array of information about a paste.";
}
public function defineParamTypes() {
return array(
'paste_id' => 'required id',
);
}
public function defineReturnType() {
return 'nonempty dict';
}
public function defineErrorTypes() {
return array(
'ERR_BAD_PASTE' => 'No such paste exists',
);
}
protected function execute(ConduitAPIRequest $request) {
$paste_id = $request->getValue('paste_id');
$paste = id(new PhabricatorPaste())->load($paste_id);
if (!$paste) {
throw new ConduitException('ERR_BAD_PASTE');
}
$result = array(
'id' => $paste->getID(),
'phid' => $paste->getPHID(),
'authorPHID' => $paste->getAuthorPHID(),
'filePHID' => $paste->getFilePHID(),
'title' => $paste->getTitle(),
'dateCreated' => $paste->getDateCreated(),
+ 'uri' => PhabricatorEnv::getProductionURI('/P'.$paste->getID()),
);
return $result;
}
}
diff --git a/src/applications/conduit/method/paste/info/__init__.php b/src/applications/conduit/method/paste/info/__init__.php
index 1a92ec47f0..eafc577b4e 100644
--- a/src/applications/conduit/method/paste/info/__init__.php
+++ b/src/applications/conduit/method/paste/info/__init__.php
@@ -1,16 +1,17 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'applications/conduit/method/base');
phutil_require_module('phabricator', 'applications/conduit/protocol/exception');
phutil_require_module('phabricator', 'applications/paste/storage/paste');
+phutil_require_module('phabricator', 'infrastructure/env');
phutil_require_module('phutil', 'utils');
phutil_require_source('ConduitAPI_paste_info_Method.php');
diff --git a/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php b/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php
index 312ea02ffe..4b8e45bd95 100644
--- a/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php
+++ b/src/infrastructure/daemon/irc/handler/objectname/PhabricatorIRCObjectNameHandler.php
@@ -1,140 +1,160 @@
<?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.
*/
/**
* Looks for Dxxxx, Txxxx and links to them.
*
* @group irc
*/
class PhabricatorIRCObjectNameHandler extends PhabricatorIRCHandler {
/**
* Map of PHIDs to the last mention of them (as an epoch timestamp); prevents
* us from spamming chat when a single object is discussed.
*/
private $recentlyMentioned = array();
public function receiveMessage(PhabricatorIRCMessage $message) {
switch ($message->getCommand()) {
case 'PRIVMSG':
$channel = $message->getChannel();
if (!$channel) {
break;
}
$message = $message->getMessageText();
$matches = null;
$phids = array();
$pattern =
'@'.
'(?<!/)(?:^|\b)'. // Negative lookbehind prevent matching "/D123".
- '(D|T)(\d+)'.
+ '(D|T|P)(\d+)'.
'(?:\b|$)'.
'@';
$revision_ids = array();
$task_ids = array();
+ $paste_ids = array();
$commit_names = array();
if (preg_match_all($pattern, $message, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
switch ($match[1]) {
case 'D':
$revision_ids[] = $match[2];
break;
case 'T':
$task_ids[] = $match[2];
break;
+ case 'P':
+ $paste_ids[] = $match[2];
+ break;
}
}
}
$pattern =
'@'.
'(?<!/)(?:^|\b)'.
'(r[A-Z]+[0-9a-z]{1,40})'.
'(?:\b|$)'.
'@';
if (preg_match_all($pattern, $message, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$commit_names[] = $match[1];
}
}
$output = array();
if ($revision_ids) {
$revisions = $this->getConduit()->callMethodSynchronous(
'differential.find',
array(
'query' => 'revision-ids',
'guids' => $revision_ids,
));
foreach ($revisions as $revision) {
$output[$revision['phid']] =
'D'.$revision['id'].' '.$revision['name'].' - '.
$revision['uri'];
}
}
if ($task_ids) {
foreach ($task_ids as $task_id) {
$task = $this->getConduit()->callMethodSynchronous(
'maniphest.info',
array(
'task_id' => $task_id,
));
$output[$task['phid']] = 'T'.$task['id'].': '.$task['title'].
' (Priority: '.$task['priority'].') - '.$task['uri'];
}
}
+ if ($paste_ids) {
+ foreach ($paste_ids as $paste_id) {
+ $paste = $this->getConduit()->callMethodSynchronous(
+ 'paste.info',
+ array(
+ 'paste_id' => $paste_id,
+ ));
+ // Eventually I'd like to show the username of the paster as well,
+ // however that will need something like a user.username_from_phid
+ // since we (ideally) want to keep the bot to Conduit calls...and
+ // not call to Phabricator-specific stuff (like actually loading
+ // the User object and fetching his/her username.)
+ $output[$paste['phid']] = 'P'.$paste['id'].': '.$paste['uri'];
+ }
+ }
+
if ($commit_names) {
$commits = $this->getConduit()->callMethodSynchronous(
'diffusion.getcommits',
array(
'commits' => $commit_names,
));
foreach ($commits as $commit) {
if (isset($commit['error'])) {
continue;
}
$output[$commit['commitPHID']] = $commit['uri'];
}
}
foreach ($output as $phid => $description) {
// Don't mention the same object more than once every 10 minutes, so
// we avoid spamming the chat over and over again for discsussions of
// a specific revision, for example.
$quiet_until = idx($this->recentlyMentioned, $phid, 0) + (60 * 10);
if (time() < $quiet_until) {
continue;
}
$this->recentlyMentioned[$phid] = time();
$this->write('PRIVMSG', "{$channel} :{$description}");
}
break;
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Jan 19 2025, 19:12 (5 w, 20 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1127837
Default Alt Text
(8 KB)
Attached To
Mode
rP Phorge
Attached
Detach File
Event Timeline
Log In to Comment