public function getFreshURL($name, $definedName) { $title = Title::newFromText($definedName, NS_FILE); if ($definedName != $name) { $file = OldLocalFile::newFromArchiveName($title, RepoGroup::singleton()->getLocalRepo(), $name); return wfReplaceImageServer($file->getUrl()); } else { $file = new LocalFile($title, RepoGroup::singleton()->getLocalRepo()); return wfReplaceImageServer($file->getUrl()); } }
function newFromArchiveName($title, $archiveName) { return OldLocalFile::newFromArchiveName($title, $this, $archiveName); }
/** * @return bool */ function importUpload() { # Construct a file $archiveName = $this->getArchiveName(); if ($archiveName) { wfDebug(__METHOD__ . "Importing archived file as {$archiveName}\n"); $file = OldLocalFile::newFromArchiveName($this->getTitle(), RepoGroup::singleton()->getLocalRepo(), $archiveName); } else { $file = wfLocalFile($this->getTitle()); $file->load(File::READ_LATEST); wfDebug(__METHOD__ . 'Importing new file as ' . $file->getName() . "\n"); if ($file->exists() && $file->getTimestamp() > $this->getTimestamp()) { $archiveName = $file->getTimestamp() . '!' . $file->getName(); $file = OldLocalFile::newFromArchiveName($this->getTitle(), RepoGroup::singleton()->getLocalRepo(), $archiveName); wfDebug(__METHOD__ . "File already exists; importing as {$archiveName}\n"); } } if (!$file) { wfDebug(__METHOD__ . ': Bad file for ' . $this->getTitle() . "\n"); return false; } # Get the file source or download if necessary $source = $this->getFileSrc(); $flags = $this->isTempSrc() ? File::DELETE_SOURCE : 0; if (!$source) { $source = $this->downloadSource(); $flags |= File::DELETE_SOURCE; } if (!$source) { wfDebug(__METHOD__ . ": Could not fetch remote file.\n"); return false; } $sha1 = $this->getSha1(); if ($sha1 && $sha1 !== sha1_file($source)) { if ($flags & File::DELETE_SOURCE) { # Broken file; delete it if it is a temporary file unlink($source); } wfDebug(__METHOD__ . ": Corrupt file {$source}.\n"); return false; } $user = User::newFromName($this->user_text); # Do the actual upload if ($archiveName) { $status = $file->uploadOld($source, $archiveName, $this->getTimestamp(), $this->getComment(), $user, $flags); } else { $status = $file->upload($source, $this->getComment(), $this->getComment(), $flags, false, $this->getTimestamp(), $user); } if ($status->isGood()) { wfDebug(__METHOD__ . ": Successful\n"); return true; } else { wfDebug(__METHOD__ . ': failed: ' . $status->getHTML() . "\n"); return false; } }
/** * @return bool */ function importUpload() { # Construct a file $archiveName = $this->getArchiveName(); if ($archiveName) { wfDebug(__METHOD__ . "Importing archived file as {$archiveName}\n"); $file = OldLocalFile::newFromArchiveName($this->getTitle(), RepoGroup::singleton()->getLocalRepo(), $archiveName); } else { $file = wfLocalFile($this->getTitle()); $file->load(File::READ_LATEST); wfDebug(__METHOD__ . 'Importing new file as ' . $file->getName() . "\n"); if ($file->exists() && $file->getTimestamp() > $this->getTimestamp()) { $archiveName = $file->getTimestamp() . '!' . $file->getName(); $file = OldLocalFile::newFromArchiveName($this->getTitle(), RepoGroup::singleton()->getLocalRepo(), $archiveName); wfDebug(__METHOD__ . "File already exists; importing as {$archiveName}\n"); } } if (!$file) { wfDebug(__METHOD__ . ': Bad file for ' . $this->getTitle() . "\n"); return false; } # Get the file source or download if necessary $source = $this->getFileSrc(); $autoDeleteSource = $this->isTempSrc(); if (!strlen($source)) { $source = $this->downloadSource(); $autoDeleteSource = true; } if (!strlen($source)) { wfDebug(__METHOD__ . ": Could not fetch remote file.\n"); return false; } $tmpFile = new TempFSFile($source); if ($autoDeleteSource) { $tmpFile->autocollect(); } $sha1File = ltrim(sha1_file($source), '0'); $sha1 = $this->getSha1(); if ($sha1 && $sha1 !== $sha1File) { wfDebug(__METHOD__ . ": Corrupt file {$source}.\n"); return false; } $user = $this->getUserObj() ?: User::newFromName($this->getUser()); # Do the actual upload if ($archiveName) { $status = $file->uploadOld($source, $archiveName, $this->getTimestamp(), $this->getComment(), $user); } else { $flags = 0; $status = $file->upload($source, $this->getComment(), $this->getComment(), $flags, false, $this->getTimestamp(), $user); } if ($status->isGood()) { wfDebug(__METHOD__ . ": Successful\n"); return true; } else { wfDebug(__METHOD__ . ': failed: ' . $status->getHTML() . "\n"); return false; } }
public function onSubmit($data) { $this->useTransactionalTimeLimit(); $old = $this->getRequest()->getText('oldimage'); $localFile = $this->page->getFile(); $oldFile = OldLocalFile::newFromArchiveName($this->getTitle(), $localFile->getRepo(), $old); $source = $localFile->getArchiveVirtualUrl($old); $comment = $data['comment']; if ($localFile->getSha1() === $oldFile->getSha1()) { return Status::newFatal('filerevert-identical'); } // TODO: Preserve file properties from database instead of reloading from file return $localFile->upload($source, $comment, $comment, 0, false, false, $this->getUser()); }