Skip to content

Instantly share code, notes, and snippets.

@kca66y
Created May 31, 2019 12:04
Show Gist options
  • Save kca66y/428aebcc4cbe079db059b6df27f301ec to your computer and use it in GitHub Desktop.
Save kca66y/428aebcc4cbe079db059b6df27f301ec to your computer and use it in GitHub Desktop.
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Models\CountryTranslation;
use App\Models\Event;
use App\Models\Video;
use \RecursiveIteratorIterator;
use \RecursiveArrayIterator;
use App\User;
use Session;
use Illuminate\Http\Request;
use App\Models\Genre;
use Validator;
use App\Models\Country;
use App\Models\GenreTranslation;
use App\Models\City;
use App\Models\CityTranslation;
use DB;
use App;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
class HomeController extends Controller
{
// public function changeLang($lang)
// {
//
// Session::put('lang', $lang);
//
// print_r(session_id());
//
// return $lang;
//
//
// }
public function index(Request $request, $page = 12)
{
$filters = $request->all();
$inner_data = [];
$data['filter'] = [];
$language = App::getLocale();
// Жанры.
if (isset($_COOKIE['checkboxCookie']) and $_COOKIE['checkboxCookie'] != null) {
if (isset($filters['select_genre'])) {
$inner_data['genres'] = $filters['select_genre'];
} else {
$inner_data['genres'] = explode(',', ($_COOKIE['checkboxCookie']));
}
} else {
if (isset($filters['select_genre'])) {
$inner_data['genres'] = $filters['select_genre'];
} else {
for ($i = 0; $i < 11; $i++) {
$inner_data['genres'][$i] = $i;
}
}
};
// Поиск.
// Сортировка.
$inner_data["sorting"] = (!(isset($filters["sorting"]))) ? 'views' : $filters['sorting'];
// Тип. (Видео(Клип или Концерт), Юзер(Артист(5) или Профессионал(6)))
$inner_data['types'] = (!isset($filters['types'])) ? 'clip' : $filters['types'];
if ($inner_data['types'] == 'clip' || $inner_data['types'] == 'concert') {
if (isset($filters['search']) and $filters['search'] != NULL) {
$inner_data['keys'][] = "videos.name LIKE ?";
$inner_data['values'][] = "%" . $filters['search'] . "%";
}
// Период поиска видео.
if (isset($filters['fresher'])) {
switch ($filters['fresher']) {
case 4:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subMonth(3);
break;
case 5:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subMonth();
break;
default:
break;
}
} elseif (isset($filters['period'])) {
switch ($filters['period']) {
case 2:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subYear();
break;
case 3:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subMonth(6);
break;
case 4:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subMonth(3);
break;
case 5:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subMonth();
break;
case 6:
$inner_data['keys'][] = "videos.created_at >= ?";
$inner_data['values'][] = Carbon::now()->subWeek();
break;
default:
break;
}
}
$inner_data['keys'][] = "video_type = ?";
$inner_data['values'][] = $inner_data['types'];
// Города и Страны
if (isset($filters['country']) && ($filters["country"]) != '-1') {
if (isset($filters["city"]) && ($filters["city"]) != '-1') {
$inner_data['keys'][] = "users.city = ?";
$inner_data['values'][] = $filters['city'];
} else {
$inner_data['keys'][] = "users.country = ?";
$inner_data['values'][] = $filters['country'];
}
}
$inner_data['whereRawQuery'] = implode($inner_data['keys'], " AND ");
if (!(empty($inner_data['genres']))) {
$inner_data['videos'] = DB::table('videos')
->join('users', 'videos.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('countries', 'users.country', '=', 'countries.id')
->join('genre_translations', 'videos.genre_video', '=', 'genre_translations.genre_id')
->join('video_views_likes', 'videos.id', '=', 'video_views_likes.video_id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('genre_translations.language', $language)
->whereIn('status', [0, 1])
->whereIn('genre_video', $inner_data['genres']);
} else {
$inner_data['videos'] = DB::table('videos')
->join('users', 'videos.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('genre_translations', 'videos.genre_video', '=', 'genre_translations.genre_id')
->join('countries', 'users.country', '=', 'countries.id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('genre_translations.language', $language)
->whereIn('status', [0, 1]);
}
$inner_data['videos'] = $inner_data['videos']->whereRaw($inner_data['whereRawQuery'], $inner_data['values']);
$inner_data['videos'] = $inner_data['videos']
->select(
'videos.*',
'users.url as user_url',
'users.name as user_name',
'users.verification',
'users.musical_direction',
'country_translations.name as country_name',
'city_translations.name as city_name',
'genre_translations.name as genre_name',
'users.city as city_id',
'users.country as country_id',
'countries.flag',
'video_views_likes.views as video_views',
'video_views_likes.likes as video_likes');
$inner_data['videos'] = $inner_data['videos']->orderby($inner_data['sorting'], 'desc');
$inner_data['videos'] = $inner_data['videos']->paginate($page);
foreach ($inner_data['videos'] as $key => $video) {
$data['filter'][$key] = $video;
$data['filter'][$key]->likes = $video->video_likes;
$data['filter'][$key]->views = $video->video_views;
$data['filter'][$key]->url = $video->user_url . '/' . $video->url;
$data['filter'][$key]->user_url = $video->user_url;
$data['filter'][$key]->country = $video->country_name;
$data['filter'][$key]->flag = $video->flag;
$data['filter'][$key]->country_id = $video->country_id;
$data['filter'][$key]->city = $video->city_name;
$data['filter'][$key]->city_id = $video->city_id;
$data['filter'][$key]->genre_video = $video->genre_name;
$data['filter'][$key]->user_name = $video->user_name;
if ($video->verification == '2' AND $video->musical_direction != 0) {
$data['filter'][$key]->verified = '2';
} else {
$data['filter'][$key]->verified = '1';
}
}
$data["count"] = $inner_data['videos']->total();
$data["total"] = ceil($inner_data['videos']->total() / $page);
$data["page"] = $inner_data['videos']->currentPage();
} else {
if (isset($filters['search']) and $filters['search'] != NULL) {
$inner_data['keys'][] = "users.name LIKE ?";
$inner_data['values'][] = "%" . $filters['search'] . "%";
}
if (isset($filters['country']) && ($filters["country"]) != '-1') {
if (isset($filters["city"]) && ($filters["city"]) != '-1') {
$inner_data['keys'][] = "users.city = ?";
$inner_data['values'][] = $filters['city'];
} else {
$inner_data['keys'][] = "users.country = ?";
$inner_data['values'][] = $filters['country'];
}
}
if (isset($inner_data['keys']))
$inner_data['whereRawQuery'] = implode($inner_data['keys'], " AND ");
if (!(empty($inner_data['genres'])) AND $inner_data['types'] == 5) {
$inner_data['users'] = DB::table('role_user')
->join('users', 'role_user.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('countries', 'users.country', '=', 'countries.id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('role_user.role_id', $inner_data['types'])
->where('users.is_admin', '!=', 1)
->whereIn('users.musical_direction', $inner_data['genres']);
} else {
$inner_data['users'] = DB::table('role_user')
->join('users', 'role_user.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('countries', 'users.country', '=', 'countries.id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('role_user.role_id', $inner_data['types'])
->where('users.is_admin', '!=', 1);
}
if (!empty($inner_data['keys'])) {
$inner_data['users'] = $inner_data['users']->whereRaw($inner_data['whereRawQuery'], $inner_data['values']);
}
if (!(empty($inner_data['genres'])) AND $inner_data['types'] == 5) {
$inner_data['users'] = DB::table('role_user')
->join('users', 'role_user.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('countries', 'users.country', '=', 'countries.id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('role_user.role_id', $inner_data['types'])
->where('users.is_admin', '!=', 1)
->whereIn('users.musical_direction', $inner_data['genres']);
} else {
$inner_data['users'] = DB::table('role_user')
->join('users', 'role_user.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('countries', 'users.country', '=', 'countries.id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('role_user.role_id', $inner_data['types'])
->where('users.is_admin', '!=', 1);
}
if (!empty($inner_data['whereRawQuery'])) {
$inner_data['users'] = $inner_data['users']->whereRaw($inner_data['whereRawQuery'], $inner_data['values']);
}
$inner_data['users'] = $inner_data['users']->select(
'users.*',
'country_translations.name as country_name',
'city_translations.name as city_name',
'countries.flag');
$inner_data['users'] = $inner_data['users']->orderBy('name', 'ASC')->paginate($page);
foreach ($inner_data['users'] as $key => $user) {
$data['filter'][$key]["id"] = $user->id;
$data['filter'][$key]["url"] = $user->url;
$data['filter'][$key]["name"] = $user->name;
$data['filter'][$key]["photo"] = $user->photo;
$data['filter'][$key]["city"] = $user->city_name;
$data['filter'][$key]["country"] = $user->country_name;
$data['filter'][$key]["age"] = $user->age;
$data['filter'][$key]["flag"] = $user->flag;
$data['filter'][$key]["country_id"] = $user->country;
if ($user->verification == '2' AND $inner_data['types'] == 5) {
$data['filter'][$key]['verified'] = '2';
} else {
$data['filter'][$key]['verified'] = '1';
}
}
$data["count"] = $inner_data['users']->total();
$data["total"] = ceil($inner_data['users']->total() / $page);
$data["page"] = $inner_data['users']->currentPage();
}
$data["genres"] = Genre::getAll();
$all_genres = $data["genres"];
$developments = [];
$massive_genres = [1, 2, 3, 4, 5];
unset($key);
for ($key = 0; $key < 2; $key++) {
$needle = array_rand($massive_genres, 1);
$temp_develop['user'] = User::where('musical_direction', $massive_genres[$needle])->where('id', '!=', 1)->limit(1)->inRandomOrder()->get();
$developments[$key]['user_name'] = $temp_develop['user']->first()->name;
$developments[$key]['user_id'] = $temp_develop['user']->first()->id;
$developments[$key]['user_url'] = $temp_develop['user']->first()->url;
$developments[$key]['user_photo'] = $temp_develop['user']->first()->photo;
$developments[$key]['genre_id'] = $massive_genres[$needle];
$developments[$key]['genre_name'] = $all_genres[$massive_genres[$needle] - 1]['name'];
$developments[$key]['genre_url'] = $all_genres[$massive_genres[$needle] - 1]['url'];
array_values($massive_genres);
unset($all_genres[$massive_genres[$needle] - 1]);
unset($massive_genres[$needle]);
unset($needle);
}
unset($key);
shuffle($all_genres);
foreach ($all_genres as $key => $needle) {
$temp_develop['user'] = User::where('musical_direction', $needle['id'])->where('id', '!=', 1)->limit(1)->inRandomOrder()->get();
$developments[$key + 2]['user_name'] = $temp_develop['user']->first()->name;
$developments[$key + 2]['user_id'] = $temp_develop['user']->first()->id;
$developments[$key + 2]['user_url'] = $temp_develop['user']->first()->url;
$developments[$key + 2]['user_photo'] = $temp_develop['user']->first()->photo;
$developments[$key + 2]['genre_id'] = $needle['id'];
$developments[$key + 2]['genre_name'] = $needle['name'];
$developments[$key + 2]['genre_url'] = $needle['url'];
}
$data["countries"] = Country::getAll();
if (isset($filters['country'])) $data['main']['country_id'] = $filters['country'];
if (isset($filters['city']) and $filters['city'] != '-1') {
$data['main']['city_id'] = $filters['city'];
$data['main']['country_id'] = $filters['country'];
$lol = CityTranslation::whereRaw('city_id = ? AND language = ?', [$filters['city'], $language])->first();
$data['main']['city_name'] = $lol['name'];
}
if ($inner_data['types'] == '5' OR $inner_data['types'] == '6') {
$data["blade_type"] = 'user';
} else {
$data["blade_type"] = '';
}
$data["events"] = DB::table('events')
->where('status', '=', '1')
->get();
if (Auth::check()) {
$data["photo"] = Auth::user()->photo;
}
//
$new_artists = DB::table('users')
->join('role_user', 'users.id', '=', 'role_user.user_id')
->join('genre_translations', 'genre_translations.genre_id', '=', 'users.musical_direction')
->where('genre_translations.language', '=', $language)
->where('role_user.role_id', '5')
->whereIn('users.verification', [2, 5])
->where('users.id', '!=', '1')
->orderBy('users.created_at', 'desc')
->limit(4)
->select('users.id', 'users.photo', 'users.name', 'users.url', 'genre_translations.name as genre_name')
->get();
// $new_artists = User::where('verification','2')->where('id','!=','1')->orderBy('created_at','desc')->limit(4)->get();
return view('main', [
"data" => $data,
"developments" => $developments,
"new_artists" => $new_artists,
"type" => $inner_data['types']
]);
}
public function getPolicy()
{
$data = [];
if (Auth::check()) {
$data["photo"] = Auth::user()->photo;
}
return view('policy', ['data' => $data]);
}
public function getAbout()
{
$data = [];
if (Auth::check()) {
$data["photo"] = Auth::user()->photo;
}
return view('about')->with("data", $data);
}
public function getTop()
{
$genres = Genre::all();
$top = [];
$video_likes = 0;
$data = [];
foreach ($genres as $genre) {
$users = User::where('musical_direction', $genre->id)->get();
foreach ($users as $key => $user) {
$videos = Video::whereRaw('user_id = ? and genre_video = ?', [$user->id, $genre->id])->where('status','!=','2')->get();
foreach ($videos as $key2 => $video) {
$video_likes = $video_likes + strval($video->likes);
}
$top[$genre->id][$user->url] = $video_likes;
$video_likes = 0;
}
arsort($top[$genre->id]);
if (count($top[$genre->id]) > 10) {
$top[$genre->id] = array_slice($top[$genre->id], 0, 10, true);
}
}
$genre_ids = array_keys($top);
foreach ($genre_ids as $genre_id) {
$users = array_keys($top[$genre_id]);
foreach ($users as $user) {
$data[Genre::getName($genre_id)][User::where('url', $user)->first()->name] = $user;
}
}
return view('top', ['data' => $data]);
}
public function getGenres(Request $request, $url)
{
// dd(Video::find(298));
if (!$genre = Genre::where('url', $url)->first()) {
return abort('404');
}
$language = App::getLocale();
$data = [];
if (Auth::check()) $data["photo"] = Auth::user()->photo;
$genre_info = GenreTranslation::where('genre_id', $genre->id)->where('language', $language)->first();
$data['main_genre'] = $genre;
$data['main_genre']->id = $genre->id;
$data['main_genre']->name = $genre_info->name;
$data['main_genre']->meta_title = $genre_info->meta_title;
$data['main_genre']->meta_description = $genre_info->meta_description;
$data['genres'] = Genre::getAllExceptOne($url);
$data['ids'] = '';
$data['type'] = (isset($request->type) ? $request->type : 'clip');
$data['videos'] = [];
//
if (isset($request->ids)) {
foreach (explode(',', $request->ids) as $some_id) {
$ids[] = $some_id;
};
$videos = DB::table('videos')
->join('users', 'videos.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('genre_translations', 'videos.genre_video', '=', 'genre_translations.genre_id')
->join('countries', 'users.country', '=', 'countries.id')
->join('video_views_likes', 'videos.id', '=', 'video_views_likes.video_id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('genre_translations.language', $language)
->where('videos.genre_video', $data['main_genre']->id)
->where('videos.status','!=', '2')
->where('videos.video_type', $data['type'])
->whereNotIn('videos.id', $ids)
->limit(20)
->inRandomOrder()
->select(
'videos.*',
'users.url as user_url',
'users.name as user_name',
'users.city as city_id',
'users.country as country_id',
'users.verification',
'users.musical_direction',
'country_translations.name as country_name',
'city_translations.name as city_name',
'genre_translations.name as genre_name',
'countries.flag',
'video_views_likes.views as video_views',
'video_views_likes.likes as video_likes')
->get();
if (count($videos) < 20) {
foreach ($videos as $temp_video) {
$ids_new[] = $temp_video->id;
}
if (empty($ids_new)) {
$ids_new = [0];
}
$limit = 20 - count($videos);
$temp_videos = DB::table('videos')
->join('users', 'videos.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('genre_translations', 'videos.genre_video', '=', 'genre_translations.genre_id')
->join('countries', 'users.country', '=', 'countries.id')
->join('video_views_likes', 'videos.id', '=', 'video_views_likes.video_id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('genre_translations.language', $language)
->where('videos.genre_video', $data['main_genre']->id)
->where('videos.status','!=', '2')
->where('videos.video_type', $data['type'])
->whereNotIn('videos.id', $ids_new)
->limit($limit)
->inRandomOrder()
->select(
'videos.*',
'users.url as user_url',
'users.name as user_name',
'users.verification',
'users.musical_direction',
'users.city as city_id',
'users.country as country_id',
'country_translations.name as country_name',
'city_translations.name as city_name',
'genre_translations.name as genre_name',
'countries.flag',
'video_views_likes.views as video_views',
'video_views_likes.likes as video_likes')
->get();
$videos = array_merge($videos, $temp_videos);
}
} else {
$videos = DB::table('videos')
->join('users', 'videos.user_id', '=', 'users.id')
->join('city_translations', 'users.city', '=', 'city_translations.city_id')
->join('country_translations', 'users.country', '=', 'country_translations.country_id')
->join('genre_translations', 'videos.genre_video', '=', 'genre_translations.genre_id')
->join('countries', 'users.country', '=', 'countries.id')
->join('video_views_likes', 'videos.id', '=', 'video_views_likes.video_id')
->where('city_translations.language', $language)
->where('country_translations.language', $language)
->where('genre_translations.language', $language)
->where('videos.genre_video', $data['main_genre']->id)
->where('videos.status','!=', '2')
->where('videos.video_type', $data['type'])
->limit(20)
->inRandomOrder()
->select(
'videos.*',
'users.url as user_url',
'users.name as user_name',
'users.verification',
'users.musical_direction',
'users.city as city_id',
'users.country as country_id',
'country_translations.name as country_name',
'city_translations.name as city_name',
'genre_translations.name as genre_name',
'countries.flag',
'video_views_likes.views as video_views',
'video_views_likes.likes as video_likes')
->get();
}
foreach ($videos as $key => $video) {
$data['ids'] = $data['ids'] . $video->id;
if (count($videos) - 1 != $key) $data['ids'] = $data['ids'] . ',';
$data['videos'][$key] = $video;
$data['videos'][$key]->likes = $video->video_likes;
$data['videos'][$key]->views = $video->video_views;
$data['videos'][$key]->url = $video->user_url . '/' . $video->url;
$data['videos'][$key]->user_url = $video->user_url;
$data['videos'][$key]->country = $video->country_name;
$data['videos'][$key]->flag = $video->flag;
$data['videos'][$key]->country_id = $video->country_id;
$data['videos'][$key]->city = $video->city_name;
$data['videos'][$key]->city_id = $video->city_id;
$data['videos'][$key]->genre_video = $video->genre_name;
$data['videos'][$key]->user_name = $video->user_name;
if ($video->verification == '2' AND $video->musical_direction != 0) {
$data['videos'][$key]->verified = '2';
} else {
$data['videos'][$key]->verified = '1';
}
}
if (isset($request->ids)) {
foreach (explode(',', $request->ids) as $any_id) {
$video_ids[] = $any_id;
}
unset($any_id);
foreach (explode(',', $data['ids']) as $any_id) {
$video_ids[] = $any_id;
}
} else {
foreach (explode(',', $data['ids']) as $any_id) {
$video_ids[] = $any_id;
}
}
$data['left'] = Video::where('genre_video', $data['main_genre']->id)->where('status','!=', '2')->where('video_type', $data['type'])->count();
if (isset($request->type)) return $data;
return view('genre', ['data' => $data]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment