e6fa1dc0ea
Added save YABs to file constant which was previously a function param
3534 lines
182 KiB
PHP
3534 lines
182 KiB
PHP
<?php
|
|
|
|
class idlersConfig
|
|
{
|
|
const PAGE_TITLE = 'My idlers';
|
|
const PAGE_DESC = 'My idlers listing server, shared hosting and domains information and data.';
|
|
|
|
const SRV_SORT_TYPE = 'HOSTNAME_ASC';//Server card sort type
|
|
const SH_SORT_TYPE = 'HOSTNAME_ASC';//Shared hosting sort type
|
|
const DC_SORT_TYPE = 'HOSTNAME_ASC';//Domains sort type
|
|
//Options: PRICE_DESC, PRICE_ASC, DUE_DESC, DUE_ASC, OWNED_SINCE_DESC,OWNED_SINCE_ASC, HOSTNAME_DESC & HOSTNAME_ASC
|
|
|
|
const DB_HOSTNAME = '127.0.0.1';
|
|
const DB_NAME = 'idlers';
|
|
const DB_USERNAME = 'root';
|
|
const DB_PASSWORD = '';
|
|
|
|
//Have slight background color for server table values: was special price and due soon
|
|
const COLOR_TABLE = true;
|
|
|
|
const DEFAULT_VIEW = 'CARDS';//CARDS or TABLE
|
|
|
|
const SAVE_YABS_OUTPUT = true;//true or false
|
|
}
|
|
|
|
class elementHelpers extends idlersConfig
|
|
{
|
|
//Minimizes lines used + opening and closing of <?PHP tag
|
|
protected function tagOpen(string $tag = 'div', string $class = '', string $id = '')
|
|
{
|
|
if (empty($class) && empty($id)) {
|
|
$this->outputString("<$tag>");
|
|
} elseif (empty($class) && !empty($id)) {
|
|
$this->outputString("<$tag id='$id'>");
|
|
} elseif (!empty($class) && empty($id)) {
|
|
$this->outputString("<$tag class='$class'>");
|
|
} else {
|
|
$this->outputString("<$tag class='$class' id='$id'>");
|
|
}
|
|
}
|
|
|
|
protected function tagClose(string $tag = 'div', int $amount = 1)
|
|
{
|
|
for ($i = 1; $i <= $amount; $i++) {
|
|
$this->outputString("</$tag>");
|
|
}
|
|
}
|
|
|
|
protected function outputString(string $string)
|
|
{
|
|
echo $string;
|
|
}
|
|
|
|
protected function collapseButton(string $text, string $href, string $id = 'collapseId', string $class = 'btn btn-main collapse-btn', bool $expanded = false)
|
|
{
|
|
($expanded) ? $ex = "true" : $ex = "false";
|
|
$this->outputString('<a class="' . $class . '" data-toggle="collapse" href="#' . $href . '" id="' . $id . '" role="button" aria-expanded="' . $ex . '">' . $text . '</a>');
|
|
}
|
|
|
|
protected function HTMLphrase(string $element = 'p', string $class = '', string $text = '', string $id = '')
|
|
{
|
|
if (empty($class)) {
|
|
if (empty($id)) {
|
|
$this->tagOpen($element);
|
|
} else {
|
|
$this->tagOpen($element, '', $id);
|
|
}
|
|
} else {
|
|
if (empty($id)) {
|
|
$this->tagOpen($element, $class);
|
|
} else {
|
|
$this->tagOpen($element, $class, $id);
|
|
}
|
|
}
|
|
$this->outputString($text);
|
|
$this->tagClose($element);
|
|
}
|
|
|
|
protected function colOpen(string $class = 'col-12')
|
|
{
|
|
$this->tagOpen('div', $class);
|
|
}
|
|
|
|
protected function rowColOpen(string $row_class = 'row', string $col_class = 'col-12')
|
|
{
|
|
$this->tagOpen('div', $row_class);
|
|
$this->tagOpen('div', $col_class);
|
|
}
|
|
|
|
protected function textInput(string $name_id, string $value = '', string $class = 'form-control', bool $required = false, int $min_length = 0, int $max_length = 124)
|
|
{
|
|
(empty($value)) ? $val = '' : $val = " value='$value'";
|
|
($required) ? $req = 'required' : $req = '';
|
|
$this->outputString("<input type='text' id='$name_id' name='$name_id' class='$class' min-length='$min_length' max-length='$max_length'$val $req>");
|
|
}
|
|
|
|
protected function numberInput(string $name_id, string $value = '', string $class = 'form-control', bool $required = false, int $min = 0, int $max = 9999, string $step = 'any')
|
|
{
|
|
(empty($value)) ? $val = '' : $val = " value='$value'";
|
|
($required) ? $req = 'required' : $req = '';
|
|
$this->outputString("<input type='number' id='$name_id' name='$name_id' class='$class' min='$min' max='$max' step='$step'$val $req>");
|
|
}
|
|
|
|
protected function hiddenInput(string $name_id, string $value = '')
|
|
{
|
|
(empty($value)) ? $val = '' : $val = " value='$value'";
|
|
$this->outputString("<input type='hidden' id='$name_id' name='$name_id' $val>");
|
|
}
|
|
|
|
protected function submitInput(string $text, string $id = 'submitInput', string $class = 'btn')
|
|
{
|
|
$this->outputString("<input type='submit' class='$class' id='$id' value='$text'>");
|
|
}
|
|
|
|
protected function inputPrepend(string $text)
|
|
{
|
|
$this->outputString('<div class="input-group-prepend"><span class="input-group-text">' . $text . '</span></div>');
|
|
}
|
|
|
|
protected function tagsInput(string $name_id, string $class = 'form-control')
|
|
{
|
|
$this->outputString("<input type='text' id='$name_id' name='$name_id' class='$class' data-role='tagsinput'>");
|
|
}
|
|
|
|
protected function selectElement(string $name_id, string $class = 'form-control')
|
|
{
|
|
$this->outputString("<select class='$class' id='$name_id' name='$name_id'>");
|
|
}
|
|
|
|
protected function selectOption(string $text, string $value, bool $selected = false)
|
|
{
|
|
($selected) ? $sel = ' selected' : $sel = '';
|
|
$this->outputString("<option value='$value'$sel>$text</option>");
|
|
}
|
|
|
|
protected function checkInput(string $text, string $name_id, string $input_class = 'form-check-input', string $label_class = 'form-check-label')
|
|
{
|
|
$this->tagOpen("div", "form-check");
|
|
$this->outputString("<input class='$input_class' type='checkbox' id='$name_id' name='$name_id'>");
|
|
$this->outputString("<label class='$label_class' for='$name_id'>");
|
|
$this->outputString("<b>$text</b>");
|
|
$this->tagClose("label");
|
|
$this->tagClose("div");
|
|
}
|
|
|
|
protected function navTabs(array $names, array $links)
|
|
{
|
|
$this->tagOpen("ul", "nav nav-tabs");
|
|
$counter = 0;
|
|
foreach ($names as $tab) {
|
|
$this->tagOpen("li", "nav-item");
|
|
if ($counter == 0) {
|
|
$this->outputString('<a class="nav-link active" data-toggle="tab" href="' . $links[$counter] . '">' . $tab . '</a>');
|
|
} else {
|
|
$this->outputString('<a class="nav-link" data-toggle="tab" href="' . $links[$counter] . '">' . $tab . '</a>');
|
|
}
|
|
$this->tagClose("li");
|
|
$counter++;
|
|
}
|
|
$this->tagClose("ul");
|
|
}
|
|
|
|
protected function tableHeader(array $headers, string $class = 'table table-striped table-bordered table-sm', string $id = 'orderTable')
|
|
{
|
|
$this->tagOpen('div', 'table-responsive');
|
|
$this->outputString("<table class='$class' id='$id'>");
|
|
$this->tagOpen('thead');
|
|
$this->tagOpen('tr');
|
|
foreach ($headers as $th) {
|
|
$this->outputString("<th>$th</th>");
|
|
}
|
|
$this->outputString('</tr></thead><tbody>');
|
|
}
|
|
|
|
protected function tableTd(string $class, $content)
|
|
{
|
|
$this->tagOpen('td', $class);
|
|
$this->outputString($content);
|
|
$this->tagClose('td');
|
|
}
|
|
|
|
protected function virtSelectOptions()
|
|
{
|
|
$this->selectOption('KVM', 'KVM', true);
|
|
$this->selectOption('OVZ', 'OVZ');
|
|
$this->selectOption('DEDI', 'DEDI');
|
|
$this->selectOption('LXC', 'LXC');
|
|
}
|
|
|
|
protected function sharedHostingTypeOptions()
|
|
{
|
|
$this->selectOption('ApisCP', 'ApisCP');
|
|
$this->selectOption('Centos', 'Centos');
|
|
$this->selectOption('cPanel', 'cPanel', true);
|
|
$this->selectOption('Direct Admin', 'Direct Admin');
|
|
$this->selectOption('Webmin', 'Webmin');
|
|
$this->selectOption('Moss', 'Moss');
|
|
$this->selectOption('Other', 'Other');
|
|
$this->selectOption('Plesk', 'Plesk');
|
|
$this->selectOption('Run cloud', 'Run cloud');
|
|
$this->selectOption('Vesta CP', 'Vesta CP');
|
|
$this->selectOption('Virtual min', 'Virtual min');
|
|
}
|
|
|
|
protected function termSelectOptions()
|
|
{
|
|
$this->selectOption('Monthly', '1', true);
|
|
$this->selectOption('Quarterly', '2');
|
|
$this->selectOption('Half annual (half year)', '3');
|
|
$this->selectOption('Annual (yearly)', '4');
|
|
$this->selectOption('Biennial (2 years)', '5');
|
|
$this->selectOption('Triennial (3 years)', '6');
|
|
}
|
|
|
|
protected function domainTermSelectOptions()
|
|
{
|
|
$this->selectOption('Annual (yearly)', '4', true);
|
|
$this->selectOption('Biennial (2 years)', '5');
|
|
$this->selectOption('Triennial (3 years)', '6');
|
|
}
|
|
|
|
protected function CurrencySelectOptions()
|
|
{
|
|
$this->selectOption('AUD', 'AUD');
|
|
$this->selectOption('USD', 'USD', true);
|
|
$this->selectOption('GBP', 'GBP');
|
|
$this->selectOption('EUR', 'EUR');
|
|
$this->selectOption('NZD', 'NZD');
|
|
$this->selectOption('JPY', 'JPY');
|
|
$this->selectOption('CAD', 'CAD');
|
|
}
|
|
|
|
protected function OsSelectOptions()
|
|
{
|
|
$this->selectOption('Centos 7', '1');
|
|
$this->selectOption('Centos 8', '2');
|
|
$this->selectOption('Centos', '3');
|
|
$this->selectOption('Debian 9', '4');
|
|
$this->selectOption('Debian 10', '5');
|
|
$this->selectOption('Debian', '6');
|
|
$this->selectOption('Fedora 32', '7');
|
|
$this->selectOption('Fedora 33', '8');
|
|
$this->selectOption('Fedora', '9');
|
|
$this->selectOption('FreeBSD 11.4', '10');
|
|
$this->selectOption('FreeBSD 12.1', '11');
|
|
$this->selectOption('FreeBSD', '12');
|
|
$this->selectOption('OpenBSD 6.7', '13');
|
|
$this->selectOption('OpenBSD 6.8', '14');
|
|
$this->selectOption('OpenBSD', '15');
|
|
$this->selectOption('Ubuntu 16.04', '16');
|
|
$this->selectOption('Ubuntu 18.04', '17');
|
|
$this->selectOption('Ubuntu 20.04', '18');
|
|
$this->selectOption('Ubuntu 20.10', '19');
|
|
$this->selectOption('Ubuntu', '20');
|
|
$this->selectOption('Windows Server 2008', '21');
|
|
$this->selectOption('Windows Server 2012', '22');
|
|
$this->selectOption('Windows Server 2016', '23');
|
|
$this->selectOption('Windows Server 2019', '24');
|
|
$this->selectOption('Windows 10', '25');
|
|
$this->selectOption('Custom', '26');
|
|
$this->selectOption('Other', '27');
|
|
}
|
|
|
|
}
|
|
|
|
class helperFunctions extends elementHelpers
|
|
{
|
|
protected function genID(int $length = 8)
|
|
{//Returns an id string
|
|
$character_pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
|
|
$char_length = strlen($character_pool);
|
|
$the_string = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$the_string .= $character_pool[mt_rand(0, $char_length - 1)];
|
|
}
|
|
return $the_string;
|
|
}
|
|
|
|
protected function mhzToGhz(string $mhz, int $decimals = 2)
|
|
{
|
|
return number_format(floatval(($mhz / 1000)), $decimals);
|
|
}
|
|
|
|
protected function paymentTerm(int $term)
|
|
{
|
|
if ($term == 1) {
|
|
return "p/m";
|
|
} elseif ($term == 2) {
|
|
return "p/qtr";
|
|
} elseif ($term == 3) {
|
|
return "p/hy";
|
|
} elseif ($term == 4) {
|
|
return "p/y";
|
|
} elseif ($term == 5) {
|
|
return "p/2y";
|
|
} elseif ($term == 6) {
|
|
return "p/3y";
|
|
} else {
|
|
return "NULL";
|
|
}
|
|
}
|
|
|
|
protected function costAsPerMonth(string $cost, int $term)
|
|
{
|
|
if ($term == 1) {
|
|
return $cost;
|
|
} elseif ($term == 2) {
|
|
return ($cost / 3);
|
|
} elseif ($term == 3) {
|
|
return ($cost / 6);
|
|
} elseif ($term == 4) {
|
|
return ($cost / 12);
|
|
} elseif ($term == 5) {
|
|
return ($cost / 24);
|
|
} elseif ($term == 6) {
|
|
return ($cost / 36);
|
|
} else {
|
|
return $cost;
|
|
}
|
|
}
|
|
|
|
protected function convertToUSD(string $amount, string $convert_from)
|
|
{
|
|
if ($convert_from == 'AUD') {
|
|
return (0.76 * $amount);
|
|
} elseif ($convert_from == "USD") {
|
|
return $amount;
|
|
} elseif ($convert_from == "GBP") {
|
|
return (1.35 * $amount);
|
|
} elseif ($convert_from == "EUR") {
|
|
return (1.23 * $amount);
|
|
} elseif ($convert_from == "NZD") {
|
|
return (0.72 * $amount);
|
|
} elseif ($convert_from == "JPY") {
|
|
return (0.0097 * $amount);
|
|
} elseif ($convert_from == "CAD") {
|
|
return (0.78 * $amount);
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
protected function osIntToIcon(int $os)
|
|
{
|
|
if ($os <= 3) {//Centos
|
|
return "<i class='fab fa-centos os-icon'></i>";
|
|
} elseif ($os > 3 && $os <= 6) {//Debain
|
|
return "<i class='fab fa-linux os-icon'></i>";
|
|
} elseif ($os > 6 && $os < 10) {//Fedora
|
|
return "<i class='fab fa-fedora os-icon'></i>";
|
|
} elseif ($os > 10 && $os < 13) {//FreeBSD
|
|
return "<i class='fab fa-linux os-icon'></i>";
|
|
} elseif ($os > 13 && $os < 16) {//OpenBSD
|
|
return "<i class='fab fa-linux os-icon'></i>";
|
|
} elseif ($os > 15 && $os < 21) {//Ubuntu
|
|
return "<i class='fab fa-ubuntu os-icon'></i>";
|
|
} elseif ($os > 20 && $os < 26) {//Windows
|
|
return "<i class='fab fa-windows os-icon'></i>";
|
|
} else {//OTHER ISO CUSTOM etc
|
|
return "<i class='fas fa-compact-disc os-icon'></i>";
|
|
}
|
|
}
|
|
|
|
protected function osIntToString(int $os)
|
|
{
|
|
if ($os == "1") {
|
|
return "CentOS 7";
|
|
} elseif ($os == "2") {
|
|
return "CentOS 8";
|
|
} elseif ($os == "3") {
|
|
return "CentOS";
|
|
} elseif ($os == "4") {
|
|
return "Debian 9";
|
|
} elseif ($os == "5") {
|
|
return "Debian 10";
|
|
} elseif ($os == "6") {
|
|
return "Debian";
|
|
} elseif ($os == "7") {
|
|
return "Fedora 32";
|
|
} elseif ($os == "8") {
|
|
return "Fedora 33";
|
|
} elseif ($os == "9") {
|
|
return "Fedora";
|
|
} elseif ($os == "10") {
|
|
return "FreeBSD 11.4";
|
|
} elseif ($os == "11") {
|
|
return "FreeBSD 12.1";
|
|
} elseif ($os == "12") {
|
|
return "FreeBSD";
|
|
} elseif ($os == "13") {
|
|
return "OpenBSD 6.7";
|
|
} elseif ($os == "14") {
|
|
return "OpenBSD 6.8";
|
|
} elseif ($os == "15") {
|
|
return "OpenBSD";
|
|
} elseif ($os == "16") {
|
|
return "Ubuntu 16.04";
|
|
} elseif ($os == "17") {
|
|
return "Ubuntu 18.04";
|
|
} elseif ($os == "18") {
|
|
return "Ubuntu 20.04";
|
|
} elseif ($os == "19") {
|
|
return "Ubuntu 20.10";
|
|
} elseif ($os == "20") {
|
|
return "Ubuntu";
|
|
} elseif ($os == "21") {
|
|
return "Windows Server 2008";
|
|
} elseif ($os == "22") {
|
|
return "Windows Server 2012";
|
|
} elseif ($os == "23") {
|
|
return "Windows Server 2016";
|
|
} elseif ($os == "24") {
|
|
return "Windows Server 2019";
|
|
} elseif ($os == "25") {
|
|
return "Windows 10";
|
|
} elseif ($os == "26") {
|
|
return "Custom";
|
|
} elseif ($os == "27") {
|
|
return "Other";
|
|
} else {
|
|
return "Unknown";
|
|
}
|
|
}
|
|
|
|
protected function floatValue(string $string)
|
|
{//Keeps only numbers and . AKA a float
|
|
return preg_replace('/[^0-9,.]/', '', trim($string));
|
|
}
|
|
|
|
protected function intValue(string $string)
|
|
{//Keeps only numbers AKA an int
|
|
return preg_replace('/[^0-9]/', '', trim($string));
|
|
}
|
|
|
|
protected function removeFloat(string $string)
|
|
{//Removes float from a string
|
|
return ltrim(preg_replace('/[^A-Za-z\-,.]/', '', $string), '.');
|
|
}
|
|
|
|
protected function trimRemoveR(string $string)
|
|
{//Removes \r and does a trim()
|
|
return trim(str_replace("\r", '', $string));
|
|
}
|
|
|
|
protected function datatype(string $string)
|
|
{//Formats data type (ram and disk)
|
|
if (strpos($string, 'M') !== false) {
|
|
return 'MB';//Megabytes
|
|
} elseif (strpos($string, 'G') !== false) {
|
|
return 'GB';//Gigabytes
|
|
} elseif (strpos($string, 'K') !== false) {
|
|
return 'KB';//Kilobytes
|
|
} elseif (strpos($string, 'T') !== false) {
|
|
return 'TB';//TeraBytes
|
|
} elseif (strpos($string, 'B') !== false) {
|
|
return 'BT';//Bytes
|
|
}
|
|
}
|
|
|
|
public function GBtoMB(string $gb)
|
|
{//Gigabyte to Megabyte conversion
|
|
return floatval(($gb * 1024));
|
|
}
|
|
|
|
protected function TBtoGB(string $tb)
|
|
{//Terabyte to Gigabyte conversion
|
|
return floatval(($tb * 1024));
|
|
}
|
|
|
|
protected function GBpstoMBps(string $gbps, bool $format = false)
|
|
{//Gigabits to Megabits
|
|
$gbps = (float)$gbps;
|
|
if ($format) {
|
|
return floatval(number_format(($gbps * 1000), 3));
|
|
} else {
|
|
return floatval(($gbps * 1000));
|
|
}
|
|
}
|
|
|
|
protected function yabsSpeedLoc(array $data)
|
|
{//Formats YABs speed test provider and location as array
|
|
if ($data[1] == '|') {
|
|
$provider = $data[0];
|
|
} else {
|
|
$provider = $data[0] . ' ' . $data[1];
|
|
}
|
|
if ($data[2] !== '|') {
|
|
$location = $data[2] . ' ' . str_replace(',', '', $data[3]);
|
|
} else {
|
|
$location = $data[3] . ' ' . str_replace(',', '', $data[4]);
|
|
}
|
|
return array('provider' => $provider, 'location' => $location);
|
|
}
|
|
|
|
protected function yabsSpeedValues(array $data)
|
|
{//Formats YABs speed test for speed value and type as array
|
|
$data = explode('|', implode($data));
|
|
if ($data[2] == 'busy') {
|
|
$send = $send_type = NULL;
|
|
} else {
|
|
$send = floatval($data[2]);
|
|
if ($this->removeFloat($data[2]) == 'Mbitssec') {
|
|
$send_type = "MBps";
|
|
} elseif ($this->removeFloat($data[2]) == 'Gbitssec') {
|
|
$send_type = "GBps";
|
|
} elseif ($this->removeFloat($data[2]) == 'Kbitssec') {
|
|
$send_type = "KBps";
|
|
} else {
|
|
$send_type = $this->removeFloat($data[2]);
|
|
}
|
|
}
|
|
if ($data[3] == 'busy') {
|
|
$receive = $receive_type = NULL;
|
|
} else {
|
|
$receive = floatval($data[3]);
|
|
if ($this->removeFloat($data[3]) == 'Mbitssec') {
|
|
$receive_type = "MBps";
|
|
} elseif ($this->removeFloat($data[3]) == 'Gbitssec') {
|
|
$receive_type = "GBps";
|
|
} elseif ($this->removeFloat($data[3]) == 'Kbitssec') {
|
|
$receive_type = "KBps";
|
|
} else {
|
|
$receive_type = $this->removeFloat($data[3]);
|
|
}
|
|
}
|
|
return array('send' => $send, 'send_type' => $send_type, 'receive' => $receive, 'receive_type' => $receive_type);
|
|
}
|
|
|
|
protected function diskSpeedAsMbps(string $type, string $value)
|
|
{//If value type GB/s convert to MB/s, KB/s to MB/s
|
|
if ($type == "GB/s") {
|
|
return $this->GBpstoMBps($value);
|
|
} elseif ($type == "KB/s") {
|
|
return ($value / 1000);
|
|
} else {
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
protected function networkSpeedAsMbps(string $type, string $value)
|
|
{//If value type GBps convert to MB/s
|
|
if ($type == "GBps") {
|
|
return $this->GBpstoMBps($value);
|
|
} else {
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
protected function intToYesNo(int $int)
|
|
{// 1 = Yes, 0 = No
|
|
if ($int == 1) {
|
|
return "Yes";
|
|
} elseif ($int == 0) {
|
|
return "No";
|
|
} else {
|
|
return $int;
|
|
}
|
|
}
|
|
|
|
protected function saveYABS($content, string $filename)
|
|
{
|
|
return file_put_contents("yabs/$filename", $content);
|
|
}
|
|
|
|
protected function daysAway(string $ahead_date)
|
|
{
|
|
$today = new DateTime("now");
|
|
$date = new DateTime($ahead_date);
|
|
return $date->diff($today)->format("%a");
|
|
}
|
|
}
|
|
|
|
class idlers extends helperFunctions
|
|
{
|
|
protected function dbConnect()
|
|
{
|
|
$options = array(
|
|
PDO::ATTR_PERSISTENT => true,
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
|
|
return new PDO("mysql:host=" . self::DB_HOSTNAME . ";dbname=" . self::DB_NAME . ";charset=utf8mb4", self::DB_USERNAME, self::DB_PASSWORD, $options);
|
|
}
|
|
|
|
protected function pageHead(string $title = 'Page Title')
|
|
{//Echo output because it breaks formatting in PHPstorm if closing + opening PHP tags
|
|
$this->outputString("<html lang='en'>");
|
|
$this->tagOpen("head");
|
|
$this->outputString("<title>" . self::PAGE_TITLE . "</title>");
|
|
$this->outputString("<meta charset='utf-8'>");
|
|
$this->outputString("<meta name='viewport' content='width=device-width, initial-scale=1'>");
|
|
$this->outputString("<meta name='description' content='" . self::PAGE_DESC . "'>");
|
|
$this->outputString("<link rel='shortcut icon' type='image/x-icon' href='assets/favicon.ico' />");
|
|
$this->outputString("<link rel='stylesheet' href='assets/css/style.css'/>");
|
|
$this->tagClose("head");
|
|
$this->tagOpen("body");
|
|
$this->tagOpen("div", "container");
|
|
}
|
|
|
|
protected function pageContents()
|
|
{
|
|
$this->navTabs(array('Services', 'Add', 'Order', 'Info', 'Search'), array('#services', '#add_server', '#order', '#info', '#search'));
|
|
$this->outputString('<div id="myTabContent" class="tab-content">');
|
|
$this->outputString('<div class="tab-pane server-cards fade active show" id="services">');
|
|
$this->viewSwitcherIcon();
|
|
if (self::DEFAULT_VIEW == 'CARDS') {
|
|
$cards_start = 'active';
|
|
$table_start = '';
|
|
} else {
|
|
$cards_start = '';
|
|
$table_start = 'active';
|
|
}
|
|
$this->tagOpen('div', $cards_start, 'cardsViewDiv');
|
|
//Object cards
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', $table_start, 'tableViewDiv');
|
|
//Objects tables
|
|
$this->tagClose('div', 2);
|
|
$this->outputString('<div class="tab-pane fade" id="add_server">');
|
|
//BTN Bar
|
|
$this->rowColOpen('row text-center', 'col-12 btn-bar-col');
|
|
$this->outputString('<div class="btn-group btn-group-toggle" data-toggle="buttons">');
|
|
$this->outputString('<label class="btn btn-main btn-bar active">');
|
|
$this->outputString('<input type="radio" name="options" id="addServerBTN" autocomplete="off" checked>Add server</label>');
|
|
$this->outputString('<label class="btn btn-main btn-bar">');
|
|
$this->outputString('<input type="radio" name="options" id="addServerNoYabsBTN" autocomplete="off">Add server no YABs</label>');
|
|
$this->outputString('<label class="btn btn-main btn-bar">');
|
|
$this->outputString('<input type="radio" name="options" id="addSharedHostingBTN" autocomplete="off">Add shared hosting</label>');
|
|
$this->outputString('<label class="btn btn-main btn-bar">');
|
|
$this->outputString('<input type="radio" name="options" id="addDomainBTN" autocomplete="off">Add Domain</label>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->tagOpen('div', 'collapse show', 'addServer');
|
|
$this->addVPSFormYabs();
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'collapse', 'addServerNoYabs');
|
|
$this->addVPSForm();
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'collapse', 'addSharedHosting');
|
|
$this->addSharedHostingForm();
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'collapse', 'addDomain');
|
|
$this->addDomainForm();
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->outputString('<div class="tab-pane fade" id="order">');
|
|
$this->orderForm();
|
|
$this->tagClose('div');
|
|
|
|
$this->outputString('<div class="tab-pane fade" id="info">');
|
|
$this->tagClose('div');
|
|
|
|
$this->outputString('<div class="tab-pane fade" id="search">');
|
|
$this->searchDiv();
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->editServerModal();
|
|
$this->editSharedHostingModal();
|
|
$this->editDomainModal();
|
|
|
|
$this->outputString('<div class="modal fade" id="viewMoreServerModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog modal-lg" role="document">');
|
|
$this->outputString('<div class="modal-content" id="viewMoreModalBody">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->outputString('<div class="modal fade" id="yabsModal" tabindex="-1" role="dialog" aria-labelledby="yabsmodalview" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog modal-lg" role="document">');
|
|
$this->outputString('<div class="modal-content text-center">');
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->outputString('<h4 class="modal-title w-100" id="yabs_hostname_header"></h4>');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close">');
|
|
$this->outputString('<span aria-hidden="true">×</span>');
|
|
$this->tagClose('button');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body', 'yabsModalBody');
|
|
$this->tagClose('div', 4);
|
|
|
|
$this->outputString('<div class="modal fade" id="viewMoreModalSharedHosting" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog" role="document">');
|
|
$this->outputString('<div class="modal-content" id="viewMoreSharedHostingModalBody">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->outputString('<div class="modal fade" id="viewMoreModalDomain" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog" role="document">');
|
|
$this->outputString('<div class="modal-content" id="viewMoreDomainModalBody">');
|
|
$this->tagClose('div', 3);
|
|
}
|
|
|
|
protected function getProvider(int $provider)
|
|
{
|
|
$select = $this->dbConnect()->prepare("SELECT `name` FROM `providers` WHERE `id` = ? LIMIT 1;");
|
|
$select->execute([$provider]);
|
|
$row = $select->fetch(PDO::FETCH_ASSOC);
|
|
if (!empty($row)) {//Yes
|
|
return $row['name'];
|
|
} else {//NO
|
|
return null;
|
|
}
|
|
}
|
|
|
|
protected function getLocation(int $location)
|
|
{
|
|
$select = $this->dbConnect()->prepare("SELECT `name` FROM `locations` WHERE `id` = ? LIMIT 1;");
|
|
$select->execute([$location]);
|
|
$row = $select->fetch(PDO::FETCH_ASSOC);
|
|
if (!empty($row)) {//Yes
|
|
return $row['name'];
|
|
} else {//NO
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function serverDetails(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("SELECT id, hostname, location, provider, ipv4, ipv6, `cpu`, cpu_type, cpu_freq, ram, ram_type, swap, swap_type, `disk`, disk_type, bandwidth, bandwidth_type, gb5_single, gb5_multi, gb5_id, aes_ni, amd_v, is_dedicated, is_cpu_dedicated, was_special, os, still_have, DATE_FORMAT(`owned_since`, '%M %Y') as owned_since FROM `servers` WHERE `id` = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
return json_encode($data);
|
|
}
|
|
|
|
public function serverData(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("SELECT `has_yabs`, `has_st` FROM `servers` WHERE `id` = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$row = $select->fetch();
|
|
if ($row['has_yabs'] == 1 && $row['has_st'] == 1) {
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT servers.id as server_id,hostname,ipv4,ipv6,`cpu`,cpu_type,cpu_freq,ram,ram_type,swap,swap_type,`disk`,disk_type,bandwidth,bandwidth_type,gb5_single,gb5_multi,gb5_id,aes_ni,amd_v,
|
|
is_dedicated,is_cpu_dedicated,was_special,os,ssh_port,still_have,tags,notes,label,virt,has_yabs,has_st,ns1,ns2,DATE_FORMAT(`owned_since`, '%M %Y') as owned_since, `owned_since` as owned_since_raw, `4k`,`4k_type`,`64k`,`64k_type`,`512k`,`512k_type`,`1m`,`1m_type`,
|
|
loc.name as location,send,send_type,recieve,recieve_type,price,currency,term,as_usd,per_month,usd_per_month,next_dd,pr.name as provider
|
|
FROM servers INNER JOIN disk_speed ds on servers.id = ds.server_id
|
|
INNER JOIN speed_tests st on servers.id = st.server_id INNER JOIN locations loc on servers.location = loc.id
|
|
INNER JOIN providers pr on servers.provider = pr.id INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
$sel_st = $this->dbConnect()->prepare("SELECT `location`, `send`, `send_type`, `recieve`, `recieve_type` FROM `speed_tests` WHERE `server_id` = ? ORDER BY `datetime` DESC LIMIT 8;");
|
|
$sel_st->execute([$id]);
|
|
$speed_tests = $sel_st->fetchAll(PDO::FETCH_ASSOC);
|
|
$final = array_merge($speed_tests, $data);
|
|
return json_encode($final);
|
|
} elseif ($row['has_yabs'] == 1 && $row['has_st'] == 0) {
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT servers.id as server_id,hostname,ipv4,ipv6,`cpu`,cpu_type,cpu_freq,ram,ram_type,swap,swap_type,`disk`,disk_type,bandwidth,bandwidth_type,gb5_single,gb5_multi,gb5_id,aes_ni,amd_v,
|
|
is_dedicated,is_cpu_dedicated,was_special,os,ssh_port,still_have,tags,notes,label,virt,has_yabs,has_st,ns1,ns2,DATE_FORMAT(`owned_since`, '%M %Y') as owned_since, `owned_since` as owned_since_raw, `4k`,`4k_type`,`64k`,`64k_type`,`512k`,`512k_type`,`1m`,`1m_type`,
|
|
loc.name as location,price,currency,term,as_usd,per_month,usd_per_month,next_dd,pr.name as provider
|
|
FROM servers INNER JOIN disk_speed ds on servers.id = ds.server_id
|
|
INNER JOIN locations loc on servers.location = loc.id
|
|
INNER JOIN providers pr on servers.provider = pr.id INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
return json_encode($data);
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT servers.id as server_id,hostname,ipv4,ipv6,`cpu`,cpu_type,cpu_freq,ram,ram_type,swap,swap_type,`disk`,disk_type,
|
|
bandwidth,bandwidth_type,gb5_single,gb5_multi,gb5_id,aes_ni,amd_v,is_dedicated,is_cpu_dedicated,was_special,os,ssh_port,still_have,tags,notes,virt,has_yabs,ns1,ns2,label,has_st,
|
|
DATE_FORMAT(`owned_since`, '%M %Y') as owned_since,loc.name as location,price,currency,term,as_usd,per_month,usd_per_month,next_dd,pr.name as provider
|
|
FROM servers INNER JOIN locations loc on servers.location = loc.id
|
|
INNER JOIN providers pr on servers.provider = pr.id INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
return json_encode($data);
|
|
}
|
|
}
|
|
|
|
public function sharedHostingData(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT shared_hosting.id as server_id, domain, domains_limit, emails, disk, disk_type, disk_as_gb, ftp, db, bandwidth, provider, location, was_special,
|
|
still_have, type, `owned_since` as owned_since_raw, DATE_FORMAT(`owned_since`, '%M %Y') as owned_since,loc.name as location,price,currency,term,as_usd,per_month,next_dd,pr.name as provider
|
|
FROM shared_hosting INNER JOIN locations loc on shared_hosting.location = loc.id
|
|
INNER JOIN providers pr on shared_hosting.provider = pr.id INNER JOIN pricing on shared_hosting.id = pricing.server_id WHERE shared_hosting.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
return json_encode($data);
|
|
}
|
|
|
|
public function domainData(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT domains.id as server_id, domain, attached_to, ns1, ns2, still_have, `owned_since` as owned_since_raw, DATE_FORMAT(`owned_since`, '%M %Y') as owned_since,price,currency,term,as_usd,per_month,next_dd,pr.name as provider
|
|
FROM domains INNER JOIN providers pr on domains.provider = pr.id INNER JOIN pricing on domains.id = pricing.server_id WHERE domains.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
return json_encode($data);
|
|
}
|
|
|
|
protected function serverCards()
|
|
{
|
|
if (self::SRV_SORT_TYPE == 'HOSTNAME_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `hostname` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'HOSTNAME_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `hostname`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `owned_since`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header', 'Servers <span class="object-count">' . $count . '</span>');
|
|
}
|
|
$this->tagOpen('div', 'row');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->vpsCard($row['id']);
|
|
}
|
|
$this->tagClose('div');
|
|
}
|
|
|
|
protected function sharedHostingCards()
|
|
{
|
|
if (self::SH_SORT_TYPE == 'DOMAIN_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'DOMAIN_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain`;");
|
|
} elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since`;");
|
|
} elseif (self::SH_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::SH_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header', 'Shared hosting <span class="object-count">' . $count . '</span>');
|
|
}
|
|
$this->tagOpen('div', 'row');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->SharedHostingCard($row['id']);
|
|
}
|
|
$this->tagClose('div');
|
|
}
|
|
|
|
protected function domainCards()
|
|
{
|
|
if (self::DC_SORT_TYPE == 'DOMAIN_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'DOMAIN_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain`;");
|
|
} elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since`;");
|
|
} elseif (self::DC_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::DC_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header', 'Domains <span class="object-count">' . $count . '</span>');
|
|
}
|
|
$this->tagOpen('div', 'row');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->domainCard($row['id']);
|
|
}
|
|
$this->tagClose('div');
|
|
}
|
|
|
|
protected function serverTable()
|
|
{
|
|
if (self::SRV_SORT_TYPE == 'HOSTNAME_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `hostname` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'HOSTNAME_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `hostname`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` ORDER BY `owned_since`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::SRV_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::SRV_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers` INNER JOIN `pricing` ON servers.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `servers`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header', 'Servers <span class="object-count">' . $count . '</span>');
|
|
$this->tagOpen('div', 'row');
|
|
$this->tableHeader(array('Hostname', '', '', 'Type', 'CPU', 'RAM', 'Disk', 'Price', 'OS', 'Location', 'Provider', 'Due', 'Owned', 'IPv4', 'IPv6', 'Tags'), 'table objects-table', 'serversTable');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->vpsTableRow($row['id']);
|
|
}
|
|
$this->outputString('</tbody></table></div>');
|
|
$this->tagClose('div');
|
|
}
|
|
}
|
|
|
|
protected function vpsCard(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT servers.id,servers.hostname,servers.ipv4,servers.`cpu`,servers.cpu_freq,servers.ram,servers.ram_type,servers.`disk`,
|
|
servers.disk_type,servers.os,servers.virt,servers.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM servers INNER JOIN locations on servers.location = locations.id INNER JOIN providers on servers.provider = providers.id
|
|
INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
($data['was_special'] == 1) ? $special = ' special-card' : $special = '';
|
|
(is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text';
|
|
$this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3');
|
|
$this->tagOpen("div", "card obj-card$special");
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->rowColOpen('row text-center', 'col-12 col-xl-10');
|
|
$this->HTMLphrase('h4', 'hostname-header', $data['hostname']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-xl-2 os-col');
|
|
(empty($data['ipv4']) || is_null($data['ipv4'])) ? $host = $data['hostname'] : $host = $data['ipv4'];
|
|
$this->outputString('<a id="checkUpStatus" href="#" value="' . $host . '">' . $this->osIntToIcon($data['os']) . '</a>');
|
|
$this->tagClose('div', 3);
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']));
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
if (is_null($data['provider']) || empty($data['provider'])) {
|
|
$this->HTMLphrase('h6', 'provider no-prov', ' ');
|
|
} else {
|
|
$this->HTMLphrase('h6', 'provider', $data['provider']);
|
|
}
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
if (is_null($data['location']) || empty($data['location'])) {
|
|
$this->HTMLphrase('h6', 'location no-loc', ' ');
|
|
} else {
|
|
$this->HTMLphrase('h6', 'location', $data['location']);
|
|
}
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days");
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row cpu-row', 'col-6');
|
|
$this->outputString('<i class="fas fa-microchip"></i>');
|
|
$this->HTMLphrase('p', 'value', '' . $data['cpu'] . '<span class="data-type">@</span>' . $this->mhzToGhz($data['cpu_freq']) . '<span class="data-type">Ghz</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<i class="fas fa-box"></i>');
|
|
$this->HTMLphrase('p', 'value', '<span class="data-type">' . $data['virt'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row mem-disk-row', 'col-6');
|
|
$this->outputString('<i class="fas fa-memory"></i>');
|
|
$this->HTMLphrase('p', 'value', '' . $data['ram'] . '<span class="data-type">' . $data['ram_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<i class="fas fa-hdd"></i>');
|
|
$this->HTMLphrase('p', 'value', '' . $data['disk'] . '<span class="data-type">' . $data['disk_type'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-6');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreServer" value="' . $id . '" data-target="#viewMoreServerModal" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<a class="btn btn-second" id="editServer" value="' . $id . '" data-target="#editServerModal" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tagClose('div', 5);
|
|
}
|
|
|
|
protected function locationForTable(string $location)
|
|
{
|
|
if (strpos($location, ',') !== false) {
|
|
return explode(',', $location)[0];
|
|
} else {
|
|
return $location;
|
|
}
|
|
}
|
|
|
|
public function objectCards()
|
|
{
|
|
$this->serverCards();
|
|
$this->sharedHostingCards();
|
|
$this->domainCards();
|
|
}
|
|
|
|
public function objectTables()
|
|
{
|
|
$this->serverTable();
|
|
$this->sharedHostingTable();
|
|
$this->domainTable();
|
|
}
|
|
|
|
protected function vpsTableRow(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT servers.id,servers.hostname,servers.ipv4,servers.ipv6,servers.`cpu`,servers.cpu_freq,servers.ram,servers.ram_type,servers.`disk`,
|
|
servers.disk_type,servers.os,servers.virt,servers.tags, DATE_FORMAT(`owned_since`, '%d %b %Y') as dt, servers.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM servers INNER JOIN locations on servers.location = locations.id INNER JOIN providers on servers.provider = providers.id
|
|
INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
if (self::COLOR_TABLE) {
|
|
($data['was_special'] == 1) ? $special_class = 'td-special-price' : $special_class = '';
|
|
if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) {
|
|
$ds_class = 'td-due-soon';
|
|
} elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) {
|
|
$ds_class = 'td-not-due-soon';
|
|
} else {
|
|
$ds_class = '';
|
|
}
|
|
} else {
|
|
$special_class = $ds_class = '';
|
|
}
|
|
(empty($data['ipv4']) || is_null($data['ipv4'])) ? $host = $data['hostname'] : $host = $data['ipv4'];
|
|
$this->tagOpen('tr');
|
|
$this->tableTd('', $data['hostname']);
|
|
$this->tableTd('', '<a class="btn btn-main table-btn" id="viewMoreServer" value="' . $data['id'] . '" data-target="#viewMoreServerModal" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tableTd('', '<a class="btn btn-second table-btn" id="editServer" value="' . $data['id'] . '" data-target="#editServerModal" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tableTd('td-text-sml', $data['virt']);
|
|
$this->tableTd('td-nowrap', $data['cpu'] . '<span class="data-type">@' . $this->mhzToGhz($data['cpu_freq']) . 'Ghz</span>');
|
|
$this->tableTd('td-nowrap', $data['ram'] . '<span class="data-type">' . $data['ram_type'] . '</span>');
|
|
$this->tableTd('td-nowrap', $data['disk'] . '<span class="data-type">' . $data['disk_type'] . '</span>');
|
|
$this->tableTd('td-nowrap ' . $special_class . '', $data['price'] . ' <span class="data-type">' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . '</span>');
|
|
$this->tableTd('', '<a id="checkUpStatus" href="#" value="' . $host . '">' . $this->osIntToIcon($data['os']) . '</a>');
|
|
$this->tableTd('td-nowrap td-text-med', '<div class="td-nowrap">' . $this->locationForTable($data['location']) . '</div>');
|
|
$this->tableTd('td-nowrap td-text-med', '<div class="td-nowrap">' . $data['provider'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '<div class="td-nowrap">' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days</div>');
|
|
$this->tableTd('td-nowrap td-text-sml', '<div class="td-nowrap">' . $data['dt'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml', '<div class="td-nowrap">' . $data['ipv4'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml', '<div class="td-nowrap">' . $data['ipv6'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml', '<div class="td-nowrap">' . $data['tags'] . '</div>');
|
|
$this->tagClose('tr');
|
|
}
|
|
|
|
protected function sharedHostingTable()
|
|
{
|
|
if (self::SH_SORT_TYPE == 'DOMAIN_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'DOMAIN_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain`;");
|
|
} elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since`;");
|
|
} elseif (self::SH_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::SH_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::SH_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header mt-1', 'Shared hosting <span class="object-count">' . $count . '</span>');
|
|
$this->tagOpen('div', 'row');
|
|
$this->tableHeader(array('Domain', '', '', 'Type', 'Disk', 'Price', 'Location', 'Provider', 'Due', 'BWidth', 'Domains', 'Emails', 'FTPs', 'DBs', 'Since'), 'table objects-table', 'sharedHostingTable');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->sharedHostingTableRow($row['id']);
|
|
}
|
|
$this->outputString('</tbody></table></div>');
|
|
$this->tagClose('div');
|
|
}
|
|
}
|
|
|
|
protected function domainTable()
|
|
{
|
|
if (self::DC_SORT_TYPE == 'DOMAIN_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'DOMAIN_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain`;");
|
|
} elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since`;");
|
|
} elseif (self::DC_SORT_TYPE == 'PRICE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'PRICE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd`;");
|
|
} elseif (self::DC_SORT_TYPE == 'DUE_DESC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd` DESC;");
|
|
} elseif (self::DC_SORT_TYPE == 'DUE_ASC') {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd`;");
|
|
} else {
|
|
$select = $this->dbConnect()->prepare("SELECT `id` FROM `domains`;");
|
|
}
|
|
$select->execute();
|
|
$count = $select->rowCount();
|
|
if ($count > 0) {
|
|
$this->HTMLPhrase('h4', 'card-section-header mt-1', 'Domains <span class="object-count">' . $count . '</span>');
|
|
$this->tagOpen('div', 'row');
|
|
$this->tableHeader(array('Domain', '', '', 'NS1', 'NS2', 'Price', 'Provider', 'Due', 'Since'), 'table objects-table', 'domainsTable');
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->domainTableRow($row['id']);
|
|
}
|
|
$this->outputString('</tbody></table></div>');
|
|
$this->tagClose('div');
|
|
}
|
|
}
|
|
|
|
protected function domainTableRow(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT domains.id,domains.domain,domains.attached_to,domains.ns1,domains.ns2,DATE_FORMAT(`owned_since`, '%d %b %Y') as dt,providers.name as provider, pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM domains INNER JOIN providers on domains.provider = providers.id
|
|
INNER JOIN pricing on domains.id = pricing.server_id WHERE domains.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
if (self::COLOR_TABLE) {
|
|
if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) {
|
|
$ds_class = 'td-due-soon';
|
|
} elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) {
|
|
$ds_class = 'td-not-due-soon';
|
|
} else {
|
|
$ds_class = '';
|
|
}
|
|
} else {
|
|
$ds_class = '';
|
|
}
|
|
$this->tagOpen('tr');
|
|
$this->tableTd('td-nowrap', $data['domain']);
|
|
$this->tableTd('', '<a class="btn btn-main table-btn" id="viewMoreDomain" value="' . $data['id'] . '" data-target="#viewMoreModalDomain" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tableTd('', '<a class="btn btn-second table-btn" id="editDomain" value="' . $data['id'] . '" data-target="#editModalDomain" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tableTd('td-nowrap', '<code>' . $data['ns1'] . '<code>');
|
|
$this->tableTd('td-nowrap', '<code>' . $data['ns2'] . '<code>');
|
|
$this->tableTd('td-nowrap', $data['price'] . ' <span class="data-type">' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . '</span>');
|
|
$this->tableTd('td-nowrap td-text-med', '<div class="td-nowrap">' . $data['provider'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '<div class="td-nowrap">' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days</div>');
|
|
$this->tableTd('td-nowrap', $data['dt']);
|
|
$this->tagClose('tr');
|
|
}
|
|
|
|
protected function sharedHostingTableRow(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT shared_hosting.id,shared_hosting.domain,shared_hosting.type,shared_hosting.was_special,shared_hosting.disk,shared_hosting.disk_type,shared_hosting.bandwidth,shared_hosting.domains_limit,shared_hosting.emails,
|
|
shared_hosting.ftp,shared_hosting.db,DATE_FORMAT(`owned_since`, '%d %b %Y') as dt,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM shared_hosting INNER JOIN locations on shared_hosting.location = locations.id INNER JOIN providers on shared_hosting.provider = providers.id
|
|
INNER JOIN pricing on shared_hosting.id = pricing.server_id WHERE shared_hosting.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
if (self::COLOR_TABLE) {
|
|
($data['was_special'] == 1) ? $special_class = 'td-special-price' : $special_class = '';
|
|
if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) {
|
|
$ds_class = 'td-due-soon';
|
|
} elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) {
|
|
$ds_class = 'td-not-due-soon';
|
|
} else {
|
|
$ds_class = '';
|
|
}
|
|
} else {
|
|
$special_class = $ds_class = '';
|
|
}
|
|
$this->tagOpen('tr');
|
|
$this->tableTd('td-nowrap', $data['domain']);
|
|
$this->tableTd('', '<a class="btn btn-main table-btn" id="viewMoreSharedHosting" value="' . $data['id'] . '" data-target="#viewMoreModalSharedHosting" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tableTd('', '<a class="btn btn-second table-btn" id="editSharedHosting" value="' . $data['id'] . '" data-target="#editModalSharedHosting" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tableTd('td-nowrap td-text-sml', $data['type']);
|
|
$this->tableTd('td-nowrap', $data['disk'] . '<span class="data-type">' . $data['disk_type'] . '</span>');
|
|
$this->tableTd('td-nowrap ' . $special_class . '', $data['price'] . ' <span class="data-type">' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . '</span>');
|
|
$this->tableTd('td-nowrap td-text-med', '<div class="td-nowrap">' . $this->locationForTable($data['location']) . '</div>');
|
|
$this->tableTd('td-nowrap td-text-med', '<div class="td-nowrap">' . $data['provider'] . '</div>');
|
|
$this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '<div class="td-nowrap">' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days</div>');
|
|
$this->tableTd('td-nowrap', $data['bandwidth'] . '<span class="data-type">TB</span>');
|
|
$this->tableTd('td-nowrap', $data['domains_limit']);
|
|
$this->tableTd('td-nowrap', $data['emails']);
|
|
$this->tableTd('td-nowrap', $data['ftp']);
|
|
$this->tableTd('td-nowrap', $data['db']);
|
|
$this->tableTd('td-nowrap', $data['dt']);
|
|
$this->tagClose('tr');
|
|
}
|
|
|
|
protected function SharedHostingCard(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT shared_hosting.id,shared_hosting.domain,shared_hosting.disk_as_gb,shared_hosting.type,shared_hosting.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM shared_hosting INNER JOIN locations on shared_hosting.location = locations.id INNER JOIN providers on shared_hosting.provider = providers.id
|
|
INNER JOIN pricing on shared_hosting.id = pricing.server_id WHERE shared_hosting.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
($data['was_special'] == 1) ? $special = ' special-card' : $special = '';
|
|
(is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text';
|
|
$this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3');
|
|
$this->tagOpen("div", "card obj-card$special");
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('h4', 'hostname-header', $data['domain']);;
|
|
$this->tagClose('div', 3);
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']));
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('h6', 'provider', $data['provider']);
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('h6', 'location', $data['location']);
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days");
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row mem-disk-row', 'col-6');
|
|
$this->outputString('<i class="fas fa-box"></i>');
|
|
$this->HTMLphrase('p', 'value', '<span class="data-type">' . $data['type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<i class="fas fa-hdd"></i>');
|
|
$this->HTMLphrase('p', 'value', '<span class="data-type">' . $data['disk_as_gb'] . '<span class="data-type">GB</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-6');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreSharedHosting" value="' . $id . '" data-target="#viewMoreModalSharedHosting" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<a class="btn btn-second" id="editSharedHosting" value="' . $id . '" data-target="#editModalSharedHosting" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tagClose('div', 5);
|
|
}
|
|
|
|
protected function domainCard(string $id)
|
|
{
|
|
$select = $this->dbConnect()->prepare("
|
|
SELECT domains.id,domains.domain,domains.attached_to,providers.name as provider, pricing.price,pricing.currency,pricing.term,pricing.next_dd
|
|
FROM domains INNER JOIN providers on domains.provider = providers.id
|
|
INNER JOIN pricing on domains.id = pricing.server_id WHERE domains.id = ? LIMIT 1;");
|
|
$select->execute([$id]);
|
|
$data = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
(is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text';
|
|
$this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3');
|
|
$this->tagOpen("div", "card obj-card");
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('h4', 'hostname-header', $data['domain']);
|
|
$this->tagClose('div', 3);
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']));
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('h6', 'provider', $data['provider']);
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days");
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row text-center', 'col-6');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreDomain" value="' . $id . '" data-target="#viewMoreModalDomain" data-toggle="modal" href="#" role="button">More</a>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<a class="btn btn-second" id="editDomain" value="' . $id . '" data-target="#editModalDomain" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tagClose('div', 5);
|
|
}
|
|
|
|
public function editServerModal()
|
|
{
|
|
$this->outputString('<div class="modal fade" id="editServerModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog modal-lg" role="document">');
|
|
$this->tagOpen('div', 'modal-content');
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->outputString('<h4 class="modal-title w-100" id="me_hostname_header"></h4>');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close">');
|
|
$this->outputString('<span aria-hidden="true">×</span>');
|
|
$this->tagClose('button');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
$this->outputString('<form id="editForm" method="post">');
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->outputString('<label for="me_delete">Delete server data</label>');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="me_delete" id="me_delete"><span class="slider round"></span></label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->outputString('<label for="me_non_active">No longer have (Keep info)</label>');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="me_non_active" id="me_non_active"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Hostname');
|
|
$this->textInput('me_hostname', '', 'form-control', true);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Label');
|
|
$this->textInput('me_label', '', 'form-control', false, 1, 24);
|
|
$this->hiddenInput('me_server_id');
|
|
$this->hiddenInput('action', 'update');
|
|
$this->hiddenInput('type', 'server_modal_edit');
|
|
$this->tagClose('div', 3);
|
|
|
|
|
|
$this->rowColOpen('form-row', 'col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS1');
|
|
$this->textInput('me_ns1', '', 'form-control', false);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS2');
|
|
$this->textInput('me_ns2', '', 'form-control', false);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-6 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Price');
|
|
$this->numberInput('me_price', '', 'form-control', true, 0, 999, 'any');
|
|
$this->tagClose('div');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Term');
|
|
$this->selectElement('me_term');
|
|
$this->termSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-6 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Currency');
|
|
$this->selectElement('me_currency');
|
|
$this->CurrencySelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('OS');
|
|
$this->selectElement('me_os');
|
|
$this->OsSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Virt');
|
|
$this->selectElement('me_virt');
|
|
$this->virtSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('SSH Port');
|
|
$this->textInput('me_ssh_port');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('IPv4');
|
|
$this->textInput('me_ipv4');
|
|
$this->tagClose('div', 3);
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('IPv6');
|
|
$this->textInput('me_ipv6');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="me_owned_since" name="me_owned_since">');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control" id="me_next_dd" name="me_next_dd">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('CPU amount');
|
|
$this->numberInput('me_cpu_amount', '', 'form-control', false, 1, 48);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Bandwidth');
|
|
$this->numberInput('me_bandwidth', '', 'form-control', false, 1, 9999);
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">TB</span></div>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Total disk');
|
|
$this->numberInput('me_disk', '', 'form-control', false, 0.5, 9999, 'any');
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">GB</span></div>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Ram');
|
|
$this->numberInput('me_ram', '', 'form-control', false, 0.5, 9999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('me_ram_type');
|
|
$this->selectOption('MB', 'MB', true);
|
|
$this->selectOption('GB', 'GB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Swap');
|
|
$this->numberInput('me_swap', '', 'form-control', false, 0.5, 9999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('me_swap_type');
|
|
$this->selectOption('MB', 'MB', true);
|
|
$this->selectOption('GB', 'GB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->htmlPhrase('p', 'm-desc', 'Notes:');
|
|
$this->outputString("<textarea class='form-control' id='me_notes' name='me_notes' rows='4' cols='40' maxlength='255'>");
|
|
$this->outputString("</textarea>");
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Tags');
|
|
$this->tagsInput('me_tags', 'form-control');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->htmlPhrase('p', 'm-desc', 'Update YABs disk & network speeds:');
|
|
$this->outputString("<textarea class='form-control' id='me_yabs' name='me_yabs' rows='4' cols='40' placeholder='First line must be: # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #'>");
|
|
$this->outputString("</textarea>");
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row text-center', 'col-12');
|
|
$this->submitInput('Update', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
public function editSharedHostingModal()
|
|
{
|
|
$this->outputString('<div class="modal fade" id="editModalSharedHosting" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog" role="document">');
|
|
$this->tagOpen('div', 'modal-content');
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->outputString('<h4 class="modal-title w-100" id="sh_me_hostname_header"></h4>');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close">');
|
|
$this->outputString('<span aria-hidden="true">×</span>');
|
|
$this->tagClose('button');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
$this->outputString('<form id="editSharedHostingForm" method="post">');
|
|
|
|
$this->rowColOpen('form-row', 'col-8');
|
|
$this->outputString('<label for="sh_me_delete">Delete shared hosting data</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="sh_me_delete" id="sh_me_delete"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-8');
|
|
$this->outputString('<label for="sh_me_non_active">No longer have (Keep info)</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="sh_me_non_active" id="sh_me_non_active"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Hostname');
|
|
$this->textInput('sh_me_hostname', '', 'form-control', true);
|
|
$this->tagClose('div');
|
|
$this->hiddenInput('sh_me_server_id');
|
|
$this->hiddenInput('action', 'update');
|
|
$this->hiddenInput('type', 'shared_hosting_modal_edit');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Price');
|
|
$this->numberInput('sh_me_price', '', 'form-control', true, 0, 999, 'any');
|
|
$this->tagClose('div');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Term');
|
|
$this->selectElement('sh_me_term');
|
|
$this->termSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Currency');
|
|
$this->selectElement('sh_me_currency');
|
|
$this->CurrencySelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="sh_me_owned_since" name="sh_me_owned_since">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control" id="sh_me_next_dd" name="sh_me_next_dd">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Bandwidth');
|
|
$this->numberInput('sh_me_bandwidth', '', 'form-control', false, 1, 99999);
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">GB</span></div>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Total disk');
|
|
$this->numberInput('sh_me_storage', '', 'form-control', false, 0.5, 9999, 'any');
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">GB</span></div>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Domains');
|
|
$this->numberInput('sh_me_domains_count', '', 'form-control', false, 1, 99999, '1');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Emails');
|
|
$this->numberInput('sh_me_emails', '', 'form-control', false, 1, 99999, '1');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Databases');
|
|
$this->numberInput('sh_me_db', '', 'form-control', false, 1, 99999, '1');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('FTP');
|
|
$this->numberInput('sh_me_ftp', '', 'form-control', false, 1, 99999, '1');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row text-center', 'col-12');
|
|
$this->submitInput('Update', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function attachDomainInput()
|
|
{
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Attached to');
|
|
$this->selectElement('d_me_attached_to');
|
|
$select_servers = $this->dbConnect()->prepare("SELECT `id`, `hostname` FROM `servers`;");
|
|
$select_servers->execute();
|
|
$this->selectOption('', '', true);//Empty option for when not attached
|
|
while ($row = $select_servers->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->selectOption($row['hostname'], $row['id']);
|
|
}
|
|
$select_shared = $this->dbConnect()->prepare("SELECT `id`, `domain` FROM `shared_hosting`;");
|
|
$select_shared->execute();
|
|
while ($row = $select_shared->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->selectOption($row['domain'], $row['id']);
|
|
}
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
}
|
|
|
|
public function editDomainModal()
|
|
{
|
|
$this->outputString('<div class="modal fade" id="editModalDomain" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">');
|
|
$this->outputString('<div class="modal-dialog" role="document">');
|
|
$this->tagOpen('div', 'modal-content');
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->outputString('<h4 class="modal-title w-100" id="d_me_hostname_header"></h4>');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close">');
|
|
$this->outputString('<span aria-hidden="true">×</span>');
|
|
$this->tagClose('button');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
$this->outputString('<form id="editDomainForm" method="post">');
|
|
|
|
$this->rowColOpen('form-row', 'col-8');
|
|
$this->outputString('<label for="d_me_delete">Delete domain data</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="d_me_delete" id="d_me_delete"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-8');
|
|
$this->outputString('<label for="d_me_non_active">No longer have (Keep info)</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="d_me_non_active" id="d_me_non_active"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Domain');
|
|
$this->textInput('d_me_hostname', '', 'form-control', true);
|
|
$this->tagClose('div');
|
|
$this->hiddenInput('d_me_server_id');
|
|
$this->hiddenInput('action', 'update');
|
|
$this->hiddenInput('type', 'domain_modal_edit');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Price');
|
|
$this->numberInput('d_me_price', '', 'form-control', true, 0, 999, 'any');
|
|
$this->tagClose('div');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Term');
|
|
$this->selectElement('d_me_term');
|
|
$this->domainTermSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Currency');
|
|
$this->selectElement('d_me_currency');
|
|
$this->CurrencySelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->attachDomainInput();
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="d_me_owned_since" name="d_me_owned_since">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control" id="d_me_next_dd" name="d_me_next_dd">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS1');
|
|
$this->textInput('d_me_ns1', '', 'form-control', false, 1, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS2');
|
|
$this->textInput('d_me_ns2', '', 'form-control', false, 1, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row text-center', 'col-12');
|
|
$this->submitInput('Update', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function addVPSFormYabs()
|
|
{
|
|
$this->rowColOpen('row', 'col-12');
|
|
$this->tagOpen('div', 'card');
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->HTMLphrase('h2', 'text-center', 'Add server from YABs');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->outputString('<form id="yabsForm" method="post">');
|
|
$this->hiddenInput('from_yabs', 'true');
|
|
$this->hiddenInput('has_yabs', '1');
|
|
|
|
$this->forumInputsBasic();
|
|
|
|
$this->rowColOpen('form-row', 'col-12');
|
|
$this->tagOpen('div', 'form-group');
|
|
$this->outputString('<textarea id="yabs" name="yabs" class="form-control" placeholder="First line must be: # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #" rows="10" required></textarea>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 text-center');
|
|
$this->submitInput('Add', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function addDomainForm()
|
|
{
|
|
$this->rowColOpen('row', 'col-12');
|
|
$this->tagOpen('div', 'card');
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->HTMLphrase('h2', 'text-center', 'Add domain');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->outputString('<form id="domainForm" method="post">');
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->hiddenInput('domain_form', 'true');
|
|
$this->hiddenInput('has_yabs', '0');
|
|
$this->hiddenInput('action', 'insert');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Domain');
|
|
$this->textInput('domain', '', 'form-control', true, 3, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Registrar');
|
|
$this->textInput('domain_provider', '', 'form-control provider-input', true, 3, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->formPricingRow('domain_');
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="domain_owned_since" name="domain_owned_since">');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control next-dd" id="domain_next_due_date" name="domain_next_due_date">');
|
|
$this->tagClose('div', 3);
|
|
|
|
|
|
$this->rowColOpen('form-row', 'col-12 text-center');
|
|
$this->submitInput('Add', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function addSharedHostingForm()
|
|
{
|
|
$this->rowColOpen('row', 'col-12');
|
|
$this->tagOpen('div', 'card');
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->HTMLphrase('h2', 'text-center', 'Add shared hosting');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->outputString('<form id="sharesHostingForm" method="post">');
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->hiddenInput('shared_hosting_form', 'true');
|
|
$this->hiddenInput('has_yabs', '0');
|
|
$this->hiddenInput('action', 'insert');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Domain');
|
|
$this->textInput('shared_domain', '', 'form-control', true, 3, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Provider');
|
|
$this->textInput('shared_provider', '', 'form-control provider-input', true, 3, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->formPricingRow('shared_');
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-2');
|
|
$this->outputString('<label for="shared_was_offer">Was special offer</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-2');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="shared_was_offer" id="shared_was_offer"><span class="slider round"></span></label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="shared_owned_since" name="shared_owned_since">');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control next-dd" id="shared_next_due_date" name="shared_next_due_date">');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Domains');
|
|
$this->numberInput('shared_domains_amount', '1', 'form-control', true, 1, 9999, '1');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Storage');
|
|
$this->numberInput('shared_storage', '10', 'form-control', true, 1, 9999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('shared_storage_type');
|
|
$this->selectOption('GB', 'GB', true);
|
|
$this->selectOption('TB', 'TB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Databases');
|
|
$this->numberInput('shared_db_amount', '10', 'form-control', true, 1, 9999, '1');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Email');
|
|
$this->numberInput('shared_emails', '25', 'form-control', true, 1, 9999, '1');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('FTP');
|
|
$this->numberInput('shared_ftp', '25', 'form-control', true, 1, 9999, '1');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Bandwidth');
|
|
$this->numberInput('shared_bandwidth', '1', 'form-control', false, 1, 9999, '1');
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">TB</span></div>');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Location');
|
|
$this->textInput('shared_location', '', 'form-control location-input', true, 3, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('shared_type');
|
|
$this->sharedHostingTypeOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 text-center');
|
|
$this->submitInput('Add', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function addVPSForm()
|
|
{
|
|
$this->rowColOpen('row', 'col-12');
|
|
$this->tagOpen('div', 'card');
|
|
$this->tagOpen('div', 'card-header');
|
|
$this->HTMLphrase('h2', 'text-center', 'Add server');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->outputString('<form id="manualForm" method="post">');
|
|
$this->hiddenInput('manual', 'true');
|
|
$this->hiddenInput('has_yabs', '0');
|
|
|
|
$this->forumInputsBasic();
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('CPU amount');
|
|
$this->numberInput('cpu_amount', '1', 'form-control', true, 1, 64, '1');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('CPU speed');
|
|
$this->numberInput('cpu_speed', '3799', 'form-control', false, '1', '5999.999', 'any');
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">Mhz</span></div>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-8');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Total disk');
|
|
$this->numberInput('disk', '10', 'form-control', true, 1, 9999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('disk_type');
|
|
$this->selectOption('GB', 'GB', true);
|
|
$this->selectOption('TB', 'TB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-6 col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Ram');
|
|
$this->numberInput('ram', '512', 'form-control', true, 1, 62000, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('ram_type');
|
|
$this->selectOption('MB', 'MB', true);
|
|
$this->selectOption('GB', 'GB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Swap');
|
|
$this->numberInput('swap', '100', 'form-control', true, 1, 62000, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Type');
|
|
$this->selectElement('swap_type');
|
|
$this->selectOption('MB', 'MB', true);
|
|
$this->selectOption('GB', 'GB');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 text-center');
|
|
$this->submitInput('Add', 'submitInput', 'btn btn-second');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function formPricingRow(string $id_append = '')
|
|
{
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Price');
|
|
$this->numberInput('' . $id_append . 'price', '8.99', 'form-control', true, 0, 999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Currency');
|
|
$this->selectElement('' . $id_append . 'currency');
|
|
$this->CurrencySelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Term');
|
|
$this->selectElement('' . $id_append . 'term');
|
|
$this->termSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
}
|
|
|
|
protected function forumInputsBasic()
|
|
{
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->hiddenInput('action', 'insert');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Hostname');
|
|
$this->textInput('hostname', '', 'form-control', true, 1, 124);
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text"><a id="fillIpv4" href="#"><i class="fas fa-search"></i></a></span></div>');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS1');
|
|
$this->textInput('ns1', '', 'form-control', false, 1, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('NS2');
|
|
$this->textInput('ns2', '', 'form-control', false, 1, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Provider');
|
|
$this->textInput('provider', '', 'form-control provider-input', true, 3, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Price');
|
|
$this->numberInput('price', '', 'form-control', true, 0, 999, 'any');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Term');
|
|
$this->selectElement('term');
|
|
$this->termSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-md-3');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Currency');
|
|
$this->selectElement('currency');
|
|
$this->CurrencySelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Label');
|
|
$this->textInput('label', '', 'form-control', false, 1, 24);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('IPv4');
|
|
$this->textInput('ipv4', '', 'form-control', false, 4, 124);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('IPv6');
|
|
$this->textInput('ipv6', '', 'form-control', false, 4, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->outputString('<label for="was_offer">Was special offer</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-2');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="was_offer" id="was_offer"><span class="slider round"></span></label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->outputString('<label for="dedi_cpu">Dedicated CPU</label>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-2');
|
|
$this->outputString('<label class="switch"><input type="checkbox" name="dedi_cpu" id="dedi_cpu"><span class="slider round"></span></label>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('SSH');
|
|
$this->numberInput('ssh_port', '22', 'form-control', true, 1, 999999, 1);
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Virt');
|
|
$this->selectElement('virt');
|
|
$this->virtSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('OS');
|
|
$this->selectElement('os');
|
|
$this->OsSelectOptions();
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Bandwidth');
|
|
$this->numberInput('bandwidth', '4', 'form-control', false, '0.5', 99999, '0.5');
|
|
$this->outputString('<div class="input-group-append"><span class="input-group-text">TB</span></div>');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Location');
|
|
$this->textInput('location', '', 'form-control location-input', false, 1, 124);
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->rowColOpen('form-row', 'col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Owned since');
|
|
$this->outputString('<input type="date" class="form-control" id="owned_since" name="owned_since">');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Next due date');
|
|
$this->outputString('<input type="date" class="form-control next-dd" id="next_due_date" name="next_due_date">');
|
|
$this->tagClose('div', 3);
|
|
}
|
|
|
|
protected function pageClose(bool $close_container = true)
|
|
{
|
|
if ($close_container) {
|
|
$this->tagClose('div');
|
|
}
|
|
$this->outputString('<script src="assets/js/jquery.min.js"></script>');
|
|
$this->outputString('<script src="assets/js/bootstrap.min.js"></script>');
|
|
$this->outputString('<script src="assets/js/scripts.min.js"></script>');
|
|
$this->outputString('<link rel="stylesheet" href="assets/css/all.min.css"/>');
|
|
$this->tagClose('body');
|
|
$this->tagClose('html');
|
|
}
|
|
|
|
public function mainPage()
|
|
{
|
|
$this->pageHead();
|
|
$this->pageContents();
|
|
$this->pageFooter();
|
|
$this->pageClose();
|
|
}
|
|
|
|
protected function searchDiv()
|
|
{
|
|
$this->rowColOpen('row', 'col-12');
|
|
$this->tagOpen('form');
|
|
$this->textInput('searchInput', '', 'form-control', false);
|
|
$this->tagClose('form');
|
|
$this->tagClose('div', 2);
|
|
$this->tagOpen('div', '', 'searchDivBody');
|
|
$this->tagClose('div');
|
|
}
|
|
|
|
public function searchResults(string $search_term)
|
|
{
|
|
if (!empty($search_term)) {
|
|
$select = $this->dbConnect()->prepare("SELECT `id`, `hostname`,`ipv4`, `virt`, `tags`, `label`, p.price, p.currency, p.term FROM `servers` INNER JOIN pricing p on servers.id = p.server_id WHERE `hostname` LIKE ? OR `ipv4` LIKE ? OR `tags` LIKE ? OR `label` LIKE ? LIMIT 30;");
|
|
$select->execute(["%$search_term%", "%$search_term%", "%$search_term%", "%$search_term%"]);
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->rowColOpen('row search-result', 'col-6');
|
|
$this->outputString("<p class='m-value'>{$row['hostname']} <code>{$row['ipv4']}</code> <span class='data-type'>{$row['virt']}</span> {$row['price']} {$row['currency']} <span class='data-type'>" . $this->paymentTerm($row['term']) . "</span> <code>{$row['label']}</code></p>");
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-3');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreServer" value="' . $row['id'] . '" data-target="#viewMoreServerModal" data-toggle="modal" href="#" role="button">View</a>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-3');
|
|
$this->outputString('<a class="btn btn-second" id="editServer" value="' . $row['id'] . '" data-target="#editServerModal" data-toggle="modal" href="#" role="button">Edit</a>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
$select = $this->dbConnect()->prepare("SELECT `id`, `domain`, p.price, p.currency, p.term FROM `domains` INNER JOIN pricing p on domains.id = p.server_id WHERE `domain` LIKE ? LIMIT 30;");
|
|
$select->execute(["%$search_term%"]);
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->rowColOpen('row search-result', 'col-6');
|
|
$this->outputString("<p class='m-value'>{$row['domain']} <span class='data-type'>domain</span> {$row['price']} {$row['currency']} <span class='data-type'>" . $this->paymentTerm($row['term']) . "</span></p>");
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreDomain" value="' . $row['id'] . '" data-target="#viewMoreModalDomain" data-toggle="modal" href="#" role="button">View</a>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
$select = $this->dbConnect()->prepare("SELECT `id`, `domain`, `type`, p.price, p.currency, p.term FROM `shared_hosting` INNER JOIN pricing p on shared_hosting.id = p.server_id WHERE `domain` LIKE ? OR `type` LIKE ? LIMIT 30;");
|
|
$select->execute(["%$search_term%", "%$search_term%"]);
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->rowColOpen('row search-result', 'col-6');
|
|
$this->outputString("<p class='m-value'>{$row['domain']} <span class='data-type'>{$row['type']}</span> {$row['price']} {$row['currency']} <span class='data-type'>" . $this->paymentTerm($row['term']) . "</span></p>");
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6');
|
|
$this->outputString('<a class="btn btn-main" id="viewMoreSharedHosting" value="' . $row['id'] . '" data-target="#viewMoreModalSharedHosting" data-toggle="modal" href="#" role="button">View</a>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected function handleLocation(string $provider)
|
|
{//Inserts location + returns id OR returns id if location already exists
|
|
$select = $this->dbConnect()->prepare("SELECT `id`, `name` FROM `locations` WHERE `name` = ? LIMIT 1;");
|
|
$select->execute([$provider]);
|
|
$row = $select->fetch(PDO::FETCH_ASSOC);
|
|
if (!empty($row)) {//Yes
|
|
return $row['id'];
|
|
} else {//NO
|
|
$insert = $this->dbConnect()->prepare('INSERT INTO `locations` (`name`) VALUES (?);');
|
|
$insert->execute([$provider]);
|
|
return $this->dbConnect()->lastInsertId();
|
|
}
|
|
}
|
|
|
|
protected function handleProvider(string $provider)
|
|
{//Inserts provider + returns id OR returns id if provider already exists
|
|
$select = $this->dbConnect()->prepare("SELECT `id`, `name` FROM `providers` WHERE `name` = ? LIMIT 1;");
|
|
$select->execute([$provider]);
|
|
$row = $select->fetch(PDO::FETCH_ASSOC);
|
|
if (!empty($row)) {//Yes
|
|
return $row['id'];
|
|
} else {//NO
|
|
$insert = $this->dbConnect()->prepare('INSERT INTO `providers` (`name`) VALUES (?);');
|
|
$insert->execute([$provider]);
|
|
return $this->dbConnect()->lastInsertId();
|
|
}
|
|
}
|
|
|
|
public function locationsAutoCompleteGET(string $value)
|
|
{//Returns array from a LIKE query for input term
|
|
$select = $this->dbConnect()->prepare("SELECT `name` FROM locations WHERE `name` LIKE ? LIMIT 16;");
|
|
$select->execute(array('' . $value . '%'));
|
|
$array = array();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$array[] = $row['name'];
|
|
}
|
|
echo json_encode($array);
|
|
}
|
|
|
|
public function providersAutoCompleteGET(string $value)
|
|
{//Returns array from a LIKE query for input term
|
|
$select = $this->dbConnect()->prepare("SELECT `name` FROM providers WHERE `name` LIKE ? LIMIT 16;");
|
|
$select->execute(array('' . $value . '%'));
|
|
$array = array();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$array[] = $row['name'];
|
|
}
|
|
echo json_encode($array);
|
|
}
|
|
|
|
protected function pageFooter(string $text = "My Idlers", string $link = "https://github.com/cp6/my-idlers")
|
|
{
|
|
$this->rowColOpen('row footer-row', 'col-12');
|
|
$this->outputString("<a class='footer-text' href='$link'><p>$text</p></a>");
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
public function viewMoreModal(string $item_id)
|
|
{
|
|
$data = json_decode($this->serverData($item_id), true);
|
|
if (!isset($data)) {//returned no data
|
|
exit;
|
|
}
|
|
(is_null($data['ipv6']) || empty($data['ipv6'])) ? $ipv6 = '-' : $ipv6 = $data['ipv6'];
|
|
|
|
($data['has_yabs'] == 1) ? $has_yabs = true : $has_yabs = false;
|
|
($data['has_st'] == 1) ? $has_st = true : $has_st = false;
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->HTMLphrase('h4', 'modal-title w-100', $data['hostname'], 'view_more_header');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
|
|
if (!is_null($data['label']) || !empty($data['label'])) {
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Label');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->outputString('<p class="m-value">' . $data['label'] . '</p>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'IPv4 ');
|
|
$this->outputString('<code><p class="m-value">' . $data['ipv4'] . '</p></code>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'IPv6 ');
|
|
$this->outputString('<code><p class="m-value">' . $ipv6 . '</p></code>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'NS1 ');
|
|
$this->outputString('<code><p class="m-value">' . $data['ns1'] . '</p></code>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'NS2 ');
|
|
$this->outputString('<code><p class="m-value">' . $data['ns2'] . '</p></code>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Location ');
|
|
$this->HTMLphrase('p', 'm-value', $data['location']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Provider ');
|
|
$this->HTMLphrase('p', 'm-value', $data['provider']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'OS ');
|
|
$this->HTMLphrase('p', 'm-value', $this->osIntToString($data['os']));
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Due in ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $this->processDueDate($data['server_id'], $data['term'], $data['next_dd']) . '<span class="data-type">days</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Bandwidth ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['bandwidth'] . '<span class="data-type">' . $data['bandwidth_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'SSH Port ');
|
|
$this->outputString('<code><p class="m-value">' . $data['ssh_port'] . '</p></code>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Disk ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['disk'] . '<span class="data-type">' . $data['disk_type'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-section-row', 'col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-section-text text-center', 'CPU');
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-desc', 'Amount ');
|
|
$this->HTMLphrase('p', 'm-value', $data['cpu']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-desc', 'Frequency ');
|
|
$this->HTMLphrase('p', 'm-value', $data['cpu_freq'] . '<span class="data-type">Mhz</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row m-row', 'col-12');
|
|
$this->outputString('<i><p class="m-value">' . $data['cpu_type'] . '</p></i>');
|
|
$this->tagClose('div', 3);
|
|
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->outputString('<p class="m-section-text text-center">Ram</p>');
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-desc', 'Ram ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['ram'] . '<span class="data-type">' . $data['ram_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-desc', 'Swap ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['swap'] . '<span class="data-type">' . $data['swap_type'] . '</span>');
|
|
$this->tagClose('div', 4);
|
|
|
|
if ($has_yabs) {
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'GeekBench 5');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'single: ');
|
|
$this->HTMLphrase('p', 'm-value', $data['gb5_single']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'multi: ');
|
|
$this->HTMLphrase('p', 'm-value', $data['gb5_multi']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'id: ');
|
|
$this->outputString('<a id="m_gb5_id_link" href="https://browser.geekbench.com/v5/cpu/' . $data['gb5_id'] . '"><p class="m-value">' . $data['gb5_id'] . '</p></a>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'Disk tests');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-6 col-md-3 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', '4k: ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['4k'] . '<span class="data-type">' . $data['4k_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6 col-md-3 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', '64k: ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['64k'] . '<span class="data-type">' . $data['64k_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6 col-md-3 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', '512k: ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['512k'] . '<span class="data-type">' . $data['512k_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-6 col-md-3 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', '1m: ');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['1m'] . '<span class="data-type">' . $data['1m_type'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'Pricing');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['price'] . ' <span class="data-type">' . $data['currency'] . '</span> ');
|
|
$this->HTMLphrase('p', 'm-value', $this->paymentTerm($data['term']));
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'As USD per month: ');
|
|
$this->HTMLphrase('p', 'm-value', '$' . $data['usd_per_month'] . '');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'Other');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Owned since');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $data['owned_since']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Dedicated: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['is_dedicated']));
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Dedi CPU: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['is_cpu_dedicated']));
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Is offer: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['was_special']));
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'AES-NI: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['aes_ni']));
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'VM-x/AMD-V: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['amd_v']));
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-4 mm-col');
|
|
$this->HTMLphrase('p', 'm-desc', 'Virt: ');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-2 mm-col');
|
|
$this->HTMLphrase('p', 'm-value', $data['virt']);
|
|
$this->tagClose('div', 2);
|
|
if ($has_yabs && $has_st) {
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'Network tests');
|
|
$this->tagClose('div', 2);
|
|
$this->tagOpen('div', 'row');
|
|
$this->outputString('<div class="col-6"><p class="m-desc">Location:</p></div>');
|
|
$this->outputString('<div class="col-3"><p class="m-desc">Send:</p></div>');
|
|
$this->outputString('<div class="col-3"><p class="m-desc">Receive:</p></div>');
|
|
$this->tagClose('div');
|
|
for ($i = 0; $i <= 7; $i++) {
|
|
if (isset($data[$i])) {
|
|
$this->rowColOpen('row', 'col-6');
|
|
$this->HTMLphrase('p', 'm-value', $data[$i]['location']);
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-3');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data[$i]['send'] . '<span class="data-type">' . $data[$i]['send_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-3');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data[$i]['recieve'] . '<span class="data-type">' . $data[$i]['recieve_type'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->tagClose('div');
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->rowColOpen('row m-section-row', 'col-12 col-md-6');
|
|
$this->htmlPhrase('p', 'm-section-text text-center', 'Notes');
|
|
$this->outputString("<textarea class='form-control' id='server_notes' name='server_notes' rows='4' cols='40' maxlength='255' disabled>");
|
|
if (is_null($data['notes']) || empty($data['notes'])) {
|
|
$this->outputString('');
|
|
} else {
|
|
$this->outputString($data['notes']);
|
|
}
|
|
$this->outputString("</textarea>");
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->HTMLphrase('p', 'm-section-text text-center', 'Tags');
|
|
$this->tagOpen('ul');
|
|
$tags_arr = explode(",", $data['tags']);
|
|
foreach ($tags_arr as $tag) {
|
|
if (!empty($tag)) {
|
|
$this->HTMLphrase('li', 'tags-list', $tag);
|
|
}
|
|
}
|
|
$this->tagClose('ul');
|
|
$this->tagClose('div', 2);
|
|
if (file_exists("yabs/{$data['server_id']}.txt")) {
|
|
$this->rowColOpen('row m-section-row text-center', 'col-12 col-md-6');
|
|
$this->outputString('<a class="btn btn-main view-yabs-btn" id="viewYabs" value="' . $item_id . '" data-target="#yabsModal" data-toggle="modal" href="#" role="button">View YABs</a>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-6');
|
|
$this->outputString('<a class="btn btn-third" id="closeViewMoreModal" role="button" data-dismiss="modal">Close</a>');
|
|
$this->tagClose('div', 2);
|
|
} else {
|
|
$this->rowColOpen('row m-section-row text-center', 'col-12');
|
|
$this->outputString('<a class="btn btn-third" id="closeViewMoreModal" role="button" data-dismiss="modal">Close</a>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
}
|
|
|
|
public function viewMoreSharedHostingModal(string $item_id)
|
|
{
|
|
$data = json_decode($this->sharedHostingData($item_id), true);
|
|
if (!isset($data)) {//returned no data
|
|
exit;
|
|
}
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->HTMLphrase('h4', 'modal-title w-100', $data['domain'], 'view_more_header');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Type');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['type']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Provider');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['provider']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Location');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['location']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Cost');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['price'] . ' <span class="data-type">' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . '</span> ');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Due in');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $this->processDueDate($item_id, $data['term'], $data['next_dd']) . '<span class="data-type">days</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Owned since');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['owned_since']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-section-row', 'col-12 text-center');
|
|
$this->HTMLphrase('p', 'm-section-text', 'About');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Storage');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['disk'] . '<span class="data-type">' . $data['disk_type'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Domains');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['domains_limit']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Email accounts');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['emails']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'FTP accounts');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['ftp']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Databases');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['db']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Bandwidth');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['bandwidth'] . '<span class="data-type">TB</span>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
public function viewMoreDomainModal(string $item_id)
|
|
{
|
|
$data = json_decode($this->domainData($item_id), true);
|
|
if (!isset($data)) {//returned no data
|
|
exit;
|
|
}
|
|
$this->tagOpen('div', 'modal-header');
|
|
$this->HTMLphrase('h4', 'modal-title w-100', $data['domain'], 'view_more_header');
|
|
$this->outputString('<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'modal-body');
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Attached to');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
if (!is_null($data['attached_to']) && !empty($data['attached_to'])) {
|
|
$this->outputString('<code><p class="m-value">' . $this->idToObjectName($data['attached_to']) . '</p></code>');
|
|
} else {
|
|
$this->outputString('');
|
|
}
|
|
$this->tagClose('div', 2);
|
|
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'NS2');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->outputString('<code><p class="m-value">' . $data['ns1'] . '</p></code>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'NS2');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->outputString('<code><p class="m-value">' . $data['ns2'] . '</p></code>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Provider');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['provider']);
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Cost');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $data['price'] . ' <span class="data-type">' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . '</span> ');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Due in');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', '' . $this->processDueDate($item_id, $data['term'], $data['next_dd']) . '<span class="data-type">days</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
$this->rowColOpen('row m-row', 'col-4');
|
|
$this->HTMLphrase('p', 'm-desc', 'Owned since');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-8');
|
|
$this->HTMLphrase('p', 'm-value', $data['owned_since']);
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
protected function orderForm()
|
|
{
|
|
$this->outputString('<form id="orderForm" method="post">');
|
|
$this->rowColOpen('form-row', 'col-9');
|
|
$this->hiddenInput('order_form', 'true');
|
|
$this->tagOpen('div', 'input-group');
|
|
$this->inputPrepend('Order by');
|
|
$this->selectElement('order_by', 'form-control');
|
|
$this->selectOption('CPU count DESC', '1', true);
|
|
$this->selectOption('CPU count ASC', '2');
|
|
$this->selectOption('CPU Frequency DESC', '3');
|
|
$this->selectOption('CPU Frequency ASC', '4');
|
|
$this->selectOption('Ram amount DESC', '5');
|
|
$this->selectOption('Ram amount ASC', '6');
|
|
$this->selectOption('Disk Amount DESC', '7');
|
|
$this->selectOption('Disk Amount ASC', '8');
|
|
$this->selectOption('Owned since DESC', '9');
|
|
$this->selectOption('Owned since ASC', '10');
|
|
$this->selectOption('GB5 single DESC', '11');
|
|
$this->selectOption('GB5 single ASC', '12');
|
|
$this->selectOption('GB5 multi DESC', '13');
|
|
$this->selectOption('GB5 multi ASC', '14');
|
|
$this->selectOption('Price DESC', '15');
|
|
$this->selectOption('Price ASC', '16');
|
|
$this->selectOption('Price p/m DESC', '17');
|
|
$this->selectOption('Price p/m ASC', '18');
|
|
$this->selectOption('4k speed DESC', '19');
|
|
$this->selectOption('4k speed ASC', '20');
|
|
$this->selectOption('64k speed DESC', '21');
|
|
$this->selectOption('64k speed ASC', '22');
|
|
$this->selectOption('512k speed DESC', '23');
|
|
$this->selectOption('512k speed ASC', '24');
|
|
$this->selectOption('1m speed DESC', '25');
|
|
$this->selectOption('1m speed ASC', '26');
|
|
$this->selectOption('Network send DESC', '27');
|
|
$this->selectOption('Network send ASC', '28');
|
|
$this->selectOption('Network receive DESC', '29');
|
|
$this->selectOption('Network receive ASC', '30');
|
|
$this->selectOption('Bandwidth amount DESC', '31');
|
|
$this->selectOption('Bandwidth amount ASC', '32');
|
|
$this->tagClose('select');
|
|
$this->tagClose('div', 2);
|
|
$this->colOpen('col-3');
|
|
$this->submitInput('Order', 'submitInput', 'btn btn-second btn-block order-btn');
|
|
$this->tagClose('div', 2);
|
|
$this->tagClose('form');
|
|
$this->outputString('<div id="orderDiv"></div>');
|
|
}
|
|
|
|
public function orderTable(int $order_type)
|
|
{
|
|
if (in_array($order_type, array(1, 2, 3, 4, 5, 6, 7, 8))) {
|
|
$this->tableHeader(array('Hostname', 'CPU', 'Freq', 'Ram', 'Swap', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `swap`, `swap_type`, `swap_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type` FROM `servers`";
|
|
if ($order_type == 1) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `cpu` DESC;");
|
|
} elseif ($order_type == 2) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `cpu`;");
|
|
} elseif ($order_type == 3) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `cpu_freq` DESC;");
|
|
} elseif ($order_type == 4) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `cpu_freq`;");
|
|
} elseif ($order_type == 5) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `ram_mb` DESC;");
|
|
} elseif ($order_type == 6) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `ram_mb`;");
|
|
} elseif ($order_type == 7) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `disk_gb` DESC;");
|
|
} elseif ($order_type == 8) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `disk_gb`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['swap'], 0) . "<span class='table-val-type'>" . $row['swap_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(9, 10))) {
|
|
$this->tableHeader(array('Hostname', 'Owned since', 'CPU', 'Freq', 'Ram', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type`, DATE_FORMAT(`owned_since`, '%D %b %Y') as dt FROM `servers`";
|
|
if ($order_type == 9) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `owned_since` DESC;");
|
|
} elseif ($order_type == 10) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `owned_since`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['dt']}</td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(11, 12, 13, 14))) {
|
|
$this->tableHeader(array('Hostname', 'GB5 single', 'GB5 multi', 'CPU', 'Freq', 'Ram', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type`, `gb5_single`, `gb5_multi` FROM `servers` WHERE has_yabs = 1";
|
|
if ($order_type == 11) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `gb5_single` DESC;");
|
|
} elseif ($order_type == 12) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `gb5_single`;");
|
|
} elseif ($order_type == 13) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `gb5_multi` DESC;");
|
|
} elseif ($order_type == 14) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `gb5_multi`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['gb5_single']}</td>");
|
|
$this->outputString("<td>{$row['gb5_multi']}</td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(15, 16, 17, 18))) {
|
|
$this->tableHeader(array('Hostname', 'Price', 'Term', 'P/M', 'USD', 'CPU', 'Freq', 'Ram', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type`, `price`, `currency`, `term`, `per_month`, `as_usd` FROM `servers` INNER JOIN `pricing`p on servers.id = p.server_id";
|
|
if ($order_type == 15) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `as_usd` DESC;");
|
|
} elseif ($order_type == 16) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `as_usd`;");
|
|
} elseif ($order_type == 17) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `per_month` DESC;");
|
|
} elseif ($order_type == 18) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `per_month`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['price']} {$row['currency']}</td>");
|
|
$this->outputString("<td>" . $this->paymentTerm($row['term']) . "</td>");
|
|
$this->outputString("<td>{$row['per_month']}</td>");
|
|
$this->outputString("<td>{$row['as_usd']}</td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(19, 20, 21, 22, 23, 24, 25, 26))) {
|
|
$this->tableHeader(array('Hostname', '4k', '64k', '512k', '1m', 'CPU', 'Freq', 'Ram', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type`, `4k`, `4k_type`, `64k`, `64k_type`, `512k`, `512k_type`, `1m`, `1m_type` FROM `servers` INNER JOIN `disk_speed`p on servers.id = p.server_id WHERE has_yabs = 1";
|
|
if ($order_type == 19) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `4k_as_mbps` DESC;");
|
|
} elseif ($order_type == 20) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `4k_as_mbps`;");
|
|
} elseif ($order_type == 21) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `64k_as_mbps` DESC;");
|
|
} elseif ($order_type == 22) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `64k_as_mbps`;");
|
|
} elseif ($order_type == 23) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `512k_as_mbps` DESC;");
|
|
} elseif ($order_type == 24) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `512k_as_mbps`;");
|
|
} elseif ($order_type == 25) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `1m_as_mbps` DESC;");
|
|
} elseif ($order_type == 26) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `1m_as_mbps`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['4k']}<span class='table-val-type'>{$row['4k_type']}</span></td>");
|
|
$this->outputString("<td>{$row['64k']}<span class='table-val-type'>{$row['64k_type']}</span></td>");
|
|
$this->outputString("<td>{$row['512k']}<span class='table-val-type'>{$row['512k_type']}</span></td>");
|
|
$this->outputString("<td>{$row['1m']}<span class='table-val-type'>{$row['1m_type']}</span></td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(27, 28, 29, 30))) {
|
|
$this->tableHeader(array('Hostname', 'Send', 'Receive', 'Location', 'CPU', 'Freq', 'Ram', 'Disk', 'BWidth'));
|
|
$base_query = "SELECT servers.id, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type`, `send`, `send_type`, p.location, `recieve`, `recieve_type` FROM `servers` INNER JOIN `speed_tests`p on servers.id = p.server_id WHERE has_yabs = 1";
|
|
if ($order_type == 27) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `send_as_mbps` DESC LIMIT 80;");
|
|
} elseif ($order_type == 28) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `send_as_mbps` LIMIT 80;");
|
|
} elseif ($order_type == 29) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `recieve_as_mbps` DESC LIMIT 80;");
|
|
} elseif ($order_type == 30) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `recieve_as_mbps` LIMIT 80;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>{$row['send']}<span class='table-val-type'>{$row['send_type']}</span></td>");
|
|
$this->outputString("<td>{$row['recieve']}<span class='table-val-type'>{$row['recieve_type']}</span></td>");
|
|
$this->outputString("<td>{$row['location']}</td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
} elseif (in_array($order_type, array(31, 32))) {
|
|
$this->tableHeader(array('Hostname', 'Bandwidth', 'CPU', 'Freq', 'Ram', 'Disk'));
|
|
$base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram`, `ram_type`, `ram_mb`, `disk`, `disk_type`, `disk_gb`, `bandwidth`, `bandwidth_type` FROM `servers`";
|
|
if ($order_type == 31) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `bandwidth` DESC;");
|
|
} elseif ($order_type == 32) {
|
|
$select = $this->dbConnect()->prepare("$base_query ORDER BY `bandwidth`;");
|
|
}
|
|
$select->execute();
|
|
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
|
|
$this->tagOpen('tr');
|
|
$this->outputString("<td>{$row['hostname']}</td>");
|
|
$this->outputString("<td>" . number_format($row['bandwidth'], 0) . "<span class='table-val-type'>" . $row['bandwidth_type'] . "</span></td>");
|
|
$this->outputString("<td>{$row['cpu']}</td>");
|
|
$this->outputString("<td>" . $this->mhzToGhz($row['cpu_freq']) . "<span class='table-val-type'>Ghz</span></td>");
|
|
$this->outputString("<td>" . number_format($row['ram'], 0) . "<span class='table-val-type'>" . $row['ram_type'] . "</span></td>");
|
|
$this->outputString("<td>" . number_format($row['disk'], 0) . "<span class='table-val-type'>" . $row['disk_type'] . "</span></td>");
|
|
$this->tagClose('tr');
|
|
}
|
|
}
|
|
$this->outputString('</tbody></table></div>');
|
|
}
|
|
|
|
public function infoCard()
|
|
{
|
|
$select = $this->dbConnect()->prepare("SELECT COUNT(*), SUM(`cpu`), SUM(`disk_gb`), SUM(`ram_mb`), SUM(`swap_mb`), SUM(`bandwidth`), SUM(`was_special`), SUM(`gb5_single`), SUM(`gb5_multi`) FROM `servers`;");
|
|
$select->execute();
|
|
$row = $select->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
$inactive_servers = $this->dbConnect()->prepare("SELECT COUNT(*) as inactive FROM `servers` WHERE `still_have` = 0;");
|
|
$inactive_servers->execute();
|
|
$inactive_servers_count = $inactive_servers->fetch()['inactive'];
|
|
$kvm = $this->dbConnect()->prepare("SELECT COUNT(*) as kvm_count FROM `servers` WHERE `virt` = 'KVM';");
|
|
$kvm->execute();
|
|
$kvm_count = $kvm->fetch()['kvm_count'];
|
|
$ovz = $this->dbConnect()->prepare("SELECT COUNT(*) as ovz_count FROM `servers` WHERE `virt` = 'OVZ';");
|
|
$ovz->execute();
|
|
$ovz_count = $ovz->fetch()['ovz_count'];
|
|
$dedi = $this->dbConnect()->prepare("SELECT COUNT(*) as dedi_count FROM `servers` WHERE `virt` = 'DEDI';");
|
|
$dedi->execute();
|
|
$dedi_count = $dedi->fetch()['dedi_count'];
|
|
$lxc = $this->dbConnect()->prepare("SELECT COUNT(*) as lxc_count FROM `servers` WHERE `virt` = 'LXC';");
|
|
$lxc->execute();
|
|
|
|
$lxc_count = $lxc->fetch()['lxc_count'];
|
|
$domains = $this->dbConnect()->prepare("SELECT COUNT(*) as domains_count FROM `domains` WHERE `still_have` = 1;");
|
|
$domains->execute();
|
|
$domains_count = $domains->fetch()['domains_count'];
|
|
|
|
$domains_inactive = $this->dbConnect()->prepare("SELECT COUNT(*) as domains_count FROM `domains` WHERE `still_have` = 0;");
|
|
$domains_inactive->execute();
|
|
$domains_inactive_count = $domains_inactive->fetch()['domains_count'];
|
|
|
|
$sh = $this->dbConnect()->prepare("SELECT COUNT(*) as sh_count FROM `shared_hosting` WHERE `still_have` = 1;");
|
|
$sh->execute();
|
|
$sh_count = $sh->fetch()['sh_count'];
|
|
$sh_inactive = $this->dbConnect()->prepare("SELECT COUNT(*) as sh_count FROM `shared_hosting` WHERE `still_have` = 0;");
|
|
$sh_inactive->execute();
|
|
$sh_inactive_count = $sh_inactive->fetch()['sh_count'];
|
|
|
|
$cpu_freq = $this->dbConnect()->prepare("SELECT `cpu_freq` FROM `servers` ORDER BY `cpu_freq` DESC LIMIT 1;");
|
|
$cpu_freq->execute();
|
|
$fastest_cpu_freq = $cpu_freq->fetch()['cpu_freq'];
|
|
|
|
$single_high = $this->dbConnect()->prepare("SELECT `gb5_single` FROM `servers` ORDER BY `gb5_single` DESC LIMIT 1;");
|
|
$single_high->execute();
|
|
$highest_single_gb5 = $single_high->fetch()['gb5_single'];
|
|
|
|
$multi_high = $this->dbConnect()->prepare("SELECT `gb5_multi` FROM `servers` ORDER BY `gb5_multi` DESC LIMIT 1;");
|
|
$multi_high->execute();
|
|
$highest_multi_gb5 = $multi_high->fetch()['gb5_multi'];
|
|
|
|
$oldest = $this->dbConnect()->prepare("SELECT `hostname`, `owned_since` FROM `servers` ORDER BY `owned_since`;");
|
|
$oldest->execute();
|
|
$oldest_row = $oldest->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
|
|
$oldest_d = $this->dbConnect()->prepare("SELECT `domain`, `owned_since` FROM `domains` ORDER BY `owned_since`;");
|
|
$oldest_d->execute();
|
|
if (isset($oldest_d->fetchAll(PDO::FETCH_ASSOC)[0])) {
|
|
$oldest_d_row = $oldest_d->fetchAll(PDO::FETCH_ASSOC)[0];
|
|
} else {
|
|
$oldest_d_row = array('domain' => null, 'owned_since' => null);
|
|
}
|
|
|
|
|
|
$sel_price = $this->dbConnect()->prepare("SELECT `as_usd`, `term`, `usd_per_month` FROM `pricing`;");
|
|
$sel_price->execute();
|
|
$tally = 0;
|
|
$pm_tally = 0;
|
|
while ($row1 = $sel_price->fetch(PDO::FETCH_ASSOC)) {
|
|
$cost = $row1['as_usd'];
|
|
$term = $row1['term'];
|
|
$pm = $row1['usd_per_month'];
|
|
$pm_tally = ($pm_tally + $pm);
|
|
if ($term == 1) {
|
|
$tally = $tally + ($cost * 12);
|
|
} elseif ($term == 2) {
|
|
$tally = $tally + ($cost * 4);
|
|
} elseif ($term == 3) {
|
|
$tally = $tally + ($cost * 2);
|
|
} elseif ($term == 4) {
|
|
$tally = $tally + $cost;
|
|
} elseif ($term == 4) {
|
|
$tally = $tally + ($cost / 2);
|
|
} elseif ($term == 4) {
|
|
$tally = $tally + ($cost / 3);
|
|
}
|
|
}
|
|
$this->outputString("<div class='card' id='infoCard'>");
|
|
$this->tagOpen('div', 'card-header text-center');
|
|
$this->HTMLphrase('h2', '', 'My idlers info');
|
|
$this->tagClose('div');
|
|
$this->tagOpen('div', 'card-body');
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total servers: <span class="info-val">' . $row['COUNT(*)'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total shared hosting: <span class="info-val">' . $sh_count . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total domains: <span class="info-val">' . $domains_count . '</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'KVM/OVZ/DEDI/LXC: <span class="info-val">' . $kvm_count . '/' . $ovz_count . '/' . $dedi_count . '/' . $lxc_count . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'No longer have servers: <span class="info-val">' . $inactive_servers_count . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'No longer have domains/shared: <span class="info-val">' . $domains_inactive_count . '/' . $sh_inactive_count . '</span>');
|
|
$this->tagClose('div', 2);
|
|
|
|
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total CPU: <span class="info-val">' . $row['SUM(`cpu`)'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Fastest CPU: <span class="info-val">' . $fastest_cpu_freq . '<span class="data-type">Mhz</span></span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total disk: <span class="info-val">' . number_format($row['SUM(`disk_gb`)'], 0) . '<span class="data-type">GB</span></span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total bandwidth: <span class="info-val">' . number_format($row['SUM(`bandwidth`)'], 0) . '<span class="data-type">TB</span></span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total ram: <span class="info-val">' . number_format($row['SUM(`ram_mb`)'], 2) . '<span class="data-type">MB</span></span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total swap: <span class="info-val">' . number_format($row['SUM(`swap_mb`)'], 2) . '<span class="data-type">MB</span></span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total gb5_single: <span class="info-val">' . number_format($row['SUM(`gb5_single`)'], 0) . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total gb5_multi: <span class="info-val">' . number_format($row['SUM(`gb5_multi`)'], 0) . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Highest single/multi: <span class="info-val">' . $highest_single_gb5 . '/' . $highest_multi_gb5 . '</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');;
|
|
$this->HTMLphrase('p', 'info-desc', 'Special priced: <span class="info-val">' . $row['SUM(`was_special`)'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Oldest server: <span class="info-val">' . $oldest_row['hostname'] . ' ' . $oldest_row['owned_since'] . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Oldest domain: <span class="info-val">' . $oldest_d_row['domain'] . ' ' . $oldest_d_row['owned_since'] . '</span>');
|
|
$this->tagClose('div', 2);
|
|
$this->rowColOpen('row info-row', 'col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total cost p/m USD: <span class="info-val">$' . $pm_tally . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
$this->HTMLphrase('p', 'info-desc', 'Total cost per year USD: <span class="info-val">$' . $tally . '</span>');
|
|
$this->tagClose('div');
|
|
$this->colOpen('col-12 col-md-4');
|
|
|
|
$this->tagClose('div', 4);
|
|
}
|
|
|
|
protected function hasPassedDate(string $the_date)
|
|
{
|
|
if (new DateTime() > new DateTime($the_date)) {
|
|
//current date time has passed $the_date
|
|
return true;
|
|
} else {
|
|
//current date time has NOT passed $the_date
|
|
return false;
|
|
}
|
|
}
|
|
|
|
protected function nextDueDate(int $term, string $last_dd)
|
|
{
|
|
$date = new DateTime($last_dd);
|
|
if ($term == 1) {
|
|
$date->add(new DateInterval('P1M'));
|
|
} elseif ($term == 2) {
|
|
$date->add(new DateInterval('P3M'));
|
|
} elseif ($term == 3) {
|
|
$date->add(new DateInterval('P6M'));
|
|
} elseif ($term == 4) {
|
|
$date->add(new DateInterval('P1Y'));
|
|
} elseif ($term == 5) {
|
|
$date->add(new DateInterval('P2Y'));
|
|
} elseif ($term == 6) {
|
|
$date->add(new DateInterval('P3Y'));
|
|
}
|
|
return $date->format('Y-m-d');
|
|
}
|
|
|
|
protected function processDueDate(string $item_id, int $term, $last_dd)
|
|
{//Will return days until due. Will update if passed due date and then return days until due
|
|
if (is_null($last_dd)) {
|
|
return "-";//Due date not set
|
|
} else {
|
|
if ($this->hasPassedDate($last_dd)) {
|
|
$update = $this->dbConnect()->prepare("UPDATE `pricing` SET `next_dd` = ? WHERE `server_id` = ? LIMIT 1;");
|
|
$new_dd = $this->nextDueDate($term, $last_dd);
|
|
$update->execute([$new_dd, $item_id]);
|
|
return $this->daysAway($new_dd);
|
|
} else {
|
|
return $this->daysAway($last_dd);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function showYabsModal(string $item_id)
|
|
{
|
|
$this->tagOpen('form');
|
|
$this->outputString('<textarea class="form-control" id="yabsTextBox" name="yabsTextBox" rows="40" cols="50">');
|
|
$this->outputString(file_get_contents("yabs/$item_id.txt"));
|
|
$this->tagClose('textarea');
|
|
$this->tagClose('form');
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
$this->outputString('<a class="btn btn-third" role="button" data-dismiss="modal">Close YABs</a>');
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
public function getIpForDomain(string $domain, string $type = 'A'): string
|
|
{//Gets IP from A record for a domain
|
|
$data = json_decode(file_get_contents("https://whatsmydns.net/api/details?server=428&type=$type&query=$domain"), true);
|
|
if (isset($data['data'][0]['response'][0])) {
|
|
if (strlen($data['data'][0]['response'][0]) > 6) {
|
|
return $data['data'][0]['response'][0];
|
|
}
|
|
}
|
|
return "";//Doesnt exist/null/empty/invalid
|
|
}
|
|
|
|
public function checkIsUp(string $host, int $port = 80, int $wait_time = 1): int
|
|
{//Check if host/ip is "up"
|
|
if ($fp = @fsockopen($host, $port, $errCode, $errStr, $wait_time)) {
|
|
$result = 1;
|
|
} else {
|
|
$result = 0;
|
|
}
|
|
@fclose($fp);
|
|
return $result;
|
|
}
|
|
|
|
protected function viewSwitcherIcon()
|
|
{
|
|
$this->rowColOpen('row text-center', 'col-12');
|
|
if (self::DEFAULT_VIEW == 'CARDS') {
|
|
$this->outputString('<a id="viewSwitcherIcon"><i class="fas fa-table" id="viewSwitchIcon" title="Switch to table"></i></a>');
|
|
} else {
|
|
$this->outputString('<a id="viewSwitcherIcon"><i class="fas fa-th" id="viewSwitchIcon" title="Switch to cards"></i></a>');
|
|
}
|
|
$this->tagClose('div', 2);
|
|
}
|
|
|
|
protected function idToObjectName(string $id)
|
|
{//Returns a hostname or domain for an id
|
|
$servers = $this->dbConnect()->prepare("SELECT `hostname` FROM `servers` WHERE `id` = ? LIMIT 1;");
|
|
$servers->execute([$id]);
|
|
$servers_res = $servers->fetch(PDO::FETCH_ASSOC);
|
|
if ($servers_res) {
|
|
return $servers_res['hostname'];
|
|
} else {
|
|
$shared = $this->dbConnect()->prepare("SELECT `domain` FROM `shared_hosting` WHERE `id` = ? LIMIT 1;");
|
|
$shared->execute([$id]);
|
|
$shared_res = $shared->fetch(PDO::FETCH_ASSOC);
|
|
if ($shared_res) {
|
|
return $shared_res['domain'];
|
|
} else {
|
|
$domain = $this->dbConnect()->prepare("SELECT `domain` FROM `domains` WHERE `id` = ? LIMIT 1;");
|
|
$domain->execute([$id]);
|
|
$domain_res = $domain->fetch(PDO::FETCH_ASSOC);
|
|
if ($domain_res) {
|
|
return $domain_res['domain'];
|
|
}
|
|
}
|
|
}
|
|
return $id;
|
|
}
|
|
}
|
|
|
|
class itemInsert extends idlers
|
|
{
|
|
public string $item_id;
|
|
public array $data;
|
|
|
|
public function __construct(array $data)
|
|
{
|
|
$this->item_id = $this->genId();
|
|
$this->data = $data;
|
|
}
|
|
|
|
public function insertBasicWithYabs()
|
|
{//Insert data from form EXCEPT the YABs output
|
|
$data = $this->data;
|
|
$item_id = $this->item_id;
|
|
(isset($data['dedi_cpu'])) ? $dedi_cpu = 1 : $dedi_cpu = 0;
|
|
($data['virt'] == 'DEDI') ? $dedi = 1 : $dedi = 0;
|
|
(isset($data['was_offer'])) ? $offer = 1 : $offer = 0;
|
|
(empty($data['ipv4'])) ? $ipv4 = null : $ipv4 = $data['ipv4'];
|
|
(empty($data['ipv6'])) ? $ipv6 = null : $ipv6 = $data['ipv6'];
|
|
(empty($data['label'])) ? $label = null : $label = $data['label'];
|
|
$location_id = $this->handleLocation($data['location']);
|
|
$provider_id = $this->handleProvider($data['provider']);
|
|
$insert = $this->dbConnect()->prepare('INSERT IGNORE INTO `servers` (id, hostname, location, provider, ipv4,ipv6, owned_since, os, is_cpu_dedicated, is_dedicated, was_special, bandwidth, virt, has_yabs, ns1, ns2, ssh_port, label) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
|
|
$insert->execute([$item_id, $data['hostname'], $location_id, $provider_id, $ipv4, $ipv6, $data['owned_since'], $data['os'], $dedi_cpu, $dedi, $offer, $data['bandwidth'], $data['virt'], $data['has_yabs'], $data['ns1'], $data['ns2'], $data['ssh_port'], $label]);
|
|
$this->insertPrice($data['price'], $data['currency'], $data['term'], $data['next_due_date']);
|
|
return $item_id;
|
|
}
|
|
|
|
public function insertBasic()
|
|
{//Manual form insert (NO YABs)
|
|
$data = $this->data;
|
|
$item_id = $this->item_id;
|
|
(isset($data['dedi_cpu'])) ? $dedi_cpu = 1 : $dedi_cpu = 0;
|
|
($data['virt'] == 'DEDI') ? $dedi = 1 : $dedi = 0;
|
|
(isset($data['was_offer'])) ? $offer = 1 : $offer = 0;
|
|
(empty($data['ipv4'])) ? $ipv4 = null : $ipv4 = $data['ipv4'];
|
|
(empty($data['ipv6'])) ? $ipv6 = null : $ipv6 = $data['ipv6'];
|
|
(empty($data['label'])) ? $label = null : $label = $data['label'];
|
|
($data['ram_type'] == 'GB') ? $ram_mb = $this->GBtoMB($data['ram']) : $ram_mb = $data['ram'];
|
|
($data['swap_type'] == 'GB') ? $swap_mb = $this->GBtoMB($data['swap']) : $swap_mb = $data['swap'];
|
|
($data['disk_type'] == 'TB') ? $disk_gb = $this->TBtoGB($data['disk']) : $disk_gb = $data['disk'];
|
|
$location_id = $this->handleLocation($data['location']);
|
|
$provider_id = $this->handleProvider($data['provider']);
|
|
$insert = $this->dbConnect()->prepare('INSERT IGNORE INTO `servers` (id, hostname, location, provider, ipv4,ipv6, owned_since, os, is_cpu_dedicated, is_dedicated, was_special, bandwidth, virt, cpu, cpu_freq, ram, ram_type, swap, swap_type, disk, disk_type, ram_mb, swap_mb, disk_gb, ns1, ns2, ssh_port, label) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
|
|
$insert->execute([$item_id, $data['hostname'], $location_id, $provider_id, $ipv4, $ipv6, $data['owned_since'], $data['os'], $dedi_cpu, $dedi, $offer, $data['bandwidth'], $data['virt'], $data['cpu_amount'], $data['cpu_speed'], $data['ram'], $data['ram_type'], $data['swap'], $data['swap_type'], $data['disk'], $data['disk_type'], $ram_mb, $swap_mb, $disk_gb, $data['ns1'], $data['ns2'], $data['ssh_port'], $label]);
|
|
$this->insertPrice($data['price'], $data['currency'], $data['term'], $data['next_due_date']);
|
|
return $item_id;
|
|
}
|
|
|
|
public function insertSharedHosting()
|
|
{//domains form insert
|
|
$data = $this->data;
|
|
$item_id = $this->item_id;
|
|
($data['shared_storage_type'] == 'TB') ? $disk_gb = $this->TBtoGB($data['shared_storage']) : $disk_gb = $data['shared_storage'];
|
|
(isset($data['shared_was_offer'])) ? $offer = 1 : $offer = 0;
|
|
$location_id = $this->handleLocation($data['shared_location']);
|
|
$provider_id = $this->handleProvider($data['shared_provider']);
|
|
$insert = $this->dbConnect()->prepare('INSERT IGNORE INTO `shared_hosting` (id, domain, domains_limit, emails, disk, disk_type, disk_as_gb, ftp, db, bandwidth, provider, location, was_special, still_have, type, owned_since) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
|
|
$insert->execute([$item_id, $data['shared_domain'], $data['shared_domains_amount'], $data['shared_emails'], $data['shared_storage'], $data['shared_storage_type'], $disk_gb, $data['shared_ftp'], $data['shared_db_amount'], $data['shared_bandwidth'], $provider_id, $location_id, $offer, '1', $data['shared_type'], $data['shared_owned_since']]);
|
|
$this->insertPrice($data['shared_price'], $data['shared_currency'], $data['shared_term'], $data['shared_next_due_date']);
|
|
return $item_id;
|
|
}
|
|
|
|
public function insertDomain()
|
|
{//domains form insert
|
|
$data = $this->data;
|
|
$domain_id = $this->item_id;
|
|
$provider_id = $this->handleProvider($data['domain_provider']);
|
|
$insert = $this->dbConnect()->prepare('INSERT IGNORE INTO `domains` (id, domain, provider, owned_since) VALUES (?,?,?,?)');
|
|
$insert->execute([$domain_id, $data['domain'], $provider_id, $data['domain_owned_since']]);
|
|
$this->insertPrice($data['domain_price'], $data['domain_currency'], $data['domain_term'], $data['domain_next_due_date']);
|
|
return $domain_id;
|
|
}
|
|
|
|
public function insertYabsData()
|
|
{//YABS data handler
|
|
$file_name = 'yabsFromForm.txt';
|
|
$logfile = fopen($file_name, "w") or die("Unable to open file!");
|
|
fwrite($logfile, $this->data['yabs']);
|
|
fclose($logfile);
|
|
$file = @fopen($file_name, 'r');
|
|
if ($file) {
|
|
$array = explode("\n", fread($file, filesize($file_name)));
|
|
//echo json_encode($array);
|
|
//exit;
|
|
}
|
|
if (count($array) < 50) {
|
|
return 9;//Less than 50 lines
|
|
}
|
|
if (strpos($array[0], '# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #') !== false) {
|
|
if ($array[1] == "\r") {
|
|
return 8;//Didnt copy output correctly
|
|
}
|
|
$version_array = explode(' ', preg_replace('!\s+!', ' ', $this->trimRemoveR($array[2])));
|
|
$version = $version_array[1];//YABs version
|
|
if ($version == 'v2020-12-29') {
|
|
$cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[10], ': ')));
|
|
$cpu_spec = explode(' ', strstr($array[11], ': '));//: 2 @ 3792.872 MHz
|
|
$cpu_cores = $cpu_spec[1];
|
|
$cpu_freq = $cpu_spec[3];
|
|
$ram_line = $this->trimRemoveR(str_replace(':', '', strstr($array[14], ': ')));
|
|
$ram = floatval($ram_line);
|
|
$ram_type = $this->datatype($ram_line);
|
|
$swap_line = $this->trimRemoveR(str_replace(':', '', strstr($array[15], ': ')));
|
|
$swap = floatval($swap_line);
|
|
$swap_type = $this->datatype($swap_line);
|
|
$disk_line = $this->trimRemoveR(str_replace(':', '', strstr($array[16], ': ')));
|
|
$disk = floatval($disk_line);
|
|
$disk_type = $this->datatype($disk_line);
|
|
$io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[24]));
|
|
$io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[30]));
|
|
(strpos($array[12], 'Enabled') !== false) ? $aes_ni = 1 : $aes_ni = 0;
|
|
(strpos($array[13], 'Enabled') !== false) ? $vm_amd_v = 1 : $vm_amd_v = 0;
|
|
$d4k_as_mbps = $this->diskSpeedAsMbps($io_3[3], $this->floatValue($io_3[2]));
|
|
$d64k_as_mbps = $this->diskSpeedAsMbps($io_3[7], $this->floatValue($io_3[6]));
|
|
$d512k_as_mbps = $this->diskSpeedAsMbps($io_6[3], $this->floatValue($io_6[2]));
|
|
$d1m_as_mbps = $this->diskSpeedAsMbps($io_6[7], $this->floatValue($io_6[6]));
|
|
$disk_test_arr = array($this->item_id, $this->floatValue($io_3[2]), $io_3[3], $this->floatValue($io_3[6]), $io_3[7], $this->floatValue($io_6[2]), $io_6[3], $this->floatValue($io_6[6]), $io_6[7], $d4k_as_mbps, $d64k_as_mbps, $d512k_as_mbps, $d1m_as_mbps);
|
|
$this->insertDiskTest($disk_test_arr);
|
|
if (isset($array[40])) {
|
|
if ($array[45] == "Geekbench 5 Benchmark Test:\r") {
|
|
//No ipv6
|
|
//Has short ipv4 network speed testing (-r)
|
|
$start_st = 36;
|
|
$end_st = 43;
|
|
$gb_s = 49;
|
|
$gb_m = 50;
|
|
$gb_url = 51;
|
|
} elseif ($array[45] == "Geekbench 4 Benchmark Test:\r") {
|
|
return 6;//GeekBench 5 only allowed
|
|
} elseif ($array[45] == "Geekbench 5 test failed. Run manually to determine cause.") {
|
|
return 7;//GeekBench test failed
|
|
} elseif ($array[40] == "Geekbench 5 Benchmark Test:\r") {
|
|
//No ipv6
|
|
//Has full ipv4 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 38;
|
|
$gb_s = 44;
|
|
$gb_m = 45;
|
|
$gb_url = 46;
|
|
} elseif ($array[40] == "iperf3 Network Speed Tests (IPv6):\r") {
|
|
//HAS ipv6
|
|
//Has short ipv4 & ipv6 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 38;
|
|
$gb_s = 52;
|
|
$gb_m = 53;
|
|
$gb_url = 54;
|
|
} elseif ($array[55] == "Geekbench 5 Benchmark Test:\r") {
|
|
//HAS ipv6
|
|
//Has full ipv4 & ipv6 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 43;
|
|
$gb_s = 59;
|
|
$gb_m = 60;
|
|
$gb_url = 61;
|
|
} else {
|
|
return 5;//Not correct YABs command output
|
|
}
|
|
} else {
|
|
return 4;//Not correct format
|
|
}
|
|
$geekbench_single = $this->intValue($array[$gb_s]);
|
|
$geekbench_multi = $this->intValue($array[$gb_m]);
|
|
$geek_full_url = explode(' ', preg_replace('!\s+!', ' ', $array[$gb_url]));
|
|
$gb5_id = substr($geek_full_url[3], strrpos($geek_full_url[3], '/') + 1);//
|
|
$has_a_speed_test = false;
|
|
for ($i = $start_st; $i <= $end_st; $i++) {
|
|
if (strpos($array[$i], 'busy') !== false) {
|
|
//Has a "busy" result, No insert
|
|
} else {
|
|
$data = explode(' ', preg_replace('!\s+!', ' ', $array[$i]));
|
|
$send_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['send_type'], $this->yabsSpeedValues($data)['send']);
|
|
$recieve_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['receive_type'], $this->yabsSpeedValues($data)['receive']);
|
|
$insert = $this->dbConnect()->prepare('INSERT INTO `speed_tests` (`server_id`, `location`, `send`, `send_type`,`send_as_mbps`, `recieve`,`recieve_type`, `recieve_as_mbps`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
|
|
$insert->execute([$this->item_id, $this->yabsSpeedLoc($data)['location'], $this->yabsSpeedValues($data)['send'], $this->yabsSpeedValues($data)['send_type'], $send_as_mbps, $this->yabsSpeedValues($data)['receive'], $this->yabsSpeedValues($data)['receive_type'], $recieve_as_mbps]);
|
|
$has_a_speed_test = true;
|
|
}
|
|
}
|
|
if ($has_a_speed_test) {
|
|
$update_st = $this->dbConnect()->prepare('UPDATE `servers` SET `has_st` = 1 WHERE `id` = ? LIMIT 1;');
|
|
$update_st->execute([$this->item_id]);
|
|
}
|
|
($ram_type == 'GB') ? $ram_mb = $this->GBtoMB($ram) : $ram_mb = $ram;
|
|
($swap_type == 'GB') ? $swap_mb = $this->GBtoMB($swap) : $swap_mb = $swap;
|
|
($disk_type == 'TB') ? $disk_gb = $this->TBtoGB($disk) : $disk_gb = $disk;
|
|
$update = $this->dbConnect()->prepare('UPDATE `servers` SET `cpu` = ?, `cpu_freq` = ?, `cpu_type` = ?, ram = ?, ram_type = ?, swap = ?, swap_type = ?, disk = ?, disk_type = ?, `aes_ni` = ?, `amd_v` = ?, gb5_single = ?, gb5_multi = ?, gb5_id = ?, ram_mb = ?, swap_mb = ?, disk_gb = ? WHERE `id` = ? LIMIT 1;');
|
|
$update->execute([$cpu_cores, $cpu_freq, $cpu, $ram, $ram_type, $swap, $swap_type, $disk, $disk_type, $aes_ni, $vm_amd_v, $geekbench_single, $geekbench_multi, $gb5_id, $ram_mb, $swap_mb, $disk_gb, $this->item_id]);
|
|
if (self::SAVE_YABS_OUTPUT) {
|
|
$this->saveYABS($this->data['yabs'], "{$this->item_id}.txt");
|
|
}
|
|
return 1;
|
|
} else {
|
|
return 2;//Wrong version
|
|
}
|
|
} else {
|
|
return 3;//Didnt start at right spot
|
|
}
|
|
}
|
|
|
|
protected function insertDiskTest(array $results)
|
|
{//Insert disk io results from the built array
|
|
$insert = $this->dbConnect()->prepare("INSERT IGNORE INTO `disk_speed` (`server_id`, `4k`, `4k_type`, `64k`, `64k_type`, `512k`, `512k_type`, `1m`, `1m_type`, `4k_as_mbps`, `64k_as_mbps`, `512k_as_mbps`, `1m_as_mbps`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);");
|
|
return $insert->execute([$this->item_id, $results[1], $results[2], $results[3], $results[4], $results[5], $results[6], $results[7], $results[8], $results[9], $results[10], $results[11], $results[12]]);
|
|
}
|
|
|
|
protected function insertPrice(string $price, string $currency, int $term, string $next_dd)
|
|
{//Insert price data
|
|
$as_usd = $this->convertToUSD($price, $currency);
|
|
$insert = $this->dbConnect()->prepare("INSERT IGNORE INTO `pricing` (server_id, price, currency, term, as_usd, per_month, usd_per_month, next_dd) VALUES (?,?,?,?,?,?,?,?);");
|
|
return $insert->execute([$this->item_id, $price, $currency, $term, $as_usd, $this->costAsPerMonth($price, $term), $this->costAsPerMonth($as_usd, $term), $next_dd]);
|
|
}
|
|
}
|
|
|
|
class itemUpdate extends idlers
|
|
{
|
|
public string $item_id;
|
|
public string $type;
|
|
public array $data;
|
|
|
|
public function __construct(array $data)
|
|
{
|
|
$this->data = $data;
|
|
if (isset($data['sh_me_server_id'])) {
|
|
$this->item_id = $data['sh_me_server_id'];
|
|
$this->type = 'SHARED';
|
|
} elseif (isset($data['d_me_server_id'])) {
|
|
$this->item_id = $data['d_me_server_id'];
|
|
$this->type = 'DOMAIN';
|
|
} else {
|
|
$this->item_id = $data['me_server_id'];
|
|
$this->type = 'SERVER';
|
|
}
|
|
}
|
|
|
|
public function updateServerFromModal()
|
|
{
|
|
$data = $this->data;
|
|
if (!isset($data['me_non_active'])) {
|
|
$this->updateActiveStatus(1);
|
|
} elseif ($data['me_non_active'] == 'on') {
|
|
$this->updateActiveStatus(0);
|
|
}
|
|
$update = $this->dbConnect()->prepare("UPDATE `servers` SET `hostname` = ?,`ipv4` = ?,`ipv6` = ?,`cpu` = ?,`bandwidth` = ?,`disk` = ?,`ram` = ?,`ram_type` = ?,`swap` = ?,`swap_type` = ?, `virt` = ?, `tags` = ?, `owned_since` = ?, `ns1` = ?, `ns2` = ?, `ssh_port` = ?, `notes` = ?, `label` = ? WHERE `id`= ? LIMIT 1;");
|
|
return $update->execute([$data['me_hostname'], $data['me_ipv4'], $data['me_ipv6'], $data['me_cpu_amount'], $data['me_bandwidth'], $data['me_disk'], $data['me_ram'], $data['me_ram_type'], $data['me_swap'], $data['me_swap_type'], $data['me_virt'], $data['me_tags'], $data['me_owned_since'], $data['me_ns1'], $data['me_ns2'], $data['me_ssh_port'], $data['me_notes'], $data['me_label'], $this->item_id]);
|
|
}
|
|
|
|
public function updateServerPricingFromModal()
|
|
{
|
|
$data = $this->data;
|
|
$as_usd = $this->convertToUSD($data['me_price'], $data['me_currency']);
|
|
$update = $this->dbConnect()->prepare("UPDATE `pricing` SET `price` = ?,`currency` = ?,`term` = ?,`as_usd` = ?,`per_month` = ?, `usd_per_month` = ?, `next_dd` = ? WHERE `server_id`= ? LIMIT 1;");
|
|
return $update->execute([$data['me_price'], $data['me_currency'], $data['me_term'], $as_usd, $this->costAsPerMonth($data['me_price'], $data['me_term']), $this->costAsPerMonth($as_usd, $data['me_term']), $data['me_next_dd'], $this->item_id]);
|
|
}
|
|
|
|
public function updateSharedHostingFromModal()
|
|
{
|
|
$data = $this->data;
|
|
if (!isset($data['sh_me_non_active'])) {
|
|
$this->updateActiveStatus(1);
|
|
} elseif ($data['sh_me_non_active'] == 'on') {
|
|
$this->updateActiveStatus(0);
|
|
}
|
|
$update = $this->dbConnect()->prepare("UPDATE `shared_hosting` SET `domain` = ?,`domains_limit` = ?,`emails` = ?,`disk` = ?,`disk_as_gb` = ?,`disk_type` = ?,`ftp` = ?,`db` = ?,`bandwidth` = ?,`owned_since` = ? WHERE `id`= ? LIMIT 1;");
|
|
return $update->execute([$data['sh_me_hostname'], $data['sh_me_domains_count'], $data['sh_me_emails'], $data['sh_me_storage'], $data['sh_me_storage'], 'GB', $data['sh_me_ftp'], $data['sh_me_db'], $data['sh_me_bandwidth'], $data['sh_me_owned_since'], $this->item_id]);
|
|
}
|
|
|
|
public function updateSharedHostingPricingFromModal()
|
|
{
|
|
$data = $this->data;
|
|
$as_usd = $this->convertToUSD($data['sh_me_price'], $data['sh_me_currency']);
|
|
$update = $this->dbConnect()->prepare("UPDATE `pricing` SET `price` = ?,`currency` = ?,`term` = ?,`as_usd` = ?,`per_month` = ?, `usd_per_month` = ?, `next_dd` = ? WHERE `server_id`= ? LIMIT 1;");
|
|
return $update->execute([$data['sh_me_price'], $data['sh_me_currency'], $data['sh_me_term'], $as_usd, $this->costAsPerMonth($data['sh_me_price'], $data['sh_me_term']), $this->costAsPerMonth($as_usd, $data['sh_me_term']), $data['sh_me_next_dd'], $this->item_id]);
|
|
}
|
|
|
|
public function updateDomainFromModal()
|
|
{
|
|
$data = $this->data;
|
|
if (!isset($data['d_me_non_active'])) {
|
|
$this->updateActiveStatus(1);
|
|
} elseif ($data['d_me_non_active'] == 'on') {
|
|
$this->updateActiveStatus(0);
|
|
}
|
|
(!empty($_POST['d_me_attached_to'])) ? $attached_to = $_POST['d_me_attached_to'] : $attached_to = null;
|
|
$update = $this->dbConnect()->prepare("UPDATE `domains` SET `domain` = ?,`ns1` = ?,`ns2` = ?,`owned_since` = ?, `attached_to` = ? WHERE `id`= ? LIMIT 1;");
|
|
return $update->execute([$data['d_me_hostname'], $data['d_me_ns1'], $data['d_me_ns2'], $data['d_me_owned_since'], $attached_to, $this->item_id]);
|
|
}
|
|
|
|
public function updateDomainPricingFromModal()
|
|
{
|
|
$data = $this->data;
|
|
$as_usd = $this->convertToUSD($data['d_me_price'], $data['d_me_currency']);
|
|
$update = $this->dbConnect()->prepare("UPDATE `pricing` SET `price` = ?,`currency` = ?,`term` = ?,`as_usd` = ?,`per_month` = ?, `usd_per_month` = ?, `next_dd` = ? WHERE `server_id`= ? LIMIT 1;");
|
|
return $update->execute([$data['d_me_price'], $data['d_me_currency'], $data['d_me_term'], $as_usd, $this->costAsPerMonth($data['d_me_price'], $data['d_me_term']), $this->costAsPerMonth($as_usd, $data['d_me_term']), $data['d_me_next_dd'], $this->item_id]);
|
|
}
|
|
|
|
public function deleteObjectData()
|
|
{//Delete server data from all relevant tables
|
|
if ($this->type == 'SHARED') {
|
|
$table = 'shared_hosting';
|
|
} elseif ($this->type == 'DOMAIN') {
|
|
$table = 'domains';
|
|
} else {
|
|
$table = 'servers';
|
|
}
|
|
$item_id = $this->item_id;
|
|
$del_server = $this->dbConnect()->prepare("DELETE FROM `$table` WHERE `id` = ? LIMIT 1;");
|
|
$del_server->execute([$item_id]);
|
|
$del_pricing = $this->dbConnect()->prepare("DELETE FROM `pricing` WHERE `server_id` = ? LIMIT 1;");
|
|
$del_pricing->execute([$item_id]);
|
|
if ($this->type == 'SERVER') {
|
|
$del_disk = $this->dbConnect()->prepare("DELETE FROM `disk_speed` WHERE `server_id` = ?;");
|
|
$del_disk->execute([$item_id]);
|
|
$del_speed = $this->dbConnect()->prepare("DELETE FROM `speed_tests` WHERE `server_id` = ?;");
|
|
$del_speed->execute([$item_id]);
|
|
}
|
|
}
|
|
|
|
protected function updateActiveStatus(int $status)
|
|
{
|
|
if ($this->type == 'SHARED') {
|
|
$table = 'shared_hosting';
|
|
} elseif ($this->type == 'DOMAIN') {
|
|
$table = 'domains';
|
|
} else {
|
|
$table = 'servers';
|
|
}
|
|
$update = $this->dbConnect()->prepare("UPDATE `$table` SET `still_have` = ? WHERE `id` = ? LIMIT 1;");
|
|
return $update->execute([$status, $this->item_id]);
|
|
}
|
|
|
|
public function updateYabsData(bool $save_yabs = true)
|
|
{//YABS data handler
|
|
$file_name = 'yabsFromForm.txt';
|
|
$logfile = fopen($file_name, "w") or die("Unable to open file!");
|
|
fwrite($logfile, $this->data['me_yabs']);
|
|
if ($save_yabs) {
|
|
$this->saveYABS($this->data['me_yabs'], "{$this->item_id}_" . date('Y-m-d') . ".txt");
|
|
}
|
|
fclose($logfile);
|
|
$file = @fopen($file_name, 'r');
|
|
if ($file) {
|
|
$array = explode("\n", fread($file, filesize($file_name)));
|
|
}
|
|
if (strpos($array[0], '# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #') !== false || count($array) < 50) {
|
|
$io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[24]));
|
|
$io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[30]));
|
|
(strpos($array[12], 'Enabled') !== false) ? $aes_ni = 1 : $aes_ni = 0;
|
|
(strpos($array[13], 'Enabled') !== false) ? $vm_amd_v = 1 : $vm_amd_v = 0;
|
|
$d4k_as_mbps = $this->diskSpeedAsMbps($io_3[3], $this->floatValue($io_3[2]));
|
|
$d64k_as_mbps = $this->diskSpeedAsMbps($io_3[7], $this->floatValue($io_3[6]));
|
|
$d512k_as_mbps = $this->diskSpeedAsMbps($io_6[3], $this->floatValue($io_6[2]));
|
|
$d1m_as_mbps = $this->diskSpeedAsMbps($io_6[7], $this->floatValue($io_6[6]));
|
|
$disk_test_arr = array($this->item_id, $this->floatValue($io_3[2]), $io_3[3], $this->floatValue($io_3[6]), $io_3[7], $this->floatValue($io_6[2]), $io_6[3], $this->floatValue($io_6[6]), $io_6[7], $d4k_as_mbps, $d64k_as_mbps, $d512k_as_mbps, $d1m_as_mbps);
|
|
$insert = $this->dbConnect()->prepare("INSERT IGNORE INTO `disk_speed` (`server_id`, `4k`, `4k_type`, `64k`, `64k_type`, `512k`, `512k_type`, `1m`, `1m_type`, `4k_as_mbps`, `64k_as_mbps`, `512k_as_mbps`, `1m_as_mbps`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);");
|
|
$insert->execute([$this->item_id, $disk_test_arr[1], $disk_test_arr[2], $disk_test_arr[3], $disk_test_arr[4], $disk_test_arr[5], $disk_test_arr[6], $disk_test_arr[7], $disk_test_arr[8], $disk_test_arr[9], $disk_test_arr[10], $disk_test_arr[11], $disk_test_arr[12]]);
|
|
if ($array[45] == "Geekbench 5 Benchmark Test:\r") {
|
|
//No ipv6
|
|
//Has short ipv4 network speed testing (-r)
|
|
$start_st = 36;
|
|
$end_st = 43;
|
|
} elseif ($array[40] == "Geekbench 5 Benchmark Test:\r") {
|
|
//No ipv6
|
|
//Has full ipv4 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 38;
|
|
} elseif ($array[40] == "iperf3 Network Speed Tests (IPv6):\r") {
|
|
//HAS ipv6
|
|
//Has short ipv4 & ipv6 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 38;
|
|
} elseif ($array[55] == "Geekbench 5 Benchmark Test:\r") {
|
|
//HAS ipv6
|
|
//Has full ipv4 & ipv6 network speed testing
|
|
$start_st = 36;
|
|
$end_st = 43;
|
|
}
|
|
for ($i = $start_st; $i <= $end_st; $i++) {
|
|
if (strpos($array[$i], 'busy') !== false) {
|
|
//Has a "busy" result, No insert
|
|
} else {
|
|
$data = explode(' ', preg_replace('!\s+!', ' ', $array[$i]));
|
|
$send_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['send_type'], $this->yabsSpeedValues($data)['send']);
|
|
$recieve_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['receive_type'], $this->yabsSpeedValues($data)['receive']);
|
|
$insert = $this->dbConnect()->prepare('INSERT IGNORE INTO `speed_tests` (`server_id`, `location`, `send`, `send_type`,`send_as_mbps`, `recieve`,`recieve_type`, `recieve_as_mbps`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
|
|
$insert->execute([$this->item_id, $this->yabsSpeedLoc($data)['location'], $this->yabsSpeedValues($data)['send'], $this->yabsSpeedValues($data)['send_type'], $send_as_mbps, $this->yabsSpeedValues($data)['receive'], $this->yabsSpeedValues($data)['receive_type'], $recieve_as_mbps]);
|
|
}
|
|
}
|
|
return true;
|
|
} else {//Not formatted right
|
|
return false;
|
|
}
|
|
}
|
|
|
|
} |