class/Utility.php
<?php
declare(strict_types=1);
namespace XoopsModules\Tdmdownloads;
/*
Utility Class Definition
You may not change or alter any portion of this comment or credits of
supporting developers from this source code or any supporting source code
which is considered copyrighted (c) material of the original comment or credit
authors.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
use Xmf\Request;
/**
* Class Utility
*/
class Utility extends Common\SysUtility
{
//--------------- Custom module methods -----------------------------
/**
* @param $permtype
* @param $dirname
* @return mixed
*/
public function getItemIds($permtype, $dirname)
{
global $xoopsUser;
static $permissions = [];
if (\is_array($permissions) && \array_key_exists($permtype, $permissions)) {
return $permissions[$permtype];
}
/** @var \XoopsModuleHandler $moduleHandler */
$moduleHandler = \xoops_getHandler('module');
$tdmModule = $moduleHandler->getByDirname($dirname);
$groups = \is_object($xoopsUser) ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS;
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = \xoops_getHandler('groupperm');
return $grouppermHandler->getItemIds($permtype, $groups, $tdmModule->getVar('mid'));
}
/**
* retourne le nombre de téléchargements dans le catégories enfants d'une catégorie
* @param \XoopsModules\Tdmdownloads\Tree $mytree
* @param $categories
* @param $entries
* @param $cid
* @return int
*/
public function getNumbersOfEntries($mytree, $categories, $entries, $cid)
{
$count = 0;
$child_arr = [];
if (\in_array($cid, $categories)) {
$child = $mytree->getAllChild($cid);
foreach (\array_keys($entries) as $i) {
/** @var \XoopsModules\Tdmdownloads\Downloads[] $entries */
if ($entries[$i]->getVar('cid') == $cid) {
$count++;
}
foreach (\array_keys($child) as $j) {
if ($entries[$i]->getVar('cid') == $j) {
$count++;
}
}
}
}
return $count;
}
/**
* retourne une image "nouveau" ou "mise à jour"
* @param $time
* @param $status
* @return string
*/
public function getStatusImage($time, $status)
{
global $xoopsModuleConfig;
$moduleDirName = \basename(\dirname(__DIR__));
$helper = Helper::getInstance();
$count = 7;
$new = '';
$startdate = \time() - (86400 * $count);
if (1 == $xoopsModuleConfig['showupdated']) {
if ($startdate < $time) {
$language = $GLOBALS['xoopsConfig']['language'];
if (!\is_dir(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/language/' . $language . '/')) {
$language = 'english';
}
$img_path = XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/language/' . $language . '/';
$img_url = XOOPS_URL . '/modules/' . $moduleDirName . '/language/' . $language . '/';
if (1 == $status) {
if (\is_readable($img_path . 'new.png')) {
$new = ' <img src="' . $img_url . 'new.png" alt="' . _MD_TDMDOWNLOADS_INDEX_NEWTHISWEEK . '" title="' . _MD_TDMDOWNLOADS_INDEX_NEWTHISWEEK . '">';
} else {
$new = ' <img src="' . XOOPS_URL . '/modules/' . $moduleDirName . '/language/english/new.png" alt="' . _MD_TDMDOWNLOADS_INDEX_NEWTHISWEEK . '" title="' . _MD_TDMDOWNLOADS_INDEX_NEWTHISWEEK . '">';
}
} elseif (2 == $status) {
if (\is_readable($img_path . 'updated.png')) {
$new = ' <img src="' . $img_url . 'updated.png" alt="' . _MD_TDMDOWNLOADS_INDEX_UPTHISWEEK . '" title="' . _MD_TDMDOWNLOADS_INDEX_UPTHISWEEK . '">';
} else {
$new = ' <img src="' . XOOPS_URL . '/modules/' . $moduleDirName . '/language/english/updated.png" alt="' . _MD_TDMDOWNLOADS_INDEX_UPTHISWEEK . '" title="' . _MD_TDMDOWNLOADS_INDEX_UPTHISWEEK . '">';
}
}
}
}
return $new;
}
/**
* retourne une image "populaire"
* @param $hits
* @return string
*/
public function getPopularImage($hits)
{
global $xoopsModuleConfig;
$moduleDirName = \basename(\dirname(__DIR__));
$pop = '';
if ($hits >= $xoopsModuleConfig['popular']) {
$language = $GLOBALS['xoopsConfig']['language'];
if (!\is_dir(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/language/' . $language . '/')) {
$language = 'english';
}
$img_path = XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/language/' . $language . '/';
$img_url = XOOPS_URL . '/modules/' . $moduleDirName . '/language/' . $language . '/';
if (\is_readable($img_path . 'popular.png')) {
$pop = ' <img src="' . $img_url . 'popular.png" alt="' . _MD_TDMDOWNLOADS_INDEX_POPULAR . '" title="' . _MD_TDMDOWNLOADS_INDEX_POPULAR . '">';
} else {
$pop = ' <img src ="' . XOOPS_URL . '/modules/' . $moduleDirName . '/language/english/popular.png" alt="' . _MD_TDMDOWNLOADS_INDEX_POPULAR . '" title="' . _MD_TDMDOWNLOADS_INDEX_POPULAR . '">';
}
}
return $pop;
}
/**
* @param int $size
* @return string
*/
public static function prettifyBytes($size)
{
if ($size > 0) {
$mb = 1024 * 1024;
if ($size > $mb) {
$mysize = \sprintf('%01.2f', $size / $mb) . ' MB';
} elseif ($size >= 1024) {
$mysize = \sprintf('%01.2f', $size / 1024) . ' KB';
} else {
$mysize = \sprintf(_AM_TDMDOWNLOADS_NUMBYTES, $size);
}
return $mysize;
}
return '';
}
/**
* @param $global
* @param $key
* @param string $default
* @param string $type
* @return mixed|string
*/
public static function cleanVars($global, $key, $default = '', $type = 'int')
{
switch ($type) {
case 'string':
$ret = isset($global[$key]) ? \filter_var($global[$key], \FILTER_SANITIZE_MAGIC_QUOTES) : $default;
break;
case 'int':
default:
$ret = isset($global[$key]) ? \filter_var($global[$key], \FILTER_SANITIZE_NUMBER_INT) : $default;
break;
}
if (false === $ret) {
return $default;
}
return $ret;
}
/**
* @param $mytree
* @param $key
* @param $category_array
* @param $title
* @param string $prefix
* @return string
*/
public static function getPathTree($mytree, $key, $category_array, $title, $prefix = '')
{
/** @var \XoopsObjectTree $mytree */
$categoryParent = $mytree->getAllParent($key);
$categoryParent = \array_reverse($categoryParent);
$path = '';
foreach (\array_keys($categoryParent) as $j) {
/** @var \XoopsModules\Tdmdownloads\Category[] $categoryParent */
$path .= $categoryParent[$j]->getVar($title) . $prefix;
}
if (\array_key_exists($key, $category_array)) {
/** @var \XoopsModules\Tdmdownloads\Category[] $category_array */
$firstCategory = $category_array[$key]->getVar($title);
} else {
$firstCategory = '';
}
$path .= $firstCategory;
return $path;
}
/**
* @param \XoopsModules\Tdmdownloads\Tree $mytree
* @param $key
* @param $category_array
* @param $title
* @param string $prefix
* @param bool $link
* @param string $order
* @param bool $lasturl
* @return string
*/
public static function getPathTreeUrl($mytree, $key, $category_array, $title, $prefix = '', $link = false, $order = 'ASC', $lasturl = false)
{
global $xoopsModule;
$categoryParent = $mytree->getAllParent($key);
if ('ASC' === $order) {
$categoryParent = \array_reverse($categoryParent);
if ($link) {
$path = '<a href="index.php">' . $xoopsModule->name() . '</a>' . $prefix;
} else {
$path = $xoopsModule->name() . $prefix;
}
} else {
if (\array_key_exists($key, $category_array)) {
/** @var \XoopsModules\Tdmdownloads\Category[] $category_array */
$firstCategory = $category_array[$key]->getVar($title);
} else {
$firstCategory = '';
}
$path = $firstCategory . $prefix;
}
foreach (\array_keys($categoryParent) as $j) {
/** @var \XoopsModules\Tdmdownloads\Category[] $categoryParent */
if ($link) {
$path .= '<a href="viewcat.php?cid=' . $categoryParent[$j]->getVar('cat_cid') . '">' . $categoryParent[$j]->getVar($title) . '</a>' . $prefix;
} else {
$path .= $categoryParent[$j]->getVar($title) . $prefix;
}
}
if ('ASC' === $order) {
if (\array_key_exists($key, $category_array)) {
if ($lasturl) {
$firstCategory = '<a href="viewcat.php?cid=' . $category_array[$key]->getVar('cat_cid') . '">' . $category_array[$key]->getVar($title) . '</a>';
} else {
$firstCategory = $category_array[$key]->getVar($title);
}
} else {
$firstCategory = '';
}
$path .= $firstCategory;
} elseif ($link) {
$path .= '<a href="index.php">' . $xoopsModule->name() . '</a>';
} else {
$path .= $xoopsModule->name();
}
return $path;
}
/**
* Utility::convertStringToSize()
*
* @param mixed $stringSize
* @return mixed|int
*/
public static function convertStringToSize($stringSize)
{
if ('' != $stringSize) {
$kb = 1024;
$mb = 1024 * 1024;
$gb = 1024 * 1024 * 1024;
$size_value_arr = \explode(' ', $stringSize);
if ('B' == $size_value_arr[1]) {
$mysize = $size_value_arr[0];
} elseif ('K' == $size_value_arr[1]) {
$mysize = $size_value_arr[0] * $kb;
} elseif ('M' == $size_value_arr[1]) {
$mysize = $size_value_arr[0] * $mb;
} else {
$mysize = $size_value_arr[0] * $gb;
}
return $mysize;
}
return 0;
}
/**
* Utility::convertSizeToString()
*
* @param mixed $sizeString
* @return string
*/
public static function convertSizeToString($sizeString)
{
$mysizeString = '';
if ('' != $sizeString) {
$size_value_arr = \explode(' ', $sizeString);
if (\array_key_exists(0, $size_value_arr) && \array_key_exists(1, $size_value_arr)) {
if ('' != $size_value_arr[0]) {
$mysizeString = '';
switch ($size_value_arr[1]) {
case 'B':
$mysizeString = $size_value_arr[0] . ' ' . _AM_TDMDOWNLOADS_BYTES;
break;
case 'K':
$mysizeString = $size_value_arr[0] . ' ' . _AM_TDMDOWNLOADS_KBYTES;
break;
case 'M':
$mysizeString = $size_value_arr[0] . ' ' . _AM_TDMDOWNLOADS_MBYTES;
break;
case 'G':
$mysizeString = $size_value_arr[0] . ' ' . _AM_TDMDOWNLOADS_GBYTES;
break;
case 'T':
$mysizeString = $size_value_arr[0] . ' ' . _AM_TDMDOWNLOADS_TBYTES;
break;
}
return $mysizeString;
}
}
}
return $mysizeString;
}
/**
* Utility::getFileSize()
*
* @param mixed $url
* @return int|string
*/
public static function getFileSize($url)
{
if (\function_exists('curl_init') && false !== ($curlHandle = \curl_init($url))) {
\curl_setopt($curlHandle, \CURLOPT_RETURNTRANSFER, true);
\curl_setopt($curlHandle, \CURLOPT_HEADER, true);
\curl_setopt($curlHandle, \CURLOPT_NOBODY, true);
\curl_setopt($curlHandle, \CURLOPT_SSL_VERIFYPEER, true); //TODO: how to avoid an error when 'Peer's Certificate issuer is not recognized'
$curlReturn = \curl_exec($curlHandle);
if (false !== $curlReturn) {
$size = \curl_getinfo($curlHandle, \CURLINFO_CONTENT_LENGTH_DOWNLOAD);
} else {
\trigger_error(\curl_error($curlHandle));
$size = 0;
}
\curl_close($curlHandle);
if ($size <= 0) {
return 0;
}
return self::convertFileSize($size);
}
return 0;
}
/**
* Utility::convertFileSize()
*
* @param mixed $size
* @return string
*/
public static function convertFileSize($size)
{
if ($size > 0) {
$kb = 1024;
$mb = 1024 * 1024;
$gb = 1024 * 1024 * 1024;
if ($size >= $gb) {
$mysize = \sprintf('%01.2f', $size / $gb) . ' ' . 'G';
} elseif ($size >= $mb) {
$mysize = \sprintf('%01.2f', $size / $mb) . ' ' . 'M';
} elseif ($size >= $kb) {
$mysize = \sprintf('%01.2f', $size / $kb) . ' ' . 'K';
} else {
$mysize = \sprintf('%01.2f', $size) . ' ' . 'B';
}
return $mysize;
}
return '';
}
/**
* @param $val
* @return float|int
*/
public static function returnBytes($val)
{
switch (\mb_substr($val, -1)) {
case 'K':
case 'k':
return (int)$val * 1024;
case 'M':
case 'm':
return (int)$val * 1048576;
case 'G':
case 'g':
return (int)$val * 1073741824;
default:
return $val;
}
}
/**
* Includes scripts in HTML header
*/
public static function cpHeader()
{
\xoops_cp_header();
$helper = Helper::getInstance();
//cannot use xoTheme, some conflit with admin gui
echo '<link type="text/css" href="' . XOOPS_URL . '/modules/system/css/ui/' . \xoops_getModuleOption('jquery_theme', 'system') . '/ui.all.css" rel="stylesheet">
<link type="text/css" href="' . $helper->url('/assets/css/publisher.css') .'" rel="stylesheet">
<script type="text/javascript" src="' . $helper->url( '/assets/js/funcs.js') .'"></script>
<script type="text/javascript" src="' . $helper->url( '/assets/js/cookies.js') .'"></script>
<script type="text/javascript" src="' . XOOPS_URL . '/browse.php?Frameworks/jquery/jquery.js"></script>
<!-- <script type="text/javascript" src="' . XOOPS_URL . '/browse.php?Frameworks/jquery/jquery-migrate-1.2.1.js"></script> -->
<script type="text/javascript" src="' . XOOPS_URL . '/browse.php?Frameworks/jquery/plugins/jquery.ui.js"></script>
<script type="text/javascript" src="' . $helper->url( '/assets/js/ajaxupload.3.9.js') .'"></script>
<script type="text/javascript" src="' . $helper->url( '/assets/js/publisher.js') .'"></script>
';
}
/**
* @param string $tablename
* @param string $iconname
* @param string $tabletitle
* @param string $tabledsc
* @param bool $open
*/
public static function openCollapsableBar($tablename = '', $iconname = '', $tabletitle = '', $tabledsc = '', $open = true)
{
$image = 'open12.gif';
$display = 'none';
if ($open) {
$image = 'close12.gif';
$display = 'block';
}
$helper = Helper::getInstance();
echo "<h3 style=\"color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; \"><a href='javascript:;' onclick=\"toggle('" . $tablename . "'); toggleIcon('" . $iconname . "')\">";
echo "<img id='" . $iconname . "' src='" . $helper->url( '/assets/images/links/') . $image . "' alt=''></a> " . $tabletitle . '</h3>';
echo "<div id='" . $tablename . "' style='display: " . $display . ";'>";
if ('' != $tabledsc) {
echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $tabledsc . '</span>';
}
}
/**
* @param string $name
* @param string $icon
*/
public static function closeCollapsableBar($name, $icon)
{
echo '</div>';
$urls = static::getCurrentUrls();
$path = $urls['phpself'];
$cookieName = $path . '_publisher_collaps_' . $name;
$cookieName = \str_replace('.', '_', $cookieName);
$cookie = static::getCookieVar($cookieName, '');
if ('none' === $cookie) {
echo '
<script type="text/javascript">
<!--
toggle("' . $name . '");
toggleIcon("' . $icon . '");
-->
</script>
';
}
}
/**
* @return array
*/
public static function getCurrentUrls()
{
$http = false === \mb_strpos(XOOPS_URL, 'https://') ? 'http://' : 'https://';
// $phpself = $_SERVER['SCRIPT_NAME'];
// $httphost = $_SERVER['HTTP_HOST'];
// $querystring = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
$phpself = Request::getString('SCRIPT_NAME', '', 'SERVER');
$httphost = Request::getString('HTTP_HOST', '', 'SERVER');
$querystring = Request::getString('QUERY_STRING', '', 'SERVER');
if ('' != $querystring) {
$querystring = '?' . $querystring;
}
$currenturl = $http . $httphost . $phpself . $querystring;
$urls = [];
$urls['http'] = $http;
$urls['httphost'] = $httphost;
$urls['phpself'] = $phpself;
$urls['querystring'] = $querystring;
$urls['full'] = $currenturl;
return $urls;
}
/**
* @param string $name
* @param string $default
* @return string
*/
public static function getCookieVar($name, $default = '')
{
// if (isset($_COOKIE[$name]) && ($_COOKIE[$name] > '')) {
// return $_COOKIE[$name];
// } else {
// return $default;
// }
return Request::getString($name, $default, 'COOKIE');
}
}