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

1532 lines
66 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');
}
$operation = isset($_GET['operation']) ? trim($_GET['operation']) : '';
global $_G;
if ($operation == 'addsearch') {//增加关键词搜索次数
$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$ktype = isset($_GET['ktype']) ? intval($_GET['ktype']) : 0;
if (!$keyword) exit();
C::t('pichome_searchrecent')->add_search($keyword, $appid, $ktype);
} elseif ($operation == 'getsearchtag') {//最近搜索标签和热门标签
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$percachename = 'pichome_searchhot';
$hotdatas = false;
$hotdatas = C::t('cache')->fetch($percachename . $appid);
if (!$hotdatas) {
$tmpkey = $percachename . $appid;
$hotdatas = C::t('pichome_searchrecent')->fetch_hotkeyword_by_appid($appid);
$setarr = ['cachekey' => $tmpkey, 'cachevalue' => serialize($hotdatas), 'dateline' => time()];
C::t('cache')->insert($setarr);
} else {
$hotdatas = unserialize($hotdatas['cachevalue']);
}
//$hottags = C::t('pichome_tag')->fetch_data_by_hot();
exit(json_encode(array('hottags' => $hotdatas)));
} elseif ($operation == 'getsearchfolder') {//最近搜索目录和目录信息
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$pfids = isset($_GET['pfids']) ? trim($_GET['pfids']):'';
if($pfids)$pfids = explode(',',$pfids);
else $pfids = [];
$folderdatanum = C::t('pichome_folder')->fetch_folder_by_appid_pfid($appid,$pfids);
exit(json_encode(array( 'folderdatanum' => $folderdatanum)));
}elseif($operation == 'searchfolderbyname'){
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']):'';
$folderdatanum = C::t('pichome_folder')->search_by_fname($keyword,$appid);
exit(json_encode(array( 'folderdata' => $folderdatanum)));
} elseif ($operation == 'searchmenu_num') {
$hassub = isset($_GET['hassub']) ? intval($_GET['hassub']) : 0;
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
//是否获取标签数量
$hasnum = isset($_GET['hasnum']) ? intval($_GET['hasnum']):0;
$prepage = 15;
$pagelimit = 'limit '.($page - 1) * $prepage . ',' . $prepage;
$cid = isset($_GET['cid']) ? trim($_GET['cid']) : '';
$tagkeyword = isset($_GET['tagkeyword']) ? htmlspecialchars($_GET['tagkeyword']) : '';
$skey = isset($_GET['skey']) ? trim($_GET['skey']) : '';
// $wheresql = " 1 ";
if ($skey == 'tag') {
$sql = " %t rt left join %t r on rt.rid=r.rid ";
$params = [ 'pichome_resourcestag','pichome_resources'];
//$wheresql = " r.isdelete < 1 ";
}else{
$sql = " %t r ";
$params = ['pichome_resources'];
}
$wheresql = " r.isdelete < 1 ";
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$fids = isset($_GET['fids']) ? trim($_GET['fids']) : '';
$vappids = [];
foreach(DB::fetch_all("select appid,path from %t where isdelete = 0",array('pichome_vapp')) as $v){
if(is_dir($v['path'])){
$vappids[] = $v['appid'];
}
}
if(empty($vappids)){
$wheresql .= ' and 0';
}else{
if ($appid) {
$wheresql .= ' and r.appid = %s and r.appid in(%n)';
$para[] = $appid;
$para[] = $vappids;
if(!$fids && !$hassub){
$sql .= " LEFT JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$wheresql .= ' and ISNULL(fr.fid)';
}
}else{
$wheresql .= ' and r.appid in(%n)';
$para[] = $vappids;
}
}
if ($fids) {
if ($fids == 'not') {
$sql .= " left JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$wheresql .= ' and ISNULL(fr.fid)';
} else {
$sql .= " left JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$fidarr = explode(',', $fids);
$childsqlarr = [];
if ($hassub) {
foreach ($fidarr as $v) {
if ($v == 'not') $childsqlarr[] = " ISNULL(fr.fid) ";
else {
if (!in_array('pichome_folder', $params)) {
$sql .= ' left JOIN %t f1 on f1.fid=fr.fid ';
$params[] = 'pichome_folder';
}
$childsqlarr[] = " f1.pathkey like %s ";
$tpathkey = DB::result_first("select pathkey from %t where fid = %s", array('pichome_folder', $v));
$para[] = $tpathkey . '%';
}
}
if (count($childsqlarr) > 1) $wheresql .= ' and (' . implode(' or ', $childsqlarr) . ')';
else $wheresql .= ' and ' . $childsqlarr[0];
} else {
if (in_array('not', $fidarr)) {
$nindex = array_search('not', $fidarr);
unset($fids[$nindex]);
$wheresql .= ' and (fr.fid in(%n) or ISNULL(fr.fid))';
} else {
$wheresql .= ' and fr.fid in(%n)';
}
$para[] = $fidarr;
}
}
}
//添加日期
if (isset($_GET['btime'])) {
$btime = explode('_', $_GET['btime']);
$bstart = strtotime($btime[0]);
$bend = strtotime($btime[1]) + 24 * 60 * 60;
if ($bstart) {
$wheresql .= " and r.btime > %d";
//将时间补足13位
$para[] = $bstart * 1000;
}
if ($bend) {
$wheresql .= " and r.btime < %d";
//将时间补足13位
$para[] = $bend * 1000;
}
}
//修改日期
if (isset($_GET['dateline'])) {
$dateline = explode('_', $_GET['dateline']);
$dstart = strtotime($dateline[0]);
$dend = strtotime($dateline[1]) + 24 * 60 * 60;
if ($dstart) {
$wheresql .= " and r.dateline > %d";
//将时间补足13位
$para[] = $dstart * 1000;
}
if ($dend) {
$wheresql .= " and r.dateline < %d";
//将时间补足13位
$para[] = $dend * 1000;
}
}
//创建日期
if (isset($_GET['mtime'])) {
$mtime = explode('_', $_GET['mtime']);
$mstart = strtotime($mtime[0]);
$mend = strtotime($mtime[1]) + 24 * 60 * 60;
if ($mstart) {
$wheresql .= " and r.mtime > %d";
//将时间补足13位
$para[] = $mstart * 1000;
}
if ($mend) {
$wheresql .= " and r.mtime < %d";
//将时间补足13位
$para[] = $mend * 1000;
}
}
//评分条件
if (isset($_GET['grade'])) {
$grade = trim($_GET['grade']);
$grades = explode(',', $grade);
$wheresql .= " and r.grade in(%n)";
$para[] = $grades;
}
//类型条件
if (isset($_GET['ext'])) {
$ext = trim($_GET['ext']);
$exts = explode(',', $ext);
$wheresql .= " and r.ext in(%n)";
$para[] = $exts;
}
//时长条件
if (isset($_GET['duration'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$durationarr = explode('_', $_GET['duration']);
$dunit = isset($_GET['dunit']) ? trim($_GET['dunit']) : 's';
if ($durationarr[0]) {
$wheresql .= " and ra.duration >= %d";
$para[] = ($dunit == 'm') ? $durationarr[0] * 60 : $durationarr[0];
}
if ($durationarr[1]) {
$wheresql .= " and ra.duration <= %d";
$para[] = ($dunit == 'm') ? $durationarr[1] * 60 : $durationarr[1];
}
}
//标注条件
if (isset($_GET['comments'])) {
$sql .= " left join %t c on r.rid = c.rid";
$params[] = 'pichome_comments';
$comments = intval($_GET['comments']);
$cval = isset($_GET['cval']) ? trim($_GET['cval']) : '';
if (!$comments) {
$wheresql .= " and isnull(c.annotation) ";
} else {
if ($cval) {
$cvalarr = explode(',', $cval);
$cvalwhere = [];
foreach ($cvalarr as $cv) {
$cvalwhere[] = " c.annotation like %s";
$para[] = '%' . $cv . '%';
}
$wheresql .= " and (" . implode(" or ", $cvalwhere) . ")";
} else {
$wheresql .= " and !isnull(c.annotation)";
}
}
}
//注释条件
if (isset($_GET['desc'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$desc = intval($_GET['desc']);
$descval = isset($_GET['descval']) ? trim($_GET['descval']) : '';
if (!$desc) {
$wheresql .= " and (isnull(ra.desc) or ra.desc='') ";
} else {
if ($descval) {
$descvalarr = explode(',', $descval);
$descvalwhere = [];
foreach ($descvalarr as $dv) {
$descvalwhere[] = " ra.desc like %s";
$para[] = '%' . $dv . '%';
}
$wheresql .= " and (" . implode(" or ", $descvalwhere) . ")";
} else {
$wheresql .= " and ra.desc !=''";
}
}
}
//链接条件
if (isset($_GET['link'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$link = intval($_GET['link']);
$linkval = isset($_GET['linkval']) ? trim($_GET['linkval']) : '';
if (!$link) {
$wheresql .= " and (isnull(ra.link) or ra.link='') ";
} else {
if ($linkval) {
$linkvalarr = explode(',', $linkval);
$linkvalwhere = [];
foreach ($linkvalarr as $lv) {
$linkvalwhere[] = " ra.link like %s";
$para[] = '%' . $lv . '%';
}
$wheresql .= " and (" . implode(" or ", $linkvalwhere) . ")";
} else {
$wheresql .= " and ra.link !='' ";
}
}
}
//形状条件
if (isset($_GET['shape'])) {
$shape = trim($_GET['shape']);
$shapes = explode(',', $shape);
$shapewherearr = [];
foreach ($shapes as $v) {
switch ($v) {
case 7://方图
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = 100;
break;
case 8://横图
$shapewherearr[] = ' round((r.width / r.height) * 100) > %d and round((r.width / r.height) * 100) < 250';
$para[] = 100;
break;
case 5://细长横图
$shapewherearr[] = ' round((r.width / r.height) * 100) >= %d';
$para[] = 250;
break;
case 6://细长竖图
$shapewherearr[] = ' round((r.width / r.height) * 100) <= %d';
$para[] = 40;
break;
case 9://竖图
$shapewherearr[] = ' round((r.width / r.height) * 100) < %d and round((r.width / r.height) * 100) > %d';
$para[] = 100;
$para[] = 40;
break;
case 1://4:3
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (4 / 3) * 100;
break;
case 2://3:4
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (3 / 4) * 100;
break;
case 3://16:9
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (16 / 9) * 100;
break;
case 4://9:16
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (9 / 16) * 100;
break;
/*case 10:
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = ($swidth / $sheight) * 100;
break;*/
}
}
if (isset($_GET['shapesize'])) {
$shapesize = trim($_GET['shapesize']);
$shapesizes = explode(':', $shapesize);
$swidth = intval($shapesizes[0]);
$sheight = intval($shapesizes[1]);
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = ($swidth / $sheight) * 100;
}
if ($shapewherearr) {
$wheresql .= " and (" . implode(" or ", $shapewherearr) . ")";
}
}
//尺寸条件
if (isset($_GET['wsize']) || isset($_GET['hsize'])) {
$wsizearr = explode('_', $_GET['wsize']);
$hsizearr = explode('_', $_GET['hsize']);
if ($wsizearr[0]) {
$wheresql .= " and r.width >= %d";
$para[] = intval($wsizearr[0]);
}
if ($wsizearr[1]) {
$wheresql .= " and r.width <= %d";
$para[] = intval($wsizearr[1]);
}
if ($hsizearr[0]) {
$wheresql .= " and r.height >= %d";
$para[] = intval($hsizearr[0]);
}
if ($hsizearr[1]) {
$wheresql .= " and r.height <= %d";
$para[] = intval($hsizearr[1]);
}
}
//大小条件
if (isset($_GET['size'])) {
$size = explode('_', $_GET['size']);
$unit = isset($_GET['unit']) ? intval($_GET['unit']) : 1;
switch ($unit) {
case 0://b
$size[0] = $size[0];
$size[1] = $size[1];
break;
case 1://kb
$size[0] = $size[0] * 1024;
$size[1] = $size[1] * 1024;
break;
case 2://mb
$size[0] = $size[0] * 1024 * 1024;
$size[1] = $size[1] * 1024 * 1024;
break;
case 3://gb
$size[0] = $size[0] * 1024 * 1024 * 1024;
$size[1] = $size[1] * 1024 * 1024 * 1024;
break;
}
if ($size[0]) {
$wheresql .= " and r.szie > %d";
$para[] = $size[0];
}
if ($size[1]) {
$wheresql .= " and r.size < %d";
$para[] = $size[1];
}
}
//关键词条件
$keyword = isset($_GET['keyword']) ? htmlspecialchars($_GET['keyword']) : '';
if ($keyword) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$keywords = array();
$arr1 = explode('+', $keyword);
foreach ($arr1 as $value1) {
$value1 = trim($value1);
$arr2 = explode(' ', $value1);
$arr3 = array();
foreach ($arr2 as $value2) {
$arr3[] = "ra.searchval LIKE %s";
$para[] = '%' . $value2 . '%';
}
$keywords[] = "(" . implode(" OR ", $arr3) . ")";
}
if ($keywords) {
$wheresql .= " and (" . implode(" AND ", $keywords) . ")";
}
}
//颜色条件
if (isset($_GET['color'])) {
$persion = isset($_GET['persion']) ? intval($_GET['persion']) : 0;
$maxColDist = 764.8339663572415;
$similarity = 80 + (20 / 100) * $persion;
$color = trim($_GET['color']);
$rgbcolor = hex2rgb($color);
$sql .= " left join %t p on r.rid = p.rid ";
$params[] = 'pichome_palette';
$wheresql .= "and round((%d-sqrt((((2+(p.r+%d)/2)/256)*(pow((%d-p.r),2))+(4*pow((%d-p.g),2)) + (((2+(255-(p.r+%d)/2))/256))*(pow((%d-p.b), 2)))))/%d,4)*100 >= %d";
if (!empty($para)) $para = array_merge($para, array($maxColDist, $rgbcolor['r'], $rgbcolor['r'], $rgbcolor['g'], $rgbcolor['r'], $rgbcolor['b'], $maxColDist, $similarity));
else $para = array($maxColDist, $rgbcolor['r'], $rgbcolor['r'], $rgbcolor['g'], $rgbcolor['r'], $rgbcolor['b'], $maxColDist, $similarity);
}
//标签条件
if (isset($_GET['tag'])) {
$tagwherearr = [];
$tagrelative = isset($_GET['tagrelative']) ? intval($_GET['tagrelative']) : 1;
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$tag = trim($_GET['tag']);
if ($tag == -1) {
$wheresql .= " and ra.tag = '' ";
} else {
$tagval = explode(',', trim($_GET['tag']));
if(!empty($tagval)){
$seltagdata=[];
if($appid){
foreach(DB::fetch_all("select t.tagname,t.tid,tr.cid from %t t left join %t tr on t.tid = tr.tid where t.tid in(%n) and tr.appid=%s",array('pichome_tag','pichome_tagrelation',$tagval,$appid)) as $tv){
$seltagdata[] = array('tagname'=>$tv['tagname'],'tid'=>intval($tv['tid']),'cid'=>$tv['cid']);
}
}else{
foreach(DB::fetch_all("select tagname,tid from %t where tid in(%n) ",array('pichome_tag',$tagval)) as $tv){
$seltagdata[] = array('tagname'=>$tv['tagname'],'tid'=>intval($tv['tid']));
}
}
}
foreach ($tagval as $v) {
$tagwherearr[] = " find_in_set(%d,ra.tag)";
$para[] = $v;
}
if ($tagrelative) {
$wheresql .= " and (" . implode(" or ", $tagwherearr) . ")";
} else {
$wheresql .= " and (" . implode(" and ", $tagwherearr) . ")";
}
}
}
$timedataarr = array(
1 => array(
'start' => strtotime(date("Y-m-d", time())) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => 1,
'label' => '今日'
),
-1 => array(
'start' => strtotime(date("Y-m-d", strtotime("-1 day"))) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => -1,
'label' => '昨日'
),
-7 => array(
'start' => strtotime(date("Y-m-d", strtotime("-7 day"))) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => -7,
'label' => '最近7日'
),
-30 => array(
'start' => strtotime(date("Y-m-d", strtotime("-30 day"))) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => -30,
'label' => '最近30日'
),
-90 => array(
'start' => strtotime(date("Y-m-d", strtotime("-90 day"))) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => -90,
'label' => '最近90日'
),
-365 => array(
'start' => strtotime(date("Y-m-d", strtotime("-365 day"))) * 1000,
'end' => (strtotime(date("Y-m-d", time())) + 24 * 60 * 60) * 1000,
'val' => -365,
'label' => '最近365日'
),
);
//标签统计
if ($skey == 'tag') {
$cid = isset($_GET['cid']) ? $_GET['cid']:'';
if ($cid) {
if ($cid == -1) {
$sql .= " left join %t tr on isnull(tr.cid)";
$params[] = 'pichome_tagrelation';
} else {
$sql .= " left join %t tr on tr.tid = rt.tid ";
$params[] = 'pichome_tagrelation';
$wheresql .= ' and tr.cid = %s';
$para[] = $cid;
}
}
$tagkeyword = isset($_GET['tagkeyword']) ? trim($_GET['tagkeyword']):'';
if ($tagkeyword) {
$sql .= " left join %t t on t.tid=rt.tid ";
$params[] = 'pichome_tag';
$wheresql .= " and t.tagname LIKE %s ";
$para[] = '%'.$tagkeyword.'%';
}
$tagdata = [];
//每个标签对应文件个数
$tdata = [];
//所有符合条件标签id
$tids= [];
if(!$hasnum){
$sql .= ' left join %t t1 on t1.tid = rt.tid ';
$params[] = 'pichome_tag';
if (!empty($para)) $params = array_merge($params, $para);
foreach (DB::fetch_all("select distinct rt.tid,t1.tagname from $sql where $wheresql $pagelimit", $params) as $v){
$tagdata[$v['tid']]['tagname'] = $v['tagname'];
}
}else{
$fparams = $params;
if (!empty($para)) $params = array_merge($params, $para);
foreach (DB::fetch_all("select distinct rt.tid from $sql where $wheresql $pagelimit", $params) as $v){
$tids[] = $v['tid'];
}
$sql .= ' left join %t t1 on t1.tid = rt.tid ';
$fparams[] = 'pichome_tag';
$wheresql .= ' and rt.tid in(%n) ';
$para[] = $tids;
if (!empty($para)) $fparams = array_merge($fparams, $para);
foreach (DB::fetch_all("select rt.tid,t1.tagname from $sql where $wheresql",$fparams) as $v) {
if (!isset($tagdata[$v['tid']])) {
$tagdata[$v['tid']]['tagname'] = $v['tagname'];
$tagdata[$v['tid']]['num'] = 1;
} else {
$tagdata[$v['tid']]['num'] += 1;
}
}
}
$tids = array_keys($tagdata);
$finish = (count($tids) >= 15) ? false:true;
//最后返回数组
$data = [];
//含分类标签数据数组
$catdata = [];
//如果有appid则获取标签分类数据
if ($appid) {
$taggroupdata[] = ['cid'=>0,'catname'=>'全部'];
//获取标签分类数据
$taggroupdata = DB::fetch_all("SELECT cid,catname
FROM %t where appid = %s group by cid;", array( 'pichome_taggroup', $appid));
$taggroupdata[] = ['cid'=>-1,'catname' => '未分组'];
}
//分类标签数据
$data['catdata'] = $taggroupdata;
//标签不含分类数据
$alltagdata = $tagdata;
$data['finish'] = $finish;
$data['alltagdata'] = $alltagdata;
$data['tgdata'] = $seltagdata;
} elseif ($skey == 'shape') {
if($hasnum){
//形状统计
$presql = ' case ';
$prepara = [];
foreach ($shapedataarr as $sv) {
if ($sv['start'] && $sv['end'] === '') {
$presql .= ' when round((r.width/r.height) * 100) = %i then %d ';
$prepara[] = $sv['start'];
} else {
$presql .= ' when round((r.width/r.height) * 100) > %d ' . (($sv['end']) ? ' and round((r.width/r.height)*100) <= %d then %d' : ' then %d');
$prepara[] = $sv['start'];
}
if ($sv['end']) $prepara[] = $sv['end'];
$prepara[] = $sv['val'];
}
if ($presql) {
$presql .= ' end as %s';
$prepara[] = 'shapedata';
}
if (!empty($para)) $params = array_merge($params, $para);
if (!empty($prepara)) $shapeparams = array_merge($prepara, $params);
foreach (DB::fetch_all("select $presql FROM $sql where $wheresql", $shapeparams) as $value) {
if (!isset($data[$value['shapedata']]) && $shapedataarr[$value['shapedata']]['val']) {
$data[$value['shapedata']]['num'] = 1;
$data[$value['shapedata']]['lablename'] = $shapedataarr[$value['shapedata']]['lablename'];
$data[$value['shapedata']]['val'] = $shapedataarr[$value['shapedata']]['val'];
} elseif ($data[$value['shapedata']]['num']) {
$data[$value['shapedata']]['num']++;
}
}
//将3:4 9:16 细长竖图归类到竖图
$data[9]['num'] = ($data[9]['num'] ? $data[9]['num'] : 0) + ($data[2]['num'] ? $data[2]['num'] : 0) + ($data[4]['num'] ? $data[4]['num'] : 0) + ($data[6]['num'] ? $data[6]['num'] : 0);
if ($data[9]['num']) {
$data[9]['lablename'] = $shapedataarr[9]['lablename'];
$data[9]['val'] = $shapedataarr[9]['val'];
} else {
unset($data[9]);
}
//将4:3 16:9 细长横图图归类到横图
$data[8]['num'] = ($data[8]['num'] ? $data[8]['num'] : 0) + ($data[1]['num'] ? $data[1]['num'] : 0) + ($data[3]['num'] ? $data[3]['num'] : 0) + ($data[5]['num'] ? $data[5]['num'] : 0);
if ($data[8]['num']) {
$data[8]['val'] = $shapedataarr[8]['val'];
$data[8]['lablename'] = $shapedataarr[8]['lablename'];
} else {
unset($data[8]);
}
}else{
$data = $shapedataarr;
}
} elseif ($skey == 'grade') {
//评分统计
if (!empty($para)) $params = array_merge($params, $para);
$data = DB::fetch_all("select count(r.rid) as num,r.grade from $sql where $wheresql group by r.grade", $params);
} elseif ($skey == 'ext') {
//类型统计
if (!empty($para)) $params = array_merge($params, $para);
$data = DB::fetch_all("select count(r.rid) as num,r.ext from $sql where $wheresql group by r.ext", $params);
} elseif ($skey == 'btime') {
//添加时间
$presql = ' case ';
$prepara = [];
foreach ($timedataarr as $sv) {
$presql .= ' when r.btime >= %d ' . (($sv['end']) ? ' and r.btime < %d then %d' : ' then %d');
$prepara[] = $sv['start'];
if ($sv['end']) $prepara[] = $sv['end'];
$prepara[] = $sv['val'];
}
if ($presql) {
$presql .= ' end as %s';
$prepara[] = 'btimedata';
}
if (!empty($para)) $params = array_merge($params, $para);
if (!empty($prepara)) $params = array_merge($prepara, $params);
foreach (DB::fetch_all("select $presql FROM $sql where$wheresql", $params) as $value) {
if (!$value['btimedata']) continue;
if (!isset($data[$value['btimedata']])) {
$data[$value['btimedata']]['num'] = 1;
$data[$value['btimedata']]['val'] = $timedataarr[$value['btimedata']]['val'];
$data[$value['btimedata']]['label'] = $timedataarr[$value['btimedata']]['label'];
} else {
$data[$value['btimedata']]['num']++;
}
}
//将今天昨天归类到最近七天将最近七天归到最近30天将近30天归到最近90天将最近90天归到最近365天
//将今天昨天归类到最近七天将最近七天归到最近30天将近30天归到最近90天将最近90天归到最近365天
$data[-7]['num'] = (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0) + (isset($data[1]['num']) ? intval($data[1]['num']) : 0) + (isset($data[-1]['num']) ? intval($data[-1]['num']) : 0);
if ($data[-7]['num']) $data[-7] = array('num' => $data[-7]['num'], 'val' => $timedataarr[-7]['val'], 'label' => $timedataarr[-7]['label']);
$data[-30]['num'] = (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0) + (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0);
if ($data[-30]['num']) $data[-30] = array('num' => $data[-30]['num'], 'val' => $timedataarr[-30]['val'], 'label' => $timedataarr[-30]['label']);
$data[-90]['num'] = (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0) + (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0);
if ($data[-90]['num']) $data[-90] = array('num' => $data[-90]['num'], 'val' => $timedataarr[-90]['val'], 'label' => $timedataarr[-90]['label']);
$data[-365]['num'] = (isset($data[-365]['num']) ? intval($data[-365]['num']) : 0) + (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0);
if ($data[-365]['num']) $data[-365] = array('num' => $data[-365]['num'], 'val' => $timedataarr[-365]['val'], 'label' => $timedataarr[-365]['label']);
foreach ($data as $k => $v) {
if ($v['num'] == 0) unset($data[$k]);
}
krsort($data);
} elseif ($skey == 'mtime') {
//创建时间
$presql = ' case ';
$prepara = [];
foreach ($timedataarr as $sv) {
$presql .= ' when r.mtime >= %d ' . (($sv['end']) ? ' and r.mtime < %d then %d' : ' then %d');
$prepara[] = $sv['start'];
if ($sv['end']) $prepara[] = $sv['end'];
$prepara[] = $sv['val'];
}
if ($presql) {
$presql .= ' end as %s';
$prepara[] = 'mtimedata';
}
if (!empty($para)) $params = array_merge($params, $para);
if (!empty($prepara)) $params = array_merge($prepara, $params);
foreach (DB::fetch_all("select $presql FROM $sql where $wheresql", $params) as $value) {
if (!$value['mtimedata']) continue;
if (!isset($data[$value['mtimedata']])) {
$data[$value['mtimedata']]['num'] = 1;
$data[$value['mtimedata']]['val'] = $timedataarr[$value['mtimedata']]['val'];
$data[$value['mtimedata']]['label'] = $timedataarr[$value['mtimedata']]['label'];
} else {
$data[$value['mtimedata']]['num']++;
}
}
//将今天昨天归类到最近七天将最近七天归到最近30天将近30天归到最近90天将最近90天归到最近365天
$data[-7]['num'] = (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0) + (isset($data[1]['num']) ? intval($data[1]['num']) : 0) + (isset($data[-1]['num']) ? intval($data[-1]['num']) : 0);
if ($data[-7]['num']) $data[-7] = array('num' => $data[-7]['num'], 'val' => $timedataarr[-7]['val'], 'label' => $timedataarr[-7]['label']);
$data[-30]['num'] = (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0) + (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0);
if ($data[-30]['num']) $data[-30] = array('num' => $data[-30]['num'], 'val' => $timedataarr[-30]['val'], 'label' => $timedataarr[-30]['label']);
$data[-90]['num'] = (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0) + (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0);
if ($data[-90]['num']) $data[-90] = array('num' => $data[-90]['num'], 'val' => $timedataarr[-90]['val'], 'label' => $timedataarr[-90]['label']);
$data[-365]['num'] = (isset($data[-365]['num']) ? intval($data[-365]['num']) : 0) + (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0);
if ($data[-365]['num']) $data[-365] = array('num' => $data[-365]['num'], 'val' => $timedataarr[-365]['val'], 'label' => $timedataarr[-365]['label']);
foreach ($data as $k => $v) {
if ($v['num'] == 0) unset($data[$k]);
}
krsort($data);
} elseif ($skey == 'dateline') {
//修改时间
$presql = ' case ';
$prepara = [];
foreach ($timedataarr as $sv) {
$presql .= ' when r.dateline >= %d ' . (($sv['end']) ? ' and r.dateline < %d then %d' : ' then %d');
$prepara[] = $sv['start'];
if ($sv['end']) $prepara[] = $sv['end'];
$prepara[] = $sv['val'];
}
if ($presql) {
$presql .= ' end as %s';
$prepara[] = 'datelinedata';
}
if (!empty($para)) $params = array_merge($params, $para);
if (!empty($prepara)) $params = array_merge($prepara, $params);
foreach (DB::fetch_all("select $presql FROM $sql where$wheresql ", $params) as $value) {
if (!$value['datelinedata']) continue;
if (!isset($data[$value['datelinedata']])) {
$data[$value['datelinedata']]['num'] = 1;
$data[$value['datelinedata']]['val'] = $timedataarr[$value['datelinedata']]['val'];
$data[$value['datelinedata']]['label'] = $timedataarr[$value['datelinedata']]['label'];
} else {
$data[$value['datelinedata']]['num']++;
}
}
//将今天昨天归类到最近七天将最近七天归到最近30天将近30天归到最近90天将最近90天归到最近365天
//将今天昨天归类到最近七天将最近七天归到最近30天将近30天归到最近90天将最近90天归到最近365天
$data[-7]['num'] = (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0) + (isset($data[1]['num']) ? intval($data[1]['num']) : 0) + (isset($data[-1]['num']) ? intval($data[-1]['num']) : 0);
if ($data[-7]['num']) $data[-7] = array('num' => $data[-7]['num'], 'val' => $timedataarr[-7]['val'], 'label' => $timedataarr[-7]['label']);
$data[-30]['num'] = (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0) + (isset($data[-7]['num']) ? intval($data[-7]['num']) : 0);
if ($data[-30]['num']) $data[-30] = array('num' => $data[-30]['num'], 'val' => $timedataarr[-30]['val'], 'label' => $timedataarr[-30]['label']);
$data[-90]['num'] = (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0) + (isset($data[-30]['num']) ? intval($data[-30]['num']) : 0);
if ($data[-90]['num']) $data[-90] = array('num' => $data[-90]['num'], 'val' => $timedataarr[-90]['val'], 'label' => $timedataarr[-90]['label']);
$data[-365]['num'] = (isset($data[-365]['num']) ? intval($data[-365]['num']) : 0) + (isset($data[-90]['num']) ? intval($data[-90]['num']) : 0);
if ($data[-365]['num']) $data[-365] = array('num' => $data[-365]['num'], 'val' => $timedataarr[-365]['val'], 'label' => $timedataarr[-365]['label']);
foreach ($data as $k => $v) {
if ($v['num'] == 0) unset($data[$k]);
}
krsort($data);
} elseif ($skey == 'grouptag') {
//标签分类id
$cid = isset($_GET['cid']) ? trim($_GET['cid']) : '';
$sql .= ' left join %t rt on rt.rid=r.rid left join %t tr on tr.tid=rt.tid ';
$params[] = 'pichome_resourcestag';
$params[] = 'pichome_tagrelation';
$wheresql .= ' and tr.cid = %s';
$para[] = $cid;
if (!empty($para)) $params = array_merge($params, $para);
//每个标签对应文件个数
$tdata = [];
//所有符合条件标签id
$tids = [];
foreach (DB::fetch_all("select rt.tid,r.rid from $sql where $wheresql", $params) as $v) {
if (!isset($tdata[$v['tid']])) $tdata[$v['tid']]['num'] = 1;
else $tdata[$v['tid']]['num'] += 1;
if ($v['tid']) $tids[] = $v['tid'];
}
//统计所有标签,去掉重复标签
$tids = array_unique($tids);
//标签id对应标签名称数组
$tagdata = [];
foreach (DB::fetch_all("select tagname,tid from %t where tid in(%n)", array('pichome_tag', $tids)) as $v) {
$tagdata[$v['tid']] = $v['tagname'];
}
//最后返回数组
$data = [];
foreach ($tdata as $tid => $num) {
if (isset($tagdata[$tid])) $data[$tid] = array('tid' => intval($tid), 'tagname' => $tagdata[$tid], 'num' => $num['num']);
}
}
exit(json_encode($data));
} elseif ($operation == 'search_menu') {
$skey = isset($_GET['skey']) ? trim($_GET['skey']) : '';
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$hassub = isset($_GET['hassub']) ? intval($_GET['hassub']) : 0;
if($skey == 'tag'){
if($appid){
$sql = "select count(DISTINCT(rt.tid)) as num,g.cid,g.catname from %t rt left join %t r on rt.rid=r.rid ";
}else{
$sql = "select count(DISTINCT(rt.tid)) as num from %t rt left join %t r on rt.rid=r.rid ";
}
$params = [ 'pichome_resourcestag','pichome_resources'];
}else{
exit(json_encode(array()));
}
$wheresql = " r.isdelete < 1 ";
$fids = isset($_GET['fids']) ? trim($_GET['fids']) : '';
$vappids = [];
$vappids = [];
foreach(DB::fetch_all("select appid,path from %t where isdelete = 0",array('pichome_vapp')) as $v){
if(is_dir($v['path'])){
$vappids[] = $v['appid'];
}
}
if(empty($vappids)){
$wheresql .= ' and 0';
}else{
if ($appid) {
$wheresql .= ' and r.appid = %s and r.appid in(%n)';
$para[] = $appid;
$para[] = $vappids;
if(!$fids && !$hassub){
$sql .= " LEFT JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$wheresql .= ' and ISNULL(fr.fid)';
}
}else{
$wheresql .= ' and r.appid in(%n)';
$para[] = $vappids;
}
}
if ($fids) {
if ($fids == 'not') {
$sql .= " left JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$wheresql .= ' and ISNULL(fr.fid)';
} else {
$sql .= " left JOIN %t fr on fr.rid = r.rid ";
$params[] = 'pichome_folderresources';
$fidarr = explode(',', $fids);
$childsqlarr = [];
if ($hassub) {
foreach ($fidarr as $v) {
if ($v == 'not') $childsqlarr[] = " ISNULL(fr.fid) ";
else {
if (!in_array('pichome_folder', $params)) {
$sql .= ' left JOIN %t f1 on f1.fid=fr.fid ';
$params[] = 'pichome_folder';
}
$childsqlarr[] = " f1.pathkey like %s ";
$tpathkey = DB::result_first("select pathkey from %t where fid = %s", array('pichome_folder', $v));
$para[] = $tpathkey . '%';
}
}
if (count($childsqlarr) > 1) $wheresql .= ' and (' . implode(' or ', $childsqlarr) . ')';
else $wheresql .= ' and ' . $childsqlarr[0];
} else {
if (in_array('not', $fidarr)) {
$nindex = array_search('not', $fidarr);
unset($fids[$nindex]);
$wheresql .= ' and (fr.fid in(%n) or ISNULL(fr.fid))';
} else {
$wheresql .= ' and fr.fid in(%n)';
}
$para[] = $fidarr;
}
}
}
//关键词条件
//关键词条件
$keyword = isset($_GET['keyword']) ? htmlspecialchars($_GET['keyword']) : '';
if ($keyword) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$keywords = array();
$arr1 = explode('+', $keyword);
foreach ($arr1 as $value1) {
$value1 = trim($value1);
$arr2 = explode(' ', $value1);
$arr3 = array();
foreach ($arr2 as $value2) {
$arr3[] = "r.name LIKE %s";
$para[] = '%' . $value2 . '%';
$arr3[] = "ra.link LIKE %s";
$para[] = '%' . $value2 . '%';
$arr3[] = "ra.desc LIKE %s";
$para[] = '%' . $value2 . '%';
$arr3[] = "ra.searchval LIKE %s";
$para[] = '%' . $value2 . '%';
}
$keywords[] = "(" . implode(" OR ", $arr3) . ")";
}
if ($keywords) {
$wheresql .= " and (" . implode(" AND ", $keywords) . ")";
}
}
//颜色条件
if (isset($_GET['color'])) {
$persion = isset($_GET['persion']) ? intval($_GET['persion']) : 0;
$maxColDist = 764.8339663572415;
$similarity = 80 + (20 / 100) * $persion;
$color = trim($_GET['color']);
$rgbcolor = hex2rgb($color);
$sql .= " left join %t p on r.rid = p.rid ";
$params[] = 'pichome_palette';
$wheresql .= "and round((%d-sqrt((((2+(p.r+%d)/2)/256)*(pow((%d-p.r),2))+(4*pow((%d-p.g),2)) + (((2+(255-(p.r+%d)/2))/256))*(pow((%d-p.b), 2)))))/%d,4)*100 >= %d";
if (!empty($para)) $para = array_merge($para, array($maxColDist, $rgbcolor['r'], $rgbcolor['r'], $rgbcolor['g'], $rgbcolor['r'], $rgbcolor['b'], $maxColDist, $similarity));
else $para = array($maxColDist, $rgbcolor['r'], $rgbcolor['r'], $rgbcolor['g'], $rgbcolor['r'], $rgbcolor['b'], $maxColDist, $similarity);
}
//标签条件
if (isset($_GET['tag'])) {
$tagwherearr = [];
$tagrelative = isset($_GET['tagrelative']) ? intval($_GET['tagrelative']) : 1;
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$tag = trim($_GET['tag']);
if ($tag == -1) {
$wheresql .= " and ra.tag = '' ";
} else {
$tagval = explode(',', trim($_GET['tag']));
foreach ($tagval as $v) {
$tagwherearr[] = " find_in_set(%d,ra.tag)";
$para[] = $v;
}
if ($tagrelative) {
$wheresql .= " and (" . implode(" or ", $tagwherearr) . ")";
} else {
$wheresql .= " and (" . implode(" and ", $tagwherearr) . ")";
}
}
}
//时长条件
if (isset($_GET['duration'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$durationarr = explode('_', $_GET['duration']);
$dunit = isset($_GET['dunit']) ? trim($_GET['dunit']) : 's';
if ($durationarr[0]) {
$wheresql .= " and ra.duration >= %d";
$para[] = ($dunit == 'm') ? $durationarr[0] * 60 : $durationarr[0];
}
if ($durationarr[1]) {
$wheresql .= " and ra.duration <= %d";
$para[] = ($dunit == 'm') ? $durationarr[1] * 60 : $durationarr[1];
}
}
//标注条件
if (isset($_GET['comments'])) {
$sql .= " left join %t c on r.rid = c.rid";
$params[] = 'pichome_comments';
$comments = intval($_GET['comments']);
$cval = isset($_GET['cval']) ? trim($_GET['cval']) : '';
if (!$comments) {
$wheresql .= " and isnull(c.annotation) ";
} else {
if ($cval) {
$cvalarr = explode(',', $cval);
$cvalwhere = [];
foreach ($cvalarr as $cv) {
$cvalwhere[] = " c.annotation like %s";
$para[] = '%' . $cv . '%';
}
$wheresql .= " and (" . implode(" or ", $cvalwhere) . ")";
} else {
$wheresql .= " and !isnull(c.annotation)";
}
}
}
//注释条件
if (isset($_GET['desc'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$desc = intval($_GET['desc']);
$descval = isset($_GET['descval']) ? trim($_GET['descval']) : '';
if (!$desc) {
$wheresql .= " and (isnull(ra.desc) or ra.desc='') ";
} else {
if ($descval) {
$descvalarr = explode(',', $descval);
$descvalwhere = [];
foreach ($descvalarr as $dv) {
$descvalwhere[] = " ra.desc like %s";
$para[] = '%' . $dv . '%';
}
$wheresql .= " and (" . implode(" or ", $descvalwhere) . ")";
} else {
$wheresql .= " and ra.desc !=''";
}
}
}
//链接条件
if (isset($_GET['link'])) {
if (!in_array('pichome_resources_attr', $params)) {
$sql .= " left join %t ra on r.rid = ra.rid";
$params[] = 'pichome_resources_attr';
}
$link = intval($_GET['link']);
$linkval = isset($_GET['linkval']) ? trim($_GET['linkval']) : '';
if (!$link) {
$wheresql .= " and (isnull(ra.link) or ra.link='') ";
} else {
if ($linkval) {
$linkvalarr = explode(',', $linkval);
$linkvalwhere = [];
foreach ($linkvalarr as $lv) {
$linkvalwhere[] = " ra.link like %s";
$para[] = '%' . $lv . '%';
}
$wheresql .= " and (" . implode(" or ", $linkvalwhere) . ")";
} else {
$wheresql .= " and ra.link !='' ";
}
}
}
//形状条件
if (isset($_GET['shape'])) {
$shape = trim($_GET['shape']);
$shapes = explode(',', $shape);
$shapewherearr = [];
foreach ($shapes as $v) {
switch ($v) {
case 7://方图
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = 100;
break;
case 8://横图
$shapewherearr[] = ' round((r.width / r.height) * 100) > %d and round((r.width / r.height) * 100) < 250';
$para[] = 100;
break;
case 5://细长横图
$shapewherearr[] = ' round((r.width / r.height) * 100) >= %d';
$para[] = 250;
break;
case 6://细长竖图
$shapewherearr[] = ' round((r.width / r.height) * 100) <= %d';
$para[] = 40;
break;
case 9://竖图
$shapewherearr[] = ' round((r.width / r.height) * 100) < %d and round((r.width / r.height) * 100) > %d';
$para[] = 100;
$para[] = 40;
break;
case 1://4:3
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (4 / 3) * 100;
break;
case 2://3:4
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (3 / 4) * 100;
break;
case 3://16:9
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (16 / 9) * 100;
break;
case 4://9:16
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = (9 / 16) * 100;
break;
/*case 10:
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = ($swidth / $sheight) * 100;
break;*/
}
}
if (isset($_GET['shapesize'])) {
$shapesize = trim($_GET['shapesize']);
$shapesizes = explode(':', $shapesize);
$swidth = intval($shapesizes[0]);
$sheight = intval($shapesizes[1]);
$shapewherearr[] = ' round((r.width / r.height) * 100) = %d';
$para[] = ($swidth / $sheight) * 100;
}
if ($shapewherearr) {
$wheresql .= " and (" . implode(" or ", $shapewherearr) . ")";
}
}
//评分条件
if (isset($_GET['grade'])) {
$grade = trim($_GET['grade']);
$grades = explode(',', $grade);
$wheresql .= " and r.grade in(%n)";
$para[] = $grades;
}
//类型条件
if (isset($_GET['ext'])) {
$ext = trim($_GET['ext']);
$exts = explode(',', $ext);
$wheresql .= " and r.ext in(%n)";
$para[] = $exts;
}
//添加日期
if (isset($_GET['btime'])) {
$btime = explode('_', $_GET['btime']);
$bstart = strtotime($btime[0]);
$bend = strtotime($btime[1]) + 24 * 60 * 60;
if ($bstart) {
$wheresql .= " and r.btime > %d";
//将时间补足13位
$para[] = $bstart * 1000;
}
if ($bend) {
$wheresql .= " and r.btime < %d";
//将时间补足13位
$para[] = $bend * 1000;
}
}
//修改日期
if (isset($_GET['dateline'])) {
$dateline = explode('_', $_GET['dateline']);
$dstart = strtotime($dateline[0]);
$dend = strtotime($dateline[1]) + 24 * 60 * 60;
if ($dstart) {
$wheresql .= " and r.dateline > %d";
//将时间补足13位
$para[] = $dstart * 1000;
}
if ($dend) {
$wheresql .= " and r.dateline < %d";
//将时间补足13位
$para[] = $dend * 1000;
}
}
//创建日期
if (isset($_GET['mtime'])) {
$mtime = explode('_', $_GET['mtime']);
$mstart = strtotime($mtime[0]);
$mend = strtotime($mtime[1]) + 24 * 60 * 60;
if ($mstart) {
$wheresql .= " and r.mtime > %d";
//将时间补足13位
$para[] = $mstart * 1000;
}
if ($mend) {
$wheresql .= " and r.mtime < %d";
//将时间补足13位
$para[] = $mend * 1000;
}
}
//尺寸条件
if (isset($_GET['wsize']) || isset($_GET['hsize'])) {
$wsizearr = explode('_', $_GET['wsize']);
$hsizearr = explode('_', $_GET['hsize']);
if ($wsizearr[0]) {
$wheresql .= " and r.width >= %d";
$para[] = intval($wsizearr[0]);
}
if ($wsizearr[1]) {
$wheresql .= " and r.width <= %d";
$para[] = intval($wsizearr[1]);
}
if ($hsizearr[0]) {
$wheresql .= " and r.height >= %d";
$para[] = intval($hsizearr[0]);
}
if ($hsizearr[1]) {
$wheresql .= " and r.height <= %d";
$para[] = intval($hsizearr[1]);
}
}
//大小条件
if (isset($_GET['size'])) {
$size = explode('_', $_GET['size']);
$unit = isset($_GET['unit']) ? intval($_GET['unit']) : 1;
switch ($unit) {
case 0://b
$size[0] = $size[0];
$size[1] = $size[1];
break;
case 1://kb
$size[0] = $size[0] * 1024;
$size[1] = $size[1] * 1024;
break;
case 2://mb
$size[0] = $size[0] * 1024 * 1024;
$size[1] = $size[1] * 1024 * 1024;
break;
case 3://gb
$size[0] = $size[0] * 1024 * 1024 * 1024;
$size[1] = $size[1] * 1024 * 1024 * 1024;
break;
}
if ($size[0]) {
$wheresql .= " and r.szie > %d";
$para[] = $size[0];
}
if ($size[1]) {
$wheresql .= " and r.size < %d";
$para[] = $size[1];
}
}
$wheresql .= " and r.isdelete < 1 ";
$data = array();
if ($skey == 'tag') {
/*$cid = isset($_GET['cid']) ? $_GET['cid']:'';
if ($cid) {
if ($cid == -1) {
$sql .= " left join %t tr on isnull(tr.cid)";
$params[] = 'pichome_tagrelation';
} else {
$sql .= " left join %t tr on tr.tid = rt.tid ";
$params[] = 'pichome_tagrelation';
$wheresql .= ' and tr.cid = %s';
$para[] = $cid;
}
}*/
$tagkeyword = isset($_GET['tagkeyword']) ? trim($_GET['tagkeyword']):'';
if ($tagkeyword) {
$sql .= " left join %t t on t.tid=rt.tid ";
$params[] = 'pichome_tag';
$wheresql .= " and t.tagname LIKE %s ";
$para[] = '%'.$tagkeyword.'%';
}
//if (!empty($para)) $params = array_merge($params, $para);
//所有符合条件标签id
/* $tids= [];
foreach (DB::fetch_all("$sql where $wheresql", $params) as $v){
$tids[] = $v['tid'];
}*/
$catdata = [];
if($appid){
$sql .= " left join %t t1 on rt.tid = t1.tid ";
$params[] = 'pichome_tag';
if(!in_array('pichome_tagrelation',$params)){
$sql .= " left join %t tr on tr.tid=t1.tid ";
$params[] = 'pichome_tagrelation';
}
$sql .= " left join %t g on g.cid = tr.cid ";
$params[] = 'pichome_taggroup';
if (!empty($para)) $params = array_merge($params, $para);
$sum = 0;
foreach (DB::fetch_all("$sql where $wheresql group by g.cid",$params) as $v) {
if($v['cid']){
$catdata[]=['cid'=>$v['cid'],'catname'=>$v['catname'],'num'=>$v['num']];
}else{
$catdata[]=['cid'=>-1,'catname'=>'未分类','num'=>$v['num']];
}
$sum += $v['num'];
}
$catdata[]=['cid'=>0,'catname'=>'全部','num'=>$sum];
}else{
//if (!empty($para)) $params = array_merge($params, $para);
//echo $sql;die;
//$numdata = DB::result_first("$sql where $wheresql ",$params);
//print_r($numdata);die;
//$catdata[]=['cid'=>0,'catname'=>'全部','num'=>$numdata['num']];
}
//最后返回数组
$data = [];
$data['catdata'] = $catdata;
}
exit(json_encode($data));
} elseif ($operation == 'getsearchmenudata') {//获取筛选项
} elseif ($operation == 'setshow') {//设置显示字段
$showfileds = isset($_GET['showfileds']) ? trim($_GET['showfileds']) : '';
$other = isset($_GET['other']) ? trim($_GET['other']) : '';
// $allowsetarr = ['name', 'tagging', 'extension', 'other', 'size', 'filesize', 'grade', 'btime', 'dateline', 'mtime'];
// $showfiledarr = explode(',', $showfileds);
// foreach ($showfiledarr as $k => $v) {
// if (!in_array($v, $allowsetarr)) {
// unsert($showfiledarr[$k]);
// }
// }
// $showfileds = implode(',', $showfileds);
$uid = getglobal('uid');
if (!$uid) exit(json_encode(array('error' => true)));
C::t('user_setting')->update_by_skey('pichomeshowfileds', serialize(array('filed' => $showfileds, 'other' => $other)), $uid);
exit(json_encode(array('success' => true)));
} elseif ($operation == 'setsort') {//设置排序方式
$sortfiled = isset($_GET['sortfiled']) ? trim($_GET['sortfiled']) : '';
$allowsortarr = ['name', 'size', 'whsize', 'ext', 'size', 'grade', 'filesize', 'mtime', 'dateline', 'btime', 'duration'];
if (!in_array($sortfiled, $allowsortarr)) exit(json_encode(array('error' => true)));
$sort = isset($_GET['sort']) ? trim($_GET['sort']) : '';
$uid = getglobal('uid');
if (!$uid) exit(json_encode(array('error' => true)));
C::t('user_setting')->update_by_skey('pichomesortfileds', serialize(array('filed' => $sortfiled, 'sort' => $sort)), $uid);
exit(json_encode(array('success' => true)));
} elseif ($operation == 'setlayout') {//设置布局方式
$layout = isset($_GET['layout']) ? trim($_GET['layout']) : '';
$uid = getglobal('uid');
if (!$uid) exit(json_encode(array('error' => true)));
C::t('user_setting')->update_by_skey('pichomelayout', serialize(array('layout' => $layout)), $uid);
exit(json_encode(array('success' => true)));
} elseif ($operation == 'likewords') {//联想词
$keyword = isset($_GET['keyword']) ? htmlspecialchars($_GET['keyword']) : '';
//取出name,desc,tagname,comments和最近搜索中包含关键词的内容各10条
$resourceslikeword = C::t('pichome_resources')->fetch_like_words($keyword);
$resourcesattrlikeword = C::t('pichome_resources_attr')->fetch_like_words($keyword);
$taglikeword = C::t('pichome_tag')->fetch_like_words($keyword);
$commentlikeword = C::t('pichome_comments')->fetch_like_words($keyword);
$recentlikekeyword = C::t('pichome_searchrecent')->fetch_like_words($keyword);
//获得所有包含关键词的数组
$likekeywords = array_merge($resourceslikeword, $taglikeword, $commentlikeword, $resourcesattrlikeword, $recentlikekeyword);
$likekeyworddata = [];
//按关键词出现的位置得到二维数组
foreach ($likekeywords as $v) {
$index = strpos($keyword, $v);
$likekeyworddata[$index][] = $v;
}
//以出现的位置排序
ksort($likekeyworddata);
$returnlikekeywords = [];
//得到关键词排序后的数组
foreach ($likekeyworddata as $v) {
$returnlikekeywords = array_merge($returnlikekeywords, $v);
}
//去除重复的关键词
$returnlikekeywords = array_unique($returnlikekeywords);
//取出前10个关键词
$returnlikekeywords = array_slice($returnlikekeywords, 0, 10);
exit(json_encode(array('likewords' => $returnlikekeywords)));
} elseif ($operation == 'screensetting') {//筛选设置
$uid = getglobal('uid');
if (!$uid) exit(json_encode(array('error' => true)));
if (!submitcheck('settingsubmit')) {
$screen = C::t('user_setting')->fetch_by_skey('pichomeuserscreen', $uid);
} else {
$screen = isset($_GET['screen']) ? trim($_GET['screen']) : '';
$uid = getglobal('uid');
C::t('user_setting')->update_by_skey('pichomeuserscreen', $screen, $uid);
exit(json_encode(array('success' => true)));
}
} elseif ($operation == 'getscreen') {//获取筛选项
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$tagval = $_GET['tag'] ? explode(',',trim($_GET['tag'])):[];
$shape = $_GET['shape'] ? trim($_GET['shape']):'';
$shapes = explode(',', $shape);
$shapelable = [];
if(!empty($shapes)){
$lableshape = [];
foreach($shapedataarr as $v){
$lableshape[$v['lablename']] = $v;
}
foreach($shapes as $s){
$shapelable[] = $lableshape[$s]['val'];
}
}
$tagdata=[];
if(!empty($tagval)){
if($appid){
foreach(DB::fetch_all("select t.tagname,t.tid,tr.cid from %t t left join %t tr on t.tid = tr.tid and tr.appid=%s where t.tid in(%n) ",array('pichome_tag','pichome_tagrelation',$appid,$tagval)) as $tv){
$tagdata[] = array('tagname'=>$tv['tagname'],'tid'=>intval($tv['tid']),'cid'=>$tv['cid']);
}
}else{
foreach(DB::fetch_all("select tagname,tid from %t where tid in(%n) ",array('pichome_tag',$tagval)) as $tv){
$tagdata[] = array('tagname'=>$tv['tagname'],'tid'=>intval($tv['tid']));
}
}
}
$fids = trim($_GET['fids']);
$fidarr = explode(',',$fids);
$folderdata = [];
foreach(DB::fetch_all("select fname,fid,pathkey,appid from %t where fid in(%n)",array('pichome_folder',$fidarr)) as $v){
$folderdata[$v['fid']] = ['fname'=>$v['fname'],'pathkey'=>$v['pathkey'],'appid'=>$v['appid']];
$folderdata[$v['fid']]['leaf'] = DB::result_first("select count(*) from %t where pfid = %s",array('pichome_folder',$v['fid'])) ? false:true;
}
if ($appid) {
if ($data = DB::fetch_first("select * from %t where appid=%s ", array('pichome_vapp', $appid))) {
$data['filter'] = unserialize($data['filter']);
// if($data['filter']){
foreach ($data['filter'] as $k => $v) {
if ($v['key'] == 'tag' && $v['chacked'] == 1) {
if (isset($v['group'])) {
foreach ($v['group'] as $key => $tg) {
$tgdata = C::t('pichome_taggroup')->fetch($tg['cid']);
if ($tgdata) {
$tgdata['chacked'] = $tg['chacked'];
$data['filter'][$k]['group'][$key] = $tgdata;
} else {
unset($data['filter'][$k]['group'][$key]);
}
}
}
}
}
$pichomefilterfileds = $data['filter'];
exit(json_encode(array('success' => true, 'data' => $pichomefilterfileds,'folderdata'=>$folderdata,'tagdata'=>$tagdata,'shape'=>$shapelable)));
} else {
exit(json_encode(array('error' => true)));
}
} else {
if (isset($_G['setting']['pichomefilterfileds'])) {
exit(json_encode(array('success' => true, 'data' => $_G['setting']['pichomefilterfileds'],'folderdata'=>$folderdata,'tagdata'=>$tagdata,'shape'=>$shapelable)));
} else {
$setting = C::t('setting')->fetch_all('pichomefilterfileds');
exit(json_encode(array('success' => true, 'data' => $setting['pichomefilterfileds'],'folderdata'=>$folderdata,'tagdata'=>$tagdata,'shape'=>$shapelable)));
}
}
} elseif ($operation == 'createshare') {//分享
$rid = isset($_GET['rid']) ? trim($_GET['rid']) : '';
if ($shareurl = C::t('pichome_share')->add_share($rid)) {
exit(json_encode(array('success' => $shareurl)));
} else {
exit(json_encode(array('error' => true)));
}
} elseif ($operation == 'getapp') {
$apps = [];
foreach (DB::fetch_all("select * from %t where 1", array('pichome_vapp')) as $v) {
$apps[] = $v;
}
exit(json_encode(array('vapps' => $apps)));
} elseif ($operation == 'reloadresources') {//更新单个文件资源
$rid = isset($_GET['rid']) ? trim($_GET['rid']) : '';
if (!$rid) exit(json_encode(array('error' => 'empty resources')));
include_once dzz_libfile('eagleexport');
$eagleexport = new eagleexport();
if ($eagleexport->exportAloneFile($rid)) {
exit(json_encode(array('success' => true)));
}
exit(json_encode(array('success' => true)));
} elseif ($operation == 'sharedetails') {//分享详情数据
$id = isset($_GET['id']) ? trim($_GET['id']) : '';
$shareid = dzzdecode($id, '', 0);
$sharedata = C::t('pichome_share')->fetch($shareid);
if (!$sharedata) exit(json_encode(array('error' => 'share is not exists')));
$resourcesdata = C::t('pichome_resources')->fetch_by_rid($sharedata['filepath']);
exit(json_encode(array('data' => $resourcesdata)));
} elseif ($operation == 'getapptagcat') {
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
$catdata = C::t('pichome_taggroup')->fetch_by_appid($appid);
exit(json_encode($catdata));
} elseif ($operation == 'appset') {
Hook::listen('adminlogin');//检查是否登录,未登录跳转到登录界面
$appid = isset($_GET['appid']) ? trim($_GET['appid']) : '';
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,
];
C::t('pichome_vapp')->update($appid, $setarr);
exit(json_encode(array('success' => true)));
} elseif($operation == 'expandedsetting'){
if (submitcheck('settingsubmit')) {
$pichomeimageexpanded = $_GET['pichomeimageexpanded'];
C::t('user_setting')->update_by_skey('pichomeimageexpanded',$pichomeimageexpanded);
exit(json_encode(array('success' => true)));
}
}elseif($operation == 'gethostip'){
$iphost = [];
$os = PHP_OS;
if(preg_match('/^WIN(.+?)/i',$os)){
$host= gethostname();
}else{
$host = $_SERVER['SERVER_NAME'];
}
$host = $_SERVER['SERVER_NAME'];
$ip = gethostbyname($host);
$ip = filter_var($ip,FILTER_VALIDATE_IP);
if(!$ip || strpos($ip,'127') === 0){
if(preg_match('/^WIN(.+?)/i',$os)){
$host= gethostname();
}else{
$host = $_SERVER['SERVER_NAME'];
}
$ip = gethostbyname($host);
}
if($_SERVER['SERVER_PORT'] == 443){
$siteurl = 'https://'.$_SERVER['SERVER_NAME'];
} elseif($_SERVER["SERVER_PORT"] == 80) {
$siteurl = 'http://'.$_SERVER['SERVER_NAME'];
}else{
$ip = $ip . ':' . $_SERVER["SERVER_PORT"];
$siteurl = 'http://'.$_SERVER['SERVER_NAME'] . ':' . $_SERVER["SERVER_PORT"];
}
$iphost = ['ip'=>$ip,'siteurl'=>$siteurl];
exit(json_encode($iphost));
}