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