<?php
/*
* Version
* Thread-Url
*/
$version = '0.2';
$thread_url = 'http://dslan.gfx-dose.de/thread-1390.html';
/*
* Neue Klasse: groups
*/
class groups {
/*
* Datenbank-Verbindung
*/
var $db;
/*
* Template-System
*/
var $tpl;
/*
* User-ID
*/
var $uid;
/*
* Datenbanktyp
*/
var $db_type = 1;
/*
* Aktuelle Version
*/
var $version;
/*
* In PHP 5 waere das __construct
*/
function construct($db, $tpl, $userid, $version) {
$this->db = $db;
$this->tpl = $tpl;
$this->uid = $userid;
$this->version = $version;
}
/*
* Neue Gruppe erstellen
*/
function new_group($name) {
$this->db->query('INSERT INTO groups (userid, name) VALUES (\''.$this->uid.'\', \''.$name.'\')');
}
/*
* Gruppe bearbeiten
*/
function edit_group($gid, $name) {
$this->db->query('UPDATE groups SET name=\''.$name.'\' WHERE id=\''.$gid.'\' LIMIT 1');
}
/*
* Gruppe loeschen
*/
function del_group($gid){
$this->db->query('DELETE FROM groups WHERE id=\''.$gid.'\' LIMIT 1');
}
/*
* Aktuelle Gruppe holen
*/
function get_aktu_group() {
$query = $this->db->query('SELECT aktu_group FROM users WHERE id=\''.$this->uid.'\'');
$row = $this->db->fetch($query);
return $row['aktu_group'];
}
/*
* Alle Gruppen vom User holen
*/
function get_groups() {
$groups_sql = $this->db->query('SELECT * FROM groups WHERE userid=\''.$this->uid.'\'');
while ($row = $this->db->fetch($groups_sql)) {
$groups_array[] = $row;
}
return $groups_array;
}
/*
* Alle Gruppen fuer ein Dorf holen
*/
function get_groups_for_village($vid, $for_user = true) {
$group = array();
$groups_sql = $this->db->query('SELECT groups FROM villages WHERE id=\''.$vid.'\' LIMIT 1');
$row = $this->db->fetch($groups_sql);
if ($row != '') {
$exploded = explode(';', $row['groups']);
foreach ($exploded as $key => $value) {
if ($value != '') {
if ($for_user === true) {
$query = $this->db->query('SELECT * FROM groups WHERE id=\''.$value.'\' AND userid=\''.$this->uid.'\'');
}
else {
$query = $this->db->query('SELECT * FROM groups WHERE id=\''.$value.'\'');
}
$group[] = $this->db->fetch($query);
}
}
}
return $group;
}
/*
* Alle Gruppen vom User holen, mit Dorf-Gruppen-Info
*/
function get_groups_with_village($vid) {
$user_groups = $this->get_groups();
$village_groups = $this->get_groups_for_village($vid);
echo '<br /><br /><br />';
foreach ($user_groups as $key => $value) {
foreach ($village_groups as $key2 => $value2) {
if ($value['id'] == $value2['id']) {
$user_groups[$key]['group_of_village'] = true;
break;
}
}
}
return $user_groups;
}
/*
* Alle Dörfer von der Gruppe holen
*/
function get_villages_of_group($gid, $only_id = true) {
if ($only_id === true) {
$query = $this->db->query('SELECT id FROM villages WHERE groups like \'%;'.$gid.';%\'');
}
else {
$query = $this->db->query('SELECT * FROM villages WHERE groups like \'%;'.$gid.';%\'');
}
while ($row = $this->db->fetch($query)) {
$villages['id_'.$row['id']] = $row;
}
return $villages;
}
/*
* Haupt-Info ueber ein Dorf
*/
function get_village_main_info($vid) {
$query = $this->db->query('SELECT name, x, y FROM villages WHERE id=\''.$_GET['village_id'].'\' LIMIT 1');
$row = $this->db->fetch($query);
$row['name'] = entparse($row['name']);
return $row;
}
/*
* Check, ob die Gruppe, dem User gehoert
*/
function check_group($gid) {
$group = false;
$groups_sql = $this->db->query('SELECT * FROM groups WHERE userid=\''.$this->uid.'\' AND id=\''.$gid.'\'');
while ($row = $this->db->fetch($groups_sql)) {
$group = true;
}
return $group;
}
/*
* Check, ob das Dorf dem User gehoert
*/
function check_village($vid) {
$query = $this->db->query('SELECT id FROM villages WHERE id=\''.$vid.'\' AND userid=\''.$this->uid.'\' LIMIT 1');
$row = $this->db->fetch($query);
if (isset($row['id'])) {
return true;
}
return false;
}
/*
* Check, ob das Dorf in der Gruppe ist
*/
function check_village_in_group($vid, $gid) {
$query = $this->db->query('SELECT id FROM villages WHERE id=\''.$vid.'\' AND groups LIKE \'%;'.$gid.';%\'');
$row = $this->db->fetch($query);
if (isset($row['id'])) {
return true;
}
return false;
}
/*
* Holt die UID mithilfe von hkey
*/
function get_uid_by_hkey($hkey) {
$query = $this->db->query('SELECT userid FROM sessions WHERE hkey=\''.$hkey.'\' LIMIT 1');
$row = $this->db->fetch($query);
if (isset($row['userid'])) {
$this->uid = $row['userid'];
return true;
}
return false;
}
/*
* Holt den aktuellen Mode bei overview_villages
*/
function get_mode() {
if (isset($_GET['mode']) and $_GET['mode'] != '') {
return $_GET['mode'];
}
else {
$query = $this->db->query('SELECT villages_mode FROM users WHERE id=\''.$this->uid.'\' LIMIT 1');
$row = $this->db->fetch($query);
return $row['villages_mode'];
}
}
function get_next_village($vid, $gid, $villages_array = array()) {
$query = $this->db->query('SELECT id FROM villages WHERE userid=\''.$this->uid.'\' AND groups LIKE \'%;'.$gid.';%\' ORDER BY name');
$last_vid = '';
$break = false;
$village_array = $villages_array;
$villages_array = array();
while ($row = $this->db->fetch($query)) {
if (!isset($a)) {
$villages_array['first_link'] = str_replace($village_array['next'], $row['id'], $village_array['next_link']);
$villages_array['first'] = $row['id'];
$a = 0;
}
if ($break == true) {
$villages_array['next_link'] = str_replace($village_array['next'], $row['id'], $village_array['next_link']);
$villages_array['next'] = $row['id'];
break;
}
if ($vid == $row['id']) {
$villages_array['last_link'] = str_replace($village_array['last'], $last_vid, $village_array['last_link']);
$villages_array['last'] = $last_vid;
$break = true;
}
$last_vid = $row['id'];
}
return $villages_array;
}
/*
* Gruppen setzten
*/
function set_groups_of_village($vid, $groups = array()) {
$gruppen = '';
if (isset($groups[0])) {
foreach ($groups as $key => $value) {
if (!isset($a)) {
$a = 0;
$gruppen .= ';';
}
$gruppen .= $value.';';
}
}
$this->db->query('UPDATE villages SET groups=\''.$gruppen.'\' WHERE id=\''.$vid.'\' LIMIT 1');
}
/*
* Aktuelle Gruppe setzten
*/
function set_aktu_group($gid) {
$this->db->query('UPDATE users SET aktu_group=\''.$gid.'\' WHERE id=\''.$this->uid.'\' LIMIT 1');
}
/*
* Sortiert aus $villages, die in $sort nicht gennannten Doerfer aus
*/
function sort_out_villages_by_group($villages, $sort, $type = 1) {
if ($type == 1) {
foreach ($villages as $key => $value) {
if (!isset($sort['id_'.$key])) {
unset($villages[$key]);
}
}
}
elseif ($type == 2) {
if (isset($villages[0])) {
foreach ($villages as $key => $value) {
if (!isset($sort['id_'.$value['to_village']])) {
unset($villages[$key]);
}
}
}
}
elseif ($type == 3) {
/*
* Funktioniert nicht, kein Plan warum :'(
*/
if (isset($villages[0])) {
foreach ($villages as $key => $value) {
if (!isset($sort['id_'.$value['homevillageid']])) {
unset($villages[$key]);
}
}
}
}
return $villages;
}
/*
* Checked nach einem Update
*/
function check_nach_update($tool) {
$lines = file('http://philipp1993.bplaced.net/dslan/info/'.$tool.'/version.txt');
if (!$lines) {
return 'no connection';
}
if ($lines[0] != $this->version) {
return 'update_'.$lines[0];
}
return true;
}
/*
* Holt Informationen
*/
function echo_update_info($tool, $tool_name, $version, $url) {
$info = file('http://philipp1993.bplaced.net/dslan/info/'.$tool.'/change_'.$this->version.'_'.$version.'.txt');
if (!$info) {
$info = array('');
}
$ausgabe = '<p style="color: green; text-align: center;">Ein Update für das Addon '.$tool_name.' (© Copyright by <a href="http://dslan.gfx-dose.de/user-11.html">Philipp Ranft</a>) verfügbar!<br /><a href="#" onClick="document.getElementsByName(\'infos\')[0].style.display=\'block\';">Mehr Infos/Änderungen</a></p><span name="infos" style="display: none; text-align: center;">';
foreach ($info as $key => $value) {
$ausgabe .= $value.'<br />';
}
$ausgabe .= '</span><p style="text-align: center;"><a href="'.$url.'">Download/Update-Info</a></p>';
echo $ausgabe;
}
}
/*
* Klasse oeffnen
*/
$groups = new groups;
$groups->construct($db, $tpl, $user['id'], $version);
/*
* Versions-Check
*/
$check = $groups->check_nach_update('groups');
if ($check !== true) {
$version_new = explode('_', $check);
if ($version_new[0] == 'update') {
$groups->echo_update_info('groups', '(Dörfer-)Gruppen', $version_new[1], $thread_url);
}
}
/*
* Gruppen
*/
/*
* Aktu_group
*/
if ($_GET['screen'] == 'overview_villages') {
if (isset($_GET['mode'])) {
if ($_GET['mode'] == 'groups') {
$db->query('UPDATE users SET villages_mode=\'groups\' WHERE id=\''.$user['id'].'\'');
}
}
if (isset($_GET['group'])) {
if ($_GET['group'] != '') {
if ($groups->check_group($_GET['group']) or $_GET['group'] == 0) {
$groups->set_aktu_group($_GET['group']);
}
}
}
}
if ($action === 'overview_villages') {
/*
* Action
*/
if (isset($_GET['action'])) {
/*
* new_group
*/
if ($_GET['action'] == 'new_group') {
if (isset($_POST['group_name']) and $_POST['group_name'] != '') {
$groups->new_group($_POST['group_name']);
$tpl->assign('done', 'new_group');
}
else {
$tpl->assign('fehler', 'no_name');
}
}
/*
* edit_group:
* - edit_group();
* - del_group();
*/
if ($_GET['action'] == 'edit_group' and isset($_GET['id'])) {
if ($groups->check_group($_GET['id']) === true) {
if (isset($_POST['del'])) {
$groups->del_group($_GET['id']);
$tpl->assign('done', 'del_group');
}
else {
if ($_POST['group_name_'.$_GET['id']] != '') {
$groups->edit_group($_GET['id'], $_POST['group_name_'.$_GET['id']]);
$tpl->assign('done', 'edit_group');
}
else {
$tpl->assign('fehler', 'no_name');
}
}
}
else {
$tpl->assign('fehler', 'wrong_id');
}
}
}
/*
* groups
*/
$tpl->assign('gruppen', $groups->get_groups());
$aktu_group = $groups->get_aktu_group();
$tpl->assign('aktu_group', $aktu_group);
if ($aktu_group != 0) {
if ($groups->get_mode() != 'incomings' and $groups->get_mode() != 'commands') {
$tpl->assign('villages', $groups->sort_out_villages_by_group($villages, $groups->get_villages_of_group($aktu_group)));
}
elseif ($groups->get_mode() == 'incomings') {
$tpl->assign('other_movements', $groups->sort_out_villages_by_group($other_movements, $groups->get_villages_of_group($aktu_group), 2));
}
elseif ($groups->get_mode() == 'commands') {
$tpl->assign('other_movements', $groups->sort_out_villages_by_group($my_movements, $groups->get_villages_of_group($aktu_group), 3));
}
$tpl->assign('villages_of_group', $groups->get_villages_of_group($aktu_group));
}
}
elseif ($action == 'overview') {
$tpl->assign('gruppen', $groups->get_groups_for_village($_GET['village']));
}
$aktu_group = $groups->get_aktu_group();
if ($aktu_group != 0) {
$tpl->assign('aktu_group', $aktu_group);
$tpl->assign('village_array', $village_array = $groups->get_next_village($_GET['village'], $aktu_group, $village_array));
$tpl->assign('village_in_group', $groups->check_village_in_group($_GET['village'], $aktu_group));
}
?>