mediawiki-extensions-PageIm.../includes/PageImageCandidate.php

111 lines
2.3 KiB
PHP
Raw Normal View History

<?php
namespace PageImages;
use File;
use JsonSerializable;
/**
* Value object to hold information about page image candidates.
* @package PageImages
*/
class PageImageCandidate implements JsonSerializable {
/** @var string */
private $fileName;
/** @var int */
private $fullWidth = 0;
/** @var int */
private $fullHeight = 0;
/** @var int */
private $handlerWidth = 0;
/**
* Private constructor.
* Use self::newFromFileAndParams to instantiate.
*/
private function __construct() {
}
/**
* @param File $file
* @param array $fileParams from ParserMakeImageParams hook.
* @return PageImageCandidate
*/
public static function newFromFileAndParams( File $file, array $fileParams ) : self {
$instance = new self();
$instance->fileName = $file->getTitle()->getDBkey();
$instance->fullWidth = $file->getWidth() ?? 0;
$instance->fullHeight = $file->getHeight() ?? 0;
if ( isset( $fileParams['handler']['width'] ) ) {
$instance->handlerWidth = $fileParams['handler']['width'] ?? 0;
}
return $instance;
}
/**
* Instantiate PageImageCandidate from $json created with self::jsonSerialize
*
* @param array $array
* @return PageImageCandidate
* @internal
*/
public static function newFromArray( array $array ) : self {
$instance = new self();
$instance->fileName = $array['filename'];
$instance->fullWidth = $array['fullwidth'] ?? 0;
$instance->fullHeight = $array['fullheight'] ?? 0;
if ( isset( $array['handler']['width'] ) ) {
$instance->handlerWidth = $array['handler']['width'] ?? 0;
}
return $instance;
}
/**
* @return string
*/
public function getFileName() : string {
return $this->fileName;
}
/**
* @return int
*/
public function getFullWidth(): int {
return $this->fullWidth;
}
/**
* @return int
*/
public function getFullHeight(): int {
return $this->fullHeight;
}
/**
* @return int
*/
public function getHandlerWidth(): int {
return $this->handlerWidth;
}
/**
* @internal
* @return array
*/
public function jsonSerialize() {
return [
'filename' => $this->getFileName(),
'fullwidth' => $this->getFullWidth(),
'fullheight' => $this->getFullHeight(),
// Wrap in handler array for backwards-compatibility.
'handler' => [
'width' => $this->getHandlerWidth()
]
];
}
}