作者 Karson

新增附件区分本地或远程字段

新增Backend.api.cdnurl方法用于获取资源cdn的地址
修复附件列表图片显示的BUG
修复边栏头像大小显示的BUG
移除日志记录中的含有password的密码字段
修复个人资料中显示其它管理员日志的BUG
... ... @@ -199,6 +199,7 @@ class Ajax extends Backend
'mimetype' => $fileInfo['type'],
'url' => $uploadDir . $splInfo->getSaveName(),
'uploadtime' => time(),
'storage' => 'local',
'sha1' => $sha1,
);
model("attachment")->create(array_filter($params));
... ...
... ... @@ -39,14 +39,19 @@ class Attachment extends Backend
->order($sort, $order)
->limit($offset, $limit)
->select();
$cdnurl = preg_replace("/\/(\w+)\.php$/i", '', $this->request->root());
foreach ($list as $k => &$v)
{
$v['fullurl'] = ($v['storage'] == 'local' ? $cdnurl : $this->view->config['upload']['cdnurl']) . $v['url'];
}
unset($v);
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
/**
* 选择附件
*/
... ...
... ... @@ -27,11 +27,13 @@ class Profile extends Backend
$total = $model
->where($where)
->where('admin_id', $this->auth->id)
->order($sort, $order)
->count();
$list = $model
->where($where)
->where('admin_id', $this->auth->id)
->order($sort, $order)
->limit($offset, $limit)
->select();
... ...
... ... @@ -10,5 +10,6 @@ return [
'Mimetype' => 'mime类型',
'Extparam' => '透传数据',
'Createtime' => '创建日期',
'Uploadtime' => '上传时间'
'Uploadtime' => '上传时间',
'Storage' => '存储引擎'
];
... ...
... ... @@ -21,7 +21,7 @@ class AdminLog extends Model
$content = request()->param();
foreach ($content as $k => $v)
{
if (is_string($v) && strlen($v) > 200)
if (is_string($v) && strlen($v) > 200 || stripos($k, 'password') !== false)
{
unset($content[$k]);
}
... ...
... ... @@ -6,7 +6,7 @@
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('delete')}
{:build_toolbar('refresh,delete')}
<div class="dropdown btn-group">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
<ul class="dropdown-menu text-left" role="menu">
... ...
... ... @@ -6,7 +6,7 @@
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('delete')}
{:build_toolbar('refresh,delete')}
</div>
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
... ...
... ... @@ -6,7 +6,7 @@
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('delete')}
{:build_toolbar('refresh,delete')}
</div>
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
... ...
... ... @@ -2,7 +2,7 @@
<div class="form-group">
<label for="c-upyun" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" name="row[upyun]" id="c-upyun" class="form-control" cols="60" />
<input type="text" name="row[upyun]" id="c-upyun" class="form-control" />
</div>
</div>
... ... @@ -16,7 +16,7 @@
<div class="form-group">
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" name="row[local]" id="c-local" class="form-control" cols="60" />
<input type="text" name="row[local]" id="c-local" class="form-control" />
</div>
</div>
... ... @@ -30,7 +30,13 @@
<div class="form-group">
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload by summernote')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea name="row[summernote]" id="c-summernote" cols="30" rows="5" class="summernote"></textarea>
<textarea name="row[summernote]" id="c-summernote" cols="60" rows="5" class="summernote"></textarea>
</div>
</div>
<div class="form-group hidden layer-footer">
<div class="col-xs-2"></div>
<div class="col-xs-12 col-sm-8">
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
... ...
... ... @@ -54,6 +54,12 @@
<input type="datetime" name="row[uploadtime]" value="{$row.uploadtime|datetime}" id="c-uploadtime" class="form-control datetimepicker" />
</div>
</div>
<div class="form-group">
<label for="c-storage" class="control-label col-xs-12 col-sm-2">{:__('Storage')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" name="row[storage]" value="{$row.storage}" id="c-storage" class="form-control" />
</div>
</div>
<div class="form-group hide layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
... ...
... ... @@ -37,7 +37,8 @@ class Upyun extends Frontend
'mimetype' => $this->request->param("mimetype"),
'extparam' => $extparam,
'url' => $url,
'uploadtime' => $time
'uploadtime' => $time,
'storage' => 'upyun'
);
model("attachment")->create(array_filter($params));
echo "success";
... ...
... ... @@ -106,9 +106,8 @@ body {
font-weight: normal;
}
.user-panel > .image img {
width: 100%;
max-width: 45px;
max-height: 45px;
width: 45px;
height: 45px;
}
/*panel扩展描述样式*/
.panel-intro {
... ...
... ... @@ -62,6 +62,10 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], function ($
}
return url;
},
//获取修复后可访问的cdn链接
cdnurl: function (url) {
return /^(?:[a-z]+:)?\/\//i.test(url) ? url : Config.upload.cdnurl + url;
},
//查询Url参数
query: function (name, url) {
if (!url) {
... ...
... ... @@ -29,7 +29,7 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
{field: 'imagewidth', title: __('Imagewidth')},
{field: 'imageheight', title: __('Imageheight')},
{field: 'imagetype', title: __('Imagetype')},
{field: 'imageframes', title: __('Imageframes')},
{field: 'storage', title: __('Storage')},
{field: 'filesize', title: __('Filesize')},
{field: 'mimetype', title: __('Mimetype')},
{field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime},
... ... @@ -112,18 +112,14 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
formatter: {
thumb: function (value, row, index) {
if (row.mimetype.indexOf("image") > -1) {
var reg = /ajax\/upload$/;
if (reg.test(Config.upload.uploadurl)) {
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank"><img src="' + Config.upload.cdnurl + value + '" alt="" style="max-height:90px;max-width:120px"></a>';
} else {
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank"><img src="' + Config.upload.cdnurl + value + '!/fwfh/50x50" alt=""></a>';
}
var style = row.storage == 'upyun' ? '!/fwfh/120x90' : '';
return '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + style + '" alt="" style="max-height:90px;max-width:120px"></a>';
} else {
return '';
return '<a href="' + row.fullurl + '" target="_blank">' + __('None') + '</a>';
}
},
url: function (value, row, index) {
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank" class="label bg-green">' + value + '</a>';
return '<a href="' + Backend.api.cdnurl(value) + '" target="_blank" class="label bg-green">' + value + '</a>';
},
}
}
... ...
... ... @@ -39,12 +39,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'upload'], function (
Form.api.bindevent($("#update-form"), null, function () {
$("input[name='row[password]']").val('');
var url = Config.upload.cdnurl + $("#c-avatar").val();
var url = Backend.api.cdnurl($("#c-avatar").val());
top.window.$(".user-panel .image img,.user-menu > a > img,.user-header > img").prop("src", url);
return true;
});
Upload.api.custom.changeavatar = function (response) {
var url = Config.upload.cdnurl + response.url;
var url = Backend.api.cdnurl(response.url);
$(".profile-user-img").prop("src", url);
};
}
... ...
... ... @@ -204,7 +204,7 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
$("body").addClass(cls);
store('skin', cls);
var cssfile = Config.upload.cdnurl + "/assets/css/skins/" + cls + ".css";
var cssfile = Backend.api.cdnurl("/assets/css/skins/" + cls + ".css");
$('head').append('<link rel="stylesheet" href="' + cssfile + '" type="text/css" />');
}
return false;
... ...
... ... @@ -6479,6 +6479,10 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], f
}
return url;
},
//获取修复后可访问的cdn链接
cdnurl: function (url) {
return /^(?:[a-z]+:)?\/\//i.test(url) ? url : Config.upload.cdnurl + url;
},
//查询Url参数
query: function (name, url) {
if (!url) {
... ... @@ -7852,7 +7856,7 @@ define('table',['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap
return '<i class="' + value + '"></i> ' + value;
},
image: function (value, row, index) {
return '<img class="img-rounded img-sm" src="' + (value.indexOf("http") === 0 ? '' : Config.upload.cdnurl) + value + '" />';
return '<img class="img-rounded img-sm" src="' + Backend.api.cdnurl(value) + '" />';
},
status: function (value, row, index, custom) {
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
... ... @@ -8492,7 +8496,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'temp
if (!j) {
return true;
}
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Config.upload.cdnurl + j});
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Backend.api.cdnurl(j)});
$("#" + preview_id).append(html);
});
});
... ... @@ -11078,7 +11082,7 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
//依次上传图片
for (var i = 0; i < files.length; i++) {
Upload.api.send(files[i], function (data) {
var url = Config.upload.cdnurl + data.url;
var url = Backend.api.cdnurl(data.url);
$(that).summernote("insertImage", url, 'filename');
});
}
... ...
... ... @@ -219,7 +219,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'], func
//依次上传图片
for (var i = 0; i < files.length; i++) {
Upload.api.send(files[i], function (data) {
var url = Config.upload.cdnurl + data.url;
var url = Backend.api.cdnurl(data.url);
$(that).summernote("insertImage", url, 'filename');
});
}
... ...
... ... @@ -272,7 +272,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
return '<i class="' + value + '"></i> ' + value;
},
image: function (value, row, index) {
return '<img class="img-rounded img-sm" src="' + (value.indexOf("http") === 0 ? '' : Config.upload.cdnurl) + value + '" />';
return '<img class="img-rounded img-sm" src="' + Backend.api.cdnurl(value) + '" />';
},
status: function (value, row, index, custom) {
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
... ...
... ... @@ -134,7 +134,7 @@ define(['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'template'], f
if (!j) {
return true;
}
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Config.upload.cdnurl + j});
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Backend.api.cdnurl(j)});
$("#" + preview_id).append(html);
});
});
... ...
... ... @@ -140,9 +140,8 @@ body {
}
.user-panel > .image img{
width:100%;
max-width:45px;
max-height:45px;
width:45px;
height:45px;
}
/*panel扩展描述样式*/
... ...