<?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 = ''; } 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) { $this->tagOpen('div', 'table-responsive'); $this->outputString("<table class='table table-striped table-bordered table-sm' id='orderTable'>"); $this->tagOpen('thead'); $this->tagOpen('tr'); foreach ($headers as $th) { $this->outputString("<th>$th</th>"); } $this->outputString('</tr></thead><tbody>'); } 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 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 if ($type == "GB/s") { return $this->GBpstoMBps($value); } 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->serverCards(); $this->sharedHostingCards(); $this->domainCards(); $this->tagClose('div'); $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" 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` FROM `servers` WHERE `id` = ? LIMIT 1;"); $select->execute([$id]); $row = $select->fetch(); if ($row['has_yabs'] == 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,virt,has_yabs,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,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); } 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,virt,has_yabs,ns1,ns2, 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 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 vpsCard(string $id) { $select = $this->dbConnect()->prepare(" SELECT servers.id,servers.hostname,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'); $this->outputString($this->osIntToIcon($data['os'])); $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 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 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" 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-8'); $this->outputString('<label for="me_delete">Delete server data</label>'); $this->tagClose('div'); $this->colOpen('col-4'); $this->outputString('<label class="switch"><input type="checkbox" name="me_delete" id="me_delete"><span class="slider round"></span></label>'); $this->tagClose('div', 2); $this->rowColOpen('form-row', 'col-8'); $this->outputString('<label for="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="me_non_active" id="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('me_hostname', '', 'form-control', true); $this->tagClose('div'); $this->hiddenInput('me_server_id'); $this->hiddenInput('action', 'update'); $this->hiddenInput('type', 'server_modal_edit'); $this->tagClose('div', 2); $this->rowColOpen('form-row', 'col-md-6'); $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'); $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'); $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'); $this->tagOpen('div', 'input-group'); $this->inputPrepend('Term'); $this->selectElement('me_term'); $this->termSelectOptions(); $this->tagClose('select'); $this->tagClose('div', 3); $this->rowColOpen('form-row', 'col-6'); $this->tagOpen('div', 'input-group'); $this->inputPrepend('Currency'); $this->selectElement('me_currency'); $this->CurrencySelectOptions(); $this->tagClose('select'); $this->tagClose('div', 2); $this->colOpen('col-6'); $this->tagOpen('div', 'input-group'); $this->inputPrepend('OS'); $this->selectElement('me_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('Virt'); $this->selectElement('me_virt'); $this->virtSelectOptions(); $this->tagClose('select'); $this->tagClose('div', 2); $this->colOpen('col-12 col-md-6'); $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'); $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', 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="me_next_dd" name="me_next_dd">'); $this->tagClose('div', 3); $this->rowColOpen('form-row', 'col-12 col-md-6'); $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'); $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'); $this->tagOpen('div', 'input-group'); $this->inputPrepend('Tags'); $this->tagsInput('me_tags', 'form-control'); $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); } 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 server 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); } 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 server 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->termSelectOptions(); $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->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->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-6'); $this->tagOpen('div', 'input-group'); $this->inputPrepend('IPv4'); $this->textInput('ipv4', '', 'form-control', true, 4, 124); $this->tagClose('div', 2); $this->colOpen('col-12 col-md-6'); $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', '', 'form-control', false, 1, 99999, 'any'); $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`, p.price, p.currency, p.term FROM `servers` INNER JOIN pricing p on servers.id = p.server_id WHERE `hostname` LIKE ? OR `ipv4` 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['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></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 $db->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 $db->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; } if (is_null($data['ipv6']) || empty($data['ipv6'])) { $ipv6 = '-'; } else { $ipv6 = $data['ipv6']; } ($data['has_yabs'] == 1) ? $has_yabs = true : $has_yabs = 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'); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'IPv4'); $this->tagClose('div'); $this->colOpen('col-8'); $this->outputString('<code><p class="m-value">' . $data['ipv4'] . '</p></code>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'IPv6'); $this->tagClose('div'); $this->colOpen('col-8'); $this->outputString('<code><p class="m-value">' . $ipv6 . '</p></code>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'NS1'); $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', 'SSH Port'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', '<code>' . $data['ssh_port'] . '</code>'); $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">' . $data['bandwidth_type'] . '</span>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Disk'); $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', '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', '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', 'OS'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', $this->osIntToString($data['os'])); $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($data['server_id'], $data['term'], $data['next_dd']) . '<span class="data-type">days</span>'); $this->tagClose('div', 2); $this->rowColOpen('row m-section-row', 'col-12 text-center'); $this->HTMLphrase('p', 'm-section-text', 'CPU'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Amount'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', $data['cpu']); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Frequency'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', $data['cpu_freq']); $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', 2); $this->rowColOpen('row m-section-row', 'col-12 text-center'); $this->outputString('<p class="m-section-text">Ram</p>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Ram'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', '' . $data['ram'] . '<span class="data-type">' . $data['ram_type'] . '</span>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Swap'); $this->tagClose('div'); $this->colOpen('col-8'); $this->HTMLphrase('p', 'm-value', '' . $data['swap'] . '<span class="data-type">' . $data['swap_type'] . '</span>'); $this->tagClose('div', 2); 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'); $this->HTMLphrase('p', 'm-desc', 'single: '); $this->HTMLphrase('p', 'm-value', $data['gb5_single']); $this->tagClose('div'); $this->colOpen('col-4'); $this->HTMLphrase('p', 'm-desc', 'multi: '); $this->HTMLphrase('p', 'm-value', $data['gb5_multi']); $this->tagClose('div'); $this->colOpen('col-4'); $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 test'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-6'); $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'); $this->HTMLphrase('p', 'm-desc', '64k: '); $this->HTMLphrase('p', 'm-value', '' . $data['64k'] . '<span class="data-type">' . $data['64k_type'] . '</span>'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-6'); $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'); $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'); $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', 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'); $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-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Dedicated: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['is_dedicated'])); $this->tagClose('div'); $this->colOpen('col-4'); $this->HTMLphrase('p', 'm-desc', 'Dedi CPU: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['is_cpu_dedicated'])); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'Is offer: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['was_special'])); $this->tagClose('div'); $this->colOpen('col-4'); $this->HTMLphrase('p', 'm-desc', 'AES-NI: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['aes_ni'])); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-4'); $this->HTMLphrase('p', 'm-desc', 'VM-x/AMD-V: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $this->intToYesNo($data['amd_v'])); $this->tagClose('div'); $this->colOpen('col-4'); $this->HTMLphrase('p', 'm-desc', 'Virt: '); $this->tagClose('div'); $this->colOpen('col-2'); $this->HTMLphrase('p', 'm-value', $data['virt']); $this->tagClose('div', 2); if ($has_yabs) { $this->rowColOpen('row m-section-row', 'col-12 text-center'); $this->HTMLphrase('p', 'm-section-text', 'Network test'); $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 text-center'); $this->HTMLphrase('p', 'm-section-text', 'Tags'); $this->tagClose('div', 2); $this->rowColOpen('row m-row', 'col-12'); $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', 3); if (file_exists("yabs/{$data['server_id']}.txt")) { $this->rowColOpen('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-second" id="closeViewMoreModal" role="button" data-dismiss="modal">Close</a>'); $this->tagClose('div',2); } else { $this->rowColOpen('row text-center', 'col-12'); $this->outputString('<a class="btn btn-second" 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', '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')); $base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram_mb`, `swap_mb`, `disk_gb` 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>{$row['cpu_freq']}</td>"); $this->outputString("<td>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['swap_mb'], 0) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</span></td>"); $this->tagClose('tr'); } } elseif (in_array($order_type, array(9, 10))) { $this->tableHeader(array('Hostname', 'Owned since', 'CPU', 'Freq', 'Ram', 'Disk')); $base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram_mb`, `disk_gb`, 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>{$row['cpu_freq']}</td>"); $this->outputString("<td>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</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')); $base_query = "SELECT `id`, `hostname`, `cpu`, `cpu_freq`, `ram_mb`, `disk_gb`, `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>{$row['cpu_freq']}</td>"); $this->outputString("<td>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</span></td>"); $this->tagClose('tr'); } } elseif (in_array($order_type, array(15, 16, 17, 18))) { $this->tableHeader(array('Hostname', 'Price', 'Term', 'P/M', 'CPU', 'Ram', 'Disk')); $base_query = "SELECT `id`, `hostname`, `cpu`, `ram_mb`, `disk_gb`, `price`, `currency`, `term`, `per_month` 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['cpu']}</td>"); $this->outputString("<td>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</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', 'Ram', 'Disk')); $base_query = "SELECT `id`, `hostname`, `cpu`, `ram_mb`, `disk_gb`, `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>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</span></td>"); $this->tagClose('tr'); } } elseif (in_array($order_type, array(27, 28, 29, 30))) { $this->tableHeader(array('Hostname', 'Send', 'Receive', 'Location', 'CPU', 'Ram', 'Disk')); $base_query = "SELECT servers.id, `hostname`, `cpu`, `ram_mb`, `disk_gb`, `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>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</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_mb`, `disk_gb`, `bandwidth` 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>{$row['bandwidth']}</td>"); $this->outputString("<td>{$row['cpu']}</td>"); $this->outputString("<td>{$row['cpu_freq']}</td>"); $this->outputString("<td>" . number_format($row['ram_mb'], 2) . "<span class='table-val-type'>MB</span></td>"); $this->outputString("<td>" . number_format($row['disk_gb'], 0) . "<span class='table-val-type'>GB</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(); $oldest_d_row = $oldest_d->fetchAll(PDO::FETCH_ASSOC)[0]; $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-second" role="button" data-dismiss="modal">Close YABs</a>'); $this->tagClose('div',2); } } 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['ipv6'])) ? $ipv6 = null : $ipv6 = $data['ipv6']; $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) VALUES (?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?)'); $insert->execute([$item_id, $data['hostname'], $location_id, $provider_id, $data['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']]); $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['ipv6'])) ? $ipv6 = null : $ipv6 = $data['ipv6']; ($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) VALUES (?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); $insert->execute([$item_id, $data['hostname'], $location_id, $provider_id, $data['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']]); $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(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['yabs']); if ($save_yabs) { $this->saveYABS($this->data['yabs'], "{$this->item_id}.txt"); } fclose($logfile); $file = @fopen($file_name, 'r'); if ($file) { $array = explode("\n", fread($file, filesize($file_name))); //echo json_encode($array); //exit; } if (strpos($array[0], '# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #') !== false || count($array) < 50) { $version_array = explode(' ', preg_replace('!\s+!', ' ', $this->trimRemoveR($array[2]))); $version = $version_array[1];//YABs version $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 ($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[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; } $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);// 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]); } } ($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]); return true; } else { //Not formatted right return false; } } 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` = ? 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'], $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); } $update = $this->dbConnect()->prepare("UPDATE `domains` SET `domain` = ?,`ns1` = ?,`ns2` = ?,`owned_since` = ? WHERE `id`= ? LIMIT 1;"); return $update->execute([$data['d_me_hostname'], $data['d_me_ns1'], $data['d_me_ns2'], $data['d_me_owned_since'], $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]); } }