begin of thinksaas 3.68

Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2023-06-22 13:33:25 +08:00
commit 963ec1b2ea
2746 changed files with 331806 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
<?php
defined('IN_TS') or die('Access Denied.');
return array(
'name' => '用户',
'version' => '1.2',
'desc' => '用户中心,积分,头衔',
'url' => 'http://www.thinksaas.cn',
'email' => 'thinksaas@qq.com',
'author' => '邱君',
'author_url' => 'http://www.thinksaas.cn',
'isoption' => '1',
'isinstall' => '1',
'issql' => '1',
'issystem' => '1',
'isappnav' => '1',
'ismy'=>'0',
);
+10
View File
@@ -0,0 +1,10 @@
<?php
defined('IN_TS') or die('Access Denied.');
//管理入口
if(is_file('app/'.$app.'/action/admin/'.$mg.'.php')){
include_once 'app/'.$app.'/action/admin/'.$mg.'.php';
}else{
tsNotice('sorry:no index!');
}
+73
View File
@@ -0,0 +1,73 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
//用户组列表
case "list":
$arrGroup = $new['user']->findAll('user_group',null,'ugid asc');
include template('admin/group_list');
break;
//创建用户组
case "add":
$ugname = tsTrim($_POST['ugname']);
$uginfo = tsTrim($_POST['uginfo']);
if($ugname && $uginfo){
$new['user']->create('user_group',array(
'ugname'=>$ugname,
'uginfo'=>$uginfo,
));
}
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list');
break;
case "edit":
$ugid = tsIntval($_POST['ugid']);
$ugname = tsTrim($_POST['ugname']);
$uginfo = tsTrim($_POST['uginfo']);
if(in_array($ugid,array(1,2,3,4))) qiMsg('非法操作!');
$new['user']->update('user_group',array(
'ugid'=>$ugid,
),array(
'ugname'=>$ugname,
'uginfo'=>$uginfo,
));
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list');
break;
//删除用户组
case "delete":
$ugid = tsIntval($_GET['ugid']);
if(in_array($ugid,array(1,2,3,4))){
qiMsg('非法操作!');
}
$new['user']->delete('user_group',array(
'ugid'=>$ugid,
));
#降为普通用户
$new['user']->update('user_info',array(
'ugid'=>$ugid,
),array(
'ugid'=>3,
));
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list');
break;
}
+35
View File
@@ -0,0 +1,35 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
case "list":
$page = tsIntval($_GET['page'],1);
$url = SITE_URL.'index.php?app=user&ac=admin&mg=guestbook&ts=list&page=';
$lstart = $page*20-20;
$arrGuestbook = $new['user']->findAll('user_gb',null,'addtime desc',null,$lstart.',20');
$guestNum = $new['user']->findCount('user_gb');
$pageUrl = pagination($guestNum, 20, $page, $url);
include template('admin/guestbook_list');
break;
case "delete":
$guestid = tsIntval($_GET['guestid']);
$page = tsIntval($_GET['page']);
$new['user']->delete('user_gb',array(
'id'=>$guestid,
));
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=guestbook&ts=list&page='.$page);
break;
}
+28
View File
@@ -0,0 +1,28 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
//基本配置
case "":
$strOption = getAppOptions('user');
include template("admin/options");
break;
case "do":
$arrOption = $_POST['option'];
#更新app配置选项
upAppOptions('user',$arrOption);
#更新app导航和我的导航
upAppNav('user',$arrOption['appname']);
qiMsg('修改成功!');
break;
}
+39
View File
@@ -0,0 +1,39 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
case "":
$ugid = tsIntval($_GET['ugid'],1);
$arrUg = $new['user']->findAll('user_group',null,'ugid asc');
include template('admin/permissions');
break;
case "do":
/**
* 权限参数说明,app,action必须,其他参数可选
* app-action-ts
* app-action-mg-ts 当action=admin
* app-action-api-ts 当action=api
*/
$ugid = tsIntval($_POST['ugid']);
$arrOption = $_POST['option'];
aac('pubs')->upAppPermissions($ugid,'user',$arrOption);
qiMsg('操作成功!');
break;
}
+49
View File
@@ -0,0 +1,49 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
//角色列表
case "list":
$arrRole = $new['user']->findAll('user_role');
include template('admin/role_list');
break;
//角色修改
case "do":
$arrRoleName = $_POST['rolename'];
$arrScoreStart = $_POST['score_start'];
$arrScoreEnd = $_POST['score_end'];
//先清空
$db->query("TRUNCATE TABLE `".dbprefix."user_role`");
//后添加
foreach($arrRoleName as $key=>$item){
$rolename = tsTrim($item);
$score_start = tsTrim($arrScoreStart[$key]);
$score_end = tsTrim($arrScoreEnd[$key]);
if($rolename){
$new['user']->create('user_role',array(
'rolename'=>$rolename,
'score_start'=>$score_start,
'score_end'=>$score_end,
));
}
}
//再生成缓存文件
$arrRole = $new['user']->findAll('user_role',null,null,'rolename,score_start,score_end');
fileWrite('user_role.php','data',$arrRole);
$tsMySqlCache->set('user_role',$arrRole);
qiMsg("修改成功!");
break;
}
+123
View File
@@ -0,0 +1,123 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
case "list":
$arrScore = $new['user']->findAll('user_score');
include template('admin/score_list');
break;
case "adddo":
$scorekey = tsTrim($_POST['scorekey']);
$scorename = tsTrim($_POST['scorename']);
$score = tsIntval($_POST['score']);
$app = tsTrim($_POST['app']);
$action = tsTrim($_POST['action']);
$mg = tsTrim($_POST['mg']);
$api = tsTrim($_POST['api']);
$ts = tsTrim($_POST['ts']);
$status = tsIntval($_POST['status']);
$new['user']->create('user_score',array(
'scorekey'=>$scorekey,
'scorename'=>$scorename,
'score'=>$score,
'app'=>$app,
'action'=>$action,
'mg'=>$mg,
'api'=>$api,
'ts'=>$ts,
'status'=>$status,
));
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=score&ts=list');
break;
case "editdo":
$scoreid = tsIntval($_POST['scoreid']);
$score = tsIntval($_POST['score']);
$app = tsTrim($_POST['app']);
$action = tsTrim($_POST['action']);
$mg = tsTrim($_POST['mg']);
$api = tsTrim($_POST['api']);
$ts = tsTrim($_POST['ts']);
$status = tsIntval($_POST['status']);
$new['user']->update('user_score',array(
'scoreid'=>$scoreid,
),array(
'score'=>$score,
'app'=>$app,
'action'=>$action,
'mg'=>$mg,
'api'=>$api,
'ts'=>$ts,
'status'=>$status,
));
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=score&ts=list');
break;
//加积分
case "send":
include template('admin/score_send');
break;
case "senddo":
$userid = tsIntval($_POST['userid']);
$score = tsIntval($_POST['score']);
$status = tsIntval($_POST['status']);
$scorename = tsTrim($_POST['scorename']);
if($userid && $score && $scorename){
$return = false;
if($status==1){
//减积分
$return = $new['user']->delScore($userid,$scorename,$score);
$jiajian = '减去';
}else{
//加积分
$return = $new['user']->addScore($userid,$scorename,$score,1);
$jiajian = '增加';
}
if($return==true){
//发送系统消息
$msg_userid = '0';
$msg_touserid = $userid;
$msg_content = $scorename.$jiajian.$score.'积分';
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
}
qiMsg('操作成功!');
}else{
qiMsg('操作失败!');
}
break;
case "delete":
$scoreid = tsIntval($_GET['scoreid']);
$new['user']->delete('user_score',array(
'scoreid'=>$scoreid,
));
qiMsg('删除成功!');
break;
}
+403
View File
@@ -0,0 +1,403 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
//用户列表
case "list":
$page = tsIntval($_GET['page'],1);
$userid = tsIntval($_GET['userid']);
$username = tsFilter($_GET['username']);
$arrData = null;
if($userid > 0 && $username==''){
$arrData = array('userid'=>$userid);
}elseif($userid==0 && $username != ''){
$arrData = array('username'=>$username);
}elseif($userid>0 && $username != ''){
$arrData = array('userid'=>$userid,'username'=>$username);
}
$lstart = $page*20-20;
$url = SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list&userid='.$userid.'&username='.$username.'&page=';
$arrAllUser = $new['user']->findAll('user_info',$arrData,'userid desc',null,$lstart.',20');
$userNum = $new['user']->findCount('user_info');
$pageUrl = pagination($userNum, 20, $page, $url);
#用户组
$arrUg = $new['user']->findAll('user_group',"`ugid`!=4",'ugid asc');
foreach($arrUg as $key=>$item){
$arrUg1[$item['ugid']] = $item['ugname'];
}
include template("admin/user_list");
break;
//用户编辑
case "edit":
$userid = $_GET['userid'];
$strUser = $new['user']->getOneUser($userid);
include template("admin/user_edit");
break;
//用户查看
case "view":
$userid = $_GET['userid'];
$strUser = $new['user']->getOneUser($userid);
include template("admin/user_view");
break;
//用户停用启用
case "isenable":
$userid = tsIntval($_GET['userid']);
if($userid==1) qiMsg('无法停用该用户!');
$page = tsIntval($_GET['page']);
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
if($strUser['isadmin']==1) qiMsg('管理员不能停用!');
//禁用
if($strUser['isenable']==0){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isenable'=>1,
));
//封用户Id
$isuser = $new['user']->findCount('anti_user',array(
'userid'=>$userid,
));
if($isuser==0){
$new['user']->create('anti_user',array(
'userid'=>$userid,
'addtime'=>date('Y-m-d H:i:s'),
));
}
//封IP
$isip = $new['user']->findCount('anti_ip',array(
'ip'=>$strUser['ip']
));
if($isip==0 && $strUser['ip']){
$new['user']->create('anti_ip',array(
'ip'=>$strUser['ip'],
'addtime'=>date('Y-m-d H:i:s'),
));
}
}
//启用
if($strUser['isenable']==1){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isenable'=>0,
));
$new['user']->delete('anti_user',array(
'userid'=>$userid,
));
$new['user']->delete('anti_ip',array(
'ip'=>$strUser['ip'],
));
}
#qiMsg('操作成功!');
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list&page='.$page);
break;
//修改密码
case "pwd":
$userid = tsIntval($_GET['userid']);
$strUser = $new['user']->find('user',array(
'userid'=>$userid,
));
include template('admin/user_pwd');
break;
//执行修改密码
case "pwddo":
$userid = tsIntval($_POST['userid']);
$pwd = tsTrim($_POST['pwd']);
if($pwd == '') qiMsg('密码不能为空!');
$strUser = $new['user']->find('user',array(
'userid'=>$userid,
));
$salt = md5(rand());
$new['user']->update('user',array(
'userid'=>$userid,
),array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
));
qiMsg('密码修改成功:'.$pwd);
break;
//清空用户数据
case "deldata":
$userid = tsIntval($_GET['userid']);
if($userid==1) qiMsg('该用户数据无法清空!');
aac('user')->toEmpty($userid);
qiMsg('清空数据成功!');
break;
//管理员
case "admin":
$userid = tsIntval($_GET['userid']);
if($userid==1) qiMsg('该用户无法取消管理员!');
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
if($strUser['isadmin']==1){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isadmin'=>'0',
'isverify'=>'0',
'isverifyphone'=>'0',
'isrenzheng'=>'0',
));
}elseif($strUser['isadmin']==0){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isadmin'=>'1',//系统管理员
'isverify'=>'1',//Email验证
'isverifyphone'=>'1',//手机号验证
'isrenzheng'=>'1',//人工认证
));
}
qiMsg('操作成功!');
break;
//清空全部被禁用的用户数据并保存垃圾Email
case "clean":
$arrUser = $new['user']->findAll('user_info',array(
'isenable'=>1,
));
foreach($arrUser as $key=>$item){
//执行删除用户数据
aac('user')->toEmpty($item['userid']);
}
qiMsg('垃圾用户清空完毕!');
break;
case "face":
$userid = tsIntval($_GET['userid']);
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>'',
'face'=>'',
));
qiMsg('操作成功!');
break;
//是否手工认证
case "isrenzheng":
$userid = tsIntval($_GET['userid']);
if($userid==1) qiMsg('该用户无法操作!');
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
//开通认证
if($strUser['isrenzheng']==0){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isrenzheng'=>1,
));
//发系统消息
$msg_userid = '0';
$msg_touserid = $userid;
$msg_content = '恭喜你,系统已经通过你的个人信息认证!';
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
}
//取消认证
if($strUser['isrenzheng']==1){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isrenzheng'=>0,
));
//发系统消息
$msg_userid = '0';
$msg_touserid = $userid;
$msg_content = '很抱歉,系统取消了你的个人信息认证!';
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
}
qiMsg('操作成功!');
break;
case "isverify":
$userid = tsIntval($_GET['userid']);
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
if($strUser['isverify']==0){
$isverify = 1;
}else{
$isverify = 0;
}
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isverify'=>$isverify,
));
qiMsg('操作成功!');
break;
case "isverifyphone":
$userid = tsIntval($_GET['userid']);
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
if($strUser['isverifyphone']==0){
$isverifyphone = 1;
}else{
$isverifyphone = 0;
}
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'isverifyphone'=>$isverifyphone,
));
qiMsg('操作成功!');
break;
case "ugid":
$userid = tsIntval($_POST['userid']);
$ugid = tsIntval($_POST['ugid']);
if($userid==1) $ugid=1;
if($ugid==4) qiMsg('非法操作!');
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'ugid'=>$ugid,
));
break;
case "add":
include template('admin/user_add');
break;
case "adddo":
$email = tsTrim($_POST['email']);
$username = tsTrim($_POST['username']);
$pwd = tsTrim($_POST['pwd']);
if($email=='' || $username=='' || $pwd==''){
qiMsg('信息输入不完整');
}
#判断Email是否存在
$isEmail = $new['user']->findCount('user',array(
'email'=>$email,
));
if($isEmail > 0){
qiMsg('账号已经注册');
}
if(count_string_len($username) < 4 || count_string_len($username) > 20){
qiMsg('姓名长度必须在4和20之间');
}
#判断用户名是否存在
$isUserName = $new['user']->findCount('user_info',array(
'username'=>$username,
));
if($isUserName > 0){
qiMsg('用户名已经存在,请换个用户名!');
}
$new['user']->register($email,$username,$pwd,$fuserid,$invitecode,1);
header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list');
break;
}
+20
View File
@@ -0,0 +1,20 @@
<?php
defined('IN_TS') or die('Access Denied.');
$userid = tsIntval($TS_USER['userid']);
if($userid){
//过滤用户
$tsSystemAntiUser = aac('system')->antiUser();
if($tsSystemAntiUser){
if(in_array($userid,$tsSystemAntiUser)){
aac('user')->logout();
}
}
echo 1;
}else{
echo 0;
}
+9
View File
@@ -0,0 +1,9 @@
<?php
defined ( 'IN_TS' ) or die ( 'Access Denied.' );
// api入口
if (is_file ( 'app/' . $TS_URL['app'] . '/action/api/' . $TS_URL['api'] . '.php' )) {
include_once 'app/' . $TS_URL['app'] . '/action/api/' . $TS_URL['api'] . '.php';
} else {
qiMsg ( 'sorry:no api!' );
}
+21
View File
@@ -0,0 +1,21 @@
<?php
defined('IN_TS') or die('Access Denied.');
echo '<pre>
-----------------------------------------------
User Http Api List
URL:https://demo.thinksaas.cn
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
-----------------------------------------------
</pre>';
+29
View File
@@ -0,0 +1,29 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$page = tsIntval($_GET['page'],1);
$url = tsUrl ( 'user', 'article', array ('id'=>$strUser['userid'],'page' => '' ) );
$lstart = $page * 20 - 20;
$arrArticle = $new ['user']->findAll ( 'article', array (
'userid' => $strUser['userid'],
), 'addtime desc','articleid,userid,cateid,title,gaiyao,score,path,photo,count_comment,count_love,count_view,addtime', $lstart . ',20' );
foreach($arrArticle as $key=>$item){
$arrArticle [$key]['title'] = tsTitle($item['title']);
$arrArticle [$key]['gaiyao'] = tsTitle($item['gaiyao']);
$arrArticle [$key] ['cate'] = $new ['user']->find( 'article_cate', array (
'cateid' => $item ['cateid']
) );
}
$articleNum = $new ['user']->findCount ( 'article', array (
'userid' => $strUser['userid'],
) );
$pageUrl = pagination ( $articleNum, 20, $page, $url );
$title = $strUser['username'].'的文章';
include template('article');
+24
View File
@@ -0,0 +1,24 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$page = isset($_GET['page']) ? intval($_GET['page']) : '1';
$url = tsUrl('user','collect',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*30-30;
$arrTopicLists = $new['user']->findAll('group_topic_collect',array(
'userid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',30');
foreach($arrTopicLists as $key=>$item){
$arrTopicList[] = aac('group')->getOneTopic($item['topicid']);
}
$topicNum = $new['user']->findCount('group_topic_collect',array(
'userid'=>$strUser['userid'],
));
$pageUrl = pagination($topicNum, 30, $page, $url);
$title = $strUser['username'].'的喜欢';
include template('collect');
+33
View File
@@ -0,0 +1,33 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$page = isset($_GET['page']) ? intval($_GET['page']) : '1';
$url = tsUrl('user','comment',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*20-20;
$arrComments = $new['user']->findAll('group_topic_comment',array(
'userid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',20');
foreach($arrComments as $key=>$item){
$arrComment[] = $item;
$arrComment[$key]['topic']=aac('group')->getOneTopic($item['topicid']);
}
$commentNum = $new['user']->findCount('group_topic_comment',array(
'userid'=>$strUser['userid'],
));
$pageUrl = pagination($commentNum, 20, $page, $url);
$title = $strUser['username'].'的评论';
//SEO
$sitekey = '';
$sitedesc = '';
include template('comment');
+123
View File
@@ -0,0 +1,123 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
case "":
include 'userinfo.php';
$page = tsIntval($_GET['page'],1);
$url = tsUrl('user','follow',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*80-80;
//关注的用户
$arrUsers = $new['user']->findAll('user_follow',array(
'userid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',80');
$userNum = $new['user']->findCount('user_follow',array(
'userid'=>$strUser['userid'],
));
$pageUrl = pagination($userNum, 80, $page, $url);
if(is_array($arrUsers)){
foreach($arrUsers as $item){
$arrUser[] = $new['user']->getSimpleUser($item['touserid']);
}
}
$title = $strUser['username'].'关注的人';
include template("follow");
break;
//关注执行
case "do":
$userid = tsIntval($TS_USER['userid']);
$touserid = tsIntval($_POST['userid']);
if($userid == 0){
echo json_encode(array(
'status'=>0,
'msg'=>'你还没有登录!',
));
exit;
}
if($userid == $touserid){
echo json_encode(array(
'status'=>0,
'msg'=>'自己不能关注自己哦',
));
exit;
}
$isFollow = $new['user']->findCount('user_follow',array(
'userid'=>$userid,
'touserid'=>$touserid,
));
if($isFollow>0){
echo json_encode(array(
'status'=>1,
'msg'=>'你已经关注此用户!',
));
exit;
}
$new['user']->create('user_follow',array(
'userid'=>$userid,
'touserid'=>$touserid,
));
//统计用户关注数和粉丝数
$new['user']->countFollowFans($userid);
$new['user']->countFollowFans($touserid);
#发个消息
echo json_encode(array(
'status'=>2,
'msg'=>'关注成功!',
));
exit;
break;
//取消关注
case "un":
$userid = tsIntval($TS_USER['userid']);
$touserid = tsIntval($_POST['userid']);
if($userid == 0){
echo json_encode(array(
'status'=>0,
'msg'=>'你还没有登录!',
));
exit;
}
$new['user']->delete('user_follow',array(
'userid'=>$userid,
'touserid'=>$touserid,
));
//统计用户关注数和粉丝数
$new['user']->countFollowFans($userid);
$new['user']->countFollowFans($touserid);
echo json_encode(array(
'status'=>1,
'msg'=>'解除关注成功',
));
exit;
break;
}
+27
View File
@@ -0,0 +1,27 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$page = tsIntval($_GET['page'],1);
$url = tsUrl('user','followed',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*80-80;
//跟随他的用户
$arrUsers = $new['user']->findAll('user_follow',array(
'touserid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',80');
$userNum = $new['user']->findCount('user_follow',array(
'touserid'=>$strUser['userid'],
));
$pageUrl = pagination($userNum, 80, $page, $url);
if(is_array($arrUsers)){
foreach($arrUsers as $item){
$arrUser[$key] = $new['user']->getSimpleUser($item['userid']);
}
}
$title = $strUser['username'].'的粉丝';
include template('followed');
+143
View File
@@ -0,0 +1,143 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
/**
* 通过Email找回密码
*/
case "":
if ($GLOBALS['TS_USER']){
header('Location: '.SITE_URL);
exit;
}
$title = '找回登陆密码';
include template("forgetpwd");
break;
/**
* 重置Email密码
*/
case "resetpwd":
$js = tsIntval($_GET['js']);
$email = tsTrim($_POST['email']);
$pwd = tsTrim($_POST['pwd']);
$authcode = strtolower($_POST['authcode']);
$emailcode = tsTrim($_POST['emailcode']);
if($email == '' || $pwd=='' || $authcode=='' || $emailcode==''){
getJson('所有输入项都不能为空',$js);
}
if(valid_email($email)==false){
getJson('Email邮箱输入不正确',$js);
}
$strUser = $new['user']->find('user',array(
'email'=>$email,
));
if($strUser==''){
getJson("Email邮箱不存在,你可能还没有注册^_^",$js);
}
if ($authcode != $_SESSION['verify']) {
getJson('图片验证码输入有误,请重新输入!', $js);
}
#验证手机验证码
if(aac('pubs')->verifyEmailCode($email,$emailcode)==false){
getJson('Email验证码输入有误',$js);
}
$salt = md5(rand());
$new['user']->update('user',array(
'userid'=>$strUser['userid'],
),array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
));
$new['user']->update('user_info',array(
'userid'=>$strUser['userid'],
),array(
'email'=>$strUser['email'],
'isverify'=>'1',
));
$_SESSION['tsuser']['isverify']=1;
getJson('密码修改成功!',$js,2,tsUrl('user','login'));
break;
/**
* 通过手机号找回密码
*/
case "phone":
$title = '找回登陆密码';
include template("forgetpwd_phone");
break;
//执行登录
case "do":
$js = tsIntval($_GET['js']);
$email = tsTrim($_POST['email']);
if(valid_email($email)==false){
getJson('Email输入不正确',$js);
}
$emailNum = $new['user']->findCount('user',array(
'email'=>$email,
));
if($email==''){
getJson('Email输入不能为空^_^',$js);
}elseif($emailNum == '0'){
getJson("Email不存在,你可能还没有注册^_^",$js);
}else{
//加密
$resetpwd = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
$new['user']->update('user',array(
'email'=>$email,
),array(
'resetpwd'=>$resetpwd,
));
//发送邮件
$subject = $TS_SITE['site_title'].'会员密码找回';
$content = '您的登陆信息:<br />Email'.$email.'<br />重设密码链接:<br /><a href="'.$TS_SITE['site_url'].'index.php?app=user&ac=resetpwd&mail='.$email.'&set='.$resetpwd.'">'.$TS_SITE['site_url'].'index.php?app=user&ac=resetpwd&mail='.$email.'&set='.$resetpwd.'</a>';
$result = aac('mail')->postMail($email,$subject,$content);
if($result == '0'){
getJson('找回密码所需信息不完整^_^',$js);
}elseif($result == '1'){
getJson('系统已经向你的邮箱发送了邮件,请尽快查收^_^',$js);
}
}
break;
}
+17
View File
@@ -0,0 +1,17 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$arrGroupsList = $new['user']->findAll('group_user',array(
'userid'=>$strUser['userid'],
),null,'groupid');
foreach($arrGroupsList as $key=>$item){
$arrGroupList[] = aac('group')->getOneGroup($item['groupid']);
}
$title = $strUser['username'].'的小组';
include template('group');
+130
View File
@@ -0,0 +1,130 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
case "":
include 'userinfo.php';
$page = tsIntval($_GET['page'],1);
$url = tsUrl('user','guestbook',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*20-20;
$arrGuestList = $new['user']->findAll('user_gb',array(
'touserid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',20');
foreach($arrGuestList as $key=>$item){
$arrGuestList[$key]['content'] = tsTitle($item['content']);
$arrGuestList[$key]['user']=$new['user']->getSimpleUser($item['userid']);
$arrGuestList[$key]['reply'] = $new['user']->find('user_gb',array(
'reid'=>$item['id'],
));
if($arrGuestList[$key]['reply']){
$arrGuestList[$key]['reply']['content'] = tsTitle($arrGuestList[$key]['reply']['content']);
}
}
$guestNum = $new['user']->findCount('user_gb',array(
'touserid'=>$strUser['userid'],
));
$pageUrl = pagination($guestNum, 20, $page, $url);
$title = $strUser['username'].'的留言板';
include template('guestbook');
break;
case "do":
$userid = $new['user']->isLogin();
$touserid = tsIntval($_POST['touserid']);
$content = tsTrim($_POST['content']);
if($content == ''){
tsNotice('留言内容不能为空!');
}
$content = antiWord($content);
$new['user']->create('user_gb',array(
'userid'=>$userid,
'touserid'=>$touserid,
'content'=>$content,
'addtime'=>date('Y-m-d H:i:s'),
));
//发送系统消息
$msg_userid = '0';
$msg_touserid = $touserid;
$msg_content = '有人在你的留言板上留言了哦,快去看看吧';
$msg_tourl = tsUrl('user','space',array('id'=>$touserid));
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl);
#tsNotice('留言成功!');
header('Location: '.tsUrl('user','guestbook',array('id'=>$touserid)));
exit;
break;
case "redo":
$userid = $new['user']->isLogin();
$touserid = tsIntval($_POST['touserid']);
$reid = tsIntval($_POST['reid']);
$content = tsTrim($_POST['content']);
$arrContent = explode('#',$content);
$content = $arrContent['1'];
if($content==''){
tsNotice('留言不能为空!');
}
$content = antiWord($content);
$new['user']->create('user_gb',array(
'userid'=>$userid,
'reid'=>$reid,
'touserid'=>$touserid,
'content'=>$content,
'addtime'=>date('Y-m-d H:i:s'),
));
//发送系统消息
$msg_userid = '0';
$msg_touserid = $touserid;
$msg_content = '有人在你的留言板上留言了哦,快去看看吧!';
$msg_tourl = tsUrl('user','guestbook',array('id'=>$touserid));
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl);
tsNotice('回复成功!');
break;
//删除留言
case "delete":
$userid = $new['user']->isLogin();
$gbid = tsIntval($_GET['gbid']);
$strGuest = $new['user']->find('user_gb',array(
'id'=>$gbid,
));
if($strGuest['touserid'] == $userid){
$new['user']->delete('user_gb',array(
'id'=>$gbid,
));
}
tsNotice('留言删除成功');
break;
}
+21
View File
@@ -0,0 +1,21 @@
<?php
defined('IN_TS') or die('Access Denied.');
//最多积分用户
$arrScoreUser = $new['user']->getScoreUser(10);
//关注最多的用户
$arrFollowUser = $new['user']->getFollowUser(10);
//活跃会员
$arrHotUser = $new['user']->getHotUser(10);
//最新会员
$arrNewUser = $new['user']->getNewUser(10);
$title = '用户';
$sitekey = $TS_APP['appkey'];
$sitedesc = $TS_APP['appdesc'];
include template('index');
+66
View File
@@ -0,0 +1,66 @@
<?php
defined('IN_TS') or die('Access Denied.');
//用户是否登录
$userid = aac('user')->isLogin();
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
//邀请好友
switch($ts){
case "":
//计算是否还有邀请码
$codeNum = $new['user']->findCount('user_invites',array(
'userid'=>$userid,
'isused'=>0,
));
$arrCode = $new['user']->findAll('user_invites',array(
'userid'=>$userid,
'isused'=>0,
));
#邀请的用户
$arrInviteUser = $new['user']->findAll('user_info',array(
'fuserid'=>$userid,
),'addtime desc','userid,username');
$title = '邀请码';
include template("invite");
break;
//取邀请码
case "code":
//计算是否还有邀请码
$codeNum = $new['user']->findCount('user_invites',array(
'userid'=>$userid,
'isused'=>0,
));
if($codeNum == 0 && $TS_USER['isadmin']==1){
//当数据库中没码的时间生成10个码
for($i=1;$i<=10;$i++){
$new['user']->create('user_invites',array(
'userid'=>$userid,
'invitecode'=>random(18).$userid,
'addtime'=>time(),
));
}
}
header('Location: '.tsUrl('user','invite'));
break;
}
+134
View File
@@ -0,0 +1,134 @@
<?php
defined('IN_TS') or die('Access Denied.');
use EasyWeChat\Factory;
if(tsIntval($TS_USER['userid']) > 0) {
header('Location: '.SITE_URL);exit;
}
#微信公众号授权
if(isWeixin()==true && $TS_SITE['is_weixin']==1){
$config = [
'app_id' => $TS_SITE['weixin_appid'],
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => SITE_URL.'index.php?app=user&ac=wxlogin',
],
];
$app = Factory::officialAccount($config);
$oauth = $app->oauth;
$oauth->redirect()->send();
exit();
}
//程序主体
switch($ts){
case "":
//记录上次访问地址
$jump = $_SERVER['HTTP_REFERER'];
$title = '登录';
include template("login");
break;
//执行登录
case "do":
//用于JS提交验证
$js = tsIntval($_GET['js']);
$ad = tsIntval($_POST['ad']);
/*禁止以下IP用户登陆或注册*/
/*
$arrIp = aac('system')->antiIp();
if(in_array(getIp(),$arrIp)){
getJson('你的IP已被锁定,暂无法登录!',$js);
}
*/
$jump = tsTrim($_POST['jump']);
$email = tsTrim($_POST['email']);
$pwd = tsTrim($_POST['pwd']);
$cktime = tsIntval($_POST['cktime']);
#人机验证
$vaptcha_token = tsTrim($_POST ['vaptcha_token']);
$vaptcha_server = tsTrim($_POST ['vaptcha_server']);
if ($TS_SITE['is_vaptcha'] && $ad==0) {
$strVt = vaptcha($vaptcha_token,0,$vaptcha_server);
if($strVt['success']==0) {
getJson('人机验证未通过!',$js);
}
}
if($email=='' || $pwd=='') getJson('账号和密码都不能为空!',$js);
#先判断是否是Email
if(valid_email($email)==true){
$strUser = $new['user']->find('user',array(
'email'=>$email,
));
//if($strUser == '') getJson('Email不存在,你可能还没有注册!',$js);
if($strUser == '') getJson('账号/密码输入有误!',$js);
}else{
#判断是否是手机号
if(isPhone($email)==true){
$strUser = $new['user']->find('user',array(
'phone'=>$email,
));
#if($strUser == '') getJson('手机号不存在,你可能还没有注册!',$js);
if($strUser == '') getJson('账号/密码输入有误!',$js);
}else{
#getJson('账号不存在,你可能还没有注册!',$js);
getJson('账号/密码输入有误!',$js);
}
}
if(md5($strUser['salt'].$pwd)!==$strUser['pwd']) {
#getJson('密码错误!',$js);
getJson('账号/密码输入有误!',$js);
}
$new['user']->login($strUser['userid']);
//对积分进行处理
aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'],0,1);
if($ad==1){
getJson('登录成功!',$js,2,SITE_URL.'index.php?app=system');
}
//跳转
if($jump != ''){
getJson('登录成功!',$js,2,$jump);
}else{
//登陆是否跳转到我的社区
if($TS_SITE['istomy']){
getJson('登录成功!',$js,2,tsUrl('my'));
}else{
getJson('登录成功!',$js,2,SITE_URL);
}
}
break;
}
+7
View File
@@ -0,0 +1,7 @@
<?php
defined('IN_TS') or die('Access Denied.');
aac('user')->logout();
//header('Location: '.tsUrl('user','login'));
header('Location: '.SITE_URL);
exit;
+89
View File
@@ -0,0 +1,89 @@
<?php
defined('IN_TS') or die('Access Denied.');
//用户是否登录
$userid = aac('user')->isLogin();
switch($ts){
//发送消息页面
case "add":
$touserid = tsIntval($_GET['touserid']);
if($userid == $touserid || !$touserid) {
tsNotice("Sorry!自己不能给自己发送消息的!& 对方为空!");
}
#互为粉丝的2个人才可以发送消息
$isFollow = $new['user']->findCount('user_follow',array(
'userid'=>$userid,
'touserid'=>$touserid,
));
$isFollow2 = $new['user']->findCount('user_follow',array(
'userid'=>$touserid,
'touserid'=>$userid,
));
if(($isFollow && $isFollow2) || $TS_USER['isadmin']==1){
$strUser = $new['user']->getSimpleUser($userid);
$strTouser = $new['user']->getSimpleUser($touserid);
if(!$strTouser) tsNotice("Sorry!对方不存在!");
$title = "发送短消息";
include template("message_add");
}else{
tsNotice("互相关注的2个人才可以互相发送私信!");
}
break;
case "do":
$js = tsIntval($_GET['js']);
$msg_userid = $userid;
$msg_touserid = tsIntval($_POST['touserid']);
if($msg_userid == $msg_touserid || !$msg_touserid) {
getJson("Sorry!自己不能给自己发送消息的!& 对方为空!",$js,0);
}
#互为粉丝的2个人才可以发送消息
$isFollow = $new['user']->findCount('user_follow',array(
'userid'=>$msg_userid,
'touserid'=>$msg_touserid,
));
$isFollow2 = $new['user']->findCount('user_follow',array(
'userid'=>$msg_touserid,
'touserid'=>$msg_userid,
));
if(($isFollow && $isFollow2) || $TS_USER['isadmin']==1){
$msg_content = tsTrim($_POST['content']);
if($msg_content==''){
getJson('消息内容不能为空!',$js,0);
}
$msg_content = antiWord($msg_content);
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
getJson('消息发送成功',$js,1);
}else{
getJson("互相关注的2个人才可以互相发送私信!",$js,0);
}
break;
}
+10
View File
@@ -0,0 +1,10 @@
<?php
defined ( 'IN_TS' ) or die ( 'Access Denied.' );
// 管理入口
if (is_file ( 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php' )) {
include_once 'app/' . $TS_URL['app'] . '/action/my/common.php';
include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php';
} else {
qiMsg ( 'sorry:no index!' );
}
+6
View File
@@ -0,0 +1,6 @@
<?php
defined('IN_TS') or die('Access Denied.');
$userid = aac('user')->isLogin();
$strUser = aac('user')->getOneUser($userid);
+6
View File
@@ -0,0 +1,6 @@
<?php
defined ( 'IN_TS' ) or die ( 'Access Denied.' );
$title = '我的小组';
include template('my/index');
+462
View File
@@ -0,0 +1,462 @@
<?php
defined('IN_TS') or die('Access Denied.');
switch($ts){
//手机号注册
case "":
if(tsIntval($TS_USER['userid']) > 0) {
header('Location: '.SITE_URL);exit;
}
#如果网站只采用Email注册,就跳转到Email注册
if($TS_SITE['regtype']==0){
header('Location: '.tsUrl('user','register'));exit;
}
//邀请用户ID
$fuserid = tsIntval($_GET['fuserid']);
$title = '手机号注册';
include template("phone");
break;
case "do":
//用于JS提交验证
$js = tsIntval($_GET['js']);
$phone = tsTrim($_POST['email']);
$pwd = tsTrim($_POST['pwd']);
$repwd = tsTrim($_POST['repwd']);
$username = t($_POST['username']);
$fuserid = tsIntval($_POST['fuserid']);
$authcode = strtolower($_POST['authcode']);
$phonecode = tsTrim($_POST['phonecode']);
/*禁止以下IP用户登陆或注册*/
$arrIp = aac('system')->antiIp();
if(in_array(getIp(),$arrIp)){
getJson('你的IP已被锁定,暂无法登录!',$js);
}
//是否开启邀请注册
if($TS_SITE['isinvite']=='1'){
$invitecode = tsTrim($_POST['invitecode']);
if($invitecode == '') getJson('邀请码不能为空!',$js);
$codeNum = $new['user']->findCount('user_invites',array(
'invitecode'=>$invitecode,
'isused'=>0,
));
if($codeNum == 0) getJson('邀请码已经被使用,请更换其他邀请码!',$js);
}
if($phone=='' || $pwd=='' || $repwd=='' || $username=='' || $phonecode==''){
getJson('所有必选项都不能为空!',$js);
}
if(isPhone($phone)==false) getJson('手机号输入有误!',$js);
#验证手机验证码
if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){
getJson('手机验证码输入有误',$js);
}
#手机号是否存在
$isPhone = $new['user']->findCount('user',array(
'phone'=>$phone,
));
if($isPhone > 0){
getJson('手机号已经存在',$js);
}
if($pwd != $repwd){
getJson('两次输入密码不正确!',$js);
}
if(count_string_len($username) < 4 || count_string_len($username) > 20){
getJson('姓名长度必须在4和20之间',$js);
}
#用户名是否存在
$isUserName = $new['user']->findCount('user_info',array(
'username'=>$username,
),'userid');
if($isUserName > 0){
getJson('用户名已经存在,请换个用户名!',$js);
}
#验证码
if ($authcode != $_SESSION['verify']) {
getJson('验证码输入有误,请重新输入!', $js);
}
$salt = md5(rand());
$userid = $new['user']->create('user',array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
'email'=>$phone,
'phone'=>$phone,
));
//插入用户信息
$new['user']->create('user_info',array(
'userid' => $userid,
'fuserid' => $fuserid,
'username' => $username,
'email' => $phone,
'phone' => $phone,
'ip' => getIp(),
'comefrom'=>'9',
'isverifyphone'=>1,
'addtime' => time(),
'uptime' => time(),
));
//默认加入小组
$isGroup = $new['user']->find('user_options',array(
'optionname'=>'isgroup',
));
if($isGroup['optionvalue']){
$arrGroup = explode(',',$isGroup['optionvalue']);
if($arrGroup){
foreach($arrGroup as $key=>$item){
$groupUserNum = $new['user']->findCount('group_user',array(
'userid'=>$userid,
'groupid'=>$item,
));
if($groupUserNum == 0){
$new['user']->create('group_user',array(
'userid'=>$userid,
'groupid'=>$item,
'addtime'=>time(),
));
//统计更新
$count_user = $new['user']->findCount('group_user',array(
'groupid'=>$item,
));
$new['user']->update('group',array(
'groupid'=>$item,
),array(
'count_user'=>$count_user,
));
}
}
}
}
//用户信息
$userData = $new['user']->find('user_info',array(
'userid'=>$userid,
),'userid,username,email,path,face,isadmin,signin,isverify,isverifyphone,uptime');
//用户session信息
$_SESSION['tsuser'] = $userData;
//发送消息
aac('message')->sendmsg(0,$userid,'亲爱的 '.$username.' :您成功加入了 '.$TS_SITE['site_title'].'。在遵守本站的规定的同时,享受您的愉快之旅吧!');
//注销邀请码并将关注邀请用户
if($TS_SITE['isinvite']=='1'){
//邀请码信息
$strInviteCode = $new['user']->find('user_invites',array(
'invitecode'=>$invitecode,
));
$new['user']->create('user_follow',array(
'userid'=>$userid,
'touserid'=>$strInviteCode['userid'],
));
//注销
$new['user']->update('user_invites',array(
'invitecode'=>$invitecode,
),array(
'isused'=>'1',
));
}
//对积分进行处理
aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']);
//跳转
getJson('登录成功!',$js,2,SITE_URL);
break;
//验证手机号
case "verify":
$userid = aac('user')->isLogin();
$strUser = $new['user']->getOneUser($userid);
$title = '验证手机号';
include template("phone_verify");
break;
case "verifydo":
$js = tsIntval($_GET['js']);
$userid = aac('user')->isLogin();
$phone = tsTrim($_POST['phone']);
$authcode = strtolower($_POST['authcode']);
$phonecode = tsTrim($_POST['phonecode']);
if($phone == '' || $authcode=='' || $phonecode==''){
getJson('所有输入项都不能为空',$js);
}
if(isPhone($phone)==false){
getJson('手机号输入有误!',$js);
}
if ($authcode != $_SESSION['verify']) {
getJson('图片验证码输入有误,请重新输入!', $js);
}
#验证手机验证码
if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){
getJson('手机验证码输入有误',$js);
}
$strUserInfo = $new['user']->find('user_info',array(
'userid'=>$userid,
),'phone');
if($strUserInfo['phone']!=$phone){
#判断手机号是否存在
$isPhone = $new['user']->findCount('user',array(
'phone'=>$phone,
));
if($isPhone){
getJson('手机号已存在!请更换其他手机号!',$js);
}
//getJson('手机号有误!',$js);
}
#更新手机号
$new['user']->update('user',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
));
#更新手机号和手机验证状态
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
'isverifyphone'=>'1',
));
$_SESSION['tsuser']['isverifyphone']=1;
getJson('手机号验证成功!',$js,2,SITE_URL);
break;
//如果手机号不对,可以修改手机号
case "setphone":
$userid = aac('user')->isLogin();
$phone = tsTrim($_POST['phone']);
if($phone==''){
tsNotice('手机号不能为空!');
}
if(isPhone($phone)==false){
tsNotice('手机号输入有误!');
}
$isPhone = $new['user']->findCount('user',array(
'phone'=>$phone,
));
if($isPhone>0){
tsNotice('手机号已经存在,请更换其他手机号!');
}
$new['user']->update('user',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
));
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
));
tsNotice('手机号修改成功!');
break;
//修改成新手机号
case "editphone":
$js = tsIntval($_GET['js']);
$userid = aac('user')->isLogin();
$phone = tsTrim($_POST['phone']);
$authcode = strtolower($_POST['authcode']);
$phonecode = tsTrim($_POST['phonecode']);
if($phone == '' || $authcode=='' || $phonecode==''){
getJson('所有输入项都不能为空',$js);
}
if(isPhone($phone)==false){
getJson('手机号输入有误!',$js);
}
if ($authcode != $_SESSION['verify']) {
getJson('图片验证码输入有误,请重新输入!', $js);
}
#验证手机验证码
if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){
getJson('手机验证码输入有误',$js);
}
$isPhone = $new['user']->findCount('user',array(
'phone'=>$phone,
));
if($isPhone>0){
getJson('手机号已经存在,请更换其他手机号!',$js);
}
$new['user']->update('user',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
));
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'phone'=>$phone,
'isverifyphone'=>'1',
));
$_SESSION['tsuser']['isverifyphone']=1;
getJson('手机号修改成功!',$js,2,tsUrl('my','setting',array('ts'=>'email')));
break;
/**
* 通过手机号重置密码
*/
case "resetpwd":
$js = tsIntval($_GET['js']);
$phone = tsTrim($_POST['phone']);
$pwd = tsTrim($_POST['pwd']);
$authcode = strtolower($_POST['authcode']);
$phonecode = tsTrim($_POST['phonecode']);
if($phone == '' || $pwd=='' || $authcode=='' || $phonecode==''){
getJson('所有输入项都不能为空',$js);
}
if(isPhone($phone)==false){
getJson('手机号输入不正确',$js);
}
$strUser = $new['user']->find('user',array(
'phone'=>$phone,
));
if($strUser==''){
getJson("手机号不存在,你可能还没有注册^_^",$js);
}
if ($authcode != $_SESSION['verify']) {
getJson('图片验证码输入有误,请重新输入!', $js);
}
#验证手机验证码
if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){
getJson('手机验证码输入有误',$js);
}
$salt = md5(rand());
$new['user']->update('user',array(
'userid'=>$strUser['userid'],
),array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
));
$new['user']->update('user_info',array(
'userid'=>$strUser['userid'],
),array(
'phone'=>$strUser['phone'],
'isverifyphone'=>'1',
));
$_SESSION['tsuser']['isverifyphone']=1;
getJson('密码修改成功!',$js,2,tsUrl('user','login'));
break;
}
+63
View File
@@ -0,0 +1,63 @@
<?php
defined('IN_TS') or die('Access Denied.');
if($TS_SITE['isplogin']!=1){
tsNotice('短信登录未开启!');
}
/**
* 手机验证码登录
*/
if(tsIntval($TS_USER['userid']) > 0) {
header('Location: '.SITE_URL);exit;
}
switch($ts){
case "":
$title = '手机验证码登录';
include template("plogin");
break;
case "do":
$js = tsIntval($_GET['js']);
$phone = tsTrim($_POST['email']);
$authcode = strtolower($_POST['authcode']);
$phonecode = tsTrim($_POST['phonecode']);
if($phone=='' || $phonecode==''){
getJson('所有输入项都不能为空!',$js);
}
if(isPhone($phone)==false) getJson('手机号输入有误!',$js);
#验证手机验证码
if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){
getJson('手机验证码输入有误!',$js);
}
#手机号是否存在
$strUser = $new['user']->find('user',array(
'phone'=>$phone,
));
if($strUser){
$new['user']->login($strUser['userid'],$phone);
getJson('登录成功!',$js,2,SITE_URL);
}else{
$new['user']->register($phone);
}
//跳转
getJson('登录成功!',$js,2,SITE_URL);
break;
}
+13
View File
@@ -0,0 +1,13 @@
<?php
//插件条件入口
defined('IN_TS') or die('Access Denied.');
if(is_file('plugins/'.$app.'/'.$plugin.'/'.$in.'.php')){
require_once('plugins/'.$app.'/'.$plugin.'/'.$in.'.php');
}else{
tsNotice('sorry:no plugin!');
}
//形如这样
//index.php?app=group&ac=plugin&plugin=qq&in=do
+190
View File
@@ -0,0 +1,190 @@
<?php
defined('IN_TS') or die('Access Denied.');
use EasyWeChat\Factory;
if(tsIntval($TS_USER['userid']) > 0) {
header('Location: '.SITE_URL);exit;
}
if($TS_SITE['isinvite']==2){
tsNotice('暂不开放用户注册!');
}
#微信公众号授权
if(isWeixin()==true && $TS_SITE['is_weixin']==1){
$config = [
'app_id' => $TS_SITE['weixin_appid'],
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => SITE_URL.'index.php?app=user&ac=wxlogin',
],
];
$app = Factory::officialAccount($config);
$oauth = $app->oauth;
$oauth->redirect()->send();
exit();
}
//用户注册
switch($ts){
case "":
#如果网站只采用手机号注册,就跳转到手机号注册
if($TS_SITE['regtype']==1){
header('Location: '.tsUrl('user','phone'));exit;
}
//邀请用户ID
$fuserid = tsIntval($_GET['fuserid']);
if($fuserid){
$strFuser = $new['user']->getSimpleUser($fuserid);
}
$title = '注册';
include template("register");
break;
case "do":
//用于JS提交验证
$js = tsIntval($_GET['js']);
$email = tsTrim($_POST['email']);
$pwd = tsTrim($_POST['pwd']);
$repwd = tsTrim($_POST['repwd']);
$username = t($_POST['username']);
$fuserid = tsIntval($_POST['fuserid']);
$authcode = strtolower(tsTrim($_POST['authcode']));
#人机验证
$vaptcha_token = tsTrim($_POST['vaptcha_token']);
$vaptcha_server = tsTrim($_POST['vaptcha_server']);
if ($TS_SITE['is_vaptcha']) {
$strVt = vaptcha($vaptcha_token,0,$vaptcha_server);
if($strVt['success']==0) {
getJson('人机验证未通过!',$js);
}
}
//检测垃圾Email后缀
$arrEmail = explode('@',$email);
$emails = array(
'chacuo.net',
'mail.ru',
'yandex.ru',
'yandex.com',
'027168.net',
'027168.com',
);
if(in_array($arrEmail[1],$emails)){
getJson('禁止该邮箱注册!',$js);
}
/*禁止以下IP用户登陆或注册*/
/*
$arrIp = aac('system')->antiIp();
if(in_array(getIp(),$arrIp)){
getJson('你的IP已被锁定,暂无法登录!',$js);
}
*/
//是否开启邀请注册
if($TS_SITE['isinvite']=='1'){
$invitecode = tsTrim($_POST['invitecode']);
if($invitecode == '') getJson('邀请码不能为空!',$js);
$codeNum = $new['user']->findCount('user_invites',array(
'invitecode'=>$invitecode,
'isused'=>0,
));
if($codeNum == 0) getJson('邀请码已经被使用/或者不存在,请更换其他邀请码!',$js);
}
if($email=='' || $pwd=='' || $repwd=='' || $username==''){
getJson('所有必选项都不能为空!',$js);
}
if(valid_email($email) == false){
getJson('Email邮箱输入有误',$js);
}
#Email过滤
$is_anti_email = $new['user']->find('anti_email',array(
'email'=>$email,
));
if($is_anti_email>0){
getJson('非法操作!',$js);
}
#验证Email验证码
if($TS_SITE['isverify']){
$emailcode = tsTrim($_POST['emailcode']);
if(aac('pubs')->verifyEmailCode($email,$emailcode)==false){
getJson('Email验证码输入有误',$js);
}
}
#判断Email是否存在
$isEmail = $new['user']->findCount('user',array(
'email'=>$email,
));
if($isEmail > 0){
getJson('Email已经注册',$js);
}
if($pwd != $repwd){
getJson('两次输入密码不正确!',$js);
}
if(count_string_len($username) < 4 || count_string_len($username) > 20){
getJson('姓名长度必须在4和20之间',$js);
}
#用户名敏感词
$username = antiWord ($username,1);
$username = str_replace('.','',$username);
#判断用户名是否存在
$isUserName = $new['user']->findCount('user_info',array(
'username'=>$username,
));
if($isUserName > 0){
getJson('用户名已经存在,请换个用户名!',$js);
}
if($TS_SITE['isauthcode']){
if ($authcode != $_SESSION['verify']) {
getJson('验证码输入有误,请重新输入!', $js);
}
}
$new['user']->register($email,$username,$pwd,$fuserid,$invitecode);
//对积分进行处理
aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']);
//跳转
getJson('登录成功!',$js,2,SITE_URL);
break;
}
+81
View File
@@ -0,0 +1,81 @@
<?php
defined('IN_TS') or die('Access Denied.');
//重设密码
switch($ts){
case "":
$email = tsTrim($_GET['mail']);
$resetpwd = tsUrlCheck($_GET['set']);
if(valid_email($email)==false){
tsNotice('非法操作');
}
$userNum = $new['user']->findCount('user',array(
'email'=>$email,
'resetpwd'=>$resetpwd,
));
if($email=='' || $resetpwd==''){
tsNotice("你应该去火星生活啦!");
}elseif($userNum == 0){
tsNotice("你应该去火星生活啦!");
}else{
$title = '重设密码';
include template("resetpwd");
}
break;
case "do":
$js = tsIntval($_GET['js']);
$email = tsTrim($_POST['email']);
$pwd = tsTrim($_POST['pwd']);
$repwd = tsTrim($_POST['repwd']);
$resetpwd = tsTrim($_POST['resetpwd']);
if($email=='' || $pwd=='' || $repwd=='' || $resetpwd==''){
getJson("所有输入项都不能为空!",$js);
}
if(valid_email($email)==false){
getJson('Email输入不正确',$js);
}
$userNum = $new['user']->findCount('user',array(
'email'=>$email,
'resetpwd'=>$resetpwd,
));
if($userNum == '0'){
getJson("你应该去火星生活啦!",$js);
}
$salt = md5(rand());
$new['user']->update('user',array(
'email'=>$email,
),array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
'resetpwd'=>'',
));
getJson("密码修改成功^_^",$js);
break;
}
+7
View File
@@ -0,0 +1,7 @@
<?php
defined('IN_TS') or die('Access Denied.');
$arrRole = $new['user']->findAll('user_role');
$title = '角色';
include template('role');
+39
View File
@@ -0,0 +1,39 @@
<?php
defined('IN_TS') or die('Access Denied.');
$userid = tsIntval($GLOBALS['TS_USER']['userid']);
switch($ts){
case "":
if($userid==0){
echo 2;exit;
}
if($new['user']->signin()){
echo 1;exit;
}else{
echo 0;exit;
}
break;
case "ajax":
$strSign = $new['user']->find('sign',array(
'userid'=>$userid,
'addtime'=>date('Y-m-d'),
));
$strScore = $new['user']->find('user_score',array(
'app'=>'user',
'action'=>'signin',
'mg'=>'',
'ts'=>'',
));
include template('signin_ajax');
break;
}
+30
View File
@@ -0,0 +1,30 @@
<?php
defined('IN_TS') or die('Access Denied.');
//用户空间
include 'userinfo.php';
//加入的小组
$arrGroupUser = $new['user']->findAll('group_user',array(
'userid'=>$userid,
));
if(is_array($arrGroupUser)){
foreach($arrGroupUser as $key=>$item){
$arrGroup[] = aac('group')->getOneGroup($item['groupid']);
}
}
//留言
$arrGuest = $new['user']->findAll('user_gb',array(
'touserid'=>$strUser['userid'],
),'addtime desc',null,10);
foreach($arrGuest as $key=>$item){
$arrGuest[$key]['content'] = tsDecode($item['content']);
$arrGuest[$key]['user']=$new['user']->getSimpleUser($item['userid']);
}
$title = $strUser['username'];
include template("space");
+5
View File
@@ -0,0 +1,5 @@
<?php
defined('IN_TS') or die('Access Denied.');
$title = '后台登录';
include template('system');
+20
View File
@@ -0,0 +1,20 @@
<?php
defined('IN_TS') or die('Access Denied.');
include 'userinfo.php';
$page = tsIntval($_GET['page'],1);
$url = tsUrl('user','topic',array('id'=>$strUser['userid'],'page'=>''));
$lstart = $page*30-30;
$arrTopic = $new['user']->findAll('topic',array(
'userid'=>$strUser['userid'],
),'addtime desc',null,$lstart.',30');
$topicNum = $new['user']->findCount('topic',array(
'userid'=>$strUser['userid'],
));
$pageUrl = pagination($topicNum, 30, $page, $url);
$title = $strUser['username'].'的帖子';
include template('topic');
+36
View File
@@ -0,0 +1,36 @@
<?php
defined('IN_TS') or die('Access Denied.');
$userid = tsIntval($_GET['id']);
if($new['user']->isUser($userid)==false){
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
$title = '404';
include pubTemplate("404");
exit;
}
$strUser = $new['user']->getOneUser($userid);
//是否关注
if($TS_USER['userid'] != '' && $TS_USER['userid'] != $strUser['userid']){
$followNum = $db->once_num_rows("select * from ".dbprefix."user_follow where userid='".$TS_USER['userid']."' and touserid='$userid'");
if($followNum > '0'){
$strUser['isfollow'] = true;
}else{
$strUser['isfollow'] = false;
}
}else{
$strUser['isfollow'] = false;
}
//他关注的用户
$followUsers = $db->fetch_all_assoc("select touserid from ".dbprefix."user_follow where userid='$userid' order by addtime desc limit 12");
if(is_array($followUsers)){
foreach($followUsers as $item){
$arrFollowUser[] = $new['user']->getSimpleUser($item['touserid']);
}
}
+189
View File
@@ -0,0 +1,189 @@
<?php
defined('IN_TS') or die('Access Denied.');
//用户是否登录
switch($ts){
case "":
$userid = aac('user')->isLogin();
$strUser = $new['user']->getOneUser($userid);
$title = '用户验证';
include template('verify');
break;
//发送验证
case "post":
$userid = aac('user')->isLogin();
$strUser = $new['user']->find('user_info',array(
'userid'=>$userid,
));
if($strUser['verifycode']==''){
$verifycode = random(11);
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'verifycode'=>$verifycode,
));
}else{
$verifycode = $strUser['verifycode'];
}
$email = $strUser['email'];
//发送邮件
$subject = $TS_SITE['site_title'].'会员真实性验证';
$content = '尊敬的'.$strUser['username'].'<br />请点击以下链接进行会员验证:<a href="'.$TS_SITE['link_url'].'index.php?app=user&ac=verify&ts=do&email='.$email.'&verifycode='.$verifycode.'">'.$TS_SITE['link_url'].'index.php?app=user&ac=verify&ts=do&email='.$email.'&verifycode='.$verifycode.'</a>';
$result = aac('mail')->postMail($email,$subject,$content);
if($result == '0'){
tsNotice("验证失败,可能是你的Email邮箱错误哦^_^");
}elseif($result == '1'){
tsNotice("系统已经向你的邮箱发送了验证邮件,请尽快查收^_^");
}
break;
//接收验证
case "do":
$email = tsFilter($_GET['email']);
$verifycode = tsFilter($_GET['verifycode']);
$verify = $new['user']->findCount('user_info',array(
'email'=>$email,
'verifycode'=>$verifycode,
));
if($verify > 0){
$new['user']->update('user_info',array(
'email'=>$email,
),array(
'isverify'=>'1',
));
$_SESSION['tsuser']['isverify']=1;
tsNotice("Email验证成功!",'点击回首页!',SITE_URL);
}else{
tsNotice("Email验证失败!");
}
break;
//修改Email
case "setemail":
$userid = aac('user')->isLogin();
$strUser = $new['user']->getOneUser($userid);
$email = tsTrim($_POST['email']);
if($email=='') tsNotice('Email不能为空!');
if(valid_email($email) == false) tsNotice('Email输入有误!');
if($email != $strUser['email']){
$emailNum = $new['user']->findCount('user',array(
'email'=>$email,
));
if($emailNum > 0) tsNotice("Email帐号已经存在,请换个其他Email帐号!");
//更新Email
$new['user']->update('user',array(
'userid'=>$strUser['userid'],
),array(
'email'=>$email,
));
//修改信息并将用户设为未验证状态
$new['user']->update('user_info',array(
'userid'=>$strUser['userid'],
),array(
'email'=>$email,
'isverify'=>'0',
));
tsNotice('Email帐号修改成功,请返回重新验证!');
}else{
tsNotice('新Email帐号不能和旧Email帐号一样!');
}
break;
//必须上传头像
case "face":
$userid = aac('user')->isLogin();
$strUser = $new['user']->getOneUser($userid);
$_SESSION['tsuser']['face'] = $strUser['face'];
$title = '上传头像';
include template('verify_face');
break;
case "facedo":
$userid = aac('user')->isLogin();
if($_FILES['picfile']){
//上传
$arrUpload = tsUpload($_FILES['picfile'],$userid,'user',array('jpg','gif','png','jpeg'));
if($arrUpload){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>$arrUpload['path'],
'face'=>$arrUpload['url'],
'uptime'=>time(),
));
#本地图片验证
if($TS_SITE['file_upload_type']=='0' || $TS_SITE['file_upload_type']==''){
$filesize=abs(filesize('uploadfile/user/'.$arrUpload['url']));
if($filesize<=0){
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>'',
'face'=>'',
));
tsNotice('上传头像失败!请联系网站管理员处理!');
}elseif($filesize>1048576){
#限制头像图片1M以内
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>'',
'face'=>'',
));
tsNotice('请选择1M以内的头像图片');
}
}
tsDimg($arrUpload['url'],'user','120','120',$arrUpload['path']);
header('Location: '.tsUrl('user','verify',array('ts'=>'face')));
}else{
tsNotice('头像修改失败');
}
}
break;
}
+181
View File
@@ -0,0 +1,181 @@
<?php
defined('IN_TS') or die('Access Denied.');
use EasyWeChat\Factory;
$config = [
'app_id' => $TS_SITE['weixin_appid'],
'secret' => $TS_SITE['weixin_appsecret'],
];
$app = Factory::officialAccount($config);
$oauth = $app->oauth;
// 获取 OAuth 授权结果用户信息
$user = $oauth->user();
// $user 可以用的方法:
// $user->getId(); // 对应微信的 OPENID
// $user->getNickname(); // 对应微信的 nickname
// $user->getName(); // 对应微信的 nickname
// $user->getAvatar(); // 头像网址
// $user->getOriginal(); // 原始API返回的结果
// $user->getToken(); // access_token 比如用于地址共享时使用
if($user->getToken() && $user->getId()){
$openid = $user->getId();
$access_token = $user->getToken();
$strOpen = $new['user']->find('user_open',array(
'sitename'=>'weixin',
'openid'=>$openid,
));
//10天更换一次access_token
if(time()-10*86400>$strOpen['uptime']){
$new['user']->update('user_open',array(
'sitename'=>'weixin',
'openid'=>$openid,
),array(
'access_token'=>$access_token,
'uptime'=>time(),
));
}
if($strOpen['userid']){
/*
$userid = $strOpen['userid'];
$username = $user->getNickname();
$userface = $user->getAvatar();
//更新用户头像
if($userface!='' && $userface!='/0'){
//1000个图片一个目录
$menu2=intval($userid/1000);
$menu1=intval($menu2/1000);
$menu = $menu1.'/'.$menu2;
$photo = $userid.'.jpg';
$photos = $menu.'/'.$photo;
$dir = 'uploadfile/user/'.$menu;
$dfile = $dir.'/'.$photo;
createFolders($dir);
if(!is_file($dfile)){
$img = file_get_contents($userface);
file_put_contents($dfile,$img);
};
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>$menu,
'face'=>$photos,
));
}
*/
//更新登录时间
$new['user']->update('user_info',array(
'userid'=>$strOpen['userid'],
),array(
//'username'=>$username,
'ip'=>getIp(), //更新登录ip
'uptime'=>time(), //更新登录时间
));
//用户session信息
$sessionData = $new['user']->sessionData($strOpen['userid']);
$_SESSION['tsuser'] = $sessionData;
if($_COOKIE['wx_jump']){
header("Location: ".$_COOKIE['wx_jump']);
}else{
header("Location: ".SITE_URL);
}
exit;
}else{
$salt = md5(rand());
$pwd = random(5,0);
$userid = $new['user']->create('user',array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
'email'=>$openid,
'phone'=>$openid,
));
$username = $user->getNickname();
$userface = $user->getAvatar();
//插入ts_user_info
$new['user']->create('user_info',array(
'userid' => $userid,
'username' => $username,
'email' => $openid,
'phone' => $openid,
'ip' => getIp(),
'addtime' => time(),
'uptime' => time(),
));
//插入ts_user_open
$new['user']->create('user_open',array(
'userid'=>$userid,
'sitename'=>'weixin',
'openid' => $openid,
'access_token'=>$access_token,
'uptime'=>time(),
));
//更新用户头像
if($userface!='' && $userface!='/0'){
//1000个图片一个目录
$menu2=intval($userid/1000);
$menu1=intval($menu2/1000);
$menu = $menu1.'/'.$menu2;
$photo = $userid.'.jpg';
$photos = $menu.'/'.$photo;
$dir = 'uploadfile/user/'.$menu;
$dfile = $dir.'/'.$photo;
createFolders($dir);
if(!is_file($dfile)){
$img = file_get_contents($userface);
file_put_contents($dfile,$img);
};
$new['user']->update('user_info',array(
'userid'=>$userid,
),array(
'path'=>$menu,
'face'=>$photos,
));
}
//发送系统消息(恭喜注册成功)
$msg_userid = '0';
$msg_touserid = $userid;
$msg_content = '亲爱的微信用户 '.$username.' :您成功加入了 '
.$TS_SITE['site_title'].'在遵守本站的规定的同时,享受您的愉快之旅吧!';
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
//用户session信息
$sessionData = $new['user']->sessionData($userid);
$_SESSION['tsuser'] = $sessionData;
if($_COOKIE['wx_jump']){
header("Location: ".$_COOKIE['wx_jump']);
}else{
header("Location: ".SITE_URL);
}
exit;
}
}
+828
View File
@@ -0,0 +1,828 @@
<?php
defined('IN_TS') or die('Access Denied.');
class user extends tsApp {
//构造函数
public function __construct($db){
$tsAppDb = array();
include 'app/user/config.php';
//判断APP是否采用独立数据库
if($tsAppDb){
$db = new MySql($tsAppDb);
}
parent::__construct($db);
}
/**
* 用户session信息【修改此处返回session参数,也请修改thinksaas/thinksaas.php文件中自动登录的返回参数,保持同步】
*
* @param [type] $userid
*/
public function sessionData($userid){
$strUserInfo = $this->find('user_info',array(
'userid'=>$userid,
),'userid,ugid,username,email,path,face,isadmin,signin,isverify,isverifyphone,uptime');
return array(
'userid' => $strUserInfo['userid'],
'ugid' => $strUserInfo['ugid'],
'username' => $strUserInfo['username'],
'email' => $strUserInfo['email'],
'face'=>$this->getUserFace($strUserInfo),
'isadmin' => $strUserInfo['isadmin'],
'signin' =>$strUserInfo['signin'],
'isverify'=>$strUserInfo['isverify'],
'isverifyphone'=>$strUserInfo['isverifyphone'],
'uptime' => $strUserInfo['uptime'],
);
}
/**
* 用户登录
*
* @param [type] $userid
* @param string $phone
* @return void
*/
public function login($userid,$phone=''){
$this->update('user_info',array(
'userid'=>$userid,
),array(
'uptime'=>time(),
));
#清空验证码
if($phone){
$this->update('phone_code',array(
'phone'=>$phone,
),array(
'code'=>'',
));
}
//用户session信息
$sessionData = $this->sessionData($userid);
$_SESSION['tsuser'] = $sessionData;
//更新登录时间,用作自动登录
$autologin = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
$this->update('user_info',array(
'userid'=>$userid,
),array(
'ip'=>getIp(), //更新登录ip
'autologin'=>$autologin,
'uptime'=>time(), //更新登录时间
));
//记住登录Cookie,根据用户Email和最后登录时间
setcookie("ts_email", $sessionData['email'], time()+2592000,'/');
setcookie("ts_autologin", $autologin, time()+2592000,'/');
}
/**
* 用户注册
*
* @param [type] $email
* @param string $username
* @param string $pwd
* @param integer $fuserid
* @return void
*/
public function register($email,$username='',$pwd='',$fuserid=0,$invitecode='',$islogin=0){
$salt = md5(rand());
if($pwd=='') $pwd = random(6);
$userid = $this->create('user',array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
'email'=>$email,
'phone'=>$email,
));
if($username=='') $username = 'TS'.$userid;
#Email验证
$isverify = 0;
if(valid_email($email)==true && $GLOBALS['TS_SITE']['isverify']){
$isverify = 1;
#清空Email验证码
$this->update('email_code',array(
'email'=>$email,
),array(
'code'=>'',
));
}
#手机验证
$isverifyphone = 0;
if(isPhone($email)==true){
$isverifyphone = 1;
#清空手机验证码
$this->update('phone_code',array(
'phone'=>$email,
),array(
'code'=>'',
));
}
//插入用户信息
$this->create('user_info',array(
'userid' => $userid,
'fuserid' => intval($fuserid),
'ugid' => 3,
'username' => $username,
'email' => $email,
'phone' => $email,
'ip' => getIp(),
'isverify'=>$isverify,
'isverifyphone'=>$isverifyphone,
'addtime' => time(),
'uptime' => time(),
));
//默认加入小组
if($GLOBALS['TS_APP']['isgroup']){
$arrGroup = explode(',',$GLOBALS['TS_APP']['isgroup']);
if($arrGroup){
foreach($arrGroup as $key=>$item){
$groupUserNum = $this->findCount('group_user',array(
'userid'=>$userid,
'groupid'=>$item,
));
if($groupUserNum == 0){
$this->create('group_user',array(
'userid'=>$userid,
'groupid'=>$item,
'addtime'=>time(),
));
//统计更新
$count_user = $this->findCount('group_user',array(
'groupid'=>$item,
));
$this->update('group',array(
'groupid'=>$item,
),array(
'count_user'=>$count_user,
));
}
}
}
}
if($islogin==0){
//用户session信息
$sessionData = $this->sessionData($userid);
//用户session信息
$_SESSION['tsuser'] = $sessionData;
}
//发送消息
aac('message')->sendmsg(0,$userid,'亲爱的 '.$username.' :您成功加入了 '.$GLOBALS['TS_SITE']['site_title'].'。在遵守本站的规定的同时,享受您的愉快之旅吧!');
//注销邀请码并将关注邀请用户
if($GLOBALS['TS_SITE']['isinvite']=='1' && $invitecode){
//邀请码信息
$strInviteCode = $this->find('user_invites',array(
'invitecode'=>$invitecode,
));
$this->create('user_follow',array(
'userid'=>$userid,
'touserid'=>$strInviteCode['userid'],
));
//注销
$this->update('user_invites',array(
'invitecode'=>$invitecode,
),array(
'isused'=>'1',
));
}
return $userid;
}
/**
* 获取用户头像
* @param $strUser
* @return string
*/
function getUserFace($strUser){
if($strUser['face']){
$strFace = tsXimg($strUser['face'],'user',120,120,$strUser['path'],1);
if($GLOBALS['TS_SITE']['file_upload_type']==1){
$strFace .= '&v='.$strUser['uptime'];
}else{
$strFace .= '?v='.$strUser['uptime'];
}
}else{
$strFace = SITE_URL.'public/images/user_large.jpg';
}
return $strFace;
}
/**
* 获取最新会员
*/
function getNewUser($num){
$arrUser = $this->findAll('user_info',null,'addtime desc','userid,username,face,path,addtime,uptime',$num);
foreach($arrUser as $key=>$item){
$arrUser[$key]['face'] = $this->getUserFace($item);
}
return $arrUser;
}
//获取活跃会员
public function getHotUser($num){
$arrUser = $this->findAll('user_info',null,'uptime desc','userid,username,face,path,addtime,uptime',$num);
foreach($arrUser as $key=>$item){
$arrUser[$key]['face'] = $this->getUserFace($item);
}
return $arrUser;
}
//最多关注的用户
public function getFollowUser($num){
$arrUser = $this->findAll('user_info',null,'count_followed desc','userid,username,face,path,count_followed,addtime,uptime',$num);
foreach($arrUser as $key=>$item){
$arrUser[$key]['face'] = $this->getUserFace($item);
}
return $arrUser;
}
//最多积分的用户
public function getScoreUser($num){
$arrUser = $this->findAll('user_info',null,'count_score desc','userid,username,face,path,count_score,addtime,uptime',$num);
foreach($arrUser as $key=>$item){
$arrUser[$key]['face'] = $this->getUserFace($item);
}
return $arrUser;
}
#获取简单的用户信息
function getSimpleUser($userid){
$strUser = $this->find('user_info',array(
'userid'=>$userid,
),'userid,username,face,path,signed,allscore,uptime');
if($strUser){
$strUser['face'] = $this->getUserFace($strUser);
$strUser['signed'] = tsTitle($strUser['signed']);
$strUser['rolename'] = $this->getRole($strUser['allscore']);
return $strUser;
}else{
return '';
}
}
//获取一个用户的信息
function getOneUser($userid){
$strUser = $this->find('user_info',array(
'userid'=>$userid,
));
if($strUser){
$strUser['username'] = tsTitle($strUser['username']);
$strUser['email'] = tsTitle($strUser['email']);
$strUser['phone'] = tsTitle($strUser['phone']);
$strUser['province'] = tsTitle($strUser['province']);
$strUser['city'] = tsTitle($strUser['city']);
$strUser['signed'] = tsTitle($strUser['signed']);
$strUser['about'] = tsTitle($strUser['about']);
$strUser['address'] = tsTitle($strUser['address']);
$strUser['face'] = $this->getUserFace($strUser);
$strUser['rolename'] = $this->getRole($strUser['allscore']);
}else{
$strUser = '';
}
return $strUser;
}
//用户是否存在
public function isUser($userid){
$isUser = $this->findCount('user',array('userid'=>$userid));
if($isUser == 0){
return false;
}else{
return true;
}
}
/**
* @param int $js
* @param string $userkey
* @return int
*/
public function isLogin($js=0, $userkey=''){
$userid = tsIntval($_SESSION['tsuser']['userid']);
if($js && $userid==0 && $userkey==''){
getJson('你还没有登录',$js);
}
#通过userkey返回userid
if($js && $userid==0 && $userkey){
$userid = $this->getUserIdByUserKey($userkey);
return $userid;
}
if($userid>0){
if($this->isUser($userid)){
return $userid;
}else{
header("Location: ".tsUrl('user','login'));
exit;
}
}else{
header("Location: ".tsUrl('user','login'));
exit;
}
}
//根据用户积分获取用户角色
public function getRole($score){
global $tsMySqlCache;
$arrRole = fileRead('data/user_role.php');
if($arrRole==''){
$arrRole = $tsMySqlCache->get('user_role');
}
foreach($arrRole as $key=>$item){
if($score > $item['score_start'] && $score <= $item['score_end'] || $score > $item['score_start'] && $item['score_end']==0 || $score >=0 && $score <= $item['score_end']){
return $item['rolename'];
}
}
}
/**
* 增加积分
* $userid 用户ID
* $scorename 积分名字
* $score 积分
* @issx 上线限制0限制1不限制
*/
public function addScore($userid,$scorename,$score,$issx=0){
if($userid && $scorename && $score){
#计算当天已经获得的积分
$starttime = strtotime(date('Y-m-d 00:00:01'));
$endtime = strtotime(date('Y-m-d 23:59:59'));
$strDayScore = $this->db->once_fetch_assoc("select SUM(score) as dayscore from ".dbprefix."user_score_log where `userid`='$userid' and `status`='0' and `addtime`>='$starttime' and `addtime`<='$endtime'");
#用户每日获得积分上限
if($strDayScore['dayscore']<$GLOBALS['TS_SITE']['dayscoretop'] || $issx==1){
//添加积分记录
$this->create('user_score_log',array(
'userid'=>$userid,
'scorename'=>$scorename,
'score'=>$score,
'status'=>0,
'addtime'=>time(),
));
//计算总积分
$strUser = $this->find('user_info',array(
'userid'=>$userid,
));
$strAllScore = $this->db->once_fetch_assoc("select SUM(score) as allscore from ".dbprefix."user_score_log where `userid`='$userid' and `status`='0'");
$this->update('user_info',array(
'userid'=>$userid,
),array(
'allscore'=>$strAllScore['allscore'],
'count_score'=>$strUser['count_score']+$score,
));
}
}
}
/*
* 减去积分
*/
public function delScore($userid,$scorename,$score){
if($userid && $scorename && $score){
//计算总积分
$strUser = $this->find('user_info',array(
'userid'=>$userid,
));
if($strUser['count_score']>=$score){
//添加积分记录
$this->create('user_score_log',array(
'userid'=>$userid,
'scorename'=>$scorename,
'score'=>$score,
'status'=>1,
'addtime'=>time(),
));
$this->update('user_info',array(
'userid'=>$userid,
),array(
'count_score'=>$strUser['count_score']-$score,
));
return true;
}else{
return false;
}
}
}
/**
* 处理积分
*
* @param [type] $app
* @param [type] $ac
* @param string $mg 指向后台管理文件(用于后台操作得积分处理)
* @param string $api 指向API接口文件(用于API接口得积分处理)
* @param string $ts
* @param integer $uid 指定用户ID
* @param integer $isday 是否一天只给一次积分,默认0否1是
* @return void
*/
function doScore($app,$ac,$mg='',$api='',$ts='',$uid=0,$isday=0){
$userid = tsIntval($_SESSION['tsuser']['userid']);
if($uid) $userid=$uid;
$strScore = $this->find('user_score',array(
'app'=>$app,
'action'=>$ac,
'mg'=>$mg,
'api'=>$api,
'ts'=>$ts,
));
if($strScore && $userid){
if($strScore['status']=='0'){
if($isday==1){
//获取最新得一条积分记录
$strScoreLog = $this->find('user_score_log',array(
'userid'=>$userid,
'scorename'=>$strScore['scorename'],
),null,'addtime desc');
if(($strScoreLog && date('Y-m-d H:i:s',$strScoreLog['addtime'])<date('Y-m-d 00:00:01')) || $strScoreLog==''){
$this->addScore($userid,$strScore['scorename'],$strScore['score']);
}
}else{
//0加积分
$this->addScore($userid,$strScore['scorename'],$strScore['score']);
}
}elseif($strScore['status']=='1'){
//1减积分
$this->delScore($userid,$strScore['scorename'],$strScore['score']);
}
}
}
//删除用户一切数据
function toEmpty($userid){
$strUser = $this->find('user_info',array(
'userid'=>$userid,
),'userid,email,phone,face');
#禁用用户Email账号
$this->replace('anti_email',array(
'email'=>$strUser['email'],
),array(
'email'=>$strUser['email'],
'addtime'=>date('Y-m-d H:i:s'),
));
#禁用用户手机号
$this->replace('anti_phone',array(
'phone'=>$strUser['phone'],
),array(
'phone'=>$strUser['phone'],
'addtime'=>date('Y-m-d H:i:s'),
));
#用户头像
if($strUser['face']){
if($GLOBALS['TS_SITE']['file_upload_type']==1){
deleteAliOssFile('uploadfile/user/'.$strUser['face']);
}else{
unlink('uploadfile/user/'.$strUser['photo']);
tsDimg($strUser['face'],'user','120','120',$strUser['path']);
}
}
#用户相关数据
$this->delete('user',array('userid'=>$userid));
$this->delete('user_info',array('userid'=>$userid));
$this->delete('user_follow',array('userid'=>$userid));
$this->delete('user_follow',array('touserid'=>$userid));
$this->delete('user_gb',array('userid'=>$userid));
$this->delete('user_gb',array('touserid'=>$userid));
$this->delete('user_open',array('userid'=>$userid));
$this->delete('user_score_log',array('userid'=>$userid));
#文章
$arrArticle = $this->findAll('article',array(
'userid'=>$userid,
));
foreach($arrArticle as $key=>$item){
aac('article')->deleteArticle($item);
}
$this->delete('article_user',array('userid'=>$userid));
#草稿箱
$this->delete('draft',array('userid'=>$userid));
#编辑器上传的文件
$arrEditor = $this->findAll('editor',array(
'userid'=>$userid,
));
foreach($arrEditor as $key=>$item){
unlink('uploadfile/editor/'.$item['url']);
}
$this->delete('editor',array('userid'=>$userid));
#小组
$this->delete('topic',array('userid'=>$userid));
$this->delete('group_user',array('userid'=>$userid));
//attach
$this->delete('attach',array('userid'=>$userid));
$this->delete('attach_album',array('userid'=>$userid));
//message
$this->delete('message',array('userid'=>$userid));
$this->delete('message',array('touserid'=>$userid));
//photo
$this->delete('photo',array('userid'=>$userid));
$this->delete('photo_album',array('userid'=>$userid));
//tag
$this->delete('tag_user_index',array('userid'=>$userid));
//weibo
$this->delete('weibo',array('userid'=>$userid));
//活动ts_event
$this->delete('event',array('userid'=>$userid));
$this->delete('event_user',array('userid'=>$userid));
//问答ts_ask
$this->delete('ask',array('userid'=>$userid));
$this->delete('ask_comment',array('userid'=>$userid));
$this->delete('ask_comment_op',array('userid'=>$userid));
#删除评论ts_comment
$this->delete('comment',array('userid'=>$userid));
#删除点赞ts_love
$this->delete('love',array('userid'=>$userid));
}
//销毁前台session退出登陆
function logout(){
unset($_SESSION['tsuser']);
session_destroy();
setcookie("ts_email", '', time()+3600,'/');
setcookie("ts_autologin", '', time()+3600,'/');
}
//用户签到
function signin(){
$userid = tsIntval($GLOBALS['TS_USER']['userid']);
$zuotian = date('Y-m-d',strtotime("-1 day"));
$jintian = date('Y-m-d');
$zuotianSign = $this->find('sign',array(
'userid'=>$userid,
'addtime'=>$zuotian,
));
$jintianSign = $this->find('sign',array(
'userid'=>$userid,
'addtime'=>$jintian,
));
if($jintianSign==''){
if($zuotianSign==''){
$this->create('sign',array(
'userid'=>$userid,
'num'=>1,
'addtime'=>$jintian,
));
}else{
$this->create('sign',array(
'userid'=>$userid,
'num'=>$zuotianSign['num']+1,
'addtime'=>$jintian,
));
}
//加积分
$this->doScore('user','signin');
return true;
}else{
return false;
}
}
/*
* 判断是否允许用户发布内容
*/
public function isPublisher(){
$publisher = $GLOBALS['TS_SITE']['publisher'];
$userid = tsIntval($GLOBALS['TS_USER']['userid']);
if($publisher){
$ispublisher = $this->findCount('user_info',array(
'userid'=>$userid,
$publisher=>1,
));
if($ispublisher){
return true;
}else{
return false;
}
}else{
return true;
}
}
/**
* 通过 userid 获取 userkey
* @param $userid
* @return bool|string
*/
public function getUserKeyByUserId($userid){
include 'thinksaas/class.crypt.php';
$crypt= new crypt();
return $crypt->encrypt($userid,$GLOBALS['TS_SITE']['site_pkey']);
}
/**
* 通过userkey获取userid
* @param $userkey
*/
public function getUserIdByUserKey($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 [type] $userid
* @return void
*/
public function countFollowFans($userid){
//关注数
$count_follow = $this->findCount('user_follow',array(
'userid'=>$userid,
));
//粉丝数
$count_followed = $this->findCount('user_follow',array(
'touserid'=>$userid,
));
$this->update('user_info',array(
'userid'=>$userid,
),array(
'count_follow'=>$count_follow,
'count_followed'=>$count_followed,
));
}
/**
* 获取匿名用户ID
*
* @return void
*/
public function getNimingId(){
$email = 'null@null.com';
$strUser = $this->find('user',array(
'email'=>$email,
));
if($strUser){
$userid = $strUser['userid'];
}else{
$salt = md5(rand());
$pwd = random(6);
$userid = $this->create('user',array(
'pwd'=>md5($salt.$pwd),
'salt'=>$salt,
'email'=>$email,
'phone'=>$email,
));
//插入用户信息
$this->create('user_info',array(
'userid' => $userid,
'fuserid' => 0,
'ugid' => 3,
'username' => '匿名用户',
'email' => $email,
'phone' => $email,
'ip' => getIp(),
'isverify'=>1,
'isverifyphone'=>1,
'addtime' => time(),
'uptime' => time(),
));
}
return $userid;
}
//析构函数
public function __destruct(){
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
defined('IN_TS') or die('Access Denied.');
$skin = 'default';
$TS_APP['appname'] = '用户';
/*
* APP独立数据库配置
*/
/*
$tsAppDb['sql']='mysqli';
$tsAppDb['host']='localhost';
$tsAppDb['port']='3306';
$tsAppDb['user']='root';
$tsAppDb['pwd']='';
$tsAppDb['name']='thinksaas_git_app';
$tsAppDb['pre']='ts_';
*/
+2
View File
@@ -0,0 +1,2 @@
</body>
</html>
+73
View File
@@ -0,0 +1,73 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div class="mb-3">
<form method="post" action="{SITE_URL}index.php?app=user&ac=admin&mg=group&ts=add">
<input type="text" name="ugname" placeholder="用户组名称" /> <input type="text" name="uginfo" placeholder="用户组介绍" /> <input type="submit" value="创建用户组" />
</form>
</div>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th>UGID</th>
<th>组名</th>
<th>介绍</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{loop $arrGroup $key $item}
{if !in_array($item['ugid'],array(1,2,3,4))}
<form method="post" action="index.php?app=user&ac=admin&mg=group&ts=edit">
<tr>
<td>{$item['ugid']}</td>
<td><input name="ugname" value="{tsTitle($item['ugname'])}"></td>
<td><input name="uginfo" value="{tsTitle($item['uginfo'])}"></td>
<td>
<input type="hidden" name="ugid" value="{$item['ugid']}">
<input type="submit" class="btn btn-sm btn-outline-secondary" value="修改">
<a class="btn btn-sm btn-outline-secondary" onclick="return confirm('确定删除吗?')" href="{SITE_URL}index.php?app=user&ac=admin&mg=group&ts=delete&ugid={$item['ugid']}">删除</a>
</td>
</tr>
</form>
{else}
<tr>
<td>{$item['ugid']}</td>
<td>{tsTitle($item['ugname'])}</td>
<td class="fs12 c9">{tsTitle($item['uginfo'])}</td>
<td>
</td>
</tr>
{/if}
{/loop}
</tbody>
</table>
</div>
{php include pubTemplate("footer_admin")}
+29
View File
@@ -0,0 +1,29 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div class="page">{$pageUrl}</div>
<table class="table table-hover">
<thead class="thead-light">
<tr><th>id</th><th>userid</th><th>touserid</th><th>content</th><th>addtime</th><th>操作</th></tr>
</thead>
<tbody>
{loop $arrGuestbook $key $item}
<tr><td>{$item['id']}</td><td>{$item['userid']}</td><td>{$item['touserid']}</td><td>{php echo tsTitle($item['content'])}</td><td>{$item['addtime']}</td><td><a onclick="return confirm('确定删除吗?')" href="{SITE_URL}index.php?app=user&ac=admin&mg=guestbook&ts=delete&page={$page}&guestid={$item['id']}">删除</a></td></tr>
{/loop}
</tbody>
</table>
</div>
{php include pubTemplate("footer_admin")}
+33
View File
@@ -0,0 +1,33 @@
<div class="tabnav">
<h6>用户管理</h6>
<ul>
<li {if $mg=='options'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=options">用户配置</a></li>
<li {if $mg=='permissions'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=permissions">权限配置</a></li>
<li {if $mg=='user' && $ts=='list'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=list">用户管理</a></li>
{if $mg=='user' && $ts=='view'}<li class="select"><a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=list">{$strUser[username]}用户信息</a></li>
{/if}
<li {if $mg=='group' && $ts=='list'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=group&ts=list">用户组</a></li>
<li {if $mg=='role' && $ts=='list'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=role&ts=list">角色管理</a></li>
<li {if $mg=='score' && $ts=='list'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=list">积分设置</a></li>
<li {if $mg=='score' && $ts=='send'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=send">加减积分</a></li>
<li {if $mg=='guestbook' && $ts=='list'}class="select"{/if}><a href="{SITE_URL}index.php?app=user&ac=admin&mg=guestbook&ts=list">留言管理</a></li>
<li {if $mg=='user' && $ts=='add'}class="select"{/if}>
<a href="index.php?app=user&ac=admin&mg=user&ts=add">创建新用户</a>
</li>
</ul>
</div>
<div style="height: 100px;"></div>
+30
View File
@@ -0,0 +1,30 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<form method="POST" action="{SITE_URL}index.php?app=user&ac=admin&mg=options&ts=do">
<table class="table table-hover">
<tr><td>APP名称:</td><td><input style="width:300px;" name="option[appname]" value="{$strOption[appname]}" /></td></tr>
<tr><td>APP介绍:</td><td><textarea style="width:300px;" name="option[appdesc]">{$strOption[appdesc]}</textarea></td></tr>
<tr><td>APP关键词:</td><td><input style="width:300px;" name="option[appkey]" value="{$strOption[appkey]}" /></td></tr>
<tr><td>APP是否启用:</td><td><input {if $strOption[isenable]=='0'}checked="select"{/if} name="option[isenable]" type="radio" value="0" />启用 <input {if $strOption[isenable]=='1'}checked="select"{/if} name="option[isenable]" type="radio" value="1" />关闭</td></tr>
<tr><td>默认加入小组 :</td><td><input style="width:300px;" name="option[isgroup]" value="{$strOption[isgroup]}" /> (输入小组的ID,不是小组名称,多个请用,号分开,如1,2,3)</td></tr>
<tr><td>禁止注册用户名 :</td><td><input style="width:300px;" name="option[banuser]" value="{$strOption['banuser']}" /> (禁止用户注册的用户名,多个用|分割)</td></tr>
<tr><td></td><td><input class="btn btn-primary" type="submit" value="提 交" /></td></tr>
</table>
</form>
</div>
{php include pubTemplate("footer_admin")}
+177
View File
@@ -0,0 +1,177 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div class="mb-3">
{loop $arrUg $key $item}
<a class="btn btn-sm {if $item['ugid']==$ugid}btn-secondary{else}btn-outline-secondary{/if}" href="{SITE_URL}index.php?app=user&ac=admin&mg=permissions&ugid={$item['ugid']}">{$item['ugname']}</a>
{/loop}
</div>
<form method="POST" action="index.php?app=user&ac=admin&mg=permissions&ts=do">
<h6 class="font-weight-bold fs14">前台权限</h6>
<table class="table table-hover">
<tr>
<td width="150">查看用户空间:</td>
<td>
<select name="option[user_space]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_space']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_space']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户帖子:</td>
<td>
<select name="option[user_topic]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_topic']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_topic']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户小组:</td>
<td>
<select name="option[user_group]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_group']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_group']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户文章:</td>
<td>
<select name="option[user_article]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_article']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_article']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户粉丝:</td>
<td>
<select name="option[user_followed]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_followed']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_followed']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户关注:</td>
<td>
<select name="option[user_follow]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_follow']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_follow']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>查看用户留言:</td>
<td>
<select name="option[user_guestbook]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_guestbook']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_guestbook']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<!--不允许游客发布、修改、删除-->
{if $ugid==1 || $ugid==2 || $ugid==3}
<tr>
<td>发布留言:</td>
<td>
<select name="option[user_guestbook_do]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_guestbook_do']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_guestbook_do']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
{/if}
</table>
<!--管理权限-->
{if $ugid==1 || $ugid==2}
<h6 class="font-weight-bold fs14">后台权限</h6>
<table class="table table-hover">
<tr>
<td width="150">文章配置:</td>
<td>
<select name="option[user_admin_options]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_admin_options']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_admin_options']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
<tr>
<td>权限配置:</td>
<td>
<select name="option[user_admin_permissions]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_admin_permissions']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_admin_permissions']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
</table>
{/if}
<h6 class="font-weight-bold fs14">API权限</h6>
<table class="table table-hover">
<tr>
<td width="150">查看用户:</td>
<td>
<select name="option[user_api_show]">
<option value="1" {if $TS_APP['permissions'][$ugid]['user_api_show']==1}selected{/if}>允许</option>
<option value="0" {if $TS_APP['permissions'][$ugid]['user_api_show']==0}selected{/if}>拒绝</option>
</select>
</td>
</tr>
</table>
<input type="hidden" name="ugid" value="{$ugid}">
<input class="btn btn-primary" type="submit" value="提交修改" />
</form>
</div>
{php include pubTemplate("footer_admin")}
+36
View File
@@ -0,0 +1,36 @@
{php include pubTemplate("header_admin")}
<script src="{SITE_URL}public/js/jquery.min.js" type="text/javascript"></script>
<script>
function insertMenu(){
$("#before").before('<tr><td><input name="rolename[]" /></td><td><input name="score_start[]" /></td><td><input name="score_end[]" /></td></tr>');
}
</script>
<div class="midder">
{php include template("admin/menu");}
<form method="POST" action="{SITE_URL}index.php?app=user&ac=admin&mg=role&ts=do">
<table class="table table-hover">
<thead class="thead-light">
<tr><th>角色名称</th><th>起始积分</th><th>结束积分</th></tr>
</thead>
<tbody>
{loop $arrRole $key $item}
<tr><td><input name="rolename[]" value="{$item['rolename']}" /></td><td><input name="score_start[]" value="{$item['score_start']}" /></td><td><input name="score_end[]" value="{$item['score_end']}" /></td></tr>
{/loop}
<tr id="before"><td><input type="submit" value="修 改" /></td><td></td><td><a href="javascript:void('0');" onclick="insertMenu();">点击增加角色</a>(说明:如需删除某一项,请将要删除的某项清空提交即可。)</td></tr>
</tbody>
</table>
</form>
</div>
{php include pubTemplate("footer_admin")}
+89
View File
@@ -0,0 +1,89 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th>积分名称</th>
<th>key</th>
<th>分数</th>
<th>对应app</th>
<th>对应action</th>
<th>对应mg</th>
<th>对应api</th>
<th>对应ts</th>
<th>状态</th>
<th>设置</th>
</tr>
</thead>
<tbody>
{loop $arrScore $key $item}
<form method="post" action="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=editdo">
<tr>
<td>{$item['scorename']}</td>
<td>{$item['scorekey']}</td>
<td><input style="width:70px" name="score" value="{$item['score']}" /></td>
<td><input style="width:70px" name="app" value="{$item['app']}" /></td>
<td><input style="width:70px" name="action" value="{$item['action']}" /></td>
<td><input style="width:70px" name="mg" value="{$item['mg']}" /></td>
<td><input style="width:70px" name="api" value="{$item['api']}" /></td>
<td><input style="width:70px" name="ts" value="{$item['ts']}" /></td>
<td>
<select name="status">
<option value="0" {if $item['status']=='0'}selected{/if}>加积分</option>
<option value="1" {if $item['status']=='1'}selected{/if}>减积分</option>
</select>
</td>
<td>
<input type="hidden" name="scoreid" value="{$item['scoreid']}" /><input type="submit" value="修改" /> |
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=delete&scoreid={$item['scoreid']}" onclick="return confirm('确定删除吗?')">删除</a>
</td>
</tr>
</form>
{/loop}
</tbody>
</table>
</div>
<div>
<h6>添加积分节点</h6>
<form method="post" action="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=adddo">
<table class="table table-hover">
<tr><td width="200">积分名称:</td><td><input type="text" name="scorename" /></td></tr>
<tr><td>积分KEY</td><td><input type="text" name="scorekey" /></td></tr>
<tr><td>积分:</td><td><input type="text" name="score" /></td></tr>
<tr><td>对应APP</td><td><input type="text" name="app" /></td></tr>
<tr><td>对应ACTION</td><td><input type="text" name="action" /></td></tr>
<tr><td>对应MG</td><td><input type="text" name="mg" /></td></tr>
<tr><td>对应API</td><td><input type="text" name="api" /></td></tr>
<tr><td>对应TS</td><td><input type="text" name="ts" /></td></tr>
<tr><td>状态:</td><td><input type="radio" name="status" value="0" checked="select" />加积分 <input type="radio" name="status" value="1" />减积分</td></tr>
<tr><td></td><td><input type="submit" value="提交" /></td></tr>
</table>
</form>
</div>
<div>
<h6>积分使用帮助</h6>
<p>1、在需要使用积分的php代码处加:</p>
<code>
aac('user')->doScore({php echo '$app'},{php echo '$ac'},{php echo '$mg'},{php echo '$api'},{php echo '$ts'},{php echo '$uid'})
</code>
<p>以上代码具体使用方式请看app/user/class.user.php中doScore方法</p>
<p>2、根据对应的app,action,mg,api,ts,uid变量配置好积分</p>
</div>
</div>{php include pubTemplate("footer_admin")}
+19
View File
@@ -0,0 +1,19 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div>
<form method="post" action="{SITE_URL}index.php?app=user&ac=admin&mg=score&ts=senddo">
<table class="table table-hover">
<tr><td>用户ID:</td><td><input type="text" name="userid" /></td></tr>
<tr><td>积分数:</td><td><input type="text" name="score" /></td></tr>
<tr><td>状态:</td><td>
<input type="radio" name="status" value="0" checked />
<input type="radio" name="status" value="1" /><small>(减去的积分不可以大于用户剩余积分,否则减分操作不成功)</small>
</td></tr>
<tr><td>积分说明:</td><td><input type="text" name="scorename" /></td></tr>
<tr><td></td><td><input type="submit" value="执行" /></td></tr>
</table>
</form>
</div>
</div>
{php include pubTemplate("footer_admin")}
+66
View File
@@ -0,0 +1,66 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div>
<form method="post" action="index.php?app=user&ac=admin&mg=user&ts=adddo">
<table class="table">
<tr>
<td width="200">账号(Email/手机号)</td>
<td>
<input class="form-control" type="text" name="email">
</td>
<td></td>
</tr>
<tr>
<td>用户名:</td>
<td>
<input class="form-control" type="text" name="username">
</td>
<td></td>
</tr>
<tr>
<td>密码:</td>
<td>
<input class="form-control" type="password" name="pwd">
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<input class="btn btn-sm btn-primary" type="submit" value="创建用户">
</td>
<td></td>
</tr>
</table>
</form>
</div>
</div>
{php include pubTemplate("footer_admin")}
+157
View File
@@ -0,0 +1,157 @@
{php include pubTemplate("header_admin")}
<div class="midder">
{php include template("admin/menu");}
<div>
<form method="get" action="{SITE_URL}index.php">
<input type="hidden" name="app" value="user" />
<input type="hidden" name="ac" value="admin" />
<input type="hidden" name="mg" value="user" />
<input type="hidden" name="ts" value="list" />
UID<input type="text" name="userid" /> 用户名:<input type="text" name="username" /> <input type="submit" value="搜索" />
<a class="btn btn-sm btn-outline-primary" href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=clean">一键删除被停用用户</a>
</form>
</div>
<div class="page">{$pageUrl}</div>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th>UID</th>
<th>邀请ID</th>
<th>用户组</th>
<th>Email</th>
<th>手机号</th>
<th>姓名</th>
<th>注册时间</th>
<th>登录IP</th>
<th>来自</th>
<th>操作</th></tr>
</thead>
<tbody>
{loop $arrAllUser $key $item}
<tr class="odd">
<td>{$item[userid]}</td>
<td>{$item[fuserid]}</td>
<td>
<select id="user_{$item['userid']}" onchange="changeGroup('{$item['userid']}')">
<option value="0" {if $item['ugid']==0}selected{/if}>未分组</option>
{loop $arrUg1 $ukey $uitem}
<option value="{$ukey}" {if $item['ugid']==$ukey}selected{/if}>{$uitem}</option>
{/loop}
</select>
</td>
<td>
{$item[email]}
{if $TS_USER['userid']==1 && $item['userid']!=1}
<div class="fs12">
{if $item['isverify']==1}
已验证 <a onclick="return confirm('确定取消?')" href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isverify&userid={$item['userid']}">[取消]</a>
{else}
<font color="red">未验证</font> <a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isverify&userid={$item['userid']}">[验证]</a>
{/if}
</div>
{/if}
</td>
<td>
{$item['phone']}
{if $TS_USER['userid']==1 && $item['userid']!=1}
<div class="fs12">
{if $item['isverifyphone']==1}
已验证 <a onclick="return confirm('确定取消?')" href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isverifyphone&userid={$item['userid']}">[取消]</a>
{else}
<font color="red">未验证</font> <a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isverifyphone&userid={$item['userid']}">[验证]</a>
{/if}
</div>
{/if}
</td>
<td>{$item[username]}</td>
<td class="fs12 c9">{php echo date('Y-m-d H:i:s',$item[addtime])}</td>
<td class="fs12 c9">{$item['ip']}</td>
<td>{$item['comefrom']}</td>
<td>
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isrenzheng&&userid={$item[userid]}">
{if $item[isrenzheng]=='0'}[手工认证]{else}<font color="green">[取消认证]</font>{/if}
</a>
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=view&userid={$item[userid]}">[明细]</a>
{if $item['isadmin']==0}
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=isenable&&userid={$item[userid]}&page={$page}">
{if $item[isenable]=='0'}[停用]{else}<font color="red">[启用]</font>{/if}</a>
{/if}
{if $item['userid']!=1}
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=pwd&userid={$item[userid]}">[修改密码]</a>
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=face&userid={$item[userid]}">[清除头像]</a>
{/if}
{if $TS_USER['userid']==1 && $item['userid']!=1}
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=deldata&userid={$item[userid]}">[删除]</a>
<a href="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=admin&userid={$item['userid']}&token={$_SESSION['token']}">
{if $item['isadmin']==0}
[设为管理员]
{elseif $item['isadmin']==1}
<font color="red">[取消管理员]</font>
{/if}
</a>
{/if}
</td>
</tr>
{/loop}
</tbody>
</table>
</div>
<script>
function changeGroup(userid){
var ugid = document.getElementById("user_"+userid).value;
$.post('index.php?app=user&ac=admin&mg=user&ts=ugid',{'userid':userid,'ugid':ugid},function(rs){
})
}
</script>
{php include pubTemplate("footer_admin")}
+20
View File
@@ -0,0 +1,20 @@
{php include pubTemplate("header_admin")}
<!--main-->
<div class="midder">
{php include template("admin/menu");}
<form method="post" action="{SITE_URL}index.php?app=user&ac=admin&mg=user&ts=pwddo">
<table class="table table-hover">
<tr><td width="100">Email</td><td>{$strUser['email']}</td></tr>
<tr><td>密码:</td><td><input type="password" name="pwd" /></td></tr>
<tr><td></td><td>
<input type="hidden" name="userid" value="{$strUser['userid']}" />
<input class="btn btn-primary" type="submit" value="修改" />
</td></tr>
<table>
</form>
</div>
{php include pubTemplate("footer_admin")}
+35
View File
@@ -0,0 +1,35 @@
{php include pubTemplate("header_admin")}
<!--main-->
<div class="midder">
{php include template("admin/menu");}
<table class="table table-hover">
<thead class="thead-light">
<tr><th width="160">字段</th><th>信息</th></tr>
</thead>
<tbody>
<tr><td>用户名:</td><td>{$strUser['username']}</td></tr>
<tr><td>登录账号:</td><td>{$strUser['email']}</td></tr>
<tr><td>手机号:</td><td>{if isPhone($strUser['phone'])}{$strUser['phone']}{else}无{/if}</td></tr>
<!--{if $strUser[signed]}--><tr><td>签名:</td><td>{$strUser['signed']}</td></tr><!--{/if}-->
<!--{if $strUser[blog]}--><tr><td>博客:</td><td>{$strUser['blog']}</td></tr><!--{/if}-->
<!--{if $strUser[about]}--><tr><td>关于:</td><td>{$strUser['about']}</td></tr><!--{/if}-->
<tr><td>注册日期:</td><td>{php echo date('Y-m-d H:i:s',$strUser['addtime'])}</td></tr>
<tr><td>上次访问:</td><td>{php echo date('Y-m-d H:i:s',$strUser['uptime'])}</td></tr>
<tr><td>上次访问 IP: </td><td>{$strUser['ip']}</td></tr>
<tr><td>积分: </td><td>{$strUser['count_score']}</td></tr>
</tbody>
<table>
</div>
{php include pubTemplate("footer_admin")}
+3
View File
@@ -0,0 +1,3 @@
{loop $arrArea $key $item}
<option value="{$item[areaid]}">{$item[areaname]}</option>
{/loop}
+123
View File
@@ -0,0 +1,123 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
{loop $arrArticle $key $item}
<div class="card">
<div class="card-body">
{if $item['photo']}
<div class="row">
<div class="col-md-4">
<a href="{tsUrl('article','show',array('id'=>$item['articleid']))}">
<img class="mw-100" src="{php echo tsXimg($item['photo'],'article',320,180,$item['path'],'1')}" />
</a>
</div>
<div class="col-md-8">
<div class="h5 fw400"><a href="{tsUrl('article','show',array('id'=>$item['articleid']))}">{$item[title]}</a></div>
<div class="fs12 text-black-50"><a class="text-black-50" href="{tsUrl('user','space',array('id'=>$item['user']['userid']))}">{$item[user][username]}</a> 发表于 {$item[addtime]}</div>
<div class="text-black-50 mt-1">{if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概要{/if} (<a href="{tsUrl('article','show',array('id'=>$item['articleid']))}">查看全文</a>)</div>
<div class="of c9 mt-3 fs12">
<div class="float-left">
分类:<a href="{tsUrl('article','cate',array('id'=>$item['cate']['cateid']))}">{$item['cate']['catename']}</a>
</div>
<div class="float-right">
<i class="bi bi-eye"></i> {$item['count_view']}
<i class="bi bi-chat-text ml-3"></i> {$item['count_comment']}
</div>
</div>
</div>
</div>
{else}
<div class="h5 fw400"><a href="{tsUrl('article','show',array('id'=>$item['articleid']))}">{$item['title']}</a></div>
<div class="fs12 text-black-50"><a class="text-black-50" href="{tsUrl('user','space',array('id'=>$item['user']['userid']))}">{$item['user']['username']}</a> 发表于 {$item['addtime']}</div>
{if $item['score']==0}
<div class="text-black-50 mt-1">{if $item['gaiyao']}{$item['gaiyao']}{else}暂无概要{/if} (<a href="{tsUrl('article','show',array('id'=>$item['articleid']))}">查看全文</a>)</div>
{/if}
<div class="of c9 mt-3 fs12">
<div class="float-left">
分类:<a href="{tsUrl('article','cate',array('id'=>$item['cate']['cateid']))}">{$item['cate']['catename']}</a>
</div>
<div class="float-right">
<i class="bi bi-eye"></i> {$item['count_view']}
<i class="bi bi-chat-text ml-3"></i> {$item['count_comment']}
</div>
</div>
{/if}
</div>
</div>
{/loop}
<div class="mt-4">{$pageUrl}</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+3
View File
@@ -0,0 +1,3 @@
{loop $arrCity $key $item}
<option value="{$item[cityid]}">{$item[cityname]}</option>
{/loop}
+31
View File
@@ -0,0 +1,31 @@
{php include pubTemplate("header")}
<div class="midder">
<div class="mc">
<h1>{$strUser['username']} </h1>
<div class="cleft">
<div class="bbox">
{template menu}
<div class="clear"></div>
<div class="commlist">
<ul>
{loop $arrTopicList $key $item}
<li><a href="{tsUrl('topic','show',array('id'=>$item['topicid']))}">{php echo htmlspecialchars($item['title'])}</a> <i>{$item['count_comment']}</i></li>
{/loop}
</ul>
</div>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
</div>
</div>
<div class="cright">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+35
View File
@@ -0,0 +1,35 @@
{php include pubTemplate("header")}
<div class="midder">
<div class="mc">
<h1>{$strUser['username']} </h1>
<div class="cleft">
<div class="bbox">
{template menu}
<div class="clear"></div>
<ul class="topic">
{loop $arrComment $key $item}
<li><a href="{tsUrl('group','topic',array('id'=>$item['topicid']))}">{php echo htmlspecialchars($item['topic']['title'])}</a> <i>{$item['topic']['count_comment']}</i>
<br />
<i>“{php echo nl2br(htmlspecialchars($item['content']))}”</i>
</li>
{/loop}
</ul>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
</div>
</div>
<div class="cright">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+50
View File
@@ -0,0 +1,50 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
{if $arrUser}
<div class="obss">
{loop $arrUser $key $item}
<dl class="obu"><dt><a class="nbg" href="{tsUrl('user','space',array('id'=>$item['userid']))}">
<img alt="{$item['username']}" title="{$item['username']}" class="rounded-circle" src="{$item['face']}" width="48" height="48">
</a></dt>
<dd class="title-cut text-secondary fs12 mt-1">{$item[username]}</dd></dl>
{/loop}
</div>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
{else}
<div class="c9 fs12">还没有关注任何人</div>
{/if}
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+52
View File
@@ -0,0 +1,52 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
{if $arrUser}
<div class="obss">
{loop $arrUser $key $item}
<dl class="obu"><dt><a class="nbg" href="{tsUrl('user','space',array('id'=>$item['userid']))}">
<img alt="{$item['username']}" title="{$item['username']}" class="rounded-circle" src="{$item['face']}" width="48" />
</a></dt>
<dd class="title-cut text-secondary fs12 mt-1">{$item[username]}</dd></dl>
{/loop}
</div>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
{else}
<div class="c9 fs12">还没有任何粉丝</div>
{/if}
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+163
View File
@@ -0,0 +1,163 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body" style="padding: 15px 30px 30px;">
<ul class="nav nav-tabs mb-4">
{if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold active" href="{tsUrl('user','forgetpwd')}">Email重置密码</a>
</li>
{/if}
{if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold" href="{tsUrl('user','forgetpwd',array('ts'=>'phone'))}">手机号重置密码</a>
</li>
{/if}
</ul>
<!--{if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'}-->
<form id="comm-form" method="post" action="{SITE_URL}index.php?app=user&ac=forgetpwd&ts=do" role="form">
<div class="form-group">
<label>Email邮箱:</label>
<input id="myemail" name="email" type="email" class="form-control" value="" autocomplete="off" placeholder="请输入你的Email账号">
</div>
<div class="form-group">
<label>图形验证码:</label>
<div style="overflow: hidden;">
<input id="authcode" style="float: left;width:50%;" name="authcode" type="text" class="form-control" placeholder="请输入右侧图形验证码">
<img src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="float:right;cursor:pointer;" />
</div>
</div>
<div class="form-group">
<label>Email邮箱验证码:</label>
<div style="overflow: hidden;">
<input style="float: left;width:60%;" name="emailcode" type="text" class="form-control" placeholder="" >
<button id="mybtn" type="button" class="btn btn-outline-secondary" style="float: right;">获取验证码</button>
</div>
<div class="fs12 text-danger">获取验证码后请登录邮箱查看验证码</div>
</div>
<div class="form-group">
<label>新密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="输入新密码" check-type="required">
</div>
<div class="form-group">
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button type="submit" class="btn btn-sm btn-info">重置密码</button>
</div>
</form>
<!--{/if}-->
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendEmailCode(2,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var email = $("#myemail").val();
var authcode = $("#authcode").val();
if(email && authcode){
//人机验证
obj.validate();
}else{
tsNotice('Email和图形验证码必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var email = $("#myemail").val();
var authcode = $("#authcode").val();
if(email && authcode){
sendEmailCode(2)
}else{
tsNotice('Email和图形验证码必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+156
View File
@@ -0,0 +1,156 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body" style="padding: 15px 30px 30px;">
<ul class="nav nav-tabs mb-4">
{if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold" href="{tsUrl('user','forgetpwd')}">Email重置密码</a>
</li>
{/if}
{if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold active" href="{tsUrl('user','forgetpwd',array('ts'=>'phone'))}">手机号重置密码</a>
</li>
{/if}
</ul>
<!--{if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'}-->
<form id="comm-form" method="post" action="{SITE_URL}index.php?app=user&ac=phone&ts=resetpwd" role="form">
<div class="form-group">
<label>手机号:</label>
<input id="myphone" name="phone" type="number" class="form-control" value="" placeholder="输入手机号">
</div>
<div class="form-group">
<label>验证码:</label>
<div style="overflow: hidden;">
<input id="authcode" style="float: left;width:50%;" name="authcode" type="text" class="form-control" placeholder="">
<img src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="float:right;cursor:pointer;" />
</div>
</div>
<div class="form-group">
<label>手机验证码:</label>
<div style="overflow: hidden;">
<input style="float: left;width:50%;" name="phonecode" type="text" class="form-control" placeholder="">
<button id="mybtn" type="button" class="btn btn-outline-secondary" style="float: right;">获取验证码</button>
</div>
</div>
<div class="form-group">
<label>新密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="输入新密码" check-type="required">
</div>
<div class="form-group">
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button type="submit" class="btn btn-sm btn-info">重置密码</button>
</div>
</form>
<!--{/if}-->
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendPhoneCode(2,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
//人机验证
obj.validate();
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
sendPhoneCode(2)
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+42
View File
@@ -0,0 +1,42 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
{loop $arrGroupList $key $item}
<div class="sub-item">
<div class="pic">
<a href="{tsUrl('group','show',array('id'=>$item[groupid]))}">
<img class="rounded" src="{$item[photo]}" alt="{$item[groupname]}" />
</a>
</div>
<div class="info">
<a href="{tsUrl('group','show',array('id'=>$item[groupid]))}">{$item[groupname]}</a> <font color="#999999">{$item[count_user]}人加入</font>
<p>{php echo t($item[groupdesc])}</p>
</div>
</div>
{/loop}
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+102
View File
@@ -0,0 +1,102 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
{if tsIntval($TS_USER['userid']) >0 && tsIntval($TS_USER['userid']) != $strUser['userid']}
<div class="guest">
<img class="rounded-circle" src="{SITE_URL}public/images/user_large.jpg" />
<form method="post" action="{SITE_URL}index.php?app=user&ac=guestbook&ts=do">
<textarea class="form-control" name="content"></textarea>
<input type="hidden" name="touserid" value="{$strUser['userid']}" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<div class="pd100">
<button class="btn btn-sm btn-info" type="submit">添加留言</button>
</div>
</form>
</div>
{/if}
<div class="clear"></div>
<!--回复-->
<div id="reguest" style="display:none;">
<form method="post" action="{SITE_URL}index.php?app=user&ac=guestbook&ts=redo">
<textarea class="form-control" name="content"></textarea>
<input id="touserid" type="hidden" name="touserid" value="0" />
<input id="reid" type="hidden" name="reid" value="0" />
<div class="pd100">
<button class="btn btn-sm btn-info" type="submit">回复</button>
<a class="btn btn-sm btn-outline-secondary" href="javascript:void('0')" onclick="reguest()">取消</a>
</div>
</form>
</div>
{if $arrGuestList}
<div class="glist">
<ul>
{loop $arrGuestList $key $item}
<li>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">
<img src="{$item['user']['face']}" width="36" height="36" class="rounded-circle" />
</a>
<div class="content">
<p class="c9 fs12"><a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['user']['username']}</a> {$item['addtime']}</p>
<div>{$item['content']}</div>
{if $item['reply']}
<div class="bg-light p-2 text-secondary rounded">回复:{$item['reply']['content']}</div>
{/if}
<p class="text-right fs12">
{if tsIntval($TS_USER['userid']) == $strUser['userid']}
<a href="#reguest" onclick="reguest('{$item['userid']}','{$item['id']}','{$item['user']['username']}')"><i class="bi bi-reply"></i> 回复</a>
<a class="ml-2" href="{tsUrl('user','guestbook',array('ts'=>'delete','gbid'=>$item['id']))}" onclick="return confirm('确定删除?')"><i class="bi bi-trash"></i> 删除</a>
{/if}
</p>
<!--回复留言-->
</div>
</li>
{/loop}
</ul>
</div>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
{else}
<div class="text-black-50">暂无留言!</div>
{/if}
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+112
View File
@@ -0,0 +1,112 @@
{php include pubTemplate("header")}
<!--main-->
<div class="container">
<div class="row top10">
<div class="col-md-4">
<dl>
<dd>
<div class="title">用户积分榜<span>积分</span></div>
<ul>
{loop $arrScoreUser $key $item}
{if $key<='2'}
<li><div class="avatar"><a href="{tsUrl('user','space',array('id'=>$item['userid']))}"><img src="{$item['face']}" class="rounded-circle" /></a></div>
<p><em>{$item['count_score']}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></p></li>
{elseif $key >= '3'}
<li><span>{php echo $key+1}</span><em>{$item['count_score']}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></li>
{/if}
{/loop}
</ul>
</dd>
</dl>
</div>
<div class="col-md-4">
<dl>
<dd>
<div class="title">用户关注榜<span>关注数</span></div>
<ul>
{loop $arrFollowUser $key $item}
{if $key<='2'}
<li><div class="avatar"><a href="{tsUrl('user','space',array('id'=>$item['userid']))}"><img src="{$item['face']}" class="rounded-circle" /></a></div>
<p><em>{$item['count_followed']}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></p></li>
{elseif $key >= '3'}
<li><span>{php echo $key+1}</span><em>{$item['count_followed']}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></li>
{/if}
{/loop}
</ul>
</dd>
</dl>
</div>
<div class="col-md-4">
<dl>
<dd>
<div class="title">活跃用户<span>时间</span></div>
<ul>
{loop $arrHotUser $key $item}
{if $key<='2'}
<li><div class="avatar"><a href="{tsUrl('user','space',array('id'=>$item['userid']))}"><img src="{$item['face']}" class="rounded-circle" /></a></div>
<p><em>{php echo getTime($item[uptime],time())}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></p></li>
{elseif $key >= '3'}
<li><span>{php echo $key+1}</span><em>{php echo getTime($item[uptime],time())}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></li>
{/if}
{/loop}
</ul>
</dd>
</dl>
</div>
<div class="col-md-4">
<dl>
<dd>
<div class="title">新用户<span>时间</span></div>
<ul>
{loop $arrNewUser $key $item}
{if $key<='2'}
<li><div class="avatar"><a href="{tsUrl('user','space',array('id'=>$item['userid']))}"><img src="{$item['face']}" class="rounded-circle" /></a></div>
<p><em>{php echo getTime($item[addtime],time())}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></p></li>
{elseif $key >= '3'}
<li><span>{php echo $key+1}</span><em>{php echo getTime($item[addtime],time())}</em>
<a href="{tsUrl('user','space',array('id'=>$item['userid']))}">{$item['username']}</a></li>
{/if}
{/loop}
</ul>
</dd>
</dl>
</div>
</div>
</div>
{php include pubTemplate("footer")}
+58
View File
@@ -0,0 +1,58 @@
{php include pubTemplate("header")}
<!--main-->
<div class="container">
<div class="card">
<div class="card-header">{$TS_SITE[site_title]}邀请码</div>
<div class="card-body">
<div class="alert alert-info">物质匮乏,一码难求,今日您仅剩下 <span style="font-size:24px;color:#FF6600">{$codeNum}</span> 个邀请码</div>
{if $codeNum=='0'}
<div class="text-center">
<a class="btn btn-outline-info" href="{tsUrl('user','invite',array(ts=>code))}">点击申请邀请码</a>
</div>
{else}
<div class="row">
{loop $arrCode $key $item}
<div class="col-md-4 fs14 lh30">{$item['invitecode']}</div>
{/loop}
</div>
{/if}
<table class="table mt-3">
<thead class="thead-light">
<tr>
<th>用户ID</th>
<th>用户名</th>
<th>加入时间</th>
</tr>
</thead>
<tbody>
{loop $arrInviteUser $key $item}
<tr>
<td>{$item['userid']}</td>
<td>{$item['username']}</td>
<td>{php echo date('Y-m-d H:i:s',$item['addtime'])}</td>
</tr>
{/loop}
</tbody>
</table>
</div>
</div>
</div>
{php include pubTemplate("footer")}
+183
View File
@@ -0,0 +1,183 @@
{php include pubTemplate("header")}
<!--main-->
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body" style="padding: 15px 30px 30px;">
<div class="d-flex justify-content-between align-items-center">
<div class="fs24">用户登录</div>
{if $TS_SITE['isplogin']==1}
<div><a href="{tsUrl('user','plogin')}"><i class="bi bi-phone"></i> 短信登录</a></div>
{/if}
</div>
<hr />
<div>
<div class="form-group">
<label>账号</label>
<input name="email" type="text" class="form-control" placeholder="Email/手机号" onkeyup="this.value=this.value.replace(/[, ]/g,'')" check-type="required">
</div>
<div class="form-group">
<label>密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="Password" check-type="required">
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox" name="cktime" value="31536000" checked> 记住我
</label>
</div>
</div>
<div class="form-group">
<input type="hidden" name="jump" value="{$jump}" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button id="comm-submit" type="submit" class="btn btn-fat btn-success btn-lg btn-block">登录</button>
</div>
</div>
<p><a href="{tsUrl('user','register')}">还没有注册?</a> | <a href="{tsUrl('user','forgetpwd')}">忘记密码?</a></p>
<div class="lh30">
{php doAction('user_login_footer')}
</div>
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
var email = $("input[name='email']").val();
var pwd = $("input[name='pwd']").val();
var cktime = $("input[name='cktime']").val();
var jump = $("input[name='jump']").val();
var token = $("input[name='token']").val();
serverToken = vaptchaObj.getServerToken()
var data = {
email:email,
pwd:pwd,
cktime:cktime,
jump:jump,
token:token,
vaptcha_server:serverToken.server,
vaptcha_token:serverToken.token,
};
tsPost('index.php?app=user&ac=login&ts=do&js=1',data)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#comm-submit").on("click", function () {
var email = $("input[name='email']").val();
var pwd = $("input[name='pwd']").val();
if(email && pwd){
//人机验证
obj.validate();
}else{
tsNotice('账号和密码必须输入!');
}
});
</script>
<!--{else}-->
<script>
$("#comm-submit").on("click", function () {
var email = $("input[name='email']").val();
var pwd = $("input[name='pwd']").val();
var cktime = $("input[name='cktime']").val();
var jump = $("input[name='jump']").val();
var token = $("input[name='token']").val();
if(email && pwd){
var data = {
email:email,
pwd:pwd,
cktime:cktime,
jump:jump,
token:token,
};
tsPost('index.php?app=user&ac=login&ts=do&js=1',data)
}else{
tsNotice('账号和密码必须输入!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+93
View File
@@ -0,0 +1,93 @@
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{SITE_URL}">首页</a></li>
<li class="breadcrumb-item"><a href="{tsUrl('user')}">{$TS_APP['appname']}</a></li>
<li class="breadcrumb-item active" aria-current="page">{$strUser['username']}</li>
</ol>
</nav>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-8">
<div class="media">
<img class="mr-3 rounded-circle" src="{$strUser[face]}" alt="{$strUser[username]}" width="56">
<div class="media-body">
<h1 class="h4 fw400">{$strUser['username']} <a href="{tsUrl('user','verify')}">{if $strUser['isverify']==1}<img src="{SITE_URL}public/images/rz1.png" alt="通过Email认证" title="通过Email认证" align="absmiddle" width="20" />{else}<img src="{SITE_URL}public/images/rz2.png" alt="未通过Email认证" title="未通过Email认证" align="absmiddle" width="20" />{/if}</a>
{if $strUser['isrenzheng']==1}
<img src="{SITE_URL}public/images/renzheng1.png" width="20" alt="通过人工认证" title="通过人工认证" />
{else}
<img src="{SITE_URL}public/images/renzheng2.png" width="20" alt="未通过人工认证" title="未通过人工认证" />
{/if}</h1>
<div class="text-black-50">
{if $strUser['signed']}{$strUser['signed']}{else}懒的都不写签名{/if}
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mt-2 text-right">
{if $strUser[userid] != $TS_USER[userid]}
{if $strUser[isfollow]}
<a class="btn btn-outline-secondary btn-sm" href="javascript:void('0');" onclick="unfollow('{$strUser['userid']}','{$_SESSION['token']}');">取消关注</a>
{else}
<a class="btn btn-info btn-sm" href="javascript:void('0')" onclick="follow('{$strUser['userid']}','{$_SESSION['token']}');">关注</a>
{/if}
{if $TS_USER}
<a href="{tsUrl('user','message',array('ts'=>'add','touserid'=>$strUser['userid']))}" rel="nofollow" class="btn btn-outline-secondary btn-sm">发消息</a>
{/if}
{/if}
</div>
</div>
</div>
<div class="border-top pt-3 mt-3">
<a class="btn btn-sm {if $ac=='space'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','space',array('id'=>$strUser['userid']))}">关于</a>
<a class="btn btn-sm {if $ac=='topic'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','topic',array('id'=>$strUser['userid']))}">帖子</a>
<a class="btn btn-sm {if $ac=='group'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','group',array('id'=>$strUser['userid']))}">小组</a>
<a class="btn btn-sm {if $ac=='article'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','article',array('id'=>$strUser['userid']))}">文章</a>
<a class="btn btn-sm {if $ac=='followed'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','followed',array('id'=>$strUser['userid']))}">粉丝</a>
<a class="btn btn-sm {if $ac=='follow'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','follow',array('id'=>$strUser['userid']))}">关注</a>
<a class="btn btn-sm {if $ac=='guestbook'}btn-outline-secondary{else}text-secondary{/if}" href="{tsUrl('user','guestbook',array('id'=>$strUser['userid']))}">留言</a>
</div>
</div>
</div>
+75
View File
@@ -0,0 +1,75 @@
{php include pubTemplate("header")}
<!--main-->
<div class="container">
<div class="card">
<div class="card-header">发送短消息</div>
<div class="card-body">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<form id="comm-form" class="form-horizontal" method="POST" action="{SITE_URL}index.php?app=user&ac=message&ts=do">
<div class="form-group">
<label>收件人:</label>
<div >
<div style="padding-top: 7px;">
<img alt="{$strTouser[username]}" class="m_sub_img" src="{$strTouser[face]}" width="16" align="absmiddle" /> {$strTouser['username']}
</div>
</div>
</div>
<div class="form-group">
<label>消息内容:</label>
<div>
<textarea class="form-control" name="content"></textarea>
</div>
</div>
<div class="form-group">
<div>
<input type="hidden" name="touserid" value="{$strTouser[userid]}" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button type="submit" class="btn btn-sm btn-info">点击发送</button>
<a class="btn btn-sm btn-light" href="{tsUrl('user','space',array('id'=>$strTouser['userid']))}">返回</a>
</div>
</div>
</form>
</div>
<div class="col-md-3"></div>
</div>
</div>
</div>
</div>
{php include pubTemplate("footer")}
+208
View File
@@ -0,0 +1,208 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card border-0">
<div class="card-body" style="padding: 30px;">
<ul class="nav nav-tabs mb-4">
{if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold" href="{tsUrl('user','register')}">Email注册</a>
</li>
{/if}
{if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold active" href="{tsUrl('user','phone')}">手机号注册</a>
</li>
{/if}
</ul>
{if $TS_APP[isregister]=='2'}
<p>系统升级中,暂时关闭用户注册!</p>
<p><a href="{SITE_URL}">返回首页</a></p>
{else}
<form id="comm-form" method="POST" action="{SITE_URL}index.php?app=user&ac=phone&ts=do">
{if $TS_SITE['isinvite']=='1'}
<div class="form-group">
<label>邀请码</label>
<input name="invitecode" type="text" class="form-control" placeholder="" check-type="required">
</div>
{/if}
<div class="form-group">
<label>帐号</label>
<input id="myphone" name="email" type="number" class="form-control" placeholder="手机号" check-type="required">
</div>
<div class="form-group">
<label>密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="" check-type="required">
</div>
<div class="form-group">
<label>重复密码:</label>
<input name="repwd" type="password" class="form-control" placeholder="" check-type="required">
</div>
<div class="form-group">
<label>用户名:</label>
<input name="username" type="text" class="form-control" placeholder="" check-type="required">
</div>
<div class="form-group">
<label>验证码:</label>
<div class="d-flex flex-row align-items-center">
<div class="d-flex">
<input id="authcode" name="authcode" type="text" class="form-control" placeholder="" >
</div>
<div class="d-flex ml-1">
<img id="imagecode" src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="cursor:pointer;" />
<a href="javascript:void('0');" onclick="changeImageCode();">点击刷新验证码</a>
</div>
</div>
</div>
<div class="form-group">
<label>手机验证码:</label>
<div style="overflow: hidden;">
<input style="float: left;width:60%;" name="phonecode" type="text" class="form-control" placeholder="" >
<button id="mybtn" type="button" class="btn btn-outline-secondary" style="float: right;">获取验证码</button>
</div>
</div>
<div class="form-group">
<input type="hidden" name="fuserid" value="{$fuserid}" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button id="comm-submit" type="submit" class="btn btn-fat btn-success btn-lg btn-block">注册</button>
</div>
</form>
<div>
{php doAction('user_login_footer')}
</div>
{/if}
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendPhoneCode(1,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
//人机验证
obj.validate();
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
sendPhoneCode(1)
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+160
View File
@@ -0,0 +1,160 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
{if tsIntval($strUser['isverifyphone'])==0 && tsIntval($TS_SITE['isverifyphone'])==1}
<div class="alert alert-info">提示:你必须通过手机号验证才可以正常使用本社区</div>
{/if}
{if $strUser['isverifyphone']==1}
<div class="alert alert-success">
您已经通过手机号验证!现在可以随便点点看看我们的社区!
</div>
{else}
<form id="comm-form" method="post" action="{SITE_URL}index.php?app=user&ac=phone&ts=verifydo">
<div class="form-group">
<label>手机号</label>
<div>
<input id="myphone" type="number" name="phone" class="form-control" value="{if isPhone($strUser['phone'])}{$strUser['phone']}{else}{/if}">
</div>
</div>
<div class="form-group">
<label>图片验证码</label>
<div class="d-flex flex-row align-items-center">
<div class="d-flex"><input id="authcode" type="text" name="authcode" class="form-control" value=""></div>
<div class="d-flex ml-1">
<img id="imagecode" align="absmiddle" src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="cursor:pointer;" />
<a href="javascript:void('0');" onclick="changeImageCode();">点击刷新验证码</a>
</div>
</div>
</div>
<div class="form-group">
<label>手机验证码</label>
<div class="d-flex flex-row">
<div class="d-flex"><input type="text" class="form-control" name="phonecode" value=""></div>
<div class="d-flex ml-1"><button id="mybtn" type="button" class="btn btn-outline-secondary">获取验证码</button></div>
</div>
</div>
<button type="submit" class="btn btn-sm btn-info">点击开始验证</button> <small class="text-danger">(手机号验证通过后下次可以使用手机号登录社区)</small>
</form>
<!--
<hr>
<form method="post" action="{tsUrl('user','phone',array('ts'=>'setphone'))}">
<div class="form-group">
<label>手机号不对吗?更换手机号:</label>
<input type="number" name="phone" class="form-control" placeholder="请输入你要更换的手机号">
</div>
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<input class="btn btn-sm btn-outline-secondary" type="submit" value="提交修改" />
</form>
-->
{/if}
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendPhoneCode(0,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
//人机验证
obj.validate();
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
sendPhoneCode(0)
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+155
View File
@@ -0,0 +1,155 @@
{php include pubTemplate("header")}
<!--main-->
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body" style="padding: 15px 30px 30px;">
<div class="d-flex justify-content-between align-items-center">
<div class="fs24">短信登录</div>
<div><a href="{tsUrl('user','login')}"><i class="bi bi-envelope"></i> 账号密码登录</a></div>
</div>
<hr />
<form id="comm-form" method="POST" action="{SITE_URL}index.php?app=user&ac=plogin&ts=do" role="form">
<div class="form-group">
<label>手机号</label>
<input id="myphone" name="email" type="number" class="form-control" placeholder="手机号">
</div>
<div class="form-group">
<label>图形验证码:</label>
<div class="d-flex flex-row align-items-center">
<div class="d-flex">
<input id="authcode" name="authcode" type="text" class="form-control" placeholder="" >
</div>
<div class="d-flex ml-1">
<img id="imagecode" src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="cursor:pointer;" />
</div>
</div>
</div>
<div class="form-group">
<label>手机验证码:</label>
<div class="d-flex flex-row align-items-center">
<div>
<input name="phonecode" type="text" class="form-control" placeholder="" >
</div>
<div class="ml-1">
<button id="mybtn" type="button" class="btn btn-outline-secondary" style="float: right;">获取验证码</button>
</div>
</div>
</div>
<div class="form-group">
<button id="comm-submit" type="submit" class="btn btn-fat btn-success btn-lg btn-block">登录</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendPhoneCode(2,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
//人机验证
obj.validate();
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var phone = $("#myphone").val();
var authcode = $("#authcode").val();
if(phone && authcode){
sendPhoneCode(2)
}else{
tsNotice('手机号和图形验证码必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+260
View File
@@ -0,0 +1,260 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card border-0">
<div class="card-body" style="padding: 30px;">
{if $strFuser}
<div class="d-flex align-items-center">
<div>
<img width="56" height="56" class="rounded-circle" src="{$strFuser['face']}">
</div>
<div class="ml-2">
<div>您好!我是 <span class=" font-weight-bold">{$strFuser['username']}</span></div>
<div>我正在邀请您加入 <span class=" font-weight-bold">{$TS_SITE['site_title']}</span> ,欢迎来和我一起交流!</div>
</div>
</div>
<hr />
{/if}
<ul class="nav nav-tabs mb-4">
{if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold active" href="{tsUrl('user','register')}">Email邮箱注册</a>
</li>
{/if}
{if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'}
<li class="nav-item">
<a class="nav-link font-weight-bold" href="{tsUrl('user','phone')}">手机号注册</a>
</li>
{/if}
</ul>
{if $TS_APP[isregister]=='2'}
<p>系统升级中,暂时关闭用户注册!</p>
<p><a href="{SITE_URL}">返回首页</a></p>
{else}
<form id="comm-form" method="POST" action="{SITE_URL}index.php?app=user&ac=register&ts=do">
{if $TS_SITE['isinvite']=='1'}
<div class="form-group">
<label>邀请码</label>
<input name="invitecode" type="text" class="form-control" placeholder="" check-type="required">
</div>
{/if}
<div class="form-group">
<label>Email邮箱:</label>
<input id="myemail" name="email" type="email" class="form-control" placeholder="" onkeyup="this.value=this.value.replace(/[, ]/g,'')" check-type="required">
</div>
<div class="form-group">
<label>密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="" check-type="required">
</div>
<div class="form-group">
<label>重复密码:</label>
<input name="repwd" type="password" class="form-control" placeholder="" check-type="required">
</div>
<div class="form-group">
<label>用户名:</label>
<input name="username" type="text" class="form-control" placeholder="" check-type="required">
</div>
<!--人机验证-->
{if $TS_SITE['is_vaptcha']}
<div class="form-group">
<label>人机验证:</label>
<div class="offset-0">
<div id="vaptchaContainer" style="width: 300px;height: 36px;">
<div class="vaptcha-init-main">
<div class="vaptcha-init-loading">
<a href="/" target="_blank">
<img src="https://r.vaptcha.net/public/img/vaptcha-loading.gif" />
</a>
<span class="vaptcha-text">Vaptcha启动中...</span>
</div>
</div>
</div>
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',
mode: 'click',
scene: 0, // 场景值 默认0
container: '#vaptchaContainer',
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
vaptchaObj.render()
vaptchaObj.renderTokenInput('#vaptcha-token')
})
</script>
</div>
<div id="vaptcha-token"></div>
</div>
{/if}
<!--图形验证码-->
{if $TS_SITE['isauthcode']}
<div class="form-group">
<label>验证码:</label>
<div class="d-flex flex-row align-items-start">
<div class="d-flex flex-column">
<input name="authcode" type="text" class="form-control" placeholder="" check-type="required">
</div>
<div class="d-flex ml-1">
<img id="imagecode" align="absmiddle" src="{SITE_URL}index.php?app=pubs&ac=code" onclick="javascript:newgdcode(this,this.src);" title="点击刷新验证码" alt="点击刷新验证码" style="cursor:pointer;" />
<a href="javascript:void('0');" onclick="changeImageCode();">点击刷新验证码</a>
</div>
</div>
</div>
{/if}
<!--Email邮箱验证-->
{if $TS_SITE['isverify']}
<div class="form-group">
<label>Email邮箱验证码:</label>
<div style="overflow: hidden;">
<input style="float: left;width:60%;" name="emailcode" type="text" class="form-control" placeholder="" >
<button id="mybtn" type="button" class="btn btn-outline-secondary" style="float: right;">获取验证码</button>
</div>
<div class="fs12 text-danger">获取验证码后请登录邮箱查看验证码</div>
</div>
{/if}
<div class="form-group">
<input type="hidden" name="fuserid" value="{$fuserid}" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button id="comm-submit" type="submit" class="btn btn-fat btn-success btn-lg btn-block">注册</button>
</div>
</form>
<div class="lh30">
{php doAction('user_login_footer')}
</div>
{/if}
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
<!--{if $TS_SITE['is_vaptcha']}-->
<script src="https://v-cn.vaptcha.com/v3.js"></script>
<script>
vaptcha({
vid: '{$TS_SITE[vaptcha_vid]}',// 验证单元id
mode: 'invisible',// 显示类型 隐藏式
scene: 0,// 场景值 默认0
area: 'auto' //验证节点区域,默认 auto,可选值 auto,sea,na,cn
}).then(function (vaptchaObj) {
obj = vaptchaObj; //将VAPTCHA验证实例保存到局部变量中
vaptchaObj.listen("pass", function () {
// 验证成功进行后续操作
serverToken = vaptchaObj.getServerToken()
sendEmailCode(1,serverToken.token,serverToken.server)
vaptchaObj.reset(); //重置验证码
});
//关闭验证弹窗时触发
vaptchaObj.listen("close", function () {
//验证弹窗关闭触发
});
})
$("#mybtn").on("click", function () {
var email = $("#myemail").val();
if(email){
//人机验证
obj.validate();
}else{
tsNotice('Email邮箱必须填写!');
}
});
</script>
<!--{else}-->
<script>
$("#mybtn").on("click", function () {
var email = $("#myemail").val();
if(email){
sendEmailCode(1)
}else{
tsNotice('Email邮箱必须填写!');
}
});
</script>
<!--{/if}-->
{php include pubTemplate("footer")}
+80
View File
@@ -0,0 +1,80 @@
{php include pubTemplate("header")}
<!--main-->
<div class="midder">
<div class="mc">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body" style="padding: 15px 30px 30px;">
<div class="page-header">
<h1>重设密码</h1>
</div>
<form id="comm-form" method="POST" action="{SITE_URL}index.php?app=user&ac=resetpwd&ts=do" role="form">
<div class="form-group">
<label>Email</label>
<input name="email" type="email" class="form-control" value="{$email}" disabled>
</div>
<div class="form-group">
<label>新密码:</label>
<input name="pwd" type="password" class="form-control" value="">
</div>
<div class="form-group">
<label>重复新密码:</label>
<input name="repwd" type="password" class="form-control" value="">
</div>
<div class="form-group">
<input type="hidden" name="email" value="{$email}" />
<input type="hidden" name="resetpwd" value="{$resetpwd}" />
<button type="submit" class="btn btn-fat btn-success">提交</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
</div>
{php include pubTemplate("footer")}
+39
View File
@@ -0,0 +1,39 @@
{php include pubTemplate("header")}
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{SITE_URL}">首页</a></li>
<li class="breadcrumb-item"><a href="{tsUrl('user')}">用户</a></li>
<li class="breadcrumb-item active" aria-current="page">角色</li>
</ol>
</nav>
<div class="card">
<div class="card-body">
<table class="table">
<thead class="thead-light">
<tr><th>角色名称</th><th>开始积分</th><th>结束积分</th><th>权限</th></tr>
</thead>
<tbody>
{loop $arrRole $key $item}
<tr><td>{$item['rolename']}</td><td>{$item['score_start']}</td><td>{$item['score_end']}</td><td>即将开放</td></tr>
{/loop}
</tbody>
</table>
</div>
</div>
</div>
{php include pubTemplate("footer")}
+9
View File
@@ -0,0 +1,9 @@
{if $strSign}
<div class="t1">已连续签到</div>
<div class="tianshu">
<div class="tian">{$strSign['num']}<small></small></div>
</div>
<div class="t2">明日签到可领{$strScore['score']}积分</div>
<div class="t3">连续签到有更多惊喜哦</div>
{/if}
+50
View File
@@ -0,0 +1,50 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<dl class="row">
<dt class="col-sm-2">UID</dt><dd class="col-sm-9 text-black-50">{$strUser['userid']}</dd>
<dt class="col-sm-2">性别:</dt><dd class="col-sm-9 text-black-50">{$strUser['sex']}</dd>
<dt class="col-sm-2">自我介绍:</dt><dd class="col-sm-9 text-black-50">{if $strUser['about']}{$strUser['about']}{else}还没有介绍{/if}</dd>
<dt class="col-sm-2">关注:</dt><dd class="col-sm-9 text-black-50"><a href="{tsUrl('user','follow',array('id'=>$strUser['userid']))}">{$strUser['count_follow']} 人</a></dd>
<dt class="col-sm-2">粉丝:</dt><dd class="col-sm-9 text-black-50"><a href="{tsUrl('user','followed',array('id'=>$strUser['userid']))}">{$strUser['count_followed']} 人</a></dd>
<dt class="col-sm-2">积分:</dt><dd class="col-sm-9 text-black-50">{$strUser['count_score']}</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="content-language" content="zh-CN" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="applicable-device" content="pc,mobile">
<meta name="robots" content="all" />
<meta name="save" content="history" />
<meta name="author" content="{$GLOBALS['TS_CF'][info][email]}" />
<meta name="Copyright" content="{$GLOBALS['TS_CF'][info][name]}" />
<title>系统管理登录</title>
<link rel="shortcut icon" href="{SITE_URL}favicon.ico" />
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="{SITE_URL}public/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="{SITE_URL}theme/sample/base.css" />
<link rel="stylesheet" type="text/css" href="{SITE_URL}app/{$GLOBALS['TS_URL']['app']}/skin/style.css">
<script>var siteUrl = '{SITE_URL}'; //</script>
<script src="{SITE_URL}public/js/jquery.min.js" type="text/javascript"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="{SITE_URL}public/bootstrap/js/bootstrap.min.js"></script>
<!--bootstrap 前端验证-->
<script type="text/javascript" src="{SITE_URL}public/js/bootstrap3-validation.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<div class="text-center mt-5">
<a target="_blank" href="https://www.thinksaas.cn/"><img src="{SITE_URL}public/images/thinksaas2012.png" width="250" alt="ThinkSAAS后台登录" /></a>
</div>
<div class="h3 fw300 text-center mt-2 mb-3">管理后台登录</div>
<div class="card border-0 shadow-lg">
<div class="card-body">
<form id="comm-form" method="POST" action="{SITE_URL}index.php?app=user&ac=login&ts=do" role="form">
<div class="form-group">
<label>Email</label>
<input name="email" type="email" class="form-control" placeholder="Email" check-type="mail">
</div>
<div class="form-group">
<label>密码:</label>
<input name="pwd" type="password" class="form-control" placeholder="Password" check-type="required">
</div>
<div class="form-group">
<input type="hidden" name="cktime" value="31536000">
<input type="hidden" name="ad" value="1" />
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<button id="comm-submit" type="submit" class="btn btn-block btn-info">点击登录后台</button>
<div class="mt-2"><a class="btn btn-block btn-outline-secondary" href="{SITE_URL}">返回首页</a></div>
<div class="fs12 c9 text-center mt-5">
Copyright (C) {$TS_CF['info']['year']}-{php echo date('Y')} <a class="c9" href="{$TS_CF[info][url]}">{$TS_CF['info']['name']} {$TS_CF['info']['version']}</a>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-4"></div>
</div>
</div>
<!--弹出窗口-->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">关闭</span></button>
<h4 class="modal-title" id="myModalLabel">提示</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<script src="{SITE_URL}public/js/common.js" type="text/javascript"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?5964cd4b8810fcc73c98618d475213f6";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>
+45
View File
@@ -0,0 +1,45 @@
{php include pubTemplate("header")}
<div class="container">
{template menu}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<div class="commlist">
<ul>
{loop $arrTopic $key $item}
<li>
<a href="{tsUrl('topic','show',array('id'=>$item['topicid']))}">{php echo tsTitle($item['title'])}</a> <i>{$item['count_comment']}</i>
</li>
{/loop}
</ul>
</div>
<div class="clear"></div>
<div class="page">{$pageUrl}</div>
</div>
</div>
</div>
<div class="col-md-4">
{template userinfo}
</div>
</div>
</div>
{php include pubTemplate("footer")}
+2
View File
@@ -0,0 +1,2 @@
<!--广告位-->
{php doAction('gobad','300')}
+64
View File
@@ -0,0 +1,64 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
{if tsIntval($strUser['isverify'])==0 && tsIntval($TS_SITE['isverify'])==1}
<div class="alert alert-info">提示:你必须通过Email验证才可以正常使用本社区</div>
{/if}
{if $strUser['isverify']==1}
<div class="alert alert-success">
您已经通过Email验证!现在可以随便点点看看我们的社区!
</div>
{else}
<form method="post" action="{tsUrl('user','verify',array('ts'=>'setemail'))}">
<div class="form-group">
<label>验证Email</label>
<input type="email" class="form-control" disabled value="{$strUser['email']}">
</div>
<a class="btn btn-sm btn-info" href="{tsUrl('user','verify',array('ts'=>'post','token'=>$_SESSION['token']))}">点击发送验证</a>
<hr />
<div class="form-group">
<label>Email不对吗?更换帐号:</label>
<input type="email" name="email" class="form-control" >
</div>
<input type="hidden" name="token" value="{$_SESSION['token']}" />
<input class="btn btn-sm btn-outline-secondary" type="submit" value="提交修改" />
</form>
{/if}
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
{php include pubTemplate("footer")}
+75
View File
@@ -0,0 +1,75 @@
{php include pubTemplate("header")}
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
{if $strUser['face']=='' && tsIntval($TS_SITE['isface'])==1}
<div class="alert alert-info">提示:你必须上传头像才可以正常使用本社区</div>
{/if}
{if $strUser['path']}
<div class="alert alert-success">
您已经上传头像!现在可以随便点点看看我们的社区!
</div>
{else}
<form method="post" action="{tsUrl('user','verify',array('ts'=>'facedo'))}" enctype="multipart/form-data">
<div class="form-group">
<label>上传头像:</label>
<p><img class="rounded" alt="{$strUser['username']}" src="{$strUser['face']}" width="120" /></p>
</div>
<div class="form-group">
<label>选择图片:</label>
<div>
<input type="file" name="picfile" />
</div>
<div class="c9 fs12 mt-2">提示:请选择1M以内的头像图片</div>
</div>
<div class="form-group">
<button class="btn btn-sm btn-info" type="submit">提交修改</button>
</div>
</form>
{/if}
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
{php include pubTemplate("footer")}
View File
+9
View File
@@ -0,0 +1,9 @@
/*显示隐藏回复*/
function reguest(userid,reid,username)
{
$("#reguest").toggle('fast');
$("#reguest textarea").val('@'+username+'#');
$("#reguest #touserid").val(userid);
$("#reguest #reid").val(reid);
$("#reguest textarea").focus();
}
+486
View File
@@ -0,0 +1,486 @@
.verify_email{width:500px;margin:0 auto;}
.verify_email h3{font-weight:bold;}
.verify_face{width:500px;margin:0 auto;}
.verify_face h3{font-weight:bold;}
.invitecode{width:600px;margin:0 auto;}
.invitecode ul{}
.invitecode ul li{float:left;width:300px;font-size:14px;padding:10px 0;}
/**框架CSS**/
.uinput{width:200px;padding: 3px 0 3px 0;font-size: 14px;}
.utext{width:300px;height:50;border-color: #999999 #E1E1E1 #E1E1E1 #999999;border-style: solid;border-width: 1px; padding: 3px 0 3px 0;font-size: 14px;}
.utable{}
.utable th{text-align:right;height:40px;}
.utable td{}
.blockquote {
line-height: 1.3;
margin: 0 0 10px;
padding: 5px 8px;
}
/*table olt*/
.olt {
margin-bottom: 3px;
padding: 0;
width: 100%;
border: medium none;
border-collapse: collapse;
margin: 0;
border-spacing: 0;
}
.olt td {
border-bottom: 1px dashed #DDDDDD;
padding: 3px 3px 3px 0;
}
/*右侧会员列表*/
.obu {
display: inline;
float: left;
margin: 0 0 10px;
width: 70px;
}
.obu dt {
height: 50px;
line-height: 16px;
margin: 0;
overflow: hidden;
text-align: center;
}
.obu dd {
margin: 0;
height: 30px;
overflow: hidden;
text-align: center;
}
.pl {
color: #666666;
font: 12px/150% Arial;
padding:10px 0;
}
.pl2 {
color: #666666;
font: 14px/150% Arial;
}
.mr5 {
margin-right: 5px;
}
.color_gray, .color-gray {
color: #666666;
}
.fright {
float: right;
}
/*邀请 by QiuJun*/
.invites{}
.invites h2{font-size:14px;font-weight:bold;margin:20px 0 20px 0;color:#555555}
.invites p{line-height:25px;color:#999999;margin:0;}
/*链接按钮*/
.subab{
background: #66873E;
color: #FFFFFF;
cursor: pointer;
padding: 10px 20px;
font-size:16px;
}
/*table olt*/
.olt {
margin-bottom: 3px;
padding: 0;
width: 100%;
border: medium none;
border-collapse: collapse;
margin: 0;
border-spacing: 0;
}
.olt td {
border-bottom: 1px dashed #DDDDDD;
padding: 3px 3px 3px 0;
}
/*2011-06-20*/
/*个人主页左侧*/
#db-usr-profile {
height: 58px;
left: 0;
margin-bottom: 2em;
position: relative;
top: 0;
width: 100%;
}
#db-usr-profile .pic {
float: left;
margin-right: 12px;
}
#db-usr-profile .info {
float: left;
padding-top: 2px;
}
#db-usr-profile h1 {
padding: 0 0 4px;
}
#db-usr-profile .info ul li {
display: inline;
margin-right: 1em;
}
#review {
margin-bottom: 27px;
}
/*个人主页右侧*/
#profile .userface {
float: left;
margin: 1px 10px 8px 0;
}
fieldset, img {
border: 0 none;
}
.user-info {
color: #666666;
}
.user-opt {
clear: both;
padding: 8px 0;
}
.user-group {
color: #666666;
display: none;
margin: 0 0 10px;
}
.user-cs {
background: url("icon-ok.png") no-repeat scroll left center transparent;
display: inline-block;
padding: 0 0 0 15px;
}
.user-rs {
margin: 0 0 0 15px;
}
.user-group-arrow {
background: url("icon-arrow-down-b.png") no-repeat scroll center center transparent;
border: 1px solid #FFFFFF;
cursor: pointer;
display: inline-block;
height: 17px;
margin: 0 0 0 -2px;
position: relative;
top: 5px;
width: 17px;
}
.user-opt .user-group-arrow {
border-color: #FFF6EE;
}
.a-btn, .a-btn-add, .a-btn-add-light, .a-btn-opt {
border-radius: 3px 3px 3px 3px;
display: inline-block;
height: 20px;
line-height: 20px;
overflow: hidden;
}
.a-btn:link, .a-btn:active, .a-btn:hover, .a-btn:visited, .a-btn-opt:link, .a-btn-opt:active, .a-btn-opt:hover, .a-btn-opt:visited {
background: none repeat scroll 0 0 #FFF3E7;
border: 1px solid #E7D7CA;
color: #797979;
outline: 0 none;
padding: 0 10px;
}
.more-opt {
display: inline-block;
}
#divac {
clear: both;
}
.sep-line {
border-bottom: 1px solid #F5E9DB;
clear: both;
font-size: 0;
height: 0;
margin: 5px;
overflow: hidden;
}
.user-intro {
color: #666666;
overflow: hidden;
word-wrap: break-word;
}
.mbt {
clear: both;
margin: 0;
padding: 0;
}
.mbtrmini {
background: url("listdot.gif") no-repeat scroll 0 8px transparent;
border-bottom: 1px dashed #DDDDDD;
padding: 4px 0 4px 12px;
}
.quote {
background: url("quotel.gif") no-repeat scroll left 4px transparent;
margin: 8px 0 0 26px;
overflow: hidden;
padding: 0 24px 5px 15px;
width: auto;
word-wrap: break-word;
}
.quote span.inq {
background: url("quoter.gif") no-repeat scroll right bottom transparent;
color: #333333;
display: inline-block;
padding-right: 15px;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
#event {
margin-bottom: 10px;
}
.evt_short {
float: left;
margin-bottom: 10px;
width: 100%;
}
.actfromfri {
line-height: 1.6em;
padding: 0.6em 0;
}
.evt_short li {
line-height: 1.6em;
}
#group {
width: 100%;
}
/*小组*/
.ob {
float: left;
margin: 0 0 10px;
text-align: center;
width: 70px;
}
.ob dt {
height: 50px;
margin: 0;
overflow: hidden;
text-align: center;
}
.ob dd {
height: 30px;
margin: 0;
overflow: hidden;
text-align: center;
}
.ob span {
white-space: nowrap;
}
.mbtr {
border-bottom: 1px solid #EEEEEE;
margin: 5px 0;
min-height: 55px;
overflow: hidden;
padding: 5px 0;
}
.bs li {
border-bottom: 1px dashed #DDDDDD;
margin: 0;
overflow: hidden;
padding: 4px 0;
}
.spacetopic{}
.spacetopic table{}
.spacetopic tr td{border-bottom:dashed 1px #DDDDDD;padding:5px 0;}
/*动态*/
.mbtl {
float: left;
margin: 8px 7px 0 0;
padding: 0;
width: 55px;
}
.mbtr {
border-bottom: 1px solid #EEEEEE;
margin: 5px 0;
min-height: 55px;
overflow: hidden;
padding: 5px 0;
}
.pl {
color: #666666;
line-height: 1.5;
}
.broadsmr {
color: #999999;
padding: 5px 24px;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
.quote {
background: url("http://t.douban.com/pics/quotel.gif") no-repeat scroll left 4px transparent;
margin: 8px 0 0 26px;
overflow: hidden;
padding: 0 24px 5px 15px;
width: auto;
word-wrap: break-word;
}
.quote .inq {
background: url("http://t.douban.com/pics/quoter.gif") no-repeat scroll right bottom transparent;
color: #333333;
display: inline-block;
padding-right: 15px;
}
.broadimg {
border: 1px solid #DDDDDD;
float: right;
margin-left: 14px;
}
.clearfix:after {
clear: both;
content: ".";
display: block;
height: 0;
visibility: hidden;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
.timeline-album {
float: left;
margin: 8px 12px 8px 0;
}
/*留言*/
.guest{}
.guest img{float:left;width:50px;}
.guest form{margin-left:60px;}
.glist{}
.glist ul, .glist ul li{list-style: none;margin:0;padding: 0;}
.glist ul{}
.glist ul li{border-bottom: 1px solid #EEEEEE;overflow: hidden;padding: 10px 0;}
.glist ul li img{float:left;}
.glist ul li .content{margin-left:60px;line-height:25px;}
.glist ul li .content p{padding:0px;margin:0;}
/*小组列表*/
.sub-item{
border-bottom: 1px dashed #AAAAAA;
float: left;
margin: 0 2px 15px 0;
overflow: hidden;
width: 49%;
padding-bottom: 15px;
}
.sub-item .pic {
float: left;
display: table-cell;
vertical-align: top;
width: 48px;
overflow: hidden;
}
.sub-item .info {
color: #666666;
vertical-align: top;
word-wrap: break-word;
line-height:20px;
margin-left:60px;
}
.sub-item .pic img {
height: 48px;
width: 48px;
}
.sub-item p {
margin: 0;
height:60px;;
width:220px;
overflow:hidden;
}
/*帖子列表*/
.topic{}
.topic li{line-height:30px;}
/*排行榜页面*/
.top10{}
.top10 dl{overflow: hidden;}
.top10 dl dd{margin-bottom:15px;margin-left: 0;}
.top10 dl dd .title{background:none repeat scroll 0 0 #F5F5F5;border:1px solid #EEEEEE;margin:0 8px;padding:10px;position:relative;}
.top10 dl dd .title span{float:right;color:#999999;position:absolute;right:10px;}
.top10 dl dd ul, .top10 dl dd ul li{list-style: none;padding:0;margin:0;}
.top10 dl dd ul{border-top:1px solid #F5F5F5;margin:0 8px;background:#FFFFFF;}
.top10 dl dd ul li{border-color:#EEEEEE;border-style:solid;border-width:0 1px 1px;margin-bottom:0;padding:10px;clear:both;line-height:20px;word-wrap:break-word;overflow:hidden;}
.top10 .avatar {float:left;margin-right:10px;}
.top10 .avatar img {height:36px;width:36px;}
.top10 li em {color:#999999;float:right;margin-left:8px;}
.top10 li span {float:left;font-size:10px;height:14px;line-height:14px;margin:4px 8px 0 0;text-align:center;width:16px;}
.top10 li p{height:48px;margin:0;padding:0;}
/*注册、登陆表格*/
.subform{}
.subform th{font-size:14px;}
.subform input[type="text"], .subform input[type="email"], .subform input[type="password"]{height:30px;line-height:30px;font-size:14px;width:200px;}
.user_space_userinfo{overflow: hidden;}
.user_space_userinfo .photo{width:90px;float:left;}
.user_space_userinfo .info{margin-left:100px;}
.user_space_userinfo .info .sex{}
.user_space_userinfo .info .city{}
.user_space_userinfo .info .about{}
.user_space_right_follow{overflow: hidden}
.user_space_right_follow ul, .user_space_right_follow ul li{list-style: none;margin:0;padding:0;}
.user_space_right_follow ul{}
.user_space_right_follow ul .br{border-right:solid 1px #ddd;}
.user_space_right_follow ul li{float:left;padding:10px 20px;text-align:center}
+486
View File
@@ -0,0 +1,486 @@
.verify_email{width:500px;margin:0 auto;}
.verify_email h3{font-weight:bold;}
.verify_face{width:500px;margin:0 auto;}
.verify_face h3{font-weight:bold;}
.invitecode{width:600px;margin:0 auto;}
.invitecode ul{}
.invitecode ul li{float:left;width:300px;font-size:14px;padding:10px 0;}
/**框架CSS**/
.uinput{width:200px;padding: 3px 0 3px 0;font-size: 14px;}
.utext{width:300px;height:50;border-color: #999999 #E1E1E1 #E1E1E1 #999999;border-style: solid;border-width: 1px; padding: 3px 0 3px 0;font-size: 14px;}
.utable{}
.utable th{text-align:right;height:40px;}
.utable td{}
.blockquote {
line-height: 1.3;
margin: 0 0 10px;
padding: 5px 8px;
}
/*table olt*/
.olt {
margin-bottom: 3px;
padding: 0;
width: 100%;
border: medium none;
border-collapse: collapse;
margin: 0;
border-spacing: 0;
}
.olt td {
border-bottom: 1px dashed #DDDDDD;
padding: 3px 3px 3px 0;
}
/*右侧会员列表*/
.obu {
display: inline;
float: left;
margin: 0 0 10px;
width: 70px;
}
.obu dt {
height: 50px;
line-height: 16px;
margin: 0;
overflow: hidden;
text-align: center;
}
.obu dd {
margin: 0;
height: 30px;
overflow: hidden;
text-align: center;
}
.pl {
color: #666666;
font: 12px/150% Arial;
padding:10px 0;
}
.pl2 {
color: #666666;
font: 14px/150% Arial;
}
.mr5 {
margin-right: 5px;
}
.color_gray, .color-gray {
color: #666666;
}
.fright {
float: right;
}
/*邀请 by QiuJun*/
.invites{}
.invites h2{font-size:14px;font-weight:bold;margin:20px 0 20px 0;color:#555555}
.invites p{line-height:25px;color:#999999;margin:0;}
/*链接按钮*/
.subab{
background: #66873E;
color: #FFFFFF;
cursor: pointer;
padding: 10px 20px;
font-size:16px;
}
/*table olt*/
.olt {
margin-bottom: 3px;
padding: 0;
width: 100%;
border: medium none;
border-collapse: collapse;
margin: 0;
border-spacing: 0;
}
.olt td {
border-bottom: 1px dashed #DDDDDD;
padding: 3px 3px 3px 0;
}
/*2011-06-20*/
/*个人主页左侧*/
#db-usr-profile {
height: 58px;
left: 0;
margin-bottom: 2em;
position: relative;
top: 0;
width: 100%;
}
#db-usr-profile .pic {
float: left;
margin-right: 12px;
}
#db-usr-profile .info {
float: left;
padding-top: 2px;
}
#db-usr-profile h1 {
padding: 0 0 4px;
}
#db-usr-profile .info ul li {
display: inline;
margin-right: 1em;
}
#review {
margin-bottom: 27px;
}
/*个人主页右侧*/
#profile .userface {
float: left;
margin: 1px 10px 8px 0;
}
fieldset, img {
border: 0 none;
}
.user-info {
color: #666666;
}
.user-opt {
clear: both;
padding: 8px 0;
}
.user-group {
color: #666666;
display: none;
margin: 0 0 10px;
}
.user-cs {
background: url("icon-ok.png") no-repeat scroll left center transparent;
display: inline-block;
padding: 0 0 0 15px;
}
.user-rs {
margin: 0 0 0 15px;
}
.user-group-arrow {
background: url("icon-arrow-down-b.png") no-repeat scroll center center transparent;
border: 1px solid #FFFFFF;
cursor: pointer;
display: inline-block;
height: 17px;
margin: 0 0 0 -2px;
position: relative;
top: 5px;
width: 17px;
}
.user-opt .user-group-arrow {
border-color: #FFF6EE;
}
.a-btn, .a-btn-add, .a-btn-add-light, .a-btn-opt {
border-radius: 3px 3px 3px 3px;
display: inline-block;
height: 20px;
line-height: 20px;
overflow: hidden;
}
.a-btn:link, .a-btn:active, .a-btn:hover, .a-btn:visited, .a-btn-opt:link, .a-btn-opt:active, .a-btn-opt:hover, .a-btn-opt:visited {
background: none repeat scroll 0 0 #FFF3E7;
border: 1px solid #E7D7CA;
color: #797979;
outline: 0 none;
padding: 0 10px;
}
.more-opt {
display: inline-block;
}
#divac {
clear: both;
}
.sep-line {
border-bottom: 1px solid #F5E9DB;
clear: both;
font-size: 0;
height: 0;
margin: 5px;
overflow: hidden;
}
.user-intro {
color: #666666;
overflow: hidden;
word-wrap: break-word;
}
.mbt {
clear: both;
margin: 0;
padding: 0;
}
.mbtrmini {
background: url("listdot.gif") no-repeat scroll 0 8px transparent;
border-bottom: 1px dashed #DDDDDD;
padding: 4px 0 4px 12px;
}
.quote {
background: url("quotel.gif") no-repeat scroll left 4px transparent;
margin: 8px 0 0 26px;
overflow: hidden;
padding: 0 24px 5px 15px;
width: auto;
word-wrap: break-word;
}
.quote span.inq {
background: url("quoter.gif") no-repeat scroll right bottom transparent;
color: #333333;
display: inline-block;
padding-right: 15px;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
#event {
margin-bottom: 10px;
}
.evt_short {
float: left;
margin-bottom: 10px;
width: 100%;
}
.actfromfri {
line-height: 1.6em;
padding: 0.6em 0;
}
.evt_short li {
line-height: 1.6em;
}
#group {
width: 100%;
}
/*小组*/
.ob {
float: left;
margin: 0 0 10px;
text-align: center;
width: 70px;
}
.ob dt {
height: 50px;
margin: 0;
overflow: hidden;
text-align: center;
}
.ob dd {
height: 30px;
margin: 0;
overflow: hidden;
text-align: center;
}
.ob span {
white-space: nowrap;
}
.mbtr {
border-bottom: 1px solid #EEEEEE;
margin: 5px 0;
min-height: 55px;
overflow: hidden;
padding: 5px 0;
}
.bs li {
border-bottom: 1px dashed #DDDDDD;
margin: 0;
overflow: hidden;
padding: 4px 0;
}
.spacetopic{}
.spacetopic table{}
.spacetopic tr td{border-bottom:dashed 1px #DDDDDD;padding:5px 0;}
/*动态*/
.mbtl {
float: left;
margin: 8px 7px 0 0;
padding: 0;
width: 55px;
}
.mbtr {
border-bottom: 1px solid #EEEEEE;
margin: 5px 0;
min-height: 55px;
overflow: hidden;
padding: 5px 0;
}
.pl {
color: #666666;
line-height: 1.5;
}
.broadsmr {
color: #999999;
padding: 5px 24px;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
.quote {
background: url("http://t.douban.com/pics/quotel.gif") no-repeat scroll left 4px transparent;
margin: 8px 0 0 26px;
overflow: hidden;
padding: 0 24px 5px 15px;
width: auto;
word-wrap: break-word;
}
.quote .inq {
background: url("http://t.douban.com/pics/quoter.gif") no-repeat scroll right bottom transparent;
color: #333333;
display: inline-block;
padding-right: 15px;
}
.broadimg {
border: 1px solid #DDDDDD;
float: right;
margin-left: 14px;
}
.clearfix:after {
clear: both;
content: ".";
display: block;
height: 0;
visibility: hidden;
}
.indentrec {
color: #333333;
line-height: 1.6em;
margin-left: 24px;
}
.timeline-album {
float: left;
margin: 8px 12px 8px 0;
}
/*留言*/
.guest{}
.guest img{float:left;width:50px;}
.guest form{margin-left:60px;}
.glist{}
.glist ul, .glist ul li{list-style: none;margin:0;padding: 0;}
.glist ul{}
.glist ul li{border-bottom: 1px solid #EEEEEE;overflow: hidden;padding: 10px 0;}
.glist ul li img{float:left;}
.glist ul li .content{margin-left:60px;line-height:25px;}
.glist ul li .content p{padding:0px;margin:0;}
/*小组列表*/
.sub-item{
border-bottom: 1px dashed #AAAAAA;
float: left;
margin: 0 2px 15px 0;
overflow: hidden;
width: 49%;
padding-bottom: 15px;
}
.sub-item .pic {
float: left;
display: table-cell;
vertical-align: top;
width: 48px;
overflow: hidden;
}
.sub-item .info {
color: #666666;
vertical-align: top;
word-wrap: break-word;
line-height:20px;
margin-left:60px;
}
.sub-item .pic img {
height: 48px;
width: 48px;
}
.sub-item p {
margin: 0;
height:60px;;
width:220px;
overflow:hidden;
}
/*帖子列表*/
.topic{}
.topic li{line-height:30px;}
/*排行榜页面*/
.top10{}
.top10 dl{overflow: hidden;}
.top10 dl dd{margin-bottom:15px;margin-left: 0;}
.top10 dl dd .title{background:none repeat scroll 0 0 #F5F5F5;border:1px solid #EEEEEE;margin:0 8px;padding:10px;position:relative;}
.top10 dl dd .title span{float:right;color:#999999;position:absolute;right:10px;}
.top10 dl dd ul, .top10 dl dd ul li{list-style: none;padding:0;margin:0;}
.top10 dl dd ul{border-top:1px solid #F5F5F5;margin:0 8px;background:#FFFFFF;}
.top10 dl dd ul li{border-color:#EEEEEE;border-style:solid;border-width:0 1px 1px;margin-bottom:0;padding:10px;clear:both;line-height:20px;word-wrap:break-word;overflow:hidden;}
.top10 .avatar {float:left;margin-right:10px;}
.top10 .avatar img {height:36px;width:36px;}
.top10 li em {color:#999999;float:right;margin-left:8px;}
.top10 li span {float:left;font-size:10px;height:14px;line-height:14px;margin:4px 8px 0 0;text-align:center;width:16px;}
.top10 li p{height:48px;margin:0;padding:0;}
/*注册、登陆表格*/
.subform{}
.subform th{font-size:14px;}
.subform input[type="text"], .subform input[type="email"], .subform input[type="password"]{height:30px;line-height:30px;font-size:14px;width:200px;}
.user_space_userinfo{overflow: hidden;}
.user_space_userinfo .photo{width:90px;float:left;}
.user_space_userinfo .info{margin-left:100px;}
.user_space_userinfo .info .sex{}
.user_space_userinfo .info .city{}
.user_space_userinfo .info .about{}
.user_space_right_follow{overflow: hidden}
.user_space_right_follow ul, .user_space_right_follow ul li{list-style: none;margin:0;padding:0;}
.user_space_right_follow ul{}
.user_space_right_follow ul .br{border-right:solid 1px #ddd;}
.user_space_right_follow ul li{float:left;padding:10px 20px;text-align:center}