View file application/system/functions.php

File size: 10.43Kb
<?PHP
	/*
		Создаем PDO
	*/
	function CreatePDO($base) {
		if(empty($base)) {
			return false;
		}
		
		try {
			$pdo = new PDO(
				'mysql:host=' . $base['hostname'] . ';dbname=' . $base['dataname'],
				$base['username'],
				$base['password']
			);
			
			$pdo->setAttribute(
				PDO::ATTR_ERRMODE,
				PDO::ERRMODE_EXCEPTION
			);
			
			$pdo->exec(
				'SET NAMES UTF8'
			);
			
			return $pdo;
		}
		catch(PDOException $e) {
			die(
				'Error: ' . $e->getMessage()
			);
		}
	}
	
	/*
		Отправляет активный PDO
	*/
	function pdo() {
		global $pdo;
		
		if(empty($pdo)) {
			return null;
		}
		
		return $pdo;
	}
	
	/*
		Пакеты
	*/
	function pkg() {
		global $pkg;
		
		if(empty($pkg)) {
			return new Packages;
		}
		
		return $pkg;
	}
	
	/*
		Memcached
	*/
	function Memcached() {
		global $memcached;
		
		if(empty($memcached)) {
			$memcached = new Memcached();
			$memcached->addServer('127.0.0.1', 11211);
		}
		
		return $memcached;
	}
	
	/*
		Шаблонизатор
	*/
	function tpl() {
		global $tpl;
		
		if(empty($tpl)) {
			return null;
		}
		
		return $tpl;
	}
	
	/*
		Генерация рандомных строк
		@ Len = количество символов
	*/
	function RandomString($Len) {
		return substr(
			str_shuffle(
				'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
			), 0, $Len
		);
	}
	
	/*
		Возвращает результат в JSON
	*/
	function Result($_ARRAY = []) {
		die(
			json_encode(
				$_ARRAY
			)
		);
	}
	
	/*
		Возвращает результат Успеха в JSON
	*/
	function AlertSuccess($_MESSAGE = '') {
		Result([
			'Alert' => 'Success',
			'Message' => $_MESSAGE
		]);
	}
	
	/*
		Возвращает результат Ошибки в JSON
	*/
	function AlertError($_MESSAGE = '') {
		Result([
			'Alert' => 'Error',
			'Message' => $_MESSAGE
		]);
	}
	
	/*
		Возвращает результат Предупреждения в JSON
	*/
	function AlertWarning($_MESSAGE = '') {
		Result([
			'Alert' => 'Warning',
			'Message' => $_MESSAGE
		]);
	}
	
	/*
		Возвращает результат Информации в JSON
	*/
	function AlertInfo($_MESSAGE = '') {
		Result([
			'Alert' => 'Info',
			'Message' => $_MESSAGE
		]);
	}
	
	/*
		Проверяет Валидность запроса
	*/
	function IsValidActions() {
		if(empty($_POST['phpaction'])) {
			AlertError(getLang('functions_phpaction'));
		}
		
		if(!csrf()->Is($_POST['csrf_token'])) {
			AlertError(getLang('functions_csrf_token'));
		}
	}
	/*
		Записывает сведения в Логи
		@ File - имя файла, для записи
		@ Message - сообщение для записи
	*/
	function AddLogs($File, $Message) {
		tpl()
		->SetAppearance('system')
		->Start('logs/sample')
		->Set([
			'{system_date}' => date('d.m.Y'),
			'{system_time}' => date('H:i:s'),
			'{user_id}' => isset($_SESSION['id']) ? $_SESSION['id'] : getLang('functions_unknown'),
			'{user_ip}' => users()->getRemote(),
			'{user_agent}' => $_SERVER['HTTP_USER_AGENT'],
			'{json_post}' => print_r($_POST, true),
			'{json_get}' => print_r($_GET, true),
			'{other_data}' => $Message
		]);
		
		return file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/application/logs/' . $File, tpl()->getTemp(), FILE_APPEND);
	}
	
	/*
		Получение конфигураций
	*/
	function conf() {
		global $conf;
		
		if(isset($conf)) {
			return $conf;
		}
	}
	
	/*
		Редирект
	*/
	function Redirect($uri, $timeout = 300) {
		die('<script>setTimeout(\'location.href = "' . $uri . '";\', ' . $timeout . ');</script>');
	}
	
	/*
		CSRF защита
	*/
	function csrf() {
		global $csrf;
		
		if(isset($csrf)) {
			return $csrf;
		}
		
		return new CSRF;
	}
	
	/*
		Очистка текста
	*/
	function TextClear($string) {
		if(empty($string)) {
			return null;
		}
		
		$string = strip_tags($string);
		$string = htmlspecialchars($string);
		
		if(!mb_strlen($string)) {
			return null;
		}
		
		return $string;
	}
	
	/*
		Библиотка пользователи
	*/
	function users() {
		global $usr;
		
		if(isset($usr)) {
			return $usr;
		}
		
		return new Users;
	}
	
	/*
		Проверка валидности номера телефона
	*/
	function isValidPhoneNumber($phoneNumber) {
		$phoneNumber = preg_replace('/[^0-9]/', '', $phoneNumber);
		
		if(strlen($phoneNumber) === 11) {
			return $phoneNumber;
		}
		
		return false;
	}
	
	/*
		Диалоги функция
	*/
	function dialogs() {
		global $dialogs;
		
		if(isset($dialogs)) {
			return $dialogs;
		}
		
		return new Dialogs;
	}
	
	/*
		Получение сокращенной даты на русском
	*/
	function dateRussian($timestamp) {
		if(date('d') == date('d', $timestamp)) {
			return date('H:i', $timestamp);
		}
		
		$month = monthRussian($timestamp);
		return $month . date(' d', $timestamp);
	}
	
	/*
		Месяц на русском
	*/
	function monthRussian($timestamp) {
		$month = date('M', $timestamp);
		
		switch($month) {
			case 'Jan': {
				$month = getLang('month_little_01');
				break;
			}
			
			case 'Feb': {
				$month = getLang('month_little_02');
				break;
			}
			
			case 'Mar': {
				$month = getLang('month_little_03');
				break;
			}
			
			case 'Apr': {
				$month = getLang('month_little_04');
				break;
			}
			
			case 'May': {
				$month = getLang('month_little_05');
				break;
			}
			
			case 'Jun': {
				$month = getLang('month_little_06');
				break;
			}
			
			case 'Jul': {
				$month = getLang('month_little_07');
				break;
			}
			
			case 'Aug': {
				$month = getLang('month_little_08');
				break;
			}
			
			case 'Sep': {
				$month = getLang('month_little_09');
				break;
			}
			
			case 'Oct': {
				$month = getLang('month_little_10');
				break;
			}
			
			case 'Nov': {
				$month = getLang('month_little_11');
				break;
			}
			
			case 'Dec': {
				$month = getLang('month_little_12');
				break;
			}
		}
		
		return $month;
	}
	
	/*
		Сколько времени назад
	*/
	function timeElapsedString($timestamp) {
		$currentTimestamp = time();
		$elapsedSeconds = $currentTimestamp - $timestamp;

		if ($elapsedSeconds < 60) {
			return getLang('functions_past_sec', [$elapsedSeconds]);
		} elseif ($elapsedSeconds < 3600) {
			$minutes = floor($elapsedSeconds / 60);
			return getLang('functions_past_min', [$minutes]);
		} elseif ($elapsedSeconds < 86400) {
			$hours = floor($elapsedSeconds / 3600);
			$hoursWord = RussianNounPluralForm($hours, getLang('functions_hour'), getLang('functions_hour_s'), getLang('functions_hours'));
			
			return getLang('functions_back', [$hours, $hoursWord]);
		} elseif ($elapsedSeconds < 172800) {
			return getLang('functions_yesterday', [date("H:i", $timestamp)]);
		} else {
			return getLang('functions_month', [
				(date("j ", $timestamp) . monthRussian($timestamp)),
				date("H:i", $timestamp)
			]);
		}
	}

	function RussianNounPluralForm($number, $one, $two, $five) {
		$number = abs($number) % 100;
		$remainder = $number % 10;
		if ($number > 10 && $number < 20) {
			return $five;
		}
		if ($remainder > 1 && $remainder < 5) {
			return $two;
		}
		if ($remainder == 1) {
			return $one;
		}
		return $five;
	}
	
	/*
		Объем файла (размер)
	*/
	function formatFileSize($sizeInBytes) {
		$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
		$unit = 0;
		
		while ($sizeInBytes >= 1024 && $unit < count($units) - 1) {
			$sizeInBytes /= 1024;
			$unit++;
		}

		return round($sizeInBytes, 2) . ' ' . $units[$unit];
	}
	
	/*
		Возвращаем байты файла
	*/
	function return_bytes($size_str) {
		switch (substr($size_str, -1)) {
			case 'M': case 'm': return (int)$size_str * 1048576;
			case 'K': case 'k': return (int)$size_str * 1024;
			case 'G': case 'g': return (int)$size_str * 1073741824;
			default: return (int)$size_str;
		}
	}
	
	/*
		Получение аватара пользователя
	*/
	function getAvatar($userid = null) {
		if(empty($userid)) {
			if(empty($_SESSION['id'])) {
				return 'no_image.jpg';
			}
			
			$userid = $_SESSION['id'];
		}
		
		try {
			$dataUser = users()->Get($userid);
			
			if(empty($dataUser)) {
				return 'no_image.jpg';
			}
			
			return $dataUser->image;
		}
		catch(Exception $e) {
			return 'no_image.jpg';
		}
	}
	
	/*
		Получение имени пользователя
	*/
	function getName($userid = null) {
		if(empty($userid)) {
			if(empty($_SESSION['id'])) {
				return getLang('functions_unknown');
			}
			
			$userid = $_SESSION['id'];
		}
		
		try {
			$dataUser = users()->Get($userid);
			
			if(empty($dataUser)) {
				return getLang('functions_unknown');
			}
			
			return $dataUser->first_name . ' ' . $dataUser->last_name;
		}
		catch(Exception $e) {
			return getLang('functions_unknown');
		}
	}
	
	/*
		Языковая система
	*/
	function getLang($key, $placeholders = []) {
		global $lang;
		
		if(empty($lang)) {
			$lang = new Language;
			$lang->loadLanguageFromFile('ru', 'ru.json');
			$lang->setLanguage('ru');
		}
		
		return $lang->getText($key, $placeholders);
	}
	
	/*
		Загрузка сторонней страницы
	*/
	function pageLoad($appearance = 'standart', $sample = 'sample', $content = '') {
		tpl()
		->SetAppearance($appearance)
		->Start($sample)
		->Content(tpl()->Get($content))
		->Show();
	}
	
	/*
		Проверка прав пользователя
	*/
	function isRights($searchRights) {
		if(isset($_SESSION['id'])) {
			$userData = users()->Get($_SESSION['id']);
			
			if(strpos($userData->rights, $searchRights) !== false) {
				return true;
			}
		}
		
		return false;
	}
	
	/*
		Получение списка участников диалога
	*/
	function peerParticipants($peerid) {
		try {
			$sth = pdo()->prepare('SELECT * FROM `messages__dialogs` WHERE `id`=:peerid LIMIT 1');
			$sth->execute([
				':peerid' => $peerid
			]);
			
			if(!$sth->rowCount()) {
				return null;
			}
			
			return json_decode($sth->fetch(PDO::FETCH_OBJ)->participants, true);
		}
		catch(Exception $e) {
			return null;
		}
	}