<?php
/********************************************************************************************************************************
*
* Servers board (/admin/modules/config/serversboard.php)
* Author: Krzysztof "Supryk" Supryczyński
* Copyright: 2013 - 2014 @ Krzysztof "Supryk" Supryczyński @ All rights reserved
*
* Website: http://polish-zone.pl/
* Description: Show information about games online servers on index page and details about servers on subpage.
*
********************************************************************************************************************************/
if(!defined("IN_MYBB"))
{
die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}
define("SERVERSBOARD_CORE_PATH", MYBB_ROOT."inc/serversboard/");
$page->add_breadcrumb_item($lang->servers_list, "index.php?module=config-serversboard");
if($mybb->input['action'] == "add" || $mybb->input['action'] == "edit" || !$mybb->input['action'])
{
$sub_tabs['serversboard'] = array(
'title' => $lang->servers_list,
'link' => "index.php?module=config-serversboard",
'description' => $lang->servers_list_desc,
);
$sub_tabs['serversboard_add'] = array(
'title' => $lang->server_add,
'link' => "index.php?module=config-serversboard&action=add",
'description' => $lang->server_add_desc,
);
}
$plugins->run_hooks("admin_config_serversboard_begin");
if($mybb->input['action'] == "add")
{
$plugins->run_hooks("admin_config_serversboard_add");
if($mybb->request_method == "post")
{
$plugins->run_hooks("admin_config_serversboard_add_commit");
// || !preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,6}/', $mybb->input['ip'], $match)
if(!trim($mybb->input['ip']))
{
$errors[] = $lang->server_error_missing_ip;
}
if(!trim($mybb->input['type']))
{
$errors[] = $lang->server_error_missing_type;
}
if($mybb->input['type'] == "teamspeak3" && !trim($mybb->input['ts3qport']))
{
$errors[] = $lang->server_error_missing_ts3qport;
}
if(!trim($mybb->input['offlinehostname']))
{
$errors[] = $lang->server_error_missing_offlinehostname;
}
if(!trim($mybb->input['disporder']) || !preg_match('/[0-9]{1,3}/', $mybb->input['disporder'], $match))
{
$errors[] = $lang->server_error_missing_disporder;
}
if(!trim($mybb->input['owner']))
{
$errors[] = $lang->server_error_missing_owner;
}
if(!$errors)
{
$server = array(
"ip" => $db->escape_string(trim($mybb->input['ip'])),
"ts3qport" => $db->escape_string(trim($mybb->input['ts3qport'])),
"type" => $db->escape_string($mybb->input['type']),
"offlinehostname" => $db->escape_string($mybb->input['offlinehostname']),
"cuthostname" => intval($mybb->input['cuthostname']),
"disporder" => intval($mybb->input['disporder']),
"field_link" => $db->escape_string($mybb->input['field_link']),
"field_icon" => $db->escape_string($mybb->input['field_icon']),
"visible" => intval($mybb->input['visible']),
"owner" => $db->escape_string($mybb->input['owner']),
"new" => intval($mybb->input['new']),
"new_color" => $db->escape_string($mybb->input['new_color']),
"new_text" => $db->escape_string($mybb->input['new_text']),
"lastupdate" => intval('0'),
);
$plugins->run_hooks("admin_config_serversboard_add_commit_start");
$sid = $db->insert_query("serversboard", $server);
$plugins->run_hooks("admin_config_serversboard_add_commit_end");
log_admin_action($sid, $mybb->input['offlinehostname']);
flash_message($lang->server_add_success, 'success');
admin_redirect("index.php?module=config-serversboard");
}
}
else
{
$mybb->input = array(
"visible" => "1",
"new" => "0",
);
}
$page->add_breadcrumb_item($lang->server_add);
$page->output_header($lang->servers_list." - ".$lang->server_add);
$sub_tabs['serversboard_add'] = array(
'title' => $lang->server_add,
'link' => "index.php?module=config-serversboard&action=add",
'description' => $lang->server_add_desc,
);
$page->output_nav_tabs($sub_tabs, 'serversboard_add');
$query = $db->simple_select("serversboard");
$server = $db->fetch_array($query);
$form = new Form("index.php?module=config-serversboard&action=add", "post");
if($errors)
{
$page->output_inline_error($errors);
}
$select_list = array(
"" => $lang->server_type_select,
"bf3" => "Battlefield 3",
"bf4" => "Battlefield 4",
"cod4" => "Call of Duty 4",
"cs16" => "Counter-Strike 1.6",
"cscz" => "Counter-Strike Condition Zero",
"css" => "Counter-Strike Source",
"csgo" => "Counter-Strike Global Offensive",
"dayz" => "DayZ",
"dayzmod" => "DayZ Mod",
"gmod" => "Garry's Mod",
"l4d" => "Left 4 Dead",
"l4d2" => "Left 4 Dead 2",
"minecraft" => "MineCraft",
"mta" => "Multi Theft Auto",
"samp" => "San Andreas Multi Player",
"tf2" => "Team Fortress 2",
"tfc" => "Team Fortress Classic",
"teamspeak3" => "TeamSpeak 3",
"ventrilo" => "Ventrilo"
);
$form_container = new FormContainer($lang->server_add);
$form_container->output_row($lang->server_ip."<em> *</em>", $lang->server_ip_desc, $form->generate_text_box('ip', $mybb->input['ip'], array('id' => 'ip')), 'ip');
$form_container->output_row($lang->server_type, $lang->server_type_desc, $form->generate_select_box('type', $select_list, $mybb->input['type'], array('id' => 'type')), 'type', '', array('id' => 'type'));
$form_container->output_row($lang->server_ts3qport, $lang->server_ts3qport_desc, $form->generate_text_box('ts3qport', $mybb->input['ts3qport'], array('id' => 'ts3qport')), 'ts3qport', '', array('id' => 'ts3qport'));
$form_container->output_row($lang->server_offlinehostname."<em> *</em>", $lang->server_offlinehostname_desc, $form->generate_text_box('offlinehostname', $mybb->input['offlinehostname'], array('id' => 'offlinehostname')), 'offlinehostname');
$form_container->output_row($lang->server_cuthostname, $lang->server_cuthostname_desc, $form->generate_text_box('cuthostname', $mybb->input['cuthostname'], array('id' => 'cuthostname')), 'cuthostname');
$form_container->output_row($lang->server_disporder."<em> *</em>", $lang->server_disporder_desc, $form->generate_text_box('disporder', $mybb->input['disporder'], array('id' => 'disporder')), 'disporder');
$form_container->output_row($lang->server_field_link, $lang->server_field_link_desc, $form->generate_text_box('field_link', $mybb->input['field_link'], array('id' => 'field_link')), 'field_link');
$form_container->output_row($lang->server_field_icon, $lang->server_field_icon_desc, $form->generate_text_box('field_icon', $mybb->input['field_icon'], array('id' => 'field_icon')), 'field_icon');
$form_container->output_row($lang->server_owner."<em> *</em>", $lang->server_owner_desc, $form->generate_text_box('owner', $mybb->input['owner'], array('id' => 'owner')), 'owner');
$form_container->output_row($lang->server_visible, $lang->server_visible_desc, $form->generate_yes_no_radio('visible', $mybb->input['visible'], true));
$form_container->output_row($lang->server_new, $lang->server_new_desc, $form->generate_yes_no_radio('new', $mybb->input['new'], true), '', '', array('id' => 'new'));
$form_container->output_row($lang->server_new_color, $lang->server_new_color_desc, $form->generate_text_box('new_color', $mybb->input['new_color'], array('id' => 'new_color')), 'new_color', '', array('id' => 'new_color'));
$form_container->output_row($lang->server_new_text, $lang->server_new_text_desc, $form->generate_text_box('new_text', $mybb->input['new_text'], array('id' => 'new_text')), 'new_text', '', array('id' => 'new_text'));
//$form_container->output_row($lang->server_buddylist, $lang->server_buddylist_desc, $form->generate_text_area('buddylist', $mybb->input['buddylist'], array('id' => 'buddylist')), 'buddylist');
$form_container->end();
$buttons[] = $form->generate_submit_button($lang->server_add_save);
echo '<script type="text/javascript" src="./jscripts/peeker.js"></script>
<script type="text/javascript">
$(document).ready(function() {
loadPeekers();
});
function loadPeekers() {
\'new Peeker($("#type"), $("#ts3qpor"), /[^0+|][\teamspeak3*]/, false)\',
\'new Peeker($(".new"), $("#new_color"), /1/, true)\',
\'new Peeker($(".new"), $("#new_text"), /1/, true)\',
}
</script>';
$form->output_submit_wrapper($buttons);
$form->end();
$page->output_footer();
}
if($mybb->input['action'] == "edit")
{
$query = $db->simple_select("serversboard", "*", "sid='".$mybb->get_input('sid', 1)."'");
$server = $db->fetch_array($query);
if(!$server['sid'])
{
flash_message($lang->server_edit_error, 'error');
admin_redirect("index.php?module=config-serversboard");
}
$plugins->run_hooks("admin_config_serversboard_edit");
// || !preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,6}/', $mybb->input['ip'], $match)
if($mybb->request_method == "post")
{
if(!trim($mybb->input['ip']))
{
$errors[] = $lang->server_error_missing_ip;
}
if(!trim($mybb->input['type']))
{
$errors[] = $lang->server_error_missing_type;
}
if($mybb->input['type'] == "teamspeak3" && !trim($mybb->input['ts3qport']))
{
$errors[] = $lang->server_error_missing_ts3qport;
}
if(!trim($mybb->input['offlinehostname']))
{
$errors[] = $lang->server_error_missing_offlinehostname;
}
if(!trim($mybb->input['disporder']) || !preg_match('/[0-9]{1,3}/', $mybb->input['disporder'], $match))
{
$errors[] = $lang->server_error_missing_disporder;
}
if(!trim($mybb->input['owner']))
{
$errors[] = $lang->server_error_missing_owner;
}
if(!$errors)
{
$updated_server = array(
"ip" => $db->escape_string(trim($mybb->input['ip'])),
"type" => $db->escape_string($mybb->input['type']),
"ts3qport" => $db->escape_string(trim($mybb->input['ts3qport'])),
"offlinehostname" => $db->escape_string($mybb->input['offlinehostname']),
"cuthostname" => intval($mybb->input['cuthostname']),
"disporder" => intval($mybb->input['disporder']),
"field_link" => $db->escape_string($mybb->input['field_link']),
"field_icon" => $db->escape_string($mybb->input['field_icon']),
"visible" => intval($mybb->input['visible']),
"owner" => $db->escape_string($mybb->input['owner']),
"new" => intval($mybb->input['new']),
"new_color" => $db->escape_string($mybb->input['new_color']),
"new_text" => $db->escape_string($mybb->input['new_text']),
"lastupdate" => intval('0'),
);
$plugins->run_hooks("admin_config_serversboard_edit_commit");
$db->update_query("serversboard", $updated_server, "sid = '".intval($mybb->input['sid'])."'");
log_admin_action($server['sid'], $mybb->input['offlinehostname']);
flash_message($lang->server_edit_success, 'success');
admin_redirect("index.php?module=config-serversboard");
}
}
$page->add_breadcrumb_item($lang->server_edit);
$page->output_header($lang->servers_list." - ".$lang->server_edit);
$sub_tabs['serversboard_edit'] = array(
'title' => $lang->server_edit,
'link' => "index.php?module=config-serversboard&action=edit",
'description' => $lang->server_edit_desc,
);
$page->output_nav_tabs($sub_tabs, 'serversboard_edit');
$form = new Form("index.php?module=config-serversboard&action=edit", "post");
echo $form->generate_hidden_field("sid", $server['sid']);
if($errors)
{
$page->output_inline_error($errors);
}
else
{
$mybb->input = $server;
}
$select_list = array(
"" => $lang->server_type_select,
"bf3" => "Battlefield 3",
"bf4" => "Battlefield 4",
"cod4" => "Call of Duty 4",
"cs16" => "Counter-Strike 1.6",
"cscz" => "Counter-Strike Condition Zero",
"css" => "Counter-Strike Source",
"csgo" => "Counter-Strike Global Offensive",
"dayz" => "DayZ",
"dayzmod" => "DayZ Mod",
"gmod" => "Garry's Mod",
"l4d" => "Left 4 Dead",
"l4d2" => "Left 4 Dead 2",
"minecraft" => "MineCraft",
"mta" => "Multi Theft Auto",
"samp" => "San Andreas Multi Player",
"tf2" => "Team Fortress 2",
"tfc" => "Team Fortress Classic",
"teamspeak3" => "TeamSpeak 3",
"ventrilo" => "Ventrilo"
);
$form_container = new FormContainer($lang->server_edit);
$form_container->output_row($lang->server_ip."<em> *</em>", $lang->server_ip_desc, $form->generate_text_box('ip', $mybb->input['ip'], array('id' => 'ip')), 'ip');
$form_container->output_row($lang->server_type, $lang->server_type_desc, $form->generate_select_box('type', $select_list, $mybb->input['type'], array('id' => 'type')), 'type');
$form_container->output_row($lang->server_ts3qport, $lang->server_ts3qport_desc, $form->generate_text_box('ts3qport', $mybb->input['ts3qport'], array('id' => 'ts3qport')), 'ts3qport');
$form_container->output_row($lang->server_offlinehostname."<em> *</em>", $lang->server_offlinehostname_desc, $form->generate_text_box('offlinehostname', $mybb->input['offlinehostname'], array('id' => 'offlinehostname')), 'offlinehostname');
$form_container->output_row($lang->server_cuthostname, $lang->server_cuthostname_desc, $form->generate_text_box('cuthostname', $mybb->input['cuthostname'], array('id' => 'cuthostname')), 'cuthostname');
$form_container->output_row($lang->server_disporder."<em> *</em>", $lang->server_disporder_desc, $form->generate_text_box('disporder', $mybb->input['disporder'], array('id' => 'disporder')), 'disporder');
$form_container->output_row($lang->server_field_link, $lang->server_field_link_desc, $form->generate_text_box('field_link', $mybb->input['field_link'], array('id' => 'field_link')), 'field_link');
$form_container->output_row($lang->server_field_icon, $lang->server_field_icon_desc, $form->generate_text_box('field_icon', $mybb->input['field_icon'], array('id' => 'field_icon')), 'field_icon');
$form_container->output_row($lang->server_owner."<em> *</em>", $lang->server_owner_desc, $form->generate_text_box('owner', $mybb->input['owner'], array('id' => 'owner')), 'owner');
$form_container->output_row($lang->server_visible, $lang->server_visible_desc, $form->generate_yes_no_radio('visible', $mybb->input['visible'], true));
$form_container->output_row($lang->server_new, $lang->server_new_desc, $form->generate_yes_no_radio('new', $mybb->input['new'], true));
$form_container->output_row($lang->server_new_color, $lang->server_new_color_desc, $form->generate_text_box('new_color', $mybb->input['new_color'], array('id' => 'new_color')), 'new_color');
$form_container->output_row($lang->server_new_text, $lang->server_new_text_desc, $form->generate_text_box('new_text', $mybb->input['new_text'], array('id' => 'new_text')), 'new_text');
//$form_container->output_row($lang->server_buddylist, $lang->server_buddylist_desc, $form->generate_text_area('buddylist', $mybb->input['buddylist'], array('id' => 'buddylist')), 'buddylist');
$form_container->end();
$buttons[] = $form->generate_submit_button($lang->server_edit_save);
$form->output_submit_wrapper($buttons);
$form->end();
$page->output_footer();
}
if($mybb->input['action'] == "delete")
{
$query = $db->simple_select("serversboard", "*", "sid='".$mybb->get_input('sid', 1)."'");
$server = $db->fetch_array($query);
if(!$server['sid'])
{
flash_message($lang->server_delete_error, 'error');
admin_redirect("index.php?module=config-serversboard");
}
$plugins->run_hooks("admin_config_serversboard_delete");
if($mybb->input['no'])
{
admin_redirect("index.php?module=config-serversboard");
}
if($mybb->request_method == "post")
{
$db->delete_query("serversboard", "sid='{$server['sid']}'");
$plugins->run_hooks("admin_config_serversboard_delete_commit");
log_admin_action($server['sid'], $server['offlinehostname']);
flash_message($lang->server_delete_success, 'success');
admin_redirect("index.php?module=config-serversboard");
}
else
{
$page->output_confirm_action("index.php?module=config-serversboard&action=delete&sid={$server['sid']}", $lang->server_confirm_deletion);
}
}
if($mybb->input['action'] == "update_order" && $mybb->request_method == "post")
{
if(!is_array($mybb->input['disporder']))
{
admin_redirect("index.php?module=config-serversboard");
}
$plugins->run_hooks("admin_config_serversboard_update_order");
foreach($mybb->input['disporder'] as $sid => $order)
{
$update_query = array(
"disporder" => intval($order)
);
$db->update_query("serversboard", $update_query, "sid='".intval($sid)."'");
}
$plugins->run_hooks("admin_config_serversboard_update_order_commit");
log_admin_action();
flash_message($lang->servers_orders_updated_success, 'success');
admin_redirect("index.php?module=config-serversboard");
}
if(!$mybb->input['action'])
{
$page->output_header($lang->servers_list);
$page->output_nav_tabs($sub_tabs, 'serversboard');
$form = new Form("index.php?module=config-serversboard&action=update_order", "post");
$table = new Table;
$table->construct_header($lang->servers_name, array('width' => '40%'));
$table->construct_header($lang->servers_status, array('width' => '10%'));
$table->construct_header($lang->servers_ip, array('width' => '10%'));
$table->construct_header($lang->servers_type, array('width' => '10%'));
$table->construct_header($lang->servers_order, array('width' => '10%', 'class' => 'align_center'));
$table->construct_header($lang->servers_options, array('width' => '10%', 'class' => 'align_center'));
require_once SERVERSBOARD_CORE_PATH."gameq.php";
$query = $db->simple_select("serversboard", "*", "", array('order_by' => 'disporder'));
while($server = $db->fetch_array($query))
{
switch($server['type'])
{
case "mta":
$ip= explode(":", $server['ip']);
$cos = "123";
$ip1 = $ip[1] + $cos;
$server['ip'] = $ip[0].":".$ip1;
break;
}
if($server['type'] == "teamspeak3")
{
$servers = array(
array(
'type' => $server['type'],
'host' => $server['ip'],
'options' => array(
'master_server_port' => $server['ts3qport'],
),
),
);
}
else
{
$servers = array(
array(
'type' => $server['type'],
'host' => $server['ip'],
),
);
}
if(TIME_NOW - $mybb->settings['serversboard_cache_time'] < $server['lastupdate'])
{
$results = @unserialize($server['cache']);
}
else
{
$gq = new GameQ();
$gq->addServers($servers);
$gq->setOption('timeout', 5);
$gq->setFilter('normalise');
$gq->setFilter('stripcolor');
$results = $gq->requestData();
$update_query = array(
"cache" => $db->escape_string(serialize($results)),
"lastupdate" => TIME_NOW,
);
$db->update_query("serversboard", $update_query, "sid='".$server['sid']."'");
}
foreach($results as $data)
if($data['gq_hostname'] == "")
{
$data['gq_hostname'] = $server['offlinehostname'];
if($mybb->settings['serversboard_remove_host_onoff'] == '1') $data['gq_hostname'] = str_replace(explode(",",$mybb->settings['serversboard_remove_host']), "", $data['gq_hostname']);
if($server['cuthostname'] != "" && $server['cuthostname'] > 1) $data['gq_hostname'] = (my_strlen($data['gq_hostname']) > $server['cuthostname']) ? my_substr($data['gq_hostname'], 0, $server['cuthostname']) . "..." : $data['gq_hostname'];
$data['gq_status'] = $lang->servers_offline;
}
elseif($data['gq_hostname'] != "")
{
$data['gq_hostname'] = $data['gq_hostname'];
if($mybb->settings['serversboard_remove_host_onoff'] == '1') $data['gq_hostname'] = str_replace(explode(",",$mybb->settings['serversboard_remove_host']), "", $data['gq_hostname']);
if($server['cuthostname'] != "" && $server['cuthostname'] > 1) $data['gq_hostname'] = (my_strlen($data['gq_hostname']) > $server['cuthostname']) ? my_substr($data['gq_hostname'], 0, $server['cuthostname']) . "..." : $data['gq_hostname'];
$data['gq_status'] = $lang->servers_online;
if($data['gq_numplayers'] > $server['recordplayers'] || $server['recordplayers'] > $data['gq_maxplayers'])
{
$updated_server = array(
"recordplayers" => $db->escape_string($data['gq_numplayers']),
);
$db->update_query("serversboard", $updated_server, "sid = '".$server['sid']."'");
}
}
$table->construct_cell("<a href=\"index.php?module=config-serversboard&action=edit&sid={$server['sid']}\"><strong>{$data['gq_hostname']}</strong></a>");
$table->construct_cell($data['gq_status']);
$table->construct_cell($server['ip']);
$table->construct_cell($server['type']);
$table->construct_cell($form->generate_text_box("disporder[{$server['sid']}]", $server['disporder'], array('id' => 'disporder', 'style' => 'width: 80%', 'class' => 'align_center')));
$popup = new PopupMenu("serversboard_{$server['sid']}", $lang->servers_options);
$popup->add_item($lang->server_option_edit, "index.php?module=config-serversboard&action=edit&sid={$server['sid']}");
$popup->add_item($lang->server_option_delete, "index.php?module=config-serversboard&action=delete&sid={$server['sid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->server_popup_confirm_deletion}')");
$table->construct_cell($popup->fetch(), array('class' => 'align_center'));
$table->construct_row();
}
if($table->num_rows() == 0)
{
$table->construct_cell($lang->no_servers, array('colspan' => 6));
$table->construct_row();
$no_results = true;
}
$table->output($lang->servers_list);
if(!$no_results)
{
$buttons[] = $form->generate_submit_button($lang->save_servers_order);
$form->output_submit_wrapper($buttons);
}
$form->end();
$page->output_footer();
}
?>