From: Jack Phoenix Date: Wed, 15 Jul 2009 00:55:58 +0000 (+0000) Subject: follow-up to r53282: X-Git-Tag: 1.31.0-rc.0~40943 X-Git-Url: https://git.heureux-cyclage.org/?a=commitdiff_plain;h=de7fa9061b7a892e83e1291316272a9130fe9195;p=lhc%2Fweb%2Fwiklou.git follow-up to r53282: *coding style tweaks *added __METHOD__ to some wfDebug calls *removed php ending tag from mwScriptLoader.php *some doxygen docs added --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index f382d8ff09..208c827369 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -580,12 +580,12 @@ $wgAutoloadLocalClasses = array( ); -//autoloader for javascript files (path is from the mediawiki folder +// Autoloader for JavaScript files (path is from the MediaWiki folder) global $wgJSAutoloadLocalClasses; $wgJSAutoloadLocalClasses = array( - 'ajax' => 'skins/common/ajax.js', - 'ajaxwatch' => 'skins/common/ajaxwatch.js', - 'allmessages' => 'skins/common/allmessages.js', + 'ajax' => 'skins/common/ajax.js', + 'ajaxwatch' => 'skins/common/ajaxwatch.js', + 'allmessages' => 'skins/common/allmessages.js', 'block' => 'skins/common/block.js', 'changepassword' => 'skins/common/changepassword.js', 'diff' => 'skins/common/diff.js', @@ -599,13 +599,13 @@ $wgJSAutoloadLocalClasses = array( 'preview' => 'skins/common/preview.js', 'protect' => 'skins/common/protect.js', 'rightclickedit' => 'skins/common/rightclickedit.js', - 'sticky' => 'skins/common/sticky.js', + 'sticky' => 'skins/common/sticky.js', 'upload' => 'skins/common/upload.js', 'wikibits' => 'skins/common/wikibits.js', - //phase 2 javascript: + // phase 2 javascript: 'uploadPage' => 'js2/uploadPage.js', - 'editPage' => 'js2/editPage.js', + 'editPage' => 'js2/editPage.js', ); //Include the js2 autoLoadClasses diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index da8f92c732..6dcdaa1af2 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -1,83 +1,86 @@ doRequest(); - if( $status->isOK() ){ - return $status->value; - }else{ - return false; - } - } + $req = new HttpRequest( $url, $opts ); + $status = $req->doRequest(); + if( $status->isOK() ){ + return $status->value; + } else { + return false; + } + } + /** * Simple wrapper for Http::request( 'GET' ) */ public static function get( $url, $opts = array() ) { $opt['method'] = 'GET'; - return Http::request($url, $opts); + return Http::request( $url, $opts ); } + /** * Simple wrapper for Http::request( 'POST' ) */ public static function post( $url, $opts = array() ) { - $opts['method']='POST'; - return Http::request($url, $opts); + $opts['method'] = 'POST'; + return Http::request( $url, $opts ); } - public static function doDownload( $url, $target_file_path , $dl_mode = self::SYNC_DOWNLOAD , $redirectCount=0){ + public static function doDownload( $url, $target_file_path , $dl_mode = self::SYNC_DOWNLOAD , $redirectCount = 0 ){ global $wgPhpCliPath, $wgMaxUploadSize, $wgMaxRedirects; - //do a quick check to HEAD to insure the file size is not > $wgMaxUploadSize - $head = get_headers($url, 1); - - //check for redirects: - if( isset( $head['Location'] ) && strrpos($head[0], '302')!==false ){ - if($redirectCount < $wgMaxRedirects){ - if( UploadFromUrl::isValidURI( $head['Location'] )){ - return self::doDownload ( $head['Location'], $target_file_path , $dl_mode, $redirectCount++); - }else{ - return Status::newFatal('upload-proto-error'); + // do a quick check to HEAD to insure the file size is not > $wgMaxUploadSize + $head = get_headers( $url, 1 ); + + // check for redirects: + if( isset( $head['Location'] ) && strrpos( $head[0], '302' ) !== false ){ + if( $redirectCount < $wgMaxRedirects ){ + if( UploadFromUrl::isValidURI( $head['Location'] ) ){ + return self::doDownload( $head['Location'], $target_file_path , $dl_mode, $redirectCount++ ); + } else { + return Status::newFatal( 'upload-proto-error' ); } - }else{ - return Status::newFatal('upload-too-many-redirects'); + } else { + return Status::newFatal( 'upload-too-many-redirects' ); } } - //we did not get a 200 ok response: - if( strrpos($head[0], '200 OK') === false){ - return Status::newFatal( 'upload-http-error', htmlspecialchars($head[0]) ); + // we did not get a 200 ok response: + if( strrpos( $head[0], '200 OK' ) === false ){ + return Status::newFatal( 'upload-http-error', htmlspecialchars( $head[0] ) ); } - - $content_length = (isset($head['Content-Length']))?$head['Content-Length']:null; - if($content_length){ - if($content_length > $wgMaxUploadSize){ - return Status::newFatal('requested file length ' . $content_length . ' is greater than $wgMaxUploadSize: ' . $wgMaxUploadSize); + $content_length = ( isset( $head['Content-Length'] ) ) ? $head['Content-Length'] : null; + if( $content_length ){ + if( $content_length > $wgMaxUploadSize ){ + return Status::newFatal( 'requested file length ' . $content_length . ' is greater than $wgMaxUploadSize: ' . $wgMaxUploadSize ); } } - //check if we can find phpCliPath (for doing a background shell request to php to do the download: - if( $wgPhpCliPath && wfShellExecEnabled() && $dl_mode == self::ASYNC_DOWNLOAD){ - wfDebug("\ASYNC_DOWNLOAD\n"); - //setup session and shell call: + // check if we can find phpCliPath (for doing a background shell request to php to do the download: + if( $wgPhpCliPath && wfShellExecEnabled() && $dl_mode == self::ASYNC_DOWNLOAD ){ + wfDebug( __METHOD__ . "\ASYNC_DOWNLOAD\n" ); + // setup session and shell call: return self::initBackgroundDownload( $url, $target_file_path, $content_length ); - }else if( $dl_mode== self::SYNC_DOWNLOAD ){ - wfDebug("\nSYNC_DOWNLOAD\n"); - //SYNC_DOWNLOAD download as much as we can in the time we have to execute - $opts['method']='GET'; + } else if( $dl_mode == self::SYNC_DOWNLOAD ){ + wfDebug( __METHOD__ . "\nSYNC_DOWNLOAD\n" ); + // SYNC_DOWNLOAD download as much as we can in the time we have to execute + $opts['method'] = 'GET'; $opts['target_file_path'] = $target_file_path; - $req = new HttpRequest($url, $opts ); + $req = new HttpRequest( $url, $opts ); return $req->doRequest(); } } + /** * a non blocking request (generally an exit point in the application) * should write to a file location and give updates @@ -87,66 +90,67 @@ class Http { global $wgMaxUploadSize, $IP, $wgPhpCliPath; $status = Status::newGood(); - //generate a session id with all the details for the download (pid, target_file_path ) + // generate a session id with all the details for the download (pid, target_file_path ) $upload_session_key = self::getUploadSessionKey(); $session_id = session_id(); - //store the url and target path: - $_SESSION[ 'wsDownload' ][$upload_session_key]['url'] = $url; - $_SESSION[ 'wsDownload' ][$upload_session_key]['target_file_path'] = $target_file_path; + // store the url and target path: + $_SESSION['wsDownload'][$upload_session_key]['url'] = $url; + $_SESSION['wsDownload'][$upload_session_key]['target_file_path'] = $target_file_path; - if($content_length) - $_SESSION[ 'wsDownload' ][$upload_session_key]['content_length'] = $content_length; + if( $content_length ) + $_SESSION['wsDownload'][$upload_session_key]['content_length'] = $content_length; - //set initial loaded bytes: - $_SESSION[ 'wsDownload' ][$upload_session_key]['loaded'] = 0; + // set initial loaded bytes: + $_SESSION['wsDownload'][$upload_session_key]['loaded'] = 0; - - //run the background download request: + // run the background download request: $cmd = $wgPhpCliPath . ' ' . $IP . "/maintenance/http_session_download.php --sid {$session_id} --usk {$upload_session_key}"; - $pid = wfShellBackgroundExec($cmd , $retval); - //the pid is not of much use since we won't be visiting this same apache any-time soon. - if(!$pid) - return Status::newFatal('could not run background shell exec'); + $pid = wfShellBackgroundExec( $cmd, $retval ); + // the pid is not of much use since we won't be visiting this same apache any-time soon. + if( !$pid ) + return Status::newFatal( 'could not run background shell exec' ); - //update the status value with the $upload_session_key (for the user to check on the status of the upload) + // update the status value with the $upload_session_key (for the user to check on the status of the upload) $status->value = $upload_session_key; - //return good status + // return good status return $status; } + function getUploadSessionKey(){ $key = mt_rand( 0, 0x7fffffff ); $_SESSION['wsUploadData'][$key] = array(); return $key; } + /** * used to run a session based download. Is initiated via the shell. * - * @param string $session_id // the session id to grab download details from - * @param string $upload_session_key //the key of the given upload session + * @param $session_id String: the session id to grab download details from + * @param $upload_session_key String: the key of the given upload session * (a given client could have started a few http uploads at once) */ public static function doSessionIdDownload( $session_id, $upload_session_key ){ global $wgUser, $wgEnableWriteAPI, $wgAsyncHTTPTimeout; - wfDebug("\n\ndoSessionIdDownload\n\n"); - //set session to the provided key: - session_id($session_id); - //start the session - if( session_start() === false){ - wfDebug( __METHOD__ . ' could not start session'); + wfDebug( __METHOD__ . "\n\ndoSessionIdDownload\n\n" ); + // set session to the provided key: + session_id( $session_id ); + // start the session + if( session_start() === false ){ + wfDebug( __METHOD__ . ' could not start session' ); } //get all the vars we need from session_id if(!isset($_SESSION[ 'wsDownload' ][$upload_session_key])){ wfDebug( __METHOD__ .' Error:could not find upload session'); exit(); } - //setup the global user from the session key we just inherited + // setup the global user from the session key we just inherited $wgUser = User::newFromSession(); - //grab the session data to setup the request: - $sd =& $_SESSION[ 'wsDownload' ][$upload_session_key]; - //close down the session so we can other http queries can get session updates: + // grab the session data to setup the request: + $sd =& $_SESSION['wsDownload'][$upload_session_key]; + // close down the session so we can other http queries can get session updates: session_write_close(); $req = new HttpRequest( $sd['url'], array( @@ -154,49 +158,49 @@ class Http { 'upload_session_key'=> $upload_session_key, 'timeout' => $wgAsyncHTTPTimeout ) ); - //run the actual request .. (this can take some time) - wfDebug("do Request: " . $sd['url'] . ' tf: ' . $sd['target_file_path'] ); + // run the actual request .. (this can take some time) + wfDebug( __METHOD__ . "do Request: " . $sd['url'] . ' tf: ' . $sd['target_file_path'] ); $status = $req->doRequest(); //wfDebug("done with req status is: ". $status->isOK(). ' '.$status->getWikiText(). "\n"); - //start up the session again: - if( session_start() === false){ + // start up the session again: + if( session_start() === false ){ wfDebug( __METHOD__ . ' ERROR:: Could not start session'); } - //grab the updated session data pointer - $sd =& $_SESSION[ 'wsDownload' ][$upload_session_key]; - //if error update status: + // grab the updated session data pointer + $sd =& $_SESSION['wsDownload'][$upload_session_key]; + // if error update status: if( !$status->isOK() ){ - $sd['apiUploadResult']= ApiFormatJson::getJsonEncode( - array( 'error' => $status->getWikiText() ) - ); + $sd['apiUploadResult'] = ApiFormatJson::getJsonEncode( + array( 'error' => $status->getWikiText() ) + ); } - //if status oky process upload using fauxReq to api: + // if status okay process upload using fauxReq to api: if( $status->isOK() ){ - //setup the faxRequest + // setup the FauxRequest $fauxReqData = $sd['mParams']; $fauxReqData['action'] = 'upload'; $fauxReqData['format'] = 'json'; $fauxReqData['internalhttpsession'] = $upload_session_key; - //evil but no other clean way about it: - $faxReq = new FauxRequest($fauxReqData, true); - $processor = new ApiMain($faxReq, $wgEnableWriteAPI); + // evil but no other clean way about it: + $faxReq = new FauxRequest( $fauxReqData, true ); + $processor = new ApiMain( $faxReq, $wgEnableWriteAPI ); //init the mUpload var for the $processor $processor->execute(); $processor->getResult()->cleanUpUTF8(); - $printer = $processor->createPrinterByName('json'); - $printer->initPrinter(false); + $printer = $processor->createPrinterByName( 'json' ); + $printer->initPrinter( false ); ob_start(); $printer->execute(); $apiUploadResult = ob_get_clean(); - wfDebug("\n\n got api result:: $apiUploadResult \n" ); - //the status updates runner will grab the result form the session: + wfDebug( __METHOD__ . "\n\n got api result:: $apiUploadResult \n" ); + // the status updates runner will grab the result form the session: $sd['apiUploadResult'] = $apiUploadResult; } - //close the session: + // close the session: session_write_close(); } @@ -245,16 +249,18 @@ class Http { class HttpRequest{ var $target_file_path; var $upload_session_key; - function __construct($url, $opt){ + + function __construct( $url, $opt ){ global $wgSyncHTTPTimeout; $this->url = $url; - //set the timeout to default sync timeout (unless the timeout option is provided) - $this->timeout = (isset($opt['timeout']))?$opt['timeout']:$wgSyncHTTPTimeout; - $this->method = (isset($opt['method']))?$opt['method']:'GET'; - $this->target_file_path = (isset($opt['target_file_path']))?$opt['target_file_path']:false; - $this->upload_session_key = (isset($opt['upload_session_key']))?$opt['upload_session_key']:false; + // set the timeout to default sync timeout (unless the timeout option is provided) + $this->timeout = ( isset( $opt['timeout'] ) ) ? $opt['timeout'] : $wgSyncHTTPTimeout; + $this->method = ( isset( $opt['method'] ) ) ? $opt['method'] : 'GET'; + $this->target_file_path = ( isset( $opt['target_file_path'] ) ) ? $opt['target_file_path'] : false; + $this->upload_session_key = ( isset( $opt['upload_session_key'] ) ) ? $opt['upload_session_key'] : false; } -/** + + /** * Get the contents of a file by HTTP * @param $url string Full URL to act on * @param $Opt associative array Optional array of options: @@ -262,36 +268,35 @@ class HttpRequest{ * 'target_file_path' => if curl should output to a target file * 'adapter' => 'curl', 'soket' */ - public function doRequest() { + public function doRequest() { # Use curl if available if ( function_exists( 'curl_init' ) ) { return $this->doCurlReq(); - }else{ + } else { return $this->doPhpReq(); } - } - private function doCurlReq(){ + } + + private function doCurlReq(){ global $wgHTTPProxy, $wgTitle; $status = Status::newGood(); $c = curl_init( $this->url ); - //proxy setup: + // proxy setup: if ( Http::isLocalURL( $this->url ) ) { curl_setopt( $c, CURLOPT_PROXY, 'localhost:80' ); - } else if ($wgHTTPProxy) { - curl_setopt($c, CURLOPT_PROXY, $wgHTTPProxy); + } else if ( $wgHTTPProxy ) { + curl_setopt( $c, CURLOPT_PROXY, $wgHTTPProxy ); } curl_setopt( $c, CURLOPT_TIMEOUT, $this->timeout ); - - curl_setopt( $c, CURLOPT_USERAGENT, Http::userAgent() ); if ( $this->method == 'POST' ) { curl_setopt( $c, CURLOPT_POST, true ); curl_setopt( $c, CURLOPT_POSTFIELDS, '' ); - }else{ + } else { curl_setopt( $c, CURLOPT_CUSTOMREQUEST, $this->method ); } @@ -304,39 +309,39 @@ class HttpRequest{ curl_setopt( $c, CURLOPT_REFERER, $wgTitle->getFullURL() ); } - //set the write back function (if we are writing to a file) + // set the write back function (if we are writing to a file) if( $this->target_file_path ){ $cwrite = new simpleFileWriter( $this->target_file_path, $this->upload_session_key ); - if(!$cwrite->status->isOK()){ - wfDebug("ERROR in setting up simpleFileWriter\n"); + if( !$cwrite->status->isOK() ){ + wfDebug( __METHOD__ . "ERROR in setting up simpleFileWriter\n" ); $status = $cwrite->status; } - curl_setopt( $c, CURLOPT_WRITEFUNCTION, array($cwrite, 'callbackWriteBody') ); + curl_setopt( $c, CURLOPT_WRITEFUNCTION, array( $cwrite, 'callbackWriteBody' ) ); } - //start output grabber: - if(!$this->target_file_path) + // start output grabber: + if( !$this->target_file_path ) ob_start(); //run the actual curl_exec: try { - if (false === curl_exec($c)) { - $error_txt ='Error sending request: #' . curl_errno($c) .' '. curl_error($c); - wfDebug($error_txt . "\n"); - $status = Status::newFatal( $error_txt); - } - } catch (Exception $e) { - //do something with curl exec error? - } - //if direct request output the results to the stats value: + if ( false === curl_exec( $c ) ) { + $error_txt ='Error sending request: #' . curl_errno( $c ) .' '. curl_error( $c ); + wfDebug( __METHOD__ . $error_txt . "\n" ); + $status = Status::newFatal( $error_txt ); + } + } catch ( Exception $e ) { + // do something with curl exec error? + } + // if direct request output the results to the stats value: if( !$this->target_file_path && $status->isOK() ){ - $status->value = ob_get_contents(); + $status->value = ob_get_contents(); ob_end_clean(); } - //if we wrote to a target file close up or return error + // if we wrote to a target file close up or return error if( $this->target_file_path ){ $cwrite->close(); - if( ! $cwrite->status->isOK() ){ + if( !$cwrite->status->isOK() ){ return $cwrite->status; } } @@ -356,9 +361,10 @@ class HttpRequest{ } curl_close( $c ); - //return the result obj + // return the result obj return $status; } + public function doPhpReq(){ #$use file_get_contents... # This doesn't have local fetch capabilities... @@ -376,57 +382,59 @@ class HttpRequest{ $ctx = stream_context_create( $opts ); $status->value = file_get_contents( $url, false, $ctx ); - if(!$status->value){ - $status->error('file_get_contents-failed'); + if( !$status->value ){ + $status->error( 'file_get_contents-failed' ); } return $status; } + } + /** * a simpleFileWriter with session id updates - * */ -class simpleFileWriter{ +class simpleFileWriter { var $target_file_path; var $status = null; var $session_id = null; - var $session_update_interval = 0; //how offten to update the session while downloading + var $session_update_interval = 0; // how often to update the session while downloading - function simpleFileWriter($target_file_path, $upload_session_key){ + function simpleFileWriter( $target_file_path, $upload_session_key ){ $this->target_file_path = $target_file_path; $this->upload_session_key = $upload_session_key; $this->status = Status::newGood(); - //open the file: - $this->fp = fopen( $this->target_file_path, 'w'); + // open the file: + $this->fp = fopen( $this->target_file_path, 'w' ); if( $this->fp === false ){ - $this->status = Status::newFatal('HTTP::could-not-open-file-for-writing'); + $this->status = Status::newFatal( 'HTTP::could-not-open-file-for-writing' ); } - //true start time + // true start time $this->prevTime = time(); } + public function callbackWriteBody($ch, $data_packet){ global $wgMaxUploadSize; - //write out the content - if( fwrite($this->fp, $data_packet) === false){ - wfDebug(__METHOD__ ." ::could-not-write-to-file\n"); - $this->status = Status::newFatal('HTTP::could-not-write-to-file'); + // write out the content + if( fwrite( $this->fp, $data_packet ) === false ){ + wfDebug( __METHOD__ ." ::could-not-write-to-file\n" ); + $this->status = Status::newFatal( 'HTTP::could-not-write-to-file' ); return 0; } - //check file size: + // check file size: clearstatcache(); - $this->current_fsize = filesize( $this->target_file_path); + $this->current_fsize = filesize( $this->target_file_path ); - if( $this->current_fsize > $wgMaxUploadSize){ - wfDebug( __METHOD__ . " ::http download too large\n"); - $this->status = Status::newFatal('HTTP::file-has-grown-beyond-upload-limit-killing: downloaded more than ' . - Language::formatSize($wgMaxUploadSize) . ' '); + if( $this->current_fsize > $wgMaxUploadSize ){ + wfDebug( __METHOD__ . " ::http download too large\n" ); + $this->status = Status::newFatal( 'HTTP::file-has-grown-beyond-upload-limit-killing: downloaded more than ' . + Language::formatSize( $wgMaxUploadSize ) . ' ' ); return 0; } - //if more than session_update_interval second have passed update_session_progress - if($this->upload_session_key && ( (time() - $this->prevTime) > $this->session_update_interval )) { + // if more than session_update_interval second have passed update_session_progress + if( $this->upload_session_key && ( ( time() - $this->prevTime ) > $this->session_update_interval ) ) { $this->prevTime = time(); $session_status = $this->update_session_progress(); if( !$session_status->isOK() ){ @@ -437,32 +445,35 @@ class simpleFileWriter{ } return strlen( $data_packet ); } + public function update_session_progress(){ $status = Status::newGood(); - //start the session + // start the session if( session_start() === false){ - wfDebug( __METHOD__ . ' could not start session'); - exit(0); + wfDebug( __METHOD__ . ' could not start session' ); + exit( 0 ); } - $sd =& $_SESSION[ 'wsDownload' ][ $this->upload_session_key ]; - //check if the user canceled the request: + $sd =& $_SESSION['wsDownload'][$this->upload_session_key]; + // check if the user canceled the request: if( $sd['user_cancel'] == true ){ - //kill the download - return Status::newFatal('user-canceled-request'); + // kill the download + return Status::newFatal( 'user-canceled-request' ); } - //update the progress bytes download so far: + // update the progress bytes download so far: $sd['loaded'] = $this->current_fsize; - wfDebug('set session loaded amount to: ' . $sd['loaded'] . "\n"); - //close down the session so we can other http queries can get session updates: + wfDebug( __METHOD__ . ': set session loaded amount to: ' . $sd['loaded'] . "\n"); + // close down the session so we can other http queries can get session updates: session_write_close(); return $status; } + public function close(){ - //do a final session update: + // do a final session update: $this->update_session_progress(); - //close up the file handle: - if(false === fclose( $this->fp )){ - $this->status = Status::newFatal('HTTP::could-not-close-file'); + // close up the file handle: + if( false === fclose( $this->fp ) ){ + $this->status = Status::newFatal( 'HTTP::could-not-close-file' ); } } + } \ No newline at end of file diff --git a/includes/OutputPage.php b/includes/OutputPage.php index ab575c93e6..df9a4b7186 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -15,7 +15,7 @@ class OutputPage { var $mCategoryLinks = array(), $mLanguageLinks = array(); var $mScriptLoaderClassList = array(); - //the most recent id of any script that is grouped in the script request + // the most recent id of any script that is grouped in the script request var $mLatestScriptRevID = 0; var $mScripts = '', $mLinkColours, $mPageLinkTitle = '', $mHeadItems = array(); @@ -93,8 +93,7 @@ class OutputPage { function addKeyword( $text ) { if( is_array( $text )) { $this->mKeywords = array_merge( $this->mKeywords, $text ); - } - else { + } else { array_push( $this->mKeywords, $text ); } } @@ -116,26 +115,27 @@ class OutputPage { if( substr( $file, 0, 1 ) == '/' ) { $path = $file; } else { - $path = "{$wgStylePath}/common/{$file}"; + $path = "{$wgStylePath}/common/{$file}"; } + if( $wgEnableScriptLoader ){ - if( strpos($path, $wgScript) !== false ){ - $reqPath = str_replace($wgScript.'?', '', $path); - $reqArgs = split('&', $reqPath); + if( strpos( $path, $wgScript ) !== false ){ + $reqPath = str_replace( $wgScript . '?', '', $path ); + $reqArgs = split( '&', $reqPath ); $reqSet = array(); - foreach($reqArgs as $arg){ - list($key, $var) = split('=', $arg); - $reqSet[$key]= $var; + foreach( $reqArgs as $arg ){ + list( $key, $var ) = split( '=', $arg ); + $reqSet[$key] = $var; } - if( isset( $reqSet['title'] ) && $reqSet != '' ) { - //extract any extra param (for now just skin) - $ext_param = ( isset( $reqSet['useskin'] ) && $reqSet['useskin'] != '') ? '|useskin=' . ucfirst( $reqSet['useskin'] ) : ''; + if( isset( $reqSet['title'] ) && $reqSet != '' ) { + // extract any extra param (for now just skin) + $ext_param = ( isset( $reqSet['useskin'] ) && $reqSet['useskin'] != '' ) ? '|useskin=' . ucfirst( $reqSet['useskin'] ) : ''; $this->mScriptLoaderClassList[] = 'WT:' . $reqSet['title'] . $ext_param ; - //add the title revision to the key + // add the title revision to the key $t = Title::newFromText( $reqSet['title'] ); - //if there is no title (don't worry we just use the $wgStyleVersion var (which should be updated on relevant commits) + // if there is no title (don't worry we just use the $wgStyleVersion var (which should be updated on relevant commits) if( $t->exists() ){ if( $t->getLatestRevID() > $this->mLatestScriptRevID ) $this->mLatestScriptRevID = $t->getLatestRevID(); @@ -143,16 +143,17 @@ class OutputPage { return true; } } - //check for class from path: + + // check for class from path: $js_class = $this->getJsClassFromPath( $path ); if( $js_class ){ - //add to the class list: + // add to the class list: $this->mScriptLoaderClassList[] = $js_class; return true; } } - //die(); - //if the script loader did not find a way to add the script than add using AddScript + + // if the script loader did not find a way to add the script than add using addScript $this->addScript( Xml::element( 'script', array( @@ -163,49 +164,57 @@ class OutputPage { ) ); } - /* + + /** * This is the core script that is included on every page * (they are requested separately to improve caching across * different page load types (edit, upload, view, etc) */ function addCoreScripts2Top(){ - global $wgEnableScriptLoader, $wgStyleVersion,$wgJSAutoloadLocalClasses, $wgJsMimeType, $wgScriptPath, $wgEnableJS2system ; - //@@todo we should depricate wikibits in favor of mv_embed and native jQuery functions + global $wgEnableScriptLoader, $wgStyleVersion, $wgJSAutoloadLocalClasses, $wgJsMimeType, $wgScriptPath, $wgEnableJS2system; + //@@todo we should deprecate wikibits in favor of mv_embed and native jQuery functions if( $wgEnableJS2system ){ - $core_classes = array('window.jQuery', 'mv_embed', 'wikibits'); - }else{ - $core_classes = array('wikibits'); + $core_classes = array( 'window.jQuery', 'mv_embed', 'wikibits' ); + } else { + $core_classes = array( 'wikibits' ); } + if( $wgEnableScriptLoader ){ $this->mScripts = $this->getScriptLoaderJs( $core_classes ) . $this->mScripts; - }else{ + } else { $so = ''; - foreach($core_classes as $s){ - if(isset( $wgJSAutoloadLocalClasses[$s] )){ - $so.= Xml::element( 'script', array( - 'type' => $wgJsMimeType, - 'src' => "{$wgScriptPath}/{$wgJSAutoloadLocalClasses[$s]}?" . $this->getURIDparam() - ), - '', false - ); + foreach( $core_classes as $s ){ + if( isset( $wgJSAutoloadLocalClasses[$s] ) ){ + $so.= Xml::element( 'script', array( + 'type' => $wgJsMimeType, + 'src' => "{$wgScriptPath}/{$wgJSAutoloadLocalClasses[$s]}?" . $this->getURIDparam() + ), + '', false + ); } } $this->mScripts = $so . $this->mScripts; } } + + /** + * @param $js_class String: name of JavaScript class + * @return Boolean: false if class wasn't found, true on success + */ function addScriptClass( $js_class ){ global $wgJSAutoloadClasses, $wgJSAutoloadLocalClasses, $wgJsMimeType, $wgEnableScriptLoader, $wgStyleVersion, $wgScriptPath; - if(isset($wgJSAutoloadClasses[ $js_class ] ) || isset( $wgJSAutoloadLocalClasses[$js_class]) ){ - if($wgEnableScriptLoader){ - if( ! in_array( $js_class, $this->mScriptLoaderClassList ) ){ + + if( isset( $wgJSAutoloadClasses[$js_class] ) || isset( $wgJSAutoloadLocalClasses[$js_class] ) ){ + if( $wgEnableScriptLoader ){ + if( !in_array( $js_class, $this->mScriptLoaderClassList ) ){ $this->mScriptLoaderClassList[] = $js_class; } - }else{ - //do a normal load of without the script-loader: + } else { + // do a normal load of without the script-loader: $path = $wgScriptPath . '/'; - $path.= isset($wgJSAutoloadClasses[ $js_class ] )?$wgJSAutoloadClasses[ $js_class ]: + $path.= isset( $wgJSAutoloadClasses[$js_class] ) ? $wgJSAutoloadClasses[$js_class]: $wgJSAutoloadLocalClasses[$js_class]; $this->addScript( Xml::element( 'script', @@ -219,25 +228,26 @@ class OutputPage { } return true; } - wfDebug( __METHOD__ . " could not find js_class: " . $js_class ); - return false; //could not find the class + wfDebug( __METHOD__ . ' could not find js_class: ' . $js_class ); + return false; // could not find the class } + /** * gets the scriptLoader javascript include - * + * @param $forcClassAry Boolean: false by default */ - function getScriptLoaderJs( $forceClassAry=false ){ + function getScriptLoaderJs( $forceClassAry = false ){ global $wgScriptPath, $wgJsMimeType, $wgStyleVersion, $wgRequest, $wgDebugJavaScript; - if(!$forceClassAry){ - $class_list = implode(',', $this->mScriptLoaderClassList ); - }else{ - $class_list = implode(',', $forceClassAry ); + if( !$forceClassAry ){ + $class_list = implode( ',', $this->mScriptLoaderClassList ); + } else { + $class_list = implode( ',', $forceClassAry ); } $debug_param = ( $wgDebugJavaScript || - $wgRequest->getVal('debug')=='true' || - $wgRequest->getVal('debug')=='1' ) + $wgRequest->getVal( 'debug' ) == 'true' || + $wgRequest->getVal( 'debug' ) == '1' ) ? '&debug=true' : ''; //@@todo intelligent unique id generation based on svn version of file (rather than just grabbing the $wgStyleVersion var) @@ -254,25 +264,28 @@ class OutputPage { '', false ); } + function getURIDparam(){ - global $wgDebugJavaScript,$wgStyleVersion; + global $wgDebugJavaScript, $wgStyleVersion; if( $wgDebugJavaScript ){ - return "urid=". time(); - }else{ + return 'urid=' . time(); + } else { return "urid={$wgStyleVersion}_{$this->mLatestScriptRevID}"; } } + function getJsClassFromPath( $path ){ global $wgJSAutoloadClasses, $wgJSAutoloadLocalClasses, $wgScriptPath; $scriptLoaderPaths = array_merge( $wgJSAutoloadClasses, $wgJSAutoloadLocalClasses ); foreach( $scriptLoaderPaths as $js_class => $js_path ){ $js_path = "{$wgScriptPath}/{$js_path}"; - if($path == $js_path) + if( $path == $js_path ) return $js_class; } return false; } + /** * Add a self-contained script tag with the given contents * @param string $script JavaScript text, no