mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-07 12:28:28 +01:00
Add conduit method for deleting user status
Test Plan: All four eventualities. Reviewers: epriestley Reviewed By: epriestley CC: aran, Koolvin Differential Revision: https://secure.phabricator.com/D2383
This commit is contained in:
parent
3fa310f3c0
commit
e4f4b6a3fe
4 changed files with 111 additions and 3 deletions
|
@ -179,6 +179,7 @@ phutil_register_library_map(array(
|
||||||
'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/info',
|
'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/info',
|
||||||
'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_removestatus_Method' => 'applications/conduit/method/user/removestatus',
|
||||||
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
|
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
|
||||||
'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info',
|
'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info',
|
||||||
'ConduitAPI_user_whoami_Method' => 'applications/conduit/method/user/whoami',
|
'ConduitAPI_user_whoami_Method' => 'applications/conduit/method/user/whoami',
|
||||||
|
@ -1200,6 +1201,7 @@ phutil_register_library_map(array(
|
||||||
'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod',
|
'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod',
|
||||||
'ConduitAPI_user_Method' => 'ConduitAPIMethod',
|
'ConduitAPI_user_Method' => 'ConduitAPIMethod',
|
||||||
'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
|
||||||
|
'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
|
||||||
'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method',
|
'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method',
|
||||||
|
|
|
@ -21,6 +21,10 @@
|
||||||
*/
|
*/
|
||||||
final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
||||||
|
|
||||||
|
public function getMethodStatus() {
|
||||||
|
return self::METHOD_STATUS_UNSTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMethodDescription() {
|
public function getMethodDescription() {
|
||||||
return "Add status information to the logged-in user.";
|
return "Add status information to the logged-in user.";
|
||||||
}
|
}
|
||||||
|
@ -46,7 +50,7 @@ final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function execute(ConduitAPIRequest $request) {
|
protected function execute(ConduitAPIRequest $request) {
|
||||||
$userPHID = $request->getUser()->getPHID();
|
$user_phid = $request->getUser()->getPHID();
|
||||||
$from = $request->getValue('fromEpoch');
|
$from = $request->getValue('fromEpoch');
|
||||||
$to = $request->getValue('toEpoch');
|
$to = $request->getValue('toEpoch');
|
||||||
|
|
||||||
|
@ -58,7 +62,7 @@ final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
||||||
// with the next INSERT.
|
// with the next INSERT.
|
||||||
$overlap = id(new PhabricatorUserStatus())->loadAllWhere(
|
$overlap = id(new PhabricatorUserStatus())->loadAllWhere(
|
||||||
'userPHID = %s AND dateFrom < %d AND dateTo > %d',
|
'userPHID = %s AND dateFrom < %d AND dateTo > %d',
|
||||||
$userPHID,
|
$user_phid,
|
||||||
$to,
|
$to,
|
||||||
$from);
|
$from);
|
||||||
if ($overlap) {
|
if ($overlap) {
|
||||||
|
@ -74,7 +78,7 @@ final class ConduitAPI_user_addstatus_Method extends ConduitAPI_user_Method {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
id(new PhabricatorUserStatus())
|
id(new PhabricatorUserStatus())
|
||||||
->setUserPHID($userPHID)
|
->setUserPHID($user_phid)
|
||||||
->setDateFrom($from)
|
->setDateFrom($from)
|
||||||
->setDateTo($to)
|
->setDateTo($to)
|
||||||
->setStatus($status)
|
->setStatus($status)
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?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_removestatus_Method extends ConduitAPI_user_Method {
|
||||||
|
|
||||||
|
public function getMethodStatus() {
|
||||||
|
return self::METHOD_STATUS_UNSTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethodDescription() {
|
||||||
|
return "Delete status information of the logged-in user.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineParamTypes() {
|
||||||
|
return array(
|
||||||
|
'fromEpoch' => 'required int',
|
||||||
|
'toEpoch' => 'required int',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineReturnType() {
|
||||||
|
return 'int';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defineErrorTypes() {
|
||||||
|
return array(
|
||||||
|
'ERR-BAD-EPOCH' => "'toEpoch' must be bigger than 'fromEpoch'.",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(ConduitAPIRequest $request) {
|
||||||
|
$user_phid = $request->getUser()->getPHID();
|
||||||
|
$from = $request->getValue('fromEpoch');
|
||||||
|
$to = $request->getValue('toEpoch');
|
||||||
|
|
||||||
|
if ($to <= $from) {
|
||||||
|
throw new ConduitException('ERR-BAD-EPOCH');
|
||||||
|
}
|
||||||
|
|
||||||
|
$overlap = id(new PhabricatorUserStatus())->loadAllWhere(
|
||||||
|
'userPHID = %s AND dateFrom < %d AND dateTo > %d',
|
||||||
|
$user_phid,
|
||||||
|
$to,
|
||||||
|
$from);
|
||||||
|
foreach ($overlap as $status) {
|
||||||
|
if ($status->getDateFrom() < $from) {
|
||||||
|
if ($status->getDateTo() > $to) {
|
||||||
|
// Split the interval.
|
||||||
|
id(new PhabricatorUserStatus())
|
||||||
|
->setUserPHID($user_phid)
|
||||||
|
->setDateFrom($to)
|
||||||
|
->setDateTo($status->getDateTo())
|
||||||
|
->setStatus($status->getStatus())
|
||||||
|
->save();
|
||||||
|
}
|
||||||
|
$status->setDateTo($from);
|
||||||
|
$status->save();
|
||||||
|
} else if ($status->getDateTo() > $to) {
|
||||||
|
$status->setDateFrom($to);
|
||||||
|
$status->save();
|
||||||
|
} else {
|
||||||
|
$status->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count($overlap);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?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/conduit/protocol/exception');
|
||||||
|
phutil_require_module('phabricator', 'applications/people/storage/userstatus');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('ConduitAPI_user_removestatus_Method.php');
|
Loading…
Add table
Reference in a new issue