+ public function checkWarnings() {
+ if ( $this->mAsync ) {
+ $this->mIgnoreWarnings = false;
+ return array();
+ }
+ return parent::checkWarnings();
+ }
+
+ /**
+ * Wrapper around the parent function in order to defer checking protection
+ * until we are sure that the file can actually be uploaded
+ */
+ public function verifyPermissions( $user ) {
+ if ( $this->mAsync ) {
+ return true;
+ }
+ return parent::verifyPermissions( $user );
+ }
+
+ /**
+ * Wrapper around the parent function in order to defer uploading to the
+ * job queue for asynchronous uploads
+ */
+ public function performUpload( $comment, $pageText, $watch, $user ) {
+ if ( $this->mAsync ) {
+ $sessionKey = $this->insertJob( $comment, $pageText, $watch, $user );
+
+ $status = new Status;
+ $status->error( 'async', $sessionKey );
+ return $status;
+ }
+
+ return parent::performUpload( $comment, $pageText, $watch, $user );
+ }
+
+
+ protected function insertJob( $comment, $pageText, $watch, $user ) {
+ $sessionKey = $this->getSessionKey();
+ $job = new UploadFromUrlJob( $this->getTitle(), array(
+ 'url' => $this->mUrl,
+ 'comment' => $comment,
+ 'pageText' => $pageText,
+ 'watch' => $watch,
+ 'userName' => $user->getName(),
+ 'leaveMessage' => $this->mAsync == 'async-leavemessage',
+ 'ignoreWarnings' => $this->mIgnoreWarnings,
+ 'sessionId' => session_id(),
+ 'sessionKey' => $sessionKey,
+ ) );
+ $job->initializeSessionData();
+ $job->insert();
+ return $sessionKey;