Files
thinksaas_lmve/app/pubs/class.pubs.php
T
2023-06-22 13:33:25 +08:00

556 lines
14 KiB
PHP

<?php
defined('IN_TS') or die('Access Denied.');
class pubs extends tsApp{
//构造函数
public function __construct($db){
$tsAppDb = array();
include 'app/pubs/config.php';
//判断APP是否采用独立数据库
if($tsAppDb){
$db = new MySql($tsAppDb);
}
parent::__construct($db);
}
/**
* 解密userkey,加验证userid
* @param $userkey
* @return string
*/
public function getUserId($userkey){
include 'thinksaas/class.crypt.php';
$crypt= new crypt();
$userid = $crypt->decrypt($userkey,$GLOBALS['TS_SITE']['site_pkey']);
$isUser = $this->findCount('user',array(
'userid'=>$userid,
));
if($isUser == 0){
echo json_encode(array(
'status'=> 0,
'msg'=> '非法操作',
'data'=> '',
));
exit;
}else{
return $userid;
}
}
/**
* @param $string
* @param string $action
* @return string
*/
public function strCode($string, $action = 'ENCODE'){
$action != 'ENCODE' && $string = base64_decode($string);
$code = '';
$key = $GLOBALS['TS_SITE']['site_pkey'];
$keyLen = strlen($key);
$strLen = strlen($string);
for ($i = 0; $i < $strLen; $i++) {
$k = $i % $keyLen;
$code .= $string[$i] ^ $key[$k];
}
return ($action != 'DECODE' ? base64_encode($code) : $code);
}
/**
* @param $phone
* @param $code
* @return bool
*/
public function verifyPhoneCode($phone, $code){
$strPhoneCode = $this->find('phone_code',array(
'phone'=>$phone,
));
#空数据
if($strPhoneCode==''){
return false;exit;
}
#空验证码
if($strPhoneCode['code']==''){
return false;exit;
}
#手机验证码错误次数>=2
if($strPhoneCode['nums']>=2){
$this->update('phone_code',array(
'phone'=>$phone,
),array(
'code'=>'',
'nums'=>0,
));
return false;exit;
}
#手机验证码错误
if($strPhoneCode['code']!=$code){
$this->update('phone_code',array(
'phone'=>$phone,
),array(
'nums'=>$strPhoneCode['nums']+1,
));
return false;exit;
}
return true;
}
/**
* 验证Email验证码
*/
public function verifyEmailCode($email, $code){
$strEmailCode = $this->find('email_code',array(
'email'=>$email,
));
#空数据
if($strEmailCode==''){
return false;exit;
}
#空验证码
if($strEmailCode['code']==''){
return false;exit;
}
#验证码错误次数>=2
if($strEmailCode['nums']>=2){
$this->update('email_code',array(
'email'=>$email,
),array(
'code'=>'',
'nums'=>0,
));
return false;exit;
}
#验证码错误
if($strEmailCode['code']!=$code){
$this->update('email_code',array(
'email'=>$email,
),array(
'nums'=>$strEmailCode['nums']+1,
));
return false;exit;
}
return true;
}
/**
* 删除点赞
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param integer $userid
* @return void
*/
public function delLove($ptable,$pkey,$pid,$userid=0){
if($userid){
$this->delete('love',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
'userid'=>$userid,
));
}else{
$this->delete('love',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
));
}
return true;
}
/**
* 添加项目数据到ts_topic表
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param string $pjson
* @param [type] $groupid
* @param [type] $userid
* @param [type] $title
* @param [type] $gaiyao
* @return void
*/
public function addPtable($ptable,$pkey,$pid,$pjson,$groupid,$userid,$title,$gaiyao){
$topicid = $this->create('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
'pjson'=>$pjson,
'groupid'=>$groupid,
'userid'=>$userid,
'title'=>$title,
'gaiyao'=>$gaiyao,
'isaudit'=>0,
'addtime'=>time(),
'uptime'=>time(),
));
return $topicid;
}
/**
* 更新项目数据到ts_topic表
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param string $pjson
* @param [type] $title
* @param [type] $gaiyao
* @return void
*/
public function editPtable($ptable,$pkey,$pid,$pjson,$title,$gaiyao){
$this->update('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
),array(
'pjson'=>$pjson,
'title'=>$title,
'gaiyao'=>$gaiyao,
));
}
/**
* 更新项目浏览数到ts_topic表
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param [type] $count_view
* @return void
*/
public function upPtableView($ptable,$pkey,$pid,$count_view){
$this->update('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
),array(
'count_view'=>$count_view,
));
}
/**
* 更新项目评论数到ts_topic表
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param [type] $count_comment
* @return void
*/
public function upPtableComment($ptable,$pkey,$pid,$count_comment){
if($ptable!='topic'){
$this->update('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
),array(
'count_comment'=>$count_comment,
'uptime'=>time(),
));
}
}
/**
* 更新项目点赞数到ts_topic表
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param [type] $count_love
* @return void
*/
public function upPtableLove($ptable,$pkey,$pid,$count_love){
if($ptable!='topic'){
$this->update('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
),array(
'count_love'=>$count_love,
));
}
}
/**
* 从ts_topic表删除项目数据
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @return void
*/
public function delPtable($ptable,$pkey,$pid){
$this->delete('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
));
}
/**
* 用户内容添加、修改、删除记录
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param [type] $userid
* @param [type] $title
* @param [type] $content
* @param [type] $status
* @return void
*/
public function addLogs($ptable,$pkey,$pid,$userid,$title,$content,$status){
$this->create('logs',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
'userid'=>$userid,
'title'=>$title,
'content'=>$content,
'status'=>$status,
'addtime'=>time(),
));
}
/**
* 更新项目推荐
*
* @param [type] $ptable
* @param [type] $pkey
* @param [type] $pid
* @param integer $isrecommend 1推荐0不推荐
* @return void
*/
public function upPtableRecommend($ptable,$pkey,$pid,$isrecommend=1){
if($ptable!='topic'){
$this->update('topic',array(
'ptable'=>$ptable,
'pkey'=>$pkey,
'pid'=>$pid,
),array(
'isrecommend'=>$isrecommend,
));
}
}
/**
* ThinkSAAS分块上传文件
* upsize和upcount为空的情况下就是单个文件,并且该文件比设定的大小要小
*
* @param [type] $userid 用户ID
* @param [type] $upsize 总共分几段上传
* @param [type] $upcount 每次分段的size
* @param array $uptype 上传文件类型
* @return void
*/
public function chunkUpload($userid,$files,$upsize,$upcount,$uptype=array()){
$upid = $this->create('upload',array(
'userid'=>$userid,
'addtime'=>date('Y-m-d H:i:s'),
));
#分块上传到本地服务器
$arrUpload = tsUploadLocal($files,$upid,'upload',$uptype);
if($arrUpload['size']){
$this->update('upload',array(
'upid'=>$upid,
),array(
'fileurl'=>$arrUpload['url'],
'filename'=>$arrUpload['name'],
'filesize'=>$arrUpload['size'],
'filetype'=>$arrUpload['type'],
));
if($arrUpload['size']<$upsize || $upsize==''){
$arrUp = $this->findAll('upload',array(
'userid'=>$userid,
),'upid asc');
if(count($arrUp)==$upcount || ($arrUp && $upcount=='')){
return $arrUp;
}else{
return 1;
}
}else{
return 1;
}
}else{
return 0;
}
}
/**
* 合并上传文件
*
* @param [type] $userid
* @param [type] $projectid
* @param [type] $dir
* @param array $arrUp
* @return void
*/
public function mergeUpload($projectid,$dir,$arrUp=array()){
$path = getDirPath($projectid);
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
$name = $projectid . '.' . $arrUp[0]['filetype'];
$dest = $dest_dir . '/' . $name;
#删除原文件
unlink($dest);
$fp = fopen($dest, "ab");
$filesize = 0;
foreach($arrUp as $key=>$item){
$upfile = 'uploadfile/upload/'.$item['fileurl'];
$handle = fopen($upfile,"rb");
fwrite($fp, fread($handle,$item['filesize']));
fclose($handle);
unset($handle);
unlink($upfile);//合并完毕的文件就删除
$filesize = $item['filesize'];
$filesize++;
#删除ts_upload
$this->delete('upload',array(
'upid'=>$item['upid'],
));
}
return array(
'name' => $arrUp[0]['filename'],
'path' => $path,
'url' => $path . '/' . $name,
'type' => $arrUp[0]['filetype'],
'size' => $filesize,
);
}
/**
* 删除用户分段上传的文件ts_upload
*
* @param [type] $userid
* @return void
*/
public function delUpload($userid){
$arrUp = $this->findAll('upload',array(
'userid'=>$userid,
),'upid asc');
foreach($arrUp as $key=>$item){
$upfile = 'uploadfile/upload/'.$item['fileurl'];
unlink($upfile);
}
#删除ts_upload
$this->delete('upload',array(
'userid'=>$userid,
));
}
/**
* 更新APP用户组权限
*
* 权限参数说明,app,action必须,其他参数可选
* app-action-ts
* app-action-mg-ts 当action=admin
* app-action-api-ts 当action=api
*
*/
public function upAppPermissions($ugid,$app,array $arrOption){
foreach($arrOption as $key=>$item){
$status = $item;
if($ugid==1) $status=1;
$arrKey = explode('_',$key);
$key_app = $arrKey[0];
$key_ac = $arrKey[1];
$key_mg = '';
$key_api = '';
$key_ts = '';
if($key_ac=='admin'){
$key_mg = $arrKey[2];
$key_ts = $arrKey[3];
}elseif($key_ac=='api'){
$key_api = $arrKey[2];
$key_ts = $arrKey[3];
}else{
$key_ts = $arrKey[2];
}
if($key_ts==null) $key_ts='';
$this->replace('permissions',array(
'ugid'=>$ugid,
'app'=>$key_app,
'action'=>$key_ac,
'mg'=>$key_mg,
'api'=>$key_api,
'ts'=>$key_ts,
),array(
'ugid'=>$ugid,
'app'=>$key_app,
'action'=>$key_ac,
'mg'=>$key_mg,
'api'=>$key_api,
'ts'=>$key_ts,
'status'=>$status,
));
}
//存储permissions到本地文件
$arrPermissions = $this->findAll('permissions',array(
'app'=>$app,
));
foreach($arrPermissions as $key=>$item){
$option = $item['app'].'_'.$item['action'];
if($item['mg']) $option .= '_'.$item['mg'];
if($item['api']) $option .= '_'.$item['api'];
if($item['ts']) $option .= '_'.$item['ts'];
$arrData[$item['ugid']][$option] = $item['status'];
}
fileWrite($app.'_permissions.php','data',$arrData);
$GLOBALS['tsMySqlCache']->set($app.'_permissions',$arrData);
}
}