A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							130 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							130 lines
						
					
					
						
							2.6 KiB
						
					
					
				<?php
 | 
						|
/*
 | 
						|
 * Copyright © 2021 ExacTI Technology Solutions. All rights reserved.
 | 
						|
 * GPLv3 General License.
 | 
						|
 * https://exacti.com.br
 | 
						|
 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
 | 
						|
 */
 | 
						|
 | 
						|
namespace Phacil\Framework;
 | 
						|
 | 
						|
use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
 | 
						|
use Phacil\Framework\Registry;
 | 
						|
 | 
						|
/** 
 | 
						|
 * @package Phacil\Framework 
 | 
						|
 */
 | 
						|
class Translate {
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var string|null
 | 
						|
	 */
 | 
						|
	private $autoLang;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var \Phacil\Framework\Session
 | 
						|
	 */
 | 
						|
	private $session;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var \Phacil\Framework\Database
 | 
						|
	 */
 | 
						|
	private $db;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var \Phacil\Framework\Caches
 | 
						|
	 */
 | 
						|
	protected $cache;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var string|null
 | 
						|
	 */
 | 
						|
	private $cookie;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $table = 'translate';
 | 
						|
	
 | 
						|
	public function __construct(Registry $registry){
 | 
						|
		
 | 
						|
		$this->session = $registry->session;
 | 
						|
		
 | 
						|
		$this->autoLang = (isset($this->session->data['lang'])) ? $this->session->data['lang'] : NULL;
 | 
						|
				
 | 
						|
		$this->cookie = (Request::COOKIE('lang')) ?: NULL;
 | 
						|
		
 | 
						|
		$this->cache = $registry->cache;
 | 
						|
 | 
						|
		$this->db = $registry->db;
 | 
						|
				
 | 
						|
		if($this->autoLang != NULL) {
 | 
						|
			setcookie("lang", ($this->autoLang), strtotime( '+90 days' ));
 | 
						|
		}
 | 
						|
		
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @param string $table 
 | 
						|
	 * @return $this 
 | 
						|
	 */
 | 
						|
	public function setTranslateTable($table){
 | 
						|
		$this->table = $table;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * @param string $value 
 | 
						|
	 * @param string|null $lang 
 | 
						|
	 * @return string 
 | 
						|
	 * @throws PhpfastcacheInvalidArgumentException 
 | 
						|
	 */
 | 
						|
	public function translation ($value, $lang = NULL) {
 | 
						|
 | 
						|
		$lang = ($lang != NULL) ? $lang : $this->autoLang;
 | 
						|
		
 | 
						|
		if($this->cache->check("lang_".$lang."_".md5($value))) {
 | 
						|
			return $this->cache->get("lang_".$lang."_".md5($value));
 | 
						|
			
 | 
						|
		} else {
 | 
						|
			$result = $this->db->query()->select()->from($this->table);
 | 
						|
			$result->where()->equals('text', $value)->end();
 | 
						|
			$result = $result->load();
 | 
						|
 | 
						|
			if ($result->getNumRows() == 1) {
 | 
						|
				if($lang && $result->getRow()->getValue($lang) and !empty($result->getRow()->getValue($lang))) {
 | 
						|
					$this->cache->set("lang_".$lang."_".md5($value), $result->getRow()->getValue($lang), false);
 | 
						|
					return $result->getRow()->getValue($lang); //valid translation present
 | 
						|
				} else {
 | 
						|
					return $value;
 | 
						|
				}
 | 
						|
 | 
						|
			} elseif($result->getNumRows() < 1) { //message not found in the table
 | 
						|
				//add unfound message to the table with empties translations
 | 
						|
				$this->insertBaseText($value);
 | 
						|
 | 
						|
				
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $value;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * @param string $value 
 | 
						|
	 * @return void 
 | 
						|
	 */
 | 
						|
	public function insertBaseText ($value){
 | 
						|
		$this->db->query()->insert()->setTable($this->table)->setValues([
 | 
						|
			'text' => $value
 | 
						|
		])->load();
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
} |