>6)+192).chr(($num&63)+128); if ( $num<65536 ) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128); if ( $num<2097152 ) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128); return ''; } /** * Called for AJAX watch/unwatch requests. * @param $pagename Prefixed title string for page to watch/unwatch * @param $watch String 'w' to watch, 'u' to unwatch * @return String '' or '' on successful watch or unwatch, * respectively, followed by an HTML message to display in the alert box; or * '' on error */ function wfAjaxWatch($pagename = "", $watch = "") { if(wfReadOnly()) { // redirect to action=(un)watch, which will display the database lock // message return ''; } if('w' !== $watch && 'u' !== $watch) { return ''; } $watch = 'w' === $watch; $title = Title::newFromDBkey($pagename); if(!$title) { // Invalid title return ''; } $article = new Article($title); $watching = $title->userIsWatching(); if($watch) { if(!$watching) { $dbw = wfGetDB(DB_MASTER); $dbw->begin(); $ok = $article->doWatch(); $dbw->commit(); } } else { if($watching) { $dbw = wfGetDB(DB_MASTER); $dbw->begin(); $ok = $article->doUnwatch(); $dbw->commit(); } } // Something stopped the change if( isset($ok) && !$ok ) { return ''; } if( $watch ) { return ''.wfMsgExt( 'addedwatchtext', array( 'parse' ), $title->getPrefixedText() ); } else { return ''.wfMsgExt( 'removedwatchtext', array( 'parse' ), $title->getPrefixedText() ); } } /** * Called in some places (currently just extensions) * to get the thumbnail URL for a given file at a given resolution. */ function wfAjaxGetThumbnailUrl( $file, $width, $height ) { $file = wfFindFile( $file ); if ( !$file || !$file->exists() ) return null; $url = $file->getThumbnail( $width, $height )->url; return $url; } /** * Called in some places (currently just extensions) * to get the URL for a given file. */ function wfAjaxGetFileUrl( $file ) { $file = wfFindFile( $file ); if ( !$file || !$file->exists() ) return null; $url = $file->getUrl(); return $url; }