1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-22 11:41:27 +08:00
xiaochong0302 1bef24f217 1.kg_course表增加索引
2.优化错误页
3.优化富文本内容长度获取
4.优化layer关闭窗口后发布状态同步
2023-09-16 20:51:31 +08:00

769 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
use App\Caches\Setting as SettingCache;
use App\Library\Purifier as HtmlPurifier;
use App\Library\Validators\Common as CommonValidator;
use App\Services\Logic\Url\ShareUrl as ShareUrlService;
use App\Services\Storage as StorageService;
use Phalcon\Config;
use Phalcon\Di;
use Phalcon\Text;
/**
* 获取字符长度
*
* @param string $str
* @return int
*/
function kg_strlen($str)
{
return mb_strlen($str, 'utf-8');
}
/**
* 字符截取
*
* @param string $str
* @param int $start
* @param int $length
* @param string $suffix
* @return string
*/
function kg_substr($str, $start, $length, $suffix = '...')
{
$result = mb_substr($str, $start, $length, 'utf-8');
return $str == $result ? $str : $result . $suffix;
}
/**
* 占位替换
*
* @param string $str
* @param array $data
* @return string
*/
function kg_ph_replace($str, $data = [])
{
if (empty($data)) return $str;
foreach ($data as $key => $value) {
$str = str_replace('{' . $key . '}', $value, $str);
}
return $str;
}
/**
* uniqid封装
*
* @param string $prefix
* @param bool $more
* @return string
*/
function kg_uniqid($prefix = '', $more = false)
{
$prefix = $prefix ?: rand(1000, 9999);
return uniqid($prefix, $more);
}
/**
* json_encode(不转义斜杠和中文)
*
* @param mixed $data
* @return false|string
*/
function kg_json_encode($data)
{
$options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION;
return json_encode($data, $options);
}
/**
* 返回数组中指定的一列
*
* @param array $rows
* @param mixed $columnKey
* @param mixed $indexKey
* @return array
*/
function kg_array_column($rows, $columnKey, $indexKey = null)
{
$result = array_column($rows, $columnKey, $indexKey);
return array_unique($result);
}
/**
* 数组转对象
*
* @param array $array
* @return object
*/
function kg_array_object($array)
{
return json_decode(json_encode($array));
}
/**
* 对象转数组
*
* @param object $object
* @return array
*/
function kg_object_array($object)
{
return json_decode(json_encode($object), true);
}
/**
* ip地址转区域
*
* @param $ip string
* @return array
* @throws Exception
*/
function kg_ip2region($ip)
{
$searcher = new Ip2Region();
$ip2region = $searcher->btreeSearch($ip);
list($country, $area, $province, $city, $isp) = explode('|', $ip2region['region']);
return compact('country', 'area', 'province', 'city', 'isp');
}
/**
* 获取站点基准URL
*
* @return string
*/
function kg_site_url()
{
$scheme = filter_input(INPUT_SERVER, 'REQUEST_SCHEME');
$host = filter_input(INPUT_SERVER, 'HTTP_HOST');
return sprintf('%s://%s', $scheme, $host);
}
/**
* 获取站点设置
*
* @param string $section
* @param string $key
* @return mixed
*/
function kg_setting($section, $key = null)
{
$cache = new SettingCache();
$settings = $cache->get($section);
if (!$key) return $settings;
return $settings[$key] ?? null;
}
/**
* 获取站点配置
*
* @param string $path
* @param mixed $defaultValue
* @return mixed
*/
function kg_config($path, $defaultValue = null)
{
/**
* @var Config $config
*/
$config = Di::getDefault()->getShared('config');
return $config->path($path, $defaultValue);
}
/**
* 获取默认用户头像路径
*
* @return string
*/
function kg_default_user_avatar_path()
{
return '/img/default/user_avatar.png';
}
/**
* 获取默认课程封面路径
*
* @return string
*/
function kg_default_course_cover_path()
{
return '/img/default/course_cover.png';
}
/**
* 获取默认课程封面路径
*
* @return string
*/
function kg_default_package_cover_path()
{
return '/img/default/package_cover.png';
}
/**
* 获取默认专题封面路径
*
* @return string
*/
function kg_default_topic_cover_path()
{
return '/img/default/topic_cover.png';
}
/**
* 获取默认会员封面路径
*
* @return string
*/
function kg_default_vip_cover_path()
{
return '/img/default/vip_cover.png';
}
/**
* 获取默认礼品封面路径
*
* @return string
*/
function kg_default_gift_cover_path()
{
return '/img/default/gift_cover.png';
}
/**
* 获取默认轮播封面路径
*
* @return string
*/
function kg_default_slide_cover_path()
{
return '/img/default/slide_cover.png';
}
/**
* 获取默认分类图标路径
*
* @return string
*/
function kg_default_category_icon_path()
{
return '/img/default/category_icon.png';
}
/**
* 获取存储基准URL
*
* @return string
*/
function kg_cos_url()
{
$storage = new StorageService();
return $storage->getBaseUrl();
}
/**
* 获取存储图片URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_img_url($path, $style = null)
{
if (!$path) return '';
if (Text::startsWith($path, 'http')) {
return $path;
}
$storage = new StorageService();
return $storage->getImageUrl($path, $style);
}
/**
* 获取用户头像URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_user_avatar_url($path, $style = null)
{
$path = $path ?: kg_default_user_avatar_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取课程封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_course_cover_url($path, $style = null)
{
$path = $path ?: kg_default_course_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取套餐封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_package_cover_url($path, $style = null)
{
$path = $path ?: kg_default_package_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取专题封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_topic_cover_url($path, $style = null)
{
$path = $path ?: kg_default_topic_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取会员封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_vip_cover_url($path, $style = null)
{
$path = $path ?: kg_default_vip_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取礼品封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_gift_cover_url($path, $style = null)
{
$path = $path ?: kg_default_gift_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取轮播封面URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_slide_cover_url($path, $style = null)
{
$path = $path ?: kg_default_slide_cover_path();
return kg_cos_img_url($path, $style);
}
/**
* 获取分类图标URL
*
* @param string $path
* @param string $style
* @return string
*/
function kg_cos_category_icon_url($path, $style = null)
{
$path = $path ?: kg_default_category_icon_path();
return kg_cos_img_url($path, $style);
}
/**
* 清除存储图片处理样式
*
* @param string $path
* @return string
*/
function kg_cos_img_style_trim($path)
{
return preg_replace('/!\w+/', '', $path);
}
/**
* 获取编辑器内容长度
*
* @param string $content
* @return int
*/
function kg_editor_content_length($content)
{
$content = trim($content);
$content = strip_tags($content,'<img>');
return kg_strlen($content);
}
/**
* 清理html内容
*
* @param string $content
* @return string
*/
function kg_clean_html($content)
{
$purifier = new HtmlPurifier();
return $purifier->clean($content);
}
/**
* 解析内容摘要
*
* @param string $content
* @param int $length
* @return string
*/
function kg_parse_summary($content, $length = 150)
{
$content = trim(strip_tags($content));
return kg_substr($content, 0, $length);
}
/**
* 解析关键字
*
* @param string $content
* @return string
*/
function kg_parse_keywords($content)
{
$search = ['|', ';', '', '、', ','];
$keywords = str_replace($search, '@', $content);
$keywords = explode('@', $keywords);
$list = [];
foreach ($keywords as $keyword) {
$keyword = trim($keyword);
if (kg_strlen($keyword) > 1) {
$list[] = $keyword;
}
}
return implode('', $list);
}
/**
* 解析内容中上传首图
*
* @param string $content
* @return string
*/
function kg_parse_first_content_image($content)
{
$result = '';
$matched = preg_match('/src="(.*?)\/img\/content\/(.*?)"/', $content, $matches);
if ($matched) {
$url = sprintf('%s/img/content/%s', trim($matches[1]), trim($matches[2]));
$result = kg_cos_img_style_trim($url);
}
return $result;
}
/**
* 隐藏部分字符
*
* @param string $str
* @return string
*/
function kg_anonymous($str)
{
$length = mb_strlen($str);
if (CommonValidator::email($str)) {
$start = 3;
$end = mb_stripos($str, '@');
} elseif (CommonValidator::phone($str)) {
$start = 3;
$end = $length - 4;
} elseif (CommonValidator::idCard($str)) {
$start = 3;
$end = $length - 4;
} else {
$start = ceil($length / 4);
$end = $length - $start - 1;
}
$list = [];
for ($i = 0; $i < $length; $i++) {
$list[] = ($i < $start || $i > $end) ? mb_substr($str, $i, 1) : '*';
}
return join('', $list);
}
/**
* 格式化数字
*
* @param int $number
* @return string
*/
function kg_human_number($number)
{
if ($number > 100000000) {
$result = round($number / 100000000, 1) . '亿';
} elseif ($number > 10000) {
$result = round($number / 10000, 1) . '万';
} elseif ($number > 1000) {
$result = number_format($number);
} else {
$result = $number;
}
return $result;
}
/**
* 格式化大小
*
* @param int $bytes
* @return string
*/
function kg_human_size($bytes)
{
if (!$bytes) return 0;
$symbols = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$exp = floor(log($bytes) / log(1024));
return sprintf('%.2f ' . $symbols[$exp], ($bytes / pow(1024, floor($exp))));
}
/**
* 格式化之前时间
*
* @param int $time
* @return string
*/
function kg_time_ago($time)
{
$diff = time() - $time;
if ($diff > 365 * 86400) {
return date('Y-m-d', $time);
} elseif ($diff > 30 * 86400) {
return floor($diff / 30 / 86400) . '个月前';
} elseif ($diff > 7 * 86400) {
return floor($diff / 7 / 86400) . '周前';
} elseif ($diff > 86400) {
return floor($diff / 86400) . '天前';
} elseif ($diff > 3600) {
return floor($diff / 3600) . '小时前';
} elseif ($diff > 60) {
return floor($diff / 60) . '分钟前';
} else {
return $diff . '秒前';
}
}
/**
* 格式化时长
*
* @param int $time
* @param string $mode
* @return string
*/
function kg_duration($time, $mode = 'simple')
{
$result = '00分钟';
if ($time > 0) {
$hours = floor($time / 3600);
$minutes = floor(($time - $hours * 3600) / 60);
$seconds = $time % 60;
$format = [];
if ($hours > 0) {
$format[] = sprintf('%02d小时', $hours);
}
if ($minutes > 0) {
$format[] = sprintf('%02d分钟', $minutes);
}
if ($seconds > 0) {
$format[] = sprintf('%02d秒', $seconds);
}
if ($mode == 'simple') {
$format = array_slice($format, 0, 2);
}
$result = implode('', $format);
}
return $result;
}
/**
* 构造icon路径
*
* @param string $path
* @param bool $local
* @param string $version
* @return string
*/
function kg_icon_link($path, $local = true, $version = null)
{
$href = kg_static_url($path, $local, $version);
return sprintf('<link rel="shortcut icon" href="%s">', $href);
}
/**
* 构造css路径
*
* @param string $path
* @param bool $local
* @param string $version
* @return string
*/
function kg_css_link($path, $local = true, $version = null)
{
$href = kg_static_url($path, $local, $version);
return sprintf('<link rel="stylesheet" type="text/css" href="%s">', $href);
}
/**
* 构造js引入
*
* @param string $path
* @param bool $local
* @param string $version
* @return string
*/
function kg_js_include($path, $local = true, $version = null)
{
$src = kg_static_url($path, $local, $version);
return sprintf('<script type="text/javascript" src="%s"></script>', $src);
}
/**
* 构造静态url
*
* @param string $path
* @param bool $local
* @param string $version
* @return string
*/
function kg_static_url($path, $local = true, $version = null)
{
/**
* @var Config $config
*/
$config = Di::getDefault()->getShared('config');
$baseUri = rtrim($config->get('static_base_uri'), '/');
$path = ltrim($path, '/');
$url = $local ? $baseUri . '/' . $path : $path;
$version = $version ? $version : $config->get('static_version');
if ($version) {
$url .= '?v=' . $version;
}
return $url;
}
/**
* 构造全路径url
*
* @param mixed $uri
* @param mixed $args
* @return string
*/
function kg_full_url($uri, $args = null)
{
/**
* @var $url Phalcon\Mvc\Url
*/
$url = Di::getDefault()->getShared('url');
$baseUrl = kg_site_url();
return $baseUrl . $url->get($uri, $args);
}
/**
* 构造分享url
*
* @param string $type
* @param int $id
* @param int $referer
* @return string
*/
function kg_share_url($type, $id, $referer = 0)
{
$service = new ShareUrlService();
return $service->handle($type, $id, $referer);
}
/**
* 获取H5首页地址
*
* @return string
*/
function kg_h5_index_url()
{
return kg_site_url() . '/h5/#/pages/index/index';
}