Skip to content

Commit

Permalink
Merge pull request #15 from opencultureconsulting/fix-8.1
Browse files Browse the repository at this point in the history
Fix deprecation warnings for PHP 8.1
  • Loading branch information
sebastian-meyer committed May 16, 2024
2 parents 11d8aa4 + 6272d96 commit fc261eb
Show file tree
Hide file tree
Showing 7 changed files with 199 additions and 35 deletions.
121 changes: 121 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
###
# https://github.com/gitattributes/gitattributes/blob/master/Common.gitattributes
###

# Auto detect text files and perform LF normalization
* text=auto

#
# The above will handle all files NOT found below
#

# Documents
*.bibtex text diff=bibtex
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
*.md text diff=markdown
*.mdx text diff=markdown
*.tex text diff=tex
*.adoc text
*.textile text
*.mustache text
*.csv text eol=crlf
*.tab text
*.tsv text
*.txt text
*.sql text
*.epub diff=astextplain

# Graphics
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.tif binary
*.tiff binary
*.ico binary
# SVG treated as text by default.
*.svg text
# If you want to treat it as binary,
# use the following line instead.
# *.svg binary
*.eps binary

# Scripts
*.bash text eol=lf
*.fish text eol=lf
*.ksh text eol=lf
*.sh text eol=lf
*.zsh text eol=lf
# These are explicitly windows files and should use crlf
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf

# Serialisation
*.json text
*.toml text
*.xml text
*.yaml text
*.yml text

# Archives
*.7z binary
*.gz binary
*.tar binary
*.tgz binary
*.zip binary

# Text files where line endings should be preserved
*.patch -text

#
# Exclude files from exporting
#

.gitattributes export-ignore
.gitignore export-ignore
.gitkeep export-ignore

###
# https://github.com/gitattributes/gitattributes/blob/master/PHP.gitattributes
###

# PHP files
*.php text eol=lf diff=php
*.phpt text eol=lf diff=php
*.phtml text eol=lf diff=html
*.twig text eol=lf
*.phar binary

# Configuration
phpcs.xml text eol=lf
phpunit.xml text eol=lf
phpstan.neon text eol=lf
psalm.xml text eol=lf

###
# Open Culture Consulting custom additions
###

# Configuration
.editorconfig text eol=lf
*.dist.xml text eol=lf
*.xml.dist text eol=lf
*.neon text eol=lf

# Generated documentation
doc/* linguist-generated=true

# Exclude files from exporting
.github/* export-ignore
.phpdoc/* export-ignore
phpdoc.dist.xml export-ignore
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
/.phpdoc/cache/
/.vscode/
/vendor/
composer.lock
.php-cs-fixer.php
phpcs.xml
phpdoc.xml
phpstan.neon
psalm.xml
TODO
53 changes: 27 additions & 26 deletions Classes/Exception.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,34 @@

class Exception extends \Exception {

private array $errorTable = [
'badArgument' => [
'text' => 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.',
],
'badResumptionToken' => [
'text' => 'The value of the resumptionToken argument is invalid or expired.',
],
'badVerb' => [
'text' => 'Value of the verb argument is not a legal OAI-PMH verb, the verb argument is missing, or the verb argument is repeated.',
],
'cannotDisseminateFormat' => [
'text' => 'The metadata format identified by the value given for the metadataPrefix argument is not supported by the item or by the repository.',
],
'idDoesNotExist' => [
'text' => 'The value of the identifier argument is unknown or illegal in this repository.',
],
'noRecordsMatch' => [
'text' => 'The combination of the values of the from, until, set and metadataPrefix arguments results in an empty list.',
],
'noMetadataFormats' => [
'text' => 'There are no metadata formats available for the specified item.',
],
'noSetHierarchy' => [
'text' => 'The repository does not support sets.',
]
];

public function __construct($code) {
$this->errorTable = [
'badArgument' => [
'text' => 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.',
],
'badResumptionToken' => [
'text' => 'The value of the resumptionToken argument is invalid or expired.',
],
'badVerb' => [
'text' => 'Value of the verb argument is not a legal OAI-PMH verb, the verb argument is missing, or the verb argument is repeated.',
],
'cannotDisseminateFormat' => [
'text' => 'The metadata format identified by the value given for the metadataPrefix argument is not supported by the item or by the repository.',
],
'idDoesNotExist' => [
'text' => 'The value of the identifier argument is unknown or illegal in this repository.',
],
'noRecordsMatch' => [
'text' => 'The combination of the values of the from, until, set and metadataPrefix arguments results in an empty list.',
],
'noMetadataFormats' => [
'text' => 'There are no metadata formats available for the specified item.',
],
'noSetHierarchy' => [
'text' => 'The repository does not support sets.',
],
];
parent::__construct($this->errorTable[$code]['text']);
$this->code = $code;
}
Expand Down
8 changes: 6 additions & 2 deletions Classes/Response.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@

class Response {

public $doc; // DOMDocument. Handle of current XML Document object
public \DOMDocument $doc; // DOMDocument. Handle of current XML Document object

private string $verb = '';

private \DOMElement $verbNode;

public function __construct($uri, $verb, $request_args) {
if (substr($uri, -1, 1) == '/') {
Expand Down Expand Up @@ -74,7 +78,7 @@ public function addChild($mom_node, $name, $value = '') {
* @param string $nodeName The name of appending node.
* @param string $value The content of appending node.
*/
public function addToVerbNode($nodeName, $value = null) {
public function addToVerbNode($nodeName, $value = '') {
if (!isset($this->verbNode) && !empty($this->verb)) {
$this->verbNode = $this->addChild($this->doc->documentElement, $this->verb);
}
Expand Down
20 changes: 15 additions & 5 deletions Classes/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ class Server {
private $max_records = 100;
private $token_prefix = '/tmp/oai2-';
private $token_valid = 86400;
private $uri = '';
private $identifyResponse;
private $listMetadataFormatsCallback;
private $listRecordsCallback;
private $getRecordCallback;
private Response $response;

public function __construct($uri, $args, $identifyResponse, $callbacks, $config) {
$this->uri = $uri;
Expand Down Expand Up @@ -222,7 +228,7 @@ public function ListRecords() {
if ($records_count - $deliveredRecords > $maxItems) {
$deliveredRecords += $maxItems;
$restoken = $this->createResumptionToken($deliveredRecords, $metadataPrefix, $from, $until);
$expirationDatetime = gmstrftime('%Y-%m-%dT%TZ', time()+$this->token_valid);
$expirationDatetime = date('Y-m-d\TH:i:s\Z', time()+$this->token_valid);
} elseif (isset($this->args['resumptionToken'])) {
// Last delivery, return empty resumptionToken
$restoken = null;
Expand Down Expand Up @@ -277,10 +283,14 @@ private function formatDatestamp($timestamp) {
}

private function formatTimestamp($datestamp) {
if (is_array($time = strptime($datestamp, '%Y-%m-%dT%H:%M:%SZ')) || is_array($time = strptime($datestamp, '%Y-%m-%d'))) {
return gmmktime($time['tm_hour'], $time['tm_min'], $time['tm_sec'], $time['tm_mon'] + 1, $time['tm_mday'], $time['tm_year']+1900);
} else {
$time = date_parse_from_format('Y-m-d\TH:i:s\Z', $datestamp);
if ($time['error_count'] > 0) {
$time = date_parse_from_format('Y-m-d', $datestamp);
}
if ($time['error_count'] > 0) {
return null;
} else {
return gmmktime($time['hour'], $time['minute'], $time['second'], $time['month'] + 1, $time['day'], $time['year']);
}
}

Expand All @@ -289,7 +299,7 @@ private function checkDateFormat($date) {
if ($datetime === false) {
$datetime = \DateTime::createFromFormat('Y-m-d', $date);
}
return ($datetime !== false) && ($datetime->getLastErrors() !== false);
return ($datetime !== false);
}

}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"docs": "https://github.com/opencultureconsulting/simple-oai-pmh/blob/master/README.md"
},
"require": {
"php": "^7.0|^8.0",
"php": "7.4.*|8.0.*|8.1.*|8.2.*",
"ext-xml": "*"
},
"replace": {
Expand Down
21 changes: 21 additions & 0 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit fc261eb

Please sign in to comment.