관리-도구
편집 파일: options.php
<?php $GLOBALS['mysqli'] = $mysqli; $GLOBALS['dbpref'] = $dbpref; $GLOBALS['qfnl_global_vars'] = array(); /*----------------Options starts here-------------------*/ function add_option($name, $value) { $globalvars = $GLOBALS['qfnl_global_vars']; $mysqli = $GLOBALS['mysqli']; $pref = $GLOBALS['dbpref']; $table = $pref . "options"; $name = $mysqli->real_escape_string($name); $value = $mysqli->real_escape_string($value); if (get_option($name) === false) { $qry = $mysqli->query("insert into `" . $table . "` (`option_name`, `option_value`, `createdon`) values ('" . $name . "','" . $value . "','" . date('d-M-Y h:i') . "')"); $globalvars[$name] = $value; $GLOBALS['qfnl_global_vars'] = $globalvars; } else { return false; } } function get_option($name) { $globalvars = $GLOBALS['qfnl_global_vars']; $mysqli = $GLOBALS['mysqli']; $pref = $GLOBALS['dbpref']; $table = $pref . "options"; $name = $mysqli->real_escape_string($name); if (isset($globalvars[$name])) { return $globalvars[$name]; } else { $qry = $mysqli->query("select `option_value` from `" . $table . "` where `option_name`='" . $name . "'"); if ($qry->num_rows < 1) { return false; } else { $data = $qry->fetch_object(); $option_value = $data->option_value; if ($name === 'install_url') { $option_value = manageWWW($option_value); } $globalvars[$name] = $option_value; $GLOBALS['qfnl_global_vars'] = $globalvars; return $option_value; } } } function update_option($name, $value) { $globalvars = $GLOBALS['qfnl_global_vars']; $mysqli = $GLOBALS['mysqli']; $pref = $GLOBALS['dbpref']; $table = $pref . "options"; $name = $mysqli->real_escape_string($name); $value = $mysqli->real_escape_string($value); if (get_option($name) === false) { add_option($name, $value); } else { $mysqli->query("update `" . $table . "` set `option_value`='" . $value . "' where `option_name`='" . $name . "'"); } $globalvars[$name] = $value; $GLOBALS['qfnl_global_vars'] = $globalvars; } function delete_option($name) { $globalvars = $GLOBALS['qfnl_global_vars']; $mysqli = $GLOBALS['mysqli']; $pref = $GLOBALS['dbpref']; $table = $pref . "options"; $mysqli->query("delete from `" . $table . "` where `option_name`='" . $name . "'"); unset($globalvars[$name]); $GLOBALS['qfnl_global_vars'] = $globalvars; } /*--------------------options ends here-----------------*/ /*--------------------add_query_arg function------------*/ function add_query_arg($arg1, $arg2, $arg3 = "") { $create_url = function ($url, $args) { $url_arr = parse_url($url); $params = ""; $all_args = array(); if (isset($url_arr['query'])) { parse_str($url_arr['query'], $temp_all_args); $all_args = $temp_all_args; } foreach ($args as $index => $arg) { $all_args[$index] = $arg; } $new_arr = array(); foreach ($all_args as $index => $arg) { array_push($new_arr, $index . "=" . $arg); } $params = "?"; $params .= implode("&", $new_arr); $new_url = ""; if (isset($url_arr['scheme'])) { $new_url .= $url_arr['scheme'] . "://"; } if (isset($url_arr['host'])) { $new_url .= $url_arr['host']; } if (isset($url_arr['path'])) { $new_url .= $url_arr['path']; } return $new_url . $params; }; if (is_array($arg1)) { $url = $arg2; return $create_url($url, $arg1); } else { $url = $arg3; $arr = array($arg1 => $arg2); return $create_url($url, $arr); } } function showRecordCountSelection() { if (isset($_POST['qfnl_max_records_per_page']) && is_numeric($_POST['qfnl_max_records_per_page'])) { update_option('qfnl_max_records_per_page', $_POST['qfnl_max_records_per_page']); } $options = ""; $range_arr = array(10, 25, 50, 100, 250, 500, get_option('qfnl_max_countable_rows')); $got_selection = false; for ($i = 0; $i < count($range_arr); $i++) { $selected = ""; if ($range_arr[$i] == get_option('qfnl_max_records_per_page')) { $selected = "selected"; $got_selection = true; } elseif (($i == (count($range_arr) - 1)) && (!$got_selection)) { $selected = "selected"; } $selected = ($range_arr[$i] == get_option('qfnl_max_records_per_page')) ? "selected" : ""; $opt_text = (($i == (count($range_arr) - 1))) ? 'All' : $range_arr[$i]; $options .= "<option value='" . $range_arr[$i] . "' " . $selected . ">" . t($opt_text) . "</option>"; } return "<div class='mb-3 cf-course-search'><form action='' method='post'> <div class='input-group input-group-sm'> <div class='input-group-prepend'> <span class='input-group-text'>" . t('Number of items per page') . "</span> </div> <select name='qfnl_max_records_per_page' class='form-control qfnl_max_records_per_page form-control-sm form-select form-select-sm'> " . $options . " </select> </div> <input type='submit' class='qfnl_max_records_per_page_btn' style='display:none;'> </form></div>"; } function arrayIndexToStr($text, $arr) { if (is_array($arr)) { foreach ($arr as $index => $data) { if (is_array($data) || is_object($data)) { continue; } $text = str_replace("{" . $index . "}", $data, $text); } } return $text; } function linkBuilderAccordingCurrentURL($current) { $url_arr = parse_url($current); $query_arr = array(); if (isset($url_arr['query'])) { parse_str($url_arr['query'], $arr); $query_arr = $arr; } $current_get = (isset($_GET)) ? $_GET : array(); foreach ($current_get as $index => $data) { if (!isset($query_arr[$index])) { $query_arr[$index] = $data; } } $query = ""; foreach ($query_arr as $index => $data) { $query .= $index . "=" . $data . "&"; } $query = rtrim($query, "&"); return $url_arr['path'] . "?" . $query; } function createPager($total, $nextpageurl = "", $page_count = 0, $lastid = 0) { ob_start(); echo '<ul class="pagination qfnlpagination" style="cursor:pointer;">'; if ($page_count > 0) { echo '<li class="page-item"><a class="page-link" id="historyback">' . t('Previous') . '</a></li>'; } $gotnextactive = 0; $gotactive = 0; if (is_numeric($total)) { $pagescount = ceil($total / get_option('qfnl_max_records_per_page')); if ($pagescount >= 1) { $dotshow = 0; for ($i = 1; $i <= $pagescount; $i++) { if (!($i == 1 || $i == 2 || $i == $pagescount || $i == $pagescount - 1 || $i == $page_count || $i == $page_count - 1 || $i == $page_count + 1)) { ++$dotshow; if ($dotshow == 1) { echo "<li class='page-item'><a class='page-link'>...</a></li>"; } continue; } $dotshow = 0; $activeli = ""; if ($page_count > 0) { if ($i == $page_count) { $activeli = "active"; ++$gotactive; goto lbl; } if ($gotactive == 1) { $gotnextactive = $i; $gotactive = 0; } } lbl: $nextexecutable_page = $nextpageurl . '=' . $i; $nextexecutable_page = linkBuilderAccordingCurrentURL($nextexecutable_page); echo '<li class="page-item ' . $activeli . '"><a class="page-link" href="' . $nextexecutable_page . '">' . t($i) . '</a></li>'; $lastid = $i + 1; } if ($gotnextactive == 0) { $gotnextactive = 2; } } } if ($gotnextactive > 0) { echo '<li class="page-item"><a class="page-link" href="' . $nextpageurl . '=' . $gotnextactive . '">' . t('Next') . '</a></li>'; } echo '</ul>'; $content = ob_get_contents(); ob_end_clean(); return $content; } function createSearchBoxBydate() { ob_start(); $today = date('d-m-Y'); $select = '<select class="form-control form-control-sm form-select form-select-sm" name="fromdays"><option value=0>' . t('Select Days') . '</option><option value=1>' . t('All Days') . '</option><option value="' . $today . '">' . t('Today') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -7 days")) . '">' . t('Last 7 days') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -15 days")) . '">' . t('Last 15 days') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -30 days")) . '">' . t('Last 30 days') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -60 days")) . '">' . t('Last 60 days') . '</option> <option value="' . date('d-m-Y h:ia', strtotime($today . " -90 days")) . '">' . t('Last 90 days') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -180 days")) . '">' . t('Last 180 days') . '</option><option value="' . date('d-m-Y h:ia', strtotime($today . " -365 days")) . '">' . t('Last 365 days') . '</option></select>'; $hiddeninputs = ""; foreach ($_GET as $index => $data) { if (!in_array($index, array('fromdays', 'fromdate', 'todate'))) { $hiddeninputs .= "<input type='hidden' name='" . $index . "' value='" . $data . "'>"; } } echo '<div class="srchcontainer cf-course-search" style=""><button class="btn dropdown-toggle btn-sm btn-block" style="">' . t('Search By Date') . '</button><div class="datesearchformdata"><div class="mb-3"> <form action="" method="GET" onsubmit="return validateDateField()"> ' . $hiddeninputs . ' <span id="searchspancontainer"> ' . $select . '<label class="text-white">' . t('Search By Date') . '</label> <div class="input-group input-group-sm mb-2"><div class="input-group-prepend"><p class="input-group-text">' . t('From') . ' </p></div><input type="date" name="fromdate" class="form-control form-control-sm" value="' . date('Y-m-d') . '"></div> <div class="input-group input-group-sm mb-2"><div class="input-group-prepend"><p class="input-group-text">' . t('To') . ' </p></div><input type="date" class="form-control form-control-sm" value="' . date('Y-m-d') . '" name="todate"></div> </span> <button type="submit" class="form-control btn theme-button" style="margin-top:5px;" id="srchdatebtn"> ' . t('Search') . '</button> </form> </div></div></div>'; $data = ob_get_contents(); ob_end_clean(); return $data; } function dateBetween($search, $table = null, $date_time_format = false) { //get sql between str for search....[0] for all [1] and $datebetween = ""; $datebetween_all = ""; $search = ($table === null) ? "`" . $search . "`" : "`" . $table . "`." . $search . ""; if (isset($_GET['fromdate'])) { if (strlen($_GET['fromdate']) > 2) { $getfromdate = array_reverse(explode("-", $_GET['fromdate'])); $fromdate = implode('-', $getfromdate); $fromdate = strtotime($fromdate); $gettodate = array_reverse(explode("-", $_GET['todate'])); $todate = implode('-', $gettodate); $todate .= " 11:59pm"; $todate = strtotime($todate); if ($date_time_format) { $fromdate = "'" . date('Y-m-d H:i:s', $fromdate) . "'"; $todate = "'" . date('Y-m-d H:i:s', $todate) . "'"; } $datebetween = " and " . $search . " between " . $fromdate . " and " . $todate . ""; $datebetween_all = " " . $search . " between " . $fromdate . " and " . $todate . ""; } } if (isset($_GET['fromdays'])) { if (strlen($_GET['fromdays']) > 2) { $fromdate = strtotime($_GET['fromdays']); $todate = time(); if ($date_time_format) { $fromdate = "'" . date('Y-m-d H:i:s', $fromdate) . "'"; $todate = "'" . date('Y-m-d H:i:s', $todate) . "'"; } $datebetween = " and " . $search . " between " . $fromdate . " and " . $todate . ""; $datebetween_all = " " . $search . " between " . $fromdate . " and " . $todate . ""; } } return array($datebetween_all, $datebetween); } function timeConvert($format = 's', $time = '', $do = 0) { //time convert between different zone //$do=0 default to another|$do=1 another to default //$format s for unix time if ($do == 0) { $default = "UTC"; $convert = get_option('time_zone'); } if ($do == 1) { $convert = "UTC"; $default = get_option('time_zone'); } date_default_timezone_set($default); if (is_numeric($time)) { $time = date("d-M-Y h:ia", $time); } $date = new DateTime($time, new DateTimeZone($default)); $date->setTimezone(new DateTimeZone($convert)); if ($format == 's') { $time = strtotime($date->format('d-M-Y h:ia')); } else { $time = $date->format($format); } date_default_timezone_set("UTC"); return $time; } function cfLoopCreator($type, $html) { $hasbody = 0; if (strpos($html, "<body>") >= 0) { ++$hasbody; } $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html); $xpath = new DOMXPath($dom); $qry = $xpath->query("//*[@cf-loop='" . $type . "']"); foreach ($qry as $data) { $inner_html = cfLoopInnerHTML($data); $inner_html = "{" . $type . "}" . $inner_html . "{/" . $type . "}"; while ($data->childNodes->length) { $data->removeChild($data->firstChild); } $fragment = $data->ownerDocument->createDocumentFragment(); $fragment->appendXML($inner_html); $data->appendChild($fragment); } $html = $dom->saveHTML(); if ($hasbody < 1) { $start = strpos($html, "<body>") + 6; $end = strpos($html, "</body>") - $start; $html = substr($html, $start, $end); } return $html; } function cfLoopInnerHTML(DOMNode $element) { $innerHTML = ""; $children = $element->childNodes; foreach ($children as $child) { $innerHTML .= $element->ownerDocument->saveHTML($child); } return $innerHTML; } function getProtocol() { //get current protocol if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) { return "https://"; } return "http://"; } function getOS() { //get current visitor operating system $user_agent = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : 'Unknown'; $os_platform = "Unknown OS Platform"; $os_array = array( '/windows nt 10/i' => 'Windows 10', '/windows nt 6.3/i' => 'Windows 8.1', '/windows nt 6.2/i' => 'Windows 8', '/windows nt 6.1/i' => 'Windows 7', '/windows nt 6.0/i' => 'Windows Vista', '/windows nt 5.2/i' => 'Windows Server 2003/XP x64', '/windows nt 5.1/i' => 'Windows XP', '/windows xp/i' => 'Windows XP', '/windows nt 5.0/i' => 'Windows 2000', '/windows me/i' => 'Windows ME', '/win98/i' => 'Windows 98', '/win95/i' => 'Windows 95', '/win16/i' => 'Windows 3.11', '/macintosh|mac os x/i' => 'Mac OS X', '/mac_powerpc/i' => 'Mac OS 9', '/linux/i' => 'Linux', '/ubuntu/i' => 'Ubuntu', '/iphone/i' => 'iPhone', '/ipod/i' => 'iPod', '/ipad/i' => 'iPad', '/android/i' => 'Android', '/blackberry/i' => 'BlackBerry', '/webos/i' => 'Mobile' ); foreach ($os_array as $regex => $value) if (preg_match($regex, $user_agent)) $os_platform = $value; return $os_platform; } function getBrowser() { //get current visitor browser $user_agent = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : 'Unknown'; $browser = "Unknown Browser"; $browser_array = array( '/msie/i' => 'Internet Explorer', '/firefox/i' => 'Firefox', '/safari/i' => 'Safari', '/chrome/i' => 'Chrome', '/edge/i' => 'Edge', '/opera/i' => 'Opera', '/netscape/i' => 'Netscape', '/maxthon/i' => 'Maxthon', '/konqueror/i' => 'Konqueror', '/mobile/i' => 'Mobile Browser' ); foreach ($browser_array as $regex => $value) if (preg_match($regex, $user_agent)) $browser = $value; return $browser; } function getIP() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if (isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if (isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if (isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; } function getLocation($ip = false) { //get current visitor location if ($ip === false) { $ip = getIP(); } $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, "https://pro.ip-api.com/json/" . $ip . "?key=hKTTGTDeZib1VzK"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); curl_close($ch); $data = json_decode($data, true); return $data; } function getDevice() { require_once("mobile_detect.php"); $detect = new Mobile_Detect; // DETECTION ENGINE $data = "DESKTOP"; if ($detect->isMobile()) { $data = "MOBILE"; } elseif ($detect->isTablet()) { $data = "TABLET"; } else { $data = "DESKTOP"; } return $data; } function getTimezone() { $timezone = array( 'Pacific/Midway' => '(GMT-11:00) Midway Island, Samoa', 'America/Adak' => '(GMT-10:00) Hawaii-Aleutian', 'Etc/GMT+10' => '(GMT-10:00) Hawaii', 'Pacific/Marquesas' => '(GMT-09:30) Marquesas Islands', 'Pacific/Gambier' => '(GMT-09:00) Gambier Islands', 'America/Anchorage' => '(GMT-09:00) Alaska', 'America/Ensenada' => '(GMT-08:00) Tijuana, Baja California', 'Etc/GMT+8' => '(GMT-08:00) Pitcairn Islands', 'America/Los_Angeles' => '(GMT-08:00) Pacific Time (US & Canada)', 'America/Denver' => '(GMT-07:00) Mountain Time (US & Canada)', 'America/Chihuahua' => '(GMT-07:00) Chihuahua, La Paz, Mazatlan', 'America/Dawson_Creek' => '(GMT-07:00) Arizona', 'America/Belize' => '(GMT-06:00) Saskatchewan, Central America', 'America/Cancun' => '(GMT-06:00) Guadalajara, Mexico City, Monterrey', 'Chile/EasterIsland' => '(GMT-06:00) Easter Island', 'America/Chicago' => '(GMT-06:00) Central Time (US & Canada)', 'America/New_York' => '(GMT-05:00) Eastern Time (US & Canada)', 'America/Havana' => '(GMT-05:00) Cuba', 'America/Bogota' => '(GMT-05:00) Bogota, Lima, Quito, Rio Branco', 'America/Caracas' => '(GMT-04:30) Caracas', 'America/Santiago' => '(GMT-04:00) Santiago', 'America/La_Paz' => '(GMT-04:00) La Paz', 'Atlantic/Stanley' => '(GMT-04:00) Faukland Islands', 'America/Campo_Grande' => '(GMT-04:00) Brazil', 'America/Goose_Bay' => '(GMT-04:00) Atlantic Time (Goose Bay)', 'America/Glace_Bay' => '(GMT-04:00) Atlantic Time (Canada)', 'America/St_Johns' => '(GMT-03:30) Newfoundland', 'America/Araguaina' => '(GMT-03:00) UTC-3', 'America/Montevideo' => '(GMT-03:00) Montevideo', 'America/Miquelon' => '(GMT-03:00) Miquelon, St. Pierre', 'America/Godthab' => '(GMT-03:00) Greenland', 'America/Argentina/Buenos_Aires' => '(GMT-03:00) Buenos Aires', 'America/Sao_Paulo' => '(GMT-03:00) Brasilia', 'America/Noronha' => '(GMT-02:00) Mid-Atlantic', 'Atlantic/Cape_Verde' => '(GMT-01:00) Cape Verde Is.', 'Atlantic/Azores' => '(GMT-01:00) Azores', 'Europe/Belfast' => '(GMT) Greenwich Mean Time : Belfast', 'Europe/Dublin' => '(GMT) Greenwich Mean Time : Dublin', 'Europe/Lisbon' => '(GMT) Greenwich Mean Time : Lisbon', 'Europe/London' => '(GMT) Greenwich Mean Time : London', 'Africa/Abidjan' => '(GMT) Monrovia, Reykjavik', 'Europe/Amsterdam' => '(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna', 'Europe/Belgrade' => '(GMT+01:00)Belgrade, Bratislava, Budapest, Ljubljana, Prague', 'Europe/Brussels' => '(GMT+01:00) Brussels, Copenhagen, Madrid, Paris', 'Africa/Algiers' => '(GMT+01:00) West Central Africa', 'Africa/Windhoek' => '(GMT+01:00) Windhoek', 'Asia/Beirut' => '(GMT+02:00) Beirut', 'Africa/Cairo' => '(GMT+02:00) Cairo', 'Asia/Gaza' => '(GMT+02:00) Gaza', 'Africa/Blantyre' => '(GMT+02:00) Harare, Pretoria', 'Asia/Jerusalem' => '(GMT+02:00) Jerusalem', 'Europe/Helsinki' => '(GMT+02:00) Helsinki', 'Europe/Minsk' => '(GMT+02:00) Minsk', 'Asia/Damascus' => '(GMT+02:00) Syria', 'Europe/Moscow' => '(GMT+03:00) Moscow, St. Petersburg, Volgograd', 'Africa/Addis_Ababa' => '(GMT+03:00) Nairobi', 'Asia/Tehran' => '(GMT+03:30) Tehran', 'Asia/Dubai' => '(GMT+04:00) Abu Dhabi, Muscat', 'Asia/Yerevan' => '(GMT+04:00) Yerevan', 'Asia/Kabul' => '(GMT+04:30) Kabul', 'Asia/Yekaterinburg' => '(GMT+05:00) Ekaterinburg', 'Asia/Tashkent' => '(GMT+05:00) Tashkent', 'Asia/Kolkata' => '(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi', 'Asia/Katmandu' => '(GMT+05:45) Kathmandu', 'Asia/Dhaka' => '(GMT+06:00) Astana, Dhaka', 'Asia/Novosibirsk' => '(GMT+06:00) Novosibirsk', 'Asia/Rangoon' => '(GMT+06:30) Yangon (Rangoon)', 'Asia/Bangkok' => '(GMT+07:00) Bangkok, Hanoi, Jakarta', 'Asia/Krasnoyarsk' => '(GMT+07:00) Krasnoyarsk', 'Asia/Hong_Kong' => '(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi', 'Asia/Irkutsk' => '(GMT+08:00) Irkutsk, Ulaan Bataar', 'Australia/Perth' => '(GMT+08:00) Perth', 'Australia/Eucla' => '(GMT+08:45) Eucla', 'Asia/Tokyo' => '(GMT+09:00) Osaka, Sapporo, Tokyo', 'Asia/Seoul' => '(GMT+09:00) Seoul', 'Asia/Yakutsk' => '(GMT+09:00) Yakutsk', 'Australia/Adelaide' => '(GMT+09:30) Adelaide', 'Australia/Darwin' => '(GMT+09:30) Darwin', 'Australia/Brisbane' => '(GMT+10:00) Brisbane', 'Australia/Hobart' => '(GMT+10:00) Hobart', 'Asia/Vladivostok' => '(GMT+10:00) Vladivostok', 'Australia/Lord_Howe' => '(GMT+10:30) Lord Howe Island', 'Etc/GMT-11' => '(GMT+11:00) Solomon Is., New Caledonia', 'Asia/Magadan' => '(GMT+11:00) Magadan', 'Pacific/Norfolk' => '(GMT+11:30) Norfolk Island', 'Asia/Anadyr' => '(GMT+12:00) Anadyr, Kamchatka', 'Pacific/Auckland' => '(GMT+12:00) Auckland, Wellington', 'Etc/GMT-12' => '(GMT+12:00) Fiji, Kamchatka, Marshall Is.', 'Pacific/Chatham' => '(GMT+12:45) Chatham Islands', 'Pacific/Tongatapu' => "(GMT+13:00) Nuku'alofa", 'Pacific/Kiritimati' => '(GMT+14:00) Kiritimati', ); return $timezone; } function arranger($type_arr = array(), $get_parameter = "arrange_records_order") { ob_start(); $hiddeninputs = ""; foreach ($_GET as $index => $data) { if ($index == $get_parameter) { continue; } $hiddeninputs .= "<input type='hidden' name='" . $index . "' value='" . $data . "'>"; } echo '<form action="" methoed="get"><div class="mb-3 cf-course-chbtn"><div class="input-group input-group-sm"><div class="input-group-prepend"> <span class="input-group-text">' . t('Arrange By') . ' </span> </div> ' . $hiddeninputs . ' <select name="' . $get_parameter . '" class="form-control form-control-sm form-select form-select-sm" onchange="document.getElementById(\'constarrengerorder\').click()">'; foreach ($type_arr as $index => $data) { $selected_asc = ""; $selected_desc = ""; if (isset($_GET[$get_parameter])) { if ($_GET[$get_parameter] == base64_encode($index . " asc")) { $selected_asc = "selected"; } elseif ($_GET[$get_parameter] == base64_encode($index . " desc")) { $selected_desc = "selected"; } } echo " <option value='" . base64_encode($index . " desc") . "' " . $selected_desc . ">" . t("\${1} Descending", array(ucwords($data))) . "</option> <option value='" . base64_encode($index . " asc") . "' " . $selected_asc . ">" . t("\${1} Ascending", array(ucwords($data))) . "</option> "; } echo ' </select> <button type="submit" id="constarrengerorder" style="display:none;"></button> </div></div></form>'; $content = ob_get_contents(); ob_end_clean(); return $content; } function modifyHtaccess($doo = "create", $dir = '') { $dir = str_replace("\\", "/", $dir); $file = $dir . "/" . ".htaccess"; $data = "#cf-qfnl-rewrite-start\n"; $data .= "RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L]"; $data .= "\n#cf-qfnl-rewrite-end\n"; if ($doo == "create") { if (is_file($file) && !get_option('backup_htaccess') && filesize($file) > 0) { $fr = fopen($file, 'r'); add_option('backup_htaccess', fread($fr, filesize($file))); fclose($fr); } $ht_data = $data; if (file_exists($file)) { $fp = fopen($file, 'r'); $current_ht_data = fread($fp, filesize($file)); if (strpos($current_ht_data, $data) === false) { $ht_data .= "\n" . $current_ht_data; } else { $ht_data = $current_ht_data; } fclose($fp); } $fp = fopen($file, "w+"); fwrite($fp, $ht_data); fclose($fp); } elseif (is_file($file) && $doo == "delete" && filesize($file) > 0) { $fpp = fopen($file, "rb"); $file_data = fread($fpp, filesize($file)); fclose($fpp); $fpw = fopen($file, "w"); $file_data = str_replace($data, "", $file_data); fwrite($fpw, $file_data); fclose($fpw); } } function cf_enc($string, $do = "encrypt") { $token = get_option('site_token'); $token .= "coursefunnels can do it"; $method = "AES-256-CBC"; $key = hash("sha256", $token); $iv = substr(hash('sha256', '--' . $token), 0, 16); if ($do == "encrypt") { $data = base64_encode(openssl_encrypt($string, $method, $key, 0, $iv)); } elseif ($do == "decrypt") { $data = openssl_decrypt(base64_decode($string), $method, $key, 0, $iv); } else { $data = $string; } return $data; } function getBsSixtyFourLogos($type = "logo") { if ($type == "logo") { return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAoCAYAAAC8cqlMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk0MjMyNzNBNjUxRTExRUI4RDNFRjBCRkU3MEQzN0VBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk0MjMyNzNCNjUxRTExRUI4RDNFRjBCRkU3MEQzN0VBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTQyMzI3Mzg2NTFFMTFFQjhEM0VGMEJGRTcwRDM3RUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTQyMzI3Mzk2NTFFMTFFQjhEM0VGMEJGRTcwRDM3RUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6bIlF2AAAIv0lEQVR42txZe3QU1R3+zezO7uwj+0hINkBekBaLHCkIEpEGCj4BS32gpSj0CKXFKkVPW19/KD1tfaCtckTQ0mqraFvUglieB6kCBUEeEUhMgRBsCInktXludmfm3n43GXtCmE2ySagc7jnfmc3MZOZ+9/5+3++7dyTOOV0KzR7vQutLQ/v6bA9wJ7AIYMBLwLtAQ18eqt530vK8fAEGZxTwAlAKvAqMBsaYv8W5lcA1/f1SuR+fI0Z/A3AIWAykWtyXDCwE/gXsAH4MBC8GIl8HngTEfP8NmJbA/+YDLwOngD8CE78KIjcDa4BjwKNAdh/64APmAR8Be4D7gbQLSSQTWGKO4PvAHVY3ScTxUE425Lci6YCBcz1uVwMvmjP8Z+DaPquWXTJkxuUcWWI32YjPlsiYQBJrFyB0EIgBzfgbKsQbcE0cw8RtYSJbLY7VxB01REaDzdY0mIzAnFbDfznuoXZ0q3hzTRwAVpsRcCbeP0hx68grfgUdzSeuXElMwUA7C1u541gLOtfAXHV1zEthw0P1zN2GMPMQzrehkbcf6wxf2/xMVI/SwsAGSnaWTAehH8b05FsMc/YSaDFBCPI7PyEis5c8Sy65lWoNPzUylZoEuIrfriB+D2jkaqrGXGkgOgCjD4WyiWMKRjsFTw1gpgSgUrZKYs7fDVKPvznft4UW+DZTpvrZFcS898T01LsQeGmJEAIRKSEi0oNFa5FCyAvmJwlsyEjCUcURF4222Lfjtw3hJpmja9UhyQylsBE8SHrKkz5H2btzk7bRosD7NMx12IPwm21ooYUxsl8ptdXNLlsDiPgTIhJ46IN+9S7/I8R8H5GW9qxDqdxwd9J2ute/kca694tbbmB6+j1RrtwJQvFEqBZEUhIlUoXDgN52XMwTcuqExpxREBjukiOyUDHZJFTPPAVcT3+E5Pott3p30OLAeprk3YVLjuyINnCeJOmzcOOwTo8tB5GMhFQLrbnnRDg6Lre0MOdhg3n3E3N/AqE44LBXFWY7TpPO7Z5yLT0vYvhhVfgokiNjZLl5lNdRurmVK8fXNkxburZpyh+mevbQMwNWfT7CWfJE1AgGMYudidQnLL9oNfEKnQgTjG1lE/McJMOzi7iKjkcL3Pbq6hGuIzTWeZzynCdotPMkZSlnSeNKc1EsY/un0SHbD0Rz6aiWRSe0dFeDnppPzHULSdptIDhsU+1dbx3XQgXHcubJqhSdG+UOqz4lTKTC6qRNMpY1G+43osx/JKSUx0a6CuibzlM0xlGCjpfSZZgBstUMQ10ZR8wzHrMDK2KEJnnLCiclfXgQofMx6cG9JXp62dFY1tYjAEhSYSwrcJipviFKJXEuTYd0WCX16d4QOWUZb4Z7e5KkHXgltJRu9u6ypdjqc8jWOALzNA6zg457Rke1jOB5mce8wnZMFjnikDTKdZSezFULC74r6fsgzzt1I2VPUTQ3nKVUQAuVWTpmw0IFT/SGSLHVyagRuDXPu3v9D1JX20jzjmNG8o2aEZjE2+17oIcigElyDEVxFIue2+AcSJGjDSPd+wswEIcjRtI0STKs/r2oN0QOWp1022uu3918FW2qm8amBjfuM/TUPaJzHUZPBHaSScpvCsYMQFRk1eqZwo0ZCCtiqnDAE+OQEG1fb0zjAVO5zmlOKTaYSXzs9yoe5dvCUwwFeeGSWxDXto5WQiRliTkYW01HO9R0yiW9VPQy00wmTAT6TzvPDw2Z/PaqnzXCa13/nxX0zNmfYF6ryIXYbicjdSUeTwNfA+YAH8dzA3HaB32x8e9Yxjm3zwoqZ9Nkey098sXPaToIVeohcqkn2qw7Nx8rKEFGSbU1AmFSQVgFYVUpX606ysY7lTOTnUrFW6oU6zij8dqaLp1DF5W9LSUA2HJSLG55QyY2V8PKoymWQ0GlnFaFfku3+/8hqrNp9wEtlc4aQaqDQxaOuRqWrZoBuo9KtQzKBLFFgfdyHcQXGly5I07tqv5y6Rxv88HezSi0AK+bidq5zUGYPQ3FKQqi+NVpaTTz9HO0oGU0PRB8h0pjWbSlZQztaf0GlevJcM5O4ZzBT21/LRNjIz8M3/VhPXPtfSr0/C9YLDOPWxP5fa8XVh3ab+IQEe09sW5nCIsgwibC62lV3Uz6U8O1qOaeNsNMchPQimBjQijIbo8Iv5WL3HiNEc9vIil9KEIUN03k7et4q/ZCfyx1S+Plipm4L34pAiryw4fKLJLDLddTwHEKwlBDfrmZkuQIrmsYOfYYiBTbBAkttPwy96EvFvjXE9cGvBznHWIbqaq/1uz3dnHtfnNJ2qY/IsHdSHCxXuHnKti3TDkWM2zXxDXmee6JwDqhejOizDXcsn4SPdifmw/VZofjNbFRcGOca6IoLjelfHT7Sxk1ael/v9zzyeff920ipg9c2b4fYDmADf1JhMwtz51dXN8MfLvTOaFC/wbuO6dAcZHsrkVLg3+FwayDZfcMsnjerp4keW/3tW7qJl7/aZIJAetM7Q+do/cIuZZY1vKp/k1npvs3DtK1zCUWliRsvqvvm9hdyLHoaGE3ZFrMGtRp1BiF9eSwolQvfjUN0cbtb2sMLvf8sJpsZY/6e6dRONAJ3WxOua0WYzGEFNdTZ6xMXcHS1eKfRrWB11iQuA4o+H9tme4Gxicyahwdbo4NWXZ7YN3O+cE3h+qxwctgPjveogFTuvNUF2ITey9wRU9GT0Z9qY9m7chWix/4SzrUl3u2aajyHQzjZ8BIMyy/kt34UlNSV8UnYcC+hMolOTJl0+DHSLHXvR3RQkM6JPhrJonii+H7yI+A73RewbWR0JOrIbVXbc14yBjuPvR4NJY9UxJ7x0Sfmrv6Yidev1g+9IgG20tYu9PDYpNAKFSzkRQhw3f164Mer7jOt+1XsWjOL+Gvis26Msr8MNQv7UJ8elsK5Ea5YwHjjrxVA39dMid5zQQtmpVvkHw38kJYkRX9/VLpUvmqK9Ml0v4rwABlGn3FzsyPpQAAAABJRU5ErkJggg=="; } elseif ($type == "logo-text") { return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbIAAACMCAYAAAAZdCx1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADJmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTgxN0FCN0U2OUQ4MTFFQkEyMUFCQjcxNkQ0OUNBNUMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTgxN0FCN0Y2OUQ4MTFFQkEyMUFCQjcxNkQ0OUNBNUMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFODE3QUI3QzY5RDgxMUVCQTIxQUJCNzE2RDQ5Q0E1QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFODE3QUI3RDY5RDgxMUVCQTIxQUJCNzE2RDQ5Q0E1QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRG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"; } } function cf_rmdir($dir) { if (cf_dir_exists($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (!is_file($dir . "/" . $object)) { cf_rmdir($dir . "/" . $object); } else { unlink($dir . "/" . $object); } } } reset($objects); rmdir($dir); } } function register_tiny_editor($selector) { $script = ""; if (!isset($GLOBALS['tiny_asset_loaded'])) { $ins_url = get_option('install_url'); $script .= '<script type="text/javascript" src="' . $ins_url . '/assets/js/jscolor.js"></script> <script type="text/javascript" src="' . $ins_url . '/assets/js/tinymce/jquery.tinymce.min.js"></script> <script type="text/javascript" src="' . $ins_url . '/assets/js/tinymce/tinymce.min.js"></script> <script type="text/javascript" src="' . $ins_url . '/assets/js/load_tiny.js"></script> '; $GLOBALS['tiny_asset_loaded'] = 1; } if (is_array($selector)) { foreach ($selector as $sel) { $script .= "<script>cfLoadTinyMceEditor(`" . $sel . "`);</script>"; } } else { $script .= "<script>cfLoadTinyMceEditor(`" . $selector . "`);</script>"; } echo $script; } if (!function_exists('build_from_parsed_url')) { function build_from_parsed_url(array $parts) { $scheme = isset($parts['scheme']) ? ($parts['scheme'] . '://') : ''; $host = $parts['host'] ?? ''; $port = isset($parts['port']) ? (':' . $parts['port']) : ''; $user = $parts['user'] ?? ''; $pass = isset($parts['pass']) ? (':' . $parts['pass']) : ''; $pass = ($user || $pass) ? ($pass . '@') : ''; $path = $parts['path'] ?? ''; $query = empty($parts['query']) ? '' : ('?' . $parts['query']); $fragment = empty($parts['fragment']) ? '' : ('#' . $parts['fragment']); return implode('', [$scheme, $user, $pass, $host, $port, $path, $query, $fragment]); } } function manageWWW($saved) { $res = $saved; $current = $_SERVER['HTTP_HOST']; $parsed_saved = parse_url($saved); if (isset($parsed_saved['host'])) { if (strtolower($current) !== strtolower($parsed_saved['host'])) { $current_domain = strtolower(preg_replace("/^(www\.)/", "", $current)); $saved_domain = strtolower(preg_replace("/^(www\.)/", "", $parsed_saved['host'])); if ($current_domain === $saved_domain) { $parsed_saved['host'] = $current; $res = build_from_parsed_url($parsed_saved); } } } return $res; } function getTotalCount($table) { $mysqli = $GLOBALS['mysqli']; $sql = $mysqli->query("SELECT COUNT(*) as `total` FROM `" . $table . "`"); $run = $sql->fetch_object(); return $run->total; } function checkColumn($table,$column) { $mysqli = $GLOBALS['mysqli']; $pref = $GLOBALS['dbpref']; $table = $pref . $table; $sql = "SHOW COLUMNS FROM ".$table." LIKE '".$column."'"; $result = $mysqli->query($sql); if ($result->num_rows > 0) { return true; }else{ return false; } }