2024-01-29 18:21:14 +08:00
< ? php
if ( ! defined ( 'IN_DZZ' )) {
exit ( 'Access Denied' );
}
class table_resources_attr extends dzz_table
{
public function __construct ()
{
$this -> _table = 'resources_attr' ;
$this -> _pk = 'id' ;
$this -> _pre_cache_key = 'resources_attr_' ;
$this -> _cache_ttl = 60 * 60 ;
parent :: __construct ();
}
public function delete_by_id ( $id ){
if ( ! $data = parent :: fetch ( $id )) return false ;
if ( $ret = parent :: delete ( $id )){
if ( $data [ 'skey' ] == 'icon' && $data [ 'sval' ] > 0 ){
C :: t ( 'attachment' ) -> delete_by_aid ( $data [ 'sval' ]);
}
$cachekey = 'resources_attr_data_' . $data [ 'rid' ] . $data [ 'vid' ];
$this -> clear_cache ( $cachekey );
}
return $ret ;
}
public function update ( $id , $setarr ){
if ( ! $data = parent :: fetch ( $id )) return false ;
if ( $ret = parent :: update ( $id , $setarr )){
if ( $setarr [ 'skey' ] == 'icon' ){
if ( $data [ 'sval' ]) C :: t ( 'attachment' ) -> delete_by_aid ( $data [ 'sval' ]);
if ( $setarr [ 'sval' ]) C :: t ( 'attachment' ) -> addcopy_by_aid ( $setarr [ 'sval' ]);
$cachekey = 'resources_attr_data_' . $data [ 'rid' ] . $data [ 'vid' ];
$this -> clear_cache ( $cachekey );
}
}
return $ret ;
}
public function insert ( $setarr ){
if ( $id = DB :: result_first ( " select id from %t where rid=%s and skey=%s and vid=%d " , array ( $this -> _table , $setarr [ 'rid' ], $setarr [ 'skey' ], intval ( $setarr [ 'vid' ])))){
if ( $setarr [ 'skey' ] == 'icon' ){
$o = parent :: fetch ( $id );
}
$ret = self :: update ( $id , $setarr );
} else {
if ( $id = parent :: insert ( $setarr , 1 )){
$cachekey = 'resources_attr_data_' . $setarr [ 'rid' ] . $setarr [ 'vid' ];
$this -> clear_cache ( $cachekey );
}
}
//处理图标
if ( $id && $setarr [ 'skey' ] == 'icon' ){
if ( $o [ 'sval' ]) C :: t ( 'attachment' ) -> delete_by_aid ( $o [ 'sval' ]);
if ( $setarr [ 'sval' ]) C :: t ( 'attachment' ) -> addcopy_by_aid ( $setarr [ 'sval' ]);
}
return $id ;
}
public function fetch_by_rid ( $rid , $vid = 0 ){
$cachekey = 'resources_attr_data_' . $rid . $vid ;
if ( $returndata = $this -> fetch_cache ( $cachekey )){
return $returndata ;
}
$returndata = array ();
2024-06-28 06:09:20 +00:00
foreach ( DB :: fetch_all ( " select * from %t where rid = %s and (vid = %d or vid='0') order by vid " , array ( $this -> _table , $rid , $vid )) as $val ){
2024-01-29 18:21:14 +08:00
if ( $val [ 'skey' ] == 'icon' ){
2024-06-28 06:09:20 +00:00
if ( $img = C :: t ( 'attachment' ) -> getThumbByAid ( $val [ 'sval' ], 0 , 0 , 1 )){
$val [ 'sval' ] = $img ;
$val [ 'skey' ] = 'img' ;
}
2024-01-29 18:21:14 +08:00
}
2024-06-28 06:09:20 +00:00
2024-01-29 18:21:14 +08:00
$returndata [ $val [ 'skey' ]] = $val [ 'sval' ];
}
$this -> store_cache ( $cachekey , $returndata );
return $returndata ;
}
public function insert_attr ( $rid , $vid = 0 , $attrs = array ()){
$i = 0 ;
foreach ( $attrs as $k => $v ){
$setarr = array ( 'rid' => $rid , 'skey' => $k , 'vid' => $vid , 'sval' => $v );
if ( self :: insert ( $setarr )){
$i ++ ;
}
}
return $i ;
}
public function delete_by_rvid ( $rid , $vid ){
$i = 0 ;
foreach ( DB :: fetch_all ( " select id from %t where rid=%s and vid=%d " , array ( $this -> _table , $rid , $vid )) as $value ){
if ( self :: delete_by_id ( $value [ 'id' ])){
$i ++ ;
}
}
return $i ;
}
public function delete_by_rid ( $rid ){
if ( ! is_array ( $rid )) $rid = ( array ) $rid ;
$i = 0 ;
foreach ( DB :: fetch_all ( " select id from %t where rid IN(%n) " , array ( $this -> _table , $rid )) as $value ){
if ( self :: delete_by_id ( $value [ 'id' ])){
$i ++ ;
}
}
return $i ;
}
public function update_by_skey ( $rid , $vid , $skeyarr ){
$i = 0 ;
foreach ( $skeyarr as $k => $v ){
$setarr = array ( 'rid' => $rid , 'skey' => $k , 'vid' => $vid , 'sval' => $v );
if ( self :: insert ( $setarr )){
$i ++ ;
}
}
return $i ;
}
public function update_vid_by_rvid ( $rid , $oldvid , $vid ){
$i = 0 ;
2024-06-28 06:09:20 +00:00
foreach ( DB :: fetch_all ( " select * from %t where rid=%s and vid = %d " , array ( $this -> _table , $rid , $oldvid )) as $value ){
2024-01-29 18:21:14 +08:00
if ( self :: update ( $value [ 'id' ], array ( 'vid' => $vid ))){
$i ++ ;
}
}
return $i ;
}
}