1<?php
2
3/**
4 * Get response from server.
5 *
6 * @return mixed
7 * @throws Exception
8 */
9function getResponse()
10{
11    $serverUrl = "https://download.phplist.org/version.json";
12    $updateUrl = $serverUrl . '?version=' . VERSION;
13
14    $responseFromServer = fetchUrl($updateUrl,array(),259200); ## cache for three days
15    $responseFromServer = json_decode($responseFromServer, true);
16    return $responseFromServer;
17}
18
19/**
20 * Check for update and return a message only if there is an update available.
21 *
22 * @return string
23 * @throws Exception
24 */
25function checkForUpdate()
26{
27    $serverResponse = getResponse();
28    $version = isset($serverResponse['version']) ? $serverResponse['version'] : '';
29    $enabledNotification = true;
30
31    if (strpos($version, 'RC') && (getConfig('rc_notification') == 0)) {
32        $enabledNotification = false;
33    }
34    $versionString = isset($serverResponse['versionstring']) ? $serverResponse['versionstring'] : '';
35    $myVersion = str_replace('-dev','',VERSION);
36
37    if ($version !== '' && $version !== $myVersion && version_compare($myVersion, $version) < 0 && $enabledNotification) {
38        $updateMessage = s('A new version of phpList is available: %s',htmlentities($versionString));
39    } else {
40        $updateMessage = '';
41    }
42
43    ## why not just save it as epoch, makes calculations much easier
44    SaveConfig('lastcheckupdate', date('m/d/Y h:i:s', time()), 0, true);
45
46    return $updateMessage;
47}
48
49/**
50 * Check every 3 days for a new update
51 *
52 * @return bool
53 */
54function lastTimeCheck()
55{
56
57    $doCheck = false;
58
59    $currentTime = date('m/d/Y h:i:s', time());
60    $lastCheckTime = getConfig('lastcheckupdate');
61    $lastTimeFormattedDateTime = new DateTime($lastCheckTime);
62    $currentTimeFormattedDateTime = new DateTime($currentTime);
63
64    $interval = $currentTimeFormattedDateTime->diff($lastTimeFormattedDateTime);
65    $dDiff = $interval->format('%a');
66
67    if ($dDiff >= '3') {
68
69        $doCheck = true;
70    }
71
72    return $doCheck;
73}
74
75/**
76 * Show notification every 3 days only
77 * @return bool
78 */
79function showUpdateNotification()
80{
81    # we can show all the time, the fetching is cached for three days
82    return true;
83
84    if (lastTimeCheck()) {
85
86        return true;
87    }
88
89    return false;
90}
91