(2010-) * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt * @package Language * */ /** * Function getPreConfig * * outputs various content before the update process * can be continued (askes for agreement whatever is being asked) * * @param string version * * @return string */ function getPreConfig($current_version) { $has_preconfig = false; $return = '

PLEASE NOTE - Important update notifications

'; include_once makeCorrectFile(dirname(__FILE__).'/preconfig/0.9/preconfig_0.9.inc.php'); parseAndOutputPreconfig($has_preconfig, $return, $current_version); $return .= '

'.makecheckbox('update_changesagreed', 'I have read the update notifications above and I am aware of the changes made to my system.', '1', true, '0', true); $return .= '
'; $return .= ''; if($has_preconfig) { return $return; } else { return ''; } } function versionInUpdate($current_version, $version_to_check) { if (!isFroxlor()) { return true; } return (version_compare2($current_version, $version_to_check) == -1 ? true : false); } /** * compare of froxlor versions * * @param string $a * @param string $b * * @return integer 0 if equal, 1 if a>b and -1 if b>a */ function version_compare2($a, $b) { // split version into pieces and remove trailing .0 $a = explode(".", rtrim($a, ".0")); $b = explode(".", rtrim($b, ".0")); // -svn or -dev or -rc ? if (stripos($a[count($a)-1], '-') !== false) { $x = explode("-", $a[count($a)-1]); $a[count($a)-1] = $x[0]; if (stripos($x[1], 'rc') !== false) { $a[] = '0'; $a[] = '2'; // rc > dev > svn // number of rc $a[] = substr($x[1], 2); } else if (stripos($x[1], 'dev') !== false) { $a[] = '0'; $a[] = '1'; // svn < dev < rc // number of dev $a[] = substr($x[1], 3); } // -svn version are deprecated else if (stripos($x[1], 'svn') !== false) { $a[] = '0'; $a[] = '0'; // svn < dev < rc // number of svn $a[] = substr($x[1], 3); } else { // unknown version string return 0; } } // same with $b if (stripos($b[count($b)-1], '-') !== false) { $x = explode("-", $b[count($b)-1]); $b[count($b)-1] = $x[0]; if (stripos($x[1], 'rc') !== false) { $b[] = '0'; $b[] = '2'; // rc > dev > svn // number of rc $b[] = substr($x[1], 2); } else if (stripos($x[1], 'dev') !== false) { $b[] = '0'; $b[] = '1'; // svn < dev < rc // number of dev $b[] = substr($x[1], 3); } // -svn version are deprecated else if (stripos($x[1], 'svn') !== false) { $b[] = '0'; $b[] = '0'; // svn < dev < rc // number of svn $b[] = substr($x[1], 3); } else { // unknown version string return 0; } } /* if (count($a) > count($b)) { if ($a[count($b)-1] == $b[count($b)-1]) { return -1; } } if (count($b) > count($a)) { if ($b[count($a)-1] == $a[count($a)-1]) { return 1; } } */ foreach ($a as $depth => $aVal) { // iterate over each piece of A if (isset($b[$depth])) { // if B matches A to this depth, compare the values if ($aVal > $b[$depth]) { return 1; // A > B } else if ($aVal < $b[$depth]) { return -1; // B > A } // an equal result is inconclusive at this point } else { // if B does not match A to this depth, then A comes after B in sort order return 1; // so A > B } } // at this point, we know that to the depth that A and B extend to, they are equivalent. // either the loop ended because A is shorter than B, or both are equal. return (count($a) < count($b)) ? -1 : 0; }