* ignoreRedirect: If true, do not follow file redirects
* private: If true, return restricted (deleted) files if the current
* user is allowed to view them. Otherwise, such files will not
- * be found.
+ * be found. If a User object, use that user instead of the current.
* @return File|bool False on failure
*/
public function findFile( $title, $options = array() ) {
if ( $img && $img->exists() ) {
if ( !$img->isDeleted( File::DELETED_FILE ) ) {
return $img; // always OK
- } elseif ( !empty( $options['private'] ) && $img->userCan( File::DELETED_FILE ) ) {
+ } elseif ( !empty( $options['private'] ) &&
+ $img->userCan( File::DELETED_FILE,
+ $options['private'] instanceof User ? $options['private'] : null
+ )
+ ) {
return $img;
}
}
if ( $img && $img->exists() ) {
if ( !$img->isDeleted( File::DELETED_FILE ) ) {
return $img; // always OK
- } elseif ( !empty( $options['private'] ) && $img->userCan( File::DELETED_FILE ) ) {
+ } elseif ( !empty( $options['private'] ) &&
+ $img->userCan( File::DELETED_FILE,
+ $options['private'] instanceof User ? $options['private'] : null
+ )
+ ) {
return $img;
}
}
$fileMatchesSearch = function( File $file, array $search ) {
// Note: file name comparison done elsewhere (to handle redirects)
+ $user = ( !empty( $search['private'] ) && $search['private'] instanceof User )
+ ? $search['private']
+ : null;
return (
$file->exists() &&
(
( !empty( $search['time'] ) && $search['time'] === $file->getTimestamp() )
) &&
( !empty( $search['private'] ) || !$file->isDeleted( File::DELETED_FILE ) ) &&
- $file->userCan( File::DELETED_FILE )
+ $file->userCan( File::DELETED_FILE, $user )
);
};