Files
b2b.redline.com.pl/modules/newsletterpro/classes/NewsletterProTools.php
2025-06-24 14:14:35 +02:00

563 lines
16 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
class NewsletterProTools
{
public static function getActiveShops()
{
$context = Context::getContext();
$shop_list = [];
if (!method_exists('Shop', 'getContextListShopID')) {
$shops_id = ['1' => (int) $context->shop->id];
} else {
$shops_id = Shop::getContextListShopID();
}
foreach ($shops_id as $key => $shop_id) {
$shop_list[$key] = Shop::getShop((int) $shop_id);
if (!isset($shop_list[$key]['id_shop_group'])) {
$shop_list[$key]['id_shop_group'] = 1;
}
}
return $shop_list;
}
public static function getActiveShopsId()
{
$context = Context::getContext();
if (!method_exists('Shop', 'getContextListShopID')) {
return ['1' => (int) $context->shop->id];
} else {
return Shop::getContextListShopID();
}
}
public static function is17()
{
return version_compare(_PS_VERSION_, '1.7.0.0', '>=');
}
public static function isEmpty($str)
{
$str_trim = trim($str);
return empty($str_trim);
}
public static function addTableAssociationArray($array)
{
foreach ($array as $table_name => $value) {
if (method_exists('Shop', 'addTableAssociation')) {
if (!NewsletterPro::isTableAssociated($table_name)) {
Shop::addTableAssociation($table_name, $value);
}
} elseif (method_exists('Shop', 'addTableAssociationNewsletterPro')) {
if (!NewsletterPro::isTableAssociated($table_name)) {
// mothod verified
Shop::addTableAssociationNewsletterPro($table_name, $value);
}
} else {
$module = NewsletterPro::getInstance();
exit(Tools::displayError(sprintf($module->l('The functions "%s" or "%s" does not exists. Please override the Shop.php file.'), 'Shop::addTableAssociation', 'Shop::addTableAssociationNewsletterPro')));
}
}
}
public static function isFileName($name)
{
return preg_match('/^[a-zA-Z0-9%àâçéèêëîïôûùüÿñæœčšđžćČŠĐĆŽİıÖöÜüÇçĞğŞş₤\s_-]*$/', $name);
}
public static function getFileNameIncrement($filename, $new_filename = null, $increment = 0)
{
if ($increment > 0 && isset($new_filename)) {
$filename = $new_filename;
}
if (!file_exists($filename)) {
return $filename;
}
++$increment;
$info = pathinfo($filename);
$fn = preg_replace('/_\d+$/', '', $info['filename']);
if (is_dir($filename)) {
$nfn = $info['dirname'].'/'.$fn.'_'.$increment;
return self::getFileNameIncrement($filename, $nfn, $increment);
} else {
if (isset($info['extension'])) {
$nfn = $info['dirname'].'/'.$fn.'_'.$increment.'.'.$info['extension'];
return self::getFileNameIncrement($filename, $nfn, $increment);
} else {
$nfn = $info['dirname'].'/'.$fn.'_'.$increment;
return self::getFileNameIncrement($filename, $nfn, $increment);
}
}
}
public static function unSerialize($serialized)
{
if (is_string($serialized) && preg_match('/a:[0-9]+:\{.*\}/', $serialized)) {
$return = @unserialize($serialized);
if (false === $return) {
// in case the serialization is corrupted
$serialized = preg_replace_callback('/s:(\d+):"(.*?)";/', function ($m) {
return 's:'.Tools::strlen($m[2]).':"'.$m[2].'";';
}, $serialized);
$return = @unserialize($serialized);
if (false === $return) {
return [];
}
}
return $return;
}
return [];
}
public static function isBase64($s)
{
return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s);
}
public static function dbSerialize($value)
{
return addcslashes(serialize($value), "\x00..\x2C./:;<=>?@[\\]^`{|}~");
}
public static function addCShashes($str)
{
return addcslashes($str, "\x00..\x2C./:;<=>?@[\\]^`{|}~");
}
public static function strSize($string)
{
if (function_exists('mb_strlen')) {
$size = mb_strlen($string, '8bit');
} else {
$size = Tools::strlen($string);
}
return $size;
}
/**
* Get xml errors as string.
*
* @param object $error An xml error object
* @param object $xml An intance of the xml object
*
* @return string
*/
public static function displayXMLError($error, $xml)
{
$return = $xml[$error->line - 1];
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim($error->message)." Line: $error->line Column: $error->column";
if ($error->file) {
$return .= " File: $error->file";
}
return $return;
}
public static function normalizePath($path)
{
$parts = [];
$path = str_replace('\\', '/', $path);
$path = preg_replace('/\/+/', '/', $path);
$segments = explode('/', $path);
$test = '';
foreach ($segments as $segment) {
if ('.' != $segment) {
$test = array_pop($parts);
if (is_null($test)) {
$parts[] = $segment;
} elseif ('..' == $segment) {
if ('..' == $test) {
$parts[] = $test;
}
if ('..' == $test || '' == $test) {
$parts[] = $segment;
}
} else {
$parts[] = $test;
$parts[] = $segment;
}
}
}
return implode('/', $parts);
}
public static function strToHex($str)
{
return unpack('H*', $str);
}
public static function hexToStr($str)
{
if (preg_match('/^0x/i', $str)) {
$str = preg_replace('/^0x/i', '', $str);
}
return pack('H*', $str);
}
public static function recurseCopy($src, $dst)
{
$dir = opendir($src);
@mkdir($dst);
while (false !== ($file = readdir($dir))) {
if (('.' != $file) && ('..' != $file)) {
if (is_dir($src.'/'.$file)) {
self::recurseCopy($src.'/'.$file, $dst.'/'.$file);
} else {
copy($src.'/'.$file, $dst.'/'.$file);
}
}
}
closedir($dir);
}
public static function getIdShopGroup($context = null)
{
if (!isset($context)) {
$context = Context::getContext();
}
if (class_exists('ShopGroup')) {
return $context->shop->id_shop_group;
} else {
return $context->shop->id_group_shop;
}
}
public static function getInShopGroupColumnName()
{
if (class_exists('ShopGroup')) {
return 'id_shop_group';
}
return 'id_group_shop';
}
public static function createFolder($path = false, $path_thumbs = false)
{
$oldumask = umask(0);
if ($path && !file_exists($path)) {
mkdir($path, 0777, true);
}
if ($path_thumbs && !file_exists($path_thumbs)) {
mkdir($path_thumbs, 0777, true);
}
umask($oldumask);
}
public static function blockNewsletterExists()
{
$sql = "SELECT COUNT(*) AS `count`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '"._DB_NAME_."'
AND TABLE_NAME = '"._DB_PREFIX_."newsletter';";
return Db::getInstance()->getValue($sql);
}
public static function closeConnection($content = null)
{
@ob_implicit_flush(true);
@ob_end_clean();
@ob_start();
echo $content;
$size = ob_get_length();
header("Content-Length: $size");
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
if (session_id()) {
session_write_close();
}
}
public static function getTableColumns($table_name)
{
$columns_db = Db::getInstance()->executeS('
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`="'._DB_NAME_.'"
AND `table_name`="'._DB_PREFIX_.pSQL($table_name).'";
');
$columns = [];
foreach ($columns_db as $column) {
$columns[] = $column['column_name'];
}
return $columns;
}
public static function tableExists($table_name)
{
$table_name = _DB_PREFIX_.$table_name;
return count(Db::getInstance()->executeS('SHOW TABLES LIKE "'.pSQL($table_name).'"'));
}
public static function columnExists($table, $name)
{
return Db::getInstance()->getValue(
"
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = '"._DB_NAME_."'
AND TABLE_NAME = '"._DB_PREFIX_.pSQL($table)."'
AND COLUMN_NAME = '".pSQL($name)."'"
);
}
public static function getDbColumns($table_name)
{
$columns_array = [];
$columns = Db::getInstance()->executeS(
"
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = '"._DB_NAME_."'
AND TABLE_NAME = '"._DB_PREFIX_.pSQL($table_name)."'"
);
foreach ($columns as $row) {
$columns_array[] = $row['COLUMN_NAME'];
}
return $columns_array;
}
/**
* List files from folder.
*
* @param string $path
* @param string $regex
*
* @return objects
*/
public static function getDirectoryIterator($path, $regex)
{
$directory = new DirectoryIterator($path);
$result = new RegexIterator($directory, $regex, RecursiveRegexIterator::MATCH);
return $result;
}
public static function deleteDirAndFiles($path)
{
$succeed = [];
$it = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file) {
if ($file->isDir()) {
$succeed[] = rmdir($file->getRealPath());
} else {
$succeed[] = unlink($file->getRealPath());
}
}
$succeed[] = rmdir($path);
return !in_array(false, $succeed);
}
public static function languageExists($id_lang, $check_active = false)
{
return (int) Db::getInstance()->getValue('
SELECT `id_lang`
FROM `'._DB_PREFIX_.'lang`
WHERE `id_lang` = "'.(int) $id_lang.'"
'.($check_active ? ' AND `active` = 1 ' : '').'
');
}
public static function getTemplatePath($path)
{
$module = NewsletterPro::getInstance();
$template_name = pathinfo($path, PATHINFO_BASENAME);
$rel_path = preg_replace('/^.*'.$module->name.'(\/|\\\)/', '', $path);
$template = _PS_THEME_DIR_.'modules/'.$module->name.'/'.$rel_path;
if (file_exists($template)) {
return $template;
} else {
return $path;
}
}
public static function hasTemplatePath($path)
{
$module = NewsletterPro::getInstance();
$template_name = pathinfo($path, PATHINFO_BASENAME);
$rel_path = preg_replace('/^.*'.$module->name.'(\/|\\\)/', '', $path);
$template = _PS_THEME_DIR_.'modules/'.$module->name.'/'.$rel_path;
return file_exists($template);
}
public static function loadTemplatePath($path)
{
$module = NewsletterPro::getInstance();
$template_name = pathinfo($path, PATHINFO_BASENAME);
$rel_path = preg_replace('/^.*'.$module->name.'(\/|\\\)/', '', $path);
$template = _PS_THEME_DIR_.'modules/'.$module->name.'/'.$rel_path;
return $template;
}
/**
* @return NewsletterPro
*/
public static function module()
{
return NewsletterPro::getInstance();
}
public static function getMin($filename)
{
$info = pathinfo($filename);
return (bool) pqnp_config('LOAD_MINIFIED') ? $info['filename'].'.min.'.$info['extension'] : $info['filename'].'.'.$info['extension'];
}
public static function getCSS($basename)
{
if (version_compare(_PS_VERSION_, '1.6.0.0', '<')) {
return NewsletterProTools::module()->uri_location.'views/css/1.5/'.$basename;
} elseif (version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
return NewsletterProTools::module()->uri_location.'views/css/1.6/'.$basename;
} else {
return NewsletterProTools::module()->uri_location.'views/css/1.7/'.$basename;
}
}
public static function getVersion()
{
if (version_compare(_PS_VERSION_, '1.6.0.0', '<')) {
return '1.5';
} elseif (version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
return '1.6';
} else {
return '1.7';
}
}
public static function getJsDefContent($data = null)
{
if (!isset($data)) {
return '';
}
$output = [];
foreach ($data as $variable => $variable_value) {
if (is_array($variable_value)) {
$output[] = 'var '.$variable.' = '.Tools::jsonEncode($variable_value).';';
} elseif (is_string($variable_value)) {
$output[] = 'var '.$variable.' = \''.addcslashes($variable_value, '\'').'\';';
} elseif (is_numeric($variable_value)) {
$output[] = 'var '.$variable.' = '.(int) $variable_value.';';
} elseif (is_bool($variable_value)) {
$output[] = 'var '.$variable.' = '.(bool) $variable_value.';';
}
}
return "\t".implode("\n\t", $output);
}
public static function getJsDefScript($data = null, $extend = '')
{
return "\t<script type=\"text/javascript\">\n".NewsletterProTools::getJsDefContent($data)."\n\t".trim($extend)."\n\t</script>";
}
public static function getDbVersion()
{
return Db::getInstance()->getValue('SELECT `version` FROM `'._DB_PREFIX_.'module` WHERE `name` = "'.self::module()->name.'"');
}
public static function isValidHook($hook_name)
{
$count = (int) Db::getInstance()->getValue('
SELECT COUNT(*) FROM `'._DB_PREFIX_.'hook`
WHERE `name` = "'.pSQL($hook_name).'"
');
if ($count > 0) {
return true;
}
$count = (int) Db::getInstance()->getValue('
SELECT COUNT(*) FROM `'._DB_PREFIX_.'hook_alias`
WHERE `name` = "'.pSQL($hook_name).'"
OR `alias` = "'.pSQL($hook_name).'"
');
if ($count > 0) {
return true;
}
return false;
}
public static function getUri($params = [])
{
return self::module()->link.(count($params) > 0 ? '&'.http_build_query($params) : '');
}
}