|
@@ -0,0 +1,359 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace App\Http\Controllers;
|
|
|
|
+
|
|
|
|
+use App\Jobs\SendEmail;
|
|
|
|
+use App\Models\Article;
|
|
|
|
+use App\Models\Authentication;
|
|
|
|
+use App\Models\Category;
|
|
|
|
+use App\Models\EmailToken;
|
|
|
|
+use App\Models\Exchange;
|
|
|
|
+use App\Models\FriendshipLink;
|
|
|
|
+use App\Models\Goods;
|
|
|
|
+use App\Models\Notice;
|
|
|
|
+use App\Models\Question;
|
|
|
|
+use App\Models\Recommendation;
|
|
|
|
+use App\Models\Tag;
|
|
|
|
+use App\Models\Taggable;
|
|
|
|
+use App\Models\User;
|
|
|
|
+use App\Models\UserData;
|
|
|
|
+use App\Services\CaptchaService;
|
|
|
|
+use App\Services\MailService;
|
|
|
|
+use App\Services\SmsService;
|
|
|
|
+use Carbon\Carbon;
|
|
|
|
+use Illuminate\Contracts\Auth\Guard;
|
|
|
|
+use Illuminate\Http\Request;
|
|
|
|
+
|
|
|
|
+use Illuminate\Support\Facades\Cache;
|
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
+use App\Repositories\UserRepository;
|
|
|
|
+use Illuminate\Support\Facades\Hash;
|
|
|
|
+
|
|
|
|
+class IndexController extends Controller
|
|
|
|
+{
|
|
|
|
+ /**
|
|
|
|
+ * Display a listing of the resource.
|
|
|
|
+ *
|
|
|
|
+ * @return Response
|
|
|
|
+ */
|
|
|
|
+ protected $auth;
|
|
|
|
+
|
|
|
|
+ protected $userRepository;
|
|
|
|
+ protected $captchaService;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public function __construct(Guard $auth,UserRepository $userRepository,CaptchaService $captchaService,User $user, UserData $userData){
|
|
|
|
+ $this->auth = $auth;
|
|
|
|
+ $this->userRepository = $userRepository;
|
|
|
|
+ $this->captchaService = $captchaService;
|
|
|
|
+ $this->user = $user;
|
|
|
|
+ $this->userData = $userData;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+// public function __construct(User $user, UserData $userData)
|
|
|
|
+// {
|
|
|
|
+// $this->user = $user;
|
|
|
|
+// $this->userData = $userData;
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+ public function index()
|
|
|
|
+ {
|
|
|
|
+ if(isset($_COOKIE['token']) && Auth()->guest()==true){
|
|
|
|
+ $_COOKIE['token'] = base64_decode($_COOKIE['token']);
|
|
|
|
+ $data['email'] = explode(',',$_COOKIE['token'])[0];
|
|
|
|
+ $data['_token'] = csrf_token();
|
|
|
|
+ $data['password_confirmation'] = explode(',',$_COOKIE['token'])[1];
|
|
|
|
+ $data['password'] = explode(',',$_COOKIE['token'])[1];
|
|
|
|
+ $data['visit_ip'] = explode(',',$_COOKIE['token'])[2];
|
|
|
|
+ $data['name'] = DB::select('select * from admins where staff_num = "'.$data['email'].'"')[0]->name;
|
|
|
|
+ $user = DB::table('users')->where('email','=',$data['email'])->first();
|
|
|
|
+ if($user == null){
|
|
|
|
+ $this->zhuce($data);
|
|
|
|
+ }else{
|
|
|
|
+ $this->denglu($data);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /*热门话题*/
|
|
|
|
+ $hotTags = Taggable::globalHotTags();
|
|
|
|
+
|
|
|
|
+ /*推荐内容*/
|
|
|
|
+ $recommendItems= Cache::remember('recommend_items',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Recommendation::where('status','>',0)->orderBy('sort','asc')->orderBy('updated_at','desc')->take(11)->get();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*热门专家*/
|
|
|
|
+ $hotExperts = Cache::remember('index_hot_experts',Setting()->get('website_cache_time',1),function(){
|
|
|
|
+ return Authentication::hottest(8);
|
|
|
|
+ });
|
|
|
|
+ $hotUsers = Cache::remember('index_hot_users',30,function() {
|
|
|
|
+ return UserData::hottest(20);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*热门问题*/
|
|
|
|
+ $newestQuestions = Cache::remember('index_newest_questions',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Question::newest(0,12);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*悬赏问题*/
|
|
|
|
+ $rewardQuestions = Cache::remember('index_reward_questions',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Question::reward(0,12);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*热门文章*/
|
|
|
|
+ $hotArticles = Cache::remember('index_hot_articles',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Article::hottest(0,12);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*最新文章*/
|
|
|
|
+ $newestArticles = Cache::remember('index_newest_articles',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Article::newest(0,12);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*最新公告*/
|
|
|
|
+ $newestNotices = Cache::remember('newest_notices',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Notice::where('status','>','0')->orderBy('updated_at','DESC')->take(6)->get();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*财富榜*/
|
|
|
|
+ $topCoinUsers = Cache::remember('index_top_coin_users',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return UserData::top('coins',8);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ /*友情链接*/
|
|
|
|
+ $friendshipLinks = Cache::remember('friendship_links',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return FriendshipLink::where('status','=',1)->orderBy('sort','asc')->orderBy('created_at','asc')->take(50)->get();
|
|
|
|
+ });
|
|
|
|
+ $signDate = Carbon::today();
|
|
|
|
+ return view('theme::home.index')->with(compact('hotUsers','recommendItems','hotExperts','newestQuestions','rewardQuestions','hotArticles','newestArticles','newestNotices','hotTags','topCoinUsers','friendshipLinks','signDate'));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function zhuce($data){
|
|
|
|
+ $data['status'] = 1;
|
|
|
|
+ $data['password'] = Hash::make($data['password']);
|
|
|
|
+ $data['site_notifications'] = implode(',', array_keys(config('tipask.notification_types')));
|
|
|
|
+ $data['email_notifications'] = 'adopt_answer,invite_answer';
|
|
|
|
+ $user = $this->user->create($data);
|
|
|
|
+
|
|
|
|
+ if ($user) {
|
|
|
|
+ $userData = [
|
|
|
|
+ 'user_id' => $user->id,
|
|
|
|
+ 'coins' => 0,
|
|
|
|
+ 'credits' => 0,
|
|
|
|
+ 'registered_at' => Carbon::now(),
|
|
|
|
+ 'last_visit' => Carbon::now(),
|
|
|
|
+ 'last_login_ip' => $data['visit_ip'],
|
|
|
|
+ ];
|
|
|
|
+ if ($user->mobile) {
|
|
|
|
+ $userData['mobile_status'] = 1;
|
|
|
|
+ }
|
|
|
|
+ $this->userData->create($userData);
|
|
|
|
+ }
|
|
|
|
+ $user->attachRole(2); //默认注册为普通用户角色
|
|
|
|
+ $this->auth->login($user);
|
|
|
|
+ $message = '注册成功!';
|
|
|
|
+ if($this->credit($user->id,'register',Setting()->get('coins_register'),Setting()->get('credits_register'))){
|
|
|
|
+ $message .= get_credit_message(Setting()->get('credits_register'),Setting()->get('coins_register'));
|
|
|
|
+ }
|
|
|
|
+ if(Setting()->get('register_type')=='email'){
|
|
|
|
+ /*发送邮箱验证邮件*/
|
|
|
|
+ $emailToken = EmailToken::create([
|
|
|
|
+ 'email' => $user->email,
|
|
|
|
+ 'token' => EmailToken::createToken(),
|
|
|
|
+ 'action'=> 'register'
|
|
|
|
+ ]);
|
|
|
|
+ if($emailToken){
|
|
|
|
+ $subject = '欢迎注册'.Setting()->get('website_name').',请激活您注册的邮箱!';
|
|
|
|
+ $content = "「".$data['name']."」您好,请激活您在 ".Setting()->get('website_name')." 的注册邮箱!<br /> 请在1小时内点击该链接激活注册账号 → ".route('auth.email.verifyToken',['action'=>$emailToken->action,'token'=>$emailToken->token])."<br />如非本人操作,请忽略此邮件!";
|
|
|
|
+ $this->sendEmail($emailToken->email,$subject,$content);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /*记录注册ip*/
|
|
|
|
+ $this->counter('register_number_'.md5($data['visit_ip']) , 1,86400 );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function denglu($data){
|
|
|
|
+ $credentials = [
|
|
|
|
+ 'password' => $data['password']
|
|
|
|
+ ];
|
|
|
|
+ $credentials['email'] = $data['email'];
|
|
|
|
+ /*根据邮箱地址和密码进行认证*/
|
|
|
|
+ if ($this->auth->attempt($credentials, true))
|
|
|
|
+ {
|
|
|
|
+ $id = DB::table('users')->where('email','=',$data['email'])->first()->id;
|
|
|
|
+ if($this->credit($id,'login',Setting()->get('coins_login'),Setting()->get('credits_login'))){
|
|
|
|
+ $message = '登陆成功! '.get_credit_message(Setting()->get('credits_login'),Setting()->get('coins_login'));
|
|
|
|
+ return $this->success(route('website.index'),$message,true);
|
|
|
|
+ }
|
|
|
|
+ /*认证成功后跳转到首页*/
|
|
|
|
+ return $this->success(route('auth.doing.index'),'登陆成功!',true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*问答模块*/
|
|
|
|
+ public function ask($categorySlug='all',$filter='newest')
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ $question = new Question();
|
|
|
|
+
|
|
|
|
+ if(!method_exists($question,$filter)){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $parentId=$currentCategoryId = 0;
|
|
|
|
+ $currentCategory = null;
|
|
|
|
+ if( $categorySlug != 'all' ){
|
|
|
|
+ $category = Category::where("slug","=",$categorySlug)->first();
|
|
|
|
+ if(!$category){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+ $currentCategoryId = $category->id;
|
|
|
|
+ $parentId = $category->parent_id;
|
|
|
|
+ $currentCategory = $category;
|
|
|
|
+ if($category->hasChild()){
|
|
|
|
+ $parentId = $category->id;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $questions = call_user_func([$question,$filter] , $currentCategoryId );
|
|
|
|
+
|
|
|
|
+ /*热门话题*/
|
|
|
|
+ $hotTags = Taggable::globalHotTags('questions');
|
|
|
|
+
|
|
|
|
+ $categories = load_categories('questions');
|
|
|
|
+ $parentCategories = Category::getParentCategories($parentId);
|
|
|
|
+ $hotUsers = Cache::remember('ask_hot_users',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return UserData::activities(8);
|
|
|
|
+ });
|
|
|
|
+ return view('theme::home.ask')->with(compact('currentCategory','questions','hotUsers','hotTags','filter','categories','currentCategoryId','parentId','parentCategories','categorySlug'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public function blog($categorySlug='all', $filter='newest')
|
|
|
|
+ {
|
|
|
|
+ $article = new Article();
|
|
|
|
+ if(!method_exists($article,$filter)){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+ $parentId=$currentCategoryId = 0;
|
|
|
|
+ $currentCategory = null;
|
|
|
|
+ if( $categorySlug != 'all' ){
|
|
|
|
+ $category = Category::where("slug","=",$categorySlug)->first();
|
|
|
|
+ if(!$category){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+ $currentCategoryId = $category->id;
|
|
|
|
+ $parentId = $category->parent_id;
|
|
|
|
+ $currentCategory = $category;
|
|
|
|
+ if($category->hasChild()){
|
|
|
|
+ $parentId = $category->id;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $articles = call_user_func([$article,$filter],$currentCategoryId);
|
|
|
|
+
|
|
|
|
+ /*热门文章*/
|
|
|
|
+ $hotArticles = Cache::remember('hot_articles',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Article::recommended(0,8);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ $hotUsers = UserData::activeInArticles();
|
|
|
|
+ /*热门话题*/
|
|
|
|
+ $hotTags = Taggable::globalHotTags('articles');
|
|
|
|
+ $tabData = get_category_tab_data("articles",7);
|
|
|
|
+ $parentCategories = Category::getParentCategories($parentId);
|
|
|
|
+ return view('theme::home.blog')->with(compact('tabData','currentCategory','articles','hotUsers','hotTags','filter','currentCategoryId','parentId','parentCategories','categorySlug','hotArticles'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function topic( $categorySlug='all')
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ $parentId=$currentCategoryId = 0;
|
|
|
|
+ $query = Tag::query();
|
|
|
|
+ if( $categorySlug != 'all' ){
|
|
|
|
+ $category = Category::where("slug","=",$categorySlug)->first();
|
|
|
|
+ if(!$category){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+ $currentCategoryId = $category->id;
|
|
|
|
+ $parentId = $category->parent_id;
|
|
|
|
+ if($category->hasChild()){
|
|
|
|
+ $parentId = $category->id;
|
|
|
|
+ }
|
|
|
|
+ $query->whereIn('category_id',$category->getSubIds());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $categories = load_categories('tags');
|
|
|
|
+ $parentCategories = Category::getParentCategories($parentId);
|
|
|
|
+ $topics = $query->orderBy('followers','DESC')->paginate(20);
|
|
|
|
+ return view('theme::home.topic')->with(compact('topics','categories','currentCategoryId','categorySlug','currentCategoryId','parentId','parentCategories'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public function user()
|
|
|
|
+ {
|
|
|
|
+ $hotUsers = Cache::remember('index_user_hot_users',30,function() {
|
|
|
|
+ return UserData::hottest(50);
|
|
|
|
+ });
|
|
|
|
+ $newUsers = Cache::remember('index_new_users',10,function() {
|
|
|
|
+ return User::where("status",">",0)->orderBy("created_at","desc")->take(50)->get();
|
|
|
|
+ });
|
|
|
|
+ return view('theme::home.user')->with(compact('hotUsers','newUsers'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function experts(Request $request,$categorySlug='all',$provinceId='all'){
|
|
|
|
+ $categories = load_categories('experts');
|
|
|
|
+ $hotProvinces = Cache::remember('hot_expert_cities',Setting()->get('website_cache_time',1),function() {
|
|
|
|
+ return Authentication::select('province', DB::raw('COUNT(user_id) as total'))->groupBy('province')->orderBy('total','desc')->get();
|
|
|
|
+ });
|
|
|
|
+ $query = Authentication::leftJoin('user_data', 'user_data.user_id', '=', 'authentications.user_id')->where('user_data.authentication_status','=',1);
|
|
|
|
+ $categoryId = 0;
|
|
|
|
+ if( $categorySlug != 'all' ){
|
|
|
|
+ $category = Category::where("slug","=",$categorySlug)->first();
|
|
|
|
+ if($category){
|
|
|
|
+ $categoryId = $category->id;
|
|
|
|
+ $query->where("authentications.category_id","=",$categoryId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if($provinceId != 'all'){
|
|
|
|
+ $query->where("authentications.province","=",$provinceId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $word = $request->input('word','');
|
|
|
|
+ if($word){
|
|
|
|
+ $query->where("authentications.real_name",'like',"$word%");
|
|
|
|
+ }
|
|
|
|
+ $experts = $query->orderBy('user_data.answers','DESC')
|
|
|
|
+ ->orderBy('user_data.articles','DESC')
|
|
|
|
+ ->orderBy('authentications.updated_at','DESC')
|
|
|
|
+ ->select('authentications.user_id','authentications.real_name','authentications.description','authentications.title','user_data.coins','user_data.credits','user_data.followers','user_data.supports','user_data.answers','user_data.articles','user_data.authentication_status')
|
|
|
|
+ ->paginate(16);
|
|
|
|
+ return view('theme::home.expert')->with(compact('experts','categories','hotProvinces','categorySlug','categoryId','provinceId','word'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function shop($categorySlug='all')
|
|
|
|
+ {
|
|
|
|
+ $parentId=$currentCategoryId = 0;
|
|
|
|
+ $query = Goods::query();
|
|
|
|
+ if( $categorySlug != 'all' ){
|
|
|
|
+ $category = Category::where("slug","=",$categorySlug)->first();
|
|
|
|
+ if(!$category){
|
|
|
|
+ abort(404);
|
|
|
|
+ }
|
|
|
|
+ $currentCategoryId = $category->id;
|
|
|
|
+ $parentId = $category->parent_id;
|
|
|
|
+ if($category->hasChild()){
|
|
|
|
+ $parentId = $category->id;
|
|
|
|
+ }
|
|
|
|
+ $query->whereIn('category_id',$category->getSubIds());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $categories = load_categories('goods');
|
|
|
|
+ $parentCategories = Category::getParentCategories($parentId);
|
|
|
|
+ $goods = $query->where('status','>',0)->where('remnants','>',0)->orderBy('coins','asc')->paginate(16);
|
|
|
|
+ $exchanges = Exchange::newest();
|
|
|
|
+ return view('theme::home.shop')->with(compact('goods','exchanges','categories','currentCategoryId','categorySlug','currentCategoryId','parentId','parentCategories'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|