Files
Pichome/dzz/pichome/library.php
2022-01-29 10:44:42 +08:00

295 lines
15 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')) {
exit('Access Denied');
}
Hook::listen('adminlogin');//检查是否登录,未登录跳转到登录界面
global $_G;
$dzzroot = str_replace(BS, '/', DZZ_ROOT);
$operation = isset($_GET['operation']) ? trim($_GET['operation']) : '';
if ($operation == 'fetch') {
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
if (submitcheck('settingsubmit')) {
if (!$appid) exit(json_encode(array('error' => true)));
$setarr = [
'filter' => isset($_GET['filter']) ? serialize($_GET['filter']) : '',
'share' => isset($_GET['share']) ? intval($_GET['share']) : 0,
'download' => isset($_GET['download']) ? intval($_GET['download']) : 0,
'getinfo' => isset($_GET['getinfo']) ? intval($_GET['getinfo']) : 0,
'allowext' => isset($_GET['allowext']) ? trim($_GET['allowext']) : '',
'notallowext' => isset($_GET['notallowext']) ? trim($_GET['notallowext']) : '',
];
C::t('pichome_vapp')->update($appid, $setarr);
if($setarr['getinfo']){
//开启器获取信息后执行获取文件信息
dfsockopen(getglobal('localurl') . 'index.php?mod=imageColor&op=index', 0, '', '', false, '', 1);
dfsockopen(getglobal('localurl') . 'index.php?mod=ffmpeg&op=getinfo', 0, '', '', false, '', 1);
dfsockopen(getglobal('localurl') . 'index.php?mod=ffmpeg&op=thumb', 0, '', '', false, '', 1);
}
exit(json_encode(array('success' => true)));
} else {
if ($data = DB::fetch_first("select * from %t where appid=%s and isdelete = 0 ", array('pichome_vapp', $appid))) {
if($data['charset'] != CHARSET)$data['convertpath'] = diconv($data['path'],$data['charset'],CHARSET);
else $data['convertpath'] = $data['path'];
$data['path'] = urlencode($data['path']);
$data['filter'] = unserialize($data['filter']);
$getinfonum = 0;
$data['getinfonum'] = DB::result_first("SELECT count(ra.rid) FROM %t ra left join %t fc on ra.rid = fc.rid left join %t ic on ra.rid= ic.rid
where ra.appid = %s and ((ra.isget = 0 and ISNULL(fc.rid) and ISNULL(ic.rid)) or (ra.isget=1))",
array('pichome_resources_attr','pichome_ffmpeg_record','pichome_imagickrecord',$appid));
$catdata = C::t('pichome_taggroup')->fetch_by_appid($appid);
if (($data['state'] == 2)) {
$processname = 'DZZ_PAGEEXPORTFILE_LOCK_' . $appid;
$locked = true;
if (!dzz_process::islocked($processname, 60 * 5)) {
$locked = false;
}
if ($locked) {
dfsockopen(getglobal('localurl') . 'index.php?mod=pichome&op=exportfile&appid=' . $appid, 0, '', '', false, '', 1);
}
} elseif ($data['state'] == 3) {
$processname = 'DZZ_PAGEEXPORTCHECKFILE_LOCK_' . $appid;
$locked = true;
if (!dzz_process::islocked($processname, 60 * 5)) {
$locked = false;
}
if ($locked) {
dfsockopen(getglobal('localurl') . 'index.php?mod=pichome&op=exportfilecheck&appid=' . $appid, 0, '', '', false, '', 1);
}
}
exit(json_encode(array('success' => true, 'data' => $data, 'catdata' => $catdata)));
} else {
exit(json_encode(array('error' => true)));
}
}
}
elseif ($operation == 'getdata') {
$data = array();
foreach (DB::fetch_all("select * from %t where isdelete = 0 order by disp", array('pichome_vapp')) as $val) {
$val['connect'] = (is_dir($val['path'])) ? 1:0;
if($val['charset'] != CHARSET){
//echo $val['path'];die;
$val['path'] = diconv($val['path'], $val['charset'], CHARSET);
}
$data[] = $val;
}
exit(json_encode(array('data' => $data)));
} elseif($operation == 'getinfonum'){//已获取文件信息个数
$returndata = [];
foreach(DB::fetch_all("select appid from %t where isdelete = 0 and getinfo = 1 and `type` = 1 and getinfonum < filenum", array('pichome_vapp')) as $v){
$getinfonum= DB::result_first("SELECT count(ra.rid) FROM %t ra left join %t fc on ra.rid = fc.rid left join %t ic on ra.rid= ic.rid
where ra.appid = %s and ((ra.isget = 0 and ISNULL(fc.rid) and ISNULL(ic.rid)) or (ra.isget=1))",
array('pichome_resources_attr','pichome_ffmpeg_record','pichome_imagickrecord',$v['appid']));
C::t('pichome_vapp')->update($v['appid'],array('getinfonum'=>$getinfonum));
$returndata['appid'] = $getinfonum;
}
exit(json_encode(array('data' => $returndata)));
}
elseif ($operation == 'addlibrary') {
//接收路径
$path = isset($_GET['path']) ? trim($_GET['path']) : '';
//接收编码
$charset = isset($_GET['charset']) ? trim($_GET['charset']) : 'utf8';
//转换路径
$path = str_replace('/', BS, $path);
//获取库名称
$appname = getbasename($path);
//转换编码防止路径找不到linux下中文乱码前端展示为正常编码依据前端传递编码转换出原路径存储
if (CHARSET != $charset) $path = diconv($path, CHARSET, $charset);
//存在相同路径的不允许重复添加
if (DB::result_first("select appid from %t where path = %s and isdelete = 0", array('pichome_vapp', $path))) {
exit(json_encode(array('error' => '库已存在,不允许重复添加')));
}
$type = isset($_GET['type']) ? intval($_GET['type']) : 0;
$force = isset($_GET['force']) ? intval($_GET['force']) : 0;
if ($type == 0) {
$metajsonfile = $path . BS . 'metadata.json';
if (!is_file($metajsonfile)) {
exit(json_encode(array('error' => '系统检测该库不符合eagle库标准不能作为eagle库添加')));
}
$appname = str_replace('.library', '', $appname);
}
if ($type == 2) {
$dbfile = $path . BS . '.bf'.BS.'billfish.db';
if (!is_file($dbfile)) {
exit(json_encode(array('tips' => '系统检测该库不符合billfish库标准不能作为billfish库添加')));
}
}
if ($type == 1 && !$force) {
$metajsonfile = $path . BS . 'metadata.json';
if (is_file($metajsonfile) && is_dir($path . BS . 'images')) {
exit(json_encode(array('tips' => '系统检测该目录可能为eagle库您确认要作为普通目录导入吗')));
}
}
if ($type == 1 && !$force) {
$dbfile = $path . BS . '.bf'.BS.'billfish.db';
if (is_file($dbfile)) {
exit(json_encode(array('tips' => '系统检测该目录可能为billfish库您确认要作为普通目录导入吗')));
}
}
$appattr = [
'appname' => $appname,
'uid' => $_G['uid'],
'username' => $_G['username'],
'personal' => 1,
'dateline' => TIMESTAMP,
'type' => $type,
'path' => $path,
'charset' => $charset,
'notallowext'=>getglobal('setting/pichomeimportnotallowext'),
'allowext'=>getglobal('setting/pichomeimportallowext'),
'filter' => 'a:13:{i:0;a:3:{s:3:"key";s:8:"classify";s:4:"text";s:6:"分类";s:7:"checked";s:1:"1";}i:1;a:4:{s:3:"key";s:3:"tag";s:4:"text";s:6:"标签";s:7:"checked";s:1:"1";s:8:"showtype";s:1:"0";}i:2;a:3:{s:3:"key";s:5:"color";s:4:"text";s:6:"颜色";s:7:"checked";s:1:"1";}i:3;a:3:{s:3:"key";s:4:"link";s:4:"text";s:6:"链接";s:7:"checked";s:1:"1";}i:4;a:3:{s:3:"key";s:4:"desc";s:4:"text";s:6:"注释";s:7:"checked";s:1:"1";}i:5;a:3:{s:3:"key";s:8:"duration";s:4:"text";s:6:"时长";s:7:"checked";s:1:"1";}i:6;a:3:{s:3:"key";s:4:"size";s:4:"text";s:6:"尺寸";s:7:"checked";s:1:"1";}i:7;a:3:{s:3:"key";s:3:"ext";s:4:"text";s:6:"类型";s:7:"checked";s:1:"1";}i:8;a:3:{s:3:"key";s:5:"shape";s:4:"text";s:6:"形状";s:7:"checked";s:1:"1";}i:9;a:3:{s:3:"key";s:5:"grade";s:4:"text";s:6:"评分";s:7:"checked";s:1:"1";}i:10;a:3:{s:3:"key";s:5:"btime";s:4:"text";s:12:"添加时间";s:7:"checked";s:1:"1";}i:11;a:3:{s:3:"key";s:8:"dateline";s:4:"text";s:12:"修改日期";s:7:"checked";s:1:"1";}i:12;a:3:{s:3:"key";s:5:"mtime";s:4:"text";s:12:"创建日期";s:7:"checked";s:1:"1";}}'
];
if ($type == 1) $appattr['allowext'] = $Defaultallowext;
$path = str_replace(array('/', './', '\\'), BS, $path);
if (strpos($path, DZZ_ROOT) !== 0) $appattr['iswebsitefile'] = 0;
$appid = C::t('pichome_vapp')->insert($appattr);
if ($appid) {
$appattr['appid'] = $appid;
$appattr['path'] = $_GET['path'];
exit(json_encode(array('data' => $appattr)));
} else {
exit(json_encode(array('error' => 'create failer')));
}
}
elseif($operation == 'changePath'){
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$path = isset($_GET['path']) ? trim($_GET['path']):'';
//接收编码
$charset = isset($_GET['charset']) ? trim($_GET['charset']) : 'utf8';
//转换路径
$path = str_replace('/', BS, $path);
//转换编码防止路径找不到linux下中文乱码前端展示为正常编码依据前端传递编码转换出原路径存储
if (CHARSET != $charset) $path = diconv($path, CHARSET, $charset);
//存在相同路径的不允许重复添加
if (DB::result_first("select appid from %t where path = %s and isdelete = 0", array('pichome_vapp', $path))) {
exit(json_encode(array('tips' => '路径对应库已存在,不允许修改')));
}else{
$appdata = C::t('pichome_vapp')->fetch($appid);
}
if(!$appdata) exit(json_encode(array('tips' => '库不存在或已被删除,不允许修改')));
$type = $appdata['type'];
if ($type == 0) {
$metajsonfile = $path . BS . 'metadata.json';
if (!is_file($metajsonfile)) {
exit(json_encode(array('error' => '系统检测该库不已符合eagle库标准修改失败')));
}
}
if ($type == 2) {
$dbfile = $path . BS . '.bf'.BS.'billfish.db';
if (!is_file($dbfile)) {
exit(json_encode(array('tips' => '系统检测该库已不符合billfish库标准修改失败')));
}
}
//if(!is_dir($path)) exit(json_encode(array('tips' => '系统检测该库准,修改失败')));
if (strpos($path, DZZ_ROOT) !== 0) $iswebsitefile = 0;
else $iswebsitefile = 1;
if (C::t('pichome_vapp')->update($appid, array('path' => $path,'iswebsitefile'=>$iswebsitefile))) {
//dfsockopen(getglobal('localurl') . 'index.php?mod=pichome&op=initexport&appid='.$appid, 0, '', '', false, '', 0.1);
exit(json_encode(array('success' => true)));
} else {
exit(json_encode(array('error' => true)));
}
}
elseif ($operation == 'dellibrary') {
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
//if (C::t('pichome_vapp')->update($appid, array('isdelete' => 1,'deluid'=>getglobal('uid'),'delusername'=>getglobal('username')))) {
if (C::t('pichome_vapp')->update($appid, array('isdelete' => 1))) {
dfsockopen(getglobal('localurl') . 'index.php?mod=pichome&op=delete', 0, '', '', false, '', 0.1);
exit(json_encode(array('success' => true)));
} else {
exit(json_encode(array('error' => true)));
}
}
elseif ($operation == 'getpath') {
require_once(DZZ_ROOT . './dzz/class/class_encode.php');
$path = isset($_GET['path']) ? trim($_GET['path']) : '';
$gettype = isset($_GET['gettype']) ? intval($_GET['gettype']) : 0;
$charset = isset($_GET['charset']) ? trim($_GET['charset']) : CHARSET;
$path = str_replace('/', BS, $path);
if (CHARSET != $charset) $path = diconv($path, CHARSET, $charset);
if ($gettype && !$path) {
$path = (PHP_OS == 'Linux') ? '/' : '';
} elseif (!$path) {
$path = DZZ_ROOT . 'library';
}
if (!empty($Defaultnotallowdir)) {
$notallowdir = getglobal('setting/pichomeimportnotdir') ? getglobal('setting/pichomeimportnotdir'):implode(',',$Defaultallowext);
$notallowdir = str_replace(array('.', ',','+','$',"'",'^','(',')','[',']','{','}'), array('\.', '|','\+','\$',"'",'\^','\(',')','\[','\]','\{','\}'), $notallowdir);
$notallowdir = str_replace('*', '.*', $notallowdir);
}
$datas = [];
if ($path == '') {
$diskarr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
foreach ($diskarr as $v) {
if (is_dir($v . ':')) {
$datas[] = ['path' => $v . ':', 'charset' => CHARSET];
}
}
$datas[] = ['path' => DZZ_ROOT . 'library', 'charset' => CHARSET, 'type' => 1];
} else {
if (is_dir($path) && !$gettype) {
if ($dh = @opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..' && is_dir($path . BS . $file) && !preg_match('/^(' . $notallowdir . ')$/i', $file)) {
$returnfile = trim($file);
$p = new Encode_Core();
$charset = $p->get_encoding($file);
$returnfile = diconv($returnfile, $charset, CHARSET);
$datas[] = ['path' => $returnfile, 'charset' => $charset];
}
}
//关闭
closedir($dh);
}
} elseif ($gettype) {
if (is_dir($path)) {
if ($dh = @opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..' && !preg_match('/^(' . $notallowdir . ')$/i', $file) && (strpos($file, '.') !== 0) && is_dir($path . BS . $file)) {
$returnfile = $path . $file;
$p = new Encode_Core();
$charset = $p->get_encoding($file);
$returnfile = diconv($returnfile, $charset, CHARSET);
$datas[] = ['path' => $returnfile, 'charset' => $charset];
}
}
//关闭
closedir($dh);
}
}
$datas[] = ['path' => DZZ_ROOT . 'library', 'charset' => CHARSET, 'type' => 1];
}
}
exit(json_encode(array('data' => $datas)));
}
elseif ($operation == 'sort') {
$appids = isset($_GET['appids']) ? trim($_GET['appids']) : '';
if (submitcheck('settingsubmit')) {
if (!$appids) exit(json_encode(array('error' => true)));
$appidarr = explode(',', $appids);
$setarr = [];
foreach($appidarr as $k=>$v){
$setarr['disp'] = $k;
C::t('pichome_vapp')->update($v,$setarr);
}
exit(json_encode(array('success' => true)));
}
}else {
$theme = GetThemeColor();
include template('pc/page/library');
}
function getbasename($filename)
{
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}