* @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"; } 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) : ''); } }