admin/app/platform/modules/system/models/Attachment.php

187 lines
7.4 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: liuyifan
* Date: 2019/3/21
* Time: 16:44
*/
namespace app\platform\modules\system\models;
use app\common\models\BaseModel;
use app\common\services\qcloud\Conf;
class Attachment extends BaseModel
{
/**
* 保存全局设置的数据
*
* @param $set_data
* @param $post_max_size
* @return array
*/
public static function saveGlobal($set_data, $post_max_size)
{
$set_data['thumb_width'] = intval(trim($set_data['thumb_width']));
if ($set_data['thumb'] && !$set_data['thumb_width']) {
return ['msg' => '请设置图片缩略宽度'];
}
$set_data['image_extentions'] = self::check_ext($set_data['image_extentions']);
if (!$set_data['image_extentions']['0']) {
return ['msg' => '请添加支持的图片附件后缀类型'];
}
$set_data['image_limit'] = max(0, min(intval(trim($set_data['image_limit'])), $post_max_size));
$zip_percentage = intval($set_data['zip_percentage']);
if ($zip_percentage <= 0 || $zip_percentage > 100) {
$set_data['image']['zip_percentage'] = 100;
}
$set_data['audio_extentions'] = self::check_ext($set_data['audio_extentions']);
if (!$set_data['audio_extentions']['0']) {
return ['msg' => '请添加支持的音频视频附件后缀类型'];
}
$set_data['audio_limit'] = max(0, min(intval(trim($set_data['audio_limit'])), $post_max_size));
return SystemSetting::settingSave($set_data, 'global', 'system_global') ? ['result' => 1] : ['msg' => '失败'];
}
/**
* 检测后缀名是否合适
*
* @param $extentions
* @return array
*/
public static function check_ext($extentions)
{
$harmtype = array('asp', 'php', 'jsp', 'js', 'css', 'php3', 'php4', 'php5', 'ashx', 'aspx', 'exe', 'cgi');
$extentions = explode("\n", $extentions);
foreach ($extentions as $key => &$row) {
$row = trim($row);
if (in_array($row, $harmtype)) {
unset($extentions[$key]);
continue;
}
}
return $extentions;
}
/**
* 保存远程设置的数据
*
* @param $alioss
* @param $cos
* @param $remote
* @return array
*/
public static function saveRemote($alioss, $cos, $obs, $remote)
{
switch($cos['local']) {
case '南京':
$cos['local'] = 'ap-nanjing';
break;
case '成都':
$cos['local'] = 'ap-chengdu';
break;
case '北京':
$cos['local'] = 'ap-beijing';
break;
case '广州':
$cos['local'] = 'ap-guangzhou';
break;
case '上海':
$cos['local'] = 'ap-shanghai';
break;
case '重庆':
$cos['local'] = 'ap-chongqing';
break;
case '北京金融':
$cos['local'] = 'ap-beijing-fsi';
break;
case '上海金融':
$cos['local'] = 'ap-shanghai-fsi';
break;
case '深圳金融':
$cos['local'] = 'ap-shenzhen-fsi';
break;
case '香港':
$cos['local'] = 'ap-hongkong';
break;
}
$remotes = array(
'type' => intval(request()->type),
'alioss' => array(
'key' => $alioss['key'],
'secret' => !(strpos($alioss['secret'], '*') === FALSE) ? $remote['alioss']['secret'] : $alioss['secret'],
'bucket' => $alioss['bucket'],
'loca_name' => $alioss['loca_name'],
'internal' => $alioss['internal']
),
'cos' => array(
'appid' => trim($cos['appid']),
'secretid' => trim($cos['secretid']),
'secretkey' => !(strpos(trim($cos['secretkey']), '*') === FALSE) ? $remote['cos']['secretkey'] : trim($cos['secretkey']),
'bucket' => trim($cos['bucket']),
'local' => trim($cos['local']),
'url' => trim($cos['url'])
),
'obs' => array(
'key' => trim($obs['key']),
'secret' => !(strpos(trim($obs['secret']), '*') === FALSE) ? $remote['obs']['secret'] : trim($obs['secret']),
'endpoint' => trim($obs['endpoint']),
'bucket' => trim($obs['bucket']),
'url' => trim($obs['url'])
)
);
if ($remotes['type'] == '2') {
$buckets = attachment_alioss_buctkets($remotes['alioss']['key'], $remotes['alioss']['secret']);
if (is_error($buckets)) {
return ['msg' => $buckets['message']];
}
list($remotes['alioss']['bucket'], $remotes['alioss']['url']) = explode('@@', $alioss['bucket']);
if (!$buckets[$remotes['alioss']['bucket']]) {
return ['msg' => $buckets['Bucket不存在或是已经被删除']];
}
$remotes['alioss']['url'] = 'http://' . $remotes['alioss']['bucket'] . '.' . $buckets[$remotes['alioss']['bucket']]['location'] . '.aliyuncs.com';
$remotes['alioss']['ossurl'] = $buckets[$remotes['alioss']['bucket']]['location'] . '.aliyuncs.com';
if ($alioss['url']) {
$url = trim($alioss['url'], '/');
if (!strexists($url, 'http://') && !strexists($url, 'https://')) {
$url = 'http://' . $url;
}
$remotes['alioss']['url'] = $url;
}
$remotes['alioss']['bucket'] = $alioss['bucket'];
} elseif ($remotes['type'] == '4') {
$remotes['cos']['bucket'] = str_replace("-{$remotes['cos']['appid']}", '', trim($remotes['cos']['bucket']));
if (!$remotes['cos']['url']) {
$remotes['cos']['url'] = sprintf('https://%s-%s.cos.%s.myqcloud.com', $remotes['cos']['bucket'], $remotes['cos']['appid'], $remotes['cos']['local']);
}
$remotes['cos']['url'] = rtrim($remotes['cos']['url'], '/');
Conf::$appid = $remotes['cos']['appid'];
Conf::$secretid = $remotes['cos']['secretid'];
Conf::$tsecretkey = $remotes['cos']['secretkey'];
$auth = attachment_cos_auth($remotes['cos']['bucket'], $remotes['cos']['appid'], $remotes['cos']['secretid'], $remotes['cos']['secretkey'], $remotes['cos']['local']);
if (is_error($auth)) {
return ['msg' => $auth['message']];
}
} elseif ($remotes['type'] == '5') {
$remotes['obs']['bucket'] = trim($remotes['obs']['bucket']);
if (!$remotes['obs']['url']) {
$remotes['obs']['url'] = sprintf('https://%s.%s', $remotes['obs']['bucket'], $remotes['obs']['endpoint']);
}
$remotes['obs']['url'] = rtrim($remotes['obs']['url'], '/');
$auth = attachment_obs_auth($remotes['obs']['key'], $remotes['obs']['secret'], $remotes['obs']['endpoint'], $remotes['obs']['bucket']);
if (is_error($auth)) {
return ['msg' => $auth['message']];
}
}
return SystemSetting::settingSave($remotes, 'remote', 'system_remote') ? ['result' => 1] : ['msg' => '失败'];
}
}