239 lines
9.3 KiB
PHP
239 lines
9.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Core;
|
|
|
|
use Nette\Utils\Image;
|
|
use Nette\Utils\ImageType;
|
|
use DateInterval;
|
|
|
|
/**
|
|
* Třída plná užitečných funkcí.
|
|
*/
|
|
class Funkce
|
|
{
|
|
/**
|
|
* Rozšifruje data, která jsme předtím zašifrovali pomocí
|
|
* funkce QRURL ve vb.net
|
|
*/
|
|
public static function decrypt($data)
|
|
{
|
|
$password = '3sc3RLrpd17tvl';
|
|
$password = substr(hash('sha256', $password, true), 0, 32);
|
|
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
|
|
$decrypted = openssl_decrypt(base64_decode($data), 'aes-256-cbc', $password, OPENSSL_RAW_DATA, $iv);
|
|
return $decrypted;
|
|
}
|
|
|
|
/**
|
|
* Šifrovací funkce. Měla by odpovídat .NETovské verzi. Funfuje s funkcí decrypt().
|
|
*/
|
|
public static function encrypt($data)
|
|
{
|
|
$password = '3sc3RLrpd17tvl';
|
|
$password = substr(hash('sha256', $password, true), 0, 32);
|
|
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
|
|
return base64_encode(openssl_encrypt($data, 'aes-256-cbc', $password, OPENSSL_RAW_DATA, $iv));
|
|
}
|
|
|
|
/**
|
|
* Používáme pro zašifrování cookie s passwordem.
|
|
* Raději jiná funkce než pro šifrování / dešifrování údajů předaných z VB.NET
|
|
* Vzato odtud: https://www.w3docs.com/snippets/php/how-to-encrypt-and-decrypt-a-string-in-php.html
|
|
* @param mixed $password
|
|
* @return bool|string
|
|
*/
|
|
public static function encrypt_password($password)
|
|
{
|
|
$ciphering = "AES-128-CTR";
|
|
$iv_length = openssl_cipher_iv_length($ciphering);
|
|
$options = 0;
|
|
$encryption_iv = '1233567881014121';
|
|
$encryption_key = "sfb16196a19ibniv";
|
|
return openssl_encrypt($password, $ciphering, $encryption_key, $options, $encryption_iv);
|
|
}
|
|
|
|
/**
|
|
* Používáme pro zašifrování cookie s passwordem.
|
|
* Raději jiná funkce než pro šifrování / dešifrování údajů předaných z VB.NET
|
|
* Vzato odtud: https://www.w3docs.com/snippets/php/how-to-encrypt-and-decrypt-a-string-in-php.html
|
|
* @param mixed $encrypted
|
|
* @return bool|string
|
|
*/
|
|
public static function decrypt_password($encrypted)
|
|
{
|
|
$ciphering = "AES-128-CTR";
|
|
$options = 0;
|
|
$decryption_iv = '1233567881014121';
|
|
$decryption_key = "sfb16196a19ibniv";
|
|
return openssl_decrypt($encrypted, $ciphering, $decryption_key, $options, $decryption_iv);
|
|
}
|
|
|
|
/**
|
|
* Slouží pro testování, zda se připojujeme pouze do cloudových serverů.
|
|
* V podstatě opis funkce IsCloudIP z VB.NET.
|
|
* Pozor, v proměnné $server může být např "data.xzajic.cz,2000"
|
|
* Tedy i port.
|
|
* @param string $server
|
|
* @return bool
|
|
*/
|
|
public static function is_cloud_ip(string $server): bool
|
|
{
|
|
$cloudoveservery = array(
|
|
"data.xzajic.cz",
|
|
"boromir.xzajic.cz",
|
|
"faramir.xzajic.cz",
|
|
"galadriel.xzajic.cz",
|
|
"sql.xzajic.cz",
|
|
"sql2.xzajic.cz",
|
|
"base.xzajic.cz",
|
|
"merkur.xzajic.cz",
|
|
"mars.xzajic.cz",
|
|
"data.powercare.cz",
|
|
"kadan.pecovatelska.cz",
|
|
"novybor.pecovatelska.cz",
|
|
"decin.pecovatelska.cz",
|
|
"lomnice.pecovatelska.cz",
|
|
"zbraslav.pecovatelska.cz",
|
|
"semily.pecovatelska.cz",
|
|
"jesenik.pecovatelska.cz",
|
|
"ledax.pecovatelska.cz",
|
|
"venuse.xzajic.cz",
|
|
"136.243.90.39", //136.243.90.39 Venuše
|
|
"173.212.216.246", //173.212.216.246 Merkur
|
|
"173.249.52.108", //173.249.52.108 Base
|
|
"195.201.86.17", //195.201.86.17 Mars
|
|
"kmetix.cz" //debug
|
|
);
|
|
$server = strtolower($server);
|
|
foreach ($cloudoveservery as $cloudovyserver) {
|
|
if (str_contains($server, $cloudovyserver))
|
|
return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Občas uživatel zadá staré jméno serveru, tak tato funkce nahradí staré jméno novým.
|
|
* @param mixed $server
|
|
* @return void
|
|
*/
|
|
public static function GetServerAlias(&$server)
|
|
{
|
|
//osekat mezery:
|
|
//'data.xzajic.cz, 1433' vs. 'data.xzajic.cz,1433'
|
|
$server = strtolower(trim(str_replace(' ', '', $server)));
|
|
|
|
$aliasy = array(
|
|
//"base.xzajic.cz" => "base.xzajic.cz",
|
|
"data.xzajic.cz" => "base.xzajic.cz",
|
|
"faramir.xzajic.cz" => "base.xzajic.cz",
|
|
"sql2.xzajic.cz" => "base.xzajic.cz",
|
|
"data.powercare.cz" => "base.xzajic.cz",
|
|
//"merkur.xzajic.cz" => "merkur.xzajic.cz",
|
|
"bilbo.xzajic.cz" => "merkur.xzajic.cz",
|
|
"boromir.xzajic.cz" => "merkur.xzajic.cz",
|
|
"galadriel.xzajic.cz" => "merkur.xzajic.cz",
|
|
"haldir.xzajic.cz" => "merkur.xzajic.cz",
|
|
"sql.xzajic.cz" => "merkur.xzajic.cz",
|
|
"kadan.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"novybor.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"decin.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"lomnice.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"zbraslav.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"semily.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"jesenik.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
"ledax.pecovatelska.cz" => "merkur.xzajic.cz",
|
|
//"mars.xzajic.cz" => "mars.xzajic.cz",
|
|
);
|
|
|
|
foreach ($aliasy as $key => $value) {
|
|
if (str_contains($server, $key)) { //existuje alias v serveru?
|
|
$server = str_replace($key, $value, $server); //nahraď pravým jménem serveru
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function CreateBarevnyKolecko(int $barva)
|
|
{
|
|
// barvičky do int, toto php neumí (asi):
|
|
$barvaHEX = substr(dechex($barva), -6);
|
|
$red = hexdec(substr($barvaHEX, 0, 2));
|
|
$green = hexdec(substr($barvaHEX, 2, 2));
|
|
$blue = hexdec(substr($barvaHEX, 4, 2));
|
|
|
|
// create a blank image
|
|
$image = imagecreatetruecolor(17, 17);
|
|
|
|
imagealphablending($image, true);
|
|
imagesavealpha($image, true);
|
|
|
|
// fill the background color
|
|
//$bg = imagecolorallocate($image, 0, 0, 0 );
|
|
$white = imagecolorallocatealpha($image, 255, 255, 255, 127); //plná průhlednost!!!
|
|
imagefill($image, 0, 0, $white);
|
|
|
|
// choose a color for the ellipse
|
|
$col_ellipse = imagecolorallocatealpha($image, $red, $green, $blue, 0);
|
|
// draw the white ellipse
|
|
imagefilledellipse($image, 8, 8, 16, 16, $col_ellipse);
|
|
|
|
// output the picture
|
|
ob_start();
|
|
imagepng($image);
|
|
$image_data = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
$image = Image::fromString($image_data);
|
|
$image->send(ImageType::PNG);
|
|
}
|
|
|
|
/**
|
|
* Test na svátek nebo so/ne.
|
|
* @param mixed $datum
|
|
* @return bool
|
|
*/
|
|
public static function jeSoNeSv(\DateTimeInterface $datum): bool
|
|
{
|
|
// nejdříve test na sobotu nebo neděli:
|
|
if ($datum->format("N") == 6 or $datum->format("N") == 7)
|
|
return true;
|
|
|
|
//pak svátky:
|
|
$svatky = array();
|
|
$svatky[] = date_create($datum->format("Y") . "-01-01"); // Nový rok
|
|
// Velký pátek:
|
|
$velkyPatek = date_create(date("m/d/Y", easter_date((int) $datum->format("Y")))); // výchozí den je Velikonoční neděle
|
|
$velkyPatekInt = DateInterval::createFromDateString("2 days");
|
|
$velkyPatekInt->invert = 1;
|
|
$svatky[] = date_add($velkyPatek, $velkyPatekInt); // Velký pátek = neděle - 2 dny
|
|
// Velikonoční pondělí:
|
|
$velikonocniPondeli = date_create(date("m/d/Y", easter_date((int) $datum->format("Y")))); //výchozí den je Velikonoční neděle
|
|
$velikonocniPondeliInt = DateInterval::createFromDateString("1 days");
|
|
$svatky[] = date_add($velikonocniPondeli, $velikonocniPondeliInt); // Velikonoční pondělí = neděle + 1 den
|
|
|
|
$svatky[] = date_create($datum->format("Y") . "-05-01"); // Svátek práce
|
|
$svatky[] = date_create($datum->format("Y") . "-05-08"); // Den osvobození
|
|
$svatky[] = date_create($datum->format("Y") . "-07-05"); // Den slovanských věrozvěstů Cyrila a Metoděje
|
|
$svatky[] = date_create($datum->format("Y") . "-07-06"); // Den upálení mistra Jana Husa
|
|
$svatky[] = date_create($datum->format("Y") . "-09-28"); // Den české státnosti
|
|
$svatky[] = date_create($datum->format("Y") . "-10-28"); // Den vzniku samostatného československého státu
|
|
$svatky[] = date_create($datum->format("Y") . "-11-17"); // Den boje za svobodu a demokracii
|
|
$svatky[] = date_create($datum->format("Y") . "-12-24"); // Štědrý den
|
|
$svatky[] = date_create($datum->format("Y") . "-12-25"); // 1. svátek vánoční
|
|
$svatky[] = date_create($datum->format("Y") . "-12-26"); // 2. svátek vánoční
|
|
|
|
// test na svátek:
|
|
foreach ($svatky as $svatek) {
|
|
if ($datum->format("Y-m-d") == $svatek->format("Y-m-d"))
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|