Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/files/storage/PhabricatorFileChunk.php
12242 views
1
<?php
2
3
final class PhabricatorFileChunk extends PhabricatorFileDAO
4
implements
5
PhabricatorPolicyInterface,
6
PhabricatorDestructibleInterface {
7
8
protected $chunkHandle;
9
protected $byteStart;
10
protected $byteEnd;
11
protected $dataFilePHID;
12
13
private $dataFile = self::ATTACHABLE;
14
15
protected function getConfiguration() {
16
return array(
17
self::CONFIG_TIMESTAMPS => false,
18
self::CONFIG_COLUMN_SCHEMA => array(
19
'chunkHandle' => 'bytes12',
20
'byteStart' => 'uint64',
21
'byteEnd' => 'uint64',
22
'dataFilePHID' => 'phid?',
23
),
24
self::CONFIG_KEY_SCHEMA => array(
25
'key_file' => array(
26
'columns' => array('chunkHandle', 'byteStart', 'byteEnd'),
27
),
28
'key_data' => array(
29
'columns' => array('dataFilePHID'),
30
),
31
),
32
) + parent::getConfiguration();
33
}
34
35
public static function newChunkHandle() {
36
$seed = Filesystem::readRandomBytes(64);
37
return PhabricatorHash::digestForIndex($seed);
38
}
39
40
public static function initializeNewChunk($handle, $start, $end) {
41
return id(new PhabricatorFileChunk())
42
->setChunkHandle($handle)
43
->setByteStart($start)
44
->setByteEnd($end);
45
}
46
47
public function attachDataFile(PhabricatorFile $file = null) {
48
$this->dataFile = $file;
49
return $this;
50
}
51
52
public function getDataFile() {
53
return $this->assertAttached($this->dataFile);
54
}
55
56
57
/* -( PhabricatorPolicyInterface )----------------------------------------- */
58
59
60
public function getCapabilities() {
61
return array(
62
PhabricatorPolicyCapability::CAN_VIEW,
63
);
64
}
65
66
67
public function getPolicy($capability) {
68
// These objects are low-level and only accessed through the storage
69
// engine, so policies are mostly just in place to let us use the common
70
// query infrastructure.
71
return PhabricatorPolicies::getMostOpenPolicy();
72
}
73
74
75
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
76
return false;
77
}
78
79
80
/* -( PhabricatorDestructibleInterface )----------------------------------- */
81
82
83
public function destroyObjectPermanently(
84
PhabricatorDestructionEngine $engine) {
85
86
$data_phid = $this->getDataFilePHID();
87
if ($data_phid) {
88
$data_file = id(new PhabricatorFileQuery())
89
->setViewer($engine->getViewer())
90
->withPHIDs(array($data_phid))
91
->executeOne();
92
if ($data_file) {
93
$engine->destroyObject($data_file);
94
}
95
}
96
97
$this->delete();
98
}
99
100
}
101
102