2022-02-24 16:53:32 +08:00
< ? php
if ( ! defined ( 'IN_OAOOA' )) {
exit ( 'Access Denied' );
}
@ set_time_limit ( 0 );
@ ini_set ( 'max_execution_time' , 0 );
require_once ( DZZ_ROOT . './dzz/class/class_encode.php' );
require_once './core/class/class_Color.php' ;
require_once libfile ( 'function/user' , '' , 'user' );
class eagleexport
{
private $path = '' ; //待执行数据path
private $appid = 0 ; //库id
private $uid = 0 ; //用户id
private $username = null ; //用户名
private $filenum = 0 ; //总文件数
private $checkpage = 1 ;
private $checklimit = 1000 ;
2024-01-31 01:00:33 +08:00
private $onceexportnum = 100 ;
2022-02-24 16:53:32 +08:00
private $checknum = 0 ;
private $eagledir = DZZ_ROOT . 'library' ;
private $readtxt = DZZ_ROOT . './data/attachment/cache/' ;
private $exportstatus = 0 ;
private $donum = 0 ;
private $lastid = '' ;
2022-06-25 14:48:20 +08:00
private $defaultperm = 0 ;
private $iscloud = false ;
2024-01-31 01:00:33 +08:00
private $processname = '' ;
public $palette = [
2024-03-12 17:49:15 +08:00
0xfff8e1 , 0xf57c00 , 0xffd740 , 0xb3e5fc , 0x607d8b , 0xd7ccc8 ,
0xff80ab , 0x4e342e , 0x9e9e9e , 0x66bb6a , 0xaed581 , 0x18ffff ,
0xffe0b2 , 0xc2185b , 0x00bfa5 , 0x00e676 , 0x0277bd , 0x26c6da ,
0x7c4dff , 0xea80fc , 0x512da8 , 0x7986cb , 0x00e5ff , 0x0288d1 ,
0x69f0ae , 0x3949ab , 0x8e24aa , 0x40c4ff , 0xdd2c00 , 0x283593 ,
0xaeea00 , 0xffa726 , 0xd84315 , 0x82b1ff , 0xab47bc , 0xd4e157 ,
0xb71c1c , 0x880e4f , 0x00897b , 0x689f38 , 0x212121 , 0xffff00 ,
0x827717 , 0x8bc34a , 0xe0f7fa , 0x304ffe , 0xd500f9 , 0xec407a ,
0x6200ea , 0xffab00 , 0xafb42b , 0x6a1b9a , 0x616161 , 0x8d6e63 ,
0x80cbc4 , 0x8c9eff , 0xffeb3b , 0xffe57f , 0xfff59d , 0xff7043 ,
0x1976d2 , 0x5c6bc0 , 0x64dd17 , 0xffd600
2024-01-31 01:00:33 +08:00
];
2024-03-12 17:49:15 +08:00
2022-02-24 16:53:32 +08:00
public function __construct ( $data = array ())
{
2024-01-31 01:00:33 +08:00
if ( strpos ( $data [ 'path' ], ':' ) === false ) {
2022-06-25 14:48:20 +08:00
$bz = 'dzz' ;
$did = 1 ;
2024-01-31 01:00:33 +08:00
} else {
2022-06-25 14:48:20 +08:00
$patharr = explode ( ':' , $data [ 'path' ]);
$bz = $patharr [ 0 ];
$did = $patharr [ 1 ];
}
2024-01-31 01:00:33 +08:00
if ( $bz == 'dzz' ) $did = 1 ;
if ( ! is_numeric ( $did ) || $did < 2 ) {
2022-06-25 14:48:20 +08:00
$this -> path = str_replace ( '/' , BS , $data [ 'path' ]);
$this -> path = str_replace ( 'dzz::' , '' , $data [ 'path' ]);
2024-01-31 01:00:33 +08:00
} else {
2022-06-25 14:48:20 +08:00
$this -> iscloud = true ;
$this -> path = $data [ 'path' ];
}
2022-02-24 16:53:32 +08:00
$this -> appid = $data [ 'appid' ];
2024-03-12 17:49:15 +08:00
$this -> processname = 'PICHOMEVAPPISDEL_' . $data [ 'appid' ];
2024-01-31 01:00:33 +08:00
2022-02-24 16:53:32 +08:00
$this -> uid = $data [ 'uid' ];
$this -> username = $data [ 'username' ];
$this -> exportstatus = $data [ 'state' ];
$this -> donum = $data [ 'donum' ];
$this -> filenum = $data [ 'filenum' ];
$this -> lastid = $data [ 'lastid' ];
2024-03-12 17:49:15 +08:00
$this -> defaultperm = isset ( $data [ 'perm' ]) ? intval ( $data [ 'perm' ]) : 0 ;
2022-02-24 16:53:32 +08:00
}
public function getpathdata ( $folderdata , $appid , $pathdata = array ())
{
foreach ( $folderdata as $v ) {
$pathdata [ $v [ 'id' ] . $appid ] = $v [ 'name' ];
if ( $v [ 'children' ]) {
$tmpchild = $v [ 'children' ];
$pathdata = $this -> getpathdata ( $tmpchild , $appid , $pathdata );
}
}
return $pathdata ;
}
public function initFoldertag ()
{
2024-03-12 17:49:15 +08:00
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
$jsonfile = ( $this -> iscloud ) ? $this -> path . '/metadata.json' : $this -> path . BS . 'metadata.json' ;
2022-06-25 14:48:20 +08:00
$appdatas = file_get_contents ( IO :: getStream ( $jsonfile ));
2022-02-24 16:53:32 +08:00
//解析出json数据
$appdatas = json_decode ( $appdatas , true );
//目录数据
$folderdata = $appdatas [ 'folders' ];
2024-03-12 17:49:15 +08:00
$efids = C :: t ( '#eagle#eagle_folderrecord' ) -> insert_folderdata_by_appid ( $this -> appid , $folderdata , $this -> defaultperm );
2022-05-02 22:31:35 +08:00
$delids = [];
2024-03-12 17:49:15 +08:00
foreach ( DB :: fetch_all ( " select id from %t where efid not in(%n) and appid = %s " , array ( 'eagle_folderrecord' , $efids , $this -> appid )) as $delid ) {
2022-05-02 22:31:35 +08:00
$delids [] = $delid [ 'id' ];
}
//删除多余目录
2024-03-12 17:49:15 +08:00
foreach ( DB :: fetch_all ( " select f.fid from %t f left join %t ef on f.fid=ef.fid where f.appid = %s and ISNULL(ef.id) " , array ( 'pichome_folder' , 'eagle_folderrecord' , $this -> appid )) as $dv ) {
2022-05-02 22:31:35 +08:00
C :: t ( 'pichome_folder' ) -> delete_by_fids ( $dv );
}
//对比目录数据
2024-03-12 17:49:15 +08:00
if ( $delids ) C :: t ( '#eagle#eagle_folderrecord' ) -> delete_by_ids ( $delids );
2022-02-24 16:53:32 +08:00
//标签数据
$tagdata = $appdatas [ 'tagsGroups' ];
$currentcids = [];
$tids = [];
foreach ( $tagdata as $v ) {
$taggroupdata = [
'cid' => $v [ 'id' ] . $this -> appid ,
'catname' => $v [ 'name' ],
'appid' => $this -> appid ,
'dateline' => TIMESTAMP
];
//插入或更新标签分类数据
$cid = C :: t ( 'pichome_taggroup' ) -> insert ( $taggroupdata );
$currentcids [] = $cid ;
foreach ( $v [ 'tags' ] as $val ) {
$tid = C :: t ( 'pichome_tag' ) -> insert ( $val , 1 );
$tids [] = $tid ;
if ( $cid ) {
$relasetarr = [ 'cid' => $cid , 'tid' => $tid , 'appid' => $this -> appid ];
C :: t ( 'pichome_tagrelation' ) -> insert ( $relasetarr );
}
}
}
if ( $tids ) {
//查询关系表中包含的不存在的标签关系
$drids = [];
foreach ( DB :: fetch_all ( " select id from %t where tid not in(%n) and appid = %s " , array ( 'pichome_tagrelation' , $tids , $this -> appid )) as $rv ) {
$drids [] = $rv [ 'id' ];
}
//删除不存在的标签关系数据
C :: t ( 'pichome_tagrelation' ) -> delete ( $drids );
}
$ocids = C :: t ( 'pichome_taggroup' ) -> fetch_cid_by_appid ( $this -> appid );
$delcids = array_diff ( $ocids , $currentcids );
C :: t ( 'pichome_taggroup' ) -> delete_by_cids ( $delcids );
return true ;
}
2024-03-12 17:49:15 +08:00
2022-06-25 14:48:20 +08:00
//读取云存储数据
2024-03-12 17:49:15 +08:00
public function readcloudDirdata ( $path , $force = 0 )
{
$prepatharr = explode ( ':' , $path );
//获取mtime.json
$mtimejsonfile = $this -> path . '/mtime.json' ;
$mtimedata = file_get_contents ( IO :: getStream ( $mtimejsonfile ));
if ( $mtimedata ) {
$vappmtimedata = json_decode ( $mtimedata , true );
unset ( $mtimedata );
$this -> filenum = $vappmtimedata [ 'all' ];
unset ( $vappmtimedata );
2024-01-31 01:00:33 +08:00
2024-03-12 17:49:15 +08:00
} else {
return array ( 'error' => '信息获取失败' );
2022-06-25 14:48:20 +08:00
}
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
/* $prepath = $prepatharr [ 2 ];
$returndata = IO :: getFolderlist ( $path , $nextmarker , $by , $order , $limit , $force );
if ( $returndata [ 'error' ]){
return array ( 'error' => $returndata [ 'error' ]);
} else {
foreach ( $returndata [ 'folder' ] as $v ){
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
$v = str_replace ( $prepath , '' , $v );
$v = trim ( $v , '/' );
if ( IO :: checkfileexists ( $this -> path . '/images/' . $v . '/metadata.json' )){
$this -> filenum ++ ;
fwrite ( $thandle , $v . " \n " );
}
}
}
runlog ( 'aaaaeagle' , print_r ( $returndata , true ));
if ( $returndata [ 'IsTruncated' ]){
$istruncated = $returndata [ 'NextMarker' ];
unset ( $returndata );
$this -> readcloudDirdata ( $thandle , $path , $istruncated , $by , $order , $limit , $force );
} else {
return array ( 'success' => true );
} */
2022-06-25 14:48:20 +08:00
}
2024-03-12 17:49:15 +08:00
2022-06-25 14:48:20 +08:00
//读取本地目录数据
2024-03-12 17:49:15 +08:00
public function readLocalDirdata ( $thandle , $path )
{
2022-06-25 14:48:20 +08:00
if ( $dch = opendir ( $path )) {
while (( $file = readdir ( $dch )) != false ) {
2024-03-12 17:49:15 +08:00
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
2022-06-25 14:48:20 +08:00
if ( $file != '.' && $file != '..' ) {
$filePath = $path . '/' . $file ;
2024-03-12 17:49:15 +08:00
//if (is_dir($filePath) && IO::checkfileexists($filePath . '/metadata.json')) {
$this -> filenum ++ ;
fwrite ( $thandle , $file . " \n " );
// }
2022-06-25 14:48:20 +08:00
unset ( $filePath );
unset ( $file );
2022-02-24 16:53:32 +08:00
}
}
2022-06-25 14:48:20 +08:00
closedir ( $dch );
} else {
return array ( 'error' => 'Read Dir Failer' );
}
}
//生成记录文件
2024-03-12 17:49:15 +08:00
public function createReadTxt ( $readtxt )
{
$filedir = ( $this -> iscloud ) ? $this -> path . '/images' : $this -> path . BS . 'images' ;
2022-06-25 14:48:20 +08:00
$this -> filenum = 0 ;
2024-03-12 17:49:15 +08:00
if ( $this -> iscloud ) {
$readreturn = $this -> readcloudDirdata ( $filedir );
} else {
$thandle = fopen ( $readtxt , 'w+' );
$readreturn = $this -> readLocalDirdata ( $thandle , $filedir );
fclose ( $thandle );
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
if ( $readreturn [ 'error' ]) {
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'state' => 0 ));
return array ( 'error' => $readreturn [ 'error' ]);
2022-06-25 14:48:20 +08:00
}
$this -> initFoldertag ();
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'filenum' => $this -> filenum , 'state' => 2 ));
return array ( 'success' => true );
}
2022-05-02 22:31:35 +08:00
2022-06-25 14:48:20 +08:00
//初始化导入
public function initExport ()
{
$readtxt = $this -> readtxt . 'eagleexport' . md5 ( $this -> path ) . '.txt' ;
//如果导入时没有记录文件
2024-03-12 17:49:15 +08:00
if ( ! is_file ( $readtxt )) {
$readdata = $this -> createReadTxt ( $readtxt );
} else {
2022-06-25 14:48:20 +08:00
//如果有记录文件, 则对比记录文件生成时间和metadata.json时间,如果记录时间小于metadata.json时间重新生成记录文件
2024-03-12 17:49:15 +08:00
$metapath = ( $this -> iscloud ) ? $this -> path . '/metadata.json' : $this -> path . BS . 'metadata.json' ;
2022-06-25 14:48:20 +08:00
$metadatainfo = IO :: getMeta ( $metapath );
2024-03-12 17:49:15 +08:00
if ( filemtime ( $readtxt ) < $metadatainfo [ 'dateline' ]) {
$readdata = $this -> createReadTxt ( $readtxt );
} else {
2022-06-25 14:48:20 +08:00
$this -> initFoldertag ();
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'state' => 2 ));
}
}
2024-03-12 17:49:15 +08:00
if ( isset ( $readdata ) && $readdata [ 'error' ]) {
return array ( 'error' => $readdata [ 'error' ]);
} else {
2022-06-25 14:48:20 +08:00
return array ( 'success' => true );
}
2022-05-02 22:31:35 +08:00
2022-02-24 16:53:32 +08:00
}
//获取文件可访问的真实地址
public function getFileRealFileName ( $filepath , $filename , $ext )
{
$charsetarr = [ 'GBK' , 'GB18030' ];
$returnname = $filename ;
if ( ! is_file ( $filepath . BS . $filename . '.' . $ext )) {
foreach ( $charsetarr as $v ) {
$filemetadataname = diconv ( $filename , CHARSET , $v );
if ( is_file ( $filepath . BS . $filemetadataname . '.' . $ext )) {
$returnname = $filemetadataname ;
break ;
}
}
}
return $returnname ;
}
//生成主键rid
public function createrid ()
{
$microtime = microtime ();
list ( $msec , $sec ) = explode ( ' ' , $microtime );
$msec = $msec * 1000000 ;
$idstr = md5 ( $sec . $msec . random ( 6 ) . $this -> appid );
if ( DB :: result_first ( " select count(rid) from %t where rid = %s " , array ( 'pichome_resources' , $idstr ))) {
$this -> create_id ();
}
return $idstr ;
}
public function execExport ( $force = false )
{
2024-03-12 17:49:15 +08:00
if ( $this -> iscloud ) {
return $this -> execExportCloud ( $force );
} else {
$filedir = ( $this -> iscloud ) ? $this -> path . '/images' : $this -> path . BS . 'images' ;
$readtxt = $this -> readtxt . 'eagleexport' . md5 ( $this -> path ) . '.txt' ;
if ( filesize ( $readtxt ) == 0 ) {
@ unlink ( $readtxt );
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'lastid' => 0 , 'percent' => 100 , 'donum' => 0 , 'state' => 3 , 'filenum' => $this -> filenum ));
return array ( 'success' => true );
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
}
if ( $this -> lastid ) {
$start = $this -> lastid ;
} else $start = 0 ;
$spl_object = new SplFileObject ( $readtxt , 'rb' );
$spl_object -> seek ( $start );
if ( $this -> lastid < $this -> filenum && $this -> exportstatus == 2 ) {
$i = 0 ;
while ( is_file ( $readtxt ) && ! $spl_object -> eof ()) {
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
$i ++ ;
if ( $i > $this -> onceexportnum ) {
break ;
2022-06-25 14:48:20 +08:00
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
$file = $spl_object -> current ();
$file = trim ( $file );
$filePath = $filedir . '/' . $file ;
$id = trim ( str_replace ( '.info' , '' , $file ));
//文件路径
$tmppath = $filePath ;
unset ( $filePath );
//文件信息文件路径
$metadatajsonfile = ( $this -> iscloud ) ? $tmppath . '/metadata.json' : $tmppath . BS . 'metadata.json' ;
//尝试获取记录表记录
$rdata = C :: t ( '#eagle#eagle_record' ) -> fetch_by_eid ( $id , $this -> appid );
$rid = '' ;
if ( ! isset ( $rdata [ 'rid' ])) {
$orid = $id . $this -> appid ; //原来rid格式
if ( $lastdate = DB :: result_first ( " select lastdate from %t where rid = %s " , array ( 'pichome_resources' , $orid ))) {
$rid = $orid ;
}
} else {
$rid = $rdata [ 'rid' ];
$lastdate = $rdata [ 'dateline' ];
2022-05-02 22:31:35 +08:00
}
2024-03-12 17:49:15 +08:00
//判断是否含有数据信息文件
if ( IO :: checkfileexists ( $metadatajsonfile )) {
$metadatajsonfileinfo = IO :: getMeta ( $metadatajsonfile );
$flastdate = $metadatajsonfileinfo [ 'dateline' ];
$metadata = file_get_contents ( IO :: getStream ( $metadatajsonfile ));
$filemetadata = json_decode ( $metadata , true );
//如果是删除状态,并且已有数据则执行删除
if ( $filemetadata [ 'isDeleted' ]) {
2024-04-30 22:55:18 +08:00
2024-03-12 17:49:15 +08:00
if ( $rid ) C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
} else {
//如果不是新生成rid
if ( $rid ) {
$data = C :: t ( 'pichome_resources' ) -> fetch ( $rid );
//判断最后更新时间
if ( $force || $lastdate < $flastdate ) {
$filemetadataname = ( $this -> iscloud ) ? $filemetadata [ 'name' ] : $this -> getFileRealFileName ( $tmppath , $filemetadata [ 'name' ], $filemetadata [ 'ext' ]);
//文件名称
$filename = $filemetadataname . '.' . $filemetadata [ 'ext' ];
//缩略图名称
$thumbname = $filemetadataname . '_thumbnail.png' ;
//文件路径
$file = ( $this -> iscloud ) ? $tmppath . '/' . $filename : $tmppath . BS . $filename ;
//缩略图路径
$thumbfile = ( $this -> iscloud ) ? $tmppath . '/' . $thumbname : $tmppath . BS . $thumbname ;
$realfolderdata = [];
if ( ! empty ( $filemetadata [ 'folders' ])) {
$realfolderdata = C :: t ( '#eagle#eagle_folderrecord' ) -> fetch_fid_by_efid ( $filemetadata [ 'folders' ], $this -> appid );
}
$currentperm = ( ! empty ( $realfolderdata )) ? max ( $realfolderdata ) : $this -> defaultperm ;
$realfids = array_keys ( $realfolderdata );
$haspassword = false ;
if ( ! empty ( $realfids )) {
//如果目录含有密码则不导入数据直接跳过
$haspassword = C :: t ( 'pichome_folder' ) -> check_haspasswrod ( $realfids , $this -> appid );
}
if ( $haspassword ) {
C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
} else {
//如果mtime发生变化则删除原数据, 重新导入
if ( $data [ 'mtime' ] < $filemetadata [ 'mtime' ]) {
C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
$filemetadata [ 'rid' ] = $this -> createrid ();
$filemetadata [ 'filename' ] = $filemetadata [ 'name' ];
$filemetadata [ 'file' ] = $file ;
$filemetadata [ 'thumbfile' ] = $thumbfile ;
$filemetadata [ 'rid' ] = $rid ;
$filemetadata [ 'mtime' ] = $filemetadata [ 'mtime' ] ? $filemetadata [ 'mtime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'btime' ] = $filemetadata [ 'btime' ] ? $filemetadata [ 'btime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'dateline' ] = $filemetadata [ 'lastModified' ];
$filemetadata [ 'lastdate' ] = $flastdate ;
$filemetadata [ 'folders' ] = $realfids ;
$filemetadata [ 'level' ] = $currentperm ;
$this -> exportfile ( $id , $filemetadata );
unset ( $filemetadata );
} else {
//信息表数据记录
$setarr = [ 'appid' => $this -> appid ];
$setarr [ 'searchval' ] = $filemetadata [ 'name' ];
//查询原数据中的属性信息
$attrdata = C :: t ( 'pichome_resources_attr' ) -> fetch ( $rid );
$filename = $filemetadata [ 'name' ] . '.' . $filemetadata [ 'ext' ];
//检查reources数据变化
$resourcesarr = [
'name' => $filename ,
'dateline' => $filemetadata [ 'lastModified' ],
'isdelete' => $filemetadata [ 'isDeleted' ],
'grade' => $filemetadata [ 'star' ] ? intval ( $filemetadata [ 'star' ]) : 0 ,
'lastdate' => $flastdate ,
'width' => $filemetadata [ 'width' ] ? $filemetadata [ 'width' ] : 0 ,
'height' => $filemetadata [ 'height' ] ? $filemetadata [ 'height' ] : 0 ,
'appid' => $this -> appid ,
'level' => $currentperm ,
'fids' => implode ( ',' , $realfids )
];
$file = str_replace ( '/' , BS , $file );
$attachment = str_replace ( $this -> path . BS , '' , $file );
$path = str_replace ( '/' , BS , $attachment );
$thumb = IO :: checkfileexists ( $thumbfile ) ? 1 : 0 ;
$thumbfile = str_replace ( array ( DZZ_ROOT , BS ), array ( '' , '/' ), $thumbfile );
$setarr [ 'path' ] = $path ;
$resourcesarr [ 'hasthumb' ] = $thumb ;
$resourcesarr [ 'rid' ] = $rid ;
if ( C :: t ( '#eagle#eagle_record' ) -> insert_data ( $id , $resourcesarr )) {
//缩略图数据
/* $thumbrecorddata = [
'rid' => $rid ,
'ext' => $filemetadata [ 'ext' ]
];
if ( $thumb ){
$imgdata = @ getimagesize ( $filemetadata [ 'thumbfile' ]);
$swidth = isset ( $imgdata [ 0 ]) ? $imgdata [ 0 ] : 0 ;
$sheight = isset ( $imgdata [ 1 ]) ? $imgdata [ 1 ] : 0 ;
$thumbrecorddata [ 'spath' ] = $filemetadata [ 'thumbfile' ];
$thumbrecorddata [ 'sstatus' ] = 1 ;
$thumbrecorddata [ 'swidth' ] = $swidth ;
$thumbrecorddata [ 'sheight' ] = $sheight ;
}
C :: t ( 'thumb_record' ) -> insert_data ( $thumbrecorddata ); */
//检查标签变化
//标签数据
$tags = $filemetadata [ 'tags' ];
$setarr [ 'searchval' ] .= implode ( '' , $tags );
//现有标签
$tagids = [];
//原有标签
$oldtids = [];
if ( $attrdata [ 'tag' ]) $oldtids = explode ( ',' , $attrdata [ 'tag' ]);
if ( ! empty ( $tags )) {
$tagids = $this -> addtag ( $tags );
$setarr [ 'tag' ] = implode ( ',' , $tagids );
}
$addtags = array_diff ( $tagids , $oldtids );
$deltags = array_diff ( $oldtids , $tagids );
if ( ! empty ( $deltags )) C :: t ( 'pichome_resourcestag' ) -> delete_by_ridtid ( $rid , $deltags );
foreach ( $addtags as $tid ) {
$rtag = [ 'appid' => $this -> appid , 'rid' => $rid , 'tid' => $tid ];
C :: t ( 'pichome_resourcestag' ) -> insert ( $rtag );
}
//检查标注变化
if ( isset ( $filemetadata [ 'comments' ])) {
$cids = [];
foreach ( $filemetadata [ 'comments' ] as $commentval ) {
$tcommentval [ 'id' ] = $commentval [ 'id' ] . $this -> appid ;
$tcommentval [ 'appid' ] = $this -> appid ;
$tcommentval [ 'rid' ] = $rid ;
$tcommentval [ 'x' ] = number_format ( $commentval [ 'x' ], 2 );
$tcommentval [ 'y' ] = number_format ( $commentval [ 'y' ], 2 );
$tcommentval [ 'width' ] = $commentval [ 'width' ];
$tcommentval [ 'height' ] = $commentval [ 'height' ];
$tcommentval [ 'annotation' ] = $commentval [ 'annotation' ];
$tcommentval [ 'lastModified' ] = $commentval [ 'lastModified' ];
try {
C :: t ( 'pichome_comments' ) -> insert ( $tcommentval );
$setarr [ 'searchval' ] .= $tcommentval [ 'annotation' ];
} catch ( Exception $e ) {
}
$cids [] = $tcommentval [ 'id' ];
unset ( $tcommentval );
}
$ocids = C :: t ( 'pichome_comments' ) -> fetch_id_by_rid ( $rid );
$delcids = array_diff ( $ocids , $cids );
if ( ! empty ( $delcids )) C :: t ( 'pichome_comments' ) -> delete ( $delcids );
} else {
C :: t ( 'pichome_comments' ) -> delete_by_rid ( $rid );
}
$rfids = [];
$orfids = C :: t ( 'pichome_folderresources' ) -> fetch_id_by_rid ( $rid );
C :: t ( 'pichome_folderresources' ) -> delete ( $orfids );
$setarr [ 'searchval' ] .= $resourcesarr [ 'name' ];
//检查目录变化
foreach ( $realfids as $fv ) {
$fid = $fv ;
if ( ! C :: t ( 'pichome_folder' ) -> check_password_byfid ( $fid )) {
$frsetarr = [ 'appid' => $this -> appid , 'rid' => $rid , 'fid' => $fid ];
C :: t ( 'pichome_folderresources' ) -> insert ( $frsetarr );
// $fids[] = $fid;
}
}
//尝试更新属性表数据
$setarr [ 'link' ] = $filemetadata [ 'url' ] ? trim ( $filemetadata [ 'url' ]) : '' ;
//描述数据
$setarr [ 'desc' ] = $filemetadata [ 'annotation' ] ? $filemetadata [ 'annotation' ] : '' ;
$setarr [ 'searchval' ] .= getstr ( $setarr [ 'desc' ], 255 ) . $setarr [ 'link' ];
if ( $filemetadata [ 'duration' ]) $setarr [ 'duration' ] = number_format ( $filemetadata [ 'duration' ], 2 );
$setarr [ 'rid' ] = $rid ;
C :: t ( 'pichome_resources_attr' ) -> insert ( $setarr );
unset ( $filemetadata );
unset ( $setarr );
}
}
}
} else {
if ( ! $rdata ) {
$setarr = [
'appid' => $this -> appid ,
'rid' => $rid ,
'eid' => $id ,
'dateline' => $flastdate
];
C :: t ( '#eagle#eagle_record' ) -> insert ( $setarr );
}
}
} else {
2024-01-31 01:00:33 +08:00
$realfolderdata = [];
2024-03-12 17:49:15 +08:00
if ( ! empty ( $filemetadata [ 'folders' ])) {
$realfolderdata = C :: t ( '#eagle#eagle_folderrecord' ) -> fetch_fid_by_efid ( $filemetadata [ 'folders' ], $this -> appid );
2022-05-02 22:31:35 +08:00
}
2024-01-31 01:00:33 +08:00
2024-03-12 17:49:15 +08:00
$currentperm = ( ! empty ( $realfolderdata )) ? max ( $realfolderdata ) : $this -> defaultperm ;
$realfids = array_keys ( $realfolderdata );
if ( ! empty ( $realfids )) {
2022-05-02 22:31:35 +08:00
//如果目录含有密码则不导入数据直接跳过
$haspassword = C :: t ( 'pichome_folder' ) -> check_haspasswrod ( $realfids , $this -> appid );
2024-03-12 17:49:15 +08:00
} else {
$haspassword = false ;
2022-05-02 22:31:35 +08:00
}
2024-03-12 17:49:15 +08:00
if ( ! $haspassword ) {
$filemetadataname = ( $this -> iscloud ) ? $filemetadata [ 'name' ] : $this -> getFileRealFileName ( $tmppath , $filemetadata [ 'name' ], $filemetadata [ 'ext' ]);
$filename = $filemetadataname . '.' . $filemetadata [ 'ext' ];
$thumbname = $filemetadataname . '_thumbnail.png' ;
$file = ( $this -> iscloud ) ? $tmppath . '/' . $filename : $tmppath . BS . $filename ;
$thumbfile = ( $this -> iscloud ) ? $tmppath . '/' . $thumbname : $tmppath . BS . $thumbname ;
$filemetadata [ 'filename' ] = $filemetadata [ 'name' ];
$filemetadata [ 'file' ] = $file ;
unset ( $file );
$filemetadata [ 'thumbfile' ] = $thumbfile ;
$filemetadata [ 'folders' ] = $realfids ;
$filemetadata [ 'level' ] = $currentperm ;
unset ( $thumbfile );
$filemetadata [ 'rid' ] = $this -> createrid ();
$filemetadata [ 'mtime' ] = $filemetadata [ 'mtime' ] ? $filemetadata [ 'mtime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'btime' ] = $filemetadata [ 'btime' ] ? $filemetadata [ 'btime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'dateline' ] = $filemetadata [ 'lastModified' ];
$filemetadata [ 'lastdate' ] = $flastdate ;
$this -> exportfile ( $id , $filemetadata );
unset ( $filemetadata );
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
}
2022-06-25 14:48:20 +08:00
2024-03-12 17:49:15 +08:00
}
} else {
//如果已有数据删除,否则不做处理
if ( ! $rid ) C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
}
$this -> donum += 1 ;
$percent = floor (( $this -> donum / $this -> filenum ) * 100 );
//防止因获取文件总个数不准确百分比溢出
$percent = ( $percent > 100 ) ? 100 : $percent ;
$state = ( $percent >= 100 ) ? 3 : 2 ;
if ( $state == 3 ) {
$spl_object = false ;
@ unlink ( $this -> readtxt . 'eagleexport' . md5 ( $this -> path ) . '.txt' );
$lastid = 0 ;
$percent = 0 ;
$this -> donum = 0 ;
} else {
$lastid = $this -> donum ;
}
//记录导入起始位置,以备中断后从此处,更改导入状态为正在导入
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'lastid' => $lastid , 'percent' => $percent , 'donum' => $this -> donum , 'state' => $state , 'filenum' => $this -> filenum ));
if ( $spl_object ) $spl_object -> next ();
}
}
2022-06-25 14:48:20 +08:00
2024-03-12 17:49:15 +08:00
return array ( 'success' => true );
}
}
public function execExportCloud ( $force = false )
{
$filedir = $this -> path . '/images' ;
$prepatharr = explode ( ':' , $filedir );
$prepath = $prepatharr [ 2 ];
if ( $this -> exportstatus == 2 ) {
$nextmarker = $this -> lastid ? $this -> lastid : '' ;
$returndata = IO :: getFolderlist ( $filedir , $nextmarker , 'time' , 'DESC' , $this -> onceexportnum );
if ( $returndata [ 'error' ]) {
return array ( 'error' => $returndata [ 'error' ]);
} else {
$i = 0 ;
foreach ( $returndata [ 'folder' ] as $v ) {
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
$v = str_replace ( $prepath , '' , $v );
$v = trim ( $v , '/' );
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
$file = $v ;
$file = trim ( $file );
$filePath = $filedir . '/' . $file ;
$id = trim ( str_replace ( '.info' , '' , $file ));
//文件路径
$tmppath = $filePath ;
unset ( $filePath );
//文件信息文件路径
$metadatajsonfile = ( $this -> iscloud ) ? $tmppath . '/metadata.json' : $tmppath . BS . 'metadata.json' ;
//尝试获取记录表记录
$rdata = C :: t ( '#eagle#eagle_record' ) -> fetch_by_eid ( $id , $this -> appid );
$rid = '' ;
if ( ! isset ( $rdata [ 'rid' ])) {
$orid = $id . $this -> appid ; //原来rid格式
if ( $lastdate = DB :: result_first ( " select lastdate from %t where rid = %s " , array ( 'pichome_resources' , $orid ))) {
$rid = $orid ;
}
} else {
$rid = $rdata [ 'rid' ];
$lastdate = $rdata [ 'dateline' ];
}
//判断是否含有数据信息文件
if ( IO :: checkfileexists ( $metadatajsonfile )) {
$metadatajsonfileinfo = IO :: getMeta ( $metadatajsonfile );
$flastdate = $metadatajsonfileinfo [ 'dateline' ];
$metadata = file_get_contents ( IO :: getStream ( $metadatajsonfile ));
$filemetadata = json_decode ( $metadata , true );
//如果是删除状态,并且已有数据则执行删除
if ( $filemetadata [ 'isDeleted' ]) {
if ( $rid ) C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
} else {
//如果不是新生成rid
if ( $rid ) {
$data = C :: t ( 'pichome_resources' ) -> fetch ( $rid );
//判断最后更新时间
if ( $force || $lastdate < $flastdate ) {
$filemetadataname = ( $this -> iscloud ) ? $filemetadata [ 'name' ] : $this -> getFileRealFileName ( $tmppath , $filemetadata [ 'name' ], $filemetadata [ 'ext' ]);
//文件名称
$filename = $filemetadataname . '.' . $filemetadata [ 'ext' ];
//缩略图名称
$thumbname = $filemetadataname . '_thumbnail.png' ;
//文件路径
$file = ( $this -> iscloud ) ? $tmppath . '/' . $filename : $tmppath . BS . $filename ;
//缩略图路径
$thumbfile = ( $this -> iscloud ) ? $tmppath . '/' . $thumbname : $tmppath . BS . $thumbname ;
$realfolderdata = [];
if ( ! empty ( $filemetadata [ 'folders' ])) {
$realfolderdata = C :: t ( '#eagle#eagle_folderrecord' ) -> fetch_fid_by_efid ( $filemetadata [ 'folders' ], $this -> appid );
}
$currentperm = ( ! empty ( $realfolderdata )) ? max ( $realfolderdata ) : $this -> defaultperm ;
$realfids = array_keys ( $realfolderdata );
$haspassword = false ;
if ( ! empty ( $realfids )) {
//如果目录含有密码则不导入数据直接跳过
$haspassword = C :: t ( 'pichome_folder' ) -> check_haspasswrod ( $realfids , $this -> appid );
}
if ( $haspassword ) {
C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
} else {
//如果mtime发生变化则删除原数据, 重新导入
if ( $data [ 'mtime' ] < $filemetadata [ 'mtime' ]) {
C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
$filemetadata [ 'rid' ] = $this -> createrid ();
$filemetadata [ 'filename' ] = $filemetadata [ 'name' ];
$filemetadata [ 'file' ] = $file ;
$filemetadata [ 'thumbfile' ] = $thumbfile ;
$filemetadata [ 'rid' ] = $rid ;
$filemetadata [ 'mtime' ] = $filemetadata [ 'mtime' ] ? $filemetadata [ 'mtime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'btime' ] = $filemetadata [ 'btime' ] ? $filemetadata [ 'btime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'dateline' ] = $filemetadata [ 'lastModified' ];
$filemetadata [ 'lastdate' ] = $flastdate ;
$filemetadata [ 'folders' ] = $realfids ;
$filemetadata [ 'level' ] = $currentperm ;
$this -> exportfile ( $id , $filemetadata );
unset ( $filemetadata );
} else {
//信息表数据记录
$setarr = [ 'appid' => $this -> appid ];
$setarr [ 'searchval' ] = $filemetadata [ 'name' ];
//查询原数据中的属性信息
$attrdata = C :: t ( 'pichome_resources_attr' ) -> fetch ( $rid );
$filename = $filemetadata [ 'name' ] . '.' . $filemetadata [ 'ext' ];
//检查reources数据变化
$resourcesarr = [
'name' => $filename ,
'dateline' => $filemetadata [ 'lastModified' ],
'isdelete' => $filemetadata [ 'isDeleted' ],
'grade' => $filemetadata [ 'star' ] ? intval ( $filemetadata [ 'star' ]) : 0 ,
'lastdate' => $flastdate ,
'width' => $filemetadata [ 'width' ] ? $filemetadata [ 'width' ] : 0 ,
'height' => $filemetadata [ 'height' ] ? $filemetadata [ 'height' ] : 0 ,
'appid' => $this -> appid ,
'level' => $currentperm ,
'fids' => implode ( ',' , $realfids )
2024-01-31 01:00:33 +08:00
];
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
$file = str_replace ( '/' , BS , $file );
$attachment = str_replace ( $this -> path . BS , '' , $file );
$path = str_replace ( '/' , BS , $attachment );
$thumb = IO :: checkfileexists ( $thumbfile ) ? 1 : 0 ;
$thumbfile = str_replace ( array ( DZZ_ROOT , BS ), array ( '' , '/' ), $thumbfile );
$setarr [ 'path' ] = $path ;
$resourcesarr [ 'hasthumb' ] = $thumb ;
$resourcesarr [ 'rid' ] = $rid ;
if ( C :: t ( '#eagle#eagle_record' ) -> insert_data ( $id , $resourcesarr )) {
//缩略图数据
/* $thumbrecorddata = [
'rid' => $rid ,
'ext' => $filemetadata [ 'ext' ]
];
if ( $thumb ){
$imgdata = @ getimagesize ( $filemetadata [ 'thumbfile' ]);
$swidth = isset ( $imgdata [ 0 ]) ? $imgdata [ 0 ] : 0 ;
$sheight = isset ( $imgdata [ 1 ]) ? $imgdata [ 1 ] : 0 ;
$thumbrecorddata [ 'spath' ] = $filemetadata [ 'thumbfile' ];
$thumbrecorddata [ 'sstatus' ] = 1 ;
$thumbrecorddata [ 'swidth' ] = $swidth ;
$thumbrecorddata [ 'sheight' ] = $sheight ;
}
C :: t ( 'thumb_record' ) -> insert_data ( $thumbrecorddata ); */
//检查标签变化
//标签数据
$tags = $filemetadata [ 'tags' ];
$setarr [ 'searchval' ] .= implode ( '' , $tags );
//现有标签
$tagids = [];
//原有标签
$oldtids = [];
if ( $attrdata [ 'tag' ]) $oldtids = explode ( ',' , $attrdata [ 'tag' ]);
if ( ! empty ( $tags )) {
$tagids = $this -> addtag ( $tags );
$setarr [ 'tag' ] = implode ( ',' , $tagids );
}
$addtags = array_diff ( $tagids , $oldtids );
$deltags = array_diff ( $oldtids , $tagids );
2022-05-02 22:31:35 +08:00
2024-03-12 17:49:15 +08:00
if ( ! empty ( $deltags )) C :: t ( 'pichome_resourcestag' ) -> delete_by_ridtid ( $rid , $deltags );
foreach ( $addtags as $tid ) {
$rtag = [ 'appid' => $this -> appid , 'rid' => $rid , 'tid' => $tid ];
C :: t ( 'pichome_resourcestag' ) -> insert ( $rtag );
}
//检查标注变化
if ( isset ( $filemetadata [ 'comments' ])) {
$cids = [];
foreach ( $filemetadata [ 'comments' ] as $commentval ) {
$tcommentval [ 'id' ] = $commentval [ 'id' ] . $this -> appid ;
$tcommentval [ 'appid' ] = $this -> appid ;
$tcommentval [ 'rid' ] = $rid ;
$tcommentval [ 'x' ] = number_format ( $commentval [ 'x' ], 2 );
$tcommentval [ 'y' ] = number_format ( $commentval [ 'y' ], 2 );
$tcommentval [ 'width' ] = $commentval [ 'width' ];
$tcommentval [ 'height' ] = $commentval [ 'height' ];
$tcommentval [ 'annotation' ] = $commentval [ 'annotation' ];
$tcommentval [ 'lastModified' ] = $commentval [ 'lastModified' ];
try {
C :: t ( 'pichome_comments' ) -> insert ( $tcommentval );
$setarr [ 'searchval' ] .= $tcommentval [ 'annotation' ];
} catch ( Exception $e ) {
}
$cids [] = $tcommentval [ 'id' ];
unset ( $tcommentval );
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
}
$ocids = C :: t ( 'pichome_comments' ) -> fetch_id_by_rid ( $rid );
$delcids = array_diff ( $ocids , $cids );
if ( ! empty ( $delcids )) C :: t ( 'pichome_comments' ) -> delete ( $delcids );
} else {
C :: t ( 'pichome_comments' ) -> delete_by_rid ( $rid );
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
$rfids = [];
$orfids = C :: t ( 'pichome_folderresources' ) -> fetch_id_by_rid ( $rid );
C :: t ( 'pichome_folderresources' ) -> delete ( $orfids );
$setarr [ 'searchval' ] .= $resourcesarr [ 'name' ];
2022-02-24 16:53:32 +08:00
2022-05-02 22:31:35 +08:00
2024-03-12 17:49:15 +08:00
//检查目录变化
foreach ( $realfids as $fv ) {
$fid = $fv ;
if ( ! C :: t ( 'pichome_folder' ) -> check_password_byfid ( $fid )) {
$frsetarr = [ 'appid' => $this -> appid , 'rid' => $rid , 'fid' => $fid ];
C :: t ( 'pichome_folderresources' ) -> insert ( $frsetarr );
// $fids[] = $fid;
}
2022-05-02 22:31:35 +08:00
}
2024-03-12 17:49:15 +08:00
//尝试更新属性表数据
$setarr [ 'link' ] = $filemetadata [ 'url' ] ? trim ( $filemetadata [ 'url' ]) : '' ;
//描述数据
$setarr [ 'desc' ] = $filemetadata [ 'annotation' ] ? $filemetadata [ 'annotation' ] : '' ;
$setarr [ 'searchval' ] .= getstr ( $setarr [ 'desc' ], 255 ) . $setarr [ 'link' ];
if ( $filemetadata [ 'duration' ]) $setarr [ 'duration' ] = number_format ( $filemetadata [ 'duration' ], 2 );
$setarr [ 'rid' ] = $rid ;
C :: t ( 'pichome_resources_attr' ) -> insert ( $setarr );
unset ( $filemetadata );
unset ( $setarr );
2022-02-24 16:53:32 +08:00
}
}
}
2022-05-02 22:31:35 +08:00
2024-03-12 17:49:15 +08:00
} else {
if ( ! $rdata ) {
$setarr = [
'appid' => $this -> appid ,
'rid' => $rid ,
'eid' => $id ,
'dateline' => $flastdate
];
C :: t ( '#eagle#eagle_record' ) -> insert ( $setarr );
}
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
} else {
$realfolderdata = [];
if ( ! empty ( $filemetadata [ 'folders' ])) {
$realfolderdata = C :: t ( '#eagle#eagle_folderrecord' ) -> fetch_fid_by_efid ( $filemetadata [ 'folders' ], $this -> appid );
2024-01-31 01:00:33 +08:00
2024-03-12 17:49:15 +08:00
}
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
$currentperm = ( ! empty ( $realfolderdata )) ? max ( $realfolderdata ) : $this -> defaultperm ;
$realfids = array_keys ( $realfolderdata );
if ( ! empty ( $realfids )) {
//如果目录含有密码则不导入数据直接跳过
$haspassword = C :: t ( 'pichome_folder' ) -> check_haspasswrod ( $realfids , $this -> appid );
} else {
$haspassword = false ;
}
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
if ( ! $haspassword ) {
$filemetadataname = ( $this -> iscloud ) ? $filemetadata [ 'name' ] : $this -> getFileRealFileName ( $tmppath , $filemetadata [ 'name' ], $filemetadata [ 'ext' ]);
$filename = $filemetadataname . '.' . $filemetadata [ 'ext' ];
$thumbname = $filemetadataname . '_thumbnail.png' ;
$file = ( $this -> iscloud ) ? $tmppath . '/' . $filename : $tmppath . BS . $filename ;
$thumbfile = ( $this -> iscloud ) ? $tmppath . '/' . $thumbname : $tmppath . BS . $thumbname ;
$filemetadata [ 'filename' ] = $filemetadata [ 'name' ];
$filemetadata [ 'file' ] = $file ;
unset ( $file );
$filemetadata [ 'thumbfile' ] = $thumbfile ;
$filemetadata [ 'folders' ] = $realfids ;
$filemetadata [ 'level' ] = $currentperm ;
unset ( $thumbfile );
$filemetadata [ 'rid' ] = $this -> createrid ();
$filemetadata [ 'mtime' ] = $filemetadata [ 'mtime' ] ? $filemetadata [ 'mtime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'btime' ] = $filemetadata [ 'btime' ] ? $filemetadata [ 'btime' ] : $filemetadata [ 'modificationTime' ];
$filemetadata [ 'dateline' ] = $filemetadata [ 'lastModified' ];
$filemetadata [ 'lastdate' ] = $flastdate ;
$this -> exportfile ( $id , $filemetadata );
unset ( $filemetadata );
}
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
}
} else {
//如果已有数据删除,否则不做处理
if ( ! $rid ) C :: t ( 'pichome_resources' ) -> delete_by_rid ( $rid );
2022-02-24 16:53:32 +08:00
}
2024-03-12 17:49:15 +08:00
$this -> donum += 1 ;
$percent = floor (( $this -> donum / $this -> filenum ) * 100 );
//防止因获取文件总个数不准确百分比溢出
$percent = ( $percent > 100 ) ? 100 : $percent ;
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'percent' => $percent , 'donum' => $this -> donum , 'state' => 2 , 'filenum' => $this -> filenum ));
2022-02-24 16:53:32 +08:00
}
}
2024-03-12 17:49:15 +08:00
}
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
if ( $returndata [ 'IsTruncated' ]) {
$lastid = $returndata [ 'NextMarker' ];
$state = 2 ;
} else {
$state = 3 ;
2022-02-24 16:53:32 +08:00
2024-03-12 17:49:15 +08:00
}
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'lastid' => $lastid , 'percent' => $percent , 'donum' => $this -> donum , 'state' => $state , 'filenum' => $this -> filenum ));
2022-02-24 16:53:32 +08:00
return array ( 'success' => true );
}
//校验文件
public function execCheckFile ()
{
2022-06-25 14:48:20 +08:00
2022-02-24 16:53:32 +08:00
if ( $this -> exportstatus == 3 ) {
$total = DB :: result_first ( " select count(rid) from %t where appid = %s " , array ( 'pichome_resources' , $this -> appid ));
//校验文件
$this -> check_file ( $total );
}
return true ;
}
public function check_file ( $total )
{
2022-06-25 14:48:20 +08:00
2022-02-24 16:53:32 +08:00
if ( $this -> lastid < 1 ) $this -> lastid = 1 ;
$limitsql = ( $this -> lastid - 1 ) * $this -> checklimit . ',' . $this -> checklimit ;
$delrids = [];
$data = DB :: fetch_all ( " select rid,isdelete from %t where appid = %s order by lastdate asc limit $limitsql " , array ( 'pichome_resources' , $this -> appid ));
if ( empty ( $data )) {
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'percent' => 0 , 'state' => 4 , 'lastid' => 0 , 'donum' => 0 ));
//校验完成后更新目录文件数
foreach ( DB :: fetch_all ( " select count(rf.id) as num,f.fid from %t f left join %t rf on rf.fid=f.fid where f.appid = %s group by f.fid " , array ( 'pichome_folder' , 'pichome_folderresources' , $this -> appid )) as $v ) {
C :: t ( 'pichome_folder' ) -> update ( $v [ 'fid' ], array ( 'filenum' => $v [ 'num' ]));
}
//修正库中文件数
$total = DB :: result_first ( " select count(rid) from %t where appid = %s " , array ( 'pichome_resources' , $this -> appid ));
$hascatnum = DB :: result_first ( " SELECT count(DISTINCT rid) FROM %t where appid = %s " , array ( 'pichome_folderresources' , $this -> appid ));
$nosubfilenum = $total - $hascatnum ;
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'filenum' => $total , 'nosubfilenum' => $nosubfilenum ));
return true ;
}
foreach ( $data as $v ) {
2024-03-12 17:49:15 +08:00
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
2022-02-24 16:53:32 +08:00
if ( $v [ 'isdelete' ]) {
$delrids [] = $v [ 'rid' ];
} else {
2024-03-12 17:49:15 +08:00
$id = C :: t ( '#eagle#eagle_record' ) -> fetch_eid_by_rid ( $v [ 'rid' ], $this -> appid );
if ( ! $id ) {
2022-02-24 16:53:32 +08:00
$delrids [] = $v [ 'rid' ];
2024-03-12 17:49:15 +08:00
} else {
$filejson = ( $this -> iscloud ) ? $this -> path . '/images/' . $id . '.info/metadata.json' : $this -> path . BS . 'images' . BS . $id . '.info' . BS . 'metadata.json' ;
2022-06-25 14:48:20 +08:00
if ( ! IO :: checkfileexists ( $filejson )) {
2022-05-02 22:31:35 +08:00
$delrids [] = $v [ 'rid' ];
}
2022-02-24 16:53:32 +08:00
}
2022-05-02 22:31:35 +08:00
2022-02-24 16:53:32 +08:00
}
}
if ( ! empty ( $delrids )) {
//如果有需要删除的,删除后,则重新查询上一页数据
C :: t ( 'pichome_resources' ) -> delete_by_rid ( $delrids );
if ( $this -> lastid == 1 ) {
$percent = round (( $this -> checklimit / $total ) * 100 );
} else {
$percent = round ((( $this -> lastid - 1 ) * $this -> checklimit / $total ) * 100 );
}
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'lastid' => $this -> lastid , 'percent' => $percent , 'state' => 3 ));
} else {
if ( $this -> lastid == 1 ) {
$percent = round (( $this -> checklimit / $total ) * 100 );
} else {
$percent = round ((( $this -> lastid - 1 ) * $this -> checklimit / $total ) * 100 );
}
$percent = ( $percent > 100 ) ? 100 : $percent ;
C :: t ( 'pichome_vapp' ) -> update ( $this -> appid , array ( 'lastid' => $this -> lastid + 1 , 'percent' => $percent , 'state' => 3 ));
}
}
2024-03-12 17:49:15 +08:00
public function exportfile ( $id , $filemetadata )
2022-02-24 16:53:32 +08:00
{
$rid = $filemetadata [ 'rid' ];
2022-06-25 14:48:20 +08:00
if ( ! IO :: checkfileexists ( $filemetadata [ 'file' ])) {
2022-02-24 16:53:32 +08:00
return ;
}
2024-03-12 17:49:15 +08:00
if ( dzz_process :: getlocked ( $this -> processname )) exit ( 'vapp isdeleted' );
2022-06-25 14:48:20 +08:00
//$filemetadata['file'] = ($this->iscloud) ? str_replace(BS, '/', $filemetadata['file']):str_replace('/', BS, $filemetadata['file']);
2024-03-12 17:49:15 +08:00
$attachment = ( $this -> iscloud ) ? str_replace ( BS , '/' , $filemetadata [ 'file' ]) : str_replace ( '/' , BS , $filemetadata [ 'file' ]);
$path = ( $this -> iscloud ) ? str_replace ( $this -> path . '/' , '' , $attachment ) : str_replace ( $this -> path . BS , '' , $attachment );
2022-02-24 16:53:32 +08:00
unset ( $attachment );
2022-06-25 14:48:20 +08:00
$thumb = IO :: checkfileexists ( $filemetadata [ 'thumbfile' ]) ? 1 : 0 ;
2024-03-12 17:49:15 +08:00
$filemetadata [ 'thumbfile' ] = str_replace ( array ( DZZ_ROOT , BS ), array ( '' , '/' ), $filemetadata [ 'thumbfile' ]);
2022-02-24 16:53:32 +08:00
$type = getTypeByExt ( $filemetadata [ 'ext' ]);
$resourcesarr = [
'rid' => $rid ,
'uid' => $this -> uid ,
'username' => $this -> username ,
'appid' => $this -> appid ,
'width' => $filemetadata [ 'width' ] ? $filemetadata [ 'width' ] : 0 ,
'height' => $filemetadata [ 'height' ] ? $filemetadata [ 'height' ] : 0 ,
'name' => $filemetadata [ 'filename' ] . '.' . $filemetadata [ 'ext' ],
'ext' => $filemetadata [ 'ext' ],
'size' => $filemetadata [ 'size' ],
'dateline' => $filemetadata [ 'dateline' ],
'btime' => $filemetadata [ 'btime' ],
'mtime' => $filemetadata [ 'mtime' ],
'isdelete' => $filemetadata [ 'isDeleted' ],
'hasthumb' => $thumb ,
'grade' => $filemetadata [ 'star' ] ? intval ( $filemetadata [ 'star' ]) : 0 ,
'type' => $type ,
2022-06-25 14:48:20 +08:00
'lastdate' => $filemetadata [ 'lastdate' ],
2024-03-12 17:49:15 +08:00
'fids' => implode ( ',' , $filemetadata [ 'folders' ]),
'level' => $filemetadata [ 'level' ]
2022-02-24 16:53:32 +08:00
];
unset ( $type );
//插入文件表数据
2024-03-12 17:49:15 +08:00
if ( C :: t ( '#eagle#eagle_record' ) -> insert_data ( $id , $resourcesarr )) {
/* $thumbrecorddata = [
'rid' => $rid ,
'ext' => $filemetadata [ 'ext' ]
];
if ( $resourcesarr [ 'hasthumb' ]){
$imgdata = @ getimagesize ( $filemetadata [ 'thumbfile' ]);
$swidth = isset ( $imgdata [ 0 ]) ? $imgdata [ 0 ] : 0 ;
$sheight = isset ( $imgdata [ 1 ]) ? $imgdata [ 1 ] : 0 ;
$thumbrecorddata [ 'spath' ] = $filemetadata [ 'thumbfile' ];
$thumbrecorddata [ 'sstatus' ] = 1 ;
$thumbrecorddata [ 'swidth' ] = $swidth ;
$thumbrecorddata [ 'sheight' ] = $sheight ;
}
C :: t ( 'thumb_record' ) -> insert_data ( $thumbrecorddata ); */
2022-02-24 16:53:32 +08:00
DB :: delete ( 'pichome_folderresources' , array ( 'rid' => $rid ));
//获取属性表数据
$setarr = [];
$setarr [ 'searchval' ] = $resourcesarr [ 'name' ];
//$fids = [];
//插入目录关联表数据
foreach ( $filemetadata [ 'folders' ] as $fv ) {
$fid = $fv ;
if ( ! C :: t ( 'pichome_folder' ) -> check_password_byfid ( $fid )) {
$frsetarr = [ 'appid' => $this -> appid , 'rid' => $rid , 'fid' => $fid ];
C :: t ( 'pichome_folderresources' ) -> insert ( $frsetarr );
//$fids[] = $fid;
unset ( $frsetarr );
}
}
/* if ( ! empty ( $fids )){
foreach ( DB :: fetch_all ( " select fname from %t where fid in(%n) " , array ( 'pichome_folder' , $fids )) as $foldername ){
$setarr [ 'searchval' ] .= $foldername [ 'fname' ];
}
} */
//标签数据
$tags = $filemetadata [ 'tags' ];
$setarr [ 'searchval' ] .= implode ( '' , $tags );
if ( ! empty ( $tags )) {
$tagids = $this -> addtag ( $tags );
unset ( $tags );
foreach ( $tagids as $tid ) {
$rtag = [ 'appid' => $this -> appid , 'rid' => $rid , 'tid' => $tid ];
C :: t ( 'pichome_resourcestag' ) -> insert ( $rtag );
}
$setarr [ 'tag' ] = implode ( ',' , $tagids );
unset ( $tagids );
}
//颜色数据
if ( isset ( $filemetadata [ 'palettes' ])) {
$returndata = $this -> getColor ( $filemetadata [ 'palettes' ], $resourcesarr [ 'width' ], $resourcesarr [ 'height' ], $rid );
$setarr [ 'colors' ] = $returndata [ 'colors' ];
$setarr [ 'gray' ] = $returndata [ 'gray' ];
$setarr [ 'shape' ] = $returndata [ 'shape' ];
unset ( $returndata );
}
//标注数据
if ( isset ( $filemetadata [ 'comments' ])) {
foreach ( $filemetadata [ 'comments' ] as $commentval ) {
$tcommentval [ 'id' ] = $commentval [ 'id' ] . $this -> appid ;
$tcommentval [ 'appid' ] = $this -> appid ;
$tcommentval [ 'rid' ] = $rid ;
$tcommentval [ 'x' ] = number_format ( $commentval [ 'x' ], 2 );
$tcommentval [ 'y' ] = number_format ( $commentval [ 'y' ], 2 );
$tcommentval [ 'width' ] = $commentval [ 'width' ];
$tcommentval [ 'height' ] = $commentval [ 'height' ];
$tcommentval [ 'annotation' ] = $commentval [ 'annotation' ];
$tcommentval [ 'lastModified' ] = $commentval [ 'lastModified' ];
C :: t ( 'pichome_comments' ) -> insert ( $tcommentval );
$setarr [ 'searchval' ] .= $commentval [ 'annotation' ];
unset ( $tcommentval );
}
}
//时长
if ( $filemetadata [ 'duration' ]) $setarr [ 'duration' ] = number_format ( $filemetadata [ 'duration' ], 2 );
//链接数据
$setarr [ 'link' ] = $filemetadata [ 'url' ] ? trim ( $filemetadata [ 'url' ]) : '' ;
//描述数据
$setarr [ 'desc' ] = $filemetadata [ 'annotation' ] ? $filemetadata [ 'annotation' ] : '' ;
2024-03-12 17:49:15 +08:00
$setarr [ 'searchval' ] .= getstr ( $setarr [ 'desc' ], 255 ) . $setarr [ 'link' ];
2022-02-24 16:53:32 +08:00
$setarr [ 'rid' ] = $rid ;
$setarr [ 'appid' ] = $this -> appid ;
$setarr [ 'path' ] = $path ;
//echo '属性插入前缓存:'.memory_get_usage()/1024 . '<br>';
//插入数据
C :: t ( 'pichome_resources_attr' ) -> insert ( $setarr );
//echo '属性插入后缓存:'.memory_get_usage()/1024 . '<br>';
} else {
runlog ( 'eagleexport' , $rid );
}
}
//判断图片纯色
public function isgray ( $colors )
{
$i = 0 ;
if ( count ( $colors ) < 1 ) return 0 ;
foreach ( $colors as $color ) {
$color = new Color ( $color );
$rgb = $color -> toRGB ();
unset ( $color );
if ( abs ( $rgb [ 0 ] - $rgb [ 1 ]) < 10 && abs ( $rgb [ 2 ] - $rgb [ 1 ]) < 10 ) {
$i ++ ;
}
unset ( $rgb );
}
if ( $i == count ( $colors )) {
return 1 ;
} else {
return 0 ;
}
}
//获取颜色数据
public function getColor ( $colors , $width , $height , $rid )
{
//echo '颜色处理前:'.memory_get_usage()/1024 . '<br>';
2024-01-31 01:00:33 +08:00
$intcolorsarr = $palettesnum = $returndata = [];
2022-02-24 16:53:32 +08:00
$i = 1 ;
foreach ( $colors as $c ) {
$color = new \Color ( $c [ 'color' ]);
//获取颜色整型值
$intcolor = $color -> toInt ();
$intcolorsarr [] = $intcolor ;
2024-03-12 17:49:15 +08:00
$palettesnum [] = $p = $this -> getPaletteNumber ( $intcolor );
2024-01-31 01:00:33 +08:00
$palattedataarr = [ 'rid' => $rid , 'color' => $intcolor , 'weight' => $c [ 'ratio' ],
2024-03-12 17:49:15 +08:00
'r' => $c [ 'color' ][ 0 ], 'g' => $c [ 'color' ][ 1 ], 'b' => $c [ 'color' ][ 2 ], 'p' => $p ];
2022-02-24 16:53:32 +08:00
C :: t ( 'pichome_palette' ) -> insert ( $palattedataarr );
2024-01-31 01:00:33 +08:00
2022-02-24 16:53:32 +08:00
$i ++ ;
}
unset ( $colors );
//颜色整型值数据
2024-01-31 01:00:33 +08:00
$returndata [ 'colors' ] = implode ( ',' , $palettesnum );
2022-02-24 16:53:32 +08:00
$returndata [ 'gray' ] = $this -> isgray ( $intcolorsarr );
$returndata [ 'shape' ] = round (( $width / $height ) * 100 );
unset ( $intcolorsarr );
2024-01-31 01:00:33 +08:00
2022-02-24 16:53:32 +08:00
return $returndata ;
}
2024-03-12 17:49:15 +08:00
2024-01-31 01:00:33 +08:00
public function getPaletteNumber ( $colors , $palette = array ())
{
2022-02-24 16:53:32 +08:00
2024-01-31 01:00:33 +08:00
if ( empty ( $palette )) $palette = $this -> palette ;
$arr = array ();
if ( is_array ( $colors )) {
$isarray = 1 ;
} else {
$colors = ( array ) $colors ;
$isarray = 0 ;
}
foreach ( $colors as $color ) {
$bestColor = 0x000000 ;
$bestDiff = PHP_INT_MAX ;
$color = new Color ( $color );
foreach ( $palette as $key => $wlColor ) {
// calculate difference (don't sqrt)
$diff = $color -> getDiff ( $wlColor );
// see if we got a new best
if ( $diff < $bestDiff ) {
$bestDiff = $diff ;
$bestColor = $wlColor ;
}
}
unset ( $color );
$arr [] = array_search ( $bestColor , $palette );
}
return $isarray ? $arr : $arr [ 0 ];
}
2024-03-12 17:49:15 +08:00
2022-02-24 16:53:32 +08:00
//添加标签
public function addtag ( $tags )
{
$tagids = [];
foreach ( $tags as $v ) {
if ( ! preg_match ( '/^\s*$/' , $v )) {
if ( $tid = C :: t ( 'pichome_tag' ) -> insert ( $v )) {
$tagids [] = $tid ;
}
}
}
unset ( $tags );
return $tagids ;
}
}