%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/Helpers.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\libs; use Yii; use yii\base\InvalidArgumentException; use yii\base\Exception; /** * This class contains a lot of html helpers for the views * * @since 0.5 */ class Helpers { /** * Shorten a text string * * @param string $text - Text string you will shorten * @param integer $length - Count of characters to show * @return string */ public static function truncateText($text, $length): string { return self::trimText($text, $length); } public static function trimText($text, $length): string { $text = trim(preg_replace('#<br */?>#i', ' ', $text)); $length = abs((int)$length); if (mb_strlen($text) > $length) { $text = trim(mb_substr($text, 0, $length)) . '...'; } return $text; } /** * Compare two arrays values * @param array $a - First array to compare against.. * @param array $b - Second array * * convert Objects: Helpers::arrayCompVal((array)$obj1, (array)$obj2) * * */ public static function arrayCompVal($a, $b) { if (!is_array($a) || !is_array($b)) { return false; } sort($a); sort($b); return $a == $b; } /** * Temp Function to use UTF8 SubStr * @deprecated since 1.11 Use mb_substr() instead. * * @param string $str * @param integer $from * @param integer $len * @return string */ public static function substru($str, $from, $len): string { return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,' . $from . '}' . '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,' . $len . '}).*#s', '$1', $str); } /** * Get a readable time format from seconds * @param string $sekunden - Seconds you will formatting * */ public static function getFormattedTime($sekunden) { $minus = ''; if ($sekunden < 0) { $sekunden *= -1; $minus = '-'; } $minuten = bcdiv($sekunden, '60', 0); $stunden = bcdiv($minuten, '60', 0); $minuten = bcmod($minuten, '60'); if ($minuten < 10) { $minuten = '0' . $minuten; } $stunden = bcmod($stunden, '24'); return $minus . $stunden . ':' . $minuten; } /** * Returns bytes of a PHP Ini Setting Value * E.g. 10M will converted into 10485760 * * Source: http://php.net/manual/en/function.ini-get.php * * @param String $val * @return int bytes * @deprecated bug on PHP7 "A non well formed numeric value encountered" * @see \humhub\libs\Helpers::getBytesOfIniValue instead */ public static function GetBytesOfPHPIniValue($val) { $val = trim($val); $last = strtolower($val[strlen($val) - 1]); switch ($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } /** * Returns bytes of a PHP Ini Setting Value * E.g. 10M will converted into 10485760 * * Source: http://php.net/manual/en/function.ini-get.php#96996 * * @param string $valueString * @return int bytes * @throws InvalidParamException */ public static function getBytesOfIniValue($valueString) { if ($valueString === null || $valueString === '') { return 0; } if ($valueString === false) { throw new InvalidArgumentException('Your configuration option of ini_get function does not exist.'); } switch (substr($valueString, -1)) { case 'M': case 'm': return (int)$valueString * 1048576; case 'K': case 'k': return (int)$valueString * 1024; case 'G': case 'g': return (int)$valueString * 1073741824; default: return (int)$valueString; } } /** * Returns a unique string * * @return string unique */ public static function GetUniqeId() { return str_replace('.', '', uniqid('', true)); } /** * Checks if the class has this class as one of its parents * * @param string $className * @param string $type * @return boolean */ public static function CheckClassType($className, $type = '') { $className = preg_replace('/[^a-z0-9_\-\\\]/i', '', $className); if (is_array($type)) { foreach ($type as $t) { if (class_exists($className) && is_a($className, $t, true)) { return true; } } } else { if (class_exists($className) && is_a($className, $type, true)) { return true; } } throw new Exception("Invalid class type! (" . $className . ")"); } /** * Check for sameness of two strings using an algorithm with timing * independent of the string values if the subject strings are of equal length. * * The function can be useful to prevent timing attacks. For example, if $a and $b * are both hash values from the same algorithm, then the timing of this function * does not reveal whether or not there is a match. * * NOTE: timing is affected if $a and $b are different lengths or either is not a * string. For the purpose of checking password hash this does not reveal information * useful to an attacker. * * @see http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/ * @see http://codereview.stackexchange.com/questions/13512 * @see https://github.com/ircmaxell/password_compat/blob/master/lib/password.php * * @param string $a First subject string to compare. * @param string $b Second subject string to compare. * @return bool true if the strings are the same, false if they are different or if * either is not a string. */ public static function same($a, $b) { if (!is_string($a) || !is_string($b)) { return false; } $mb = function_exists('mb_strlen'); $length = $mb ? mb_strlen($a, '8bit') : strlen($a); if ($length !== ($mb ? mb_strlen($b, '8bit') : strlen($b))) { return false; } $check = 0; for ($i = 0; $i < $length; $i += 1) { $check |= (ord($a[$i]) ^ ord($b[$i])); } return $check === 0; } /** * Set sql_mode=TRADITIONAL for mysql server. * * This static function is intended as closure for on afterOpen raised by yii\db\Connection and * should be configured in dynamic.php like this: 'on afterOpen' => ['humhub\libs\Helpers', 'SqlMode'], * * This is mainly required for grouped notifications. * * @param $event * @since 1.2.1 */ public static function SqlMode($event) { /* set sql_mode only for mysql */ if ($event->sender->driverName == 'mysql') { try { $event->sender->createCommand('SET SESSION sql_mode=""; SET SESSION sql_mode="NO_ENGINE_SUBSTITUTION"')->execute(); } catch (\Exception $ex) { Yii::error('Could not switch SQL mode: ' . $ex->getMessage()); } } } }