236 lines
10 KiB
PHP
236 lines
10 KiB
PHP
|
<?php
|
|||
|
$data = new DomDocument();
|
|||
|
$data->load('data.xml');
|
|||
|
$dataNode = $data->getElementsByTagName('data')->item(0);
|
|||
|
$mcupdatesNode = $dataNode->getElementsByTagName('mcupdates')->item(0);
|
|||
|
$releaseS = $mcupdatesNode->getElementsByTagName('release');
|
|||
|
$text = '';
|
|||
|
for ($i = $releaseS->length; $i > 1; $i--) {
|
|||
|
$release = $releaseS->item($i-1);
|
|||
|
$releaseInfos = $release->getElementsByTagName('infos')->item(0);
|
|||
|
$text .= '<h3>Minecraft '.$release->getAttribute('name').' ';
|
|||
|
if (isset($prevRelease)) {
|
|||
|
if ($release->getAttribute('name') == $prevRelease->getAttribute('name')) {
|
|||
|
$text .= '(version enterrée) ';
|
|||
|
}
|
|||
|
}
|
|||
|
$shortDescription = $releaseInfos->getAttribute('shortDescription');
|
|||
|
if ($shortDescription == 'false') {
|
|||
|
$shortDescription = 'Pas de description.';
|
|||
|
}
|
|||
|
$text .= '</h3><div class="release" id="R'.$release->getAttribute('id').'"><div class="shortDescription">'.$shortDescription.' <input type="button" value="+" class="more" /></div><div class="content"></div></div>';
|
|||
|
$prevRelease = $release;
|
|||
|
}
|
|||
|
?>
|
|||
|
<!DOCTYPE html>
|
|||
|
<html lang="fr">
|
|||
|
<head>
|
|||
|
<title>Minecraft Checker</title>
|
|||
|
<meta charset="utf-8">
|
|||
|
<link rel="stylesheet" media="screen" type="text/css" title="design" href="design.css">
|
|||
|
<script type="text/javascript">
|
|||
|
var checkIntervalForm;
|
|||
|
var checkState;
|
|||
|
var checkTimeout;
|
|||
|
var addXhr;
|
|||
|
var allReleases;
|
|||
|
var checkXhr;
|
|||
|
var lastId = <?php echo $mcupdatesNode->getAttribute('total'); ?>;
|
|||
|
|
|||
|
window.onload = function () {
|
|||
|
checkIntervalForm = document.getElementById('checkActivate');
|
|||
|
checkState = document.getElementById('checkState');
|
|||
|
checkIntervalForm.addEventListener('change', function(e) {
|
|||
|
if (e.target.checked) {
|
|||
|
checkState.innerHTML = 'activé';
|
|||
|
checkTimeout = true;
|
|||
|
check();
|
|||
|
console.log('Checking activated');
|
|||
|
} else {
|
|||
|
checkState.innerHTML = 'désactivé';
|
|||
|
clearTimeout(checkTimeout); // TODO Annulation de checkXhr
|
|||
|
checkTimeout = false;
|
|||
|
checkXhr.abort();
|
|||
|
console.log('Checking stopped');
|
|||
|
}
|
|||
|
}, false);
|
|||
|
|
|||
|
allReleases = document.getElementById('allreleases');
|
|||
|
allReleaseS = allReleases.getElementsByClassName('more');
|
|||
|
for (var allReleaseI = 0; allReleaseI < allReleaseS.length; allReleaseI++) {
|
|||
|
allReleaseS[allReleaseI].addEventListener('click', releaseOpen, false);
|
|||
|
}
|
|||
|
console.log('System initialised');
|
|||
|
}
|
|||
|
function releaseOpen(e) {
|
|||
|
e.target.value = '...';
|
|||
|
var releaseXhr = new XMLHttpRequest();
|
|||
|
releaseXhr.onreadystatechange = function() {
|
|||
|
if (releaseXhr.readyState == 4 && (releaseXhr.status == 200 || releaseXhr.status == 0)) {
|
|||
|
e.target.removeEventListener('click', releaseOpen, false);
|
|||
|
console.log(' Infos recevied');
|
|||
|
var content = e.target.parentNode.parentNode.getElementsByClassName('content')[0];
|
|||
|
content.innerHTML = releaseXhr.responseText;
|
|||
|
if (content.getElementsByClassName('releaseFiles')[0]) {
|
|||
|
content.getElementsByClassName('releaseFilesButton')[0].addEventListener('click', releaseFilesOpen, false);
|
|||
|
filesDirExpandS = content.getElementsByClassName('dir');
|
|||
|
for (var filesDirExpandI = 0; filesDirExpandI < filesDirExpandS.length; filesDirExpandI++) {
|
|||
|
filesDirExpandS[filesDirExpandI].addEventListener('click', releaseFilesDirOpen, false);
|
|||
|
}
|
|||
|
var releaseFilesSelectionS = content.getElementsByClassName('releaseFiles')[0].getElementsByTagName('input');
|
|||
|
for (var releaseFilesSelectionI = 0; releaseFilesSelectionI < releaseFilesSelectionS.length; releaseFilesSelectionI++) {
|
|||
|
if (releaseFilesSelectionS[releaseFilesSelectionI].name == 'filesSelectionChangement' || releaseFilesSelectionS[releaseFilesSelectionI].name == 'filesSelectionClass') {
|
|||
|
releaseFilesSelectionS[releaseFilesSelectionI].addEventListener('click', releaseFilesOrderEvent, false);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
e.target.value = '-';
|
|||
|
e.target.addEventListener('click', releaseClose, false);
|
|||
|
}
|
|||
|
};
|
|||
|
var releaseId = e.target.parentNode.parentNode.id.split('R')[1];
|
|||
|
console.log('Searching details for release ID = '+releaseId+'.');
|
|||
|
releaseXhr.open('GET', 'moreinfos.php?i='+releaseId, true);
|
|||
|
releaseXhr.send(null);
|
|||
|
}
|
|||
|
function releaseFilesDirOpen(e) {
|
|||
|
e.target.parentNode.getElementsByClassName('dirUl')[0].style.display = '';
|
|||
|
e.target.className = 'dir opened';
|
|||
|
e.target.removeEventListener('click', releaseFilesDirOpen, false);
|
|||
|
e.target.addEventListener('click', releaseFilesDirClose, false);
|
|||
|
}
|
|||
|
function releaseFilesDirClose(e) {
|
|||
|
e.target.parentNode.getElementsByClassName('dirUl')[0].style.display = 'none';
|
|||
|
e.target.className = 'dir closed';
|
|||
|
e.target.removeEventListener('click', releaseFilesDirClose, false);
|
|||
|
e.target.addEventListener('click', releaseFilesDirOpen, false);
|
|||
|
}
|
|||
|
function releaseClose(e) {
|
|||
|
e.target.value = '...';
|
|||
|
e.target.parentNode.parentNode.getElementsByClassName('content')[0].innerHTML = '';
|
|||
|
e.target.removeEventListener('click', releaseClose, false);
|
|||
|
e.target.addEventListener('click', releaseOpen, false);
|
|||
|
e.target.value = '+';
|
|||
|
}
|
|||
|
function releaseFilesOpen(e) {
|
|||
|
e.target.value = '...';
|
|||
|
var releaseFiles = e.target.parentNode.parentNode.getElementsByClassName('releaseFiles')[0];
|
|||
|
releaseFiles.style.display = '';
|
|||
|
releaseFilesOrder(releaseFiles);
|
|||
|
e.target.removeEventListener('click', releaseFilesOpen, false);
|
|||
|
e.target.addEventListener('click', releaseFilesClose, false);
|
|||
|
e.target.value = '-';
|
|||
|
}
|
|||
|
function releaseFilesOrder(releaseFiles) {
|
|||
|
var releaseFilesFileS = releaseFiles.getElementsByClassName('file');
|
|||
|
var releaseFilesSelectionClassAll = releaseFiles.getElementsByClassName('fileSelectionClassAll')[0].checked;
|
|||
|
var releaseFilesSelectionClassNonTechnic = releaseFiles.getElementsByClassName('fileSelectionClassNontechnic')[0].checked;
|
|||
|
var releaseFilesSelectionClassNone = releaseFiles.getElementsByClassName('fileSelectionClassNone')[0].checked;
|
|||
|
var releaseFilesSelectionChangementAll = releaseFiles.getElementsByClassName('fileSelectionChangementAll')[0].checked;
|
|||
|
var releaseFilesSelectionChangementChanged = releaseFiles.getElementsByClassName('fileSelectionChangementChanged')[0].checked;
|
|||
|
var releaseFilesSelectionChangementAdded = releaseFiles.getElementsByClassName('fileSelectionChangementAdded')[0].checked;
|
|||
|
for (var releaseFilesFileI = 0; releaseFilesFileI < releaseFilesFileS.length; releaseFilesFileI++) {
|
|||
|
var releaseFilesFileClassE = releaseFilesFileS[releaseFilesFileI].className.split(' ');
|
|||
|
var releaseFilesFileTechnic = in_array('technic', releaseFilesFileClassE);
|
|||
|
var releaseFilesFileClass = in_array('class', releaseFilesFileClassE);
|
|||
|
var releaseFilesFileChanged = in_array('change', releaseFilesFileClassE);
|
|||
|
var releaseFilesFileAdded = in_array('added', releaseFilesFileClassE);
|
|||
|
if ((releaseFilesSelectionClassAll || (releaseFilesSelectionClassNonTechnic && (!releaseFilesFileTechnic)) || (releaseFilesSelectionClassNone && (!releaseFilesFileClass))) && (releaseFilesSelectionChangementAll || (releaseFilesSelectionChangementChanged && (releaseFilesFileChanged || releaseFilesFileAdded)) || (releaseFilesSelectionChangementAdded && releaseFilesFileAdded))) {
|
|||
|
releaseFilesFileS[releaseFilesFileI].parentNode.style.display = '';
|
|||
|
} else {
|
|||
|
releaseFilesFileS[releaseFilesFileI].parentNode.style.display = 'none';
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
function releaseFilesOrderEvent(e) {
|
|||
|
releaseFilesOrder(e.target.parentNode.parentNode);
|
|||
|
}
|
|||
|
function releaseFilesClose(e) {
|
|||
|
e.target.value = '+';
|
|||
|
e.target.parentNode.parentNode.getElementsByClassName('releaseFiles')[0].style.display = 'none';
|
|||
|
e.target.removeEventListener('click', releaseFilesClose, false);
|
|||
|
e.target.addEventListener('click', releaseFilesOpen, false);
|
|||
|
}
|
|||
|
function check() {
|
|||
|
checkXhr = new XMLHttpRequest();
|
|||
|
checkXhr.onreadystatechange = function() {
|
|||
|
if (checkXhr.readyState == 4 && (checkXhr.status == 200 || checkXhr.status == 0)) {
|
|||
|
console.log('Check finished, with information : '+checkXhr.responseText);
|
|||
|
var newReleaseE = checkXhr.responseText.split('|');
|
|||
|
if (newReleaseE.length == 8 && checkTimeout) {
|
|||
|
if (newReleaseE[5] == lastId) {
|
|||
|
console.log(' Information analysed : no new release (date: '+newReleaseE[0]+').');
|
|||
|
checkState.innerHTML = 'attente';
|
|||
|
} else if (newReleaseE[5] > lastId) {
|
|||
|
console.log(' Information analysed : new release.');
|
|||
|
checkState.innerHTML = 'nouvelle version';
|
|||
|
// TODO Vérifier si (newReleaseE[5] == lastId+1)
|
|||
|
lastRelease = newReleaseE[6];
|
|||
|
if (newReleaseE[7] == 'r' && newReleaseE[5] == lastId+1) {
|
|||
|
var newReleaseAlertType = 'La release complète';
|
|||
|
} else if (newReleaseE[7] == 'apr' && newReleaseE[5] == lastId+1) {
|
|||
|
var newReleaseAlertType = 'La pre-release automatique';
|
|||
|
} else if (newReleaseE[7] == 'pr' && newReleaseE[5] == lastId+1) {
|
|||
|
var newReleaseAlertType = 'La pre-release';
|
|||
|
} else {
|
|||
|
console.error(' Bad informations on the new release. Reloading page.');
|
|||
|
checkState.innerHTML = 'erreur';
|
|||
|
location.reload();
|
|||
|
return false;
|
|||
|
}
|
|||
|
lastId = newReleaseE[5];
|
|||
|
console.info('New release: name: '+lastRelease+' id:'+newReleaseE[5]+' type: '+newReleaseE[7]+'.');
|
|||
|
checkState.innerHTML = 'nouvelle version';
|
|||
|
document.title='Version '+lastRelease+' sortie !';
|
|||
|
alert(newReleaseAlertType+' '+lastRelease+' est sortie !');
|
|||
|
location.reload();
|
|||
|
} else {
|
|||
|
console.error('Database upset. Reloading page.');
|
|||
|
checkState.innerHTML = 'erreur';
|
|||
|
location.reload();
|
|||
|
}
|
|||
|
checkTimeout = setTimeout('check()', 5000);
|
|||
|
} else if (!checkTimeout) {
|
|||
|
return false;
|
|||
|
} else {
|
|||
|
console.error('Error comited server-side.');
|
|||
|
checkState.innerHTML = 'erreur';
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
checkXhr.open('GET', 'test.php', true);
|
|||
|
checkState.innerHTML = 'recherche';
|
|||
|
checkXhr.send(null);
|
|||
|
}
|
|||
|
|
|||
|
function in_array(needle, haystack) {
|
|||
|
for (key in haystack) {
|
|||
|
if (haystack[key] == needle) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
</script>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<h1>Minecraft Checker</h1>
|
|||
|
<div id="body">
|
|||
|
<h2>Rechercher des versions</h2>
|
|||
|
<p class="RL_search"><input type="checkbox" id="checkActivate" name="checkActivate"/><label for="checkActivate"> Rechercher les nouvelles releases (<span id="checkState">désactivé</span>)</label></p>
|
|||
|
|
|||
|
<h2>Versions référencées</h2>
|
|||
|
<div id="allreleases">
|
|||
|
<?php echo $text; ?>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<footer>
|
|||
|
<p id="copyright">Copyright © <a href="https://twitter.com/#!/WebFrogeye">WebFrogeye</a> 2012</p>
|
|||
|
<p>Créé par <a href="https://twitter.com/#!/WebFrogeye">@WebFrogeye</a>.<br/>
|
|||
|
Avec l'aide d'<a href="https://twitter.com/#!/EphysPotato">@EphysPotato</a>.<br/>
|
|||
|
Sur un design de <a href="http://dlp.host56.com/">DLProduction</a>.<br/>
|
|||
|
D'après un script de <a href="https://twitter.com/#!/shellgratuit">@shellgratuit</a>.</p>
|
|||
|
</footer>
|
|||
|
<div id="cache" style="display: none;"></div>
|
|||
|
</body>
|
|||
|
</html>
|