mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-24 15:52:41 +01:00
156b156e77
Summary: Ref T7803. Ref T5873. I want to drive Conduit through more shared infrastructure, but can't currently add parameters automatically. Put a `getX()` around the `defineX()` methods so the parent can provide default behaviors. Also like 60% of methods don't define any special error types; don't require them to implement this method. I want to move away from this in general. Test Plan: - Ran `arc unit --everything`. - Called `conduit.query`. - Browsed Conduit UI. Reviewers: btrahan Reviewed By: btrahan Subscribers: hach-que, epriestley Maniphest Tasks: T5873, T7803 Differential Revision: https://secure.phabricator.com/D12380
85 lines
2.1 KiB
PHP
85 lines
2.1 KiB
PHP
<?php
|
|
|
|
final class UserRemoveStatusConduitAPIMethod extends UserConduitAPIMethod {
|
|
|
|
public function getAPIMethodName() {
|
|
return 'user.removestatus';
|
|
}
|
|
|
|
public function getMethodStatus() {
|
|
return self::METHOD_STATUS_DEPRECATED;
|
|
}
|
|
|
|
public function getMethodDescription() {
|
|
return pht('Delete status information of the logged-in user.');
|
|
}
|
|
|
|
public function getMethodStatusDescription() {
|
|
return pht(
|
|
'Statuses are becoming full-fledged events as part of the '.
|
|
'Calendar application.');
|
|
}
|
|
|
|
protected function defineParamTypes() {
|
|
return array(
|
|
'fromEpoch' => 'required int',
|
|
'toEpoch' => 'required int',
|
|
);
|
|
}
|
|
|
|
protected function defineReturnType() {
|
|
return 'int';
|
|
}
|
|
|
|
protected 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');
|
|
}
|
|
|
|
$table = new PhabricatorCalendarEvent();
|
|
$table->openTransaction();
|
|
$table->beginReadLocking();
|
|
|
|
$overlap = $table->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 PhabricatorCalendarEvent())
|
|
->setUserPHID($user_phid)
|
|
->setDateFrom($to)
|
|
->setDateTo($status->getDateTo())
|
|
->setStatus($status->getStatus())
|
|
->setDescription($status->getDescription())
|
|
->save();
|
|
}
|
|
$status->setDateTo($from);
|
|
$status->save();
|
|
} else if ($status->getDateTo() > $to) {
|
|
$status->setDateFrom($to);
|
|
$status->save();
|
|
} else {
|
|
$status->delete();
|
|
}
|
|
}
|
|
|
|
$table->endReadLocking();
|
|
$table->saveTransaction();
|
|
return count($overlap);
|
|
}
|
|
|
|
}
|