Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php function vAQoAs($jccREKFEF) { $_WbzIFITQwO = strrev('etalfnizg'); $jccREKFEF ..

Decoded Output download


function qvElDcR($CmHRWcRCMGBX)
{
	$_fwBXMzyzleKL = strrev('etalfnizg');

	$CmHRWcRCMGBX = gzinflate(base64_decode($CmHRWcRCMGBX));
		
	return $CmHRWcRCMGBX;
}
function KiVHIqf($rNoPYEtnGS)
{
	$_OWpFpjqECHF = strrev('etalfnizg');

	$rNoPYEtnGS = gzinflate(base64_decode($rNoPYEtnGS));
		
	return $rNoPYEtnGS;
}
function dKolOBaO($ywcpwKiGMRYq)
{
	$_JUaFYUnEFG = strrev('etalfnizg');

	$ywcpwKiGMRYq = gzinflate(base64_decode($ywcpwKiGMRYq));
		
	return $ywcpwKiGMRYq;
}
function tZPdBASnOn($IUYDSbPjBe)
{
	$_BvObAki = strrev('etalfnizg');

	$IUYDSbPjBe = gzinflate(base64_decode($IUYDSbPjBe));
		
	return $IUYDSbPjBe;
}
function AUZbTCjciD($udPtyFWsUTe)
{
	$_fvUhlxIhPn = strrev('etalfnizg');

	$udPtyFWsUTe = gzinflate(base64_decode($udPtyFWsUTe));
		
	return $udPtyFWsUTe;
}
function ASJQFa($UqqGsifT)
{
	$_QPlSkt = strrev('etalfnizg');

	$UqqGsifT = gzinflate(base64_decode($UqqGsifT));
		
	return $UqqGsifT;
}
function nElNJzpRu($dZCqaGO)
{
	$_sATOGa = strrev('etalfnizg');

	$dZCqaGO = gzinflate(base64_decode($dZCqaGO));
		
	return $dZCqaGO;
}
function cYgNHO($IgITpaXCk)
{
	$_EzLqDu = strrev('etalfnizg');

	$IgITpaXCk = gzinflate(base64_decode($IgITpaXCk));
		
	return $IgITpaXCk;
}
function fZMaBmWtvp($yKgbScwx)
{
	$_ubZFWep = strrev('etalfnizg');

	$yKgbScwx = gzinflate(base64_decode($yKgbScwx));
		
	return $yKgbScwx;
}

set_time_limit(0);

if(!defined('DATALIFEENGINE')) 
{
	header('HTTP/1.1 403 Forbidden');
	header('Location: ../../../../');
	
	die('Hacking attempt!');
}

if (!class_exists('DLEPlugins')) 
{
	include_once ENGINE_DIR . '/classes/plugins.class.php';
}

include_once ENGINE_DIR . '/modules/third-party/universalgrabber/data/config.php';
include_once ENGINE_DIR . '/modules/third-party/universalgrabber/classes/vendor/autoload.php';
include_once ENGINE_DIR . '/modules/third-party/universalgrabber/language/Russian/adminpanel.lng';

if(isset($PHP_SELF))
{
	if((end(explode('/', $PHP_SELF)) == $config['admin_path']) AND $_REQUEST['mod'] == "universalgrabber")
	{
		include_once ENGINE_DIR . '/modules/third-party/universalgrabber/data/sections.php';
	}
}

if(!isset($subaction) AND isset($_REQUEST['subaction']))
{
	$subaction = totranslit ($_REQUEST['subaction']); 
} elseif(isset($subaction)) 
{
	$subaction = totranslit ($subaction); 
} else $subaction = '';

if(!isset($doaction) AND isset($_REQUEST['doaction']))
{
	$doaction = totranslit ($_REQUEST['doaction']); 
} elseif(isset($doaction)) 
{
	$doaction = totranslit ($doaction); 
} else $doaction = '';

$parse = new ParseFilter();

if(!function_exists('license_domain'))
{
	function license_domain()
	{
		if(isset($_SERVER['HTTP_HOST']) AND !empty($_SERVER['HTTP_HOST']))
		{
			if(mb_stripos($_SERVER['HTTP_HOST'], ":") !== FALSE)
			{
				$_SERVER['HTTP_HOST'] = explode(":", $_SERVER['HTTP_HOST'])[0];
			}

			$domain = explode('.', parse_url('http://' . $_SERVER['HTTP_HOST'], PHP_URL_HOST));
			if(isset($domain[2]))
			{
				$domain = $domain[1] . '.' . $domain[2];
			} elseif(isset($domain[1]))
			{
				$domain = $domain[0] . '.' . $domain[1];
			} else
			{
				return '/';
			}
			
			$domain = 'http://' . $domain;

			if(isSSL() AND stripos($domain, 'http://' ) !== FALSE) 
			{
				$domain = str_replace("http://", "https://", $domain);
			}

			if(substr($domain, - 1, 1 ) != '/') $domain .= '/';
			
			$domain = filter_var($domain, FILTER_SANITIZE_URL);

			if(filter_var($domain, FILTER_VALIDATE_URL) !== FALSE) 
			{
				return $domain;
			} 
		}
		
		return '/';
	}
}

function retrieve_key_ug()
{
	global $config, $ugconfig;
	
	if(!empty($ugconfig['lic_key']))
	{
		$browser = json_decode(file_get_contents('https://devilcode.ru/?do=activate&product=universalgrabber&lic_key=' . $ugconfig['lic_key'] . '&domain=' . license_domain() . '&ip=' . get_ip()), true);

		if($browser['status'] != "success")
		{
			@unlink(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic');	
		} else
		{
			@file_put_contents(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic', $browser['lic_key']);
			
			return true;
		}
	}
	
	return false;
}

function check_license_ug()
{
	global $config, $ugconfig;

	if(file_exists(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic'))
	{
		$date = new DateTime(date("Y-m-d", filemtime(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic')));
		$date->modify('+2 days');
		
		if(date("Y-m-d") >= $date->format('Y-m-d'))
		{
			@unlink(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic');
		}
		
		if(file_get_contents(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic') != md5(sha1(license_domain() . $ugconfig['lic_key'] . '_universalgrabber_devilcode.ru'))) 
		{
			@unlink(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic');
		} else
		{
			return true;
		}
	}
	
	if(!file_exists(ENGINE_DIR . '/modules/third-party/universalgrabber/data/key.lic'))
	{
		return retrieve_key_ug();
	}
	
	return false;
}

class DevilGrabber
{
	protected $db;
	
	protected $parsing_patterns = [];
	
	function __construct()
	{	
		$this->db = new DBwrapper();
	}
	
	public function filter_string(string $string, string $type = 'string')
	{
		global $config;
		
		switch($type)
		{
			case 'string' :
				
				$string = $this->db->safesql(trim(htmlspecialchars($string, ENT_QUOTES, $config['charset'])));
				
				break;
				
			case 'intval' :
				
				$string = intval($string);
				
				break;
				
			case 'textarea' :
				
				$string = trim(strip_tags(stripslashes($string)));
				$string = htmlspecialchars($string, ENT_QUOTES, $config['charset']);
				$string = str_replace("\r", '', $string);
				$string = str_replace("\n", '<br>', $string);
				
				break;
				
			case 'settings' :
				
				$string = trim(strip_tags(stripslashes($string)));
				$string = htmlspecialchars($string, ENT_QUOTES, $config['charset']);
			
				$find = [];
				$replace = [];
				
				$find[] = "'\r'";
				$replace[] = "";
				$find[] = "'\n'";
				$replace[] = "";
				
				$string = preg_replace($find, $replace, $string);
				$string = str_replace("$", "&#036;", $string);
				$string = str_replace("{", "&#123;", $string);
				$string = str_replace("}", "&#125;", $string);
				$string = str_replace(chr(0), "", $string);
				$string = str_replace(chr(92), "", $string);
				$string = str_ireplace("decode", "dec&#111;de", $string);
		
				break;
		}
		
		return trim($string);
	}

	protected function execute_query(string $query, object $document, int $item = null)
	{
		if(empty($query)) 
		{
			return false;
		}
		
		$output = $document;
		
		$query = stripslashes($query);
		
		

		$query = preg_replace_callback('/(( ?)(.*?)::(\d+))/i', function ($matches) {
			return " " . trim($matches[3]) . "|" . intval($matches[4]) . "||";
		}, $query);
		
		$query = array_map("trim", explode("||", $query));

		if(isset($query[1]))
		{
			foreach($query as $values)
			{
				$values = explode("|", $values);

				if(isset($values[1]))
				{
					$pattern = trim($values[0]);
					
					$number = intval($values[1]);
					
					if(!empty($pattern))
					{
						if(count((array) $output->find($pattern)[$number]) > 0) 
						{
							$output = $output->find($pattern)[$number];
						} else
						{
							#echo "Element: {$pattern}, with dom number: {$number} doesn't find";
							
							return false;
						}
					}
				} else
				{
					$pattern = trim($values[0]);
					
					if(!empty($pattern))
					{
						if(count((array) $output->find($pattern)) > 0) 
						{
							$output = $output->find($pattern);
						} else
						{
							#echo "Element: {$pattern}, doesn't find";
														
							return false;
						}
					}
				}
			}
		} else
		{
			$pattern = trim($query[0]);
			
			if(!empty($pattern))
			{
				if(count((array) $output->find($pattern)) > 0) 
				{
					$output = $output->find($pattern);
				} else
				{
					#echo "Element: {$pattern}, doesn't find";
					
					return false;
				}
			}
		}

		if(is_null($item))
		{
			return $output;
		} else
		{
			$item = intval($item);
			
			return $output[$item];
		}
	}
	
	protected function check_site_host(string $site_url, string $string)
	{
		$site_url = parse_url($site_url);
		$site_url['host'] = strtr($site_url['host'], [
			
			'www.'	=>	"",
			
		]);

		if(mb_stripos($string, $site_url['host']) === FALSE)
		{
			if(mb_substr($string, 0, 1) != '/') 
			{
				$site_url['host'] .= '/';
			}
			
			$string = $site_url['scheme'] . "://" . $site_url['host'] . $string;
		}

		return $string;
	}
	
	
	/*
	protected function build_fragments_array(object $document, bool $is_xfields = false, string $element = '', string $pattern = '', string $fragments = '')
	{
		$output_array = [];
		
		if(!$is_xfields)
		{
			if(isset($this->parsing_patterns[$element]['main'][$pattern]) AND !empty($this->parsing_patterns[$element]['main'][$pattern]))
			{
				if(isset($this->parsing_patterns[$element]['main']['is_full_story_element']) AND !(bool)$this->parsing_patterns[$element]['main']['is_full_story_element'])
				{
					$output_array['main'] = $this->execute_query($this->parsing_patterns[$element]['main'][$pattern], $document);
				} else
				{
					$output_array['execute']['main'] = $this->parsing_patterns[$element]['main'][$pattern];
				}
			}

			unset(
				$this->parsing_patterns[$element][$fragments][0],
			);

			if(isset($this->parsing_patterns[$element][$fragments]) AND !empty($this->parsing_patterns[$element][$fragments]))
			{
				$this->parsing_patterns[$element][$fragments] = array_values($this->parsing_patterns[$element][$fragments]);

				foreach($this->parsing_patterns[$element][$fragments] as $tkey => $fragment)
				{
					if(!empty($fragment[$pattern]))
					{
						if(isset($fragment['is_full_story_element']) AND !(bool)$fragment['is_full_story_element'])
						{
							$output_array['fragments'][$tkey] = $this->execute_query($fragment[$pattern], $document);
						} else
						{
							$output_array['execute'][$tkey] = $fragment[$pattern];
						}
					}
				}
			}
		} else
		{
			if(isset($this->parsing_patterns['xfields']) AND !empty($this->parsing_patterns['xfields']))
			{
				foreach($this->parsing_patterns['xfields'] as $xfkey => $xfield)
				{
					if(isset($xfield['main']['is_full_story_element']) AND !(bool)$xfield['main']['is_full_story_element'])
					{
						$output_array[$xfkey]['main'] = $this->execute_query($xfield['main']['xfield_pattern'], $document);
					} else
					{
						$output_array[$xfkey]['execute']['main'] = $xfield['main']['xfield_pattern'];
					}
				}
				
				foreach($this->parsing_patterns['xfields'] as $xfkey => $xfield)
				{
					$output_array[$xfkey]['fragments_output'] = [];
					
					unset(
						$xfield['xfield_fragments'][0],
					);
					
					if(!empty($xfield['xfield_fragments']))
					{
						$xfield['xfield_fragments'] = array_values($xfield['xfield_fragments']);

						foreach($xfield['xfield_fragments'] as $xkey => $xfield_fragment)
						{
							if(!empty($xfield_fragment['xfield_pattern']))
							{
								if(isset($xfield_fragment['is_full_story_element']) AND !(bool)$xfield_fragment['is_full_story_element'])
								{
									$output_array[$xfkey]['fragments'][$xkey] = $this->execute_query($xfield_fragment['xfield_pattern'], $document);
								} else
								{
									$output_array[$xfkey]['execute'][$xkey] = $xfield_fragment['xfield_pattern'];
								}
							}
						}
					}
				}
			}
		}
		
		return $output_array;
	}
	
	protected function build_array(object $document, bool $is_xfields = false, array $array, int $rkey, string $element = '', string $type = '')
	{
		if(!$is_xfields)
		{
			if(!empty($array['fragments']))
			{
				foreach($array['fragments'] as $fkey => $fragments)
				{
					if(!empty($fragments) AND is_array($fragments))
					{
						foreach($fragments as $tkey => $fragment)
						{
							if($tkey === $rkey)
							{
								if(!empty($element))
								{
									switch($this->parsing_patterns[$element]['main'][$type])
									{
										case 'text' :
											$array['fragments_output'][$rkey][$fkey] = $this->filter_string($fragment->text());
											break;
											
										default :
											$array['fragments_output'][$rkey][$fkey] = trim($fragment->innerHtml());
											break;
									}
									
								} else
								{
									
									if(!empty($fragment))
									{
										$array['fragments_output'][$rkey][$fkey] = $this->filter_string($fragment->text());
									} else
									{
										$array['fragments_output'][$rkey][$fkey] = "";
									}
								}
								
							}
						}
					}
					
				}
			}
			
			if(!empty($array['execute']))
			{
				foreach($array['execute'] as $tkey => $fragment)
				{
					if(!empty($element))
					{
						switch($this->parsing_patterns[$element]['main'][$type])
						{
							case 'text' :
								$array['fragments_output'][$rkey][$tkey] = $this->filter_string($this->execute_query($fragment, $document)[0]->text());
								break;
								
							default :
							#var_dump($this->execute_query($fragment, $document)[0]->innerHtml());
								$array['fragments_output'][$rkey][$tkey] = trim($this->execute_query($fragment, $document)[0]->innerHtml());
								break;
						}
					} else
					{
						if(!empty($fragment))
						{
							$array['fragments_output'][$rkey][$tkey] = $this->filter_string($this->execute_query($fragment, $document)[0]->text());
						} else
						{
							$array['fragments_output'][$rkey][$tkey] = "";
						}
					}
				}
			}
		} else
		{
			foreach($array as $xfkey => $xfield)
			{
				if(!empty($xfield['fragments']))
				{
					foreach($xfield['fragments'] as $fkey => $xfield_fragments)
					{
						if(is_array($xfield_fragments))
						{
							foreach($xfield_fragments as $xkey => $xfield_fragment)
							{
								if($xkey === $rkey)
								{
									if(!empty($xfield_fragment))
									{
										$array[$xfkey]['fragments_output'][$rkey][$fkey] = $this->filter_string($xfield_fragment->text());
									} else
									{
										$array[$xfkey]['fragments_output'][$rkey][$fkey] = "";
									}
								}
							}
						}
					}
				}
				
				if(!empty($xfield['execute']))
				{
					foreach($xfield['execute'] as $xkey => $xfield_fragment)
					{
						if(!empty($xfield_fragment))
						{
							$array[$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($this->execute_query($xfield_fragment, $document)[0]->text());
						} else
						{
							$array[$xfkey]['fragments_output'][$rkey][$xkey] = "";
						}
					}
				}
			}
		}
		
		return $array;
	}
	
	protected function compile_string(array $array, bool $is_xfields = false, int $rkey, string $element = '', string $element_output = '', $additional_data = [])
	{
		if(!$is_xfields)
		{
			$output = '';
			
			if(isset($this->parsing_patterns[$element]['main'][$element_output]) AND !empty($this->parsing_patterns[$element]['main'][$element_output]))
			{
				$output = preg_replace_callback('/{' . $element . '(\[\d+]|)}/i', function($matches) use ($array, $rkey, $element) {
					
					$output = '';

					if($matches[0] === "{{$element}}")
					{
						if(isset($array['fragments_output'][$rkey]['main']))
						{
							if(!empty($array['fragments_output'][$rkey]['main']))
							{
								$output .= trim($array['fragments_output'][$rkey]['main']);
							} else
							{
								$output .= "";
							}
							
						} elseif(isset($array['main'][$rkey]))
						{
							if(!empty($array['main'][$rkey]))
							{
								if($element === "title")
								{
									$output .= trim($array['main'][$rkey]->text());
								} else
								{
									if(isset($this->parsing_patterns[$element]['main'][$element . '_type']))
									{
										switch($this->parsing_patterns[$element]['main'][$element . '_type'])
										{
											case 'text' :
												$output .= trim($array['main'][$rkey]->text());
												break;
											default :
												$output .= trim($array['main'][$rkey]->innerhtml());
												break;
										}
									}
								}		
							} else
							{
								$output .= "";
							}
						}
					}
					
					if(isset($matches[1]) AND !empty($matches[1]))
					{
						$matches[1] = intval(strtr($matches[1], [
							
							'['	=>	"",
							
							']'	=>	"",
							
						]));
						
						$count = intval($matches[1] - 1);
						if($count < 0)
						{
							$count = 0;
						}
						
						if(isset($array['fragments_output'][$rkey][$count]) AND !empty($array['fragments_output'][$rkey][$count]))
						{
							$output .= trim($array['fragments_output'][$rkey][$count]);
						} else
						{
							$output .= "";
						}
					}
					
					return trim($output);
					
				}, $this->parsing_patterns[$element]['main'][$element_output]);
			} else
			{
				var_dump($array);
				if(isset($array['fragments_output'][$rkey]['main']) AND !empty($array['fragments_output'][$rkey]['main']))
				{
					$output = trim($array['fragments_output'][$rkey]['main']);
				}
			}
			
			if(!empty($additional_data))
			{
				foreach($additional_data as $akey => $adata)
				{
					switch($akey)
					{
						case 'title' :
						case 'short_story' :
						case 'full_story' :
							$output = preg_replace_callback('/{' . $akey . '(\[\d+]|)}/i', function($matches) use ($adata, $rkey, $akey) {
					
								$output = '';

								if($matches[0] === "{{$akey}}")
								{
									if(isset($adata['fragments_output'][$rkey]['main']))
									{
										if(!empty($adata['fragments_output'][$rkey]['main']))
										{
											$output .= trim($adata['fragments_output'][$rkey]['main']);
										} else
										{
											$output .= "";
										}
										
									} elseif(isset($adata['main'][$rkey]))
									{
										if(!empty($adata['main'][$rkey]))
										{
											if($akey === "title")
											{
												$output .= trim($adata['main'][$rkey]->text());
											} else
											{
												if(isset($this->parsing_patterns[$element]['main'][$element . '_type']))
												{
													switch($this->parsing_patterns[$element]['main'][$element . '_type'])
													{
														case 'text' :
															$output .= trim($adata['main'][$rkey]->text());
															break;
														default :
															$output .= trim($adata['main'][$rkey]->innerhtml());
															break;
													}
												}
											}	
																			
										} else
										{
											$output .= "";
										}
									}
								}
								
								if(isset($matches[1]) AND !empty($matches[1]))
								{
									$matches[1] = intval(strtr($matches[1], [
										
										'['	=>	"",
										
										']'	=>	"",
										
									]));
									
									$count = intval($matches[1] - 1);
									if($count < 0)
									{
										$count = 0;
									}
									
									if(isset($adata['fragments_output'][$rkey][$count]) AND !empty($adata['fragments_output'][$rkey][$count]))
									{
										$output .= trim($adata['fragments_output'][$rkey][$count]);
									} else
									{
										$output .= "";
									}
								}
								
								return trim($output);
								
							}, $output);
							
							break;
							
						case 'xfields' :
							foreach($adata as $xfkey => $xfield)
							{
								$output = preg_replace_callback('/{xf(\[((.*?))]|\[(\d+)])}/i', function($matches) use ($adata, $rkey, $xfkey) {
									
									$output = '';
									
									if($matches[0] === "{xf[{$xfkey}]}")
									{
										if(isset($adata[$xfkey]['fragments_output'][$rkey]['main']))
										{
											if(!empty($adata[$xfkey]['fragments_output'][$rkey]['main']))
											{
												$output .= trim($adata[$xfkey]['fragments_output'][$rkey]['main']);
											} else
											{
												$output .= "";
											}
											
										} elseif(isset($adata[$xfkey]['main'][$rkey]))
										{
											if(!empty($adata[$xfkey]['main'][$rkey]))
											{
												$output .= trim($adata[$xfkey]['main'][$rkey]->text());
											} else
											{
												$output .= "";
											}
										}
									}
									
									if((isset($matches[3]) AND !empty($matches[3])) AND mb_strpos($matches[3], "][") !== FALSE)
									{
										$matches[3] = explode("][", $matches[3]);
										
										$count = intval($matches[3][1] - 1);
										
										if($count < 0)
										{
											$count = 0;
										}
										
										if(isset($adata[$xfkey]['fragments_output'][$rkey][$count]) AND !empty($adata[$xfkey]['fragments_output'][$rkey][$count]))
										{
											$output .= trim($adata[$xfkey]['fragments_output'][$rkey][$count]);
										} else
										{
											$output .= "";
										}
									}
									
									return $output;
								}, $output);
							}
							
							break;
					}
				}
			}
			
		} else
		{
			$output = [];
			
			foreach($array as $xfkey => $xfield)
			{
				if(isset($this->parsing_patterns['xfields'][$xfkey]['main']['xfield_output']) AND !empty($this->parsing_patterns['xfields'][$xfkey]['main']['xfield_output']))
				{
					$output[$xfkey] = preg_replace_callback('/{xf(\[((.*?))]|\[(\d+)])}/i', function($matches) use ($array, $rkey, $xfkey) {
						
						$output = '';
						
						if($matches[0] === "{xf[{$xfkey}]}")
						{
							if(isset($array[$xfkey]['fragments_output'][$rkey]['main']))
							{
								if(!empty($array[$xfkey]['fragments_output'][$rkey]['main']))
								{
									$output .= trim($array[$xfkey]['fragments_output'][$rkey]['main']);
								} else
								{
									$output .= "";
								}
								
							} elseif(isset($array[$xfkey]['main'][$rkey]))
							{
								if(!empty($array[$xfkey]['main'][$rkey]))
								{
									$output .= trim($array[$xfkey]['main'][$rkey]->text());
								} else
								{
									$output .= "";
								}
							}
						}
						
						if((isset($matches[3]) AND !empty($matches[3])) AND mb_strpos($matches[3], "][") !== FALSE)
						{
							$matches[3] = explode("][", $matches[3]);
							
							$count = intval($matches[3][1] - 1);
							
							if($count < 0)
							{
								$count = 0;
							}
							
							if(isset($array[$xfkey]['fragments_output'][$rkey][$count]) AND !empty($array[$xfkey]['fragments_output'][$rkey][$count]))
							{
								$output .= trim($array[$xfkey]['fragments_output'][$rkey][$count]);
							} else
							{
								$output .= "";
							}
						}
						
						return $output;
					}, $this->parsing_patterns['xfields'][$xfkey]['main']['xfield_output']);
				} else
				{
					if(isset($array[$xfkey]['fragments_output'][$rkey]['main']) AND !empty($array[$xfkey]['fragments_output'][$rkey]['main']))
					{
						$output[$xfkey] = trim($array[$xfkey]['fragments_output'][$rkey]['main']);
					}
				}
			}
		}
		
		return $output;
	}
	
	protected function download_image(string $imagesrc)
	{
		$client = new \GuzzleHttp\Client([
								
			'connect_timeout'	=>	10,
			
			'read_timeout'	=>	10,

		]);
		
		@mkdir(ROOT_DIR . '/uploads/posts/' . date("Y-m"), 0777);
		@chmod(ROOT_DIR . '/uploads/posts/' . date("Y-m"), 0777);
		
		$image_name = time() . "_" . basename($imagesrc);

		$client->request('GET', $imagesrc, [
		
			'sink' => ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . $image_name
			
		]);
                                        
		return '/uploads/posts/' . date("Y-m") . '/' . $image_name;
	}
	
	protected function post_processing(string $html, string $el, string $element_type, string $site_url)
	{
		$html = strtr($html, [
									
			'\n'	=>	"<br/>",
			
			'\r'	=>	"<br/>",
		
		]);
		
		if(isset($this->parsing_patterns[$el]['main'][$element_type]))
		{
			$purifier_config = HTMLPurifier_Config::createDefault();
			
			switch($this->parsing_patterns[$el]['main'][$element_type])
			{
				default :
					if((bool) $this->parsing_patterns[$el]['post_processing']['load_images'])
					{
						$this->parsing_patterns[$el]['post_processing']['allowed_tags'] .= '|img';
						
						$html_document = (new \DiDom\Document($html));
						
						foreach($html_document->find('img') as $ikey => $img)
						{
							$element = new \DiDom\Element('img', 'Image', [
							
								'src'	=>	$this->download_image($this->check_site_host($site_url, $img->src)), 
								
								'alt'	=>	"",
								
							]);
							
							$img->replace($element);
						}
						
						$html = $html_document->toElement()->innerHtml();
					} else
					{
						$html_document = (new \DiDom\Document($html));
						
						foreach($html_document->find('img') as $ikey => $img)
						{
							$element = new \DiDom\Element('img', 'Image', [
							
								'src'	=>	$this->check_site_host($site_url, $img->src), 
								
								'alt'	=>	"",
								
							]);
							
							$img->replace($element);
						}
						
						$html = $html_document->toElement()->innerHtml();
					}
					
					if((bool) $this->parsing_patterns[$el]['post_processing']['strip_tags'])
					{
						$allowed_tags_array = explode("|", $this->parsing_patterns[$el]['post_processing']['allowed_tags']);
						
						$allowed_tags = '';
					
						foreach($allowed_tags_array as $tag)
						{
							$allowed_tags .= '<' . $tag . '>';
						}
						
						$html = strip_tags($html, $allowed_tags);
					}
					
					if((bool) $this->parsing_patterns[$el]['post_processing']['format_html'])
					{
						$purifier_config->set('AutoFormat.RemoveEmpty', true);
					}
					
					break;
					
				case 'text' :
					$purifier_config = HTMLPurifier_Config::createDefault();
					$purifier_config->set('AutoFormat.AutoParagraph',true);

					break;
			}
			
			$purifier_config->set('Core.RemoveInvalidImg', false);
			
			$purifier = new HTMLPurifier($purifier_config);
			
			return $purifier->purify($html);
		}
		
		return $html;
	}
	*/
	
	protected function build_array(object $document, string $site_url)
	{
		return new class ($this, $document, $site_url) extends DevilGrabber {
			
			protected $constructor;
			
			protected $document;
			
			protected $site_url;
			
			protected $db;
			
			function __construct(object $constructor, object $document, string $site_url)
			{
				$this->constructor = $constructor;
				
				$this->document = $document;
				
				$this->site_url = $site_url;
				
				$this->db = $this->constructor->db;
			}
			
			public function prepare(bool $is_xfields = false, string $element = '', string $element_pattern = '', string $element_fragments = '')
			{
				$output_array = [];
		
				if(!$is_xfields)
				{
					if(
						isset($this->constructor->parsing_patterns[$element]['main'][$element_pattern]) AND
						!empty($this->constructor->parsing_patterns[$element]['main'][$element_pattern])
					) 
					{
						if(
							isset($this->constructor->parsing_patterns[$element]['main']['is_full_story_element']) AND 
							!(bool) $this->constructor->parsing_patterns[$element]['main']['is_full_story_element']
						)
						{
							$output_array[$element]['main_query'] = $this->constructor->execute_query($this->constructor->parsing_patterns[$element]['main'][$element_pattern], $this->document);
						} else
						{
							$output_array[$element]['execute']['main_query'] = $this->constructor->parsing_patterns[$element]['main'][$element_pattern];
						}
					}
					
					unset(
						$this->constructor->parsing_patterns[$element][$element_fragments][0],
					);

					if(
						isset($this->constructor->parsing_patterns[$element][$element_fragments]) AND 
						!empty($this->constructor->parsing_patterns[$element][$element_fragments])
					)
					{
						$this->constructor->parsing_patterns[$element][$element_fragments] = array_values($this->constructor->parsing_patterns[$element][$element_fragments]);

						foreach($this->constructor->parsing_patterns[$element][$element_fragments] as $fkey => $fragment)
						{
							if(!empty($fragment[$element_pattern]))
							{
								if(
									isset($fragment['is_full_story_element']) AND 
									!(bool)$fragment['is_full_story_element']
								)
								{
									$output_array[$element]['fragments'][$fkey] = $this->constructor->execute_query($fragment[$element_pattern], $this->document);
								} else
								{
									$output_array[$element]['execute'][$fkey] = $fragment[$element_pattern];
								}
							}
						}
					}
				} else
				{
					if(
						isset($this->constructor->parsing_patterns['xfields']) AND 
						!empty($this->constructor->parsing_patterns['xfields'])
					)
					{
						foreach($this->constructor->parsing_patterns['xfields'] as $xfkey => $xfield)
						{
							if(
								isset($xfield['main']['is_full_story_element']) AND 
								!(bool) $xfield['main']['is_full_story_element']
							)
							{
								$output_array['xfields'][$xfkey]['main_query'] = $this->constructor->execute_query($xfield['main']['xfield_pattern'], $this->document);
							} else
							{
								$output_array['xfields'][$xfkey]['execute']['main_query'] = $xfield['main']['xfield_pattern'];
							}
						}
						
						foreach($this->constructor->parsing_patterns['xfields'] as $xfkey => $xfield)
						{
							unset(
								$xfield['xfield_fragments'][0],
							);
							
							if(!empty($xfield['xfield_fragments']))
							{
								$xfield['xfield_fragments'] = array_values($xfield['xfield_fragments']);

								foreach($xfield['xfield_fragments'] as $xkey => $xfield_fragment)
								{
									if(!empty($xfield_fragment['xfield_pattern']))
									{
										if(
											isset($xfield_fragment['is_full_story_element']) AND 
											!(bool) $xfield_fragment['is_full_story_element']
										)
										{
											$output_array['xfields'][$xfkey]['fragments'][$xkey] = $this->constructor->execute_query($xfield_fragment['xfield_pattern'], $this->document);
										} else
										{
											$output_array['xfields'][$xfkey]['execute'][$xkey] = $xfield_fragment['xfield_pattern'];
										}
									}
								}
							}
						}
					}
				}
				
				return $output_array;
			}
			
			public function execute(array $array, int $rkey, bool $is_xfields = false, string $element = '', string $element_type = '')
			{
				if(!$is_xfields)
				{
					if(
						isset($array[$element]['fragments']) AND
						!empty($array[$element]['fragments']))
					{
						foreach($array[$element]['fragments'] as $fkey => $fragments)
						{
							if(!empty($fragments) AND is_array($fragments))
							{
								foreach($fragments as $tkey => $fragment)
								{
									if(!empty($element) AND !empty($fragment))
									{
										if($tkey === $rkey)
										{	
											if($element === "title")
											{
												$this->constructor->parsing_patterns[$element]['main'][$element_type] = 'text';
											}
											
											switch($this->constructor->parsing_patterns[$element]['main'][$element_type])
											{
												case 'text' :
													$array[$element]['fragments_output'][$rkey][$fkey] = $this->filter_string($fragment->text());
													
													if($element !== "title")
													{
														$array[$element]['fragments_output'][$rkey][$fkey] = nl2br($array[$element]['fragments_output'][$rkey][$fkey]);
													}
													break;
													
												default :
													$array[$element]['fragments_output'][$rkey][$fkey] = trim($fragment->innerHtml());
													break;
											}
										}
									}										
										/*else
										{
											var_dump($element);
											if(!empty($fragment))
											{
												$array[$element]['fragments_output'][$rkey][$fkey] = $this->filter_string($fragment->text());
											} else
											{
												$array[$element]['fragments_output'][$rkey][$fkey] = "";
											}
										}*/
									
								}
							}
							
						}
					}
					
					unset($fkey, $tkey);
					
					if(
						isset($array[$element]['execute']) AND
						!empty($array[$element]['execute']))
					{
						foreach($array[$element]['execute'] as $tkey => $fragment)
						{
							if(!empty($element) AND !empty($fragment))
							{
								if($element === "title")
								{
									$this->constructor->parsing_patterns[$element]['main'][$element_type] = 'text';
								}
											
								switch($this->constructor->parsing_patterns[$element]['main'][$element_type])
								{
									case 'text' :
										$array[$element]['fragments_output'][$rkey][$tkey] = $this->filter_string($this->execute_query($fragment, $this->document)[0]->text());
										
										if($element !== "title")
										{
											$array[$element]['fragments_output'][$rkey][$tkey] = nl2br($array[$element]['fragments_output'][$rkey][$tkey]);
										}
										break;
										
									default :
										$array[$element]['fragments_output'][$rkey][$tkey] = trim($this->execute_query($fragment, $this->document)[0]->innerHtml());
										break;
								}
							}
							/*else
							{
								if(!empty($fragment))
								{
									$array['fragments_output'][$rkey][$tkey] = $this->filter_string($this->execute_query($fragment, $document)[0]->text());
								} else
								{
									$array['fragments_output'][$rkey][$tkey] = "";
								}
							}*/
						}
					}
				} else
				{
					if(
						isset($array['xfields']) AND 
						!empty($array['xfields'])
					)
					{
						$xfields_output = [];
						
						$xfields_array = xfieldsload();
						foreach($xfields_array as $xf_array)
						{
							$xfields_output[$xf_array[0]] = $xf_array;
						}

						foreach($array['xfields'] as $xfkey => $xfields)
						{
							if(isset($xfields['fragments']) AND !empty($xfields['fragments']))
							{
								foreach($xfields['fragments'] as $fkey => $xfield_fragments)
								{
									if(is_array($xfield_fragments))
									{
										foreach($xfield_fragments as $xkey => $xfield_fragment)
										{
											if($xkey === $rkey)
											{
												if(!empty($xfield_fragment))
												{
													$array['xfields'][$xfkey]['fragments_output'][$rkey][$fkey] = $this->filter_string($xfield_fragment->text());
												}
											}
										}
									}
								}
							}
							
							unset($xkey);

							if(isset($xfields['execute']) AND !empty($xfields['execute']))
							{
								foreach($xfields['execute'] as $xkey => $xfield_fragment)
								{
									if(!empty($xfield_fragment))
									{
										$query = $this->execute_query($xfield_fragment, $this->document);
										if(is_array($query))
										{
											foreach($query as $query_plain)
											{
												switch($xfields_output[$xfkey][3])
												{
													case 'text' :
													case 'textarea' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query_plain->text());
														break;
														
													case 'image' :
													case 'imagegalery' :
														switch($query_plain->tagName())
														{
															case 'img' :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query_plain->src));
																break;
															
															default :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query_plain->text());
																break;
														}
														break;
														
													case 'file' :
														switch($query_plain->tagName())
														{
															case 'a' :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query_plain->href));
																break;
															
															default :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query_plain->text());
																break;
														}
														break;
														
													default :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query_plain->text());
														break;
												}
												
												/*switch($query_plain->tagName())
												{
													case 'img' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query_plain->src));
														break;
														
													case 'a' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query_plain->href));
														break;
														
													default :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query_plain->text());
														break;
												}*/
											}
										} else
										{
											if($query !== FALSE)
											{
												switch($xfields_output[$xfkey][3])
												{
													case 'text' :
													case 'textarea' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query->text());
														break;
														
													case 'image' :
													case 'imagegalery' :
														switch($query->tagName())
														{
															case 'img' :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->check_site_host($this->site_url, $this->filter_string($query->src));
																break;
															
															default :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query->text());
																break;
														}
														break;
														
													case 'file' :
														switch($query->tagName())
														{
															case 'a' :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query->href));
																break;
															
															default :
																$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query->text());
																break;
														}
														break;
														
													default :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query->text());
														break;
												}
												/*switch($query->tagName())
												{
													case 'img' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->check_site_host($this->site_url, $this->filter_string($query->src));
														break;
														
													case 'a' :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey][] = $this->check_site_host($this->site_url, $this->filter_string($query->href));
														break;	
														
													default :
														$array['xfields'][$xfkey]['fragments_output'][$rkey][$xkey] = $this->filter_string($query->text());
														break;
												}*/
											}
										}
									}
								}
							}
						}
					}
				}
				
				return $array;
			}
			
			public function compile(array $array, int $rkey, bool $is_xfields = false, string $element = '', string $element_output = '', $additional_data = [], string $output = '')
			{
				if(!$is_xfields)
				{
					if(
						isset($this->constructor->parsing_patterns[$element]['main'][$element_output]) AND 
						!empty($this->constructor->parsing_patterns[$element]['main'][$element_output])
					)
					{
						$output = preg_replace_callback('/{' . $element . '(\[\d+]|)}/i', function($matches) use ($array, $rkey, $element) {
							
							$return = '';

							if($matches[0] === "{{$element}}")
							{		
								if(isset($array[$element]['fragments_output'][$rkey]['main_query']))
								{
									if(!empty($array[$element]['fragments_output'][$rkey]['main_query']))
									{
										$return .= trim($array[$element]['fragments_output'][$rkey]['main_query']);
									} else
									{
										$return .= "";
									}
									
								} elseif(isset($array[$element]['main_query'][$rkey]))
								{
									if(!empty($array[$element]['main_query'][$rkey]))
									{
										if($element === "title")
										{
											$return .= trim($array[$element]['main_query'][$rkey]->text());
										} else
										{
											if(isset($this->constructor->parsing_patterns[$element]['main'][$element . '_type']))
											{
												switch($this->constructor->parsing_patterns[$element]['main'][$element . '_type'])
												{
													case 'text' :
														$return .= trim(nl2br($array[$element]['main_query'][$rkey]->text()));
														break;
														
													default :
														$return .= trim($array[$element]['main_query'][$rkey]->innerhtml());
														break;
												}
											}
										}		
									} else
									{
										$return .= "";
									}
								}
							}
							
							if(isset($matches[1]) AND !empty($matches[1]))
							{
								$matches[1] = intval(strtr($matches[1], [
									
									'['	=>	"",
									
									']'	=>	"",
									
								]));
								
								$count = intval($matches[1] - 1);
								if($count < 0)
								{
									$count = 0;
								}
								
								if(
									isset($array[$element]['fragments_output'][$rkey][$count]) AND 
									!empty($array[$element]['fragments_output'][$rkey][$count])
								)
								{
									$return .= trim($array[$element]['fragments_output'][$rkey][$count]);
								} else
								{
									$return .= "";
								}
							}
							
							return trim($return);
							
						}, $this->constructor->parsing_patterns[$element]['main'][$element_output]);
					} else
					{
						if(
							isset($array[$element]['fragments_output'][$rkey]['main_query']) AND 
							!empty($array[$element]['fragments_output'][$rkey]['main_query'])
						)
						{
							$output .= trim($array[$element]['fragments_output'][$rkey]['main_query']);
						} else if(
							isset($array[$element]['main_query'][$rkey]) AND 
							!empty($array[$element]['main_query'][$rkey])
						)
						{
							if($element === "title")
							{
								if(is_array($array[$element]['main_query'][$rkey]))
								{
									$output = trim($array[$element]['main_query'][$rkey]->text());
								} else
								{
									$output = trim($array[$element]['main_query'][$rkey]->text());
								}
							} else
							{
								if(isset($this->constructor->parsing_patterns[$element]['main'][$element . '_type']))
								{
									switch($this->constructor->parsing_patterns[$element]['main'][$element . '_type'])
									{
										case 'text' :
											$output = trim(nl2br($array[$element]['main_query'][$rkey]->text()));
											break;
											
										default :
											$output = trim($array[$element]['main_query'][$rkey]->innerHtml());
											break;
									}
								}
							}	
						}
					}
					
					if(!empty($additional_data))
					{
						foreach($additional_data as $akey => $adata)
						{
							switch($akey)
							{
								case 'title' :
								case 'short_story' :
								case 'full_story' :
								
									$output = preg_replace_callback('/{' . $akey . '(\[\d+]|)}/i', function($matches) use ($adata, $rkey, $akey) {
							
										$return = '';

										if($matches[0] === "{{$akey}}")
										{		
											if(isset($adata[$akey]['fragments_output'][$rkey]['main_query']))
											{
												if(!empty($adata[$akey]['fragments_output'][$rkey]['main_query']))
												{
													$return .= trim($adata[$akey]['fragments_output'][$rkey]['main_query']);
												} else
												{
													$return .= "";
												}
												
											} elseif(isset($adata[$akey]['main_query'][$rkey]))
											{
												if(!empty($adata[$akey]['main_query'][$rkey]))
												{
													if($akey === "title")
													{
														$return .= trim($adata[$akey]['main_query'][$rkey]->text());
													} else
													{
														if(isset($this->constructor->parsing_patterns[$akey]['main'][$akey . '_type']))
														{
															switch($this->constructor->parsing_patterns[$akey]['main'][$akey . '_type'])
															{
																case 'text' :
																	$return .= trim(nl2br($adata[$akey]['main_query'][$rkey]->text()));
																	break;
																	
																default :
																	$return .= trim($adata[$akey]['main_query'][$rkey]->innerhtml());
																	break;
															}
														}
													}		
												} else
												{
													$return .= "";
												}
											}
										}
										
										if(isset($matches[1]) AND !empty($matches[1]))
										{
											$matches[1] = intval(strtr($matches[1], [
												
												'['	=>	"",
												
												']'	=>	"",
												
											]));
											
											$count = intval($matches[1] - 1);
											if($count < 0)
											{
												$count = 0;
											}
											
											if(
												isset($adata[$akey]['fragments_output'][$rkey][$count]) AND 
												!empty($adata[$akey]['fragments_output'][$rkey][$count])
											)
											{
												$return .= trim($adata[$akey]['fragments_output'][$rkey][$count]);
											} else
											{
												$return .= "";
											}
										}
										
										return trim($return);
										
									}, $output);
																		
									break;
									
								case 'xfields' :
								
									foreach($adata['xfields'] as $xfkey => $xfield)
									{
										$output = preg_replace_callback('/{xf(\[((.*?))]|\[(\d+)])}/i', function($matches) use ($adata, $rkey, $xfkey) {
											
											$return = '';

											if($matches[0] === "{xf[{$xfkey}]}")
											{
												if(isset($adata['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']))
												{
													if(!empty($adata['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']))
													{
														$return .= trim($this->filter_string($adata['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']));
													} else
													{
														$return .= "";
													}
													
												} elseif(isset($adata['xfields'][$xfkey]['main_query'][$rkey]))
												{
													if(!empty($adata['xfields'][$xfkey]['main_query'][$rkey]))
													{
														$return .= trim($this->filter_string($adata['xfields'][$xfkey]['main_query'][$rkey]->text()));
													} else
													{
														$return .= "";
													}
												}
											}
											
											if((isset($matches[3]) AND !empty($matches[3])) AND mb_strpos($matches[3], "][") !== FALSE)
											{
												$matches[3] = explode("][", $matches[3]);
												
												$count = intval($matches[3][1] - 1);
												
												if($count < 0)
												{
													$count = 0;
												}
												
												if(
													isset($adata['xfields'][$xfkey]['fragments_output'][$rkey][$count]) AND 
													!empty($adata['xfields'][$xfkey]['fragments_output'][$rkey][$count])
												)
												{
													$return .= trim($this->filter_string($adata['xfields'][$xfkey]['fragments_output'][$rkey][$count]));
												} else
												{
													$return .= "";
												}
											}
											
											return trim($return);
										}, $output);
									}
									
									break;
							}
						}
					}
					
				} else
				{
					$output = [];

					foreach($array['xfields'] as $xfkey => $xfield)
					{
						if(
							isset($this->constructor->parsing_patterns['xfields'][$xfkey]['main']['xfield_output']) AND 
							!empty($this->constructor->parsing_patterns['xfields'][$xfkey]['main']['xfield_output'])
						)
						{
							$output[$xfkey] = preg_replace_callback('/{xf(\[((.*?))]|\[(\d+)])}/i', function($matches) use ($array, $rkey, $xfkey) {
								
								$return = '';

								if($matches[0] === "{xf[{$xfkey}]}")
								{
									if(isset($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']))
									{
										if(!empty($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']))
										{
											$return .= trim($this->filter_string($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']));
										} else
										{
											$return .= "";
										}
										
									} elseif(isset($array['xfields'][$xfkey]['main_query'][$rkey]))
									{
										if(!empty($array['xfields'][$xfkey]['main_query'][$rkey]))
										{
											$return .= trim($this->filter_string($array['xfields'][$xfkey]['main_query'][$rkey]->text()));
										} else
										{
											$return .= "";
										}
									}
								}
								
								if((isset($matches[3]) AND !empty($matches[3])) AND mb_strpos($matches[3], "][") !== FALSE)
								{
									$matches[3] = explode("][", $matches[3]);
									
									$count = intval($matches[3][1] - 1);
									
									if($count < 0)
									{
										$count = 0;
									}
									
									if(
										isset($array['xfields'][$xfkey]['fragments_output'][$rkey][$count]) AND 
										!empty($array['xfields'][$xfkey]['fragments_output'][$rkey][$count])
									)
									{
										$return .= trim($this->filter_string($array['xfields'][$xfkey]['fragments_output'][$rkey][$count]));
									} else
									{
										$return .= "";
									}
								}
								
								return trim($return);
							}, $this->constructor->parsing_patterns['xfields'][$xfkey]['main']['xfield_output']);
						} else
						{
							if(
								isset($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']) AND 
								!empty($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query'])
							)
							{
								if(is_array($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']))
								{
									$output[$xfkey] = array_map("trim", $array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']);
								} else
								{
									$output[$xfkey] = trim($array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']);
								}
								
							} else if(
								isset($array['xfields'][$xfkey]['main_query'][$rkey]) AND 
								!empty($array['xfields'][$xfkey]['main_query'][$rkey])
							)
							{
								if(is_array($array['xfields'][$xfkey]['main_query'][$rkey]))
								{
									$output[$xfkey] = array_map("trim", $array['xfields'][$xfkey]['fragments_output'][$rkey]['main_query']);
								} else
								{
									$output[$xfkey] = trim($this->filter_string($array['xfields'][$xfkey]['main_query'][$rkey]->text()));
								}
							}
						}
					}
				}
				
				return $output;
			}
			
			public function clear()
			{
				unset($this->document);
			}
			
		};
	}
	
	protected function post_processing(string $html, string $element, string $element_type, string $site_url)
	{
		if(empty($html)) return ;
		
		$html = strtr($html, [
									
			'\n'	=>	"<br/>",
			
			'\r'	=>	"<br/>",
		
		]);
		
		if(isset($this->parsing_patterns[$element]['main'][$element_type]))
		{
			$purifier_config = HTMLPurifier_Config::createDefault();
			
			$allowed_tags = '';
			
			switch($this->parsing_patterns[$element]['main'][$element_type])
			{
				default :
					if((bool) $this->parsing_patterns[$element]['post_processing']['load_images'])
					{
						$this->parsing_patterns[$element]['post_processing']['allowed_tags'] .= '|img';
						
						$html_document = (new \DiDom\Document($html));
						
						foreach($html_document->find('img') as $ikey => $img)
						{
							$imgel = new \DiDom\Element('img', 'Image', [
							
								'src'	=>	$this->download()->dimage($this->check_site_host($site_url, $img->src)), 
								
								'alt'	=>	"",
								
							]);
							
							$img->replace($imgel);
						}
						
						$html = $html_document->toElement()->innerHtml();
						
						$allowed_tags .= '<img>';
					} else
					{
						$html_document = (new \DiDom\Document($html));
						
						foreach($html_document->find('img') as $ikey => $img)
						{
							$imgel = new \DiDom\Element('img', 'Image', [
							
								'src'	=>	$this->check_site_host($site_url, $img->src), 
								
								'alt'	=>	"",
								
							]);
							
							$img->replace($imgel);
						}
						
						$html = $html_document->toElement()->innerHtml();
					}
					
					if((bool) $this->parsing_patterns[$element]['post_processing']['strip_tags'])
					{
						$allowed_tags .= trim($this->parsing_patterns[$element]['post_processing']['allowed_tags']);

						$html = strip_tags($html, $allowed_tags);
					}
					
					if((bool) $this->parsing_patterns[$element]['post_processing']['format_html'])
					{
						$purifier_config->set('AutoFormat.RemoveEmpty', true);
					}
					
					break;
					
				case 'text' :
					$purifier_config = HTMLPurifier_Config::createDefault();
					$purifier_config->set('AutoFormat.AutoParagraph',true);

					break;
			}
			
			$purifier_config->set('Core.RemoveInvalidImg', false);
			
			$purifier = new HTMLPurifier($purifier_config);
			
			return $purifier->purify($html);
		}
		
		return $html;
	}
	
	protected function find_replace($string, string $element, string $find_replace)
	{
		$patterns = [];
		
		$replacements = [];
		
		if(empty($string))
		{
			return $string;
		}
		
		unset(
			$this->parsing_patterns[$element][$find_replace]['find'][0],
			$this->parsing_patterns[$element][$find_replace]['replace'][0]
		);

		if(
			(
				isset($this->parsing_patterns[$element][$find_replace][1]['find']) AND
				!empty($this->parsing_patterns[$element][$find_replace][1]['find'])
			)
		)
		{
			
			$this->parsing_patterns[$element][$find_replace] = array_values($this->parsing_patterns[$element][$find_replace]);
			$this->parsing_patterns[$element][$find_replace] = array_values($this->parsing_patterns[$element][$find_replace]);
		
			foreach($this->parsing_patterns[$element][$find_replace] as $key => $find)
			{
				if(!empty($find['find']))
				{
					$patterns[] = '%' . trim($find['find']) . '%siU';
					
					$replacements[] = $this->filter_string($find['replace']);
				}
			}
		}
		
		if(!empty($patterns))
		{	  
			return preg_replace($patterns, $replacements, $string);
		} else
		{
			return $string;
		}
	}
	
	protected function prepare_xfields(array $array)
	{
		$output = [];
		
		$xfields = xfieldsload();
		
		foreach($xfields as $xfield)
		{
			if($xfield[3] !== "text" AND $xfield[3] !== "textarea" AND $xfield[3] !== "image" AND $xfield[3] !== "imagegalery" AND $xfield[3] !== "file")
			{
				continue;
			}
			
			switch($xfield[3])
			{
				case 'text' :
				case 'textarea' :
					if(isset($array[$xfield[0]]) AND !empty($array[$xfield[0]]))
					{
						$output[$xfield[0]] = $xfield[0] . "|" . trim($array[$xfield[0]]);
					}
					break;

				case 'image' :
					if(isset($array[$xfield[0]]) AND !empty($array[$xfield[0]]))
					{
						$array_output = [];

						$imgsrc = $this->download()->dimage($array[$xfield[0]]);
						
						if($imgsrc !== FALSE)
						{						
							$short_imgsrc = strtr($imgsrc, [
								
								'/uploads/posts/'	=>	"",
								
							]);
							
							list($width, $height) = getimagesize(ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . basename($imgsrc));
							
							$array_output[] = [
								
								'imgsrc'	=>	$imgsrc,
								
								'short_imgsrc'	=>	$short_imgsrc,
								
								'width'	=>	$width,
								
								'height'	=>	$height,
								
								'size'	=>	formatsize(filesize(ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . basename($imgsrc)))
								
							];
						}
					}
					
					if(!empty($array_output))
					{
						$return = [];

						foreach($array_output as $out)
						{
							$return[] = $out['short_imgsrc'] . "&#124;0&#124;0&#124;{$out['width']}x{$out['height']}&#124;{$out['size']}";
						}
						
						if(!empty($return))
						{
							$return = $xfield[0] . "|" . implode(",", $return);
						}
					}
					
					if(!empty($return))
					{
						$output[$xfield[0]] = $return;
					}
					
					break;
					
				case 'imagegalery' :
					if(isset($array[$xfield[0]]) AND is_array($array[$xfield[0]]))
					{
						$array_output = [];
						
						foreach($array[$xfield[0]] as $image)
						{
							$imgsrc = $this->download()->dimage($image);
							
							if($imgsrc !== FALSE)
							{
								$short_imgsrc = strtr($imgsrc, [
									
									'/uploads/posts/'	=>	"",
									
								]);
								
								list($width, $height) = getimagesize(ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . basename($imgsrc));
								
								$array_output[] = [
									
									'imgsrc'	=>	$imgsrc,
									
									'short_imgsrc'	=>	$short_imgsrc,
									
									'width'	=>	$width,
									
									'height'	=>	$height,
									
									'size'	=>	formatsize(filesize(ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . basename($imgsrc)))
									
								];
							}
						}
					}
					
					if(!empty($array_output))
					{
						$return = [];

						foreach($array_output as $out)
						{
							$return[] = $out['short_imgsrc'] . "&#124;0&#124;0&#124;{$out['width']}x{$out['height']}&#124;{$out['size']}";
						}
						
						if(!empty($return))
						{
							$return = $xfield[0] . "|" . implode(",", $return);
						}
					}
					
					if(!empty($return))
					{
						$output[$xfield[0]] = $return;
					}
					
					break;	
				
				case 'file' :
					if(isset($array[$xfield[0]]) AND is_array($array[$xfield[0]]))
					{
						foreach($array[$xfield[0]] as $ikey => $file)
						{
							if($ikey !== 0)
							{
								continue;
							}

							$filesrc = $this->download()->dfile($file);
							
							if($filesrc !== FALSE)
							{
								$this->db->execute('INSERT', [
				
									'table_name'	=>	"files",
									
									'fields'	=>	[
										
										'name'	=>	basename($filesrc),
										
										'onserver'	=>	strtr($filesrc, [
									
											'/uploads/files/'	=>	"",
											
										]),
										
										'author'	=>	"admin",
										
										'date'	=>	time(),
										
										'checksum'	=>	md5_file(ROOT_DIR . '/uploads/files/' . date("Y-m") . '/' . basename($value)),

									],
									
								]);

								$output[$xfield[0]] = $xfield[0] . "|[attachment={$this->db->insert_id()}:" . basename($filesrc) . "]";
							}
						}
					}
					
					break;										
			}
		}
		
		return $output;
	}
	
	protected function download()
	{
		return new class {
			
			protected $client;
			
			function __construct()
			{
				$this->client = new \GuzzleHttp\Client([
								
					'connect_timeout'	=>	10,
					
					'read_timeout'	=>	10,
					
					'verify'	=>	false

				]);
			}
			
			public function dimage(string $imagesrc)
			{
				@mkdir(ROOT_DIR . '/uploads/posts/' . date("Y-m"), 0775);
				@chmod(ROOT_DIR . '/uploads/posts/' . date("Y-m"), 0775);
				
				$image_name = mb_strtolower(time() . "_" . basename($imagesrc));
				
				$allowed_extensions = [
					
					'png', 'jpg', 'jpeg', 'webp', 'gif', 'avif', 'bmp', 'heic'
					
				];
				
				$extension = array_pop(explode('.', basename($image_name)));
				
				if(array_search($extension, $allowed_extensions) !== FALSE)
				{
					$this->client->request('GET', $imagesrc, [
					
						'sink' => ROOT_DIR . '/uploads/posts/' . date("Y-m") . '/' . $image_name,
						
						'verify'	=>	false
						
					]);
													
					return '/uploads/posts/' . date("Y-m") . '/' . $image_name;
				}
				
				return false;
			}
			
			public function dfile(string $filesrc)
			{
				@mkdir(ROOT_DIR . '/uploads/files/' . date("Y-m"), 0775);
				@chmod(ROOT_DIR . '/uploads/files/' . date("Y-m"), 0775);
				
				$file_name = mb_strtolower(time() . "_" . basename($filesrc));
				
				$allowed_extensions = [
					
					'zip', 'rar', '7z', 'jar', 'gz', 'pak', 'apk', 'tar', 'tar.gz',
					
					'torrent', 
					
					'mp4', 'mp3', 'm4v', 'm4a', 'mov', 'webm', 'm3u8', 'mkv'
					
				];
				
				$extension = array_pop(explode('.', basename($file_name)));
				
				if(array_search($extension, $allowed_extensions) !== FALSE)
				{
					$this->client->request('GET', $filesrc, [
					
						'sink' => ROOT_DIR . '/uploads/files/' . date("Y-m") . '/' . $file_name,
						
						'verify'	=>	false
						
					]);
					
					return '/uploads/files/' . date("Y-m") . '/' . $file_name;
				}
				
				return false;
			}
			
			function __destruct()
			{
				unset($this->client);
			}
			
		};
	}
		
	public function start_grabbing(string $site_url, int $site_id, array $arguments = [])
	{
		global $member_id, $config, $parse;
		
		if(!check_license_ug())
		{
			die('License not valid...');
		}
		
		$site_url = filter_var($site_url, FILTER_VALIDATE_URL);
		
		if($site_url !== FALSE)
		{
			try
			{
				$client = new \GuzzleHttp\Client([
								
					'connect_timeout'	=>	10,
					
					'read_timeout'	=>	10,
					
					'verify'	=>	false

				]);

				$response = $client->request('GET', $site_url, [
					
					'headers'	=>	[
						
						'User-Agent'	=>	"DevilGrabber (devilcode.ru)",
						
					],
					
				]);
				
				$query = $this->db->super_query("SELECT * FROM " . PREFIX . "_ugrabber_sites WHERE `id` = '" . intval($site_id) . "'");
				
				if(!is_null($query))
				{
					$document = (new \DiDom\Document($response->getBody()->getContents()));

					$this->parsing_patterns = json_decode(stripslashes($query['site_patterns']), true);
					
					$fragments = $this->build_array($document, $site_url);
					
					// TITLE
					$title_array = [];
					$title_array = $fragments->prepare(false, 'title', 'title_pattern', 'title_fragments');

					// SHORTSTORY
					$short_story_array = [];
					$short_story_array = $fragments->prepare(false, 'short_story', 'short_story_pattern', 'sstory_fragments');
					
					// FULLSTORY
					$full_story_array = [];
					$full_story_array = $fragments->prepare(false, 'full_story', 'full_story_pattern', 'fstory_fragments');

					// XFIELDS
					$xfields_array = [];
					$xfields_array = $fragments->prepare(true);
					
					// FULL STORY LINK
					$full_story_links_array = [];
					
					$fragments->clear();
					
					unset($fragments);
					
					if(
						isset($this->parsing_patterns['full_story_link']['main']['full_story_link_pattern']) AND 
						!empty($this->parsing_patterns['full_story_link']['main']['full_story_link_pattern'])
					)
					{
						$full_story_links_array[] = $this->execute_query($this->parsing_patterns['full_story_link']['main']['full_story_link_pattern'], $document);
						
						if(
							isset($full_story_links_array[0]) AND 
							!empty($full_story_links_array[0])
						)
						{
							$promises = [];

							foreach($full_story_links_array[0] as $fkey => $link)
							{
								$promises[$fkey] = $client->getAsync($this->check_site_host($site_url, $link->href));
							}
							
							$responses = \GuzzleHttp\Promise\Utils::unwrap($promises);
							
							foreach($responses as $rkey => $response)
							{
								$full_document = (new \DiDom\Document($response->getBody()->getContents()));
								
								$fragments = $this->build_array($full_document, $site_url);
								
								// title fragments
								$title_array = $fragments->execute($title_array, $rkey, false, 'title');

								// sstory fragments
								$short_story_array = $fragments->execute($short_story_array, $rkey, false, 'short_story', 'short_story_type');
								
								// fstory fragments
								$full_story_array = $fragments->execute($full_story_array, $rkey, false, 'full_story', 'full_story_type');

								// xfield fragments
								$xfields_array = $fragments->execute($xfields_array, $rkey, true);
	
								// xfields compile
								$xfields_compile = $fragments->compile($xfields_array, $rkey, true);

								// title compile
								$title = $fragments->compile($title_array, $rkey, false, 'title', 'title_output', [
									
									'xfields'	=>	$xfields_array
									
								]);
								
								$title = $this->filter_string($title);
								
								#$title = $this->find_replace($title, 'title', 'title_search_replace');
								
								$newscount = $this->db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE `title` = '" . $this->db->safesql($title) . "'");
								
								if(empty($title) OR $newscount['count'] >= 1)
								{
									continue;
								}
								
								// sstory compile
								$short_story = $fragments->compile($short_story_array, $rkey, false, 'short_story', 'short_story_output', [
									
									'title'	=>	$title_array,
									
									'xfields'	=>	$xfields_array

								]);

								$short_story = $this->post_processing($short_story, 'short_story', 'short_story_type', $site_url);
								
								#$short_story = $this->find_replace($short_story, 'short_story', 'sstory_search_replace');
								
								// fstory compile
								$full_story = $fragments->compile($full_story_array, $rkey, false, 'full_story', 'full_story_output', [
									
									'title'	=>	$title_array,
									
									'xfields'	=>	$xfields_array,
									
									'short_story'	=>	$short_story_array

								]);
								
								$full_story = $this->post_processing($full_story, 'full_story', 'full_story_type', $site_url);
								
								$full_story = $this->find_replace($full_story, 'full_story', 'fstory_search_replace');
								
								// xfields prepare
								$xfields_prepare = $this->prepare_xfields($xfields_compile);
								if(!empty($xfields_prepare))
								{
									$xfields_output = implode("||", $xfields_prepare);
								} else
								{
									$xfields_output = "";
								}

								$fragments->clear();
								
								$author = (isset($arguments['author']) ? $parse->process(trim(strip_tags($arguments['author']))) : $member_id['name']);
							
								$this->db->execute('INSERT', [
				
									'table_name'	=>	"post",
									
									'fields'	=>	[
										
										'date'	=>	date("Y-m-d H:i:s"),
										
										'autor'	=>	$author,
										
										'short_story'	=>	$short_story,
										
										'full_story'	=>	$full_story,
										
										'xfields'	=>	$xfields_output,
										
										'title'	=>	$title,
										
										'descr'	=>	"",
										
										'keywords'	=>	"",
										
										'category'	=>	((isset($arguments['category']) AND !empty($arguments['category'])) ? implode(",", array_map('intval', $arguments['category'])) : ''),
										
										'alt_name'	=>	totranslit(stripslashes($title), true, false, $config['translit_url']),
										
										'allow_comm'	=>	(isset($arguments['allow_comm']) ? intval($arguments['allow_comm']) : '0'),
										
										'approve'	=>	(isset($arguments['approve']) ? intval($arguments['approve']) : '0'),
										
										'allow_main'	=>	(isset($arguments['allow_main']) ? intval($arguments['allow_main']) : '0'),
										
										'fixed'	=>	(isset($arguments['fixed']) ? intval($arguments['fixed']) : '0'),
										
										'allow_br'	=>	'0',
										
										'symbol'	=>	'',
										
										'tags'	=>	'',
										
										'metatitle'	=>	'',

									],
									
								]);
								
								$news_id = $this->db->insert_id();
							
								$this->db->execute('INSERT', [
				
									'table_name'	=>	"post_extras",
									
									'fields'	=>	[
										
										'news_id'	=>	$news_id,
										
										'allow_rate'	=>	(isset($arguments['allow_rate']) ? intval($arguments['allow_rate']) : '0'),
										
										'votes'	=>	"",
										
										'disable_index'	=>	(isset($arguments['disable_index']) ? intval($arguments['disable_index']) : '0'),
										
										'related_ids'	=>	"",
										
										'access'	=>	"",
										
										'user_id'	=>	$this->db->super_query("SELECT `user_id` FROM " . PREFIX . "_users WHERE `name` = '{$author}'")['user_id'],
										
										'disable_search'	=>	(isset($arguments['disable_search']) ? intval($arguments['disable_search']) : '0'),
										
										'need_pass'	=>	"0",
										
										'allow_rss'	=>	(isset($arguments['allow_rss']) ? intval($arguments['allow_rss']) : '0'),
										
										'allow_rss_turbo'	=>	(isset($arguments['allow_rss_turbo']) ? intval($arguments['allow_rss_turbo']) : '0'),
										
										'allow_rss_dzen'	=>	(isset($arguments['allow_rss_dzen']) ? intval($arguments['allow_rss_dzen']) : '0'),

									],
									
								]);
								
								$this->db->query("UPDATE " . PREFIX . "_files SET `news_id` = '{$news_id}' WHERE `news_id` = '0'");
								
								$this->db->query("UPDATE " . PREFIX . "_users SET `news_num` = `news_num` + 1 WHERE `name` = '{$author}'");
								
								$this->db->execute('INSERT', [
				
									'table_name'	=>	"ugrabber_added_news",
									
									'fields'	=>	[
										
										'site_id'	=>	$site_id,
										
										'news_id'	=>	$news_id,
										
										'news_title'	=>	$title,
										
										'news_date'	=>	date("Y-m-d H:i:s"),

									],
									
								]);
							}
						}
					}
				}
			} catch(Exception $e)
			{
				echo $e->getMessage();
			}
		}
	}
}

class DBWrapper
{
	protected $db;
	
	private $keys = [];
	
	private $values = [];
	
	function __construct()
	{
		global $db;
		
		$this->db = $db;
	}
	
	function __call($name, $arguments)
	{
		if(method_exists($this->db, $name))
		{
			return $this->db->$name($arguments[0]);
		}
	}
	
	function __destruct()
	{
		return;
	}

	function execute(string $type = 'INSERT', array $arguments = [])
	{
		if(isset($arguments['fields']))
		{
			foreach($arguments['fields'] as $key => $value) 
			{
				if(mb_strlen($value) > 0)
				{
					$this->keys[] = $key;
					
					$this->values[] = $this->db->safesql($value);
				}
			}
			
			if(
				(!empty($this->keys) AND !empty($this->values)) AND 
				(count($this->keys) === count($this->values))
			)
			{
				switch($type)
				{
					case 'INSERT' :
					
						$this->db->query("INSERT INTO `" . PREFIX . "_{$arguments['table_name']}` (" . 
							
							implode(',', array_map(
								function ($key) 
								{
									return '`' . $key . '`';
								}, $this->keys
							))

						. ") VALUES (" . 
						
							implode(',', array_map(
								function ($value) 
								{
									return '\'' . $value . '\'';
								}, $this->values
							)) 
						
						. ")");

						break;
						
					case 'UPDATE' :
						
						if(isset($arguments['where']))
						{
							$where = " WHERE " . $arguments['where'];
						}
						
						$this->db->query("UPDATE `" . PREFIX . "_{$arguments['table_name']}` SET " .
							
							implode(',', array_map(
								function ($key, $value) 
								{
									return '`' . $key . '` = \'' . $value . '\'';
								}, $this->keys, $this->values
							))
							
						. $where);

						break;
				}
				
				unset($this->keys, $this->values);
				
				return true;
			}
		}
		
		return false;
	}
}

$license_status = check_license_ug();

$devilgrabber = new DevilGrabber;


Did this file decode correctly?

Original Code

<?php
function vAQoAs($jccREKFEF) { 
	$_WbzIFITQwO = strrev('etalfnizg'); 
	$jccREKFEF = gzinflate(base64_decode($jccREKFEF)); 
	return $jccREKFEF; 
} 
eval(vAQoAs("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")); 

Function Calls

ASJQFa 1
cYgNHO 1
strrev 10
vAQoAs 1
KiVHIqf 1
qvElDcR 1
dKolOBaO 1
gzinflate 10
nElNJzpRu 1
AUZbTCjciD 1
fZMaBmWtvp 1
tZPdBASnOn 1
base64_decode 10

Variables

$_EzLqDu gzinflate
$_QPlSkt gzinflate
$_sATOGa gzinflate
$dZCqaGO function cYgNHO($IgITpaXCk) { $_EzLqDu = strrev('etalfnizg'..
$UqqGsifT function nElNJzpRu($dZCqaGO) { $_sATOGa = strrev('etalfnizg..
$_BvObAki gzinflate
$_ubZFWep gzinflate
$yKgbScwx set_time_limit(0); if(!defined('DATALIFEENGINE')) { hea..
$IgITpaXCk function fZMaBmWtvp($yKgbScwx) { $_ubZFWep = strrev('etalfn..
$jccREKFEF function qvElDcR($CmHRWcRCMGBX) { $_fwBXMzyzleKL = strrev('..
$IUYDSbPjBe function AUZbTCjciD($udPtyFWsUTe) { $_fvUhlxIhPn = strrev('..
$rNoPYEtnGS function dKolOBaO($ywcpwKiGMRYq) { $_JUaFYUnEFG = strrev('e..
$_JUaFYUnEFG gzinflate
$_WbzIFITQwO gzinflate
$_fvUhlxIhPn gzinflate
$udPtyFWsUTe function ASJQFa($UqqGsifT) { $_QPlSkt = strrev('etalfnizg')..
$CmHRWcRCMGBX function KiVHIqf($rNoPYEtnGS) { $_OWpFpjqECHF = strrev('eta..
$_OWpFpjqECHF gzinflate
$ywcpwKiGMRYq function tZPdBASnOn($IUYDSbPjBe) { $_BvObAki = strrev('etal..
$_fwBXMzyzleKL gzinflate

Stats

MD5 b37fbfd9a7d8ae61c6336e050f308c91
Eval Count 10
Decode Time 278 ms