mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-27 01:02:42 +01:00
Add Conduit method for querying user status
Summary: I want to use this to warn user if he specifies reviewers that are away. We can also implement a general query method but I think that this usage is the most useful not only for me but also in general case. Test Plan: Call the method for user which is away and which is not away. Add user status through Conduit. Reviewers: btrahan Reviewed By: btrahan CC: aran, epriestley Differential Revision: https://secure.phabricator.com/D2492
This commit is contained in:
parent
f1f43f0acf
commit
2476c872ff
5 changed files with 96 additions and 9 deletions
|
@ -185,6 +185,7 @@ phutil_register_library_map(array(
|
||||||
'ConduitAPI_user_Method' => 'applications/conduit/method/user/base',
|
'ConduitAPI_user_Method' => 'applications/conduit/method/user/base',
|
||||||
'ConduitAPI_user_addstatus_Method' => 'applications/conduit/method/user/addstatus',
|
'ConduitAPI_user_addstatus_Method' => 'applications/conduit/method/user/addstatus',
|
||||||
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
|
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
|
||||||
|
'ConduitAPI_user_getcurrentstatus_Method' => 'applications/conduit/method/user/getcurrentstatus',
|
||||||
'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info',
|
'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info',
|
||||||
'ConduitAPI_user_query_Method' => 'applications/conduit/method/user/query',
|
'ConduitAPI_user_query_Method' => 'applications/conduit/method/user/query',
|
||||||
'ConduitAPI_user_removestatus_Method' => 'applications/conduit/method/user/removestatus',
|
'ConduitAPI_user_removestatus_Method' => 'applications/conduit/method/user/removestatus',
|
||||||
|
@ -1217,6 +1218,7 @@ phutil_register_library_map(array(
|
||||||
'ConduitAPI_user_Method' => 'ConduitAPIMethod',
|
'ConduitAPI_user_Method' => 'ConduitAPIMethod',
|
||||||
'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
|
||||||
|
'ConduitAPI_user_getcurrentstatus_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_query_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_query_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method',
|
||||||
|
|
|
@ -73,19 +73,11 @@ final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
||||||
throw new ConduitException('ERR-OVERLAP');
|
throw new ConduitException('ERR-OVERLAP');
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($request->getValue('status')) {
|
|
||||||
case 'sporadic':
|
|
||||||
$status = PhabricatorUserStatus::STATUS_SPORADIC;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$status = PhabricatorUserStatus::STATUS_AWAY;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
id(new PhabricatorUserStatus())
|
id(new PhabricatorUserStatus())
|
||||||
->setUserPHID($user_phid)
|
->setUserPHID($user_phid)
|
||||||
->setDateFrom($from)
|
->setDateFrom($from)
|
||||||
->setDateTo($to)
|
->setDateTo($to)
|
||||||
->setStatus($status)
|
->setTextStatus($request->getValue('status'))
|
||||||
->save();
|
->save();
|
||||||
|
|
||||||
$table->endWriteLocking();
|
$table->endWriteLocking();
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group conduit
|
||||||
|
*/
|
||||||
|
final class ConduitAPI_user_getcurrentstatus_Method
|
||||||
|
extends ConduitAPI_user_Method {
|
||||||
|
|
||||||
|
public function getMethodStatus() {
|
||||||
|
return self::METHOD_STATUS_UNSTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethodDescription() {
|
||||||
|
return "Get current status (away or sporadic) of specified users.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineParamTypes() {
|
||||||
|
return array(
|
||||||
|
'userPHIDs' => 'required list',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineReturnType() {
|
||||||
|
return 'dict';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineErrorTypes() {
|
||||||
|
return array(
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(ConduitAPIRequest $request) {
|
||||||
|
$statuses = id(new PhabricatorUserStatus())->loadAllWhere(
|
||||||
|
'userPHID IN (%Ls) AND UNIX_TIMESTAMP() BETWEEN dateFrom AND dateTo',
|
||||||
|
$request->getValue('userPHIDs'));
|
||||||
|
|
||||||
|
$return = array();
|
||||||
|
foreach ($statuses as $status) {
|
||||||
|
$return[$status->getUserPHID()] = array(
|
||||||
|
'fromEpoch' => $status->getDateFrom(),
|
||||||
|
'toEpoch' => $status->getDateTo(),
|
||||||
|
'status' => $status->getTextStatus(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/conduit/method/user/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/people/storage/userstatus');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('ConduitAPI_user_getcurrentstatus_Method.php');
|
|
@ -21,9 +21,23 @@ final class PhabricatorUserStatus extends PhabricatorUserDAO {
|
||||||
const STATUS_AWAY = 1;
|
const STATUS_AWAY = 1;
|
||||||
const STATUS_SPORADIC = 2;
|
const STATUS_SPORADIC = 2;
|
||||||
|
|
||||||
|
private static $statusTexts = array(
|
||||||
|
self::STATUS_AWAY => 'away',
|
||||||
|
self::STATUS_SPORADIC => 'sporadic',
|
||||||
|
);
|
||||||
|
|
||||||
protected $userPHID;
|
protected $userPHID;
|
||||||
protected $dateFrom;
|
protected $dateFrom;
|
||||||
protected $dateTo;
|
protected $dateTo;
|
||||||
protected $status;
|
protected $status;
|
||||||
|
|
||||||
|
public function getTextStatus() {
|
||||||
|
return self::$statusTexts[$this->status];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTextStatus($status) {
|
||||||
|
$statuses = array_flip(self::$statusTexts);
|
||||||
|
return $this->setStatus($statuses[$status]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue