12032025Refresh

This commit is contained in:
ManfredAabye
2025-03-12 21:22:32 +01:00
committed by GitHub
parent c6d9f9db72
commit 3a28f431f5
45 changed files with 6701 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
<?php
$title = "About";
include_once 'include/header.php';
// About Version 1.2
// Sprachauswahl (Standard: Deutsch)
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'de';
?>
<style>
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
color: rgb(31, 31, 31);
background-color: rgb(238, 241, 241);
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.language-switcher {
text-align: right;
margin-bottom: 20px;
}
.language-switcher a {
text-decoration: none;
color: #007BFF;
margin: 0 5px;
}
.language-switcher a:hover {
text-decoration: underline;
}
</style>
<main class="container">
<!-- Sprachauswahl -->
<div class="language-switcher">
<a href="?lang=de">Deutsch</a> | <a href="?lang=en">English</a>
</div>
<?php if ($lang == 'de'): ?>
<!-- Deutsche Version -->
<section>
<h1>Über Uns</h1>
<p>Willkommen auf unserer <?php echo SITE_NAME; ?> Webseite! Hier finden Sie Informationen über unser Unternehmen und unsere Dienstleistungen.</p>
</section>
<section>
<h2>Haftungsausschluss</h2>
<p>Die Nutzung dieser Webseite erfolgt auf eigene Gefahr. Wir übernehmen keine Gewähr für die Richtigkeit, Vollständigkeit oder Aktualität der bereitgestellten Informationen.</p>
</section>
<section>
<h3>Internationaler Haftungsausschluss</h3>
<p>
Die Informationen auf dieser Webseite werden ohne jegliche Gewährleistung, ausdrücklich oder implizit, bereitgestellt. Wir schließen jegliche Haftung für Schäden aus, die direkt oder indirekt aus der Nutzung dieser Webseite entstehen.
</p>
<p>
Dies umfasst, ohne Einschränkung, Schäden durch verlorene Daten, entgangenen Gewinn oder Betriebsunterbrechungen, unabhängig davon, ob wir auf die Möglichkeit solcher Schäden hingewiesen wurden.
</p>
<p>
Diese Webseite kann Links zu externen Webseiten Dritter enthalten, auf deren Inhalte wir keinen Einfluss haben. Für die Inhalte und die Richtigkeit der Informationen auf diesen externen Webseiten übernehmen wir keine Haftung. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich.
</p>
</section>
<section>
<h3>Virtuelle Welten mit OpenSimulator</h3>
<p>
OpenSimulator ist eine Open-Source-Software, die es ermöglicht, virtuelle 3D-Welten zu erstellen und zu betreiben. Diese Welten können für verschiedene Zwecke genutzt werden, einschließlich Bildung, soziale Interaktion und Geschäftstätigkeiten.
</p>
<p>
OpenSimulator ist kompatibel mit dem Second Life-Protokoll, was bedeutet, dass Benutzer mit Second Life-kompatiblen Clients auf diese Welten zugreifen können.
</p>
<p>
OpenSimulator bietet eine flexible Plattform, die es Benutzern ermöglicht, ihre eigenen virtuellen Umgebungen zu gestalten. Dies umfasst die Erstellung von Landschaften, Gebäuden, Objekten und sogar komplexen Simulationen. Die Software unterstützt auch Skripting, sodass Benutzer interaktive Elemente und Funktionen in ihren Welten implementieren können.
</p>
<p>
Die in OpenSimulator erstellten virtuellen Welten sind nutzergeneriert, und die Inhalte werden von den Benutzern selbst erstellt und verwaltet. Dies bedeutet, dass die Verantwortung für die Inhalte, die in diesen Welten geteilt werden, bei den jeweiligen Nutzern liegt. Wir übernehmen keine Verantwortung für die Inhalte, die in diesen virtuellen Welten erstellt oder geteilt werden.
</p>
<p>
Die Nutzung von OpenSimulator und den damit verbundenen virtuellen Welten erfolgt auf eigene Gefahr. Wir empfehlen den Benutzern, die Nutzungsbedingungen und Datenschutzrichtlinien der jeweiligen virtuellen Welten sorgfältig zu lesen und zu befolgen. Zudem sollten Benutzer sich bewusst sein, dass virtuelle Welten möglicherweise nicht für alle Altersgruppen geeignet sind und dass sie ihre Privatsphäre und Sicherheit in solchen Umgebungen schützen sollten.
</p>
<p>
Weitere Informationen zu OpenSimulator finden Sie auf der offiziellen Wiki-Seite: <a href="http://opensimulator.org/wiki/Main_Page/de" target="_blank">OpenSimulator Wiki</a>.
</p>
</section>
<?php else: ?>
<!-- Englische Version -->
<section>
<h1>About Us</h1>
<p>Welcome to our <?php echo SITE_NAME; ?> website! Here you will find information about our company and our services.</p>
</section>
<section>
<h2>Disclaimer</h2>
<p>Use of this website is at your own risk. We do not guarantee the accuracy, completeness, or timeliness of the information provided.</p>
</section>
<section>
<h3>International Disclaimer</h3>
<p>
The information on this website is provided without any warranties, express or implied. We disclaim all liability for damages arising directly or indirectly from the use of this website.
</p>
<p>
This includes, without limitation, damages due to lost data, lost profits, or business interruption, regardless of whether we have been advised of the possibility of such damages.
</p>
<p>
This website may contain links to external websites of third parties, over whose content we have no control. We assume no responsibility for the content and accuracy of the information on these external websites. The respective provider or operator of the linked pages is always responsible for their content.
</p>
</section>
<section>
<h3>Virtual Worlds with OpenSimulator</h3>
<p>
OpenSimulator is an open-source software that allows the creation and operation of virtual 3D worlds. These worlds can be used for various purposes, including education, social interaction, and business activities.
</p>
<p>
OpenSimulator is compatible with the Second Life protocol, which means that users can access these worlds using Second Life-compatible clients.
</p>
<p>
OpenSimulator provides a flexible platform that enables users to design their own virtual environments. This includes the creation of landscapes, buildings, objects, and even complex simulations. The software also supports scripting, allowing users to implement interactive elements and functions in their worlds.
</p>
<p>
The virtual worlds created in OpenSimulator are user-generated, and the content is created and managed by the users themselves. This means that the responsibility for the content shared in these worlds lies with the respective users. We are not responsible for the content created or shared in these virtual worlds.
</p>
<p>
The use of OpenSimulator and the associated virtual worlds is at your own risk. We recommend that users carefully read and follow the terms of use and privacy policies of the respective virtual worlds. Additionally, users should be aware that virtual worlds may not be suitable for all age groups and that they should protect their privacy and safety in such environments.
</p>
<p>
For more information about OpenSimulator, please visit the official wiki page: <a href="http://opensimulator.org/wiki/Main_Page/de" target="_blank">OpenSimulator Wiki</a>.
</p>
</section>
<?php endif; ?>
</main>
<?php include_once 'include/footer.php'; ?>
+142
View File
@@ -0,0 +1,142 @@
<?php
session_start();
$title = "AvatarPicker Service";
include_once 'include/header.php';
// Fehlerberichterstattung aktivieren
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Verbindung zur Datenbank herstellen
$conn = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Überprüfen, ob die Verbindung erfolgreich war
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
$vorname = $nachname = '';
$inventory = [];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$input_password = $_POST['input_password'] ?? '';
$vorname = $_POST['vorname'] ?? '';
$nachname = $_POST['nachname'] ?? '';
// Überprüfen des Passworts
if (in_array($input_password, $registration_passwords_avatarpicker)) {
$_SESSION['authenticated'] = true;
if (!empty($vorname) && !empty($nachname)) {
$inventory = listinventar($conn, $vorname, $nachname);
}
} else {
$error_message = "Falsches Passwort. Bitte versuchen Sie es erneut.";
}
} else {
// Benutzer ist nicht authentifiziert
$show_login_form = true;
}
// Funktion zum Abrufen des Inventars
function listinventar($conn, $vorname, $nachname) {
$vorname = $conn->real_escape_string(strip_tags($vorname));
$nachname = $conn->real_escape_string(strip_tags($nachname));
$query = "SELECT PrincipalID FROM UserAccounts WHERE FirstName='$vorname' AND LastName='$nachname'";
$result = $conn->query($query);
if ($result->num_rows == 0) {
echo "Benutzer nicht gefunden.\n";
return [];
}
$row = $result->fetch_assoc();
$user_uuid = $row['PrincipalID'];
// Abfrage der "Outfits"-Ordner
$query = "SELECT folderID, folderName FROM inventoryfolders WHERE agentID='$user_uuid' AND type=47 ORDER BY folderName ASC, agentID ASC";
$result = $conn->query($query);
$inventory = [];
while ($row = $result->fetch_assoc()) {
$inventory[] = [
'folderID' => $row['folderID'],
'folderName' => $row['folderName']
];
}
if (empty($inventory)) {
echo "Keine Outfits gefunden.\n";
}
return $inventory;
}
// Funktion zum Abrufen des Bildes nach Namen
function getImageByName($dir, $name) {
foreach (glob($dir."*.jpg") as $filename) {
$file = pathinfo($filename, PATHINFO_FILENAME);
if ($file === $name) {
return $dir.$file.".jpg";
}
}
return $dir."default.jpg";
}
?>
<style>
body { font-family: Arial, sans-serif; color: black; margin: 0; padding: 0; display: flex; flex-direction: column; height: 100vh; }
.containerlist { display: flex; flex-direction: column; flex: 1; }
header, footer { flex-shrink: 0; }
main { flex-grow: 1; display: flex; justify-content: center; align-items: center; }
.form-containerlist { background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); max-width: 600px; width: 100%; }
h1 { font-size: 24px; margin-bottom: 20px; text-align: center; }
label { display: block; margin-bottom: 8px; font-weight: bold; }
input[type="text"], input[type="password"] { width: calc(100% - 20px); padding: 8px; margin-bottom: 15px; border: 1px solid #ccc; border-radius: 4px; }
input[type="submit"] { width: 100%; padding: 10px; border: none; border-radius: 4px; background-color: #007bff; color: #fff; font-size: 16px; cursor: pointer; margin-bottom: 10px; }
input[type="submit"]:hover { background-color: #0056b3; }
.inventory-list { list-style-type: none; padding: 0; }
.inventory-list li { padding: 8px; background-color: #f9f9f9; margin-bottom: 5px; border: 1px solid #ccc; border-radius: 4px; }
.outfit-container { margin: 10px; }
.img-thumbnail { max-width: 100px; }
</style>
<div class="containerlist">
<main>
<div class="form-containerlist">
<h1>AvatarPicker</h1>
<form method="POST" action="">
<label for="vorname">Vorname:</label>
<input type="text" id="vorname" name="vorname" required><br>
<label for="nachname">Nachname:</label>
<input type="text" id="nachname" name="nachname" required><br>
<label for="input_password">Passwort:</label>
<input type="password" id="input_password" name="input_password" required><br>
<input type="submit" value="Outfits anzeigen">
</form>
<?php if (isset($error_message)): ?>
<p style="color: red;"><?= htmlspecialchars($error_message) ?></p>
<?php endif; ?>
<?php if ($_SESSION['authenticated'] ?? false && !empty($inventory)): ?>
<h2>Outfits von <?= htmlspecialchars($vorname) ?> <?= htmlspecialchars($nachname) ?></h2>
<div class="inventory-list">
<?php foreach ($inventory as $item): ?>
<div class="outfit-container">
<a href="secondlife:///app/wear_folder/?folder_id=<?= htmlspecialchars($item['folderID']) ?>" target="_self">
<img class="img-thumbnail" src="<?= htmlspecialchars(getImageByName("pics/", $item['folderName'])) ?>" alt="<?= htmlspecialchars($item['folderName']) ?>">
<p><?= htmlspecialchars($item['folderName']) ?></p>
</a>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</main>
</div>
+232
View File
@@ -0,0 +1,232 @@
<?php
//! Private Konfiguration
// MySQL Verbindungsdaten
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'your_username');
define('DB_PASSWORD', 'your_password');
define('DB_NAME', 'your_database');
define('DB_ASSET_NAME', 'your_database');
// RemoteAdmin
define('REMOTEADMIN_URL', 'localhost');
define('REMOTEADMIN_PORT', 8002);
define('REMOTEADMIN_HTTPAUTHUSERNAME', 'opensim');
define('REMOTEADMIN_HTTPAUTHPASSWORD', 'opensim123');
// Seitenadressen
define('BASE_URL', 'http://yourdomain.com');
define('SITE_NAME', 'Dein Grid Name');
// Konfigurieren sie ihre Robust.ini wie folgt:
//
// MapTileURL = "${Const|BaseURL}:${Const|PublicPort}/oswebinterface/maptile.php";
// SearchURL = "${Const|BaseURL}:${Const|PublicPort}/oswebinterface/searchservice.php";
// DestinationGuide = "${Const|BaseURL}/oswebinterface/guide.php"
// AvatarPicker = "${Const|BaseURL}/oswebinterface/avatarpicker.php"
// GridSearch = "${Const|BaseURL}/oswebinterface/gridsearch.php";
// MessageURI = "${Const|BaseURL}/oswebinterface/messages.php";
// welcome = ${Const|BaseURL}/oswebinterface/welcomesplashpage.php
// economy = ${Const|BaseURL}:8008/
// about = ${Const|BaseURL}/oswebinterface/aboutinformation.php
// register = ${Const|BaseURL}/oswebinterface/createavatar.php
// help = ${Const|BaseURL}/oswebinterface/help.php
// password = ${Const|BaseURL}/oswebinterface/passwordreset.php
// partner = ${Const|BaseURL}/oswebinterface/partner.php
// GridStatus = ${Const|BaseURL}:${Const|PublicPort}/oswebinterface/gridstatus.php
// GridStatusRSS = ${Const|BaseURL}:${Const|PublicPort}/oswebinterface/gridstatusrss.php
//! Allgemeine Konfiguration
// Konfigurationsoptionen Standart Template:
// "headerBlanc.php", "headerST.php", "headerW3.php", "headerBT5.php", "headerFoundation.php", "headerMaterialize.php", "headerTailwind.php", "headerPrimer.php", "headerTachyons.php", "headerSpectre.php", "headerTent.php"
define('HEADER_FILE', 'headerBlanc.php'); // Ändere diesen Wert, um die verschienen Template Header Datei zu laden.
// Konfigurationsoption für den Banker
define('BANKER_UUID', '00000000-0000-0000-0000-000000000000');
// Verifizierungsfunktionen
define('VERIFICATION_METHOD', 'email'); // 'email' oder 'uuid'
// Asset Bilder
define('ASSETPFAD', 'cache/');
define('ASSET_FEHLT', ASSETPFAD . '00000000-0000-0000-0000-000000000002');
define('GRID_PORT', ':8002');
define('GRID_ASSETS', ':8003/assets/');
define('GRID_ASSETS_SERVER', 'BASE_URL' . 'GRID_ASSETS');
// Guide
define('GRIDLIST_FILE', 'include/gridlist.csv');
define('GRIDLIST_VIEW', 'json'); // 'json', 'database' oder 'grid'
// Tagesmeldungen
define('SHOW_DAILY_UPDATE', true); // Ein- oder ausschalten
define('DAILY_UPDATE_TYPE', 'rss'); // 'text' oder 'rss'
define('DAILYTEXT', 'Dies ist eine aus der config.php konfigurierte tagesaktuelle Einblendung.'); // Tagesaktueller Text
define('RSS_FEED_URL', 'https://www.hypergridbusiness.com/feed'); // URL des RSS-Feeds Beispiel:Hypergrid Business.
//define('RSS_FEED_URL', 'http://opensimulator.org/viewgit/?a=rss-log&p=opensim'); // URL des RSS-Feeds Beispiel:OpenSimulator.org.
define('FEED_CACHE_PATH', __DIR__.'/feed_cache.html'); // Cache-Dateipfad
define('FEED_CACHE_MAX_AGE', 3600); // Cache max. 60 Minuten alt
// Media
//define('MEDIA_SERVER', 'http://localhost:8500/stream');
define('MEDIA_SERVER', 'http://schwarze-welle.de:7500/stream');
//define('MEDIA_SERVER_STATUS', 'http://localhost:8500/status-json.xsl');
define('MEDIA_SERVER_STATUS', 'http://schwarze-welle.de:7500/');
// Passwörter (unbedingt austauschen!)
// Für das austauschen der Passwöter könnt ihr den paswd_generator.php benutzen den ihr im Verszeichnis /include findet.
$registration_passwords_register = ["63RKh0y4O1vVZvIy", "QfgOsSjv7eXsGrm9", "y6RDvvr7yBXIti1Z", "RdzMASYV4Z4yAufN", "RYNo3wsO2n3EJJu2"];
$registration_passwords_reset = ["1wEmRxyeK88EwrYT", "HoQPwWpyMnCr8Vdk", "1hBkOWCu1lSYj8fQ", "dU9gTvmzdrpy0lo0", "TQU4iUnkc3TbhKkM"];
$registration_passwords_partner = ["Mu9rGlgT03sOiaXf", "rrptmaXB4cojZUYt", "v2YIa0lY4qUnUK67", "ikeAJXrtviCFlcg0", "2zNONij8lyXfYxnm"];
$registration_passwords_inventory = ["XIDkRs2I2oUiELM2", "MV6wjiuJGwq2Z66o", "k6ATTjmlfEvUyJac", "Fsw76zBg3B8U7GaQ", "4kFBhnAt1olB4MjZ"];
$registration_passwords_datatable = ["Ki4R3wzrPQyjcaUf", "tQmeWGOB8CnIZ9lR", "FoJO8gkHKzgRuhBe", "D8ISCU30tqppXCSo", "iOcp63eE9DMlFWL2"];
$registration_passwords_listinventar = ["1LwKJSFv4nDonISZ", "bsuDqHa2b7IjTS1j", "NHQPcsVPM054qPQy", "mY3yGk4FOxRbWF6u", "RncBBHbqfUfP5dFO"];
$registration_passwords_picreader = ["44PjElCRe1ptxB5Z", "DVEAOvYm3jbnT90C", "0EODGtu100Hc05VO", "Nnfw5Pdf683BhvBf", "BP8l7yIziX2xxmPI"];
$registration_passwords_mutelist = ["f7QHGUHiWv5YKMbX", "xev7HckvtNwn6qrN", "johvUPwLNuV8e7Vp", "1WMJcyoaXMspQ3pT", "PtI4gAZHEF4B3iDw"];
$registration_passwords_avatarpicker = ["eLDlqKAzvhkM76GY", "LWGV8as8FXx9trS9", "QviZZNHYa2NBttEr", "zATL5jKBqvValDRt", "Ry4pky6RIpoULmLR"];
$registration_passwords_economy = ["bgFavOtCgC8lfACZ", "NKEKUJeXGaGZvs8g", "rPY1ctDmCXWCFwpK", "Fm0bhEhBFJH8Cckr", "rNZobVNUZMmzjXqG"];
// Farben der Webseite
$colorSchemes = array(
'oceanBreeze' => array('header' => '#2E8BC0', 'footer' => '#2E8BC0', 'secondary' => '#B1D4E0', 'primary' => '#3B3B98'),
'sunsetGlow' => array('header' => '#FF6F61', 'footer' => '#FF6F61', 'secondary' => '#FFD54F', 'primary' => '#2C3E50'),
'forestHaven' => array('header' => '#2F5233', 'footer' => '#2F5233', 'secondary' => '#A4DE02', 'primary' => '#FFAE03'),
'lavenderBliss' => array('header' => '#6A0572', 'footer' => '#6A0572', 'secondary' => '#D2B4DE', 'primary' => '#F5B7B1'),
'fierySunset' => array('header' => '#D32F2F', 'footer' => '#D32F2F', 'secondary' => '#FFCDD2', 'primary' => '#B71C1C'),
'coolMint' => array('header' => '#009688', 'footer' => '#009688', 'secondary' => '#B2DFDB', 'primary' => '#004D40'),
'royalBlue' => array('header' => '#3F51B5', 'footer' => '#3F51B5', 'secondary' => '#C5CAE9', 'primary' => '#1A237E'),
'autumnHarvest' => array('header' => '#8D6E63', 'footer' => '#8D6E63', 'secondary' => '#FFCCBC', 'primary' => '#3E2723'),
'goldenHour' => array('header' => '#FFEB3B', 'footer' => '#FFEB3B', 'secondary' => '#FFF9C4', 'primary' => '#FBC02D'),
'mintChocolate' => array('header' => '#4CAF50', 'footer' => '#4CAF50', 'secondary' => '#CDDC39', 'primary' => '#795548'),
'berryBurst' => array('header' => '#E91E63', 'footer' => '#E91E63', 'secondary' => '#F8BBD0', 'primary' => '#880E4F'),
'midnightBlue' => array('header' => '#0D47A1', 'footer' => '#0D47A1', 'secondary' => '#BBDEFB', 'primary' => '#1E88E5'),
'grayscale1' => array('header' => '#333333', 'footer' => '#333333', 'secondary' => '#666666', 'primary' => '#E0E0E0'),
'grayscale2' => array('header' => '#4F4F4F', 'footer' => '#4F4F4F', 'secondary' => '#A0A0A0', 'primary' => '#FFFFFF'),
'grayscale3' => array('header' => '#2B2B2B', 'footer' => '#2B2B2B', 'secondary' => '#858585', 'primary' => '#D9D9D9'),
'emeraldDream' => array('header' => '#50C878', 'footer' => '#50C878', 'secondary' => '#98FB98', 'primary' => '#006400'),
'coralReef' => array('header' => '#FF7F50', 'footer' => '#FF7F50', 'secondary' => '#FFD700', 'primary' => '#8B0000'),
'purpleHaze' => array('header' => '#8A2BE2', 'footer' => '#8A2BE2', 'secondary' => '#DA70D6', 'primary' => '#4B0082'),
'sunshineMeadow' => array('header' => '#FFD700', 'footer' => '#FFD700', 'secondary' => '#F0E68C', 'primary' => '#556B2F'),
'autumnLeaves' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FFD700', 'primary' => '#8B4513'),
'crimsonTide' => array('header' => '#DC143C', 'footer' => '#DC143C', 'secondary' => '#FFDAB9', 'primary' => '#8B0000'),
'skylineView' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#4682B4', 'primary' => '#1E90FF'),
'blazingSunset' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FFD700', 'primary' => '#FF8C00'),
'morningMist' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#B0E0E6', 'primary' => '#4682B4'),
'twilightSparkle' => array('header' => '#4B0082', 'footer' => '#4B0082', 'secondary' => '#9370DB', 'primary' => '#8A2BE2'),
'sereneGreen' => array('header' => '#2E8B57', 'footer' => '#2E8B57', 'secondary' => '#98FB98', 'primary' => '#006400'),
'coralBlush' => array('header' => '#FF6F61', 'footer' => '#FF6F61', 'secondary' => '#FFA07A', 'primary' => '#FA8072'),
'earthyBrown' => array('header' => '#8B4513', 'footer' => '#8B4513', 'secondary' => '#D2B48C', 'primary' => '#A0522D'),
'crimsonWave' => array('header' => '#B22222', 'footer' => '#B22222', 'secondary' => '#FF6347', 'primary' => '#DC143C'),
'coolCyan' => array('header' => '#00CED1', 'footer' => '#00CED1', 'secondary' => '#E0FFFF', 'primary' => '#20B2AA'),
'deepPurple' => array('header' => '#9400D3', 'footer' => '#9400D3', 'secondary' => '#9932CC', 'primary' => '#8B008B'),
'warmAmber' => array('header' => '#FFBF00', 'footer' => '#FFBF00', 'secondary' => '#FFD700', 'primary' => '#FF8C00'),
'gentlePink' => array('header' => '#FF69B4', 'footer' => '#FF69B4', 'secondary' => '#FFB6C1', 'primary' => '#FF1493'),
'midnightTeal' => array('header' => '#008080', 'footer' => '#008080', 'secondary' => '#40E0D0', 'primary' => '#20B2AA'),
'sunsetOrange' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FF6347', 'primary' => '#FF7F50'),
'forestGreen' => array('header' => '#228B22', 'footer' => '#228B22', 'secondary' => '#32CD32', 'primary' => '#006400'),
'icyBlue' => array('header' => '#00BFFF', 'footer' => '#00BFFF', 'secondary' => '#ADD8E6', 'primary' => '#1E90FF'),
'rosyRed' => array('header' => '#FF6347', 'footer' => '#FF6347', 'secondary' => '#FF7F7F', 'primary' => '#FF4500'),
'plumPurple' => array('header' => '#8B008B', 'footer' => '#8B008B', 'secondary' => '#DA70D6', 'primary' => '#9932CC'),
'vibrantYellow' => array('header' => '#FFD700', 'footer' => '#FFD700', 'secondary' => '#FFFF00', 'primary' => '#FFA500'),
'aquaMarine' => array('header' => '#7FFFD4', 'footer' => '#7FFFD4', 'secondary' => '#E0FFFF', 'primary' => '#40E0D0'),
'burntSienna' => array('header' => '#E97451', 'footer' => '#E97451', 'secondary' => '#D2691E', 'primary' => '#CD5C5C'),
'mintGreen' => array('header' => '#98FF98', 'footer' => '#98FF98', 'secondary' => '#ADFF2F', 'primary' => '#32CD32'),
'sapphireBlue' => array('header' => '#0F52BA', 'footer' => '#0F52BA', 'secondary' => '#4682B4', 'primary' => '#1E90FF'),
'coralPink' => array('header' => '#F88379', 'footer' => '#F88379', 'secondary' => '#FF7F50', 'primary' => '#FF6347'),
'jadeGreen' => array('header' => '#00A36C', 'footer' => '#00A36C', 'secondary' => '#50C878', 'primary' => '#2E8B57'),
'peachOrange' => array('header' => '#FFDAB9', 'footer' => '#FFDAB9', 'secondary' => '#FFE4B5', 'primary' => '#FFA07A'),
'rubyRed' => array('header' => '#9B111E', 'footer' => '#9B111E', 'secondary' => '#FF6347', 'primary' => '#B22222'),
'skyBlue' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#B0E0E6', 'primary' => '#00BFFF'),
'burntOrange' => array('header' => '#FF7F50', 'footer' => '#FF7F50', 'secondary' => '#FFA07A', 'primary' => '#FF4500'),
'standardcolor' => array('header' => '#cdb38b', 'footer' => '#eecfa1', 'secondary' => '#f5f5dc', 'primary' => '#4F4F4F')
);
// Die Farbschaltflächen habe ich eingefügt damit man sich ein gesamtbild der Farbschemas machen kann.
// Bitte last eure kereativität durch nichts stoppen ändert die colorSchemes wie es euch gefällt.
define('SHOW_COLOR_BUTTONS', false); // Farbschaltflächen anzeigen (true/false)
define('INITIAL_COLOR_SCHEME', 'standardcolor'); // Farbschema auswählen
// Farben und Schriftart
// Setze aktuelle Farbschema basierend auf der Konstanten INITIAL_COLOR_SCHEME
$currentColorScheme = $colorSchemes[INITIAL_COLOR_SCHEME];
// definiere die Farben für Header, Footer und andere
define('HEADER_COLOR', $currentColorScheme['header']); // Header-Farbe
define('FOOTER_COLOR', $currentColorScheme['footer']); // Footer-Farbe
define('SECONDARY_COLOR', $currentColorScheme['secondary']); // Sekundärfarbe
define('PRIMARY_COLOR', $currentColorScheme['primary']); // Primäre Schriftfarbe
define('FONT_FAMILY_STATS', 'Arial, Verdana, sans-serif');
define('FONT_FAMILY', 'Pacifico, normal, serif');
// Schriftgrößen
define('BASE_FONT_SIZE', '26px'); // Standardgröße für Text
define('TITLE_FONT_SIZE', '48px'); // Größe für Überschriften
define('STATS_FONT_SIZE', '14px'); // Größe für Statistik-Text
// Links
define('LINK_COLOR', '#3A3A3A'); // Standard Link-Farbe
define('LINK_HOVER_COLOR', 'red'); // Link-Farbe beim Hover
// Hintergrund- und Vordergrundbilder
define('BACKGROUND_IMAGE', 'pics/transparent.png'); // Hintergrundbild
define('FOREGROUND_IMAGE', 'pics/transparent.png'); // Logo oder Vordergrundbild
define('BACKGROUND_OPACITY', 1.0); // Transparenz des Hintergrunds
define('FOREGROUND_OPACITY', 1.0); // Transparenz des Logos
// Anzeigeoptionen
define('LOGO_ON', 'OFF'); // Logo anzeigen: ON / OFF
define('TEXT_ON', 'ON'); // Begrüßungstext anzeigen: ON / OFF
define('LOGO_PATH', 'include/Metavers150.png'); // Pfad zum Logo
define('LOGO_WIDTH', '50%'); // Logo-Breite
define('LOGO_HEIGHT', '25%'); // Logo-Höhe
define('GUIDE_DATA', 'DATA'); // DATA/JSON guide anzeigen.
// Begrüßungstext
// Schriftarten gibt es hier: https://fonts.google.com/
// LOGO_FONT Beispiele: 'Pacifico', 'Barriecito','Playfair Display','Comic Neue','Roboto','Lobster','Montserrat','Oswald','Raleway','Merriweather','Lora','Open Sans','Dancing Script','Nunito'
define('LOGO_FONT', 'Lobster'); // Schriftart des Logos
define('PRIMARY_COLOR_LOGO', '#00FFFF'); // Allgemeine Schriftfarbe Schwarz 000000, Weiss FFFFFF
define('WELCOME_TEXT', '<p> &nbsp; Willkommen im ' . SITE_NAME . '</p>');
define('WELCOME_TEXT_WIDTH', '50%'); // Standardbreite (z. B. 50%)
define('WELCOME_TEXT_HEIGHT', 'auto'); // Standardhöhe (auto für flexible Höhe)
define('WELCOME_TEXT_COLOR', PRIMARY_COLOR_LOGO); // Farbe des Textes
define('WELCOME_TEXT_ALIGN', 'left'); // Zentriert, links oder rechts
define('WELCOME_TEXT_FONT_SIZE', '24px'); // Schriftgröße des Textes
// Bildanzeige-Einstellungen
define('SLIDESHOW_FOLDER', './images'); // Verzeichnis für die Bilder
define('IMAGE_SIZE', 'width:100%;height:100%'); // Größe der Bilder (100% für Vollbild)
define('SLIDESHOW_DELAY', 9000); // Zeit zwischen Bildern (in ms, 9000 = 9 Sekunden)
// Einstellungen für Maptiles
define('FREI_COLOR', '#0088FF'); // Farbe für freie Koordinaten
define('BESCHLAGT_COLOR', '#55C155'); // Farbe für SingleRegion
define('VARREGION_COLOR', '#006400'); // Farbe für VarRegion
define('CENTER_COLOR', '#FF0000'); // Farbe für Zentrum
define('TILE_SIZE', '25px'); // Größe der Farbfelder
// Zentrum des Grids
define('CONF_CENTER_COORD_X', 5500); // X-KOORDINATE DES ZENTRUMS
define('CONF_CENTER_COORD_Y', 5500); // Y-KOORDINATE DES ZENTRUMS
define('MAPS_X', 32);
define('MAPS_Y', 32);
// MOTD-Einstellung: 'Dyn' für dynamisch, 'Static' für statisch
define('MOTD', 'Dyn'); // Oder 'Static'
// Statische MOTD (nur relevant, wenn MOTD auf 'Static' gesetzt ist)
define('MOTD_STATIC_MESSAGE', 'Willkommen auf im Grid! Bitte beachte unsere Regeln.');
define('MOTD_STATIC_TYPE', 'system');
define('MOTD_STATIC_URL_TOS', BASE_URL . '/include/tos.php');
define('MOTD_STATIC_URL_DMCA', BASE_URL . '/include/dmca.php');
// Definiere verschiedene RSS-Feed-URLs getrennt durch Komma.
$feed_urls = [
'http://opensimulator.org/viewgit/?a=rss-log&p=opensim', // Standard-Feed
'https://www.hypergridbusiness.com/feed'
];
// Maximale Anzahl der Einträge pro Feed
$max_entries = 50;
?>
+248
View File
@@ -0,0 +1,248 @@
<?php
session_start(); // PHP-Session starten
$title = "Register";
include_once 'include/header.php';
// Liste bekannter Wegwerf-Domains
$disposable_domains = [
'maildrop.cc',
'discard.email',
'fakeinbox.org',
'disposableemailaddresses:email.co.uk',
'temp-mail.ru',
'mytrashmail.com',
'getairmail.net',
'trash-mail.de',
'trashmail.me',
'mail-temporaire.fr',
'nada.email',
'tempinbox.xyz',
'spambog.com',
'spambox.us',
'anonbox.net',
'mail.kz',
'temp-mail.org',
'luxusmail.ru',
// Weitere Domains hinzufügen
];
// Liste unerwünschter TLDs
$blocked_tlds = ['com', 'cn', 'ru', 'pl'];
// Funktion zur Überprüfung, ob eine E-Mail-Adresse von einer Wegwerf-Domain oder unerwünschten TLD stammt
function is_disposable_email($email, $disposable_domains, $blocked_tlds) {
$domain = substr(strrchr($email, "@"), 1);
$tld = substr(strrchr($domain, "."), 1);
return in_array($domain, $disposable_domains) || in_array($tld, $blocked_tlds);
}
// Funktionen direkt in der Datei definieren
function generateActivationCode() {
return bin2hex(random_bytes(16));
}
function sendVerificationEmail($email, $vorname, $nachname, $activationCode) {
$subject = "Ihr Freischaltcode für " . SITE_NAME;
$message = "Hallo $vorname $nachname,\n\n";
$message .= "Ihr Freischaltcode lautet: $activationCode\n\n";
$message .= "Bitte verwenden Sie diesen Code, um Ihre Registrierung abzuschließen.\n\n";
$message .= "Mit freundlichen Grüßen,\n";
$message .= SITE_NAME;
$headers = "From: noreply@" . parse_url(BASE_URL, PHP_URL_HOST) . "\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
return mail($email, $subject, $message, $headers);
}
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
// Salt erstellen
function ospswdsalt() {
global $benutzeruuid;
$randomuuid = $benutzeruuid;
$strrep = str_replace("-", "", $randomuuid);
return md5($strrep);
}
// Md5Hash(password) + ":" + passwordSalt
function ospswdhash($osPasswd, $osSalt) {
return md5(md5($osPasswd) . ":" . $osSalt);
}
// Überprüfen, ob das Formular abgesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST['submit_card1'])) {
// Daten aus Card1 speichern
$_SESSION['osVorname'] = trim($_POST['osVorname']);
$_SESSION['osNachname'] = trim($_POST['osNachname']);
$_SESSION['osEMail'] = trim($_POST['osEMail']);
$_SESSION['osPasswd'] = trim($_POST['osPasswd']);
$_SESSION['osPasswd1'] = trim($_POST['osPasswd1']);
// Validierungen für Card1
if (empty($_SESSION['osVorname']) || empty($_SESSION['osNachname']) || empty($_SESSION['osEMail']) || empty($_SESSION['osPasswd']) || empty($_SESSION['osPasswd1'])) {
echo "Bitte füllen Sie alle Felder aus.";
exit;
}
if ($_SESSION['osPasswd'] != $_SESSION['osPasswd1']) {
echo "Die Passwörter müssen übereinstimmen.";
exit;
}
if (is_disposable_email($_SESSION['osEMail'], $disposable_domains, $blocked_tlds)) {
echo "Bitte verwenden Sie keine Wegwerf-E-Mail-Adresse oder eine E-Mail-Adresse mit einer gesperrten Domain.";
exit;
}
// Freischaltcode generieren und per E-Mail senden
$activationCode = generateActivationCode();
$_SESSION['activationCode'] = $activationCode; // Freischaltcode in der Session speichern
if (!sendVerificationEmail($_SESSION['osEMail'], $_SESSION['osVorname'], $_SESSION['osNachname'], $activationCode)) {
echo "Fehler beim Senden der E-Mail.";
exit;
}
// Card1 ausblenden und Card2 anzeigen
$showCard1 = false;
$showCard2 = true;
} elseif (isset($_POST['submit_card2'])) {
// Überprüfen des Freischaltcodes
$enteredCode = trim($_POST['activationCode']);
if ($enteredCode === $_SESSION['activationCode']) {
// Freischaltcode ist korrekt, fahre mit der Registrierung fort
// Variablen aus der Session holen
$osVorname = $_SESSION['osVorname'];
$osNachname = $_SESSION['osNachname'];
$osEMail = $_SESSION['osEMail'];
$osPasswd = $_SESSION['osPasswd'];
// UUIDs generieren
$benutzeruuid = generateUUID();
$inventoryuuid = generateUUID();
$neuparentFolderID = generateUUID();
$neuHauptFolderID = generateUUID();
// Salt und Hash generieren
$osSalt = ospswdsalt();
$osHash = ospswdhash($osPasswd, $osSalt);
// Zeitstempel erstellen
$osDatum = time();
// Datenbankverbindung herstellen
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Datenbankzugriffe in createavatarfunc.php durchführen
include_once("include/createavatarfunc.php");
// Erfolgsmeldung anzeigen
echo "Registrierung erfolgreich abgeschlossen!";
} else {
echo "Ungültiger Freischaltcode. Bitte versuchen Sie es erneut.";
}
}
} else {
// Standardmäßig Card1 anzeigen
$showCard1 = true;
$showCard2 = false;
}
?>
<html>
<head>
<meta charset="utf-8">
<title>Register</title>
<style>
htmlBody {font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0;}
.card1, .card2 {
width: 50%;
margin: 2em auto;
padding: 2em;
background-color: #ffffff;
border: 1px solid #ccc;
border-radius: 15px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h2 {color: #333;}
form label {display: block; margin-bottom: 0.5em; color: #333;}
form input[type="text"], form input[type="password"], form input[type="email"] {
width: 100%;
padding: 0.5em;
margin-bottom: 1em;
border: 1px solid #ccc;
border-radius: 4px;
}
form input[type="submit"] {
padding: 0.7em 2em;
background-color: #007BFF;
color: #ffffff;
border: none;
border-radius: 4px;
cursor: pointer;
}
form input[type="submit"]:hover {background-color: #0056b3;}
</style>
</head>
<body>
<main>
<!-- Card1: Eingabe von Vorname, Nachname, E-Mail, Passwort und Passwortwiederholung -->
<div class="card1" style="display: <?php echo $showCard1 ? 'block' : 'none'; ?>;">
<h2>Registrierung - Schritt 1</h2>
<form action="" method="post">
<div class="form-group">
<label for="osVorname">Vorname:</label>
<input type="text" name="osVorname" placeholder="John" maxlength="40" required />
</div>
<div class="form-group">
<label for="osNachname">Nachname:</label>
<input type="text" name="osNachname" placeholder="Doe" maxlength="40" required />
</div>
<div class="form-group">
<label for="osEMail">E-Mail:</label>
<input type="email" name="osEMail" placeholder="john@doe.com" maxlength="40" required />
</div>
<div class="form-group">
<label for="osPasswd">Passwort:</label>
<input type="password" name="osPasswd" placeholder="*********" maxlength="40" required />
</div>
<div class="form-group">
<label for="osPasswd1">Passwort wiederholen:</label>
<input type="password" name="osPasswd1" placeholder="*********" maxlength="40" required />
</div>
<div class="form-group">
<input type="submit" name="submit_card1" value="Senden">
</div>
</form>
</div>
<!-- Card2: Eingabe des Freischaltcodes -->
<div class="card2" style="display: <?php echo $showCard2 ? 'block' : 'none'; ?>;">
<h2>Registrierung - Schritt 2</h2>
<form action="" method="post">
<div class="form-group">
<label for="activationCode">Freischaltcode aus der E-Mail:</label>
<input type="text" name="activationCode" placeholder="Freischaltcode eingeben" maxlength="36" required />
</div>
<div class="form-group">
<input type="submit" name="submit_card2" value="Registrieren">
</div>
</form>
</div>
</main>
</body>
</html>
+128
View File
@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Evants Calendar</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; padding: 20px; }
.calendar { width: 100%; max-width: 1150px; border: 1px solid #ccc; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); }
.header { display: flex; justify-content: space-between; align-items: center; background: #007bff; color: #fff; padding: 10px; }
.days { display: grid; grid-template-columns: repeat(7, 1fr); background: #f0f0f0; }
.day { text-align: center; padding: 8px 0; font-weight: bold; }
.dates { display: grid; grid-template-columns: repeat(7, 1fr); }
.date { text-align: left; padding: 10px; border: 1px solid #ccc; position: relative; aspect-ratio: 1 / 1; background-size: cover; background-position: center; display: flex; flex-direction: column; font-size: 0.7em; }
.date-number { align-self: flex-start; font-size: 1.4em; z-index: 1; }
.event { font-size: 0.8em; background-color: rgba(255, 255, 255, 0.7); padding: 2px 4px; border-radius: 3px; margin-top: auto; text-align: center; z-index: 1; }
.event-text { margin: 2px 0; z-index: 1; }
.event-text-bold { font-weight: bold; }
.image-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; }
.image-container img { width: 100%; height: 100%; object-fit: cover; }
.event-link { font-weight: bold; text-align: center; display: block; margin-top: auto; }
</style>
</head>
<body>
<div class="calendar">
<div class="header">
<button onclick="changeMonth(-1)">&lt;</button>
<h2 id="month-year"></h2>
<button onclick="changeMonth(1)">&gt;</button>
</div>
<div class="days">
<div class="day">Mo</div>
<div class="day">Di</div>
<div class="day">Mi</div>
<div class="day">Do</div>
<div class="day">Fr</div>
<div class="day">Sa</div>
<div class="day">So</div>
</div>
<div id="dates" class="dates"></div>
</div>
<script>
const monthYear = document.getElementById('month-year');
const dates = document.getElementById('dates');
let currentDate = new Date();
async function fetchEvents() {
const response = await fetch('calendar/events.json');
const events = await response.json();
return events;
}
async function renderCalendar() {
const year = currentDate.getFullYear();
const month = currentDate.getMonth();
const firstDay = new Date(year, month, 1).getDay();
const daysInMonth = new Date(year, month + 1, 0).getDate();
const startDay = (firstDay === 0) ? 6 : firstDay - 1; // Montag als erster Tag
monthYear.textContent = currentDate.toLocaleDateString('de-DE', { month: 'long', year: 'numeric' });
dates.innerHTML = '';
const events = await fetchEvents();
for (let i = 0; i < startDay; i++) {
const emptyCell = document.createElement('div');
dates.appendChild(emptyCell);
}
for (let day = 1; day <= daysInMonth; day++) {
const dateCell = document.createElement('div');
dateCell.classList.add('date');
const dateNumber = document.createElement('div');
dateNumber.classList.add('date-number');
dateNumber.textContent = day;
dateCell.appendChild(dateNumber);
const event = events.find(e => new Date(e.date).toDateString() === new Date(year, month, day).toDateString());
if (event) {
if (event.image) {
const imageContainer = document.createElement('div');
imageContainer.classList.add('image-container');
const img = document.createElement('img');
img.src = event.image;
imageContainer.appendChild(img);
dateCell.appendChild(imageContainer);
}
if (event.color) {
dateCell.style.backgroundColor = event.color;
}
if (event.txtcolor) {
dateCell.style.color = event.txtcolor;
}
event.texts.forEach((text, index) => {
const eventTextElement = document.createElement('div');
eventTextElement.classList.add('event-text');
if (index === 0) {
eventTextElement.classList.add('event-text-bold');
}
eventTextElement.textContent = text;
dateCell.appendChild(eventTextElement);
});
const eventElement = document.createElement('div');
eventElement.classList.add('event');
const lastWord = event.link.split('/').pop();
eventElement.innerHTML = `<a href="${event.link}" target="_blank" class="event-link">${lastWord}</a>`;
dateCell.appendChild(eventElement);
}
dates.appendChild(dateCell);
}
}
function changeMonth(offset) {
currentDate.setMonth(currentDate.getMonth() + offset);
renderCalendar();
}
renderCalendar();
</script>
</body>
</html>
+201
View File
@@ -0,0 +1,201 @@
<?php
// Passwortschutz
session_start();
$password = 'dein_passwort'; // Ändere dieses Passwort
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['password'])) {
if ($_POST['password'] === $password) {
$_SESSION['authenticated'] = true;
} else {
echo "<script>alert('Falsches Passwort.');</script>";
}
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['logout'])) {
session_destroy();
header("Location: eventedit.php"); // Wo ist dieser Editor.
exit;
}
if (!isset($_SESSION['authenticated'])) {
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Events Calendar Editor</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; max-width: 800px; margin: auto; }
h2 { text-align: center; }
.input-group { margin-bottom: 15px; }
input[type="password"] { width: 100%; padding: 8px; box-sizing: border-box; }
button { padding: 10px 20px; background: #007bff; color: #fff; border: none; border-radius: 5px; cursor: pointer; }
button:hover { background: #0056b3; }
</style>
</head>
<body>
<h2>Events Calendar Editor</h2>
<form method="POST">
<div class="input-group">
<input type="password" name="password" placeholder="Passwort eingeben" required />
</div>
<button type="submit">Login</button>
</form>
</body>
</html>
<?php
exit;
}
// Funktion zum Speichern der Events in einer JSON-Datei
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['events'])) {
$events = json_decode($_POST['events'], true);
$backupFilename = 'events_' . date('Y-m-d_H-i-s') . '.bak.json';
copy('calendar/events.json', $backupFilename);
file_put_contents('calendar/events.json', json_encode($events, JSON_PRETTY_PRINT));
echo "<script>alert('Events erfolgreich gespeichert!');</script>";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Events Editor</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; max-width: 800px; margin: auto; }
h1 { text-align: center; }
.input-group { margin-bottom: 15px; }
label { display: block; margin-bottom: 5px; }
input[type="text"], input[type="date"], input[type="color"], textarea { width: 100%; padding: 8px; box-sizing: border-box; }
button { padding: 10px 20px; background: #007bff; color: #fff; border: none; border-radius: 5px; cursor: pointer; }
button:hover { background: #0056b3; }
.event-list { margin-top: 20px; }
.event-item { border: 1px solid #ccc; padding: 10px; border-radius: 5px; margin-bottom: 10px; }
.event-item h3 { margin: 0 0 10px; }
form.logout { display: flex; justify-content: center; margin-top: 20px; }
</style>
</head>
<body>
<h1>Events Editor</h1>
<div id="editor">
<div class="input-group">
<label for="event-date">Datum:</label>
<input type="date" id="event-date" />
</div>
<div class="input-group">
<label for="event-image">Bild URL:</label>
<input type="text" id="event-image" />
</div>
<div class="input-group">
<label for="event-texts">Texte (kommagetrennt):</label>
<textarea id="event-texts"></textarea>
</div>
<div class="input-group">
<label for="event-link">Link:</label>
<input type="text" id="event-link" />
</div>
<div class="input-group">
<label for="event-color">Hintergrundfarbe:</label>
<input type="color" id="event-color" />
</div>
<div class="input-group">
<label for="event-txtcolor">Schriftfarbe:</label>
<input type="color" id="event-txtcolor" />
</div>
<button onclick="addEvent()">Event hinzufügen</button>
<button onclick="downloadEvents()">Download</button>
<div class="event-list" id="event-list"></div>
<form method="POST" class="logout">
<button type="submit" name="logout">Session beenden</button>
</form>
</div>
<script>
let events = [];
async function fetchEvents() {
const response = await fetch('calendar/events.json');
events = await response.json();
displayEvents();
}
function displayEvents() {
const eventList = document.getElementById('event-list');
eventList.innerHTML = '';
events.forEach((event, index) => {
const eventItem = document.createElement('div');
eventItem.classList.add('event-item');
eventItem.innerHTML = `
<h3>${event.date}</h3>
<p><strong>Bild URL:</strong> ${event.image}</p>
<p><strong>Texte:</strong> ${event.texts.join(', ')}</p>
<p><strong>Link:</strong> <a href="${event.link}" target="_blank">${event.link}</a></p>
<p><strong>Hintergrundfarbe:</strong> <span style="background-color:${event.color}; padding: 2px 5px;">${event.color}</span></p>
<p><strong>Schriftfarbe:</strong> <span style="background-color:${event.txtcolor}; padding: 2px 5px;">${event.txtcolor}</span></p>
<button onclick="deleteEvent(${index})">Löschen</button>
`;
eventList.appendChild(eventItem);
});
}
function addEvent() {
const date = document.getElementById('event-date').value;
const image = document.getElementById('event-image').value;
const texts = document.getElementById('event-texts').value.split(',');
const link = document.getElementById('event-link').value;
const color = document.getElementById('event-color').value;
const txtcolor = document.getElementById('event-txtcolor').value;
if (date && texts.length > 0 && link) {
events.push({ date, image, texts, link, color, txtcolor });
displayEvents();
} else {
alert('Bitte alle Felder ausfüllen.');
}
}
function deleteEvent(index) {
events.splice(index, 1);
displayEvents();
}
function formatJSON(json) {
return JSON.stringify(json, null, 2);
}
function downloadEvents() {
const formattedEvents = formatJSON(events);
const blob = new Blob([formattedEvents], { type: 'application/json' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'calendar/events.json';
link.click();
}
async function saveEvents() {
const formattedEvents = formatJSON(events);
const formData = new FormData();
formData.append('events', formattedEvents);
const response = await fetch('editor.php', {
method: 'POST',
body: formData
});
if (response.ok) {
alert('Events erfolgreich gespeichert!');
} else {
alert('Fehler beim Speichern.');
}
}
document.addEventListener('DOMContentLoaded', fetchEvents);
</script>
</body>
</html>
+93
View File
@@ -0,0 +1,93 @@
<?php
$title = "Grid List";
include 'include/header.php';
?>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grid List</title>
<style>
.listbody { font-family: Arial, sans-serif; }
.grid-list {
list-style-type: none;
padding: 10px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 10px;
}
.grid-item {
display: flex;
align-items: center;
margin-bottom: 10px;
border: 1px solid #ccc;
padding: 10px;
border-radius: 5px;
}
.grid-link {
margin-left: 10px;
background-color: #007bff;
color: white;
border: none;
padding: 5px 10px;
border-radius: 3px;
cursor: pointer;
}
.search-bar {
margin-bottom: 20px;
}
</style>
<script>
async function loadGrids() {
const response = await fetch('include/gridlist.csv'); // include/gridlist.csv
const data = await response.text();
const lines = data.split('\n').slice(1); // Erste Zeile ignorieren (Header)
const gridList = document.getElementById('gridList');
lines.forEach(line => {
const [gridName, loginURI] = line.split(',');
if (!gridName || !loginURI) return; // Leere Zeilen ignorieren
const li = document.createElement('li');
li.className = 'grid-item';
const btn = document.createElement('button');
btn.className = 'grid-link';
btn.textContent = 'Grid Link';
btn.onclick = () => window.location.href = `secondlife:///app/gridmanager/addgrid/${loginURI.trim()}`;
// Lücke erzeugen
const spacer = document.createElement('div');
spacer.style.width = "20px"; // Breite der Lücke anpassen
const span = document.createElement('span');
span.textContent = gridName.trim();
li.appendChild(btn);
li.appendChild(spacer); // Füge den Abstandshalter ein
li.appendChild(span);
gridList.appendChild(li);
});
}
function filterGrids() {
const input = document.getElementById('searchInput').value.toUpperCase();
document.querySelectorAll('.grid-item').forEach(item => {
item.style.display = item.textContent.toUpperCase().includes(input) ? "" : "none";
});
}
document.addEventListener('DOMContentLoaded', loadGrids);
</script>
</head>
<listbody>
<h1>Grid List</h1>
<div class="search-bar">
<input type="text" id="searchInput" onkeyup="filterGrids()" placeholder="Search for grids...">
</div>
<ul id="gridList" class="grid-list"></ul>
</listbody>
</html>
+118
View File
@@ -0,0 +1,118 @@
<?php
$title = "GridStatus";
include_once 'include/header.php';
// define('BASE_URL', 'http://yourdomain.com');
/*
; Simulator Stats URI
; Aktivieren Sie JSON-Simulatordaten, indem Sie einen URI-Namen festlegen (Grosschreibung-/Kleinschreibung beachten)
Stats_URI = "jsonSimStats"
*/
?>
<main>
<style>
h2 {font-family: <?php echo FONT_FAMILY; ?>;font-size: <?php echo TITLE_FONT_SIZE; ?>;}
/* #statitstics {font-family: <?php echo FONT_FAMILY; ?>;font-size: <?php echo TITLE_FONT_SIZE; ?>;} */
.pacifico-regular {font-family: "Pacifico", serif; font-weight: 400; font-style: normal;}
.material-symbols-outlined {font-variation-settings:'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24 }
</style>
<h2><?php echo SITE_NAME; ?> GridStatus Overview</h2>
<p>All information related to the GridStatus can be found here.</p>
</main>
<?php
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
$result1 = mysqli_query($con, "SELECT COUNT(*) FROM Presence");
list($totalUsers) = mysqli_fetch_row($result1);
$result2 = mysqli_query($con, "SELECT COUNT(*) FROM regions");
list($totalRegions) = mysqli_fetch_row($result2);
$result3 = mysqli_query($con, "SELECT COUNT(*) FROM UserAccounts");
list($totalAccounts) = mysqli_fetch_row($result3);
$result4 = mysqli_query($con, "SELECT COUNT(*) FROM GridUser WHERE Login > (UNIX_TIMESTAMP() - (30*86400))");
list($activeUsers) = mysqli_fetch_row($result4);
$result5 = mysqli_query($con, "SELECT COUNT(*) FROM GridUser");
list($totalGridAccounts) = mysqli_fetch_row($result5);
echo "<div id='statitstics'>";
echo "<b>Nutzer im Grid</font>: " . $totalUsers . "<br>";
echo "Regionen</font>: " . $totalRegions . "<br>";
echo "Aktiv in den letzten 30 Tagen</font>: " . $activeUsers . "<br>";
echo "Inworld Nutzer</font>: " . $totalAccounts . "<br>";
echo "HG Grid Nutzer</font>: " . $totalGridAccounts . "<br>";
?>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="http://www.google.com/jsapi"></script>
<script>
SimFPS = 0;
PhyFPS = 0;
Memory = 0;
RootAg = 0;
ChldAg = 0;
Uptime = "";
Version = "";
var url = BASE_URL + ":9010/jsonSimStats/?callback=?";
setInterval(function() {$.getJSON(url, function(data) {
SimFPS = Math.round(data.SimFPS);
PhyFPS = Math.round(data.PhyFPS);
Memory = Math.round(data.Memory);
ChldAg = data.ChldAg;
RootAg = data.RootAg;
Uptime = data.Uptime;
Version = data.Version;
drawChart();
setTags();
})}, 3000);
google.load("visualization", "1.0", {packages:["gauge"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var cdata = new google.visualization.DataTable();
cdata.addColumn('string', 'Label');
cdata.addColumn('number', 'Value');
cdata.addRows(3);
cdata.setValue(0, 0, 'SimFPS');
cdata.setValue(0, 1, SimFPS);
cdata.setValue(1, 0, 'PhyFPS');
cdata.setValue(1, 1, PhyFPS);
cdata.setValue(2, 0, 'Memory');
cdata.setValue(2, 1, Memory);
var chart = new google.visualization.Gauge(document.getElementById('chart_div'));
var options = {width: 400, height: 120, redFrom: 90, redTo: 100, yellowFrom:75, yellowTo: 90, minorTicks: 5};
chart.draw(cdata, options);
}
function setTags() {
$("#par-uptime").text("Uptime: " + Uptime);
$("#par-ragent").text("Root Agent: " + RootAg);
$("#par-version").text("Version: " + Version);
$("#par-cagent").text("Child Agent: " + ChldAg);
}
</script>
<body>
<br>
= <?php echo SITE_NAME; ?> Development Region =
<table>
<tr>
<td><div id="par-version">Version:</div></td>
<td><div id="par-ragent">Root Agent:</div></td>
</tr>
<tr>
<td><div id="par-uptime">Uptime:</div></td>
<td><div id="par-cagent">Child Agent:</div></td>
</tr>
</table>
<div id="chart_div"></div>
</body>
+43
View File
@@ -0,0 +1,43 @@
<?php
$title = "GridStatusRSS";
include_once 'include/header.php';
// Cache-Dateipfad
$feedcache_path = __DIR__.'/feed_cache.html';
$feedcache_max_age = 1800; // Cache max. 30 Minuten alt
// Prüfen, ob Cache neu geladen werden muss
if (!file_exists($feedcache_path) or filemtime($feedcache_path) < (time() - $feedcache_max_age)) {
$output = '';
foreach ($feed_urls as $feed_url) {
// Feed abrufen
$xml = @simplexml_load_string(file_get_contents($feed_url));
if (!$xml) {
$output .= "<p>Fehler beim Laden des Feeds: <strong>" . htmlspecialchars($feed_url) . "</strong></p>";
continue;
}
$output .= '<h2>' . htmlspecialchars($xml->channel->title) . '</h2>';
$output .= '<p><a href="' . htmlspecialchars($xml->channel->link) . '">Feed öffnen</a></p>';
$output .= '<ul>';
$counter = 0;
foreach ($xml->channel->item as $entry) {
if (++$counter > $max_entries) break;
$date = date('d.m.Y', strtotime($entry->pubDate));
$output .= '<li><a href="'.htmlspecialchars($entry->link).'" title="'.$date.'">'.htmlspecialchars($entry->title).'</a> <small>('.$date.')</small></li>';
}
$output .= '</ul>';
}
echo $output;
//file_put_contents($feedcache_path, $output);
} else {
echo file_get_contents($feedcache_path);
}
?>
<br><br><br><br>
+183
View File
@@ -0,0 +1,183 @@
<?php
$title = "Guide";
include_once "include/config.php";
// Fehlerbehandlung für die JSON-Datei
$json = file_get_contents('include/destinations.json');
if ($json === false) {
die('Fehler beim Laden der JSON-Datei.');
}
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
die('Fehler beim Dekodieren der JSON-Datei.');
}
// Datenbankverbindung mit Fehlerbehandlung
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
die('Fehler bei der Verbindung zur Datenbank: ' . mysqli_connect_error());
}
?>
<html>
<title>Destination Guide</title>
<style>
body { font-family: Arial, sans-serif; background-color: <?= SECONDARY_COLOR ?>; padding: 10px; color: <?= PRIMARY_COLOR ?>; }
h1 { font-size: 16px; text-align: center; color: <?= PRIMARY_COLOR ?>; }
.button-container { text-align: center; margin-bottom: 15px; }
button { padding: 10px; margin: 5px; cursor: pointer; background-color: <?= PRIMARY_COLOR ?>; color: white; border: none; border-radius: 5px; }
.list-container { display: none; justify-content: flex-start; flex-wrap: nowrap; overflow-x: auto; gap: 10px; border-radius: 5px;}
.grid-container { display: none; flex-wrap: wrap; gap: 10px; justify-content: center; border-radius: 5px;}
.region-box { background: <?= HEADER_COLOR ?>; padding: 10px; border-radius: 5px; display: flex; align-items: center; color: <?= PRIMARY_COLOR ?>; }
.region-icon { margin-right: 5px; font-size: 16px; color: <?= PRIMARY_COLOR ?>; }
.grid-item { width: 23%; padding: 10px; border: 1px solid #aaa; background: <?= HEADER_COLOR ?>; text-align: center; border-radius: 5px; color: <?= PRIMARY_COLOR ?>; }
/* .grid-link { display: block; margin-top: 5px; padding: 5px; background: <?= FOOTER_COLOR ?>; color: white; border-radius: 3px; text-decoration: none; } */
.grid-link { display: block; margin-top: 5px; padding: 5px; background: #0066cc; color: white; border-radius: 3px; text-decoration: none; }
.search-bar { width: 23%; padding: 10px; border: 1px solid #aaa; background: #0066cc; color: white; text-align: center; border-radius: 5px; }
.hop-buttons { display: flex; gap: 5px; margin-top: 5px; }
/* .hop-button { padding: 5px; background: <?= FOOTER_COLOR ?>; color: white; border-radius: 3px; text-decoration: none; } */
.hop-button { padding: 5px; background: #004080; color: white; border-radius: 5px; text-decoration: none; }
</style>
<body>
<h1><?php echo SITE_NAME; ?> Destination Guide</h1>
<!-- Auswahl Buttons -->
<div class="button-container">
<button onclick="showJSON()">Regionsliste JSON</button>
<button onclick="showDatabase()">Regionsliste Database</button>
<button onclick="showGridList()">Gridliste CSV</button>
</div>
<!-- ########################## JSON-Regionsliste ######################################## -->
<div id="jsonList" class="guidebody" style="display: <?= (GRIDLIST_VIEW == 'json') ? 'flex' : 'none' ?>; flex-wrap: wrap; gap: 10px; justify-content: flex-start; border-radius: 5px; padding: 10px;">
<?php foreach ($data as $category => $destinations): ?>
<fieldset style='flex: 1; min-width: 250px; max-width: 350px;'>
<legend><?= htmlspecialchars(ucfirst($category)) ?></legend>
<div class='region-container' style='display: flex; flex-wrap: wrap; gap: 10px; border-radius: 5px; padding: 10px;'>
<?php foreach ($destinations as $destination): ?>
<div class="region-box">
<a href="<?= htmlspecialchars($destination['url']) ?>" target="_blank">
<img src="<?= htmlspecialchars($destination['image']) ?>" alt="<?= htmlspecialchars($destination['name']) ?>" width="50" height="50" style="border-radius:5px; margin-right:10px; padding: 10px;">
</a>
<span><?= htmlspecialchars($destination['name']) ?></span>
</div>
<?php endforeach; ?>
</div>
</fieldset>
<?php endforeach; ?>
</div>
<!-- ######################################## Datenbank-Regionsliste ######################################## -->
<!-- todo: Abstand hinzufügen. -->
<div id="databaseList" class="list-container" style="padding: 10px; display: <?= (GRIDLIST_VIEW == 'database') ? 'flex' : 'none' ?>;">
<?php
$sql = "SELECT regionName, serverIP, serverPort FROM regions ORDER BY last_seen DESC LIMIT 10";
$resultregions = mysqli_query($con, $sql);
while ($dsatz = mysqli_fetch_assoc($resultregions)) {
$region = htmlspecialchars($dsatz["regionName"]);
$ip = htmlspecialchars($dsatz["serverIP"]);
$port = htmlspecialchars($dsatz["serverPort"]);
// Link für den "Hop"-Button
$regionslink = "hop://$ip:$port/$region/128/128/23";
echo '<div class="region-box" style="display: flex; flex-direction: column; align-items: flex-start; margin-bottom: 10px; border-radius: 5px; padding: 10px;">';
// Button mit Regionsname
echo "<button style='margin-bottom: 5px;'>$region</button>";
// Button mit "Hop"
echo "<a href='$regionslink' class='hop-button' target='_blank' style='text-align: center;'>Hop $region</a>";
echo '</div>';
}
mysqli_close($con);
?>
</div>
<!-- ##################### Grid Teleport Liste ######################################## -->
<div id="gridList" class="grid-container" style="display: <?= (GRIDLIST_VIEW == 'grid') ? 'flex' : 'none' ?>;">
<div class="search-bar">
<p>Search</p>
<input type="text" id="searchInput" onkeyup="filterGrids()" placeholder="Suche nach Grids...">
</div>
<?php
if (($handle = fopen(GRIDLIST_FILE, "r")) !== false) {
fgetcsv($handle); // Überspringe die Header-Zeile
while (($data = fgetcsv($handle)) !== false) {
$gridName = htmlspecialchars($data[0]);
$loginURI = htmlspecialchars($data[1]);
// Erster Link: Direkter Link zum Grid
$gridlink1 = "secondlife:///app/gridmanager/addgrid/$loginURI";
// Zweiter Link: Link ohne spezifische Aktion
// todo: Fehler bei hop: http:// kann auch https:// sein
$gridlink2 = "hop://http://$loginURI/ ";
echo '<div class="grid-item">';
echo "<span>$gridName</span>";
echo '<div class="hop-buttons">';
echo "<a href='$gridlink1' class='grid-link' target='_blank' style='width: 60%; text-align: center;'>Viewer Grid Eintrag</a>";
echo "<a href='$gridlink2' class='grid-link' target='_blank' style='width: 100%; text-align: center;'>Hop $gridName</a>";
echo '</div>';
echo '</div>';
}
fclose($handle);
}
?>
</div>
<script>
function filterGrids() {
const input = document.getElementById('searchInput').value.toUpperCase();
document.querySelectorAll('.grid-item').forEach(item => {
item.style.display = item.textContent.toUpperCase().includes(input) ? "" : "none";
});
}
function showJSON() {
document.getElementById('jsonList').style.display = 'flex';
document.getElementById('databaseList').style.display = 'none';
document.getElementById('gridList').style.display = 'none';
}
function showDatabase() {
document.getElementById('jsonList').style.display = 'none';
document.getElementById('databaseList').style.display = 'flex';
document.getElementById('gridList').style.display = 'none';
}
function showGridList() {
document.getElementById('jsonList').style.display = 'none';
document.getElementById('databaseList').style.display = 'none';
document.getElementById('gridList').style.display = 'flex';
}
document.addEventListener('DOMContentLoaded', () => {
<?php if (GRIDLIST_VIEW == 'json'): ?>
showJSON();
<?php elseif (GRIDLIST_VIEW == 'database'): ?>
showDatabase();
<?php elseif (GRIDLIST_VIEW == 'grid'): ?>
showGridList();
<?php endif; ?>
});
</script>
</body>
</html>
+110
View File
@@ -0,0 +1,110 @@
<?php
$title = "Help";
include_once 'include/header.php';
// Sprachauswahl (Standard: Deutsch)
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'de';
// Variablen für die Grid-URL
$txt1 = BASE_URL;
$txt2 = GRID_PORT;
?>
<style>
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
color: rgb(31, 31, 31); /* Korrektur: 'color' statt 'Color' */
background-color: rgb(238, 241, 241);
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.language-switcher {
text-align: right;
margin-bottom: 20px;
}
.language-switcher a {
text-decoration: none;
color: #007BFF;
margin: 0 5px;
}
.language-switcher a:hover {
text-decoration: underline;
}
code {
background-color: #f4f4f4;
padding: 2px 5px;
border-radius: 3px;
font-family: monospace;
}
</style>
<main class="container">
<!-- Sprachauswahl -->
<div class="language-switcher">
<a href="?lang=de">Deutsch</a> | <a href="?lang=en">English</a>
</div>
<?php if ($lang == 'de'): ?>
<!-- Deutsche Version -->
<section>
<h1>OpenSim Viewer mit einem Grid verbinden</h1>
<h2>Schritt-für-Schritt Anleitung</h2>
<ol>
<li>Lade einen kompatiblen OpenSim-Viewer herunter (z. B. Firestorm).</li>
<li>Installiere den Viewer auf deinem Computer.</li>
<li>Starte den Viewer und öffne die Einstellungen.</li>
<li>Suche den Bereich <strong>"Grids"</strong> oder <strong>"Grid-Manager"</strong>.</li>
<li>Klicke auf <strong>"Neues Grid hinzufügen"</strong> oder eine ähnliche Option.</li>
<li>Gib die <strong>Login-URL</strong> deines Grids ein (z. B. <code><?php echo $txt1, $txt2; ?>/</code>).</li>
<li>Klicke auf <strong>"Hinzufügen" oder "Speichern"</strong>.</li>
<li>Wähle das Grid aus der Liste und gib deine Anmeldedaten ein.</li>
<li>Klicke auf <strong>"Anmelden"</strong>, um das Grid zu betreten.</li>
</ol>
</section>
<section>
<h2>Tipps</h2>
<ul>
<li>Stelle sicher, dass du die richtige Grid-URL hast.</li>
<li>Falls der Viewer das Grid nicht erkennt, prüfe die Serververbindung.</li>
<li>Nutze die neueste Version deines Viewers für beste Kompatibilität.</li>
</ul>
</section>
<?php else: ?>
<!-- Englische Version -->
<section>
<h1>Connecting an OpenSim Viewer to a Grid</h1>
<h2>Step-by-Step Guide</h2>
<ol>
<li>Download a compatible OpenSim viewer (e.g., Firestorm).</li>
<li>Install the viewer on your computer.</li>
<li>Start the viewer and open the settings.</li>
<li>Look for the <strong>"Grids"</strong> or <strong>"Grid Manager"</strong> section.</li>
<li>Click on <strong>"Add New Grid"</strong> or a similar option.</li>
<li>Enter the <strong>login URL</strong> of your grid (e.g., <code><?php echo $txt1, $txt2; ?>/</code>).</li>
<li>Click <strong>"Add" or "Save"</strong>.</li>
<li>Select the grid from the list and enter your login credentials.</li>
<li>Click <strong>"Login"</strong> to enter the grid.</li>
</ol>
</section>
<section>
<h2>Tips</h2>
<ul>
<li>Make sure you have the correct grid URL.</li>
<li>If the viewer does not recognize the grid, check the server connection.</li>
<li>Use the latest version of your viewer for best compatibility.</li>
</ul>
</section>
<?php endif; ?>
</main>
<?php include_once 'include/footer.php'; ?>
+258
View File
@@ -0,0 +1,258 @@
'mailexpire.com', 'spamtrail.com', 'wwwnew.eu', '007addict.com', '012.net.il', '0451.com', '0815.ru', '10minutemail.com',
'123greetings.com', '12wqqwmeds.com', '143.red-83-49-70.dynamicip.rima-tde.net', '163.com', '163data.com.cn', '168.com',
'168city.com', '169.cc', '188mail.com', '1funplace.com', '1net.gr', '2-mail.com',
'208.red-88-7-51.staticip.rima-tde.net', '212-127-152-19.cable.quicknet.nl', '212.com', '21cn.com',
'238-133-231-201.fibertel.com.ar', '263.net.cn', '2XS.net', '2bsure.com', '2cute4u.co.uk', '2d.com', '2die4.com',
'2friend.com', '2hotforyou.net', '2ndmail.com', '2rd.net', '33edmeds.com', '37.com', '3d-painting.com', '444.net',
'45pharmes.com', '4g546ufgfrh5.org', '4g54asd5.org', '4hismail.com', '4worldmail.com', '50mail.com', '53.com',
'53533b3b.cable.casema.nl', '6210.hu', '70.44.150.107.res-cmts.val.ptd.net', '702mail.co.za',
'73.181.192.61.tokyo.flets.alpha-net.ne.jp', '775rgt.com', '84-232-149-95.rdsnet.ro', '86-122-52-191.rdsnet.ro',
'88cresa.com', '97rock.com', 'ABEDRABBO.COM.NETSOLMAIL.NET', 'ADSL-140-41.myt.mu', 'ADSL-TPLUS-80-55.telecomplus.net',
'COM.NETSOLMAIL.NET', 'COMCAST.NET', 'INBOUND.ABEDRABBO.COM.NETSOLMAIL.NET', 'Inktel.com', 'KX100.NET',
'LearnLink.Emory.Edu', 'MAILCONTROL.com', 'MX01.KONTENT.De', 'Math.Princeton.EDU', 'MyPersonalEmail.com',
'NETSOLMAIL.NET', 'OFSfa-03p5-110.ppp11.odn.ad.jp', 'OFSfa-04p3-188.ppp11.odn.ad.jp', 'SAUSGW01.amd.com', 'SPRIGGS.com',
'Safe-mail.net', 'ShowFans.com', 'SpamMotel.com', 'Supergewinne.de', 'TMP.com', 'VideoMailStudio.com',
'W2a14.w.pppool.de', 'Wappi.com', 'WaveCom.CA', 'a-mx.apm-internet.net', 'a-z-o.ch', 'a2000.nl', 'aaahmail.com',
'aacgroup.co.uk', 'aaronsen.com', 'aaronsw.com', 'ab.cyberhome.ne.jp', 'abacus.ba', 'aball.de', 'abc123.ru', 'abcom.se',
'abedofroses.com', 'abeille-web.com', 'abeisv.specialnotice.info', 'abelcine.com', 'aberton.ru', 'abess.com',
'abestco.com', 'abirnet.co.il', 'abk.dk', 'abkawa.de', 'abm.com.pl', 'abmemory.com', 'abo.ch', 'abodetao.com',
'abody.freeserve.co.uk', 'abramsart.com', 'abril.com.br', 'absolutecomfort.ru', 'absoluttrade.ru', 'absound.ca',
'abu.org.my', 'abysse.net', 'ac-service.com', 'academyhr.com', 'accessdata.com', 'accmail.com', 'accomline.com',
'accopmu.ru', 'acds.es', 'acihouston.com', 'acm.org', 'acmecity.com', 'acornonline.com', 'actasap.com',
'activatormail.com', 'ad.jp', 'adaap.com', 'adamshall.com', 'adexec.com', 'adhost.com', 'adpepper.em.falkag.de',
'adresse.de', 'adsl-598411e4.monradsl.monornet.hu', 'adsl.datanet.hu', 'adsl.proxad.net', 'adsl.tpnet.pl',
'adsl196-28-98-217-196.adsl196-12.iam.net.ma', 'adultmail.tv', 'afpa.fr', 'afreeinternet.com', 'afrobacon.com',
'agency.osha.eu.int', 'ai.net', 'airmail.net', 'airtelbroadband.in', 'al-islam.com', 'alacarta.com', 'alcplan.com',
'alex4all.com', 'alexandria.cc', 'aley.com', 'alfc.com', 'aliancarep.com.br', 'allasianuk.com', 'allesklar.de',
'allin1.com', 'alloymail.com', 'allstarz.org', 'alltel.net', 'almajal-omulibya.com', 'alpha-net.ne.jp',
'alshamil.net.ae', 'altavista.fr', 'altavista.nl', 'altern.org', 'ameritech.net', 'amnestymail.com', 'amuro.net',
'andylau.net', 'another.com', 'ansluten.com', 'antichef.net', 'antronomia.com', 'appriver.com',
'area.city.shiroishi.miyagi.jp', 'ariadne-t.gr', 'aristotle.algonet.se', 'arizona.co.jp', 'armymail.com', 'arrakis.es',
'artesmarciales.com', 'arti.vub.ac.be', 'artlover.com', 'artnet.com.br', 'as9105.com', 'asgard.net.au', 'asheville.com',
'asia.com', 'asianhome.net', 'asianwired.com', 'asics.fr', 'asistencia.org', 'asta-net.com.pl', 'astra.qui.ub.es',
'at1.atns.de', 'atlantech.net', 'atlas.cz', 'atlaswebmail.com', 'atnchile.com', 'att.biz', 'att.net', 'attbi.com',
'audioseek.com', 'auna.net', 'aussiemail.com.au', 'australiamail.com', 'autofever-online.com', 'backstreetboysclub.com',
'badtzmail.com', 'balcke-duerr.de', 'barracuda.callawaygardens.com', 'beaufortweb.org.uk', 'behringer.de',
'bellsouth.net', 'bergelmir.ai.net', 'best-pagerank.de', 'bettahits.biz', 'bezeqint.net', 'bhnet.com.br', 'biering.de',
'bigfoot.com', 'biglabels.de', 'bigping.com', 'bigping.de', 'bikerider.com', 'bilkent.edu.tr', 'billfan.com',
'bio-muesli.info', 'bio-muesli.net', 'bionic.zerberus.de', 'biz.rr.com', 'biz4hits.biz', 'bk.ru', 'bkkmail.com',
'bl7-106-81.dsl.telepac.pt', 'bla-bla.com', 'blackbox.at', 'blackburnmail.com', 'blarg.net', 'blazeblow.net',
'blazemail.com', 'blogopt.com', 'blowsearch.com', 'blue-tomato.at', 'bluetone.cz', 'blueyonder.co.uk', 'bmpd.com',
'bmypc.com', 'boardermail.com', 'boarderzone.com', 'bochnia.pl', 'bodhi.lawlita.com', 'boerse-extra.de', 'bogota.com',
'boh.com', 'boitolet.com', 'bol.net.in', 'bombdiggity.com', 'bonbon.net', 'bonnag.com', 'boom.ru', 'bootbox.net',
'bosnianmail.com', 'brasilia.net', 'brasiltelecom.net.br', 'bravanese.com', 'bredband.com', 'brightideatoys.info',
'britneyclub.com', 'broadcastemail.com', 'brunet.bn', 'bta.net.cn', 'btc-net.bg', 'btcc.org', 'btcentralplus.com',
'btmx1.sun.com', 'btopenworld.com', 'buck.ncia.net', 'buffymail.com', 'bumpymail.com', 'bumpymail.com', 'burgerking.de',
'business.telecomitalia.it', 'buy-cheap-cigarette.info', 'buy-discount-cigarettes.info', 'buzzlemail.com',
'bxemail.com', 'cable.casema.nl', 'cable.ntl.com', 'cable.quicknet.nl', 'caiway.nl', 'cams-wg.com', 'cape.com',
'captain.net', 'car.co.id', 'caramail.com', 'cared45.com', 'caribsurf.com', 'carleton.ca', 'carlstedt.se',
'carnival.com', 'cartsys.com', 'casema.net', 'casema.nl', 'cashette.com', 'cat-22.info', 'cataloniamail.com',
'catholic.org', 'cc.fc.ul.pt', 'cc.hut.fi', 'cc.jyu.fi', 'ccc.gr', 'ccj.ufsc.br', 'ccsg.tau.ac.il', 'ccsi.com',
'cdkomm.central-druck.intra', 'cdsnet.com', 'cel.com', 'celineclub.com', 'centermail*', 'centermail.com',
'centermail.net', 'central-druck.de', 'centurytel.net', 'cern.ch', 'cgey.com', 'cghost.s-a-d.de', 'cgocable.net',
'chalky.com', 'chalo.net', 'charter.com', 'check-inn.com', 'chello.at', 'chello.nl', 'chello.pl', 'china.com',
'china139.com', 'chinabyte.com', 'christian.net', 'ciateq.mx', 'cibertribe.pt', 'cibis.de', 'cic.klte.hu',
'cicely5.cicely.de', 'cif.fr', 'cigma.asso.fr', 'ciklo-centar.hr', 'cimaglobal.com', 'cime.nl', 'cin.nihon-u.ac.jp',
'cinci.rr.com', 'city-of-nottingham.com', 'city2city.com', 'cityline.ru', 'clara.net',
'client-200.121.222.241.speedy.net.pe', 'cliffhanger.com', 'club-internet.fr', 'clubvdo.net', 'clustermail.de',
'cm.vtr.net', 'cmail01.tradeeasyhk.net', 'cnchost.com', 'cnn.com', 'co.kr', 'co.uk', 'cobra-tech.de', 'com.ar',
'com.br', 'com.cn', 'com.ph', 'com.pl', 'com.tr', 'com.ve', 'comcast.net', 'comcastbusiness.net', 'comed45a.com',
'computerbizop.com', 'conk.com', 'connectfree.co.uk', 'cool.ne.jp', 'coolhousing.net', 'coolquality.info',
'cooperate.niftyserve.com', 'copetel.com.ar', 'correo1.com', 'cotas.com.bo', 'cotton-cottage.com', 'cottypediment.com',
'couponpilot.de', 'covad.net', 'cox-internet.com', 'cox.net', 'cpe.netcabo.pt', 'craydon.com', 'craydon.de',
'crewstart.com', 'crm1.numail.co.uk', 'cryohost.net', 'csi.com.do', 'ct-shop.com', 'ctk-gmbh.de', 'ctmiller.net',
'cumbriamail.com', 'cust.in', 'cwaitrew.com', 'cwazy.co.uk', 'cx.airnet.ne.jp', 'cyber.net.pk', 'cyberemailings.com',
'cyberhome.ne.jp', 'cyberservices.nl', 'cynetcity.com', 'd-rex.net', 'damhost.com', 'dannemann.de', 'darkcorner.com',
'darkplace.com', 'dartmail.net', 'datacast.prserv.net', 'datacds.net', 'datanet.hu', 'davidcharles.co.uk',
'dcemail.com', 'dejanews.com', 'delfi.lv', 'deliriumctouch.com', 'destin.com', 'dglnet.com.br', 'dic.blogopt.com',
'dicoll.co.uk', 'didamail.com', 'digiro.net', 'dillard.edu', 'discardmail*', 'discardmail.com', 'discardmail.de',
'disenthroner.com', 'dmailman.com', 'dnat.migtel.ru', 'dnbhq.com', 'dodgeit.com', 'dodgit.com', 'doh75.com',
'dolally.com', 'dolfijn.nl', 'domaindisc.net', 'domatic.net', 'domvista.net', 'donau.de', 'dontsendmespam.de',
'doramail.com', 'dowse.com', 'dr.com', 'dragonballz.net', 'dragonet.es', 'dream-dimensions.de', 'drizzle.com',
'dsabaus.com', 'dsl-w.verizon.net', 'dsl.brasiltelecom.net.br', 'dsl.telepac.pt', 'dsl54025d43.pool.t-online.hu',
'dsl85-98-27413.ttnet.net.tr', 'dsl88-246-479.ttnet.net.tr', 'dtl.co.nz', 'dublin.com', 'dumpmail.de', 'duse.net',
'dyn.centurytel.net', 'dynamic.caiway.nl', 'dynamic.hinet.net', 'dynamic.orange.es', 'dynamic.sbb.co.yu',
'dynamicip.rima-tde.net', 'e178227164.adsl.alicedsl.de', 'earthling.net', 'east.net.cn', 'east.verizon.net',
'eastlink.ca', 'eastside.com', 'easynet.net', 'easypeasy.com', 'ebs.ulead.com', 'ec-messenger.com', 'echostation.com',
'ecocity.com', 'ecua.net.ec', 'edu.tr', 'educationdirect.com', 'egn.de', 'ehmail.com', 'ei.tum.de', 'eintagsmail.de',
'el-nacional.com', 'elbowraffle.net', 'email.accmail.com', 'emaildienst.de', 'emailias.com', 'emails.ru',
'emailstar.net', 'emailstuff.com', 'emailsystems.com', 'emailto.de', 'emanator.demon.co.uk', 'emancipacion.org',
'emar.de', 'ematic.com', 'embassysil.com', 'emocion.net.ar', 'emv9.com', 'enter.valdemarsvik.se', 'epicinnovations.com',
'eppl.us', 'estnet.bg', 'etb.net.co', 'eudoramail.com', 'euireland.ie', 'eule-idt.de', 'euro.net', 'europe.adobe.com',
'ev24.net', 'ewmd41.com', 'exclusive.pl', 'exo.com', 'ezrs.com', 'f6.dion.ne.jp', 'facilitynetwork.net', 'facom.fr',
'fadmail.com', 'fastacura.com', 'fastchevy.com', 'fastchrysler.com', 'fastemail.us', 'fastermail.com',
'fastkawasaki.com', 'fastmail.ca', 'fastmail.fm', 'fastmail.gr', 'fastmazda.com', 'fastmitsubishi.com',
'fastnissan.com', 'fastres.net', 'fastsubaru.com', 'fastsuzuki.com', 'fasttoyota.com', 'fastwebnet.it',
'fastyamaha.com', 'fatal.ru', 'fatty.boom.ru', 'fbx.proxad.net', 'female.ru', 'femenino.com', 'fenwick.com', 'fepg.net',
'ff8.zzn.com', 'ffc.co.jp', 'fffpharems.com', 'fiberia.com', 'fibertel.com.ar', 'fiestabrava.com', 'finklfan.com',
'firemail.de', 'firewall.biconcaveautomate.com', 'firstgate-newsletter.de', 'fishhoo.com', 'flashmail.com',
'flets.alpha-net.ne.jp', 'flix.de', 'fon.bg.ac.yu', 'forenhoster.com', 'foryou74.com', 'foxinternet.com',
'fr.clara.net', 'fr.logansvideos.com', 'free-online.net', 'free-spy.net', 'free.fr.logansvideos.com', 'freecontent.cc',
'freemail.besoft.org', 'freemail.gr', 'freemail.it', 'freemail.ne.jp', 'freemail.nl', 'freenation.net',
'freeproblem.com', 'freeserve.co.uk', 'freeserve.com', 'freetweak.com', 'front14.org', 'futurequest.net', 'gala.net',
'gamewood.net', 'gamopi.pleonaste.com', 'gamport.com', 'gaoland.net', 'garbagemail.com', 'gate.net',
'gateway.abedofroses.com', 'gateway.insightbb.com', 'gatewaybank.com', 'gawab.com', 'gaweb.com', 'gc.edu', 'gedris.org',
'gee-wiz.com', 'geekmail.com', 'germanfriendfinder.com', 'gerts.net', 'gestorialallana.com', 'gestur.atnchile.com',
'getscrews.com', 'gewhiz1.com', 'gewinnspiele.com', 'gfk.se', 'gfllp.com', 'ghosttexter.de',
'gifts-of-distinction.co.uk', 'ginko.de', 'giorgioimages.com.au', 'gjr.paknet.com.pk',
'glaswegian.sprinklecomponentry.com', 'glay.org', 'glencoeschools.org', 'glenmanning.com', 'globalobligations.com',
'globalsources.com', 'globetrotter.net', 'globoxchange.com', 'gms.net', 'go-west.com', 'go4bowling.com', 'goaachen.de',
'gogogolf.net', 'gohip.com', 'golfilla.info', 'goodsolitaire.com', 'gorillaswithdirtyarmpits.com', 'gothnation.com',
'gouv-exil.org', 'graffiti.net', 'grafxhousenetwork.net', 'graphtablet.com', 'grat-host.in', 'gravity.net.au',
'grechys.com', 'greenie.muc.de', 'gruis.hk', 'gt2004.org', 'gulfislands.com', 'gunmen.lestercur.com', 'gunsnet.net',
'gurlmail.com', 'gymlaufen.ch', 'haburi.com', 'halfmortgage.com', 'halftomorrow.com', 'hantz.com', 'happyhangover.com',
'hardcorexxxmag.com', 'hawaii.res.rr.com', 'hci.net', 'hediard.fr', 'heinrich-it-service.de', 'helicon.net',
'hellokitty.com', 'helpdesk.nl', 'hepaticae.com', 'hermes.eolas-services.com', 'hiit.fi', 'hinet.net', 'hismail.cc',
'hispeed.ch', 'hkem.com', 'hkepost.com', 'hkid.com', 'hobnaildas.com', 'hoffman.cc.sophia.ac.jp', 'holzach.biz',
'home.nl', 'home.ro', 'homer.cyberwebhosting.net', 'host233-249-dynamic.9-87-r.retail.telecomitalia.it', 'hot.ee',
'hotpop.com', 'houston.res.rr.com', 'huhmail.com', 'hurra.de', 'hurting.com', 'hush.com', 'hushmail.com',
'hutchcity.com', 'hvm.macromedia.com', 'i-box-letter.de', 'i-love-cats.com', 'iam.net.ma', 'icdc.com',
'idealyze.com.br', 'ifg.com', 'igd.fhg.de', 'iinet.com', 'ikp.atm.com.pl', 'il.comcast.net', 'illusionmovies.com',
'imagelink.com.br', 'imails.info', 'iname.com', 'inbox.com', 'india.com', 'ineltec.ch', 'inet-shops.ru', 'inetekk.com',
'infoapex.com', 'infomail.papierunion.de', 'infowest.com', 'injection.dk', 'inmail.sk', 'innercite.com',
'inonesearch.com', 'insidebaltimore.net', 'insightbb.com', 'instuttgart.de', 'intelnett.com', 'inter.net.il',
'interia.pl', 'internal.morris.com', 'iobox.de', 'iof.fhg.de', 'iol.cz', 'iop.org', 'ip.fastwebnet.it', 'ipeg.com',
'iron2.cyberhome.ne.jp', 'isleuthmail.com', 'ispd.de', 'ist.co.za', 'itee.uq.edu.au', 'itn.is', 'itronic.cc',
'itwol.bhp.com.au', 'iux01.insel.ch', 'ivillage.com', 'izbb.com', 'jaeggi.ch', 'japan.co.jp', 'javascript.org',
'jaydemail.com', 'jazztel.es', 'jccomp.com', 'jesi.nettuno.it', 'jetable.com', 'jetable.net', 'jetable.org',
'jippii.co.uk', 'johnsmith.co.uk', 'joinme.com', 'journalismfan.com', 'joymail.com', 'jpopmail.com', 'juchu.de',
'jumpy.it', 'jungbecker.de', 'juno.com', 'justopt.info', 'kabachan.com', 'kabel1-vip.de', 'kajima.com', 'kali.com.cn',
'kansascity.com', 'karachioye.com', 'kasmail.com', 'kavitha.com', 'kcdata.com', 'kefir.000buy.com', 'kellychen.com',
'keromail.com', 'ket.de', 'kichimail.com', 'kittymail.com', 'kki.net.pl', 'klassmaster.com', 'klinik-rkz.de',
'korea-dpr.com', 'koreamail.co.kr', 'kponet.fi', 'kschoice.net', 'kulturbetrieb.info', 'landings.com', 'lanetro.com',
'laposte.net', 'larochelle-innovation.com', 'latinmail.com', 'lawyer.com', 'learnmoreonline.net', 'leere-drohungen.de',
'legoland.de', 'lei3.cable.ntl.com', 'leo.org', 'leonlai.net', 'lestercur.com', 'lexpress.net', 'libero.iol.it',
'liebe.de', 'linex.com', 'linuxmail.org', 'list.ru', 'literaturelover.com', 'livedoor.com', 'liwest.at', 'ln.edu.hk',
'lnwhij.woulditbe.com', 'logansvideos.com', 'lookingtostayoutoflovetrouble.com', 'looksmart.co.uk', 'loveable.com',
'loversearching.com', 'lsc.net.tw', 'lukoil.ru', 'lycos.co.uk', 'lycos.com', 'lycosmail.com', 'm-kg241p.ocn.ne.jp',
'm-s-n.net', 'ma.kcom.ne.jp', 'mac-email.com', 'madcrazy.com', 'madeincanada.com', 'mail-in.freeserve.com',
'mail-relay.handy.de', 'mail.4fts.com', 'mail.aacgroup.co.uk', 'mail.aas.com.kw', 'mail.abacus.ba', 'mail.abgrp.ru',
'mail.adition.net', 'mail.adulthosting.com', 'mail.airbridge.net', 'mail.alfc.com', 'mail.bulgaria.com', 'mail.com',
'mail.com.fr', 'mail.csuchico.edu', 'mail.cwverlag.de', 'mail.dangerzone.org', 'mail.fishhoo.com', 'mail.gr',
'mail.htl22.at', 'mail.interq.or.jp', 'mail.kitty.cc', 'mail.kolej.mff.cuni.cz', 'mail.ru', 'mail.saabnet.com',
'mail.usa.com', 'mail.zp.ua', 'mail15.com', 'mail2.pvt.net', 'mail2Alicia.com', 'mail2Amanda.com', 'mail2Bernard.com',
'mail2Clark.com', 'mail2Dale.com', 'mail2Darlene.com', 'mail2Erin.com', 'mail2Eva.com', 'mail2Fred.com',
'mail2Howard.com', 'mail2Josh.com', 'mail2Judy.com', 'mail2Julian.com', 'mail2Kristin.com', 'mail2Lance.com',
'mail2Laurie.com', 'mail2Marries.com', 'mail2Rachel.com', 'mail2Ricky.com', 'mail2Riley.com', 'mail2Stephanie.com',
'mail2Tim.com', 'mail2Tony.com', 'mail2go.com', 'mail2world.com', 'mail4u.nl', 'mailandnews.com', 'mailasia.com',
'mailcity.com', 'mailenvelopes.com', 'mailer-service.de', 'mailexchanger.universia.es', 'mailexcite.com',
'mailexpire.com', 'mailin8r.com', 'mailinator.com', 'mailinator.net', 'mailinator2.com', 'mailout.inetekk.com',
'mailout1.inetekk.com', 'mailout2.inetekk.com', 'mailout3.inetekk.com', 'mailout4.inetekk.com', 'mailout5.inetekk.com',
'mailoye.com', 'mailstart.com', 'maktoob.com', 'mandic.com.br', 'manfinancial.com', 'manus-manum-lavat.info',
'marchmail.com', 'marijuana.com', 'marsmail.de', 'marsmail.eu', 'masterhost.ru', 'mauimail.com', 'maxonline.com.sg',
'maxthon.com', 'mbx.cc', 'mchsi.com', 'mci.com', 'mcmac.com', 'mdnet.com.br', 'mecha.ne.jp', 'medic.net.au',
'medicalmbn.com', 'medicinemail.com', 'medienkultur-stuttgart.de', 'medsxs4.com', 'megaboymail.com', 'meishi.co.jp',
'melin.nu', 'mercaturejoy.com', 'meri.uwasa.fi', 'merlin.net.au', 'messagebeamer.de', 'messagizer.de',
'messe-crossmedia.de', 'metaling.si', 'metorex.fi', 'mexxxico.com', 'mhd.de', 'microce.de', 'micromail.com',
'micromail.com.au', 'micromail.ie', 'mid-heidelberg.de', 'midgard.ai.net', 'mighty.co.za', 'migtel.ru',
'millennianet.com', 'millenniumbuggered.com', 'millionengewinn.net', 'mindspring.com', 'minedu.fi', 'mira.altern.org',
'miranda.zianet.com', 'misco.fagms.de', 'misery.net', 'mitgliedersupport.de', 'ml1.net', 'mm.pl', 'mma.com.br',
'modernart.ie', 'modesta.pl', 'modic.cz', 'modomail.com', 'modusconsult.de', 'moini.de', 'moj.go.kr', 'moncourrier.com',
'monornet.hu', 'monradsl.monornet.hu', 'moo321.com', 'moonwalk.se', 'moose-mail.com', 'morefdumplings.com',
'movemail.com', 'movilnet.com.ve', 'mrde45r.com', 'mt2009.com', 'mtu-net.ru', 'multimania.fr', 'mummys-boy.com',
'musclemail.com', 'mwb.biglobe.ne.jp', 'mx.futurequest.net', 'mx.lukoil.ru', 'mx0.wwwnew.eu', 'mx1.fr.clara.net',
'mx1.masterhost.ru', 'mx1.rdsnet.ro', 'mx2.fr.clara.net', 'mx4.mts.net', 'mx5.aball.de', 'mx5.fl.megamailservers.com',
'mxfep01.bredband.com', 'mxzilla6.xs4all.nl', 'my-yep.com', 'myfastmail.com', 'myownemail.com', 'myriadrecords.com',
'mysg.8m.com', 'myt.mu', 'mytoys-mail.de', 'mytrashmail.com', 'myx.net', 'nana.co.il', 'nastyservice.info',
'naukanet.ru', 'ncfcomm.com', 'ne.jp', 'nebenjob.de', 'nervmich.net', 'nervtmich.net', 'net-search.org', 'net.ae',
'net.au', 'net.co', 'net.il', 'net.in', 'net.ma', 'net.my', 'net.pe', 'net.pl', 'net.tr', 'net.tw', 'net24.it',
'netbank.com.br', 'netcabo.pt', 'netcityhk.com', 'netlane.com', 'netscape.net', 'nettv4u.de', 'netvision.net.il',
'netvista.net', 'netzidiot.de', 'nevada.co.jp', 'newhorizons.ac.cr', 'newmail.net', 'newprosdirect.com', 'news.com',
'news.dannemann.de', 'news247.de', 'newsflash.de', 'newsletter.conrad.de', 'newsletter.otto.de', 'newsletter.penton.de',
'newsubdomain.com', 'nicholastse.net', 'nicole.org', 'niftyserve.com', 'nockmedia.de', 'nomail2me.com',
'nonstopconsulting.de', 'nospammail.net', 'nostra.by', 'ns1.on2web.dk', 'ntep.nec.co.jp', 'ntl.com', 'nts.ru',
'nttc.org', 'numail.co.uk', 'numericable.fr', 'nurfuerspam.de', 'nv.charter.com', 'nyc.rr.com',
'nycmny.east.verizon.net', 'nycny.net', 'o2.pl', 'odn.ad.jp', 'oico.com', 'oldmx1.init7.net', 'oleane.net',
'ols.aaronsen.com', 'olympus.net', 'omni-host.com', 'on-luebeck.de', 'onebox.com', 'onetwomax.de', 'oni.pt',
'online.ee', 'online.fr', 'online.no', 'online.sh.cn', 'ono.com', 'ono.es', 'onocable.ono.com', 'onthenet.com.au',
'openface.ca', 'operamail.com', 'optician.com', 'optinet.de', 'oracle-consultant.co.uk', 'orange.es', 'orcon.net.nz',
'org.my', 'oricom.ca', 'osi.pl', 'osn.de', 'otagochamber.co.nz', 'otakumail.com', 'otava.fi',
'ottawakiosk.webminders.com', 'out.returnpath.net', 'outblaze.com', 'outgun.com', 'ozbytes.net.au', 'pacbell.net',
'pajek.net', 'pamho.net', 'paris.com', 'parlex.com', 'passiongas.com', 'pathlengths.info', 'patra.net',
'paycenter.com.cn', 'pbadmail.com', 'pearl-online.de', 'peoplemail.com.cn', 'perenter.com', 'perlen.dk',
'perthmail.com', 'phantom.org', 'phentermine-site.5u.com', 'phentermineorder.boom.ru', 'phreaker.net', 'pi.se',
'pinoymail.com', 'planet49.com', 'plastico.ro', 'playingcupid.com', 'pldt.net', 'plenio.de', 'pleonaste.com',
'pmktg-online.com', 'pnb.com.ph', 'poker777.boom.ru', 'policeds.com', 'polyonomy.com', 'pookmail.com',
'pool.t-online.hu', 'pool8249.interbusiness.it', 'pop06.odn.ne.jp', 'porno.wildrhino.com', 'portal2.com',
'portcharles.net', 'post.com', 'power.net', 'ppp11.odn.ad.jp', 'pppoe.mtu-net.ru', 'priest.com',
'printec-distribution.de', 'privacy.net', 'proconnect-mail.com', 'prod-infinitum.com.mx', 'prodigy.net.mx',
'progressmail.net', 'pronet.be', 'propagation.net', 'prout.de', 'proxad.net', 'prtc.net', 'psicorps.com', 'psinet.be',
'psmtp.com', 'ptd.net', 'public1.ptt.js.cn', 'punkass.com', 'purinmail.com', 'put2.net', 'qldsugar.com',
'qseuzfv55a.adsl.datanet.hu', 'quality-only.info', 'qualityandsweet.info', 'quicknet.nl', 'quickslick.com',
'quisalot.biz', 'qwas34d5.com', 'qwest.net', 'r-a-v-e.com', 'rad-dresden.de', 'rainbow.cc',
'range81-158.btcentralplus.com', 'rb21ex.com', 'rbnet.com', 'rdominicana.com', 'rdsnet.ro', 'recode.me',
'recovermyfiles.com', 'recycler.com', 'red-83-49-70.dynamicip.rima-tde.net', 'red-88-7-51.staticip.rima-tde.net',
'red.bezeqint.net', 'rediffmail.com', 'refusalabsentminded.com', 'registeredsite.com', 'relay.intercom.es',
'relay1.esined.net', 'res-cmts.val.ptd.net', 'res.rr.com', 'rescue-europe.com', 'retail.telecomitalia.it',
'retsat1.com.pl', 'rezrez.rsc03.com', 'rfaust.de', 'rich.east.verizon.net', 'rima-tde.net', 'risquemail.com',
'rock.com', 'rocketmail.com', 'rome.com', 'rootsrock.biz', 'rotario.com', 'rotld.ro', 'rr.com', 'russiangirlwant.com',
'rzs02.init.de', 's-web.de', 'sacbeemail.com', 'safersurf.*', 'sandelf.de', 'sanfranmail.com', 'sapo.pt',
'saturnperformance.com', 'sbcmail1.prodigy.net', 'sbcmail2.prodigy.net', 'sbcmail3.prodigy.net', 'sbcmail4.prodigy.net',
'sbcmail5.prodigy.net', 'sbcmail6.prodigy.net', 'sbcmail7.prodigy.net', 'sbcmail8.prodigy.net', 'sbcmail9.prodigy.net',
'schnaeppchenjagd.de', 'schwabe-braun.de', 'scotiacapital.com', 'secretmotive.com', 'secure-mail.cn',
'secure.dot-names.com', 'secureserver.net', 'sedo.de', 'seed.net.tw', 'senseless-entertainment.com', 'sent.at',
'server.intermediary.com', 'server420.dnslive.net', 'server73.appriver.com', 'sesmail.com', 'sewon-teletech.co.kr',
'sgn3.sgn.com', 'shawcable.net', 'shopbeachcity.com', 'sicup.de', 'sierranet.net', 'sinewave.com', 'single-match.info',
'sitefoundry.net', 'sitek.net', 'sitespider.co.uk', 'siutao.com', 'skating.net', 'skrzynka.pl', 'slappajack.com',
'slb.de', 'sleekhost.com', 'sloncentral.info', 'smartmedia.co.uk', 'smithhanley.com', 'smtp.oleane.net',
'smtp.prodigy.net.mx', 'smtp.secureserver.net', 'smtp1.lix.aon.at', 'smtp1.rslcom.fi', 'snail-mail.net',
'sneakemail.com', 'snet.net', 'sofort-mail.de', 'sofortmail.de', 'softhome.net', 'sogetthis.com', 'solcon.nl',
'solicit.cottypediment.com', 'sonet.sp.ru', 'soon.com', 'soyou.com', 'spacetolet.com', 'spam.la', 'spambob.com',
'spambob.net', 'spambob.org', 'spambog.com', 'spambog.de', 'spambog.ru', 'spambot.com', 'spambox.info', 'spambox.us',
'spamcorptastic.com', 'spamex.com', 'spamgourmet.com', 'spamherelots.com', 'spamhole.com', 'spaminator.de',
'spammotel.com', 'spamtrail.com', 'spankthedonkey.com', 'sparfieber.de', 'spb.ru', 'spbnit.ru', 'speedy.com.ar',
'speedy.net.pe', 'spire.com', 'spl.at', 'sprachzentrum.de', 'spray.it', 'spray.net', 'sprinklecomponentry.com',
'ssl.fujitsu.com', 'ssole1.com', 'ssole3.com', 'stagcreek.ca', 'stage-n-light.de', 'stait.freeserve.co.uk',
'stalco.co.ae', 'stams.strath.ac.uk', 'standesbeamte.de', 'stangroome.freeserve.co.uk', 'staple-online.co.uk',
'star.teuto.de', 'starcoffee.de', 'stardust-lyrics.de', 'starfury77.club24.co.uk', 'stargard.mm.pl', 'starline.ee',
'starmedia.com', 'start.com.au', 'start.no', 'staticip.rima-tde.net', 'stilap.hepaticae.com', 'stonemultimedia.com',
'sun.com', 'sunsgame.com', 'superdating.biz', 'surfer.at', 'surfy.net', 'swu.dk', 'swva.net', 'sysob.de', 't-online.hu',
'takas.lt', 'talkcity.com', 'tampabay.rr.com', 'tampascene.com', 'teaminform.com', 'techie.com', 'technikdirekt.de',
'tedata.net', 'teewars.org', 'tele.dk', 'telecomitalia.it', 'telecomplus.net', 'telenor.co.uk', 'telepac.pt',
'telesp.net.br', 'telkom.net', 'telkomadsl.co.za', 'telstra.com', 'telus.net', 'temet-nosce.info', 'templetae.com',
'temporarily.de', 'temporaryinbox.com', 'tempus-fugit.info', 'termquotes.prserv.net', 'terra.com', 'terra.com.gt',
'terra.com.sv', 'terra.es', 'terra.net.lb', 'test.com', 'test.de', 'thatsthegame.com', 'the-lair.com',
'the-village.co.uk', 'thebrewer.com', 'thecigarettes.info', 'thedepot.com', 'thedoghousemail.com', 'thefishfinder.com',
'themail.co.uk', 'thewannadies.co.uk', 'thewildmild.de', 'thisdomainl.com', 'thisisnotmyrealemail.com', 'thy.com',
'ties.itu.ch', 'tiscali.co.uk', 'tiscali.fr', 'tiscali.it', 'tm.net.my', 'tnp.pl', 'tokorea.com.cn',
'tokyo.flets.alpha-net.ne.jp', 'tom.com', 'toosexyforyou.com', 'topaz.kiev.ua', 'toursdesport.com', 'toys4bigboys.net',
'tpnet.pl', 'trademailer.de', 'trash-mail.com', 'trash-mail.de', 'trash-mail.net', 'trashdevil.com', 'trashdevil.de',
'trashmail.com', 'trashmail.de', 'trashmail.net', 'trashmail.org', 'trashymail.com', 'trinion1.datenloch.de',
'trionline.de', 'truthmail.com', 'ttnet.net.tr', 'tv1.de', 'tv8.se', 'tvalliance.co.uk', 'tvcheck.se', 'tvnet.hu',
'tvnet.lt', 'tvpress.channel4.ru', 'tvs.no', 'tvscheessel.de', 'tvtel.pt', 'twtelecom.net', 'tx.res.rr.com',
'u-net.com', 'uark.edu', 'ublaze.com', 'uk111.com', 'uk2.net', 'uk420.com', 'ulb.ac.be', 'ultrapostman.com',
'unete.com', 'unicum.de', 'uniserve.ca', 'universia.es', 'upc-d.chello.nl', 'usa.com', 'usa.net', 'usarabia.com',
'usclargo.com', 'user.auna.net', 'user.veloxzone.com.br', 'usertools.net', 'uswestmail.net', 'uunet.uu.net',
'uyi78h.com', 'uytgrt.com', 'uzpi.cz', 'val.ptd.net', 'valuehost.ru', 'veloxzone.com.br', 'veretekk.com', 'verizon.com',
'verizon.net', 'vested99.com', 'veyr4zw.com', 'vfemail.net', 'videotron.ca', 'vilaweb.com', 'virtua.com.br',
'virtual.finland.fi', 'virus112.com', 'vistaprint.rsc01.com', 'visto.com', 'vivax.com.br', 'vmx40.multikabel.net',
'vntc.ru', 'vrflow.oulu.fi', 'vsnl.net.in', 'vtr.net', 'vtt.fi', 'wakwak.ne.jp', 'wanaboo.com', 'wanadoo.co.uk',
'wanadoo.fr', 'wanadoo.nl', 'waw.pl', 'wazup.com', 'wcenviro.com', 'we4z3.com', 'web-mail-service.de', 'webfun.tv',
'webmail.co.za', 'webmail.net.nz', 'webpool.de', 'wegwerfadresse.de', 'wels.net', 'wemedsc.com', 'westham-fan.com',
'wewonthewar.com', 'whatever.com', 'wideopenwest.com', 'wildmail.com', 'willhackforfood.biz', 'wisconsin.cern.ch',
'woerth.de', 'world4fun.ch', 'worldonline.de', 'wowzers.net', 'wp.pl', 'wprost.pl', 'wuerzburg.de', 'www.bundestag.de',
'www.freewebs.com', 'www.hot.ee', 'www1.bonusoptinlist.com', 'www1.cornbreadparty.com', 'www1.dirtydawgmailer.com',
'www1.getpornmailer.com', 'www1.qutetown.com', 'www1.readoptinmail.com', 'www1.superoptinmail.com',
'www1.wistlework.com', 'www1.xxxoptinmail.com', 'www2.cornbreadparty.com', 'www2.doubleoptinxxx.com',
'www2.funnymondays.com', 'www2.goodxxxmail.com', 'www2.optinpimps.com', 'www2.overyounow.com', 'www2.perfectoptin.com',
'www2.pimpoptinmailer.com', 'www2.solidemailservers.com', 'www2.topleveloptin.com', 'www2.youoptedin.com',
'www3.bobblebuster.com', 'www3.confirmedoptin.com', 'www3.crazycrowns.com', 'www3.freshmailers.com',
'www3.goldenoptin.com', 'www3.goodxxxmail.com', 'www3.optedinmailer.com', 'www3.pornoptin.com',
'www3.primetimemailer.com', 'www3.sandwichmonkey.com', 'www3.stationarybands.com', 'www3.topleveloptin.com',
'www3.wildjuicer.com', 'www3.youoptedin.com', 'www4.bobblebuster.com', 'www4.dearestkindly.com',
'www4.dirtydawgmailer.com', 'www4.freshoptinmail.com', 'www4.hornymailers.com', 'www4.platinumpornmailer.com',
'www4.primetimemailer.com', 'www4.youoptedin.com', 'www5.adultmarketinggroup.com', 'www5.dearestkindly.com',
'www5.dirtydawgmailer.com', 'www5.freshoptinmails.com', 'www5.marketingoptin.com', 'www5.theonlyoptinlist.com',
'www5.xxxoptinmailer.com', 'www6.freshoptinmail.com', 'www6.jerkydrive.com', 'www6.perfectoptin.com',
'www6.pimpoptinmailer.com', 'www6.truepimpmarketing.com', 'www7.bargainoptin.com', 'www7.freshoptinmails.com',
'www7.getoptedin.com', 'www7.marketingoptin.com', 'www7.pickuppieces.com', 'www7.premiummailsystems.com',
'www7.qutetown.com', 'www7.truepimpmarketing.com', 'www7.xxxmailers.com', 'www8.bargainoptin.com',
'www8.confirmedoptin.com', 'www8.cornbreadparty.com', 'www8.foolspleasure.com', 'www8.freshoptinmail.com',
'www8.optedinmailer.com', 'www8.readoptinmail.com', 'www8.xxxmailers.com', 'www8.xxxoptinmailer.com',
'www9.awesomexxxmailer.com', 'www9.doubleoptinxxx.com', 'www9.friendlycluster.com', 'www9.pickuppieces.com',
'www9.pureoptins.com', 'www9.sandwichmonkey.com', 'www9.sexoptedin.com', 'www9.stationarybands.com',
'www9.yourmailservices.com', 'wwwplanet.net', 'wx88.net', 'x4u2.desy.de', 'xcelco.on.ca', 'xmr3.com', 'xoom.com',
'xp-hosting.com', 'xpost.net', 'yandex.ru', 'yapost.com', 'yebox.com', 'yehey.com', 'yemenmail.com', 'yes.com',
'ymail.ru', 'yourfrontdoor.com', 'yourmail.com.au', 'yyhmail.com', 'zeebede.com', 'zhongkang.com.cn', 'zipmail.com.br',
'zipolite.com', 'zipzaps.de', 'zmail.ru', 'zooloose.ch', 'zoznam.sk', 'zrekjc.icangonow.com', 'zworg.com',
'zybermail.com', 'zzn.com',
+235
View File
@@ -0,0 +1,235 @@
<?php
//! Private Konfiguration
// MySQL Verbindungsdaten
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'your_username');
define('DB_PASSWORD', 'your_password');
define('DB_NAME', 'your_database');
define('DB_ASSET_NAME', 'your_database');
// RemoteAdmin
define('REMOTEADMIN_URL', 'localhost');
define('REMOTEADMIN_PORT', 8002);
define('REMOTEADMIN_HTTPAUTHUSERNAME', 'opensim');
define('REMOTEADMIN_HTTPAUTHPASSWORD', 'opensim123');
// Seitenadressen
define('BASE_URL', 'http://yourdomain.com');
define('SITE_NAME', 'Dein Grid Name');
// Konfigurieren sie ihre Robust.ini wie folgt:
//
// MapTileURL = "${Const|BaseURL}:${Const|PublicPort}/oswebinterface/maptile.php";
// SearchURL = "${Const|BaseURL}:${Const|PublicPort}/oswebinterface/searchservice.php";
// DestinationGuide = "${Const|BaseURL}/oswebinterface/guide.php"
// AvatarPicker = "${Const|BaseURL}/oswebinterface/avatarpicker.php"
// GridSearch = "${Const|BaseURL}/oswebinterface/gridsearch.php";
// MessageURI = "${Const|BaseURL}/oswebinterface/messages.php";
// welcome = ${Const|BaseURL}/oswebinterface/welcomesplashpage.php
// economy = ${Const|BaseURL}:8008/
// about = ${Const|BaseURL}/oswebinterface/aboutinformation.php
// register = ${Const|BaseURL}/oswebinterface/createavatar.php
// help = ${Const|BaseURL}/oswebinterface/help.php
// password = ${Const|BaseURL}/oswebinterface/passwordreset.php
// partner = ${Const|BaseURL}/oswebinterface/partner.php
// GridStatus = ${Const|BaseURL}:${Const|PublicPort}/oswebinterface/gridstatus.php
// GridStatusRSS = ${Const|BaseURL}:${Const|PublicPort}/oswebinterface/gridstatusrss.php
//! Allgemeine Konfiguration
// Konfigurationsoptionen Standart Template:
// "headerBlanc.php", "headerST.php", "headerW3.php", "headerBT5.php", "headerFoundation.php", "headerMaterialize.php", "headerTailwind.php", "headerPrimer.php", "headerTachyons.php", "headerSpectre.php", "headerTent.php"
define('HEADER_FILE', 'headerBlanc.php'); // Ändere diesen Wert, um die verschienen Template Header Datei zu laden.
// Konfigurationsoption für den Banker
define('BANKER_UUID', '00000000-0000-0000-0000-000000000000');
// Verifizierungsfunktionen
define('VERIFICATION_METHOD', 'email'); // 'email' oder 'uuid'
// Asset Bilder
define('ASSETPFAD', 'cache/');
define('ASSET_FEHLT', ASSETPFAD . '00000000-0000-0000-0000-000000000002');
define('GRID_PORT', ':8002');
define('GRID_ASSETS', ':8003/assets/');
define('GRID_ASSETS_SERVER', BASE_URL . 'GRID_ASSETS');
// Guide
define('GRIDLIST_FILE', 'include/gridlist.csv');
define('GRIDLIST_VIEW', 'json'); // 'json', 'database' oder 'grid'
// Tagesmeldungen
define('SHOW_DAILY_UPDATE', true); // Ein- oder ausschalten
define('DAILY_UPDATE_TYPE', 'rss'); // 'text' oder 'rss'
define('DAILYTEXT', 'Dies ist eine aus der config.php konfigurierte tagesaktuelle Einblendung.'); // Tagesaktueller Text
//define('RSS_FEED_URL', 'https://www.hypergridbusiness.com/feed'); // URL des RSS-Feeds Beispiel:Hypergrid Business.
//define('RSS_FEED_URL', 'http://opensimulator.org/viewgit/?a=rss-log&p=opensim'); // URL des RSS-Feeds Beispiel:OpenSimulator.org.
define('RSS_FEED_URL', BASE_URL . '/oswebinterface/include/rss-feed.php');
define('FEED_CACHE_PATH', __DIR__.'/feed_cache.html'); // Cache-Dateipfad
define('FEED_CACHE_MAX_AGE', 3600); // Cache max. 60 Minuten alt
define('CALENDAR_TITLE', 'Event Calendar');
// Media
//define('MEDIA_SERVER', 'http://localhost:8500/stream');
define('MEDIA_SERVER', 'http://schwarze-welle.de:7500/stream');
//define('MEDIA_SERVER_STATUS', 'http://localhost:8500/status-json.xsl');
define('MEDIA_SERVER_STATUS', 'http://schwarze-welle.de:7500/');
// Passwörter (unbedingt austauschen!)
// Für das austauschen der Passwöter könnt ihr den paswd_generator.php benutzen den ihr im Verszeichnis /include findet.
$registration_passwords_register = ["wTPcHHeJtWdq7TgO", "gSIYKo2GwJdbG8OF", "2BhmSCM4hoFrOvxF", "3cy4JmMzvlSU1A9U", "xee1dobnAQw68l2h"];
$registration_passwords_reset = ["2p1hyc7SB66jfKQ1", "LxCqG48wwnay5MfO", "1CbEcKTifZ6h9OlK", "SoS5POHZOWHxtm4u", "v8hHP9NH3aOfv3gl"];
$registration_passwords_partner = ["5RnzSCEsPMDxaQR2", "9HvbzusabKTIxaz8", "Y4VlOWRr58Hi8Ws2", "u3nnDDmTJllseMFa", "NclxMDWwvWU6vw9T"];
$registration_passwords_inventory = ["KCyLnXcYbzlHHGxJ", "s0FpOl2WK0z2XFom", "HCauWX3iWnWer618", "bhfYKNN9KCyKVR02", "6ClHiehJajeGVq0f"];
$registration_passwords_datatable = ["YQ48zwTDqnnAb6Xu", "BkM5xOL3BFLwTkUm", "CPP86GIPdelqbH4u", "96cbwc7AgRNYYAbn", "tZ9fsOhFVo93uN5s"];
$registration_passwords_listinventar = ["irAd4LBMwYRgb5TU", "YYqz1eM6R9TsepKI", "TkuB4bpjaeE8tD5G", "WYYuKeYeyqfimLYR", "yqmTqvHbcYZDOVrP"];
$registration_passwords_picreader = ["uAXaqeNx2gZPmVkb", "xrc7PfHMf0llM8le", "dSPpMbeHxbkJ4aSA", "ST0vyvHS0pstdcQe", "zD81V0R21gMUUHps"];
$registration_passwords_mutelist = ["MB8Kc1cRrOvq8mzc", "Qn7zmYL9horDjupk", "wwhM3EURkNSKE1aE", "GStRnBjRUgxl5EbE", "LLk9JFcuwfQRF3qR"];
$registration_passwords_avatarpicker = ["QAotMKYpuYRPQpf0", "c3PT4r5Y2CgMNDmz", "0Eo97SU7swmBpNsR", "cDwE3Lw356K8KoeW", "hzZSxckUQI6Bbdma"];
$registration_passwords_economy = ["kkkQwdLjalFE6Zd5", "RFoDmJbAneTYAKpP", "SXiAUpusQsEG95q1", "rIHjlus3RNkDNNPU", "ujfObXDU74HZ4Gh4"];
$registration_passwords_events = ["H8JYYA7B5xU1LFNp", "agGln8DgmGknH3Zm", "45eBxkwpfqhFWl8F", "Q6IAMHuiUFEfiRrz", "mbXQiPqlwNq2N4le"];
// Farben der Webseite
$colorSchemes = array(
'oceanBreeze' => array('header' => '#2E8BC0', 'footer' => '#2E8BC0', 'secondary' => '#B1D4E0', 'primary' => '#3B3B98'),
'sunsetGlow' => array('header' => '#FF6F61', 'footer' => '#FF6F61', 'secondary' => '#FFD54F', 'primary' => '#2C3E50'),
'forestHaven' => array('header' => '#2F5233', 'footer' => '#2F5233', 'secondary' => '#A4DE02', 'primary' => '#FFAE03'),
'lavenderBliss' => array('header' => '#6A0572', 'footer' => '#6A0572', 'secondary' => '#D2B4DE', 'primary' => '#F5B7B1'),
'fierySunset' => array('header' => '#D32F2F', 'footer' => '#D32F2F', 'secondary' => '#FFCDD2', 'primary' => '#B71C1C'),
'coolMint' => array('header' => '#009688', 'footer' => '#009688', 'secondary' => '#B2DFDB', 'primary' => '#004D40'),
'royalBlue' => array('header' => '#3F51B5', 'footer' => '#3F51B5', 'secondary' => '#C5CAE9', 'primary' => '#1A237E'),
'autumnHarvest' => array('header' => '#8D6E63', 'footer' => '#8D6E63', 'secondary' => '#FFCCBC', 'primary' => '#3E2723'),
'goldenHour' => array('header' => '#FFEB3B', 'footer' => '#FFEB3B', 'secondary' => '#FFF9C4', 'primary' => '#FBC02D'),
'mintChocolate' => array('header' => '#4CAF50', 'footer' => '#4CAF50', 'secondary' => '#CDDC39', 'primary' => '#795548'),
'berryBurst' => array('header' => '#E91E63', 'footer' => '#E91E63', 'secondary' => '#F8BBD0', 'primary' => '#880E4F'),
'midnightBlue' => array('header' => '#0D47A1', 'footer' => '#0D47A1', 'secondary' => '#BBDEFB', 'primary' => '#1E88E5'),
'grayscale1' => array('header' => '#333333', 'footer' => '#333333', 'secondary' => '#666666', 'primary' => '#E0E0E0'),
'grayscale2' => array('header' => '#4F4F4F', 'footer' => '#4F4F4F', 'secondary' => '#A0A0A0', 'primary' => '#FFFFFF'),
'grayscale3' => array('header' => '#2B2B2B', 'footer' => '#2B2B2B', 'secondary' => '#858585', 'primary' => '#D9D9D9'),
'emeraldDream' => array('header' => '#50C878', 'footer' => '#50C878', 'secondary' => '#98FB98', 'primary' => '#006400'),
'coralReef' => array('header' => '#FF7F50', 'footer' => '#FF7F50', 'secondary' => '#FFD700', 'primary' => '#8B0000'),
'purpleHaze' => array('header' => '#8A2BE2', 'footer' => '#8A2BE2', 'secondary' => '#DA70D6', 'primary' => '#4B0082'),
'sunshineMeadow' => array('header' => '#FFD700', 'footer' => '#FFD700', 'secondary' => '#F0E68C', 'primary' => '#556B2F'),
'autumnLeaves' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FFD700', 'primary' => '#8B4513'),
'crimsonTide' => array('header' => '#DC143C', 'footer' => '#DC143C', 'secondary' => '#FFDAB9', 'primary' => '#8B0000'),
'skylineView' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#4682B4', 'primary' => '#1E90FF'),
'blazingSunset' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FFD700', 'primary' => '#FF8C00'),
'morningMist' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#B0E0E6', 'primary' => '#4682B4'),
'twilightSparkle' => array('header' => '#4B0082', 'footer' => '#4B0082', 'secondary' => '#9370DB', 'primary' => '#8A2BE2'),
'sereneGreen' => array('header' => '#2E8B57', 'footer' => '#2E8B57', 'secondary' => '#98FB98', 'primary' => '#006400'),
'coralBlush' => array('header' => '#FF6F61', 'footer' => '#FF6F61', 'secondary' => '#FFA07A', 'primary' => '#FA8072'),
'earthyBrown' => array('header' => '#8B4513', 'footer' => '#8B4513', 'secondary' => '#D2B48C', 'primary' => '#A0522D'),
'crimsonWave' => array('header' => '#B22222', 'footer' => '#B22222', 'secondary' => '#FF6347', 'primary' => '#DC143C'),
'coolCyan' => array('header' => '#00CED1', 'footer' => '#00CED1', 'secondary' => '#E0FFFF', 'primary' => '#20B2AA'),
'deepPurple' => array('header' => '#9400D3', 'footer' => '#9400D3', 'secondary' => '#9932CC', 'primary' => '#8B008B'),
'warmAmber' => array('header' => '#FFBF00', 'footer' => '#FFBF00', 'secondary' => '#FFD700', 'primary' => '#FF8C00'),
'gentlePink' => array('header' => '#FF69B4', 'footer' => '#FF69B4', 'secondary' => '#FFB6C1', 'primary' => '#FF1493'),
'midnightTeal' => array('header' => '#008080', 'footer' => '#008080', 'secondary' => '#40E0D0', 'primary' => '#20B2AA'),
'sunsetOrange' => array('header' => '#FF4500', 'footer' => '#FF4500', 'secondary' => '#FF6347', 'primary' => '#FF7F50'),
'forestGreen' => array('header' => '#228B22', 'footer' => '#228B22', 'secondary' => '#32CD32', 'primary' => '#006400'),
'icyBlue' => array('header' => '#00BFFF', 'footer' => '#00BFFF', 'secondary' => '#ADD8E6', 'primary' => '#1E90FF'),
'rosyRed' => array('header' => '#FF6347', 'footer' => '#FF6347', 'secondary' => '#FF7F7F', 'primary' => '#FF4500'),
'plumPurple' => array('header' => '#8B008B', 'footer' => '#8B008B', 'secondary' => '#DA70D6', 'primary' => '#9932CC'),
'vibrantYellow' => array('header' => '#FFD700', 'footer' => '#FFD700', 'secondary' => '#FFFF00', 'primary' => '#FFA500'),
'aquaMarine' => array('header' => '#7FFFD4', 'footer' => '#7FFFD4', 'secondary' => '#E0FFFF', 'primary' => '#40E0D0'),
'burntSienna' => array('header' => '#E97451', 'footer' => '#E97451', 'secondary' => '#D2691E', 'primary' => '#CD5C5C'),
'mintGreen' => array('header' => '#98FF98', 'footer' => '#98FF98', 'secondary' => '#ADFF2F', 'primary' => '#32CD32'),
'sapphireBlue' => array('header' => '#0F52BA', 'footer' => '#0F52BA', 'secondary' => '#4682B4', 'primary' => '#1E90FF'),
'coralPink' => array('header' => '#F88379', 'footer' => '#F88379', 'secondary' => '#FF7F50', 'primary' => '#FF6347'),
'jadeGreen' => array('header' => '#00A36C', 'footer' => '#00A36C', 'secondary' => '#50C878', 'primary' => '#2E8B57'),
'peachOrange' => array('header' => '#FFDAB9', 'footer' => '#FFDAB9', 'secondary' => '#FFE4B5', 'primary' => '#FFA07A'),
'rubyRed' => array('header' => '#9B111E', 'footer' => '#9B111E', 'secondary' => '#FF6347', 'primary' => '#B22222'),
'skyBlue' => array('header' => '#87CEEB', 'footer' => '#87CEEB', 'secondary' => '#B0E0E6', 'primary' => '#00BFFF'),
'burntOrange' => array('header' => '#FF7F50', 'footer' => '#FF7F50', 'secondary' => '#FFA07A', 'primary' => '#FF4500'),
'standardcolor' => array('header' => '#cdb38b', 'footer' => '#eecfa1', 'secondary' => '#f5f5dc', 'primary' => '#4F4F4F')
);
// Die Farbschaltflächen habe ich eingefügt damit man sich ein gesamtbild der Farbschemas machen kann.
// Bitte last eure kereativität durch nichts stoppen ändert die colorSchemes wie es euch gefällt.
define('SHOW_COLOR_BUTTONS', false); // Farbschaltflächen anzeigen (true/false)
define('INITIAL_COLOR_SCHEME', 'standardcolor'); // Farbschema auswählen
// Farben und Schriftart
// Setze aktuelle Farbschema basierend auf der Konstanten INITIAL_COLOR_SCHEME
$currentColorScheme = $colorSchemes[INITIAL_COLOR_SCHEME];
// definiere die Farben für Header, Footer und andere
define('HEADER_COLOR', $currentColorScheme['header']); // Header-Farbe
define('FOOTER_COLOR', $currentColorScheme['footer']); // Footer-Farbe
define('SECONDARY_COLOR', $currentColorScheme['secondary']); // Sekundärfarbe
define('PRIMARY_COLOR', $currentColorScheme['primary']); // Primäre Schriftfarbe
define('FONT_FAMILY_STATS', 'Arial, Verdana, sans-serif');
define('FONT_FAMILY', 'Pacifico, normal, serif');
// Schriftgrößen
define('BASE_FONT_SIZE', '26px'); // Standardgröße für Text
define('TITLE_FONT_SIZE', '48px'); // Größe für Überschriften
define('STATS_FONT_SIZE', '14px'); // Größe für Statistik-Text
// Links
define('LINK_COLOR', '#3A3A3A'); // Standard Link-Farbe
define('LINK_HOVER_COLOR', 'red'); // Link-Farbe beim Hover
// Hintergrund- und Vordergrundbilder
define('BACKGROUND_IMAGE', 'pics/transparent.png'); // Hintergrundbild
define('FOREGROUND_IMAGE', 'pics/transparent.png'); // Logo oder Vordergrundbild
define('BACKGROUND_OPACITY', 1.0); // Transparenz des Hintergrunds
define('FOREGROUND_OPACITY', 1.0); // Transparenz des Logos
// Anzeigeoptionen
define('LOGO_ON', 'OFF'); // Logo anzeigen: ON / OFF
define('TEXT_ON', 'ON'); // Begrüßungstext anzeigen: ON / OFF
define('LOGO_PATH', 'include/Metavers150.png'); // Pfad zum Logo
define('LOGO_WIDTH', '50%'); // Logo-Breite
define('LOGO_HEIGHT', '25%'); // Logo-Höhe
define('GUIDE_DATA', 'DATA'); // DATA/JSON guide anzeigen.
// Begrüßungstext
// Schriftarten gibt es hier: https://fonts.google.com/
// LOGO_FONT Beispiele: 'Pacifico', 'Barriecito','Playfair Display','Comic Neue','Roboto','Lobster','Montserrat','Oswald','Raleway','Merriweather','Lora','Open Sans','Dancing Script','Nunito'
define('LOGO_FONT', 'Lobster'); // Schriftart des Logos
define('PRIMARY_COLOR_LOGO', '#00FFFF'); // Allgemeine Schriftfarbe Schwarz 000000, Weiss FFFFFF
define('WELCOME_TEXT', '<p> &nbsp; Willkommen im ' . SITE_NAME . '</p>');
define('WELCOME_TEXT_WIDTH', '50%'); // Standardbreite (z. B. 50%)
define('WELCOME_TEXT_HEIGHT', 'auto'); // Standardhöhe (auto für flexible Höhe)
define('WELCOME_TEXT_COLOR', PRIMARY_COLOR_LOGO); // Farbe des Textes
define('WELCOME_TEXT_ALIGN', 'left'); // Zentriert, links oder rechts
define('WELCOME_TEXT_FONT_SIZE', '24px'); // Schriftgröße des Textes
// Bildanzeige-Einstellungen
define('SLIDESHOW_FOLDER', './images'); // Verzeichnis für die Bilder
define('IMAGE_SIZE', 'width:100%;height:100%'); // Größe der Bilder (100% für Vollbild)
define('SLIDESHOW_DELAY', 9000); // Zeit zwischen Bildern (in ms, 9000 = 9 Sekunden)
// Einstellungen für Maptiles
define('FREI_COLOR', '#0088FF'); // Farbe für freie Koordinaten
define('BESCHLAGT_COLOR', '#55C155'); // Farbe für SingleRegion
define('VARREGION_COLOR', '#006400'); // Farbe für VarRegion
define('CENTER_COLOR', '#FF0000'); // Farbe für Zentrum
define('TILE_SIZE', '25px'); // Größe der Farbfelder
// Zentrum des Grids
define('CONF_CENTER_COORD_X', 5500); // X-KOORDINATE DES ZENTRUMS
define('CONF_CENTER_COORD_Y', 5500); // Y-KOORDINATE DES ZENTRUMS
define('MAPS_X', 32);
define('MAPS_Y', 32);
// MOTD-Einstellung: 'Dyn' für dynamisch, 'Static' für statisch
define('MOTD', 'Dyn'); // Oder 'Static'
// Statische MOTD (nur relevant, wenn MOTD auf 'Static' gesetzt ist)
define('MOTD_STATIC_MESSAGE', 'Willkommen auf im Grid! Bitte beachte unsere Regeln.');
define('MOTD_STATIC_TYPE', 'system');
define('MOTD_STATIC_URL_TOS', BASE_URL . '/include/tos.php');
define('MOTD_STATIC_URL_DMCA', BASE_URL . '/include/dmca.php');
// Definiere verschiedene RSS-Feed-URLs getrennt durch Komma.
$feed_urls = [
'http://opensimulator.org/viewgit/?a=rss-log&p=opensim', // Standard-Feed
'https://www.hypergridbusiness.com/feed'
];
// Maximale Anzahl der Einträge pro Feed
$max_entries = 50;
?>
+322
View File
@@ -0,0 +1,322 @@
<?php
// Globale Variablen verwenden
global $osVorname, $osNachname, $osEMail, $osHash, $osSalt, $benutzeruuid, $inventoryuuid, $neuparentFolderID, $neuHauptFolderID, $osDatum, $pdo;
//$pdo = new PDO("mysql:host=$CONF_db_server;dbname=$CONF_db_database", $CONF_db_user, $CONF_db_pass);
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
// Avatar eintragen
$neuer_user = array();
$neuer_user['PrincipalID'] = $benutzeruuid;
$neuer_user['ScopeID'] = '00000000-0000-0000-0000-000000000000';
$neuer_user['FirstName'] = $osVorname;
$neuer_user['LastName'] = $osNachname;
$neuer_user['Email'] = $osEMail;
$neuer_user['ServiceURLs'] = 'HomeURI= InventoryServerURI= AssetServerURI=';
$neuer_user['Created'] = $osDatum;
$neuer_user['UserLevel'] = '0';
$neuer_user['UserFlags'] = '0';
$neuer_user['UserTitle'] = '';
$neuer_user['active'] = '1';
// $statement = $pdo->prepare("INSERT INTO UserAccounts (email, vorname, nachname) VALUES (:email, :vorname, :nachname)");
$statement = $pdo->prepare("INSERT INTO UserAccounts (PrincipalID, ScopeID, FirstName, LastName, Email, ServiceURLs, Created, UserLevel, UserFlags, UserTitle, active) VALUES (:PrincipalID, :ScopeID, :FirstName, :LastName, :Email, :ServiceURLs, :Created, :UserLevel, :UserFlags, :UserTitle, :active)");
$statement->execute($neuer_user);
// UUID, passwordHash, passwordSalt, webLoginKey, accountType
$neues_passwd = array();
$neues_passwd['UUID'] = $benutzeruuid;
$neues_passwd['passwordHash'] = $osHash;
$neues_passwd['passwordSalt'] = $osSalt;
$neues_passwd['webLoginKey'] = '00000000-0000-0000-0000-000000000000';
$neues_passwd['accountType'] = 'UserAccount';
$statement = $pdo->prepare("INSERT INTO auth (UUID, passwordHash, passwordSalt, webLoginKey, accountType) VALUES (:UUID, :passwordHash, :passwordSalt, :webLoginKey, :accountType)");
$statement->execute($neues_passwd);
// Das nachfolgende eintragen in der GridUser Spalte
$neuer_GridUser = array();
$neuer_GridUser['UserID'] = $benutzeruuid;
$neuer_GridUser['HomeRegionID'] = '00000000-0000-0000-0000-000000000000';
$neuer_GridUser['HomePosition'] = '<0,0,0>';
$neuer_GridUser['LastRegionID'] = '00000000-0000-0000-0000-000000000000';
$neuer_GridUser['LastPosition'] = '<0,0,0>';
$statement = $pdo->prepare("INSERT INTO GridUser (UserID, HomeRegionID, HomePosition, LastRegionID, LastPosition) VALUES (:UserID, :HomeRegionID, :HomePosition, :LastRegionID, :LastPosition)");
$statement->execute($neuer_GridUser);
// Inventarverzeichnisse erstellen
// Ordner Textures
$Texturesuuid = generateUUID();
$verzeichnistextur = array();
$verzeichnistextur['folderName'] = 'Textures';
$verzeichnistextur['type'] = '0';
$verzeichnistextur['version'] = '1';
$verzeichnistextur['folderID'] = $Texturesuuid;
$verzeichnistextur['agentID'] = $benutzeruuid;
$verzeichnistextur['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnistextur);
// Ordner Sounds
$Soundsuuid = generateUUID();
$verzeichnisSounds = array();
$verzeichnisSounds['folderName'] = 'Sounds';
$verzeichnisSounds['type'] = '1';
$verzeichnisSounds['version'] = '1';
$verzeichnisSounds['folderID'] = $Soundsuuid;
$verzeichnisSounds['agentID'] = $benutzeruuid;
$verzeichnisSounds['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisSounds);
// Ordner Calling Cards
$CallingCardsuuid = generateUUID();
$verzeichnisCallingCards = array();
$verzeichnisCallingCards['folderName'] = 'Calling Cards';
$verzeichnisCallingCards['type'] = '2';
$verzeichnisCallingCards['version'] = '2';
$verzeichnisCallingCards['folderID'] = $CallingCardsuuid;
$verzeichnisCallingCards['agentID'] = $benutzeruuid;
$verzeichnisCallingCards['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisCallingCards);
// Ordner Landmarks
$Landmarksuuid = generateUUID();
$verzeichnisLandmarks = array();
$verzeichnisLandmarks['folderName'] = 'Landmarks';
$verzeichnisLandmarks['type'] = '3';
$verzeichnisLandmarks['version'] = '1';
$verzeichnisLandmarks['folderID'] = $Landmarksuuid;
$verzeichnisLandmarks['agentID'] = $benutzeruuid;
$verzeichnisLandmarks['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisLandmarks);
// Ordner My Inventory
$MyInventoryuuid = generateUUID();
$verzeichnisMyInventory = array();
$verzeichnisMyInventory['folderName'] = 'My Inventory';
$verzeichnisMyInventory['type'] = '8';
$verzeichnisMyInventory['version'] = '17';
$verzeichnisMyInventory['folderID'] = $neuHauptFolderID;
$verzeichnisMyInventory['agentID'] = $benutzeruuid;
$verzeichnisMyInventory['parentFolderID'] = '00000000-0000-0000-0000-000000000000';
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisMyInventory);
// Ordner Photo Album
$PhotoAlbumuuid = generateUUID();
$verzeichnisPhotoAlbum = array();
$verzeichnisPhotoAlbum['folderName'] = 'Photo Album';
$verzeichnisPhotoAlbum['type'] = '15';
$verzeichnisPhotoAlbum['version'] = '1';
$verzeichnisPhotoAlbum['folderID'] = $PhotoAlbumuuid;
$verzeichnisPhotoAlbum['agentID'] = $benutzeruuid;
$verzeichnisPhotoAlbum['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisPhotoAlbum);
// Ordner Clothing
$Clothinguuid = generateUUID();
$verzeichnisClothing = array();
$verzeichnisClothing['folderName'] = 'Clothing';
$verzeichnisClothing['type'] = '5';
$verzeichnisClothing['version'] = '3';
$verzeichnisClothing['folderID'] = $Clothinguuid;
$verzeichnisClothing['agentID'] = $benutzeruuid;
$verzeichnisClothing['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisClothing);
// Ordner Objects
$Objectsuuid = generateUUID();
$verzeichnisObjects = array();
$verzeichnisObjects['folderName'] = 'Objects';
$verzeichnisObjects['type'] = '6';
$verzeichnisObjects['version'] = '1';
$verzeichnisObjects['folderID'] = $Objectsuuid;
$verzeichnisObjects['agentID'] = $benutzeruuid;
$verzeichnisObjects['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisObjects);
// Ordner Notecards
$Notecardsuuid = generateUUID();
$verzeichnisNotecards = array();
$verzeichnisNotecards['folderName'] = 'Notecards';
$verzeichnisNotecards['type'] = '7';
$verzeichnisNotecards['version'] = '1';
$verzeichnisNotecards['folderID'] = $Notecardsuuid;
$verzeichnisNotecards['agentID'] = $benutzeruuid;
$verzeichnisNotecards['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisNotecards);
// Ordner Scripts
$Scriptsuuid = generateUUID();
$verzeichnisScripts = array();
$verzeichnisScripts['folderName'] = 'Scripts';
$verzeichnisScripts['type'] = '10';
$verzeichnisScripts['version'] = '1';
$verzeichnisScripts['folderID'] = $Scriptsuuid;
$verzeichnisScripts['agentID'] = $benutzeruuid;
$verzeichnisScripts['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisScripts);
// Ordner Body Parts
$BodyPartsuuid = generateUUID();
$verzeichnisBodyParts = array();
$verzeichnisBodyParts['folderName'] = 'Body Parts';
$verzeichnisBodyParts['type'] = '13';
$verzeichnisBodyParts['version'] = '5';
$verzeichnisBodyParts['folderID'] = $BodyPartsuuid;
$verzeichnisBodyParts['agentID'] = $benutzeruuid;
$verzeichnisBodyParts['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisBodyParts);
// Ordner Trash
$Trashuuid = generateUUID();
$verzeichnisTrash = array();
$verzeichnisTrash['folderName'] = 'Trash';
$verzeichnisTrash['type'] = '14';
$verzeichnisTrash['version'] = '1';
$verzeichnisTrash['folderID'] = $Trashuuid;
$verzeichnisTrash['agentID'] = $benutzeruuid;
$verzeichnisTrash['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisTrash);
// Ordner Lost And Found
$LostAndFounduuid = generateUUID();
$verzeichnisLostAndFound = array();
$verzeichnisLostAndFound['folderName'] = 'Lost And Found';
$verzeichnisLostAndFound['type'] = '16';
$verzeichnisLostAndFound['version'] = '1';
$verzeichnisLostAndFound['folderID'] = $LostAndFounduuid;
$verzeichnisLostAndFound['agentID'] = $benutzeruuid;
$verzeichnisLostAndFound['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisLostAndFound);
// Ordner Animations
$Animationsuuid = generateUUID();
$verzeichnisAnimations = array();
$verzeichnisAnimations['folderName'] = 'Animations';
$verzeichnisAnimations['type'] = '20';
$verzeichnisAnimations['version'] = '1';
$verzeichnisAnimations['folderID'] = $Animationsuuid;
$verzeichnisAnimations['agentID'] = $benutzeruuid;
$verzeichnisAnimations['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisAnimations);
// Ordner Gestures
$Gesturesuuid = generateUUID();
$verzeichnisGestures = array();
$verzeichnisGestures['folderName'] = 'Gestures';
$verzeichnisGestures['type'] = '21';
$verzeichnisGestures['version'] = '1';
$verzeichnisGestures['folderID'] = $Gesturesuuid;
$verzeichnisGestures['agentID'] = $benutzeruuid;
$verzeichnisGestures['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisGestures);
// Friends
$Friendsuuid = generateUUID();
$verzeichnisFriends = array();
$verzeichnisFriends['folderName'] = 'Friends';
$verzeichnisFriends['type'] = '2';
$verzeichnisFriends['version'] = '2';
$verzeichnisFriends['folderID'] = $Friendsuuid;
$verzeichnisFriends['agentID'] = $benutzeruuid;
$verzeichnisFriends['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisFriends);
// Favorites
$Favoritesuuid = generateUUID();
$verzeichnisFavorites = array();
$verzeichnisFavorites['folderName'] = 'Favorites';
$verzeichnisFavorites['type'] = '23';
$verzeichnisFavorites['version'] = '1';
$verzeichnisFavorites['folderID'] = $Favoritesuuid;
$verzeichnisFavorites['agentID'] = $benutzeruuid;
$verzeichnisFavorites['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisFavorites);
// Current Outfit
$CurrentOutfituuid = generateUUID();
$verzeichnisCurrentOutfit = array();
$verzeichnisCurrentOutfit['folderName'] = 'Current Outfit';
$verzeichnisCurrentOutfit['type'] = '46';
$verzeichnisCurrentOutfit['version'] = '1';
$verzeichnisCurrentOutfit['folderID'] = $CurrentOutfituuid;
$verzeichnisCurrentOutfit['agentID'] = $benutzeruuid;
$verzeichnisCurrentOutfit['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisCurrentOutfit);
// All
$Alluuid = generateUUID();
$verzeichnisAll = array();
$verzeichnisAll['folderName'] = 'All';
$verzeichnisAll['type'] = '2';
$verzeichnisAll['version'] = '1';
$verzeichnisAll['folderID'] = $Alluuid;
$verzeichnisAll['agentID'] = $benutzeruuid;
$verzeichnisAll['parentFolderID'] = $neuHauptFolderID;
$statement = $pdo->prepare("INSERT INTO inventoryfolders (folderName, type, version, folderID, agentID, parentFolderID) VALUES (:folderName, :type, :version, :folderID, :agentID, :parentFolderID)");
$statement->execute($verzeichnisAll);
?>
+80
View File
@@ -0,0 +1,80 @@
{
"shopping": [
{
"name": "Brogals Style & Fashion",
"url": "hop://brogals-paradies.de:8002/Brogals%20Style%20%26%20Fashion/49/96/22",
"image": "destinations/BrogalsStyleFashion.jpg"
},
{
"name": "Zoes Mall",
"url": "hop://2.nymphgrid.com:8002/Zoes%20Mall%20Welcome/118/128/23",
"image": "destinations/ZoesMall.jpg"
},
{
"name": "Lani Shopping Mall",
"url": "hop://hg.osgrid.org:80/Lani/213/144/35",
"image": "destinations/Lani.jpg"
},
{
"name": "Moonrose Shopping",
"url": "hop://moonrose-grid.de:8002/Moonrose%20Shopping/10/147/29",
"image": "destinations/MoonroseShopping.jpg"
},
{
"name": "Klamotto",
"url": "hop://otterland.de:8002/Klamotto/71/101/23",
"image": "destinations/Klamotto.jpg"
},
{
"name": "FLORA",
"url": "hop://alternatemetaverse.com:8002/FLORA/100/137/24",
"image": "destinations/FLORA.jpg"
},
{
"name": "Agora",
"url": "hop://hg.osgrid.org:80/Agora/429/389/24",
"image": "destinations/Agora.jpg"
},
{
"name": "Sciatti Shop Clothes",
"url": "secondlifesciattisigrid.it8002SciattiShopClothes10512023",
"image": "destinations/SciattiShopClothes.jpg"
}
],
"education": [
{
"name": "Lbsa Plaza",
"url": "hop://hg.osgrid.org:80/Lbsa%20Plaza/170/132/41",
"image": "destinations/LbsaPlaza.jpg"
},
{
"name": "Outworldz Virunga",
"url": "hop://www.outworldz.com:9000/Outworldz%20Virunga/128/128/23",
"image": "destinations/OutworldzVirunga.jpg"
}
],
"art": [
{
"name": "ArtDestiny",
"url": "hop://artdestiny.de:8002/ArtDestinyWelcome/147/153/25",
"image": "destinations/ArtDestiny.jpg"
}
],
"event": [
{
"name": "Tomis-World",
"url": "hop://tomis-world.de:8002/Tomis-World/113/106/23",
"image": "destinations/Tomis-World.jpg"
},
{
"name": "Event Plaza",
"url": "hop://hg.osgrid.org:80/Event%20Plaza/373/381/25",
"image": "destinations/EventPlaza.jpg"
},
{
"name": "Alternate Metaverse",
"url": "hop://alternatemetaverse.com:8002/Alternate%20Metaverse/304/329/64",
"image": "destinations/AlternateMetaverse.jpg"
}
]
}
+333
View File
@@ -0,0 +1,333 @@
<?php
$title = "DMCA";
include 'header.php';
// Sprachauswahl (Standard: Deutsch)
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'de';
// Platzhalter-Werte setzen
$variables = [
"DEIN GRID-NAME" => "Virtual " . SITE_NAME . " Grid",
"DATUM" => date("d.m.Y"),
"DEINE EMAIL" => "support@" . SITE_NAME . ".com",
"DEINE POSTADRESSE" => "Musterstraße 123, 12345 Musterstadt",
"OPTIONAL" => "Discord: GridSupport" . BASE_URL,
"DEINE KONTAKT-EMAIL" => "kontakt@" . SITE_NAME . ".com"
];
?>
<div class="language-switcher">
<a href="?lang=de">Deutsch</a> | <a href="?lang=en">English</a>
</div>
<style>
.markdown-content {
max-width: 800px;
margin: 0 auto;
padding: 20px;
color: rgb(31, 31, 31); /* Korrektur: 'color' statt 'Color' */
background-color: rgb(238, 241, 241);
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.language-switcher {
text-align: right;
margin-bottom: 20px;
}
.language-switcher a {
text-decoration: none;
color: #007BFF;
margin: 0 5px;
}
.language-switcher a:hover {
text-decoration: underline;
}
code {
background-color: #f4f4f4;
padding: 2px 5px;
border-radius: 3px;
font-family: monospace;
}
</style>
<?php
function replacePlaceholders($text, $variables = []) {
foreach ($variables as $key => $value) {
$text = str_replace("[$key]", $value, $text);
}
return $text;
}
function simpleMarkdownToHTML($text) {
// Zeilenumbrüche umwandeln
$text = nl2br($text);
// Fettdruck **text** -> <strong>text</strong>
$text = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $text);
// Kursiv *text* -> <em>text</em>
$text = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $text);
// Überschriften # -> <h1>, ## -> <h2> usw.
for ($i = 6; $i >= 1; $i--) {
$text = preg_replace('/^' . str_repeat('#', $i) . '\s*(.*?)$/m', "<h$i>$1</h$i>", $text);
}
// Links [Text](URL) -> <a href="URL">Text</a>
$text = preg_replace('/\[(.*?)\]\((.*?)\)/', '<a href="$2">$1</a>', $text);
// Inline-Code `text` -> <code>text</code>
$text = preg_replace('/`(.*?)`/', '<code>$1</code>', $text);
return $text;
}
// Deutsche DMCA-Richtlinie
$dmcaTextDE = "
# **DMCA-Richtlinie für [DEIN GRID-NAME]**
**Letzte Aktualisierung:** [DATUM]
Diese DMCA-Richtlinie beschreibt, wie **[DEIN GRID-NAME]** (nachfolgend „wir“, „uns“, „unser Grid“)
auf Beschwerden bezüglich Urheberrechtsverletzungen gemäß dem **Digital Millennium Copyright Act (DMCA)** reagiert.
Falls du glaubst, dass Inhalte innerhalb unseres OpenSimulator-Grids gegen dein Urheberrecht verstoßen,
kannst du eine **DMCA-Beschwerde** einreichen, indem du die unten beschriebenen Schritte befolgst.
---
## **1. Einreichen einer DMCA-Beschwerde (Takedown-Anfrage)**
Falls du der Meinung bist, dass deine urheberrechtlich geschützten Inhalte ohne Erlaubnis in **[DEIN GRID-NAME]** verwendet wurden,
sende bitte eine schriftliche Beschwerde an unseren **DMCA-Agenten** unter:
📩 **E-Mail:** [DEINE EMAIL]
📬 **Postadresse:** [DEINE POSTADRESSE]
📞 **Telefon:** [OPTIONAL]
**Deine DMCA-Beschwerde muss folgende Informationen enthalten:**
1. **Identifikation des geschützten Werkes:**
- Eine detaillierte Beschreibung des urheberrechtlich geschützten Werkes (z. B. ein Screenshot, Link oder Dokumentation).
2. **Standort des rechtsverletzenden Inhalts:**
- Genaue Position des Inhalts in unserem Grid, inklusive:
- Name der Region
- Koordinaten (falls möglich)
- UUID oder Asset-ID des betroffenen Objekts
- Screenshot oder Beschreibung
3. **Kontaktdaten:**
- Dein Name, Adresse, E-Mail-Adresse und Telefonnummer.
4. **Erklärung zur Rechtsverletzung:**
- Eine Erklärung, dass du in **gutem Glauben** davon ausgehst, dass die Nutzung nicht vom Urheberrechtsinhaber,
seinem Vertreter oder dem Gesetz (z. B. Fair Use) erlaubt ist.
5. **Eidesstattliche Versicherung:**
- Eine Erklärung, dass die Angaben in deiner Beschwerde korrekt sind und du der rechtmäßige Inhaber des Urheberrechts oder ein autorisierter Vertreter bist.
6. **Digitale oder physische Unterschrift:**
- Eine elektronische oder handschriftliche Unterschrift des Urheberrechtsinhabers oder dessen bevollmächtigten Vertreters.
---
## **2. Unsere Reaktion auf eine DMCA-Beschwerde**
Nach Erhalt einer gültigen DMCA-Anfrage werden wir:
- Den mutmaßlich rechtsverletzenden Inhalt **vorläufig entfernen oder den Zugriff darauf sperren**.
- Den Nutzer, der den Inhalt bereitgestellt hat, über die Beschwerde informieren.
- Falls der betroffene Nutzer eine **Gegendarstellung** einreicht (siehe Abschnitt 3), den Urheberrechtsinhaber darüber informieren.
Falls der Urheberrechtsinhaber innerhalb von **10 Werktagen** nach unserer Benachrichtigung keine rechtlichen Schritte einleitet,
können wir den entfernten Inhalt wiederherstellen.
---
## **3. Einreichen einer Gegendarstellung (Counter-Notice)**
Falls du der Meinung bist, dass der entfernte Inhalt nicht gegen Urheberrechte verstößt oder du eine Erlaubnis zur Nutzung hattest,
kannst du eine **Gegendarstellung** einreichen.
Bitte sende deine Gegendarstellung an **[DEINE EMAIL]** mit folgenden Angaben:
1. **Identifikation des entfernten Inhalts:**
- Die ursprüngliche Position des Inhalts (Region, Koordinaten, UUID, Screenshots).
2. **Erklärung zur Unrechtmäßigkeit der Beschwerde:**
- Eine Erklärung, dass du **in gutem Glauben** der Meinung bist, dass die Entfernung aufgrund eines Fehlers oder falscher Identifizierung erfolgte.
3. **Zustimmung zur Gerichtsbarkeit:**
- Falls du außerhalb der USA lebst, eine Erklärung, dass du die Gerichtsbarkeit der US-amerikanischen Bundesgerichte akzeptierst.
4. **Eidesstattliche Versicherung:**
- Eine Versicherung, dass deine Angaben korrekt sind und du für eventuelle rechtliche Konsequenzen verantwortlich bist.
5. **Digitale oder physische Unterschrift:**
- Deine Unterschrift oder die deines bevollmächtigten Vertreters.
Nach Erhalt einer gültigen Gegendarstellung kann der entfernte Inhalt innerhalb von **1014 Tagen** wiederhergestellt werden,
sofern der ursprüngliche Beschwerdeführer keine Klage einreicht.
---
## **4. Konsequenzen für wiederholte Verstöße**
Nutzer, die wiederholt Urheberrechte verletzen, können:
- **Verwarnt**,
- **Vorübergehend gesperrt**,
- Oder **dauerhaft aus dem Grid ausgeschlossen** werden.
Wir behalten uns das Recht vor, Nutzerkonten ohne vorherige Warnung zu sperren, falls schwere Verstöße vorliegen.
---
## **5. Keine Haftung für Nutzerinhalte**
Unser Grid stellt eine Plattform für virtuelle Interaktionen bereit und hostet nutzergenerierte Inhalte.
Wir übernehmen keine Haftung für urheberrechtlich geschützte Materialien, die von Nutzern hochgeladen wurden.
Alle Nutzer sind für ihre hochgeladenen Inhalte selbst verantwortlich.
Wir arbeiten jedoch aktiv daran, **rechtsverletzende Inhalte zu entfernen**, sobald wir eine **gültige DMCA-Beschwerde** erhalten.
---
## **6. Kontakt für weitere Fragen**
Falls du Fragen zur DMCA-Richtlinie hast, kannst du uns unter **[DEINE KONTAKT-EMAIL]** erreichen.
---
### **Rechtlicher Hinweis:**
Diese Vorlage dient nur zu **Informationszwecken** und stellt **keine Rechtsberatung** dar.
Falls du eine rechtlich geprüfte DMCA-Richtlinie benötigst, konsultiere bitte einen Anwalt.
";
// Englische DMCA-Richtlinie
$dmcaTextEN = "
# **DMCA Policy for [DEIN GRID-NAME]**
**Last Updated:** [DATUM]
This DMCA policy describes how **[DEIN GRID-NAME]** (hereinafter „we“, „us“, „our grid“)
responds to complaints regarding copyright infringement under the **Digital Millennium Copyright Act (DMCA)**.
If you believe that content within our OpenSimulator grid violates your copyright,
you can file a **DMCA complaint** by following the steps below.
---
## **1. Submitting a DMCA Complaint (Takedown Request)**
If you believe that your copyrighted material has been used without permission in **[DEIN GRID-NAME]**,
please send a written complaint to our **DMCA Agent** at:
📩 **Email:** [DEINE EMAIL]
📬 **Postal Address:** [DEINE POSTADRESSE]
📞 **Phone:** [OPTIONAL]
**Your DMCA complaint must include the following information:**
1. **Identification of the copyrighted work:**
- A detailed description of the copyrighted work (e.g., a screenshot, link, or documentation).
2. **Location of the infringing content:**
- The exact location of the content in our grid, including:
- Region name
- Coordinates (if possible)
- UUID or asset ID of the affected object
- Screenshot or description
3. **Contact information:**
- Your name, address, email address, and phone number.
4. **Statement of infringement:**
- A statement that you have a **good faith belief** that the use is not authorized by the copyright owner,
their agent, or the law (e.g., fair use).
5. **Sworn statement:**
- A statement that the information in your complaint is accurate and that you are the copyright owner or authorized to act on their behalf.
6. **Digital or physical signature:**
- An electronic or handwritten signature of the copyright owner or their authorized representative.
---
## **2. Our Response to a DMCA Complaint**
Upon receiving a valid DMCA complaint, we will:
- **Temporarily remove or disable access** to the allegedly infringing content.
- Notify the user who provided the content about the complaint.
- If the affected user submits a **counter-notice** (see Section 3), inform the copyright owner.
If the copyright owner does not take legal action within **10 business days** of our notification,
we may restore the removed content.
---
## **3. Submitting a Counter-Notice**
If you believe that the removed content does not infringe copyright or you had permission to use it,
you can submit a **counter-notice**.
Please send your counter-notice to **[DEINE EMAIL]** with the following information:
1. **Identification of the removed content:**
- The original location of the content (region, coordinates, UUID, screenshots).
2. **Statement of good faith:**
- A statement that you have a **good faith belief** that the removal was due to a mistake or misidentification.
3. **Consent to jurisdiction:**
- If you are outside the USA, a statement that you consent to the jurisdiction of US federal courts.
4. **Sworn statement:**
- A statement that the information in your counter-notice is accurate and that you are responsible for any legal consequences.
5. **Digital or physical signature:**
- Your signature or that of your authorized representative.
Upon receiving a valid counter-notice, the removed content may be restored within **1014 days**,
unless the original complainant files a lawsuit.
---
## **4. Consequences for Repeated Violations**
Users who repeatedly infringe copyright may:
- Be **warned**,
- **Temporarily suspended**,
- Or **permanently banned** from the grid.
We reserve the right to suspend accounts without prior warning in cases of severe violations.
---
## **5. No Liability for User-Generated Content**
Our grid provides a platform for virtual interactions and hosts user-generated content.
We are not liable for copyrighted materials uploaded by users.
All users are responsible for the content they upload.
However, we actively work to **remove infringing content** upon receiving a **valid DMCA complaint**.
---
## **6. Contact for Further Questions**
If you have questions about this DMCA policy, you can reach us at **[DEINE KONTAKT-EMAIL]**.
---
### **Legal Notice:**
This template is for **informational purposes only** and does **not constitute legal advice**.
If you need a legally reviewed DMCA policy, please consult an attorney.
";
// Wähle den Text basierend auf der Sprache
$dmcaText = ($lang == 'de') ? $dmcaTextDE : $dmcaTextEN;
// 1️⃣ Platzhalter ersetzen
$dmcaText = replacePlaceholders($dmcaText, $variables);
// 2️⃣ Markdown in HTML umwandeln
$finalHTML = simpleMarkdownToHTML($dmcaText);
// 3️⃣ HTML ausgeben
echo "<div class='markdown-content'>$finalHTML</div>";
?>
<?php include_once 'include/footer.php'; ?>
Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

+293
View File
@@ -0,0 +1,293 @@
Gridname,Gridlink.com:8002
3D Worldz,www.3dWorldz.com:8002
3DLES,edugrid.3dles.com:8002
4Creative,pangea.myftp.org:8002
A Dimension Beyond,grid.adimensionbeyond.net:8002
A Virtual World,avirtualworld.org:8002
Accueil Dracsoom,dracsoom.ddns.net:8002
Admeja,admeja.bounceme.net:8002
Adreans-World,adreans-world.from-fl.com:8000
Adult Life,adult-life.de:8002
Aedynar,aedynar.com:8002
AI Grid,ai.let-us.cyou:8002
AIRE Mille Flux,grid.aire-mille-flux.org:8002
Alecia Grid,alecianagrid.com:8002
Alexa World,alexaworld.de:8002
Alife Virtual,alifevirtual.com:8002
Alternate Metaverse,alternatemetaverse.com:8002
Alterworld Grid,hg.alterworld.us:7002
AmaziWorld,login.amaziworld.com:8002
Angel Souls,angel-souls.de:8002
Ankabi,ankabi.de:8002
Ansjela Grid,hg.ansjelagrid.com:28002
AnSky,login.anskygrid.ca:8002
Arcadia Asylum,arcadiaasylum.org:8002
Ardalia,ardiva.ddns.net:8002
Ardiva,ardiva.ddns.net:8002
Ares World,aresworld.outworldz.net:8002
Argentoratum,cogito.no-ip.info:8002
Argofantasy,argofantasy.com:8002
Arielles Grid,bound2.ddns.net:8002
ArtDestiny,artdestiny.de:8002
Assassin Guard,assassinguard.opensim.fun:38002
Astralia,astralia.eu:8002
Atlantide,real-3d.zapto.org:8002
Atlantis,209.126.208.163:9023
Atlas Grid,atlasgrid.fr:8002
Ausgrid,login.ausgridds.biz:8002
Avacon,grid.avacon.org:8002
AvatarLand,mikeland.ddns.net:8002
AvatarLife,grid.avatarlife.com:8002
Avie Realm,logon.avierealm.com:8002
AviVerse AlterEgo,aviverse.it:8002
AviWorlds,login.aviworlds.com:8002
Baller Nation,login.ballernation.us:8002
Barefoot Dreamers,login.barefoot-dreamers.com:8002
Beta Technologies,opensim.betatechnologies.info:8002
Blendioptera Grid,blendioptera2.outworldz.net:8002
BloodMoon,bloodmoonpack.com:8002
Bridgemere,bridgemere.outworldz.net:8002
Bridger,bridger.outworldz.net:8002
Caelum Alpha,caelumalpha.outworldz.net:8002
Canadian Grid,canadiangrid.ca:8002
CandM World,grid.candmworld.com:8002
CandorsRPWorld,candorsrpworld.ch:8002
Carima Welt,carima-welt.de:8002
Casperia Prime,casperia.ddns.net:8002
Cat Woman Rose,catwomanrose.de:8002
CLC grid,clcgrid.com:8002
Clone Fantasy,clonefantasy.ovh:8002
Coffee Grid,coffeegrid.net:8002
Concadia,gridconcadia.com:8002
Conectados Grid,conectados.opensim.fun:8802
Cooperation Creative,hg.cc-group.cc:8002
Counter Earth,jand.dyndns.biz:7002
Cozy Comforts Grid,grid.cozycomforts.net:8002
Craft World,craft-world.org:8002
CreaNovale Grid,login.creanovale.ca:8052
Creo Mundos,grid.CreoMundos.com:8002
Czech Welcome Centre,opensim.cz:9000
Dajas Grid,Grid.Daja.at:8002
Dark Heaven,Dark-Heaven.eu:8002
Darkhearts Playground,playground.darkheartsos.com:8002
Decadence,decadence.ddns.net:8002
Deep Playa,rajal.org:9000
DigiWorldz,login.digiworldz.com:8002
Discovery Grid,discoverygrid.net:8002
Doghouse,doghouse.outworldz.net:8002
Dorenas World,dorenas-world.de:8002
DowGrid,dowgridworld.com.br:8002
Dragonz Kin Territories,grid.dragonzkinterritory.org:18002
Dynamic Worldz,grid.dynamicworldz2.com:8822
Dyvall,dyvall.de:8002
E-LIVE Virtual World,world.eliveproject.eu:8002
Edge of Reality Grid,theedgeofreality.ddns.net:8882
EdMondo,slw.indire.it:8002
EducaSim,grid.educasim.es:8002
Endivatomic World,endivatomic.eu:8002
Equinox Grid,equinoxgrid.com:8002
Escape 2 Reality Grid,grid.escape2reality.org:8002
EscapeLands,world.escapelands.com:8002
Esfera Split,split.esferavirtual.com.br:8002
Esfera Virtual,esferavirtual.com.br:8002
Eureka World,grid1.eurekaworld.co.il:8002
EVA Park,evapark.co.uk:8002
Expanse,expanse.outworldz.net:8002
Fae Farms,alanna.outworldz.net:8002
Fearless Mysteries,www.fearlessmysteries.eu:8002
Forgotten Worlds,213.200.254.17:18002
France RP,francerpgrid.fr:8002
Free Life,freelife.outworldz.net:8002
Freedom Grid,freedomgrid.world:8002
Fresh MetaVers,abc.outworldz.net:8002
Freyas Shadow World,213.200.254.17:12002
Friends Grid,login.friends-grid.com:8002
FuoriGrid,fuorigrid.opensim.online:8002
Furry World,Furry-World.de:8002
Gaming Friends,45.138.48.36:8002
GBG World,gbg-world.com:8002
Genesis Roleplay Grid,grid.genesis-roleplay.org:8002
Gentle Fire Grid,gentlefire.opensim.fun:8002
GerGrid,gergrid.de:8002
Ghost Area,ghostarea.com:8002
Goldor Grid,goldor.outworldz.net:8002
Grid Nirvana,grid.gridnirvana.net:4002
Grid Racers,GridRacers.com:8002
GridExperience,hg.gridexperience.com:8002
GridMania,gridmania.outworldz.net:8002
Gridworld,gridworld.de:8002
Groovy Verse,groovyverse.com:8002
Hartland,hartland.ddns.net:8002
Here Grid,here-grid.de:8002
Herederos Grid,herederos.inworldz.net:8002
HG Safari Grid,grid.hgsafari.org:58002
Humble Grid,humble1.outworldz.net:9002
Hypergrid City,login.hypergridcity.com:8002
I Love You Grid,iloveyougrid.net:8002
Icelady Grid,iceladygrid.de:8002
Ignis Fatuus,ignis-fatuus.no-ip.biz:8002
Immersion Tools,grid.suboceana.fr:8002
Imperiya Grid,imperiya.sytes.net:8002
Infinite Grid,grid.infinitegrid.org:8002
Ipsofacto,ipsofacto.ddns.net:8002
JamGrid,jamgrid.de:8002
Japan Open Grid,jogrid.net:8002
Jaytopia,jaytopia.outworldz.net:8002
Joes Place,joesplace.outworldz.net:8002
jOpenSimWorld,grid.jopensim.com:8002
Jungle Friends Grid,junglefriends.opensim.fun:8002
Kater and Friends,kater-and-friends.ddnss.de:8002
Kinky Haven,kinkyhaven.com:8002
Kishaki,kishaki.de:8002
Kitely,grid.kitely.com:8002
Kokomo World,grid.kokomoworld.de:8002
KoolPheller Estates,koolpheller.ddns.net:8002
Kurtopia,Kurtopia.ddns.net:8002
Kyle Archipelago,kylearchipelago.com:8002
La Grilla de Don Javi,donjavi.minigrid.xyz:8002
Ladys Dreamworld,ladysdreamworld.opensim.fun:8002
Lagniappe Grid,hg.lagniappegrid.com:8402
Lanf Of Bree,carlyspencer.ddns.net:9002
Langalfs Demesne,langalfs-demesne.ddns.net:8002
LeBourg,lebourg.lcofrance.org:9000
Life Grid,lifebr.ddns.net:8002
Littlefield,lfgrid.com:8002
LoboWorld,vharmonyarts.com:8016
Logicamp,logicamp.org:8002
Lonetree,centoria.ddns.net:9002
Lost World,lostworld-os.com:8002
MAGA Grid,magagrid.us:8002
Magic Grid,magic-grid.de:8002
Majickal Life,majickallife.com:8002
Mare Grid,mare-grid.de:8002
Maze of The Mind,maze.outworldz.net:8002
Medieval Fantasy,medieval-fantasy.de:8002
Metaverse Concept,login.metaverseconcept.com:8002
Metaverse Dimensions,login.metaversedimensions.com:8002
Midway,midway.outworldz.net:8002
Migrating Coconuts,migratingcoconuts.net:8002
MisFitz Grid,login.misfitzgrid.com:8002
Mobius Grid,main.mobiusgrid.us
Monarch Gardens,monarchgardens.sanctuarygrid.net:8882
Moonlighting Grid,moonlighting.ddns.net:8002
Moonrose,moonrose-grid.de:8002
Morada Grid,moradagrid.com:8002
My Virtual Beach,grid.myvirtualbeach.com:8002
My Virtual Community,my-virtualcommunity.com:8002
Mysterious Grid 2,js-3d.dyndns-server.com:8100
Nabila Grid,nabila-world.de:8002
NakedWorldz,login.nakedworldz.com:8002
Naras Nook,world.narasnook.com:8900
Nemesis 3D,badsworld.com:8002
Neverworld,hg.neverworldgrid.com:8002
New Genres Grid,hg.ngrid.org:8002
New Horizon,newhorizonworld.net:8002
New Life Italy,newlifeitaly.com:8002
NewWorld,newworld.no-ip.org:8002
Next Reality,login.nextreality.uk:8002
Nymphgrid 2 Shopping,2.nymphgrid.com:8002
Oczko,grid.oczko.eu:9000
Offworld,offworld.eu:8002
Omnopolis,omnopolis.com:8002
Open Mind Grid,open-mind-grid.de:8002
Open Virtual Worlds,apollo.cs.st-andrews.ac.uk:8002
OpenManniLand,openmanniland.de:8002
OpenSim Fest,grid.opensimfest.com:8022
OpenSim OCC,cc.opensimulator.org:8002
OSgrid,login.osgrid.org
Otterland,otterland.de:8002
Outworldz,www.outworldz.com:9000
Pangea Grid,pangeagrid.de:8002
Party Destination Grid,partydestinationgrid.com:8002
Perfect Life,grid.perfect-life.ca:8002
Phaandoria Grid,phaandoria.de:8002
Phillips Grid,phillipsworld.outworldz.net:8002
Planet 3L,planet3l.com:9100
Planet Jikan,planetjikan.com:9000
Port Anna,galwendor.ddns.net:8002
Power Angels,power-angels.info:8002
Rennoc World,rennocworld.outworldz.net:8002
Reserected Worlds,reserectedworlds.ddns.net:9000
Rocket World Grid,grid.rocketworld.top:8022
Sciattisi Grid,sciattisigrid.it:8002
Servex Grid,servex-grid.lffl.de:8002
SFgrid,sfgrid.ddnss.org:8002
Sharing Is Caring Family,sharingiscaring.family:8002
Shasiyadynasty,shasiyadynasty.outworldz.net:8002
Sheikah,sheikah.org:8002
Shoalwater Bay,shoalwaterbay.com:8002
SiLi,jadeseas.net:9000
Simation Grid,grid.simation.net:8002
Six Sides,grid.sixsides.net:8002
Solaria,solaria.hopto.org:7002
Soul Grid,soul-grid.de:8002
South Grid,southgrid.ru:8002
Sovaria Estates,connect.sovariaestates.world:8002
SpaceGrid,spacegrid.online:6002
Sparta II,traregan.outworldz.net:8002
SpartaGrid,sparta.outworldz.net:8002
Speculoos,speculoos.world:8002
Stefanies World,stefaniesworld.de:8002
Steg,steg.outworldz.net:9002
SV3D,sv3d.fr:8002
Sweet Life,sweetlife.myftp.org:8002
Swiss Grid,swissgrid.opensim.ch:8002
T-Grid,hg.viewtwo.net:8600
Tag Grid,login.taggrid.online:8002
Tanduria ,hg.tanduria.de:8002
Technic World,technic-world.ddnss.de:8002
TeCoLa,tecola.eu:8002
Tedesco Sims,hajos-welt.de:8002
Tenth Dimension,grid.tenthdimension.org:26002
Terra Nova,terranova.outworldz.net:8002
The Devils Grid,devilsgrid.jessithecat.eu:9000
The E Grid,theegrid.outworldz.net:8002
The Haven Grid,thehavengrid.outworldz.net:9002
The Hub Grid,hg.thehubgrid.com:28002
The Shirls Hypergrid,181.214.240.20:8002
The Verse,theverse.ddns.net:8002
Three Hills Grid,three.hills.grid.outworldz.net:8002
Tlön,albinoni.nexus.it:8002
Tomis World,tomis-world.de:8002
Trianon World,hg.trianon-world.com:18002
Tropical Isle,sailonbye.com:9000
Twilight,twlght.com:8002
Twiztid Timez Grid,hg.twiztidtimezgrid.com:8602
UCI Mondego vLab,nile.ics.uci.edu:9000
Utopia Skye,utopiaskyegrid.com:8002
V.B. Creations,vbcreations.outworldz.net:8002
Vela Dreams,vela-dream.ddnss.de:8002
Vibel,grid.vibel.eu:8002
Vida Dupla,vidadupla.com.br:8002
Virlands,virlands.net:8002
Virtual Business Grid,login.virtualbusinessgrid.com:8002
Virtual Harmony,vharmonyarts.com:9000
Virtual Islands,Virtual-Islands.de:8002
Virtual Learning Village,virtuallearningvillage.org:8002
Virtual Life Brasil,login.virtuallifebrasil.com.br:8002
Virtual Marin,grid.virtualmarin.com:8002
Virtual Vista Metaverse,virtualvistametaverse.com:8002
Virtual World Solutions,vbcreations.outworldz.net:8002/wifi/user/account/
Virtual Worlds Grid,vwc.selfip.net:8002
Virtual Worlds Zone,grid.virtual-worlds.zone:8002
Virtualife,grid.virtualife-grid.it:4577
Virtualife,grid.virtualife-grid.it:4577
Vivec,opensim.vivec.com:9000
Vivo Sim,hg.vivosim.net:8002
VR-ESC,vr-esc.com:8002
WaterSplash,watersplash.inworldz.net:8002
WestWorld Grid,westworldgrid.net:8002
Whispering Willows,hg.whisperingwillows.net:8002
WKD Bucket Grid,wkdbucket.minigrid.xyz:8822
WKDVR,grid.wkdvr.com:8802
Wolf Territories Grid,grid.wolfterritories.org:8002
Wonder,wonder.outworldz.net:8002
Wyldwood Bayou,wyldwoodbayou.com:8002
Xenolandia,xenolandia.de:8002
Xmir,grid.xmir.org:8002
XTalent,209.126.208.161:9023
Yippee Ki-Ay Blues Grid,yippee-ki-ay.com:9003
ZetaWorlds,login.zetaworlds.com
Zirconia,zirconia.ddns.net:8002
Zodiack,zodiack.net:8002
Zone Nations,login.zonenations.com:8002
1 Gridname Gridlink.com:8002
2 3D Worldz www.3dWorldz.com:8002
3 3DLES edugrid.3dles.com:8002
4 4Creative pangea.myftp.org:8002
5 A Dimension Beyond grid.adimensionbeyond.net:8002
6 A Virtual World avirtualworld.org:8002
7 Accueil Dracsoom dracsoom.ddns.net:8002
8 Admeja admeja.bounceme.net:8002
9 Adreans-World adreans-world.from-fl.com:8000
10 Adult Life adult-life.de:8002
11 Aedynar aedynar.com:8002
12 AI Grid ai.let-us.cyou:8002
13 AIRE Mille Flux grid.aire-mille-flux.org:8002
14 Alecia Grid alecianagrid.com:8002
15 Alexa World alexaworld.de:8002
16 Alife Virtual alifevirtual.com:8002
17 Alternate Metaverse alternatemetaverse.com:8002
18 Alterworld Grid hg.alterworld.us:7002
19 AmaziWorld login.amaziworld.com:8002
20 Angel Souls angel-souls.de:8002
21 Ankabi ankabi.de:8002
22 Ansjela Grid hg.ansjelagrid.com:28002
23 AnSky login.anskygrid.ca:8002
24 Arcadia Asylum arcadiaasylum.org:8002
25 Ardalia ardiva.ddns.net:8002
26 Ardiva ardiva.ddns.net:8002
27 Ares World aresworld.outworldz.net:8002
28 Argentoratum cogito.no-ip.info:8002
29 Argofantasy argofantasy.com:8002
30 Arielle’s Grid bound2.ddns.net:8002
31 ArtDestiny artdestiny.de:8002
32 Assassin Guard assassinguard.opensim.fun:38002
33 Astralia astralia.eu:8002
34 Atlantide real-3d.zapto.org:8002
35 Atlantis 209.126.208.163:9023
36 Atlas Grid atlasgrid.fr:8002
37 Ausgrid login.ausgridds.biz:8002
38 Avacon grid.avacon.org:8002
39 AvatarLand mikeland.ddns.net:8002
40 AvatarLife grid.avatarlife.com:8002
41 Avie Realm logon.avierealm.com:8002
42 AviVerse AlterEgo aviverse.it:8002
43 AviWorlds login.aviworlds.com:8002
44 Baller Nation login.ballernation.us:8002
45 Barefoot Dreamers login.barefoot-dreamers.com:8002
46 Beta Technologies opensim.betatechnologies.info:8002
47 Blendioptera Grid blendioptera2.outworldz.net:8002
48 BloodMoon bloodmoonpack.com:8002
49 Bridgemere bridgemere.outworldz.net:8002
50 Bridger bridger.outworldz.net:8002
51 Caelum Alpha caelumalpha.outworldz.net:8002
52 Canadian Grid canadiangrid.ca:8002
53 CandM World grid.candmworld.com:8002
54 CandorsRPWorld candorsrpworld.ch:8002
55 Carima Welt carima-welt.de:8002
56 Casperia Prime casperia.ddns.net:8002
57 Cat Woman Rose catwomanrose.de:8002
58 CLC grid clcgrid.com:8002
59 Clone Fantasy clonefantasy.ovh:8002
60 Coffee Grid coffeegrid.net:8002
61 Concadia gridconcadia.com:8002
62 Conectados Grid conectados.opensim.fun:8802
63 Cooperation Creative hg.cc-group.cc:8002
64 Counter Earth jand.dyndns.biz:7002
65 Cozy Comforts Grid grid.cozycomforts.net:8002
66 Craft World craft-world.org:8002
67 CreaNovale Grid login.creanovale.ca:8052
68 Creo Mundos grid.CreoMundos.com:8002
69 Czech Welcome Centre opensim.cz:9000
70 Dajas Grid Grid.Daja.at:8002
71 Dark Heaven Dark-Heaven.eu:8002
72 Darkheart’s Playground playground.darkheartsos.com:8002
73 Decadence decadence.ddns.net:8002
74 Deep Playa rajal.org:9000
75 DigiWorldz login.digiworldz.com:8002
76 Discovery Grid discoverygrid.net:8002
77 Doghouse doghouse.outworldz.net:8002
78 Dorena’s World dorenas-world.de:8002
79 DowGrid dowgridworld.com.br:8002
80 Dragonz Kin Territories grid.dragonzkinterritory.org:18002
81 Dynamic Worldz grid.dynamicworldz2.com:8822
82 Dyvall dyvall.de:8002
83 E-LIVE Virtual World world.eliveproject.eu:8002
84 Edge of Reality Grid theedgeofreality.ddns.net:8882
85 EdMondo slw.indire.it:8002
86 EducaSim grid.educasim.es:8002
87 Endivatomic World endivatomic.eu:8002
88 Equinox Grid equinoxgrid.com:8002
89 Escape 2 Reality Grid grid.escape2reality.org:8002
90 EscapeLands world.escapelands.com:8002
91 Esfera Split split.esferavirtual.com.br:8002
92 Esfera Virtual esferavirtual.com.br:8002
93 Eureka World grid1.eurekaworld.co.il:8002
94 EVA Park evapark.co.uk:8002
95 Expanse expanse.outworldz.net:8002
96 Fae Farms alanna.outworldz.net:8002
97 Fearless Mysteries www.fearlessmysteries.eu:8002
98 Forgotten Worlds 213.200.254.17:18002
99 France RP francerpgrid.fr:8002
100 Free Life freelife.outworldz.net:8002
101 Freedom Grid freedomgrid.world:8002
102 Fresh MetaVers abc.outworldz.net:8002
103 Freya’s Shadow World 213.200.254.17:12002
104 Friends Grid login.friends-grid.com:8002
105 FuoriGrid fuorigrid.opensim.online:8002
106 Furry World Furry-World.de:8002
107 Gaming Friends 45.138.48.36:8002
108 GBG World gbg-world.com:8002
109 Genesis Roleplay Grid grid.genesis-roleplay.org:8002
110 Gentle Fire Grid gentlefire.opensim.fun:8002
111 GerGrid gergrid.de:8002
112 Ghost Area ghostarea.com:8002
113 Goldor Grid goldor.outworldz.net:8002
114 Grid Nirvana grid.gridnirvana.net:4002
115 Grid Racers GridRacers.com:8002
116 GridExperience hg.gridexperience.com:8002
117 GridMania gridmania.outworldz.net:8002
118 Gridworld gridworld.de:8002
119 Groovy Verse groovyverse.com:8002
120 Hartland hartland.ddns.net:8002
121 Here Grid here-grid.de:8002
122 Herederos Grid herederos.inworldz.net:8002
123 HG Safari Grid grid.hgsafari.org:58002
124 Humble Grid humble1.outworldz.net:9002
125 Hypergrid City login.hypergridcity.com:8002
126 I Love You Grid iloveyougrid.net:8002
127 Icelady Grid iceladygrid.de:8002
128 Ignis Fatuus ignis-fatuus.no-ip.biz:8002
129 Immersion Tools grid.suboceana.fr:8002
130 Imperiya Grid imperiya.sytes.net:8002
131 Infinite Grid grid.infinitegrid.org:8002
132 Ipsofacto ipsofacto.ddns.net:8002
133 JamGrid jamgrid.de:8002
134 Japan Open Grid jogrid.net:8002
135 Jaytopia jaytopia.outworldz.net:8002
136 Joe’s Place joesplace.outworldz.net:8002
137 jOpenSimWorld grid.jopensim.com:8002
138 Jungle Friends Grid junglefriends.opensim.fun:8002
139 Kater and Friends kater-and-friends.ddnss.de:8002
140 Kinky Haven kinkyhaven.com:8002
141 Kishaki kishaki.de:8002
142 Kitely grid.kitely.com:8002
143 Kokomo World grid.kokomoworld.de:8002
144 KoolPheller Estates koolpheller.ddns.net:8002
145 Kurtopia Kurtopia.ddns.net:8002
146 Kyle Archipelago kylearchipelago.com:8002
147 La Grilla de Don Javi donjavi.minigrid.xyz:8002
148 Lady’s Dreamworld ladysdreamworld.opensim.fun:8002
149 Lagniappe Grid hg.lagniappegrid.com:8402
150 Lanf Of Bree carlyspencer.ddns.net:9002
151 Langalf’s Demesne langalfs-demesne.ddns.net:8002
152 LeBourg lebourg.lcofrance.org:9000
153 Life Grid lifebr.ddns.net:8002
154 Littlefield lfgrid.com:8002
155 LoboWorld vharmonyarts.com:8016
156 Logicamp logicamp.org:8002
157 Lonetree centoria.ddns.net:9002
158 Lost World lostworld-os.com:8002
159 MAGA Grid magagrid.us:8002
160 Magic Grid magic-grid.de:8002
161 Majickal Life majickallife.com:8002
162 Mare Grid mare-grid.de:8002
163 Maze of The Mind maze.outworldz.net:8002
164 Medieval Fantasy medieval-fantasy.de:8002
165 Metaverse Concept login.metaverseconcept.com:8002
166 Metaverse Dimensions login.metaversedimensions.com:8002
167 Midway midway.outworldz.net:8002
168 Migrating Coconuts migratingcoconuts.net:8002
169 MisFitz Grid login.misfitzgrid.com:8002
170 Mobius Grid main.mobiusgrid.us
171 Monarch Gardens monarchgardens.sanctuarygrid.net:8882
172 Moonlighting Grid moonlighting.ddns.net:8002
173 Moonrose moonrose-grid.de:8002
174 Morada Grid moradagrid.com:8002
175 My Virtual Beach grid.myvirtualbeach.com:8002
176 My Virtual Community my-virtualcommunity.com:8002
177 Mysterious Grid 2 js-3d.dyndns-server.com:8100
178 Nabila Grid nabila-world.de:8002
179 NakedWorldz login.nakedworldz.com:8002
180 Naras Nook world.narasnook.com:8900
181 Nemesis 3D badsworld.com:8002
182 Neverworld hg.neverworldgrid.com:8002
183 New Genres Grid hg.ngrid.org:8002
184 New Horizon newhorizonworld.net:8002
185 New Life Italy newlifeitaly.com:8002
186 NewWorld newworld.no-ip.org:8002
187 Next Reality login.nextreality.uk:8002
188 Nymphgrid 2 Shopping 2.nymphgrid.com:8002
189 Oczko grid.oczko.eu:9000
190 Offworld offworld.eu:8002
191 Omnopolis omnopolis.com:8002
192 Open Mind Grid open-mind-grid.de:8002
193 Open Virtual Worlds apollo.cs.st-andrews.ac.uk:8002
194 OpenManniLand openmanniland.de:8002
195 OpenSim Fest grid.opensimfest.com:8022
196 OpenSim OCC cc.opensimulator.org:8002
197 OSgrid login.osgrid.org
198 Otterland otterland.de:8002
199 Outworldz www.outworldz.com:9000
200 Pangea Grid pangeagrid.de:8002
201 Party Destination Grid partydestinationgrid.com:8002
202 Perfect Life grid.perfect-life.ca:8002
203 Phaandoria Grid phaandoria.de:8002
204 Phillip’s Grid phillipsworld.outworldz.net:8002
205 Planet 3L planet3l.com:9100
206 Planet Jikan planetjikan.com:9000
207 Port Anna galwendor.ddns.net:8002
208 Power Angels power-angels.info:8002
209 Rennoc World rennocworld.outworldz.net:8002
210 Reserected Worlds reserectedworlds.ddns.net:9000
211 Rocket World Grid grid.rocketworld.top:8022
212 Sciattisi Grid sciattisigrid.it:8002
213 Servex Grid servex-grid.lffl.de:8002
214 SFgrid sfgrid.ddnss.org:8002
215 Sharing Is Caring Family sharingiscaring.family:8002
216 Shasiyadynasty shasiyadynasty.outworldz.net:8002
217 Sheikah sheikah.org:8002
218 Shoalwater Bay shoalwaterbay.com:8002
219 SiLi jadeseas.net:9000
220 Simation Grid grid.simation.net:8002
221 Six Sides grid.sixsides.net:8002
222 Solaria solaria.hopto.org:7002
223 Soul Grid soul-grid.de:8002
224 South Grid southgrid.ru:8002
225 Sovaria Estates connect.sovariaestates.world:8002
226 SpaceGrid spacegrid.online:6002
227 Sparta II traregan.outworldz.net:8002
228 SpartaGrid sparta.outworldz.net:8002
229 Speculoos speculoos.world:8002
230 Stefanies World stefaniesworld.de:8002
231 Steg steg.outworldz.net:9002
232 SV3D sv3d.fr:8002
233 Sweet Life sweetlife.myftp.org:8002
234 Swiss Grid swissgrid.opensim.ch:8002
235 T-Grid hg.viewtwo.net:8600
236 Tag Grid login.taggrid.online:8002
237 Tanduria hg.tanduria.de:8002
238 Technic World technic-world.ddnss.de:8002
239 TeCoLa tecola.eu:8002
240 Tedesco Sim’s hajos-welt.de:8002
241 Tenth Dimension grid.tenthdimension.org:26002
242 Terra Nova terranova.outworldz.net:8002
243 The Devil’s Grid devilsgrid.jessithecat.eu:9000
244 The E Grid theegrid.outworldz.net:8002
245 The Haven Grid thehavengrid.outworldz.net:9002
246 The Hub Grid hg.thehubgrid.com:28002
247 The Shirls Hypergrid 181.214.240.20:8002
248 The Verse theverse.ddns.net:8002
249 Three Hills Grid three.hills.grid.outworldz.net:8002
250 Tlön albinoni.nexus.it:8002
251 Tomi’s World tomis-world.de:8002
252 Trianon World hg.trianon-world.com:18002
253 Tropical Isle sailonbye.com:9000
254 Twilight twlght.com:8002
255 Twiztid Timez Grid hg.twiztidtimezgrid.com:8602
256 UCI Mondego vLab nile.ics.uci.edu:9000
257 Utopia Skye utopiaskyegrid.com:8002
258 V.B. Creations vbcreations.outworldz.net:8002
259 Vela Dreams vela-dream.ddnss.de:8002
260 Vibel grid.vibel.eu:8002
261 Vida Dupla vidadupla.com.br:8002
262 Virlands virlands.net:8002
263 Virtual Business Grid login.virtualbusinessgrid.com:8002
264 Virtual Harmony vharmonyarts.com:9000
265 Virtual Islands Virtual-Islands.de:8002
266 Virtual Learning Village virtuallearningvillage.org:8002
267 Virtual Life Brasil login.virtuallifebrasil.com.br:8002
268 Virtual Marin grid.virtualmarin.com:8002
269 Virtual Vista Metaverse virtualvistametaverse.com:8002
270 Virtual World Solutions vbcreations.outworldz.net:8002/wifi/user/account/
271 Virtual Worlds Grid vwc.selfip.net:8002
272 Virtual Worlds Zone grid.virtual-worlds.zone:8002
273 Virtualife grid.virtualife-grid.it:4577
274 Virtualife grid.virtualife-grid.it:4577
275 Vivec opensim.vivec.com:9000
276 Vivo Sim hg.vivosim.net:8002
277 VR-ESC vr-esc.com:8002
278 WaterSplash watersplash.inworldz.net:8002
279 WestWorld Grid westworldgrid.net:8002
280 Whispering Willows hg.whisperingwillows.net:8002
281 WKD Bucket Grid wkdbucket.minigrid.xyz:8822
282 WKDVR grid.wkdvr.com:8802
283 Wolf Territories Grid grid.wolfterritories.org:8002
284 Wonder wonder.outworldz.net:8002
285 Wyldwood Bayou wyldwoodbayou.com:8002
286 Xenolandia xenolandia.de:8002
287 Xmir grid.xmir.org:8002
288 XTalent 209.126.208.161:9023
289 Yippee Ki-Ay Blues Grid yippee-ki-ay.com:9003
290 ZetaWorlds login.zetaworlds.com
291 Zirconia zirconia.ddns.net:8002
292 Zodiack zodiack.net:8002
293 Zone Nations login.zonenations.com:8002
+4
View File
@@ -0,0 +1,4 @@
<?php
require_once 'config.php';
include HEADER_FILE;
?>
+111
View File
@@ -0,0 +1,111 @@
<?php
require_once 'config.php';
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php echo $title; ?></title>
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<header class="bg-primary text-white p-3">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="index.php"><?php echo SITE_NAME; ?></a>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<li class="nav-item">
<button class="btn btn-sm btn-secondary color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
</div>
</div>
</nav>
<div class="container mt-5">
<!-- Inhalt der Seite -->
</div>
<footer class="bg-dark text-white text-center py-3">
&copy; <?php echo date('Y'); ?> <?php echo SITE_NAME; ?>
</footer>
</body>
</html>
+104
View File
@@ -0,0 +1,104 @@
<?php
require_once 'config.php';
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body>
<nav>
<div>
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</nav>
</body>
</html>
<footer>
</footer>
</body>
</html>
+113
View File
@@ -0,0 +1,113 @@
<?php
require_once 'config.php';
// Foundation CSS-Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://cdn.jsdelivr.net/npm/foundation-sites@6.6.3/dist/css/foundation.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 60vw;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body class="grid-container">
<header class="grid-x grid-padding-x align-center">
<div class="cell small-12 text-center">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</div>
</header>
<nav class="grid-x grid-padding-x align-center">
<div class="cell small-12 text-center">
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="grid-x grid-padding-x align-center">
<div class="cell small-12 text-center">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/foundation-sites@6.6.3/dist/js/foundation.min.js"></script>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<?php
require_once 'config.php';
// Materialize CSS-Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 38%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 75%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body class="container">
<header class="center-align">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="center-align">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button btn" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="center-align">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<?php
require_once 'config.php';
// Primer CSS Design System Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://unpkg.com/@primer/css/dist/primer.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body class="bg-secondary-color color-primary">
<header class="text-center p-3">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="text-center p-3">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button btn m-1" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="text-center p-3">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+112
View File
@@ -0,0 +1,112 @@
<?php
require_once 'config.php';
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body>
<header>
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav>
<div>
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</nav>
<div class="container">
<!-- Inhalt der Seite -->
</div>
</body>
</html>
<footer>
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+109
View File
@@ -0,0 +1,109 @@
<?php
require_once 'config.php';
// Spectre CSS-Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://unpkg.com/spectre.css/dist/spectre.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body>
<header class="navbar">
<section class="navbar-section">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</section>
</header>
<nav class="nav">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="btn btn-primary color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="footer">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<?php
require_once 'config.php';
// Tachyons CSS Toolkit Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://unpkg.com/tachyons@4.12.0/css/tachyons.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body class="bg-secondary-color primary-color">
<header class="pa3 tc">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="pa3 tc">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button pa2" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="pa3 tc">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<?php
require_once 'config.php';
// Tailwind CSS Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body class="bg-secondary-color text-primary-color">
<header class="bg-header-color p-4 text-center text-white">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="bg-header-color p-4 text-center">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button bg-primary-color text-white m-2 p-2 rounded" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="bg-footer-color p-4 text-center text-white">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<?php
require_once 'config.php';
//Tent CSS-Framework
?>
<!DOCTYPE html>
<html lang="de">
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link href="https://unpkg.com/tent-css@0.5.8/dist/tent.min.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
nav a {
margin: 0 10px;
color: white;
text-decoration: none;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body>
<header class="header">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="nav">
<div>
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<footer class="footer">
<p>&copy; <?php echo date("Y"); ?> <?php echo SITE_NAME; ?>. Alle Rechte vorbehalten.</p>
</footer>
</body>
</html>
+104
View File
@@ -0,0 +1,104 @@
<?php
require_once 'config.php';
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php echo $title; ?></title>
<link rel="icon" type="image/x-icon" href="include/favicon.ico">
<link href="https://www.w3schools.com/w3css/4/w3.css" rel="stylesheet">
<style>
body {
font-family: <?php echo FONT_FAMILY; ?>;
background-color: var(--secondary-color);
color: var(--primary-color);
background-image: url(<?php echo BACKGROUND_IMAGE; ?>);
background-size: cover;
background-repeat: no-repeat;
background-position: center;
height: 100vh;
width: 100vw;
opacity: <?php echo defined('BACKGROUND_OPACITY') ? BACKGROUND_OPACITY : 1; ?>;
}
header {
background-color: var(--header-color);
padding: 10px;
text-align: center;
color: white;
}
footer {
background-color: var(--footer-color);
margin: 0;
padding: 0;
text-align: center;
color: white;
position: fixed;
width: 100%;
bottom: 0;
line-height: 0;
}
.container {
background-image: url(<?php echo FOREGROUND_IMAGE; ?>);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
padding: 20px;
border-radius: 8px;
opacity: <?php echo defined('FOREGROUND_OPACITY') ? FOREGROUND_OPACITY : 1; ?>;
}
.color-button {
margin: 1px;
padding: 1px;
border: none;
cursor: pointer;
border-radius: 4px;
font-size: 10px;
color: white;
}
</style>
<script>
const colorSchemes = <?php echo json_encode($colorSchemes); ?>;
function setColorScheme(scheme) {
document.documentElement.style.setProperty('--header-color', colorSchemes[scheme].header);
document.documentElement.style.setProperty('--footer-color', colorSchemes[scheme].footer);
document.documentElement.style.setProperty('--secondary-color', colorSchemes[scheme].secondary);
document.documentElement.style.setProperty('--primary-color', colorSchemes[scheme].primary);
}
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.color-button').forEach(function(button) {
button.addEventListener('click', function() {
setColorScheme(this.dataset.scheme);
});
});
// Set the initial color scheme
setColorScheme('<?php echo INITIAL_COLOR_SCHEME; ?>');
});
</script>
</head>
<body>
<header class="w3-container w3-blue w3-center w3-padding-16">
<h1>Welcome to <?php echo SITE_NAME; ?></h1>
</header>
<nav class="w3-bar w3-dark-grey">
<a class="w3-bar-item w3-button w3-left" href="index.php"><?php echo SITE_NAME; ?></a>
<div class="w3-right">
<?php if (SHOW_COLOR_BUTTONS): ?>
<?php foreach ($colorSchemes as $scheme => $colors): ?>
<button class="w3-button w3-small w3-margin color-button" data-scheme="<?php echo $scheme; ?>" style="background-color: <?php echo $colors['header']; ?>;"><?php echo ucfirst($scheme); ?></button>
<?php endforeach; ?>
<?php endif; ?>
</div>
</nav>
<div class="w3-container w3-card-4 w3-light-grey w3-padding-16">
<!-- Inhalt der Seite -->
</div>
<footer class="w3-container w3-dark-grey w3-center w3-padding-16">
&copy; <?php echo date('Y'); ?> <?php echo SITE_NAME; ?>
</footer>
</body>
</html>
+37
View File
@@ -0,0 +1,37 @@
<?php
// Konfiguration einbinden
include_once "include/config.php";
// Überprüfen, ob der Parameter 'image_url' übergeben wurde
$image_url = isset($_GET['image_url']) ? $_GET['image_url'] : '';
// Sicherstellen, dass eine URL vorhanden ist
if (empty($image_url)) {
die('Kein Bild-URL angegeben!');
}
// Bild aus der URL holen
$image_data = file_get_contents($image_url);
// Wenn das Bild nicht geladen werden konnte
if ($image_data === false) {
die('Fehler beim Laden des Bildes!');
}
// Mit Imagick das Bild in das gewünschte Format konvertieren
try {
$imagick = new Imagick();
$imagick->readImageBlob($image_data);
// Prüfen, ob es ein JP2-Bild ist und konvertiere es zu JPG
if ($imagick->getImageFormat() == 'JPEG2000') {
$imagick->setImageFormat('jpg'); // Konvertierung zu JPG
}
// Bild an den Browser ausgeben
header('Content-Type: image/jpeg'); // JPG-MIME-Typ für JPG-Bilder
echo $imagick->getImageBlob();
} catch (Exception $e) {
die('Fehler beim Konvertieren des Bildes: ' . $e->getMessage());
}
?>
+50
View File
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>403 - Forbidden</title>
<style>
body {
background-color: #f8f9fa;
color: #343a40;
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.center {
text-align: center;
}
.center h1 {
font-size: 5rem;
color: #dc3545;
}
.center p {
font-size: 1.25rem;
}
.center a {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background-color: #007bff;
color: white;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s;
}
.center a:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="center">
<h1>403</h1>
<p>Nicht öffentlicher Bereich.</p>
<a href="/">Zurück zur Startseite</a>
</div>
</body>
</html>
+63
View File
@@ -0,0 +1,63 @@
<?php
$title = "Password Service";
include_once 'header.php';
// Passwortgenerator-Funktion
function generatePassword($length = 16) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$charactersLength = strlen($characters);
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $characters[random_int(0, $charactersLength - 1)];
}
return $password;
}
// Generiere Passwörter für das Register-Array
$registration_passwords_register = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_reset = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_partner = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_inventory = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_datatable = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_listinventar = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_picreader = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_mutelist = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_avatarpicker = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_economy = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
$registration_passwords_events = [generatePassword(), generatePassword(), generatePassword(), generatePassword(), generatePassword()];
?>
<html>
<style>
.container {
max-width: 1000px;
margin: 0 auto;
padding: 20px;
Color:rgb(31, 31, 31);
background-color:rgb(238, 241, 241);
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
</style>
<main class="container">
<h1>Generierte Passwörter</h1>
<pre>
<?php
echo '$registration_passwords_register = ["' . implode('", "', $registration_passwords_register) . '"];' . PHP_EOL;
echo '$registration_passwords_reset = ["' . implode('", "', $registration_passwords_reset) . '"];' . PHP_EOL;
echo '$registration_passwords_partner = ["' . implode('", "', $registration_passwords_partner) . '"];' . PHP_EOL;
echo '$registration_passwords_inventory = ["' . implode('", "', $registration_passwords_inventory) . '"];' . PHP_EOL;
echo '$registration_passwords_datatable = ["' . implode('", "', $registration_passwords_datatable) . '"];' . PHP_EOL;
echo '$registration_passwords_listinventar = ["' . implode('", "', $registration_passwords_listinventar) . '"];' . PHP_EOL;
echo '$registration_passwords_picreader = ["' . implode('", "', $registration_passwords_picreader) . '"];' . PHP_EOL;
echo '$registration_passwords_mutelist = ["' . implode('", "', $registration_passwords_mutelist) . '"];' . PHP_EOL;
echo '$registration_passwords_avatarpicker = ["' . implode('", "', $registration_passwords_avatarpicker) . '"];' . PHP_EOL;
echo '$registration_passwords_economy = ["' . implode('", "', $registration_passwords_economy) . '"];' . PHP_EOL;
echo '$registration_passwords_events = ["' . implode('", "', $registration_passwords_events) . '"];' . PHP_EOL;
?>
</pre>
</main>
</html>
+61
View File
@@ -0,0 +1,61 @@
<?php
include_once "config.php";
// JSON-Datei einlesen
$events = json_decode(file_get_contents('../calendar/events.json'), true);
// Header setzen, um den Content-Type auf XML zu setzen
header("Content-Type: application/rss+xml; charset=UTF-8");
// Nächsten Termin auswählen
$currentDate = date('Y-m-d');
$nextEvent = null;
foreach ($events as $event) {
if ($event['date'] >= $currentDate) {
$nextEvent = $event;
break;
}
}
// RSS-Feed beginnen
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<rss version="2.0">
<channel>
<title><?php echo CALENDAR_TITLE; ?></title>
<link><?php echo BASE_URL; ?></link>
<description>RSS-Feed mit Kalenderereignissen</description>
<language>de-de</language>
<?php if ($nextEvent): ?>
<item>
<title>
<?php
// Überprüfen, ob das 'title'-Feld existiert
if (isset($nextEvent['title'])) {
echo htmlspecialchars($nextEvent['title']);
} else {
echo htmlspecialchars($nextEvent['texts'][0]);
}
?>
</title>
<link><?php echo htmlspecialchars($nextEvent['link']); ?></link>
<description>
<?php
// Überprüfen, ob das 'description'-Feld existiert
if (isset($nextEvent['description'])) {
echo htmlspecialchars($nextEvent['description']);
} else {
echo htmlspecialchars(join(', ', array_slice($nextEvent['texts'], 1)));
}
?>
</description>
<pubDate><?php echo date('r', strtotime($nextEvent['date'])); ?></pubDate>
<?php if (isset($nextEvent['image'])): ?>
<image><?php echo htmlspecialchars(BASE_URL . $nextEvent['image']); ?></image>
<?php endif; ?>
</item>
<?php endif; ?>
</channel>
</rss>
+324
View File
@@ -0,0 +1,324 @@
<?php
$title = "TOS";
include 'header.php';
// Sprachauswahl (Standard: Deutsch)
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'de';
// Platzhalter-Werte setzen
$variables = [
"DEIN GRID-NAME" => "Virtual " . SITE_NAME . " Grid",
"DATUM" => date("d.m.Y"),
"DEINE EMAIL" => "support@" . SITE_NAME . ".com",
"DEINE POSTADRESSE" => "Musterstraße 123, 12345 Musterstadt",
"OPTIONAL" => "Discord: GridSupport" . BASE_URL,
"DEINE KONTAKT-EMAIL" => "kontakt@" . SITE_NAME . ".com"
];
?>
<style>
.markdown-content {
max-width: 800px;
margin: 0 auto;
padding: 20px;
color: rgb(31, 31, 31); /* Korrektur: 'color' statt 'Color' */
background-color: rgb(238, 241, 241);
border: 1px solid #ddd;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.language-switcher {
text-align: right;
margin-bottom: 20px;
}
.language-switcher a {
text-decoration: none;
color: #007BFF;
margin: 0 5px;
}
.language-switcher a:hover {
text-decoration: underline;
}
code {
background-color: #f4f4f4;
padding: 2px 5px;
border-radius: 3px;
font-family: monospace;
}
</style>
<div class="language-switcher">
<a href="?lang=de">Deutsch</a> | <a href="?lang=en">English</a>
</div>
<?php
function replacePlaceholders($text, $variables = []) {
foreach ($variables as $key => $value) {
$text = str_replace("[$key]", $value, $text);
}
return $text;
}
function simpleMarkdownToHTML($text) {
// Zeilenumbrüche umwandeln
$text = nl2br($text);
// Fettdruck **text** -> <strong>text</strong>
$text = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $text);
// Kursiv *text* -> <em>text</em>
$text = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $text);
// Überschriften # -> <h1>, ## -> <h2> usw.
for ($i = 6; $i >= 1; $i--) {
$text = preg_replace('/^' . str_repeat('#', $i) . '\s*(.*?)$/m', "<h$i>$1</h$i>", $text);
}
// Links [Text](URL) -> <a href="URL">Text</a>
$text = preg_replace('/\[(.*?)\]\((.*?)\)/', '<a href="$2">$1</a>', $text);
// Inline-Code `text` -> <code>text</code>
$text = preg_replace('/`(.*?)`/', '<code>$1</code>', $text);
return $text;
}
// Deutsche TOS
$tosTextDE = "
# **Terms of Service für [DEIN GRID-NAME]**
**(Nutzungsbedingungen)**
**Letzte Aktualisierung:** [DATUM]
Willkommen bei **[DEIN GRID-NAME]**! Diese Nutzungsbedingungen regeln deine Nutzung unserer virtuellen Welt,
die auf OpenSimulator basiert. Durch die Registrierung und Nutzung unseres Dienstes stimmst du diesen Bedingungen zu.
Falls du nicht einverstanden bist, darfst du unser Grid nicht nutzen.
---
## **1. Allgemeine Bestimmungen**
1.1 **Geltungsbereich:** Diese Bedingungen gelten für alle Nutzer unseres OpenSimulator-Grids, einschließlich Gäste und registrierte Benutzer.
1.2 **Änderungen:** Wir behalten uns das Recht vor, diese Bedingungen jederzeit zu ändern. Änderungen treten mit ihrer Veröffentlichung auf unserer Webseite in Kraft.
1.3 **Zustimmung:** Mit der Nutzung unseres Grids erklärst du dich mit den aktuellen Nutzungsbedingungen einverstanden.
---
## **2. Benutzerkonten und Zugang**
2.1 **Registrierung:**
- Du musst mindestens **[ALTER, z. B. 16]** Jahre alt sein, um ein Konto zu erstellen.
- Die Angabe korrekter und vollständiger Informationen ist erforderlich.
- Pro Person ist nur ein Benutzerkonto erlaubt, es sei denn, wir gestatten ausdrücklich mehrere Konten.
2.2 **Sicherheit deines Kontos:**
- Du bist für die Sicherheit deines Kontos und Passworts verantwortlich.
- Falls du einen unbefugten Zugriff auf dein Konto vermutest, informiere uns umgehend.
2.3 **Konto-Sperrung & Löschung:**
- Wir behalten uns das Recht vor, dein Konto zu sperren oder zu löschen, wenn du gegen diese TOS verstößt.
- Inaktive Konten können nach **[z. B. 6 Monaten]** ohne Vorwarnung gelöscht werden.
---
## **3. Virtuelle Inhalte und Wirtschaftssystem**
3.1 **Eigentum an Inhalten:**
- Inhalte, die du erstellst oder hochlädst, bleiben dein geistiges Eigentum.
- Du gewährst uns jedoch das Recht, deine Inhalte innerhalb des Grids zu nutzen, zu hosten und zu verwalten.
3.2 **Urheberrechte und Lizenzierung:**
- Es ist verboten, urheberrechtlich geschützte Inhalte ohne Erlaubnis hochzuladen.
- Falls ein Nutzer Urheberrechte verletzt, behalten wir uns vor, den Inhalt zu entfernen und das Konto zu sperren.
3.3 **Virtuelle Währung & Transaktionen:**
- Falls unser Grid eine virtuelle Währung verwendet (**z. B. Gloebits, Podex, OMC**), erkennst du an, dass diese keinen echten Geldwert hat.
- Wir übernehmen keine Verantwortung für Verluste oder technische Fehler im Zusammenhang mit virtuellen Währungen oder Transaktionen.
---
## **4. Verhaltensregeln**
4.1 **Erlaubte und verbotene Inhalte:**
- Keine **Belästigung, Hassrede, rassistischen oder sexuell expliziten Inhalte**, die gegen geltendes Recht verstoßen.
- Kein **Spam, Betrug oder das Nachahmen anderer Nutzer/Admins**.
- Kein **Hacking, Griefing oder das Stören anderer Nutzer** durch Skripte, Exploits oder Angriffe.
4.2 **Regionale und Parzellenregeln:**
- Eigentümer von Regionen/Parzellen dürfen eigene Regeln festlegen, solange sie nicht gegen diese TOS verstoßen.
- Admins behalten sich das Recht vor, störende Inhalte oder Regionen zu entfernen.
---
## **5. Datenschutz und Datenspeicherung**
5.1 **Gespeicherte Daten:**
- Wir speichern deine Account-Informationen, IP-Adresse, Avatar-Daten und In-World-Interaktionen für administrative Zwecke.
- Persönliche Daten werden nicht an Dritte weitergegeben, es sei denn, es besteht eine gesetzliche Verpflichtung.
5.2 **Nutzung von Drittanbietern:**
- Falls unser Grid externe Dienste wie **Hypergrid-Teleports, Gloebits oder PayPal** verwendet, gelten deren Datenschutzrichtlinien zusätzlich.
- Beim Verlassen unseres Grids über Hypergrid-Teleports können deine Daten von anderen Grids verarbeitet werden.
---
## **6. DMCA-Richtlinie (Urheberrechtsschutz)**
Falls du glaubst, dass Inhalte in unserem Grid gegen dein Urheberrecht verstoßen, kannst du eine **DMCA-Beschwerde** einreichen:
### **6.1 Wie du eine DMCA-Meldung einreichst:**
Sende eine schriftliche Beschwerde an **[DEINE KONTAKT-EMAIL]** mit folgenden Angaben:
1. Eine Beschreibung des geschützten Werkes, das verletzt wurde.
2. Die genaue Position des beanstandeten Inhalts (Region, Koordinaten, UUID, Screenshots).
3. Deine Kontaktdaten (Name, E-Mail, Adresse, Telefonnummer).
4. Eine Erklärung, dass du in gutem Glauben handelst und der Inhalt unrechtmäßig verwendet wird.
5. Eine eidesstattliche Versicherung, dass deine Angaben korrekt sind.
### **6.2 Reaktion auf DMCA-Meldungen:**
- Wir werden überprüfte Verstöße entfernen.
- Falls du fälschlicherweise als Urheberrechtsverletzer gemeldet wurdest, kannst du eine Gegendarstellung einreichen.
---
## **7. Haftungsausschluss und Beendigung des Dienstes**
7.1 **Haftungsausschluss:**
- Unser Grid wird wie besehen zur Verfügung gestellt. Wir garantieren keine **störungsfreie, fehlerfreie oder ununterbrochene Nutzung**.
- Wir haften nicht für **Datenverluste, Hacks oder technische Probleme**.
7.2 **Beendigung des Dienstes:**
- Wir behalten uns das Recht vor, das Grid oder Teile davon jederzeit einzustellen.
- Bei einer Schließung gibt es keinen Anspruch auf Erstattung virtueller Guthaben oder Inhalte.
---
## **8. Kontakt**
Falls du Fragen zu diesen Nutzungsbedingungen hast, kannst du uns unter **[DEINE KONTAKT-EMAIL]** erreichen.
---
### **Akzeptanz der Nutzungsbedingungen**
Mit der Nutzung von **[DEIN GRID-NAME]** erklärst du dich mit diesen Nutzungsbedingungen einverstanden. Falls du nicht einverstanden bist, verlasse das Grid und lösche dein Konto.
";
// Englische TOS (kann später hinzugefügt werden)
$tosTextEN = "
# **Terms of Service for [DEIN GRID-NAME]**
**Last Updated:** [DATUM]
Welcome to **[DEIN GRID-NAME]**! These Terms of Service govern your use of our virtual world,
which is based on OpenSimulator. By registering and using our service, you agree to these terms.
If you do not agree, you may not use our grid.
---
## **1. General Provisions**
1.1 **Scope:** These terms apply to all users of our OpenSimulator grid, including guests and registered users.
1.2 **Changes:** We reserve the right to change these terms at any time. Changes take effect upon publication on our website.
1.3 **Consent:** By using our grid, you agree to the current terms of service.
---
## **2. User Accounts and Access**
2.1 **Registration:**
- You must be at least **[AGE, e.g., 16]** years old to create an account.
- Providing accurate and complete information is required.
- Only one account per person is allowed unless we explicitly permit multiple accounts.
2.2 **Account Security:**
- You are responsible for the security of your account and password.
- If you suspect unauthorized access to your account, notify us immediately.
2.3 **Account Suspension & Deletion:**
- We reserve the right to suspend or delete your account if you violate these TOS.
- Inactive accounts may be deleted after **[e.g., 6 months]** without prior notice.
---
## **3. Virtual Content and Economy**
3.1 **Ownership of Content:**
- Content you create or upload remains your intellectual property.
- However, you grant us the right to use, host, and manage your content within the grid.
3.2 **Copyright and Licensing:**
- Uploading copyrighted content without permission is prohibited.
- If a user violates copyright, we reserve the right to remove the content and suspend the account.
3.3 **Virtual Currency & Transactions:**
- If our grid uses a virtual currency (**e.g., Gloebits, Podex, OMC**), you acknowledge that it has no real monetary value.
- We are not responsible for losses or technical issues related to virtual currencies or transactions.
---
## **4. Code of Conduct**
4.1 **Allowed and Prohibited Content:**
- No **harassment, hate speech, racist, or sexually explicit content** that violates applicable law.
- No **spam, fraud, or impersonation of other users/admins**.
- No **hacking, griefing, or disrupting other users** through scripts, exploits, or attacks.
4.2 **Regional and Parcel Rules:**
- Region/parcel owners may set their own rules as long as they do not violate these TOS.
- Admins reserve the right to remove disruptive content or regions.
---
## **5. Privacy and Data Storage**
5.1 **Stored Data:**
- We store your account information, IP address, avatar data, and in-world interactions for administrative purposes.
- Personal data will not be shared with third parties unless required by law.
5.2 **Use of Third Parties:**
- If our grid uses external services like **Hypergrid teleports, Gloebits, or PayPal**, their privacy policies apply additionally.
- When leaving our grid via Hypergrid teleports, your data may be processed by other grids.
---
## **6. DMCA Policy (Copyright Protection)**
If you believe that content on our grid violates your copyright, you can file a **DMCA complaint**:
### **6.1 How to Submit a DMCA Notice:**
Send a written complaint to **[DEINE KONTAKT-EMAIL]** with the following information:
1. A description of the copyrighted work that has been infringed.
2. The exact location of the infringing content (region, coordinates, UUID, screenshots).
3. Your contact details (name, email, address, phone number).
4. A statement that you are acting in good faith and that the content is being used unlawfully.
5. A sworn statement that your information is accurate.
### **6.2 Response to DMCA Notices:**
- We will remove verified violations.
- If you have been falsely accused of copyright infringement, you can submit a counter-notice.
---
## **7. Disclaimer and Termination of Service**
7.1 **Disclaimer:**
- Our grid is provided as-is. We do not guarantee **uninterrupted, error-free, or continuous use**.
- We are not liable for **data loss, hacks, or technical issues**.
7.2 **Termination of Service:**
- We reserve the right to terminate the grid or parts of it at any time.
- In the event of closure, there is no entitlement to refunds of virtual balances or content.
---
## **8. Contact**
If you have questions about these terms of service, you can reach us at **[DEINE KONTAKT-EMAIL]**.
---
### **Acceptance of Terms**
By using **[DEIN GRID-NAME]**, you agree to these terms of service. If you do not agree, leave the grid and delete your account.
";
// Wähle den Text basierend auf der Sprache
$tosText = ($lang == 'de') ? $tosTextDE : $tosTextEN;
// 1️⃣ Platzhalter ersetzen
$tosText = replacePlaceholders($tosText, $variables);
// 2️⃣ Markdown in HTML umwandeln
$finalHTML = simpleMarkdownToHTML($tosText);
// 3️⃣ HTML ausgeben
echo "<div class='markdown-content'>$finalHTML</div>";
?>
<?php include_once 'include/footer.php'; ?>
+31
View File
@@ -0,0 +1,31 @@
<?php
// include/verification_functions.php
function generateActivationCode() {
return bin2hex(random_bytes(16));
}
function sendVerificationEmail($email, $vorname, $nachname, $activationCode) {
$subject = "Ihr Freischaltcode für " . SITE_NAME;
$message = "Hallo $vorname $nachname,\n\n";
$message .= "Ihr Freischaltcode lautet: $activationCode\n\n";
$message .= "Bitte verwenden Sie diesen Code, um Ihre Registrierung abzuschließen.\n\n";
$message .= "Mit freundlichen Grüßen,\n";
$message .= SITE_NAME;
$headers = "From: noreply@" . parse_url(BASE_URL, PHP_URL_HOST) . "\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
return mail($email, $subject, $message, $headers);
}
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
?>
+167
View File
@@ -0,0 +1,167 @@
<?php
$title = "MapTile";
include_once 'include/header.php';
// Verbindung zur Datenbank herstellen
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if (!$con) {
die("Verbindung zur Datenbank fehlgeschlagen: " . mysqli_connect_error());
}
// Koordinaten des Mittelpunkts anpassen
$centerX = CONF_CENTER_COORD_X;
$centerY = CONF_CENTER_COORD_Y;
if ($centerY <= 30) {$centerY = 100;}
if ($centerX <= 30) {$centerX = 100;}
if ($centerX >= 99999) {$centerX = CONF_CENTER_COORD_X;}
if ($centerY >= 99999) {$centerY = CONF_CENTER_COORD_Y;}
$startX = $centerX - floor(MAPS_X / 2);
$startY = $centerY - floor(MAPS_Y / 2);
$endX = $centerX + floor(MAPS_X / 2);
$endY = $centerY + floor(MAPS_Y / 2);
function uuid4($data = null) {
// Generate 16 bytes (128 bits) of random data or use the data passed into the function.
$data = $data ?? random_bytes(16);
assert(strlen($data) == 16);
// Set version to 0100
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
// Set bits 6-7 to 10
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
// Output the 36 character UUID.
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
// Datenbankabfrage, um alle Regionen zu erhalten
$regions = mysqli_query($con, "SELECT uuid, regionName, locX, locY, serverURI, sizeX, sizeY, owner_uuid FROM regions") or die("Error: " . mysqli_error($con));
$grid = [];
while ($row = mysqli_fetch_assoc($regions)) {
$locX = $row['locX'] / 256;
$locY = $row['locY'] / 256;
$sizeX = $row['sizeX'];
$sizeY = $row['sizeY'];
if ($locX >= $startX && $locX <= $endX && $locY >= $startY && $locY <= $endY) {
// Bestimme die Farbe basierend auf der Regionengröße
if ($locX == $centerX && $locY == $centerY) {
$color = CENTER_COLOR; // Rot markiert für das Zentrum
} elseif ($sizeX == 256 && $sizeY == 256) {
$color = BESCHLAGT_COLOR;
} elseif ($sizeX > 256 || $sizeY > 256) {
$color = VARREGION_COLOR;
} else {
$color = FREI_COLOR;
}
$grid[$locX][$locY] = [
'color' => $color,
'regionName' => $row['regionName'],
'sizeX' => $sizeX,
'sizeY' => $sizeY,
'uuid' => $row['uuid'],
'serverURI' => $row['serverURI'],
'owner_uuid' => $row['owner_uuid']
];
}
}
?>
<style>
.card {
display: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
background-color: white;
border: 1px solid #ccc;
z-index: 10;
color: black; /* Schriftfarbe auf Schwarz setzen */
}
.card.active {
display: block;
}
</style>
<main>
<h2><?php echo SITE_NAME; ?> MapTile Overview</h2>
<div class="map-container" style="display: grid; grid-template-columns: repeat(<?php echo MAPS_X; ?>, <?php echo TILE_SIZE; ?>); gap: 1px;">
<?php
for ($x = $startX; $x < $startX + MAPS_X; $x++) {
for ($y = $startY; $y < $startY + MAPS_Y; $y++) {
$tile = isset($grid[$x][$y]) ? $grid[$x][$y] : ['color' => FREI_COLOR, 'regionName' => 'Free', 'sizeX' => '', 'sizeY' => ''];
$tooltip = ($tile['regionName'] !== 'Free') ? "Koordinaten: ($x, $y), Region: {$tile['regionName']}, Größe: {$tile['sizeX']}x{$tile['sizeY']}" : "Koordinaten: ($x, $y), Region: Free";
$clickAction = ($tile['regionName'] === 'Free') ? "showFreeRegionCard(event, $x, $y)" : "showOccupiedRegionCard(event, '{$tile['regionName']}', '{$tile['uuid']}', '{$tile['sizeX']}', '{$tile['sizeY']}', '{$tile['serverURI']}', '{$tile['owner_uuid']}')";
echo "<div class='map-tile' title='$tooltip' style='width: " . TILE_SIZE . "; height: " . TILE_SIZE . "; background-color: {$tile['color']};' onclick=\"$clickAction\"></div>";
}
}
?>
</div>
<div id="freeRegionCard" class="card">
<p>Diese Region ist frei und Sie können die Konfigurationen vornehmen.</p>
<p id="free-region-coordinates"></p>
<p>____________Beispiel_____________</p>
<p>[Region_<span id="free-region-x"></span>_<span id="free-region-y"></span>]</p>
<p>Location: <span id="free-region-x-location"></span>,<span id="free-region-y-location"></span></p>
<p>RegionUUID: <?php echo uuid4(); ?></p>
<p>SizeX: 256</p>
<p>SizeY: 256</p>
<p>SizeZ: 256</p>
<p>InternalAddress: 0.0.0.0</p>
<p>InternalPort: <?php echo rand(9000, 9250); ?></p>
<p>ResolveAddress: False</p>
<p>ExternalHostName: SYSTEMIP</p>
<p>MaptileStaticUUID: <?php echo uuid4(); ?></p>
<button onclick="hideCard()">Schließen</button>
</div>
<div id="occupiedRegionCard" class="card">
<p>Region Name: <span id="region-name"></span></p>
<p>Region UUID: <span id="region-uuid"></span></p>
<p>Size: <span id="region-size"></span></p>
<p>Server URI: <span id="server-uri"></span></p>
<p>Owner UUID: <span id="owner-uuid"></span></p>
<button onclick="hideCard()">Schließen</button>
</div>
</main>
<script>
function showFreeRegionCard(event, x, y) {
var card = document.getElementById('freeRegionCard');
card.querySelector('#free-region-coordinates').innerText = "Koordinaten: (" + x + ", " + y + ")";
card.querySelector('#free-region-x').innerText = x;
card.querySelector('#free-region-y').innerText = y;
card.querySelector('#free-region-x-location').innerText = x;
card.querySelector('#free-region-y-location').innerText = y;
card.style.top = event.clientY + 'px';
card.style.left = event.clientX + 'px';
card.classList.add('active');
}
function showOccupiedRegionCard(event, regionName, uuid, sizeX, sizeY, serverURI, ownerUUID) {
var card = document.getElementById('occupiedRegionCard');
card.querySelector('#region-name').innerText = regionName;
card.querySelector('#region-uuid').innerText = uuid;
card.querySelector('#region-size').innerText = sizeX + "x" + sizeY;
card.querySelector('#server-uri').innerText = serverURI;
card.querySelector('#owner-uuid').innerText = ownerUUID;
card.style.top = event.clientY + 'px';
card.style.left = event.clientX + 'px';
card.classList.add('active');
}
function hideCard() {
var cards = document.querySelectorAll('.card');
cards.forEach(card => {
card.classList.remove('active');
});
}
</script>
+35
View File
@@ -0,0 +1,35 @@
<?php
// Einbinden der Konfigurationsdatei
require_once __DIR__ . '/include/config.php';
// Header setzen, um den Inhaltstyp auf JSON festzulegen
header('Content-Type: application/json');
// Nachrichtendaten basierend auf der MOTD-Einstellung erstellen
if (MOTD === 'Dyn') {
// Dynamische MOTD
$hour = date('H');
if ($hour < 12) {
$greeting = "Guten Morgen";
} else {
$greeting = "Guten Tag";
}
$message = [
"message" => "$greeting auf " . SITE_NAME . "! Bitte beachte unsere Regeln und Richtlinien.",
"type" => "system",
"url_tos" => BASE_URL . "/include/tos.php",
"url_dmca" => BASE_URL . "/include/dmca.php"
];
} else {
// Statische MOTD
$message = [
"message" => MOTD_STATIC_MESSAGE,
"type" => MOTD_STATIC_TYPE,
"url_tos" => MOTD_STATIC_URL_TOS,
"url_dmca" => MOTD_STATIC_URL_DMCA
];
}
// JSON-Ausgabe
echo json_encode($message, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
?>
+724
View File
@@ -0,0 +1,724 @@
<?php
$title = "Search Service";
include_once 'include/header.php';
error_reporting(0);
// change these to work with your databases
$osmod = DB_NAME; // Datenbank des OpenSim addon
$osmain = DB_NAME; // Robust Datenbank
$dbaddress = DB_SERVER;
$dbuser = DB_USERNAME;
$dbpass = DB_PASSWORD;
// Asset URI. This is so HGPort can fetch textures from your grid.
$asseturi = GRID_ASSETS_SERVER;
// grid address and name
$address = BASE_URL;
$grid_name = SITE_NAME;
$now = time();
global $mysqli;
// your welcome to cut and paste these functions into your own system and modify them.
function getosuser($FirstName, $LastName) {
global $mysqli;
global $osmain;
$q = $mysqli->query("SELECT * FROM $osmain.useraccounts WHERE FirstName = '$FirstName' AND LastName = '$LastName'");
$r = $q->fetch_array(MYSQLI_BOTH);
$q->free();
return $r;
}
function uuid2name($uuid) {
global $mysqli;
global $osmain;
$q2 = $mysqli->query("SELECT * FROM $osmain.useraccounts WHERE PrincipalID = '$uuid'");
$r2 = $q2->fetch_array(MYSQLI_BOTH);
$q2->free();
return $r2;
}
function regionname($ruuid) {
global $mysqli;
global $osmain;
$getregionq = $mysqli->query("SELECT * FROM $osmain.regions WHERE uuid = '$ruuid'");
$regionrow = $getregionq->fetch_array(MYSQLI_BOTH);
$r3 = $regionrow['regionName'];
$getregionq->free();
return $r3;
}
function regionip($UUID) {
global $mysqli;
global $osmain;
$getregionq2 = $mysqli->query("SELECT * FROM $osmain.regions WHERE uuid = '$UUID'");
$regionrow2 = $getregionq2->fetch_array(MYSQLI_BOTH);
$r4 = $regionrow2['serverIP'];
$getregionq2->free();
return $r4;
}
function online($uuid) {
global $mysqli;
global $osmain;
$oq = $mysqli->query("SELECT * FROM $osmain.griduser WHERE UserID = '$uuid'");
$or = $oq->fetch_array(MYSQLI_BOTH);
$online = $or['Online'];
$oq->free();
return $online;
}
function userspersim($sim) {
global $mysqli;
global $osmain;
$simq = $mysqli->query("SELECT * FROM $osmain.presence WHERE RegionID = '$sim'");
$count = $simq->num_rows;
$simq->close();
return $count;
}
function time2date($time) {
$dt = new DateTime("@$time");
$r = $dt->format('M d Y g:ia T');
return $r;
}
function oscat($catid) {
switch ($catid) {
case "0":
$r = "Any";
break;
case "18":
$r = "Discussion";
break;
case "19":
$r = "Sports";
break;
case "20":
$r = "Live Music";
break;
case "22":
$r = "Commercial";
break;
case "23":
$r = "Nightlife/Entertainment";
break;
case "24":
$r = "Games/Contests";
break;
case "25":
$r = "Pageants";
break;
case "26":
$r = "Education";
break;
case "27":
$r = "Arts and Culture";
break;
case "28":
$r = "Charity/Support Groups";
break;
case "29":
$r = "Miscellaneous";
break;
}
return $r;
}
// only mess with this function if you know wtf your doing.
// screwing this up could (WILL) result in a hackable websearch page.
function sqlprotection ($s) {
global $mysqli;
$s = htmlspecialchars(stripslashes($s));
$s = rawurlencode($s);
$s = str_replace(array("1=1", ";", "-", "script", "SELECT", "INSERT", "UPDATE", "DELETE", "UNION", "OR"), array("", "", "", "", "", "", "", "", "", ""), $s);
return $s;
}
if (isset($_GET['search'])) {
$search = sqlprotection($_GET['search']);
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim ($search);
$searchlink = $search;
}else{
$search = "";
$searchlink = "everything";
}
if (isset($_GET['type'])) {
$type = $_GET['type'];
}else{
$type = "";
}
if (isset($_GET['m'])) {
$m = $_GET['m'];
}else{
$m = "";
}
if ($search) {
$placeholder = "Searching for $search";
}else if (!$search) {
$placeholder = "Search";
}
$select = "selected";
if (!$m) {
$m = "1";
}
$eventcat = "<select name='eventcat'>
<option value=''></option>
<option value=''></option>
<option value=''></option>
<option value=''></option>
<option value=''></option>
<option value=''></option>
<option value=''></option>
<option value=''></option>
</select>";
$searchtitle = strtolower($search);
$ptitle = "Searching for $searchtitle";
$PG = "<span class='label label-success'>PG</span>";
$MATURE = "<span class='label label-default'>M</span>";
$ADULT = "<span class='label label-danger'>A</span>";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title id='titlebar'><?php echo "$grid_name $ptitle"; ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
</head>
<body>
<form class="form-inline" method="get" action="" role="form">
<div class="form-group">
<input type="text" name="search" class="form-control" id="appendedInputButtons" placeholder="<?php echo $placeholder; ?>">
<select name="type" class="form-control">
<option value="" <?php if (!$type) { echo ""; } ?>>Everything</option>
<option value="classifieds" <?php if ($type == "classifieds") { echo "$select"; } ?>>Classifieds</option>
<option value="destinations" <?php if ($type == "destinations") { echo "$select"; } ?>>Destinations</option>
<option value="events" <?php if ($type == "events") { echo "$select"; } ?>>Events</option>
<option value="groups" <?php if ($type == "groups") { echo "$select"; } ?>>Groups</option>
<option value="4sale" <?php if ($type == "4sale") { echo "$select"; } ?>>Land & Rentals</option>
<option value="people" <?php if ($type == "people") { echo "$select"; } ?>>People</option>
<option value="places" <?php if ($type == "places") { echo "$select"; } ?>>Places</option>
</select>
</div>
<div class="form-group">
<label class="radio inline">
<input type="radio" id="inlineCheckbox1" name="m" value="1" <?php if ($m == "1") { echo "CHECKED"; } ?>><?php echo $PG; ?>
</label>
<label class="radio inline">
<input type="radio" id="inlineCheckbox2" name="m" value="2" <?php if ($m == "2") { echo "CHECKED"; } ?>><?php echo $MATURE; ?>
</label>
<label class="radio inline">
<input type="radio" id="inlineCheckbox3" name="m" value="3" <?php if ($m == "3") { echo "CHECKED"; } ?>><?php echo $ADULT; ?>
</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Search</button>
</div>
</form>
<TABLE>
<TR VALIGN="top" style="valign: top;">
<TD ALIGN="left" STYLE="width:150px;">
<ul class="nav nav-pills nav-stacked">
<li <?php if (!$type) { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=&m=$m"; ?>">Everything</a></li>
<li <?php if ($type == "classifieds") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=classifieds&m=$m"; ?>">Classifieds</a></li>
<li <?php if ($type == "destinations") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=destinations&m=$m"; ?>">Destinations</a></li>
<li <?php if ($type == "events") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=events&m=$m"; ?>">Events</a></li>
<?php if ($type == "events") { echo $eventcat; } ?>
<li <?php if ($type == "groups") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=groups&m=$m"; ?>">Groups</a></li>
<?php
if ($type == "groups") {
echo "Group Test";
}
?>
<li <?php if ($type == "4sale") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=4sale&m=$m"; ?>">Land & Rentals</a></li>
<li <?php if ($type == "people") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=people&m=$m"; ?>">People</a></li>
<li <?php if ($type == "places") { echo "class='active'"; } ?>><a href="<?php echo "ossearch.php?search=$searchlink&type=places&m=$m"; ?>">Places</a></li>
<?php
if ($type == "places") {
echo "Test";
}
?>
</ul>
</TD>
<TD ALIGN="left" STYLE='max-width:600px'>
<div class="panel-group" id="accordion" style="width:600px; height: auto;">
<?php
if ($type == "classifieds" || !$type) {
$cq = $mysqli->query("SELECT * FROM $osmod.classifieds WHERE name LIKE '%$search%' OR description LIKE '%$search%' AND creationdate < '$now' AND expirationdate > '$now' AND classifiedflags < '$m' ORDER BY 'creationdate' DESC LIMIT 0,100");
while ($cn = $cq->fetch_array(MYSQLI_BOTH)) {
$creatoruuid = $cn['creatoruuid'];
$creationdate = $cn['creationdate'];
$expirationdate = $cn['expirationdate'];
$category = $cn['category'];
$name = $cn['name'];
$parceluuid = $cn['parceluuid'];
$description = $cn['description'];
$snapshotuuid = $cn['snapshotuuid'];
$simname = $cn['simname'];
$classifiedflags = $cn['classifiedflags'];
$creationdate = date("M d Y h:i a T",$creationdate);
$expirationdate = date("M d Y h:i a T",$expirationdate);
$parq = $mysqli->query("SELECT * FROM $osmod.allparcels WHERE parcelUUID = '$parceluuid'");
$parrow = $parq->fetch_array(MYSQLI_BOTH);
$regionid = $parrow['regionUUID'];
$parcelname = $parrow['parcelname'];
$loc = $parrow['landingpoint'];
$parq->free();
$simq = $mysqli->query("SELECT * FROM $osmain.regions WHERE uuid = '$regionid'");
$simr = $simq->fetch_array(MYSQLI_BOTH);
$sim = $simr['regionName'];
$simq->free();
if (!$loc) {
$locr = "128,128,25";
}else{
$locr = str_replace("/", ",", $loc);
}
$FL = uuid2name($creatoruuid);
$FName = $FL['FirstName'];
$LName = $FL['LastName'];
if ($classifiedflags == 0) {
$classifiedflags = "$PG";
}else if ($classifiedflags == 1) {
$classifiedflags = "$MATURE";
}else if ($classifiedflags == 2) {
$classifiedflags = "$ADULT";
}
if (!$snapshotuuid || $snapshotuuid == "00000000-0000-0000-0000-000000000000") {
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=243e3d7b-66ac-47f0-aca9-74bb932c2404&format=img' class='pull-right' width='75' height='75'>";
}else{
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=".$snapshotuuid."&format=img' class='pull-right' width='75' height='75'>";
}
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#$parceluuid'>
<B>$name</B>
</a>
</h4>
</div>
<div id='$parceluuid' class='panel-collapse collapse'>
<div class='panel-body'>
$pic
<p>
<a href='secondlife://$sim/$loc/'>$parcelname, $sim ($locr)</a><br>
$description
<br>
<small>Created: $creationdate by $FName $LName</small>
</p>
</div>
</div>
</div>
";
}
$cq->free();
}
if ($type == "destinations" || !$type) {
$popq = $mysqli->query("SELECT * FROM $osmod.popularplaces WHERE name LIKE '%$search%' AND mature < '$m' ORDER BY `dwell` DESC LIMIT 0,100");
while ($popn = $popq->fetch_array(MYSQLI_BOTH)) {
$parcelUUID = $popn['parcelUUID'];
$name = $popn['name'];
$mature = $popn['mature'];
if ($mature == 0) {
$mature = "$PG";
}else if ($mature == 1) {
$mature = "$MATURE";
}else if ($mature == 2) {
$mature = "$ADULT";
}
$parq = $mysqli->query("SELECT * FROM $osmod.parcels WHERE parcelUUID = '$parcelUUID'");
$parrow = $parq->fetch_array(MYSQLI_BOTH);
$reguuid = $parrow['regionUUID'];
$landing = $parrow['landingpoint'];
$desc = $parrow['description'];
$parq->free();
$simname = regionname($reguuid);
$usersonregion = userspersim($reguuid);
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#Dest$parcelUUID'>
<B>$name</B>
</a>
</h4>
</div>
<div id='Dest$parcelUUID' class='panel-collapse collapse'>
<div class='panel-body'>
$desc<br>
<B>Mature Rating:</B> $mature<br>
<B>Avatars on region:</B> $usersonregion
<br><a href='secondlife://$simname/$landing/'>Teleport</a>
</div>
</div>
</div>";
}
$popq->free();
}
if ($type == "events" || !$type) {
$evq = $mysqli->query("SELECT * FROM $osmod.events WHERE name LIKE '%$search%' OR description LIKE '%$search%' AND dateUTC > $now AND eventflags < '$m' ORDER BY `dateUTC` LIMIT 0,100");
while ($evnum = $evq->fetch_array(MYSQLI_BOTH)) {
$creator = $evnum['creatoruuid'];
$time = $evnum['dateUTC'];
$eventid = $evnum['eventid'];
$eventname = $evnum['name'];
$eventinfo = $evnum['description'];
$event_type = $evnum['eventflags'];
$event_time = date("M d Y h:i a T",$time);
$getname = uuid2name($creator);
$first = $getname['FirstName'];
$last = $getname['LastName'];
$event_host = "$first $last";
if ($event_type == 0) {
$event_type = "$PG";
}else if ($event_type == 1) {
$event_type = "$MATURE";
}else if ($event_type == 2) {
$event_type = "$ADULT";
}
if ($time >= $now) {
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#$eventid'>
<B>$eventname - $event_time</B>
</a>
</h4>
</div>
<div id='$eventid' class='panel-collapse collapse'>
<div class='panel-body'>
$eventinfo<br>
</div>
</div>
</div>
";
}else if ($time <= $now) {
// dont display anything
}
}
$evq->free();
}
if ($type == "groups" || !$type) {
$grpq = $mysqli->query("SELECT * FROM $osmain.os_groups_groups WHERE Name LIKE '%$search%' AND ShowInList = '1' ORDER BY `Name` ASC LIMIT 0,100");
while ($grpn = $grpq->fetch_array(MYSQLI_BOTH)) {
$GroupID = $grpn['GroupID'];
$Name = $grpn['Name'];
$Charter = $grpn['Charter'];
$InsigniaID = $grpn['InsigniaID'];
$FounderID = $grpn['FounderID'];
$OpenEnrollment = $grpn['OpenEnrollment'];
$MembershipFee = $grpn['MembershipFee'];
$MaturePublish = $grpn['MaturePublish'];
$FL = uuid2name($FounderID);
$FName = $FL['FirstName'];
$LName = $FL['LastName'];
$gmq = $mysqli->query("SELECT * FROM $osmain.os_groups_membership WHERE GroupID = '$GroupID'");
$gmcount = $gmq->num_rows;
$gmq->close();
if ($InsigniaID == "00000000-0000-0000-0000-000000000000" || !$InsigniaID) {
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=243e3d7b-66ac-47f0-aca9-74bb932c2404&format=img' class='pull-right' width='75' height='75'>";
}else{
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=".$InsigniaID."&format=img' class='pull-right' width='75' height='75'>";
}
if ($OpenEnrollment == "1") {
$join = "<a href='' class='btn btn-success'>JOIN</a>";
}else if ($OpenEnrollment == "0") {
$join = "Closed to invites only.";
}
if ($MaturePublish == 0) {
$MaturePublish = "$PG";
}else if ($MaturePublish == 1) {
$MaturePublish = "$MATURE";
}else if ($MaturePublish == 2) {
$MaturePublish = "$ADULT";
}
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#$GroupID'>
<B>$Name</B>
</a>
</h4>
</div>
<div id='$GroupID' class='panel-collapse collapse'>
<div class='panel-body'>
$pic
$MaturePublish
$Charter
<br>
Total Members: $gmcount
<br>
Enrollment: $join
<br>
<small>Created by $FName $LName</small>
</div>
</div>
</div>
";
}
$grpq->free();
}
if ($type == "4sale" || !$type) {
$forsaleq = $mysqli->query("SELECT * FROM $osmod.parcelsales WHERE parcelname LIKE '%$search%' AND mature < '$m' ORDER BY `saleprice` ASC LIMIT 0,100");
while ($forsnum = $forsaleq->fetch_array(MYSQLI_BOTH)) {
$regionUUID = $forsnum['regionUUID'];
$parcelname = $forsnum['parcelname'];
$parcelUUID = $forsnum['parcelUUID'];
$area = $forsnum['area'];
$saleprice = $forsnum['saleprice'];
$landingpoint = $forsnum['landingpoint'];
$regionname = regionname($regionUUID);
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#forsale$parcelUUID'>
<B>$parcelname</B>
</a>
</h4>
</div>
<div id='forsale$parcelUUID' class='accordion-body collapse'>
<div class='panel-body'>
<p>
<B>Area:</B> $area<br>
<B>Price:</B> V$ $saleprice<br>
<B>Region:</B> $regionname<br>
<a href=''>Teleport</a>
</p>
</div>
</div>
</div>
";
}
$forsaleq->free();
}
if ($type == "people" || !$type) {
$pplq = $mysqli->query("SELECT * FROM $osmain.useraccounts WHERE FirstName LIKE '%$search%' OR LastName LIKE '%$search%' ORDER BY `Created` ASC LIMIT 0,100");
while ($pplnum = $pplq->fetch_array(MYSQLI_BOTH)) {
$uuid = $pplnum['PrincipalID'];
$sFirst = $pplnum['FirstName'];
$sLast = $pplnum['LastName'];
if ($sLast == "Resident") {
$profname = $sFirst;
}else{
$profname = $sFirst.".".$sLast;
}
$online = online($uuid);
if ($online == "False") {
$onoff = "offlinedot.png";
}else if ($online == "True") {
$onoff = "onlinedot.png";
}
$profq = $mysqli->query("SELECT * FROM $osmod.userprofile WHERE useruuid = '$uuid' AND profileMaturePublish < '$m'");
$prow = $profq->fetch_array(MYSQLI_BOTH);
$show = $prow['profileAllowPublish'];
if ($show == "0") {
$MaturePublish = $prow['profileMaturePublish'];
$abouttext = $prow['profileAboutText'];
$fakepic = $prow['profileImage'];
$profq->free();
if ($abouttext) {
$abouttext = htmlspecialchars_decode($abouttext, ENT_QUOTES);
$abouttext = html_entity_decode($abouttext);
$abouttext = substr($abouttext, 0, 125);
$fakelife = "<p>
$abouttext
</p>";
}else if (!$abouttext) {
$fakelife = "";
}
if ($MaturePublish == 0) {
$MaturePublish = "$PG";
}else if ($MaturePublish == 1) {
$MaturePublish = "$MATURE";
}else if ($MaturePublish == 2) {
$MaturePublish = "$ADULT";
}
if ($fakepic == "00000000-0000-0000-0000-000000000000" || !$fakepic) {
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=243e3d7b-66ac-47f0-aca9-74bb932c2404&format=img' class='pull-right' width='75' height='75'>";
}else{
$pic = "<img src='http://hgport.me/webasset?asset_uri=".$asseturi."&asset=".$fakepic."&format=img' class='pull-right' width='75' height='75'>";
}
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#people$uuid'>
<B>$sFirst $sLast</B> <img src='$address/img/$onoff' border='0'>
</a>
</h4>
</div>
<div id='people$uuid' class='panel-collapse collapse'>
<div class='panel-body'>
$pic
$fakelife
</div>
</div>
</div>
";
}else if ($show == "1" || !$show){
}
}
$pplq->free();
}
if ($type == "places" || !$type) {
$placeq = $mysqli->query("SELECT * FROM $osmod.parcels WHERE parcelname LIKE '%$search%' OR description LIKE '%$search%' AND public = 'true' ORDER BY `parcelUUID` ASC LIMIT 0,100");
while ($placenum = $placeq->fetch_array(MYSQLI_BOTH)) {
$regionUUID = $placenum['regionUUID'];
$parcelname = $placenum['parcelname'];
$parcelUUID = $placenum['parcelUUID'];
$landingpoint = $placenum['landingpoint'];
$description = $placenum['description'];
$searchcategory = $placenum['searchcategory'];
$mature = $placenum['mature'];
$regionname = regionname($regionUUID);
$usersonregion = userspersim($regionUUID);
if ($mature == "PG") {
$mr = "1";
$mat = "$PG";
}
if ($mature == "Mature") {
$mr = "2";
$mat = "$MATURE";
}
if ($mature == "Adult") {
$mr = "3";
$mat = "$ADULT";
}
if ($mr <= $m) {
echo " <div class='panel panel-default'>
<div class='panel-heading'>
<h4 class='panel-title'>
<a class='accordion-toggle' data-toggle='collapse' data-parent='#accordion' href='#places$parcelUUID'>
<B>$parcelname</B>
</a>
</h4>
</div>
<div id='places$parcelUUID' class='panel-collapse collapse'>
<div class='panel-body'>
<p>
$pic
$description<br>
<B>Mature Rating:</B> $mat<br>
<B>Avatars on region:</B> $usersonregion
<br>
<a href='secondlife://$regionname/$landingpoint/'>Teleport</a>
</p>
</div>
</div>
</div>
";
}else{
}
}
$placeq->free();
}
?>
</div>
</TD>
</TR>
</TABLE>
<script type="text/JavaScript">
$(document).ready(function(){
$('.dropdown-toggle').dropdown();
$('#tooltip').tooltip('show');
$(".accordion").collapse('hide');
$('.collapse').collapse('hide');
$('#modal').modal('hide');
$('.carousel').carousel({interval: 10000});
$('#tabs a:first').tab('show');
});
</script>
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</body>
</html>
<?php
$mysqli->close();
?>
+93
View File
@@ -0,0 +1,93 @@
<?php
$title = "Partner";
include_once 'include/header.php';
?>
<style>
body { font-family: Arial, sans-serif; background-color: <?= SECONDARY_COLOR ?>; padding: 10px; color: <?= PRIMARY_COLOR ?>; }
main {width: 50%; margin: 2em auto; padding: 2em; background-color: #ffffff; border: 1px solid #ccc; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 5px;}
h2 {color: #333;}
form label {display: block; margin-bottom: 0.5em; color: #333;}
form input[type="text"], form input[type="password"] {width: 100%; padding: 5px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 4px;}
form input[type="submit"] {padding: 5px 20px; background-color: #007BFF; color: #ffffff; border: none; border-radius: 4px; cursor: pointer;}
form input[type="submit"]:hover {background-color: #0056b3;}
</style>
<body>
<main>
<h2><?php echo SITE_NAME; ?> Partner Overview</h2>
<p>All information related to the Partner can be found here.</p>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Validate and sanitize user input
$vorname1 = filter_input(INPUT_POST, 'vorname1', FILTER_SANITIZE_STRING);
$nachname1 = filter_input(INPUT_POST, 'nachname1', FILTER_SANITIZE_STRING);
$vorname2 = filter_input(INPUT_POST, 'vorname2', FILTER_SANITIZE_STRING);
$nachname2 = filter_input(INPUT_POST, 'nachname2', FILTER_SANITIZE_STRING);
$reg_pass = filter_input(INPUT_POST, 'reg_pass', FILTER_SANITIZE_STRING);
if ($vorname1 && $nachname1 && $vorname2 && $nachname2 && $reg_pass) {
if (in_array($reg_pass, $registration_passwords_partner)) {
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Get PrincipalID of person 1
$stmt1 = $con->prepare("SELECT PrincipalID FROM UserAccounts WHERE FirstName = ? AND LastName = ?");
$stmt1->bind_param("ss", $vorname1, $nachname1);
$stmt1->execute();
$stmt1->bind_result($principalID1);
$stmt1->fetch();
$stmt1->close();
// Get PrincipalID of person 2
$stmt2 = $con->prepare("SELECT PrincipalID FROM UserAccounts WHERE FirstName = ? AND LastName = ?");
$stmt2->bind_param("ss", $vorname2, $nachname2);
$stmt2->execute();
$stmt2->bind_result($principalID2);
$stmt2->fetch();
$stmt2->close();
// Check if both PrincipalIDs were found
if ($principalID1 && $principalID2) {
// Update userprofile for person 1
$stmt3 = $con->prepare("UPDATE userprofile SET profilePartner = ? WHERE useruuid = ?");
$stmt3->bind_param("ss", $principalID2, $principalID1);
$stmt3->execute();
$stmt3->close();
// Update userprofile for person 2
$stmt4 = $con->prepare("UPDATE userprofile SET profilePartner = ? WHERE useruuid = ?");
$stmt4->bind_param("ss", $principalID1, $principalID2);
$stmt4->execute();
$stmt4->close();
echo "<p>Partner information updated successfully!</p>";
} else {
echo "<p>Could not find both users in the database.</p>";
}
mysqli_close($con);
} else {
echo "<p>Invalid registration password.</p>";
}
} else {
echo "<p>Please fill in all fields correctly.</p>";
}
}
?>
<form method="post" action="">
<label for="vorname1">Vorname Person 1:</label>
<input type="text" id="vorname1" name="vorname1" required><br>
<label for="nachname1">Nachname Person 1:</label>
<input type="text" id="nachname1" name="nachname1" required><br>
<label for="vorname2">Vorname Person 2:</label>
<input type="text" id="vorname2" name="vorname2" required><br>
<label for="nachname2">Nachname Person 2:</label>
<input type="text" id="nachname2" name="nachname2" required><br>
<label for="reg_pass">Registrierungspasswort: (Dies muss beim Admin beantragt werden.)</label>
<input type="password" id="reg_pass" name="reg_pass" required><br>
<input type="submit" value="Update Partner">
</form>
</main>
</body>
+219
View File
@@ -0,0 +1,219 @@
<?php
session_start(); // PHP-Session starten
$title = "New Password";
include_once 'include/header.php';
// Funktion zur Erstellung eines Salts
function ospswdsalt() {
return md5(uniqid(mt_rand(), true));
}
// Funktion zur Erstellung des Passwort-Hashes
function ospswdhash($osPasswd, $osSalt) {
return md5(md5($osPasswd) . ":" . $osSalt);
}
// include/verification_functions.php
function generateActivationCode() {
return bin2hex(random_bytes(16));
}
function sendVerificationEmail($email, $vorname, $nachname, $activationCode) {
$subject = "Ihr Freischaltcode für " . SITE_NAME;
$message = "Hallo $vorname $nachname,\n\n";
$message .= "Ihr Freischaltcode lautet: $activationCode\n\n";
$message .= "Bitte verwenden Sie diesen Code, um Ihre Registrierung abzuschließen.\n\n";
$message .= "Mit freundlichen Grüßen,\n";
$message .= SITE_NAME;
$headers = "From: noreply@" . parse_url(BASE_URL, PHP_URL_HOST) . "\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
return mail($email, $subject, $message, $headers);
}
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
$showCard1 = true; // Standardmäßig Card1 anzeigen
$showCard2 = false; // Card2 standardmäßig ausblenden
// Überprüfen, ob das Formular abgesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST["generateCode"])) {
// Verifizierungscode generieren und per E-Mail senden
$osVorname = trim($_POST["osVorname"]);
$osNachname = trim($_POST["osNachname"]);
// Werte in der Session speichern
$_SESSION['osVorname'] = $osVorname;
$_SESSION['osNachname'] = $osNachname;
try {
// Datenbankverbindung herstellen
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Benutzer anhand von Vorname und Nachname abrufen
$statement = $pdo->prepare("SELECT PrincipalID, Email FROM UserAccounts WHERE FirstName = :FirstName AND LastName = :LastName");
$statement->execute(['FirstName' => $osVorname, 'LastName' => $osNachname]);
$user = $statement->fetch(PDO::FETCH_ASSOC);
if (!$user) {
echo "Benutzer nicht gefunden.";
exit;
}
$email = $user['Email'];
$principalID = $user['PrincipalID'];
// Verifizierungscode generieren (als Variable, nicht in der Datenbank speichern)
$activationCode = generateActivationCode();
// E-Mail an den Benutzer senden
$subject = "Ihr Freischaltcode für " . SITE_NAME;
$message = "Hallo $osVorname $osNachname,\n\n";
$message .= "Ihr Freischaltcode lautet: $activationCode\n\n";
$message .= "Bitte verwenden Sie diesen Code, um Ihr Passwort auf " . BASE_URL . " zu ändern.\n\n";
$message .= "Mit freundlichen Grüßen,\n";
$message .= SITE_NAME;
$headers = "From: noreply@" . parse_url(BASE_URL, PHP_URL_HOST) . "\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
if (mail($email, $subject, $message, $headers)) {
echo "Die E-Mail wurde an $email gesendet. Bitte schauen Sie in Ihren E-Mail-Account.";
$showCard1 = false; // Card1 ausblenden
$showCard2 = true; // Card2 anzeigen
} else {
echo "Fehler beim Senden der E-Mail.";
}
} catch (PDOException $e) {
echo "Fehler: " . $e->getMessage();
}
} else {
// Passwort ändern
$osVorname = $_SESSION['osVorname']; // Werte aus der Session abrufen
$osNachname = $_SESSION['osNachname'];
$activationCode = trim($_POST["activationCode"]);
$newPassword = trim($_POST["newPassword"]);
if (empty($osVorname) || empty($osNachname) || empty($activationCode) || empty($newPassword)) {
echo "Bitte füllen Sie alle Felder aus.";
exit;
}
try {
// Datenbankverbindung herstellen
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Benutzer anhand des Vor- und Nachnamens suchen
$statement = $pdo->prepare("SELECT PrincipalID FROM UserAccounts WHERE FirstName = :FirstName AND LastName = :LastName");
$statement->execute(['FirstName' => $osVorname, 'LastName' => $osNachname]);
$user = $statement->fetch(PDO::FETCH_ASSOC);
if (!$user) {
echo "Benutzer nicht gefunden.";
exit;
}
$principalID = $user['PrincipalID'];
// Generiere ein neues Salt und Hash für das neue Passwort
$newSalt = ospswdsalt(); // Funktion aufrufen
$newHash = ospswdhash($newPassword, $newSalt); // Funktion aufrufen
// Passwort in der Tabelle `auth` aktualisieren
$updateStatement = $pdo->prepare("UPDATE auth SET passwordHash = :passwordHash, passwordSalt = :passwordSalt WHERE UUID = :UUID");
$updateStatement->execute([
'passwordHash' => $newHash,
'passwordSalt' => $newSalt,
'UUID' => $principalID
]);
echo "Passwort erfolgreich geändert.";
} catch (PDOException $e) {
echo "Fehler: " . $e->getMessage();
}
// Datenbankverbindung schließen
$pdo = null;
}
}
?>
<html>
<head>
<meta charset="utf-8">
<title>Passwort ändern</title>
<style>
htmlBody {font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0;}
.card1, .card2 {
width: 50%;
margin: 2em auto;
padding: 2em;
background-color: #ffffff;
border: 1px solid #ccc;
border-radius: 15px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h2 {color: #333;}
form label {display: block; margin-bottom: 0.5em; color: #333;}
form input[type="text"], form input[type="password"], form input[type="email"] {
width: 100%;
padding: 0.5em;
margin-bottom: 1em;
border: 1px solid #ccc;
border-radius: 4px;
}
form input[type="submit"] {
padding: 0.7em 2em;
background-color: #007BFF;
color: #ffffff;
border: none;
border-radius: 4px;
cursor: pointer;
}
form input[type="submit"]:hover {background-color: #0056b3;}
</style>
</head>
<body>
<main>
<!-- Card1 zuerst anzeigen -->
<div class="card1" style="display: <?php echo $showCard1 ? 'block' : 'none'; ?>;">
<h2>New Password verify</h2>
<form action="" method="post">
<label for="osVorname">Vorname:</label>
<input type="text" name="osVorname" required><br>
<label for="osNachname">Nachname:</label>
<input type="text" name="osNachname" required><br>
<input type="submit" name="generateCode" value="Freischaltcode senden"><br><br>
</form>
</div>
<!-- Card2 nach dem Senden des Freischaltcodes anzeigen -->
<div class="card2" style="display: <?php echo $showCard2 ? 'block' : 'none'; ?>;">
<h2>New Password now</h2>
<form action="" method="post">
<label for="activationCode">Freischaltcode aus der gesendeten E-Mail:</label>
<input type="text" name="activationCode" required><br>
<label for="newPassword">Neues Passwort:</label>
<input type="password" name="newPassword" required><br>
<input type="submit" value="Passwort ändern">
</form>
</div>
</main>
</body>
</html>
+89
View File
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RSS-Feed Anzeige</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; padding: 20px; }
#rss-feed-container { width: 100%; max-width: 800px; }
.rss-entry { border: 1px solid #ccc; border-radius: 8px; padding: 10px; margin-bottom: 10px; display: flex; align-items: center; }
.rss-entry img { width: 100px; height: 100px; object-fit: cover; border-radius: 8px; margin-right: 10px; }
.rss-entry h3 { margin: 0; font-size: 1.2em; }
.rss-entry a { display: block; margin-top: 5px; color: #007bff; text-decoration: none; }
</style>
</head>
<body>
<div id="rss-feed-container"></div>
<script>
// Definiere die Variablen direkt im JavaScript
const RSS_BASE_URL = 'http://openmanniland.de';
const RSS_MAIN_FOLDER = '/webinterface';
const RSS_FEED_FOLDER = '/include';
const RSS_IMAGE_FOLDER = '/calendar';
const feedUrl = `${RSS_BASE_URL}${RSS_MAIN_FOLDER}${RSS_FEED_FOLDER}/rss-feed.php`;
async function fetchRSSFeed(url) {
const response = await fetch(url);
const text = await response.text();
const parser = new DOMParser();
const xml = parser.parseFromString(text, 'application/xml');
return xml;
}
function renderRSSFeed(xml) {
const items = xml.querySelectorAll('item');
const container = document.getElementById('rss-feed-container');
items.forEach(item => {
const title = item.querySelector('title').textContent;
const link = item.querySelector('link').textContent;
const description = item.querySelector('description').textContent;
const imageUrl = item.querySelector('image') ? item.querySelector('image').textContent : '';
console.log(`Image URL: ${imageUrl}`);
const entry = document.createElement('div');
entry.classList.add('rss-entry');
if (imageUrl) {
const img = document.createElement('img');
img.src = imageUrl;
img.onload = () => console.log(`Image loaded: ${img.src}`);
img.onerror = () => console.error(`Failed to load image: ${img.src}`);
entry.appendChild(img);
}
const entryContent = document.createElement('div');
entryContent.classList.add('entry-content');
const entryTitle = document.createElement('h3');
entryTitle.textContent = title;
const entryLink = document.createElement('a');
entryLink.href = link;
entryLink.textContent = 'Read more';
const entryDescription = document.createElement('p');
entryDescription.innerHTML = description;
entryContent.appendChild(entryTitle);
entryContent.appendChild(entryDescription);
entryContent.appendChild(entryLink);
entry.appendChild(entryContent);
container.appendChild(entry);
});
}
async function loadRSSFeed() {
const xml = await fetchRSSFeed(feedUrl);
renderRSSFeed(xml);
}
loadRSSFeed();
</script>
</body>
</html>
+165
View File
@@ -0,0 +1,165 @@
<?php
// Titel und Header einbinden
$title = "SearchService";
include_once 'include/header.php';
define('DB_SERVER', 'your_db_server');
define('DB_USERNAME', 'your_db_username');
define('DB_PASSWORD', 'your_db_password');
define('DB_NAME', 'your_db_name');
ierror_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
// Datenbankverbindung
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if ($mysqli->connect_errno) {
die("Database connection failed: " . $mysqli->connect_error);
}
// Sicherer Eingabeschutz
function sanitize_input($input) {
return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}
// Funktionen
function oscat($catid) {
switch ($catid) {
case "0": return "Any";
case "18": return "Discussion";
case "19": return "Sports";
case "20": return "Live Music";
case "22": return "Commercial";
case "23": return "Nightlife/Entertainment";
case "24": return "Games/Contests";
case "25": return "Pageants";
case "26": return "Education";
case "27": return "Arts and Culture";
case "28": return "Charity/Support Groups";
case "29": return "Miscellaneous";
default: return "Unknown";
}
}
function getosuser($FirstName, $LastName, $mysqli) {
$query = "SELECT * FROM userinfo WHERE FirstName = ? AND LastName = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ss", $FirstName, $LastName);
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_assoc();
}
function uuid2name($uuid, $mysqli) {
$query = "SELECT * FROM userinfo WHERE PrincipalID = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $uuid);
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_assoc();
}
function regionname($ruuid, $mysqli) {
$query = "SELECT regionName FROM regions WHERE uuid = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $ruuid);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
return $row['regionName'] ?? null;
}
// Suche ausführen
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$search_type = sanitize_input($_POST['search_type'] ?? '');
$search_query = sanitize_input($_POST['search_query'] ?? '');
if ($search_query !== '') {
switch ($search_type) {
case 'userinfo':
$query = "SELECT * FROM userinfo WHERE user LIKE ? OR avatar LIKE ?";
break;
case 'os_groups_groups':
$query = "SELECT * FROM os_groups_groups WHERE Name LIKE ? OR Location LIKE ?";
break;
case 'regions':
$query = "SELECT * FROM regions WHERE regionName LIKE ? OR serverIP LIKE ?";
break;
default:
$query = '';
}
if ($query) {
$stmt = $mysqli->prepare($query);
$search_param = "%$search_query%";
$stmt->bind_param("ss", $search_param, $search_param);
$stmt->execute();
$result = $stmt->get_result();
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= htmlspecialchars(SITE_NAME . ' ' . $title, ENT_QUOTES, 'UTF-8') ?></title>
<style>
body { font-family: Arial, sans-serif; background-color: #f4f4f4; color: black; margin: 0; padding: 0; }
main { width: 75%; margin: 2em auto; padding: 2em; background-color: #ffffff; color: black; border: 1px solid #ccc; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }
h2 { color: #333; }
form label { display: block; margin-bottom: 0.5em; color: #333; }
form input[type="text"], form select { width: 100%; padding: 5px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 4px; }
form input[type="submit"] { padding: 5px 20px; background-color: #007BFF; color: #ffffff; border: none; border-radius: 4px; cursor: pointer; }
form input[type="submit"]:hover { background-color: #0056b3; }
table { width: 100%; border-collapse: collapse; font-size: 0.85em; }
table, th, td { border: 1px solid #ccc; }
th, td { padding: 8px; text-align: left; }
</style>
</head>
<body>
<main>
<h2>Search Service</h2>
<form method="post" action="">
<label for="search_type">Search Type:</label>
<select id="search_type" name="search_type">
<option value="userinfo">People</option>
<option value="os_groups_groups">Groups</option>
<option value="regions">Regions</option>
</select>
<label for="search_query">Search Query:</label>
<input type="text" id="search_query" name="search_query" required>
<input type="submit" value="Search">
</form>
<?php if (!empty($result) && $result->num_rows > 0): ?>
<h3>Search Results:</h3>
<table>
<thead>
<tr>
<?php foreach ($result->fetch_fields() as $field): ?>
<th><?= htmlspecialchars($field->name) ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<?php foreach ($row as $value): ?>
<td><?= htmlspecialchars($value) ?></td>
<?php endforeach; ?>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php elseif ($_SERVER['REQUEST_METHOD'] === 'POST'): ?>
<p>No results found.</p>
<?php endif; ?>
</main>
</body>
</html>
<?php
$mysqli->close();
?>
+90
View File
@@ -0,0 +1,90 @@
<?php
$title = "SearchService";
include_once 'include/header.php';
// todo: places, land for sale, classifieds, events fehlen.
// Grid info: [grid-info]
// Grid status: [grid-status]
// Grid status: [popular-places]
// Profile page: [avatar-profile]
?>
<style>
htmlBody {font-family: Arial, sans-serif; background-color: #f4f4f4; color: black; margin: 0; padding: 0;}
main {width: 75%; margin: 2em auto; padding: 2em; background-color: #ffffff; color: black; border: 1px solid #ccc; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}
h2 {color: #333;}
form label {display: block; margin-bottom: 0.5em; color: #333;}
form input[type="text"], form select {width: 100%; padding: 5px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 4px;}
form input[type="submit"] {padding: 5px 20px; background-color: #007BFF; color: #ffffff; border: none; border-radius: 4px; cursor: pointer;}
form input[type="submit"]:hover {background-color: #0056b3;}
table {width: 100%; border-collapse: collapse; font-size: 0.72em;} /* Schriftgröße um 10% reduziert */
table, th, td {border: 1px solid #ccc;}
th, td {padding: 8px; text-align: left;}
</style>
<main>
<h2><?php echo SITE_NAME; ?> SearchService Overview</h2>
<p>All information related to the SearchService can be found here.</p>
<form method="post" action="">
<label for="search_type">Search Type:</label>
<select id="search_type" name="search_type">
<option value="userinfo">People (User Info)</option>
<option value="os_groups_groups">Groups</option>
<option value="regions">Regions</option>
</select>
<label for="search_query">Search Query:</label>
<input type="text" id="search_query" name="search_query" required>
<input type="submit" value="Search">
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$search_type = filter_input(INPUT_POST, 'search_type', FILTER_SANITIZE_STRING);
$search_query = filter_input(INPUT_POST, 'search_query', FILTER_SANITIZE_STRING);
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if ($search_type === 'userinfo') {
// Suchen nach Userinfo
$query = "SELECT * FROM `userinfo` WHERE `user` LIKE '%$search_query%' OR `avatar` LIKE '%$search_query%' OR `serverurl` LIKE '%$search_query%' ORDER BY `avatar` ASC, `serverurl` ASC";
} elseif ($search_type === 'os_groups_groups') {
// Suchen nach Gruppen
$query = "SELECT * FROM `os_groups_groups` WHERE `Name` LIKE '%$search_query%' OR `Location` LIKE '%$search_query%' ORDER BY `Name` ASC";
} elseif ($search_type === 'regions') {
// Suchen nach Regionen
$query = "SELECT * FROM `regions` WHERE `regionName` LIKE '%$search_query%' OR `serverIP` LIKE '%$search_query%' ORDER BY `regionName` DESC";
} else {
$query = "";
}
if ($query) {
$result = mysqli_query($con, $query);
if (mysqli_num_rows($result) > 0) {
echo "<h3>Search Results:</h3>";
echo "<table>";
echo "<tr>";
// Tabellenkopf anzeigen
foreach (mysqli_fetch_fields($result) as $field) {
echo "<th>" . htmlspecialchars($field->name) . "</th>";
}
echo "</tr>";
// Ergebnisse ausgeben
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
foreach ($row as $value) {
echo "<td>" . htmlspecialchars($value) . "</td>";
}
echo "</tr>";
}
echo "</table>";
} else {
echo "<p>No results found.</p>";
}
}
mysqli_close($con);
}
?>
</main>
+202
View File
@@ -0,0 +1,202 @@
<?php
$title = "Welcome";
include_once "include/config.php";
// Version: 1.7.0
?>
<html>
<head>
<meta charset="UTF-8">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=<?php echo LOGO_FONT; ?>&display=swap" rel="stylesheet">
<style>
.logofont { font-family: '<?php echo LOGO_FONT; ?>', sans-serif; }
#welcome-text { font-family: '<?php echo LOGO_FONT; ?>', sans-serif; }
.bodysplash, html { margin: 0; padding: 0; overflow: hidden; width: 100%; height: 100%; font-family: <?php echo FONT_FAMILY; ?>; background: <?php echo SECONDARY_COLOR; ?>; }
#background1 { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; object-fit: cover; }
.info-box { position: absolute; right: 10px; width: 220px; background: rgba(44, 42, 42, 0.4); padding: 10px; border-radius: 8px; border: 1px solid <?php echo LINK_COLOR; ?>; font-size: 14px; color: white; }
#stats1 { top: 20px; }
#regionslist { top: 250px; }
fieldset { border: 1px solid <?php echo LINK_COLOR; ?>; border-radius: 6px; padding: 6px; }
legend { font-size: 14px; font-weight: bold; color: <?php echo PRIMARY_COLOR_LOGO; ?>; }
.region-link { font-size: 13px; color: rgb(255, 255, 255); text-decoration: none; display: block; padding: 2px 0; }
.region-link:hover { text-decoration: underline; color: <?php echo LINK_HOVER_COLOR; ?>; }
.PictureSlider { position: absolute; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 2s ease-in-out; }
.PictureSlider.active { opacity: 1; }
#mainsplash { word-wrap: break-word; width: 60%; position: relative; z-index: 1; top: 20px; left: 20px; text-align: left; color: <?php echo WELCOME_TEXT_COLOR; ?>; font-size: calc(<?php echo WELCOME_TEXT_FONT_SIZE; ?> * 2); font-family: <?php echo FONT_FAMILY; ?>; font-weight: bold; text-shadow: 2px 2px black;}
.daily-box { position: absolute; left: 15%; top: 33%; width: 420px; background: rgba(44, 42, 42, 0.4); padding: 10px; border-radius: 8px; border: 1px solid <?php echo LINK_COLOR; ?>; font-size: 18px; color: white; }
.dailyupdatelist { position: relative; z-index: 1; top: 20px; left: 20px; text-align: left; background-color: rgba(128, 128, 128, 0.5); border-radius: 8px; padding: 20px; margin: 20px; max-width: 400px; color: white; font-family: Arial, sans-serif; }
</style>
</head>
<bodysplash>
<?php
$allebilder = scandir(SLIDESHOW_FOLDER);
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif']; // Erlaubte Bildformate
?>
<div id="background1">
<?php
foreach ($allebilder as $bild) {
$bildinfo = pathinfo(SLIDESHOW_FOLDER . "/" . $bild);
// Überprüfe, ob die Datei keine Ordner ist und ob sie ein erlaubtes Bildformat hat
if (!in_array($bild, [".", "..", "_notes"]) && $bildinfo['basename'] !== "Thumbs.db" && in_array(strtolower($bildinfo['extension']), $allowed_extensions)) {
?>
<img class="PictureSlider" src="<?php echo SLIDESHOW_FOLDER . "/" . $bild; ?>" alt="slide">
<?php
}
}
?>
</div>
<!-- Logo oder Begrüßungstext -->
<div id="mainsplash">
<?php if (LOGO_ON === 'ON') { ?>
<img src="<?php echo LOGO_PATH; ?>" width="<?php echo LOGO_WIDTH; ?>" height="<?php echo LOGO_HEIGHT; ?>" alt="Logo">
<?php } ?>
<?php if (TEXT_ON === 'ON') { ?>
<div id="welcome-text">
<?php echo WELCOME_TEXT; ?>
</div>
<?php } ?>
</div>
<!-- Statistik -->
<div id='stats1' class="info-box">
<fieldset>
<legend>📊 Statistik</legend>
<?php
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if (!$con) {
echo "<b style='color: red;'>❌ Grid ist OFFLINE</b>";
} else {
$totalUsers = mysqli_fetch_row(mysqli_query($con, "SELECT COUNT(*) FROM Presence"))[0];
$totalRegions = mysqli_fetch_row(mysqli_query($con, "SELECT COUNT(*) FROM regions"))[0];
$totalAccounts = mysqli_fetch_row(mysqli_query($con, "SELECT COUNT(*) FROM UserAccounts"))[0];
$activeUsers = mysqli_fetch_row(mysqli_query($con, "SELECT COUNT(*) FROM GridUser WHERE Login > (UNIX_TIMESTAMP() - (30*86400))"))[0];
$totalGridAccounts = mysqli_fetch_row(mysqli_query($con, "SELECT COUNT(*) FROM GridUser"))[0];
echo "<b>Nutzer im Grid:</b> $totalUsers<br>";
echo "<b>Regionen:</b> $totalRegions<br>";
echo "<b>Aktiv (30 Tage):</b> $activeUsers<br>";
echo "<b>Inworld Nutzer:</b> $totalAccounts<br>";
echo "<b>HG Grid Nutzer:</b> $totalGridAccounts<br>";
echo "<b style='color: green;'>✔ Grid ist ONLINE</b>";
mysqli_close($con);
}
?>
</fieldset>
</div>
<!-- Regionsliste -->
<div id='regionslist' class="info-box">
<fieldset>
<legend>🌍 Regionen</legend>
<?php
$con = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
$sql = "SELECT regionName, serverIP, serverPort FROM regions ORDER BY last_seen DESC LIMIT 10";
$resultregions = mysqli_query($con, $sql);
while ($dsatz = mysqli_fetch_assoc($resultregions)) {
$region = htmlspecialchars($dsatz["regionName"]);
$ip = htmlspecialchars($dsatz["serverIP"]);
$port = htmlspecialchars($dsatz["serverPort"]);
// Standard-Koordinaten für den Teleport-Link (X=103, Y=113, Z=23)
$regionslink = "hop://$ip:$port/$region/103/113/23";
echo "<a class='region-link' href='$regionslink' target='_blank'>$region</a>";
}
mysqli_close($con);
?>
</fieldset>
</div>
<!-- Tagesaktuelle Einblendungen -->
<?php if (SHOW_DAILY_UPDATE) { ?>
<div id='dailyupdatelist' class="daily-box">
<fieldset>
<legend>🌟 <?php echo SITE_NAME; ?> Aktuell</legend>
<div class="card" id="daily-update">
<?php if (DAILY_UPDATE_TYPE === 'text') { ?>
<p><?php echo DAILYTEXT; ?></p>
<?php } else if (DAILY_UPDATE_TYPE === 'rss') { ?>
<?php
$feedcache_path = FEED_CACHE_PATH;
$feedcache_max_age = FEED_CACHE_MAX_AGE;
$feed_urls = [RSS_FEED_URL];
// Prüfen, ob Cache neu geladen werden muss
if (!file_exists($feedcache_path) or filemtime($feedcache_path) < (time() - $feedcache_max_age)) {
$output = '';
foreach ($feed_urls as $feed_url) {
// Feed abrufen
$xml = @simplexml_load_string(file_get_contents($feed_url));
if (!$xml) {
$output .= "<p>Fehler beim Laden des Feeds: <strong>" . htmlspecialchars($feed_url) . "</strong></p>";
continue;
}
$output .= '<h2>' . htmlspecialchars($xml->channel->title) . '</h2>';
//$output .= '<p><a href="' . htmlspecialchars($xml->channel->link) . '">Feed öffnen</a></p>';
// Nur den neuesten Eintrag anzeigen
$entry = $xml->channel->item[0];
$date = date('d.m.Y', strtotime($entry->pubDate));
$title = htmlspecialchars($entry->title);
$description = html_entity_decode($entry->description);
if (isset($entry->encoded)) {
$description .= '<br>' . html_entity_decode($entry->encoded);
} else if (isset($entry->content)) {
$description .= '<br>' . html_entity_decode($entry->content);
}
$output .= '<p><a href="'.htmlspecialchars($entry->link).'" title="'.$date.'">'. $title .'</a> <small>('.$date.')</small></p>';
$output .= '<div>'. $description .'</div>';
}
echo $output;
//file_put_contents($feedcache_path, $output);
} else {
echo file_get_contents($feedcache_path);
}
?>
<?php } ?>
</div>
</fieldset>
</div>
<?php } ?>
<!-- Skript für Slideshow -->
<script>
var slideIndex = 0;
var slides = document.getElementsByClassName("PictureSlider");
function carousel() {
for (var i = 0; i < slides.length; i++) {
slides[i].classList.remove("active");
}
slideIndex++;
if (slideIndex > slides.length) { slideIndex = 1; }
slides[slideIndex - 1].classList.add("active");
setTimeout(carousel, <?php echo SLIDESHOW_DELAY; ?>);
}
document.addEventListener("DOMContentLoaded", function () {
if (slides.length > 0) {
slides[0].classList.add("active");
}
setTimeout(carousel, <?php echo SLIDESHOW_DELAY; ?>);
});
</script>
</bodysplash>
</html>