1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-04-01 23:18:15 +02:00
phorge-phorge/src/applications/files/storage/PhabricatorFileChunk.php
Bob Trahan 3ef0721ada Reduce PhabricatorUser::getOmnipotentUser calls by adding a getViewer method to PhbaricatorDestructionEngine
Summary:
Fixes T6956. Before this change, we called PhabricatorUser::getOmnipotentUser in the various delete methods to query the data. Now, we use $engine->getViewer(), since its always a good thing to have less calls to PhabricatorUser::getOmnipotentUser thrown around the codebase.

I used the "codemod" tool to audit the existing calls to PhabricatorDestructorEngine (all of them) so ostensibly this gets all the spots. If I missed something though, its still going to work, so this change is very low risk.

Test Plan: ./bin/remove destroy P1; visit P1 and get a 404

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T6956

Differential Revision: https://secure.phabricator.com/D12866
2015-05-15 14:07:17 -07:00

105 lines
2.5 KiB
PHP

<?php
final class PhabricatorFileChunk extends PhabricatorFileDAO
implements
PhabricatorPolicyInterface,
PhabricatorDestructibleInterface {
protected $chunkHandle;
protected $byteStart;
protected $byteEnd;
protected $dataFilePHID;
private $dataFile = self::ATTACHABLE;
protected function getConfiguration() {
return array(
self::CONFIG_TIMESTAMPS => false,
self::CONFIG_COLUMN_SCHEMA => array(
'chunkHandle' => 'bytes12',
'byteStart' => 'uint64',
'byteEnd' => 'uint64',
'dataFilePHID' => 'phid?',
),
self::CONFIG_KEY_SCHEMA => array(
'key_file' => array(
'columns' => array('chunkHandle', 'byteStart', 'byteEnd'),
),
'key_data' => array(
'columns' => array('dataFilePHID'),
),
),
) + parent::getConfiguration();
}
public static function newChunkHandle() {
$seed = Filesystem::readRandomBytes(64);
return PhabricatorHash::digestForIndex($seed);
}
public static function initializeNewChunk($handle, $start, $end) {
return id(new PhabricatorFileChunk())
->setChunkHandle($handle)
->setByteStart($start)
->setByteEnd($end);
}
public function attachDataFile(PhabricatorFile $file = null) {
$this->dataFile = $file;
return $this;
}
public function getDataFile() {
return $this->assertAttached($this->dataFile);
}
/* -( PhabricatorPolicyInterface )----------------------------------------- */
public function getCapabilities() {
return array(
PhabricatorPolicyCapability::CAN_VIEW,
);
}
public function getPolicy($capability) {
// These objects are low-level and only accessed through the storage
// engine, so policies are mostly just in place to let us use the common
// query infrastructure.
return PhabricatorPolicies::getMostOpenPolicy();
}
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
return false;
}
public function describeAutomaticCapability($capability) {
return null;
}
/* -( PhabricatorDestructibleInterface )----------------------------------- */
public function destroyObjectPermanently(
PhabricatorDestructionEngine $engine) {
$data_phid = $this->getDataFilePHID();
if ($data_phid) {
$data_file = id(new PhabricatorFileQuery())
->setViewer($engine->getViewer())
->withPHIDs(array($data_phid))
->executeOne();
if ($data_file) {
$engine->destroyObject($data_file);
}
}
$this->delete();
}
}