[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Job for asynchronous upload-by-url. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 * @ingroup JobQueue 22 */ 23 24 /** 25 * Job for asynchronous upload-by-url. 26 * 27 * This job is in fact an interface to UploadFromUrl, which is designed such 28 * that it does not require any globals. If it does, fix it elsewhere, do not 29 * add globals in here. 30 * 31 * @ingroup JobQueue 32 */ 33 class UploadFromUrlJob extends Job { 34 const SESSION_KEYNAME = 'wsUploadFromUrlJobData'; 35 36 /** @var UploadFromUrl */ 37 public $upload; 38 39 /** @var User */ 40 protected $user; 41 42 public function __construct( $title, $params ) { 43 parent::__construct( 'uploadFromUrl', $title, $params ); 44 } 45 46 public function run() { 47 global $wgCopyUploadAsyncTimeout; 48 # Initialize this object and the upload object 49 $this->upload = new UploadFromUrl(); 50 $this->upload->initialize( 51 $this->title->getText(), 52 $this->params['url'], 53 false 54 ); 55 $this->user = User::newFromName( $this->params['userName'] ); 56 57 # Fetch the file 58 $opts = array(); 59 if ( $wgCopyUploadAsyncTimeout ) { 60 $opts['timeout'] = $wgCopyUploadAsyncTimeout; 61 } 62 $status = $this->upload->fetchFile( $opts ); 63 if ( !$status->isOk() ) { 64 $this->leaveMessage( $status ); 65 66 return true; 67 } 68 69 # Verify upload 70 $result = $this->upload->verifyUpload(); 71 if ( $result['status'] != UploadBase::OK ) { 72 $status = $this->upload->convertVerifyErrorToStatus( $result ); 73 $this->leaveMessage( $status ); 74 75 return true; 76 } 77 78 # Check warnings 79 if ( !$this->params['ignoreWarnings'] ) { 80 $warnings = $this->upload->checkWarnings(); 81 if ( $warnings ) { 82 83 # Stash the upload 84 $key = $this->upload->stashFile(); 85 86 // @todo FIXME: This has been broken for a while. 87 // User::leaveUserMessage() does not exist. 88 if ( $this->params['leaveMessage'] ) { 89 $this->user->leaveUserMessage( 90 wfMessage( 'upload-warning-subj' )->text(), 91 wfMessage( 'upload-warning-msg', 92 $key, 93 $this->params['url'] )->text() 94 ); 95 } else { 96 wfSetupSession( $this->params['sessionId'] ); 97 $this->storeResultInSession( 'Warning', 98 'warnings', $warnings ); 99 session_write_close(); 100 } 101 102 return true; 103 } 104 } 105 106 # Perform the upload 107 $status = $this->upload->performUpload( 108 $this->params['comment'], 109 $this->params['pageText'], 110 $this->params['watch'], 111 $this->user 112 ); 113 $this->leaveMessage( $status ); 114 115 return true; 116 } 117 118 /** 119 * Leave a message on the user talk page or in the session according to 120 * $params['leaveMessage']. 121 * 122 * @param Status $status 123 */ 124 protected function leaveMessage( $status ) { 125 if ( $this->params['leaveMessage'] ) { 126 if ( $status->isGood() ) { 127 // @todo FIXME: user->leaveUserMessage does not exist. 128 $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(), 129 wfMessage( 'upload-success-msg', 130 $this->upload->getTitle()->getText(), 131 $this->params['url'] 132 )->text() ); 133 } else { 134 // @todo FIXME: user->leaveUserMessage does not exist. 135 $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(), 136 wfMessage( 'upload-failure-msg', 137 $status->getWikiText(), 138 $this->params['url'] 139 )->text() ); 140 } 141 } else { 142 wfSetupSession( $this->params['sessionId'] ); 143 if ( $status->isOk() ) { 144 $this->storeResultInSession( 'Success', 145 'filename', $this->upload->getLocalFile()->getName() ); 146 } else { 147 $this->storeResultInSession( 'Failure', 148 'errors', $status->getErrorsArray() ); 149 } 150 session_write_close(); 151 } 152 } 153 154 /** 155 * Store a result in the session data. Note that the caller is responsible 156 * for appropriate session_start and session_write_close calls. 157 * 158 * @param string $result The result (Success|Warning|Failure) 159 * @param string $dataKey The key of the extra data 160 * @param mixed $dataValue The extra data itself 161 */ 162 protected function storeResultInSession( $result, $dataKey, $dataValue ) { 163 $session =& self::getSessionData( $this->params['sessionKey'] ); 164 $session['result'] = $result; 165 $session[$dataKey] = $dataValue; 166 } 167 168 /** 169 * Initialize the session data. Sets the intial result to queued. 170 */ 171 public function initializeSessionData() { 172 $session =& self::getSessionData( $this->params['sessionKey'] ); 173 $$session['result'] = 'Queued'; 174 } 175 176 /** 177 * @param string $key 178 * @return mixed 179 */ 180 public static function &getSessionData( $key ) { 181 if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) { 182 $_SESSION[self::SESSION_KEYNAME][$key] = array(); 183 } 184 185 return $_SESSION[self::SESSION_KEYNAME][$key]; 186 } 187 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |