97 lines
2.7 KiB
PHP
97 lines
2.7 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Class: Update
|
||
|
* Informs the user if a newer version of Chyrp Lite is available.
|
||
|
*/
|
||
|
class Update {
|
||
|
/**
|
||
|
* Function: check
|
||
|
* Checks the update channel.
|
||
|
*/
|
||
|
public static function check(): void {
|
||
|
$config = Config::current();
|
||
|
$visitor = Visitor::current();
|
||
|
|
||
|
if (!$config->check_updates)
|
||
|
return;
|
||
|
|
||
|
if (!$visitor->group->can("change_settings"))
|
||
|
return;
|
||
|
|
||
|
# Return unless elapsed time is greater than the update interval.
|
||
|
if (!((time() - $config->check_updates_last) > UPDATE_INTERVAL))
|
||
|
return;
|
||
|
|
||
|
$config->set("check_updates_last", time());
|
||
|
|
||
|
$rss = get_remote(UPDATE_XML, 3);
|
||
|
|
||
|
if ($rss === false) {
|
||
|
self::warning();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$xml = @simplexml_load_string($rss);
|
||
|
|
||
|
if (!self::validate($xml)) {
|
||
|
self::warning();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
foreach ($xml->channel->item as $item)
|
||
|
if (version_compare(CHYRP_VERSION, $item->guid, "<")) {
|
||
|
self::message($item);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Function: validate
|
||
|
* Validates the XML dataset.
|
||
|
*/
|
||
|
private static function validate($xml): bool {
|
||
|
if (!$xml instanceof SimpleXMLElement)
|
||
|
return false;
|
||
|
|
||
|
if (!isset($xml->channel->item))
|
||
|
return false;
|
||
|
|
||
|
foreach ($xml->channel->item as $item)
|
||
|
if (
|
||
|
!isset($item->guid) or
|
||
|
!isset($item->title) or
|
||
|
!isset($item->link)
|
||
|
)
|
||
|
return false;
|
||
|
|
||
|
if (!is_url($item->link))
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Function: message
|
||
|
* Flash the user about the newer version.
|
||
|
*/
|
||
|
private static function message($item): void {
|
||
|
Flash::message(
|
||
|
_f("Chyrp Lite “%s” is available.", fix($item->title)).
|
||
|
' <a href="'.fix($item->link, true).'" target="_blank">'.
|
||
|
__("Go to GitHub!").'</a>'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Function: warning
|
||
|
* Flash the user about the failed check.
|
||
|
*/
|
||
|
private static function warning(): void {
|
||
|
Flash::warning(
|
||
|
__("Unable to check for new Chyrp Lite versions.").
|
||
|
' <a href="'.fix(UPDATE_PAGE, true).'" target="_blank">'.
|
||
|
__("Go to GitHub!").'</a>'
|
||
|
);
|
||
|
}
|
||
|
}
|