def console_streams(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)
    user = UserProfile.objects.get(user=request.user)

    context['title'] = tr.title
    context['ref'] = ref
    context = f_m.get_links_for_console(context, tr)

    if request.method == 'POST':
        if request.POST.get('link') and request.POST.get('inputPlatform'):
            answer = eval(
                str(request.POST).split('<QueryDict: ')[1].split('>')[0])
            f_m.get_language_stream(answer, tr)
            f_m.edit_links(answer, tr, user)

            return HttpResponseRedirect(request.path)
        else:
            tr.official_streamer_twitch = ''
            tr.official_streamer_youtube = ''
            tr.save()

            return HttpResponseRedirect(request.path)

    if mobile:
        return render(request, 'mobile/console/console_streams.html', context)
    else:
        return render(request, 'console/console_streams.html', context)
def console_tournament(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)

    context['title'] = tr.title
    context['ref'] = ref
    context['public'] = tr.public
    context['archive'] = tr.archive

    if request.method == 'POST':
        if request.POST.get('publish'):
            tr.public = not tr.public
            tr.save()
            return HttpResponseRedirect('/console/{}/'.format(ref))

        if request.POST.get('archive'):
            tr.archive = not tr.archive
            tr.save()
            return HttpResponseRedirect('/console/{}/'.format(ref))

    if mobile:
        return render(request, 'mobile/tournaments/console_tournament.html',
                      context)
    else:
        return render(request, 'tournaments/console_tournament.html', context)
def profile_integrations(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    user = UserProfile.objects.get(user=request.user)
    context['twitch'] = user.twitch
    context['steam'] = user.steam
    context['youtube'] = user.youtube
    context['discord'] = user.discord
    context['discord_server_tournament'] = user.discord_server_tournament

    if request.method == 'POST':
        if request.POST.get('twitch') or request.POST.get('twitch') == '':
            user.twitch = request.POST.get('twitch')
        if request.POST.get('youtube') or request.POST.get('youtube') == '':
            user.youtube = request.POST.get('youtube')
        if request.POST.get('discord') or request.POST.get('discord') == '':
            user.discord = request.POST.get('discord')
        if request.POST.get('discord_server') or request.POST.get(
                'discord_server') == '':
            user.discord_server = request.POST.get('discord_server')
        if request.POST.get('discord_server_tournament') or request.POST.get(
                'discord_server_tournament') == '':
            user.discord_server_tournament = request.POST.get(
                'discord_server_tournament')

        user.save()
        return HttpResponseRedirect(request.path)

    if mobile:
        return render(request, 'mobile/profile/profile_integrations.html',
                      context)
    else:
        return render(request, 'profile/profile_integrations.html', context)
def my_tournaments(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = 'My Tournaments'

    tournaments = UserProfile.objects.get(user=request.user).tournaments.all()
    list_of_tournaments = []
    for i in tournaments:
        t = TournamentModel.objects.get(ref=i)
        if not t.archive and t.creator == request.user:
            list_of_tournaments.append(i)

    if len(list_of_tournaments) < len(tournaments):
        context['archives'] = True
        if len(tournaments) - len(list_of_tournaments) == 1:
            context['archives_count'] = '1 tournament archived'
        else:
            context['archives_count'] = '{} tournaments archived'.format(
                len(tournaments) - len(list_of_tournaments))

    context['tournaments'] = list_of_tournaments

    if mobile:
        return render(request, 'mobile/tournaments/my_tournaments.html',
                      context)
    else:
        return render(request, 'tournaments/my_tournaments.html', context)
def index_page(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = "Main page"

    tournaments = []
    first_tournament = []

    for i in range(1, TournamentModel.objects.all().last().id + 1):
        tour = TournamentModel.objects.get(id=i)
        if tour.public:
            if len(first_tournament) == 0:
                first_tournament.append(tour)
            else:
                tournaments.append(tour)

    context['tournaments'] = tournaments
    context['first_tournament'] = first_tournament

    if mobile:
        return render(request, 'mobile/index.html', context)
    else:
        return render(request, 'index.html', context)
def console_fields(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)

    context['title'] = tr.title
    context['ref'] = ref

    if mobile:
        return render(request, 'mobile/console/console_fields.html', context)
    else:
        return render(request, 'console/console_fields.html', context)
def archives(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tournaments = UserProfile.objects.get(user=request.user).tournaments.all()
    list_of_tournaments = []
    for i in tournaments:
        t = TournamentModel.objects.get(ref=i)
        if t.archive:
            list_of_tournaments.append(i)

    context['tournaments'] = list_of_tournaments
    context['title'] = "Archives"

    if mobile:
        return render(request, 'mobile/tournaments/archives.html', context)
    else:
        return render(request, 'tournaments/archives.html', context)
def sign_up(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = 'Регистрация'
    context['errors'] = []

    if request.method == 'POST':
        f = SignInForm(request.POST)

        if f.is_valid():
            u_n = f.data['user_name']
            u_em = f.data['user_email']
            u_pw = f.data['password']
            u_pw_c = f.data['password_conf']

            if not f_m.is_existing_user(User.objects.all(), u_n):
                if u_pw == u_pw_c:
                    new_user = User.objects.create_user(username=u_n,
                                                        email=u_em,
                                                        password=u_pw)
                    new_user.save()
                    return HttpResponseRedirect('/login/')
                else:
                    context['errors'].append("Введенные пароли не совпадают")
            else:
                context['errors'].append(
                    "Пользователь с таким логином уже существует")

            context['form'] = f
        else:
            context['form'] = f
    else:
        f = SignInForm()
        context['form'] = f

    if mobile:
        return render(request, 'mobile/registration/register.html', context)
    else:
        return render(request, 'registration/register.html', context)
def user_page(request, user_id):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    user = User.objects.get(id=user_id)
    if UserProfile.objects.filter(user=user).exists():
        this_user = UserProfile.objects.get(user=user)

    context['username'] = user
    context['email'] = user.email

    if this_user.photo:
        context['photo'] = UserProfile.objects.get(user=user).photo

    context['bg'] = this_user.get_bg_user_display()

    if mobile:
        return render(request, 'mobile/profile/user_page.html', context)
    else:
        return render(request, 'profile/user_page.html', context)
def console_partners_streams(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)
    user = UserProfile.objects.get(user=request.user)

    streamers = tr.partners_streamers.all()
    for i in range(len(streamers)):
        link = streamers[i].link.split('/')
        if link[len(link) - 1]:
            link = link[len(link) - 1]
        else:
            link = link[len(link) - 2]
        streamers[i].link = link

    context['streamers'] = streamers

    context['title'] = tr.title
    context['ref'] = ref

    if request.method == 'POST':
        if request.POST.get('link') and request.POST.get('inputPlatform'):
            answer = eval(
                str(request.POST).split('<QueryDict: ')[1].split('>')[0])
            tr.partners_streamers.clear()
            for i in range(len(answer['link'])):
                if answer['inputPlatform'][i] == '1':
                    if 'https://' in answer['link'][i]:
                        a = answer['link'][i].split('/')
                        if a[len(a) - 1]:
                            link_now = 'https://twitch.tv/' + a[len(a) - 1]
                            link_www_now = 'https://www.twitch.tv/' + a[len(a)
                                                                        - 1]
                        else:
                            link_now = 'https://twitch.tv/' + a[len(a) - 2]
                            link_www_now = 'https://www.twitch.tv/' + a[len(a)
                                                                        - 2]
                    else:
                        link_now = 'https://twitch.tv/' + answer['link'][i]
                        link_www_now = 'https://www.twitch.tv/' + answer[
                            'link'][i]
                    platform = 'T'
                elif answer['inputPlatform'][i] == '2':
                    if 'https://' in answer['link'][i]:
                        a = answer['link'][i].split('/')
                        if a[len(a) - 1]:
                            link_now = 'https://youtube.com/channel/' + a[
                                len(a) - 1]
                            link_www_now = 'https://www.youtube.com/channel/' + a[
                                len(a) - 1]
                        else:
                            link_now = 'https://youtube.com/channel/' + a[
                                len(a) - 2]
                            link_www_now = 'https://www.youtube.com/channel/' + a[
                                len(a) - 2]
                    else:
                        link_now = 'https://youtube.com/channel/' + answer[
                            'link'][i]
                        link_www_now = 'https://www.youtube.com/channel/' + answer[
                            'link'][i]
                    platform = 'Y'

                if answer['inputLanguage'][i] == '1':
                    language = 'ru'
                if answer['inputLanguage'][i] == '2':
                    language = 'en'
                if answer['inputLanguage'][i] == '3':
                    language = 'RN'

                if link_now != user.twitch and link_www_now != user.twitch and link_now != user.youtube and link_www_now != user.youtube:
                    tr.partners_streamers.create(link=link_now,
                                                 language=language,
                                                 platform=platform)

            return HttpResponseRedirect(request.path)
        else:
            tr.partners_streamers.clear()

            return HttpResponseRedirect(request.path)

    if mobile:
        return render(request, 'mobile/console/console_partners_streams.html',
                      context)
    else:
        return render(request, 'console/console_partners_streams.html',
                      context)
def console_general(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)

    today = datetime.datetime.today()
    context['today'] = today.strftime("%Y-%m-%d")

    context['title'] = tr.title
    context['creator'] = tr.creator
    context['description'] = tr.description
    context['rules'] = tr.rules
    context['full_rules'] = tr.full_rules
    context['prizes'] = tr.prizes
    context['date'] = str(tr.date)
    context['time'] = str(tr.time)
    context['schedule'] = tr.schedule
    context['contacts'] = tr.contacts
    context['end_date'] = str(tr.end_date)
    context['end_time'] = str(tr.end_time)
    context['discord_server'] = tr.discord_server
    context['formattype'] = tr.formattype
    context['type'] = tr.type
    context['ref'] = ref

    if request.method == 'POST':
        if request.POST.get('title') or request.POST.get('title') == '':
            tr.title = request.POST.get('title')
        if request.POST.get('description') or request.POST.get(
                'description') == '':
            tr.description = request.POST.get('description')
        if request.POST.get('rules') or request.POST.get('rules') == '':
            tr.rules = request.POST.get('rules')
        if request.POST.get('full_rules') or request.POST.get(
                'full_rules') == '':
            tr.full_rules = request.POST.get('full_rules')
        if request.POST.get('prizes') or request.POST.get('prizes') == '':
            tr.prizes = request.POST.get('prizes')
        if request.POST.get('date') or request.POST.get('date') == '':
            tr.date = request.POST.get('date')
        if request.POST.get('time') or request.POST.get('time') == '':
            tr.time = request.POST.get('time')
        if request.POST.get('schedule') or request.POST.get('schedule') == '':
            tr.schedule = request.POST.get('schedule')
        if request.POST.get('contacts') or request.POST.get('contacts') == '':
            tr.contacts = request.POST.get('contacts')
        if request.POST.get('end_date') or request.POST.get('end_date') == '':
            tr.end_date = request.POST.get('end_date')
        if request.POST.get('end_time') or request.POST.get('end_time') == '':
            tr.end_time = request.POST.get('end_time')
        if request.POST.get('discord_server') or request.POST.get(
                'discord_server') == '':
            tr.discord_server = request.POST.get('discord_server')
        if request.POST.get('inputType') or request.POST.get(
                'inputType') == '':
            tr.type = request.POST.get('inputType')
        if request.POST.get('inputFormat') or request.POST.get(
                'inputFormat') == '':
            tr.formattype = request.POST.get('inputFormat')

        tr.save()
        return HttpResponseRedirect(request.path)

    if mobile:
        return render(request, 'mobile/console/console_general.html', context)
    else:
        return render(request, 'console/console_general.html', context)
def create_tournament(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = 'Create Tournament'
    context['errors'] = []

    if request.method == 'POST':
        f = TournamentForm(request.POST)
        user = UserProfile.objects.get(user=request.user)

        if f.is_valid():
            c = request.user
            date_time_now = str(datetime.datetime.now())
            ref = str(hashlib.md5(date_time_now.encode()).hexdigest())
            t = f.data['title']
            d = f.data['description']
            r = f.data['rules']
            fr = f.data['full_rules']
            p = f.data['prizes']
            dt = f.data['date']
            tm = f.data['time']
            sc = f.data['schedule']
            cn = f.data['contacts']
            ed = request.POST.get('end_date')
            et = request.POST.get('end_time')
            tp = request.POST.get('inputType')
            frm = request.POST.get('inputFormat')

            tour = TournamentModel.objects.create(creator=c,
                                                  ref=ref,
                                                  title=t,
                                                  description=d,
                                                  rules=r,
                                                  full_rules=fr,
                                                  prizes=p,
                                                  date=dt,
                                                  time=tm,
                                                  schedule=sc,
                                                  contacts=cn,
                                                  end_date=ed,
                                                  end_time=et,
                                                  type=tp,
                                                  formattype=frm)

            if user.twitch:
                tour.official_streamer_twitch = user.twitch
            if user.youtube:
                tour.official_streamer_youtube = user.youtube
            if user.discord_server_tournament:
                tour.discord_server = user.discord_server_tournament

            tour.save()
            tour.userprofile_set.add(
                UserProfile.objects.get(user=request.user))

            context['form'] = f
            return HttpResponseRedirect('/console/{}/'.format(ref))
        else:
            context['form'] = f
    else:
        f = TournamentForm()
        context['form'] = f

    date = datetime.datetime.today()
    context['date'] = date.strftime("%Y-%m-%d")

    if mobile:
        return render(request, 'mobile/tournaments/create_tournament.html',
                      context)
    else:
        return render(request, 'tournaments/create_tournament.html', context)
def tournament(request, ref):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    tr = TournamentModel.objects.get(ref=ref)
    context['title'] = tr.title
    context['description'] = tr.description
    context['rules'] = tr.rules
    context['full_rules'] = tr.full_rules
    context['prizes'] = tr.prizes
    context['date'] = tr.date
    context['time'] = tr.time
    context['schedule'] = tr.schedule
    context['contacts'] = tr.contacts
    context['end_date'] = tr.end_date
    context['end_time'] = tr.end_time
    context['members_count'] = tr.members_count
    context['type'] = tr.type
    context['fortype'] = tr.formattype
    '''players = []
    for i in range(len(tr.userprofile_set.all())):
        players.append(tr.userprofile_set.all()[i].user)
    context['players'] = players'''

    context['discord_server'] = tr.discord_server
    context['creator'] = tr.creator

    if request.method == 'POST':
        if request.POST.get('join', False):
            tr.userprofile_set.add(UserProfile.objects.get(user=request.user))
            tr.members_count = str(int(tr.members_count) + 1)
            tr.save()

            return HttpResponseRedirect('/tournament/{}/'.format(ref))

        if request.POST.get('exit'):
            tr.userprofile_set.remove(
                UserProfile.objects.get(user=request.user))
            tr.members_count = str(int(tr.members_count) - 1)
            tr.save()

            return HttpResponseRedirect('/tournament/{}/'.format(ref))

    if request.user.is_authenticated:
        if ref in str(
                UserProfile.objects.get(user=request.user).tournaments.all()):
            if tr.creator == request.user:
                context['joined'] = "Join"
                context['join'] = "join"
                context['disabled'] = "disabled"
            else:
                context['joined'] = "Exit"
                context['join'] = "exit"
        else:
            context['joined'] = "Join"
            context['join'] = "join"

    if mobile:
        return render(request, 'mobile/tournaments/tournament.html', context)
    else:
        return render(request, 'tournaments/tournament.html', context)
def profile_statistics(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = 'Edit profile'

    user = User.objects.filter(username=request.user)[0]
    this_user = UserProfile.objects.get(user=request.user)

    if request.method == 'POST':
        if request.POST.get('game_nick', False):
            this_user.game_nickname = request.POST.get('game_nick')
            this_user.save()

        if request.POST.get('tag', False):
            this_user.player_tag = request.POST.get('tag')
            this_user.save()

        if request.POST.get('wins', False):
            this_user.wins = request.POST.get('wins')
            this_user.save()

        if request.POST.get('loses', False):
            this_user.loses = request.POST.get('loses')
            this_user.save()

        if request.POST.get('damage', False):
            this_user.damage = request.POST.get('damage')
            this_user.save()

        if request.POST.get('repair', False):
            this_user.repair = request.POST.get('repair')
            this_user.save()

        if request.POST.get('kills', False):
            this_user.kills = request.POST.get('kills')
            this_user.save()

        if request.POST.get('deaths', False):
            this_user.deaths = request.POST.get('deaths')
            this_user.save()

        if request.POST.get('t_bombs', False):
            this_user.t_bombs = request.POST.get('t_bombs')
            this_user.save()

        if request.POST.get('d_bombs', False):
            this_user.d_bombs = request.POST.get('d_bombs')
            this_user.save()

        return HttpResponseRedirect(request.path)

    context['game_nick'] = this_user.game_nickname
    context['tag'] = this_user.player_tag
    context['wins'] = this_user.wins
    context['loses'] = this_user.loses
    context['damage'] = this_user.damage
    context['repair'] = this_user.repair
    context['kills'] = this_user.kills
    context['deaths'] = this_user.deaths
    context['t_bombs'] = this_user.t_bombs
    context['d_bombs'] = this_user.d_bombs

    if mobile:
        return render(request, 'mobile/profile/profile_statistics.html',
                      context)
    else:
        return render(request, 'profile/profile_statistics.html', context)
def profile(request):
    context, mobile = f_m.get_base_context(request)
    if f_m.check_dark(request):
        return HttpResponseRedirect(request.path)

    context['title'] = 'Edit profile'

    backgrounds = [
        'bang', 'cybercity', 'cycle', 'ground', 'ink', 'stars', 'winter',
        'black_hole', 'cyber', 'forest'
    ]

    code_bg = {
        'bang': '05',
        'cybercity': '06',
        'cycle': '02',
        'ground': '03',
        'ink': '07',
        'stars': '01',
        'winter': '04',
        'black_hole': '08',
        'cyber': '09',
        'forest': '10',
    }

    user = User.objects.filter(username=request.user)[0]
    this_user = UserProfile.objects.get(user=request.user)
    if request.method == 'POST':
        if request.POST.get('username', False):
            if user.username != request.POST.get('username'):
                if not User.objects.filter(
                        username=request.POST.get('username')).exists():
                    user.username = request.POST.get('username')
                    user.save()
                    context['success'] = 'The login change is successful'
                else:
                    context['error'] = 'This login is already taken'

        if request.POST.get('email', False):
            if user.email != request.POST.get('email'):
                user.email = request.POST.get('email')
                user.save()
                context['success'] = 'The email change is successful'

        if request.POST.get('old_pswd', False):
            if user.check_password(request.POST.get('old_pswd')):
                if request.POST.get('new_pswd'):
                    user.set_password(request.POST.get('new_pswd'))
                    user.save()
                    context['success'] = 'The password change is successful'
            else:
                context['error'] = 'The old password is invalid'

        if request.FILES:
            profile_form = UserPhoto(instance=this_user,
                                     data=request.POST,
                                     files=request.FILES)
            if profile_form.is_valid():
                if UserProfile.objects.get(
                        user=request.user).photo != 'no_photo.jpg':
                    image1 = str(Path.cwd()) + '/media/' + str(
                        context['photo'])
                    os.remove(image1)
                profile_form.save()
                context['photo'] = UserProfile.objects.get(
                    user=request.user).photo
                context['success'] = 'The image change is successful'
            else:
                profile_form = UserPhoto(instance=this_user)
        else:
            profile_form = UserPhoto(instance=this_user)

        if request.POST.get('bg', False):
            this_user.bg_user = code_bg[request.POST.get('bg')]
            this_user.save()

    else:
        profile_form = UserPhoto(instance=this_user)

    context['profile_form'] = profile_form
    context['backgrounds'] = backgrounds
    context['bg_user'] = this_user.get_bg_user_display()

    if mobile:
        return render(request, 'mobile/profile/profile.html', context)
    else:
        return render(request, 'profile/profile.html', context)