Files
Pichome/dzz/pichome/storagesetting.php
2024-05-17 19:54:27 +08:00

287 lines
13 KiB
PHP
Raw Permalink 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
if (!defined('IN_OAOOA')) {//所有的php文件必须加上此句防止被外部调用
exit('Access Denied');
}
Hook::listen('adminlogin');
include_once libfile('function/cache');
$do = isset($_GET['do']) ? trim($_GET['do']) : '';
if (isset($_G['setting'])) $setting = $_G['setting'];
else $setting = C::t('setting')->fetch_all();
if ($do == 'addspace') {
$bz = $_GET['bz'];
IO::authorize($bz);
exit();
} elseif ($do == 'getstoragelist') {
$spacelist = C::t('connect_storage')->fetch_all_space();
exit(json_encode($spacelist));
} elseif ($do == 'deletespace') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
if (!$id) exit(json_encode(array('success' => false, 'msg' => '参数非法')));
$connectdata = C::t('connect_storage')->fetch($id);
$bzpath = $connectdata['bz'] . ':' . $id . ':';
if (DB::result_first("select count(appid) from %t where `path` like %s and isdelete < 1", array('pichome_vapp', $bzpath . '%'))) {
exit(json_encode(array('success' => false, 'msg' => '有使用此存储位置的库,请先删除库后再执行此操作')));
} elseif (DB::result_first("select count(aid) from %t where remote = %d", array('attachment', $id))) {
exit(json_encode(array('success' => false, 'msg' => '站点有文件在当前存储位置,请删除后再执行此操作')));
} else {
C::t('connect_storage')->delete($id);
exit(json_encode(array('success' => true)));
}
} elseif ($do == 'setdefault') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
if (!$id) exit(json_encode(array('success' => false)));
$space = C::t('connect_storage')->fetch($id);
if ($space['hostname']) $hostdataarr = explode(':', $space['hostname']);
else $hostdataarr = [];
$defaultspacesettingdata = [
'bucket' => $space['bucket'],
'bz' => $space['bz'],
'remoteid' => $space['id'],
'region' => ($space['bz'] == 'ALIOSS') ? $space['hostname'] : ($hostdataarr[1] ? $hostdataarr[1] : ''),
'did' => $space['id'],
'host' => $space['host'],
];
if (DB::update('connect_storage', ['isdefault' => 1], 'id =' . $id)) {
DB::update('connect_storage', ['isdefault' => 0], 'id !=' . $id);
C::t('setting')->update('defaultspacesetting', $defaultspacesettingdata);
updatecache('setting');
}
exit(json_encode(array('success' => true)));
} elseif ($do == 'getsettingdata') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$connectdata = C::t('connect_storage')->fetch($id);
if ($connectdata['bz'] == 'dzz') {
$connectdata['gdstatus'] = extension_loaded('GD') ? 1 : 0;
$connectdata['imagickstatus'] = extension_loaded('imagick') ? 1 : 0;
$ffmpegbinaries = (getglobal('config/pichomeffmpegposition')) ? getglobal('config/pichomeffmpegposition') : (strstr(PHP_OS, 'WIN') ? DZZ_ROOT . 'dzz\ffmpeg\ffmpeg\ffmpeg.exe' : '/usr/bin/ffmpeg');
$ffprobebinaries = (getglobal('config/pichomeffprobeposition')) ? (getglobal('config/pichomeffprobeposition')) : (strstr(PHP_OS, 'WIN') ? DZZ_ROOT . 'dzz\ffmpeg\ffmpeg\ffprobe.exe' : '/usr/bin/ffprobe');
$connectdata['mediastate'] = 1;
if (!function_exists('proc_open') || !is_executable($ffmpegbinaries) || !is_executable($ffprobebinaries)) {
$connectdata['mediastate'] = 0;
}
if ($connectdata['docstatus']) {
$app = C::t('app_market')->fetch_by_identifier('onlyoffice_view', 'dzz');
$connectdata['officedata'] = unserialize($app['extra']);
}
if ($connectdata['imagestatus']) {
$connectdata['imagelib'] = getglobal('setting/imagelib') ? 'imagick' : 'gd';
}
} elseif ($connectdata['bz'] == 'QCOS') {
$hostarr = explode(':', $connectdata['hostname']);
$config = [
'secretId' => trim($connectdata['access_id']),
'secretKey' => dzzdecode($connectdata['access_key'], 'QCOS'),
'region' => $hostarr[1],
'schema' => $hostarr[0],
'bucket' => trim($connectdata['bucket']),
];
include_once DZZ_ROOT . 'dzz' . BS . 'qcos' . BS . 'class' . BS . 'class_video.php';
$video = new \video($config);
$connectdata['mediastate'] = $video->check_videobucket();
$connectdata['docstate'] = $video->check_docbucket();
if (!$connectdata['mediastate'] && $connectdata['mediastatus']) C::t('connect_storage')->update($id, array('mediastatus' => 0));
if (!$connectdata['docstate'] && $connectdata['docstatus']) C::t('connect_storage')->update($id, array('docstatus' => 0));
}
exit(json_encode($connectdata));
} elseif ($do == 'videosetting') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$setarr['mediastatus'] = intval($_GET['mediastatus']);
$setarr['videoquality'] = intval($_GET['videoquality']);
$connectdata = C::t('connect_storage')->fetch($id);
if ($connectdata['bz'] == 'dzz') {
//获取ffmpeg应用信息
$app = C::t('app_market')->fetch_by_identifier('ffmpeg', 'dzz');
$appextra = unserialize($app['extra']);
$appextra['status'] = $setarr['mediastatus'];
if (C::t("app_market")->update($app['appid'], array("extra" => serialize($appextra)))) {
C::t('connect_storage')->update($id, $setarr);
updateMediaStatus('dzz::', $setarr['mediastatus']);
} else {
exit(json_encode(array('success' => false, 'msg' => 'ffmpeg开启失败')));
}
} elseif ($connectdata['bz'] == 'QCOS') {
if ($setarr['mediastatus']) {
$hostarr = explode(':', $connectdata['hostname']);
$config = [
'secretId' => trim($connectdata['access_id']),
'secretKey' => dzzdecode($connectdata['access_key'], 'QCOS'),
'region' => $hostarr[1],
'schema' => $hostarr[0],
'bucket' => trim($connectdata['bucket']),
];
include_once DZZ_ROOT . 'dzz' . BS . 'qcos' . BS . 'class' . BS . 'class_video.php';
$video = new \video($config);
if ($video->check_videobucket()) {
C::t('connect_storage')->update($id, $setarr);
updateMediaStatus('QCOS:' . $id . ':', $setarr['mediastatus']);
// dfsockopen(getglobal('localurl') . 'index.php?mod=pichome&op=convert', 0, '', '', false, '', 1);
} else {
exit(json_encode(array('success' => false, 'msg' => '请检查存储桶是否开启媒体处理')));
}
} else {
C::t('connect_storage')->update($id, $setarr);
updateMediaStatus('QCOS:' . $id . ':', $setarr['mediastatus']);
}
}
exit(json_encode(array('success' => true)));
} elseif ($do == 'docsetting') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$setarr['docstatus'] = intval($_GET['docstatus']);
$connectdata = C::t('connect_storage')->fetch($id);
if ($connectdata['bz'] == 'dzz') {
$app = C::t('app_market')->fetch_by_identifier('onlyoffice_view', 'dzz');
$appextra = unserialize($app['extra']);
$extra["DocumentUrl"] = trim($_GET['onlyofficeurl']);
$extra["FileUrl"] = $_GET['fileurl'] ? trim($_GET['fileurl']) : '';
$extra["exts"] = $_GET['exts'] ? trim($_GET['exts']) : '';
$extra["secret"] = $_GET['secret'] ? trim($_GET['secret']) : '';
C::t("app_market")->update($app['appid'], array("extra" => serialize($extra)));
if ($setarr['docstatus']) {
$onlyDocumentUrl = rtrim(str_replace('web-apps/apps/api/documents/api.js', '', $extra["DocumentUrl"]), '/') . '/web-apps/apps/api/documents/api.js';
C::t('app_market')->update($app['appid'], ['available' => 1]);
} else {
C::t('app_market')->update($app['appid'], ['available' => 0]);
}
//updatesetting($setting, $settingnew);
C::t('connect_storage')->update($id, $setarr);
updateDocStatus('dzz::', $setarr['docstatus']);
} elseif ($connectdata['bz'] == 'QCOS') {
if ($setarr['docstatus']) {
$hostarr = explode(':', $connectdata['hostname']);
$config = [
'secretId' => trim($connectdata['access_id']),
'secretKey' => dzzdecode($connectdata['access_key'], 'QCOS'),
'region' => $hostarr[1],
'schema' => $hostarr[0],
'bucket' => trim($connectdata['bucket']),
];
include_once DZZ_ROOT . 'dzz' . BS . 'qcos' . BS . 'class' . BS . 'class_video.php';
$video = new \video($config);
if ($video->check_docbucket()) {
C::t('connect_storage')->update($id, $setarr);
updateDocStatus('QCOS:' . $id . ':', $setarr['docstatus']);
} else {
exit(json_encode(array('success' => false, 'msg' => '请检查存储桶是否开启文档处理')));
}
} else {
C::t('connect_storage')->update($id, $setarr);
updateDocStatus('QCOS:' . $id . ':', $setarr['docstatus']);
}
}
exit(json_encode(array('success' => true)));
} elseif ($do == 'imagesetting') {
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$setarr['imagestatus'] = intval($_GET['imagestatus']);
$connectdata = C::t('connect_storage')->fetch($id);
if ($connectdata['bz'] == 'dzz') {
$settingnew['imagelib'] = (trim($_GET['imagelib']) == 'gd') ? 0 : 1;
updatesetting($setting, $settingnew);
updateThumbStatus('dzz::', $setarr['imagestatus']);
} else {
updateThumbStatus('QCOS:' . $id . ':', $setarr['imagestatus']);
}
C::t('connect_storage')->update($id, $setarr);
exit(json_encode(array('success' => true)));
} else {
$storagelist = C::t('connect')->fetch_all_by_available();
}
$themeid = isset($_G['setting']['pichometheme']) ? intval($_G['setting']['pichometheme']) : 1;
$themedata = getthemedata($themeid);
$lefsetdata = $themedata['singlepage'];
function updatesetting($setting, $settingnew)
{
$updatecache = false;
$settings = array();
$updatethumb = false;
foreach ($settingnew as $key => $val) {
if ($setting[$key] != $val) {
$updatecache = TRUE;
if (in_array($key, array('timeoffset', 'regstatus', 'oltimespan', 'seccodestatus'))) {
$val = (float)$val;
}
$settings[$key] = $val;
}
}
if ($settings) {
C::t('setting')->update_batch($settings);
}
if ($updatecache) {
updatecache('setting');
}
return true;
}
function updateMediaStatus($k, $status)
{
$cachename = 'PICHOMECONVERTSTATUS';
$convertstatus = C::t('cache')->fetch_cachedata_by_cachename($cachename);
if (!$convertstatus) {
$convertstatus = [];
$app = C::t('app_market')->fetch_by_identifier('ffmpeg', 'dzz');
$appextra = unserialize($app['extra']);
$convertstatus['dzz::'] = $appextra['status'];
foreach (DB::fetch_all("select id,bz,mediastatus from %t where 1", array('connect_storage')) as $v) {
if ($v['bz'] == 'dzz') continue;
$key = $v['bz'] . ':' . $v['id'] . ':';
$convertstatus[$key] = intval($v['mediastatus']);
}
}
$convertstatus[$k] = $status;
$setarr = ['cachekey' => $cachename, 'cachevalue' => serialize($convertstatus), 'dateline' => time()];
C::t('cache')->insert_cachedata_by_cachename($setarr);
}
function updateDocStatus($k, $status)
{
$cachename = 'PICHOMEDOCSTATUS';
$convertstatus = C::t('cache')->fetch_cachedata_by_cachename($cachename);
if (!$convertstatus) {
$convertstatus = [];
$app = C::t('app_market')->fetch_by_identifier('onlyoffice_view', 'dzz');
$appextra = unserialize($app['extra']);
$convertstatus['dzz::'] = $appextra['status'];
foreach (DB::fetch_all("select id,bz,docstatus from %t where 1", array('connect_storage')) as $v) {
if ($v['bz'] == 'dzz') continue;
$key = $v['bz'] . ':' . $v['id'] . ':';
$convertstatus[$key] = intval($v['docstatus']);
}
}
$convertstatus[$k] = $status;
$setarr = ['cachekey' => $cachename, 'cachevalue' => serialize($convertstatus), 'dateline' => time()];
C::t('cache')->insert_cachedata_by_cachename($setarr);
}
function updateThumbStatus($k, $status)
{
$cachename = 'PICHOMETHUMBSTATUS';
$convertstatus = C::t('cache')->fetch_cachedata_by_cachename($cachename);
if (!$convertstatus) {
$convertstatus = [];
foreach (DB::fetch_all("select id,bz,imagestatus from %t where 1", array('connect_storage')) as $v) {
if ($v['bz'] == 'dzz') {
$key = $v['bz'] . '::';
} else {
$key = $v['bz'] . ':' . $v['id'] . ':';
}
$convertstatus[$key] = intval($v['imagestatus']);
}
}
$convertstatus[$k] = $status;
$setarr = ['cachekey' => $cachename, 'cachevalue' => serialize($convertstatus), 'dateline' => time()];
C::t('cache')->insert_cachedata_by_cachename($setarr);
}
$theme = GetThemeColor();
include template('admin/pc/page/adminstorage');