filename = $filename; if ($nolog) { return null; } } public function add($str) { $this->loglistarray[] = $str; } public function done() { file_put_contents($this->filename, implode("\r\n\r\n", $this->loglistarray)); } function __destruct() { file_put_contents($this->filename, implode("\r\n\r\n", $this->loglistarray)); } }; return $main; } function createThumbnail($sourcePath, $destinationPath = null, $thumbWidth = 64, $thumbHeight = 64) { list($width, $height, $type) = getimagesize($sourcePath); $srcImage = null; switch ($type) { case IMAGETYPE_JPEG: $srcImage = imagecreatefromjpeg($sourcePath); break; case IMAGETYPE_PNG: $srcImage = imagecreatefrompng($sourcePath); break; case IMAGETYPE_GIF: $srcImage = imagecreatefromgif($sourcePath); break; default: throw new Exception('Unsupported image type'); } $thumbImage = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresampled($thumbImage, $srcImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $width, $height); if (!$destinationPath) { $basepath = dirname($sourcePath); $basenameWithoutExtension = pathinfo($sourcePath, PATHINFO_FILENAME); $extension = pathinfo($sourcePath, PATHINFO_EXTENSION) ?? ''; if ($extension) { $extension = '.' + $extension; } $newfilename = $basenameWithoutExtension + '_thumbnail' + $extension; $destinationPath = $basepath + '/' + $newfilename; } switch ($type) { case IMAGETYPE_JPEG: imagejpeg($thumbImage, $destinationPath); break; case IMAGETYPE_PNG: imagepng($thumbImage, $destinationPath); break; case IMAGETYPE_GIF: imagegif($thumbImage, $destinationPath); break; } imagedestroy($srcImage); imagedestroy($thumbImage); } function trim_ending_hyphen($string) { if (substr($string, -1) === "-") { return substr($string, 0, -1); // Remove the last character (hyphen) } else { return $string; // Return the original string if it doesn't end with a hyphen } } function convertStringToSQLDateTime($stringDate) { $timestamp = strtotime($stringDate); $sqlDatetime = date("Y-m-d H:i:s", $timestamp); return $sqlDatetime; } function comparestringnumberstoarray($string, $comparearray, $inorder = false) { $mainarray = explode('-', $string); $mainarray = array_values($mainarray); $lastvaluemainarray = $mainarray[count($mainarray) - 1]; if ($lastvaluemainarray === '') { array_pop($mainarray); } if (in_array('', $mainarray)) { return null; } if (!$inorder) { sort($mainarray); sort($comparearray); } return $mainarray == $comparearray; } function refreshpage() { return ''; } function refreshpagenopost() { return ''; } function refresh() { header('Location: .'); } function jschangetopurl($url) { return ''; } function jschangetopurlnoscripttag($url) { return "top.location = '" . $url . "';"; } function jsopenmodal($modalname) { return ''; } function jsonheader() { header('Content-Type: application/json; charset=utf-8'); } function simpleredirect($requesturl, $functiontoexecute, $reqtype = '', $fallbackfunction = NULL, $conditiontrue = NULL, $caching = false) { // sample url = http://website.com/?u=name/{john} // sample function syntax simpleredirect('name/{}') if (file_exists('sim.txt')) { unlink('sim.txt'); } $addlog = function ($str) { @file_put_contents('sim.txt', $str . "\r\n", FILE_APPEND); }; $urlcheck = geturlparameters($requesturl); $addlog('chekingurl=' . getappendedurl() . ' requrl=' . $requesturl); if ($urlcheck === FALSE) { $addlog('urlcheck=false'); return false; } $addlog('chekingurl success'); if ($reqtype == '') { $reqtype = 'get'; $addlog('reqtype unknown changing to get'); } else { $reqtype = strtolower($reqtype); $addlog('reqtype = ' . $reqtype); } if ($reqtype !== 'post' and $reqtype !== 'get') { $reqtype = 'get'; $addlog('reqtype not post or get changing to get'); } if (strtolower($reqtype) !== strtolower($_SERVER['REQUEST_METHOD'])) { $addlog('reqtype not the same reqtype = ' . $reqtype . ' requestmethod = ' . $_SERVER['REQUEST_METHOD']); return FALSE; } $GLOBALS['urlparameters'] = $urlcheck; if ($conditiontrue !== NULL and !$conditiontrue) { $addlog('condition not true exiting'); if ($fallbackfunction) { $fallbackfunction(); } return FALSE; } if (!$caching) { $addlog('removing cache'); removecaching(); } elseif ($caching) { $addlog('adding cache'); if ($caching === true) { SetCache1Year(); } elseif (is_numeric($caching)) { SetCacheTimeMinutes($caching); } else { SetCache1Year(); } } $addlog('executing function'); $functiontoexecute($urlcheck); } function simpleredirectfile($requesturl, $file, $reqtype = '', $fallbackfunction = NULL, $conditiontrue = NULL, $caching = FALSE) { $filefunct = function () use ($file) { readfile($file); }; simpleredirect($requesturl, $filefunct, $reqtype, $fallbackfunction, $conditiontrue, $caching); } function checkifstringisenclosedinbrackets($string) { // checks if string is enclosed in brackers ex {name} //returns string inside and returns false if there is no bracket if (substr($string, 0, 1) === "{" && substr($string, -1) === "}") { $string = substr($string, 1, -1); } else { $string = false; } return $string; } function geturlparameters($urlparam) { //urlparam = 'users/' if ($urlparam === '') { $urlparam = []; } else { $urlparam = explode('/', $urlparam); } $url = geturlarray(); if (count($url) !== count($urlparam)) { return false; } $params = []; foreach ($urlparam as $key => $value) { if ($urlparam[$key] !== $url[$key]) { $enclosed = checkifstringisenclosedinbrackets($value); if ($enclosed) { $params[$enclosed] = $url[$key]; } else { return false; } } } return $params; } function getLastDigitSegments($string, $n) { $parts = explode('-', $string); $lastSegments = array_slice($parts, -$n); return implode('-', $lastSegments); } function geturlarray() { $url = getappendedurl(); if (substr($url, 0, 1) === "/") { $uri = substr($url, 1); } else { $uri = $url; } $uri = array_values(array_filter(explode('/', $uri))); unset($uri[0]); $uri = array_values($uri); if (empty($uri)) { return []; } if (substr($uri[0], 0, 1) === "?") { $uri[0] = substr($uri[0], 1); } return $uri; } function getappendedurl() { //get appended url sample url https:/google.com/aslkdfj/asdf/asdf //result aslkdfj/asdf/asdf return $_SERVER['REQUEST_URI']; } function removecaching() { if (headers_sent()) { return false; } header_remove('ETag'); header_remove('Pragma'); header_remove('Cache-Control'); header_remove('Last-Modified'); header_remove('Expires'); // set header header('Expires: Thu, 1 Jan 1970 00:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); } function is_valid_var($var) { if (!isset($var)) { return null; } if (empty($var) || $var === false || is_null($var)) { return null; } return $var; } function ConvertDatetoMDYYYY($datestring) { //from YYYY-MM-DD to M/D/YYYY if (!$datestring) { return false; } $timestamp = strtotime($datestring); $formattedDate = date('n/j/Y', $timestamp); return $formattedDate; } function PNGtoJPGNN($filelocation, $newfilelocation) { $new_pic = imagecreatefrompng($filelocation); $w = imagesx($new_pic); $h = imagesy($new_pic); $white = imagecreatetruecolor($w, $h); $bg = imagecolorallocate($white, 255, 255, 255); imagefill($white, 0, 0, $bg); imagecopy($white, $new_pic, 0, 0, 0, 0, $w, $h); $success = imagejpeg($white, $newfilelocation); imagedestroy($new_pic); imagedestroy($white); return $success; } function PNGtoJPG($pngFilePath, $jpgFilePath, $maxWidth = false, $maxHeight = false, $quality = 100) { $pngImage = imagecreatefrompng($pngFilePath); if (!$pngImage) { return false; } $originalWidth = imagesx($pngImage); $originalHeight = imagesy($pngImage); if (!$maxWidth && !$maxHeight) { $maxWidth = $originalWidth; $maxHeight = $originalHeight; } $aspectRatio = $originalWidth / $originalHeight; if ($maxWidth / $maxHeight > $aspectRatio) { $newWidth = $maxHeight * $aspectRatio; $newHeight = $maxHeight; } else { $newWidth = $maxWidth; $newHeight = $maxWidth / $aspectRatio; } $newWidth = ceil($newWidth); $newHeight = ceil(num: $newHeight); $jpgImage = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($jpgImage, $pngImage, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight); $success = imagejpeg($jpgImage, $jpgFilePath, $quality); imagedestroy($pngImage); imagedestroy($jpgImage); return $success; } function PNGtoWebP($pngFilePath, $webpFilePath, $maxWidth = false, $maxHeight = false, $quality = 100) { $pngImage = imagecreatefrompng($pngFilePath); if (!$pngImage) { return false; } $originalWidth = imagesx($pngImage); $originalHeight = imagesy($pngImage); if (!$maxWidth && !$maxHeight) { $maxWidth = $originalWidth; $maxHeight = $originalHeight; } $aspectRatio = $originalWidth / $originalHeight; if ($maxWidth / $maxHeight > $aspectRatio) { $newWidth = $maxHeight * $aspectRatio; $newHeight = $maxHeight; } else { $newWidth = $maxWidth; $newHeight = $maxWidth / $aspectRatio; } $newWidth = ceil($newWidth); $newHeight = ceil(num: $newHeight); $webpImage = imagecreatetruecolor($newWidth, $newHeight); imagealphablending($webpImage, false); imagesavealpha($webpImage, true); $transparent = imagecolorallocatealpha($webpImage, 255, 255, 255, 127); imagefilledrectangle($webpImage, 0, 0, $newWidth, $newHeight, $transparent); imagecopyresampled($webpImage, $pngImage, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight); $success = imagewebp($webpImage, $webpFilePath, $quality); imagedestroy($pngImage); imagedestroy($webpImage); return $success; } function BatchConvertPNG($oldfolder, $newfolder, $newtype = 'webp', $maxWidth = false, $maxHeight = false, $quality = 100) { //filename from old folder to new folder is copied exactly even the extensions are the same. if (!$newtype) { $newtype = 'webp'; } $oldfolder = AddSlashtoStrifNolastSlash($oldfolder); $newfolder = AddSlashtoStrifNolastSlash($newfolder); $processIMG = function ($oldfilename) use ($newfolder, $newtype, $maxWidth, $maxHeight, $quality) { if (!file_exists($oldfilename)) { echo $oldfilename . '
'; return false; } $mimetype = mime_content_type($oldfilename); if (!str_contains($mimetype, 'png')) { return false; } $basefilename = basename($oldfilename); $newjpglocation = $newfolder . $basefilename; if (strtolower($newtype) === 'webp') { return PNGtoWebP($oldfilename, $newjpglocation, $maxWidth, $maxHeight, $quality); } elseif (strtolower($newtype) === 'jpg' || strtolower($newtype) === 'jpeg') { return PNGtoJPG($oldfilename, $newjpglocation, $maxWidth, $maxHeight, $quality); } else { return false; } }; $dir = scandir($oldfolder); foreach ($dir as $keyy => $file) { if ($file === '..') { unset($dir[$keyy]); continue; } if ($file === '.') { unset($dir[$keyy]); continue; } } foreach ($dir as $file) { $oldfilename = $oldfolder . '/' . $file; $processIMG($oldfilename); } } function AddSlashtoStrifNolastSlash($str) { if (!$str) { return false; } $lastchar = substr($str, -1); if ($lastchar !== '/' && $lastchar !== '\\') { $str .= '/'; } return $str; } function formatDateTimetoReadable($dateTimeString) { if (empty($dateTimeString)) { return ''; } $date = new DateTime($dateTimeString); if (!$date) { return ''; } $formattedDate = $date->format('F j, Y'); $hours = (int) $date->format('g'); $minutes = (int) $date->format('i'); $ampm = $date->format('A'); $formattedMinutes = str_pad($minutes, 2, '0', STR_PAD_LEFT); return strpos($dateTimeString, ' ') !== false ? "{$formattedDate} {$hours}:{$formattedMinutes}{$ampm}" : "{$formattedDate}"; } function generateDatesOLD($daysArray, $months = 1, $sort = true) { if (!$daysArray) { return false; } if (!is_array($daysArray)) { $daysArray = tryjsondecode($daysArray); } if (!is_array($daysArray)) { return false; } $dates = []; // Iterate through each day in the array foreach ($daysArray as $day) { list($weekday, $time) = $day; $currentDate = new DateTime(); $currentDate->modify("next $weekday"); for ($i = 0; $i < $months; $i++) { // Add the time to the current date $dateWithTime = $currentDate->format('Y-m-d') . ' ' . $time; // Add the date to the array $dates[] = $dateWithTime; // Move to the next week (incrementing only the week part) $currentDate->modify('+1 week'); } } // Sort the dates if specified if ($sort) { sort($dates); } return $dates; } function generateDatesNEW($daysArray, $months = 2, $sort = true) { if (!$daysArray) { return false; } if (!is_array($daysArray)) { $daysArray = tryjsondecode($daysArray); } if (!is_array($daysArray)) { return false; } $dates = []; // Iterate through each day in the array foreach ($daysArray as $day) { list($weekday, $time) = $day; $currentDate = new DateTime(); // If today is the specified weekday, include it if (strtolower($currentDate->format('D')) === strtolower($weekday)) { $dateWithTime = $currentDate->format('Y-m-d') . ' ' . $time; $dates[] = $dateWithTime; } // Move to the next week (incrementing only the week part) $currentDate->modify("next $weekday"); for ($i = 1; $i < $months; $i++) { // Add the time to the current date $dateWithTime = $currentDate->format('Y-m-d') . ' ' . $time; // Add the date to the array $dates[] = $dateWithTime; // Move to the next week (incrementing only the week part) $currentDate->modify('+1 week'); } } // Sort the dates if specified if ($sort) { sort($dates); } return $dates; } function generateDates($daysArray, $days = 8, $sort = true) { $dates = generateDatesNEW($daysArray, $months = 4, $sort); unset($dates[0]); return array_splice($dates, 0, $days, []); } function GetTotalAmountfromArray($array) { if (!is_array($array)) { return false; } $total = 0; foreach ($array as $amount) { if (is_numeric($amount) && $amount !== '') { $total += $amount; } } return $total; } function removecolumnsfrom2Darray($array, $arraycolumnstoremove) { if (!is_array($array) or !is_array($arraycolumnstoremove)) { return false; } foreach ($array as $key => $value) { foreach ($value as $skey => $sval) { if (in_array($skey, $arraycolumnstoremove)) { unset($array[$key][$skey]); } } } } function sqlarray_2dfilter($array, $columnname, string $stringtosearch, $exact = FALSE, $caseinsensitive = false, $simplesearchwith_strpos = false) { if ($columnname === '' or $columnname === null or $columnname === false) { return FALSE; } if (!$array) { return false; } $datatosearch = array_column($array, $columnname); if ($caseinsensitive) { $stringtosearch = strtolower($stringtosearch); foreach ($datatosearch as $key => $value) { $datatosearch[$key] = strtolower($value); } } if ($exact) { $keylist = array_keys($datatosearch, $stringtosearch); } else { if ($simplesearchwith_strpos) { $keylist = []; foreach ($datatosearch as $sskey => $ssvalue) { if ($caseinsensitive) { if (stripos($ssvalue, $stringtosearch)) { $keylist[] = $sskey; } } elseif (!$caseinsensitive) { if (strpos($ssvalue, $stringtosearch)) { $keylist[] = $sskey; } } } } else { $stringtosearch = preg_quote($stringtosearch, '/'); // remove if an error is encountered $keylist = array_keys(preg_grep('/(?i)' . $stringtosearch . '/', $datatosearch)); } } $res = []; foreach ($keylist as $value) { $res[] = $array[$value]; } return $res; } function array2d_removeduplicate($array, $columnname, $reorder = FALSE) { $keylist = array_keys(array_unique(array_column($array, $columnname))); $newarray = []; foreach ($keylist as $value) { $newarray[$value] = $array[$value]; } if ($reorder) { $newarray = array_values($newarray); } return $newarray; } /** * Searches a 2d array using a multiple words that match by separating by space. * * This function takes a 2D array, a column name, and a search string as input. * It separates the search string by space and calls the sqlarray_2dfilter function * multiple times until all words are matched. * * @param array $array The 2D array to search in. * @param string $columnname The name of the column to search in. * @param string $stringtosearch The search string to search for. * @param bool $exact Whether to search for exact matches or not. Defaults to FALSE. * @param bool $caseinsensitive Whether to perform a case-insensitive search or not. Defaults to FALSE. * @param bool $simplesearchwith_strpos Whether to use the strpos function for searching or not. Defaults to FALSE. * * @return array The filtered data array where all words in the search string are present. */ function sqlarray_2dfilter_multiple($array, $columnname, string $stringtosearch, $exact = FALSE, $caseinsensitive = false, $simplesearchwith_strpos = false) { if ($columnname === '' or $columnname === null or $columnname === false) { return FALSE; } if (!$array) { return false; } $words = explode(' ', $stringtosearch); $result = $array; foreach ($words as $word) { $result = sqlarray_2dfilter($result, $columnname, $word, $exact, $caseinsensitive, $simplesearchwith_strpos); if (empty($result)) { return []; } } return $result; } function sqlarray_2dfilterContinuos($array, $columnname, $stringarraytosearch, $exact = FALSE, $caseinsensitive = false) { $res = []; foreach ($stringarraytosearch as $key => $value) { $searchresult = sqlarray_2dfilter($array, $columnname, $value, $exact, $caseinsensitive); if (!$searchresult) { continue; } $res = [...$res, ...$searchresult]; } return $res; } function encryptString($simple_string, $encryption_key) { $ciphering = "AES-128-CTR"; $iv_length = openssl_cipher_iv_length($ciphering); $options = 0; $encryption_iv = '1218277893585121'; $encryption = openssl_encrypt( $simple_string, $ciphering, $encryption_key, $options, $encryption_iv ); return $encryption; } function decryptString($string, $decryption_key) { $ciphering = "AES-128-CTR"; $decryption_iv = '1218277893585121'; $options = 0; $decryption = openssl_decrypt( $string, $ciphering, $decryption_key, $options, $decryption_iv ); return $decryption; } function objectToUrlSafeBase64($obj) { $jsonString = json_encode($obj); $base64String = base64_encode($jsonString); $urlSafeBase64 = str_replace(['+', '/', '='], ['-', '_', ''], $base64String); return $urlSafeBase64; } function urlSafeBase64ToObject($urlSafeBase64) { $base64String = str_replace(['-', '_'], ['+', '/'], $urlSafeBase64); $padding = strlen($base64String) % 4; if ($padding) { $base64String .= str_repeat('=', 4 - $padding); } $jsonString = base64_decode($base64String); return json_decode($jsonString); } }