Merge "Add .pipeline/ with dev image variant"
[lhc/web/wiklou.git] / includes / libs / filebackend / fileop / CreateFileOp.php
1 <?php
2 /**
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
17 *
18 * @file
19 * @ingroup FileBackend
20 */
21
22 /**
23 * Create a file in the backend with the given content.
24 * Parameters for this operation are outlined in FileBackend::doOperations().
25 */
26 class CreateFileOp extends FileOp {
27 protected function allowedParams() {
28 return [
29 [ 'content', 'dst' ],
30 [ 'overwrite', 'overwriteSame', 'headers' ],
31 [ 'dst' ]
32 ];
33 }
34
35 protected function doPrecheck( array &$predicates ) {
36 $status = StatusValue::newGood();
37
38 // Check if the source data is too big
39 $maxBytes = $this->backend->maxFileSizeInternal();
40 if ( strlen( $this->getParam( 'content' ) ) > $maxBytes ) {
41 $status->fatal( 'backend-fail-maxsize', $this->params['dst'], $maxBytes );
42
43 return $status;
44 }
45 // Check if an incompatible destination file exists
46 $status->merge( $this->precheckDestExistence( $predicates ) );
47 $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
48 if ( $status->isOK() ) {
49 // Update file existence predicates
50 $predicates['exists'][$this->params['dst']] = true;
51 $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
52 }
53
54 return $status; // safe to call attempt()
55 }
56
57 protected function doAttempt() {
58 if ( $this->overwriteSameCase ) {
59 $status = StatusValue::newGood(); // nothing to do
60 } else {
61 // Create the file at the destination
62 $status = $this->backend->createInternal( $this->setFlags( $this->params ) );
63 }
64
65 return $status;
66 }
67
68 protected function getSourceSha1Base36() {
69 return Wikimedia\base_convert( sha1( $this->params['content'] ), 16, 36, 31 );
70 }
71
72 public function storagePathsChanged() {
73 return [ $this->params['dst'] ];
74 }
75 }