Exemplo n.º 1
0
 /**
  * Get an FS copy or original of this file and return the path.
  * Returns false on failure. Callers must not alter the file.
  * Temporary files are cleared automatically.
  *
  * @return string|false
  */
 public function getLocalRefPath()
 {
     $this->assertRepoDefined();
     if (!isset($this->fsFile)) {
         $this->fsFile = $this->repo->getLocalReference($this->getPath());
         if (!$this->fsFile) {
             $this->fsFile = false;
             // null => false; cache negative hits
         }
     }
     return $this->fsFile ? $this->fsFile->getPath() : false;
 }
Exemplo n.º 2
0
 /**
  * Move or copy a file to a specified location. Returns a FileRepoStatus
  * object with the archive name in the "value" member on success.
  *
  * The archive name should be passed through to recordUpload for database
  * registration.
  *
  * @param string|FSFile $src Local filesystem path or virtual URL to the source image
  * @param string $dstRel Target relative path
  * @param int $flags A bitwise combination of:
  *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
  * @param array $options Optional additional parameters
  * @return FileRepoStatus On success, the value member contains the
  *     archive name, or an empty string if it was a new file.
  */
 function publishTo($src, $dstRel, $flags = 0, array $options = [])
 {
     $srcPath = $src instanceof FSFile ? $src->getPath() : $src;
     $repo = $this->getRepo();
     if ($repo->getReadOnlyReason() !== false) {
         return $this->readOnlyFatalStatus();
     }
     $this->lock();
     // begin
     $archiveName = wfTimestamp(TS_MW) . '!' . $this->getName();
     $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
     if ($repo->hasSha1Storage()) {
         $sha1 = $repo->isVirtualUrl($srcPath) ? $repo->getFileSha1($srcPath) : FSFile::getSha1Base36FromPath($srcPath);
         $dst = $repo->getBackend()->getPathForSHA1($sha1);
         $status = $repo->quickImport($src, $dst);
         if ($flags & File::DELETE_SOURCE) {
             unlink($srcPath);
         }
         if ($this->exists()) {
             $status->value = $archiveName;
         }
     } else {
         $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
         $status = $repo->publish($srcPath, $dstRel, $archiveRel, $flags, $options);
         if ($status->value == 'new') {
             $status->value = '';
         } else {
             $status->value = $archiveName;
         }
     }
     $this->unlock();
     // done
     return $status;
 }