def site_change_pass(self, activation_key): data_mozliwa = datetime.datetime.now() - datetime.timedelta(days=1) zmiany = ZmianaHasla.objects.select_for_update().filter( hash=activation_key, data__gte=data_mozliwa) for z in zmiany: user = User.objects.select_for_update().get(pk=z.user_id) user.set_password(z.haslo) user.save(force_update=True) message = "Zmiana hasła powiodła się" send_info_message(user=user, message=message) z.delete() return HttpResponseRedirect(url(self.urls.edit))
def site_change_email(self, activation_key): data_mozliwa = datetime.datetime.now() - datetime.timedelta(days=1) zmiany = ZmianaMaila.objects.select_for_update().filter( hash=activation_key, data__gte=data_mozliwa) for z in zmiany: user = User.objects.select_for_update().get(pk=z.user_id) StareMaile.objects.create(user=user, email=user.email) user.email = z.email user.save(force_update=True) message = "Zmiana emaila powiodła się" send_info_message(user=user, message=message) z.delete() return HttpResponseRedirect(url(self.urls.edit))
def site_opusc(self): sojusz_uzytkownika = self.game.get_sojusz() if not sojusz_uzytkownika: return HttpResponseRedirect(url(self.urls.main)) nalezy = self.game.get_sojusz_czlonek() if nalezy.wlasciciel and Czlonkowie.objects.filter( sojusz=sojusz_uzytkownika, wlasciciel=True).count() <= 1: sojusz_uzytkownika.zaproszenia_set.all().delete() sojusz_uzytkownika.czlonkowie_set.all().delete() sojusz_uzytkownika.sojuszlog_set.all().delete() sojusz_uzytkownika.sojuszchat_set.all().delete() sojusz_uzytkownika.delete() nalezy.delete() else: nalezy.delete() # except:pass send_info_message(user=self.game.user, message='Opuściłeś sojusz: %s' % (sojusz_uzytkownika.nazwa, )) return HttpResponseRedirect(url(self.urls.main))
def site_take_from_dealer(self): planeta = self.game.get_current_planet() poprawne_dane = True if 'co_sprzedaje' not in self.request.POST: message = "Musisz wybrać co sprzedajesz" send_error_message(user=self.game.user, message=message) poprawne_dane = False else: co_sprzedaje = self.request.POST['co_sprzedaje'] if co_sprzedaje not in ('m', 'k', 'd'): message = "Musisz wybrać co sprzedajesz" send_error_message(user=self.game.user, message=message) poprawne_dane = False if 'sprzedaje_na' not in self.request.POST: message = "Musisz wybrać co kupujesz" send_error_message(user=self.game.user, message=message) poprawne_dane = False else: sprzedaje_na = self.request.POST['sprzedaje_na'] if sprzedaje_na not in ('m', 'k', 'd'): message = "Musisz wybrać co kupujesz" send_error_message(user=self.game.user, message=message) poprawne_dane = False try: ilosc_sprzedawanego = int(self.request.POST['ilosc_sprzedawanego']) except: message = "Musisz podać poprawną ilość sprzedawanego surowca" send_error_message(user=self.game.user, message=message) poprawne_dane = False if poprawne_dane: ile_mam = 0 if co_sprzedaje == 'm': ile_mam = planeta.metal elif co_sprzedaje == 'k': ile_mam = planeta.crystal elif co_sprzedaje == 'd': ile_mam = planeta.deuter if ilosc_sprzedawanego < 0: message = "Ilość sprzedawanego musi być większa od 0" send_error_message(user=self.game.user, message=message) poprawne_dane = False elif ile_mam < ilosc_sprzedawanego: message = "Nie masz tyle surowca" send_error_message(user=self.game.user, message=message) poprawne_dane = False else: ile_kupilismy = floor( floor(ilosc_sprzedawanego * 0.9) * grid_sprzedawcy[co_sprzedaje][sprzedaje_na]) if co_sprzedaje == 'm': planeta.metal -= ilosc_sprzedawanego elif co_sprzedaje == 'k': planeta.crystal -= ilosc_sprzedawanego elif co_sprzedaje == 'd': planeta.deuter -= ilosc_sprzedawanego if sprzedaje_na == 'm': planeta.metal += ile_kupilismy elif sprzedaje_na == 'k': planeta.crystal += ile_kupilismy elif sprzedaje_na == 'd': planeta.deuter += ile_kupilismy message = "Kupiłeś %s %s za %s %s" % ( int(ile_kupilismy), dlugie_nazwy[sprzedaje_na], ilosc_sprzedawanego, dlugie_nazwy[co_sprzedaje]) send_info_message(user=self.game.user, message=message) return HttpResponseRedirect(url(self.urls.dealer))
def site_take_offer(self): current_planet = self.game.get_current_planet() if "id" in self.request.REQUEST: try: rynek_obj = Rynek.objects.select_for_update().get( pk=self.request.REQUEST['id']) req_obj = Output() req_obj.user = rynek_obj.planeta.owner GraAlienObject = BaseGame(req_obj) GraAlienObject.save_all() planeta_alien = GraAlienObject.get_planet(rynek_obj.planeta_id) rynek_obj = Rynek.objects.select_for_update().get( pk=self.request.REQUEST['id']) except Rynek.DoesNotExist: message = "Nie ma już takiej oferty na rynku, wybież inną" send_error_message(user=self.game.user, message=message) return HttpResponseRedirect(url(self.urls.main)) else: message = "Nie ma już takiej oferty na rynku, wybież inną" send_error_message(user=self.game.user, message=message) return HttpResponseRedirect(url(self.urls.main)) if rynek_obj.planeta.owner_id == self.game.user.id: message = "Nie możesz kupić swojej oferty, nawet jeśli jest z innej planety" send_error_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) try: ilosc = int(self.request.REQUEST["ilosc"]) except: send_error_message(user=self.game.user, message="Wybież prawidłową ilość paczek") GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) if ilosc > rynek_obj.ilosc: message = "Wybież prawidłową ilość paczek" send_error_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) ile_oddajemy = ilosc * rynek_obj.na_ile if rynek_obj.na == 'M': if ile_oddajemy > current_planet.metal: message = "Nie masz tyle surowców żeby to kupić" send_error_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) current_planet.metal -= ile_oddajemy planeta_alien.metal += ile_oddajemy elif rynek_obj.na == 'K': if ile_oddajemy > current_planet.crystal: message = "Nie masz tyle surowców żeby to kupić" send_error_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) current_planet.crystal -= ile_oddajemy planeta_alien.crystal += ile_oddajemy elif rynek_obj.na == 'D': if ile_oddajemy > current_planet.deuter: message = "Nie masz tyle surowców żeby to kupić" send_error_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main)) current_planet.deuter -= ile_oddajemy planeta_alien.deuter += ile_oddajemy message = "%s kupił %s paczek po %s %s" % ( self.game.user.username, ilosc, rynek_obj.na_ile, dlugie_nazwy[str( rynek_obj.na).lower()]) send_info_message(user=GraAlienObject.user, message=message) ile_dostajemy = rynek_obj.co_ile * ilosc if rynek_obj.co == 'M': current_planet.metal += ile_dostajemy elif rynek_obj.co == 'K': current_planet.crystal += ile_dostajemy elif rynek_obj.co == 'D': current_planet.deuter += ile_dostajemy if ilosc >= rynek_obj.ilosc: rynek_obj.delete() else: rynek_obj.ilosc -= ilosc rynek_obj.save(force_update=True) message = "Właśnie kupiłeś surowce" send_info_message(user=self.game.user, message=message) GraAlienObject.save_all() return HttpResponseRedirect(url(self.urls.main))
def site_for_sale(self, page=1): try: page = int(page) if page <= 0: page = 1 except: page = 1 current_planet = self.game.get_current_planet() rynek_obj = Rynek(planeta=current_planet) if self.request.method == 'POST': rynek_form = RynekForm(instance=rynek_obj, data=self.request.POST) if rynek_form.is_valid(): co = rynek_form.cleaned_data['co'] co_ile = rynek_form.cleaned_data['co_ile'] # na = rynek_form.cleaned_data['na'] na_ile = rynek_form.cleaned_data['na_ile'] ilosc = rynek_form.cleaned_data['ilosc'] dobre_dane = True ile_surowca = int(ceil(co_ile * ilosc * 1.05)) if na_ile / co_ile > 100.0 or na_ile / co_ile < 0.01: message = "Stosunek kupna do sprzedaży musi zawierać sie od 100/1 do 1/100" send_error_message(user=self.game.user, message=message) dobre_dane = False if co_ile < 0 or na_ile < 0: message = "Wartości muszą być większe od 0" send_error_message(user=self.game.user, message=message) dobre_dane = False if dobre_dane: if co == 'M': if ile_surowca > current_planet.metal: message = "Nie masz tyle metalu na planecie: %s" % ile_surowca send_error_message(user=self.game.user, message=message) dobre_dane = False else: current_planet.metal -= ile_surowca elif co == 'K': if ile_surowca > current_planet.crystal: message = "Nie masz tyle kryształu na planecie: %s" % ile_surowca send_error_message(user=self.game.user, message=message) dobre_dane = False else: current_planet.crystal -= ile_surowca elif co == 'D': if ile_surowca > current_planet.deuter: message = "Nie masz tyle deuteru na planecie: %s" % ile_surowca send_error_message(user=self.game.user, message=message) dobre_dane = False else: current_planet.deuter -= ile_surowca if Rynek.objects.select_for_update().filter( planeta__owner=self.game.user).count() > 15: message = "Osiągnąłeś limit 15 ofert na rynku, nie możesz już więcej wystawić" send_error_message(user=self.game.user, message=message) dobre_dane = False if dobre_dane: rynek_obj = rynek_form.save(commit=False) rynek_obj.planeta = current_planet rynek_obj.ratio = na_ile / co_ile rynek_obj.save() # tu tak ma byc message = "Wystawiłeś ofertę na rynku" send_info_message(user=self.game.user, message=message) return HttpResponseRedirect(url(self.urls.main)) else: message = "Musisz podać wszystkie dane" send_error_message(user=self.game.user, message=message) else: rynek_form = RynekForm(instance=rynek_obj) if "wycofaj" in self.request.GET: try: wycofanie = Rynek.objects.select_for_update().get( pk=self.request.GET['wycofaj'], planeta__owner=self.game.user) planeta_wycofania = self.game.get_planet(wycofanie.planeta_id) ile_surowca = int(wycofanie.co_ile * wycofanie.ilosc) if wycofanie.co == 'M': message = "Wycofanie oferty, przybyło metalu na planecie: %s" % ile_surowca send_info_message(user=self.game.user, message=message) planeta_wycofania.metal += ile_surowca elif wycofanie.co == 'K': message = "Wycofanie oferty, przybyło kryształu na planecie: %s" % ile_surowca send_info_message(user=self.game.user, message=message) planeta_wycofania.crystal += ile_surowca elif wycofanie.co == 'D': message = "Wycofanie oferty, przybyło deuteru na planecie: %s" % ile_surowca send_info_message(user=self.game.user, message=message) planeta_wycofania.deuter += ile_surowca wycofanie.delete() return HttpResponseRedirect(url(self.url)) except: return HttpResponseRedirect(url(self.url)) rynek_twoje = Rynek.objects.filter(planeta__owner=self.game.user) paginator = Paginator(rynek_twoje, 20, allow_empty_first_page=True) try: p = paginator.page(page) except: return HttpResponseRedirect(url(self.url)) rynek_obj = p.object_list topnav = topnav_site(self.game) return { "topnav": topnav, "rynek_twoje": rynek_obj, "rynek_form": rynek_form, "paginator": paginator, "page": page, "page_list": p, }
def site_edit(self): current_planet = self.game.get_current_planet() if self.game.userprofile: if self.request.method == 'POST': form_change = ChangePassMail(self.request.POST) if form_change.is_valid(): pass1 = form_change.cleaned_data['password1'] pass2 = form_change.cleaned_data['password2'] email = form_change.cleaned_data['email'] if pass1 == pass2 and len(pass1) >= 5: salt = sha1(str(random.random())).hexdigest()[:5] activation_key = sha1(salt + pass1).hexdigest() ZmianaHasla.objects.create(user=self.game.user, haslo=pass1, hash=activation_key) message = render_to_string('mail/change.txt', { 'link': '%s/change_pass/%s' % (URL, activation_key) }) subject = 'Link z %s' % (URL, ) subject = ''.join(subject.splitlines()) send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.game.user.email]) message = "Żeby dokończyć zmianę hasła, odbierz pocztę z emaila i kliknij w link" send_info_message(user=self.game.user, message=message) if email: salt = sha1(str(random.random())).hexdigest()[:5] activation_key = sha1(salt + email).hexdigest() ZmianaMaila.objects.create(user=self.game.user, email=email, hash=activation_key) message = render_to_string('mail/change.txt', { 'link': '%s/change_email/%s' % (URL, activation_key) }) subject = 'Link z %s' % (URL, ) subject = ''.join(subject.splitlines()) send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.game.user.email]) message = "Żeby dokończyć zmianę emaila, odbierz pocztę ze starego emaila i kliknij w link" send_info_message(user=self.game.user, message=message) form = UserprofileForm(self.request.POST, self.request.FILES, instance=self.game.userprofile) if form.is_valid(): obj = form.save(commit=False) if not obj.avatar: obj.avatar = self.game.userprofile.avatar obj.save() # tu tak ma byc return HttpResponseRedirect(url(self.url)) else: form = UserprofileForm(instance=self.game.userprofile) form_change = ChangePassMail() topnav = topnav_site(self.game) return { "topnav": topnav, "form": form, 'form_change': form_change, "u": self.game.userprofile } return HttpResponseRedirect(url(self.all_urls.main.main))
def site_main(self): self.game.userprofile_podglad_flota() current_planet = self.game.get_current_planet() if "fast_fleet_del" in self.request.REQUEST: self.game.userprofile.fast_fleet.remove( self.request.REQUEST['fast_fleet_del']) if "fast_fleet_add" in self.request.REQUEST: try: fast_planet = Planets.objects.get( pk=self.request.REQUEST['fast_fleet_add']) self.game.userprofile.fast_fleet.add(fast_planet) except: pass try: page = int(self.request.REQUEST['page']) if not page > 0: page = 1 except: page = 1 paginator = Paginator(self.game.userprofile.fast_fleet.all(), 20, allow_empty_first_page=True) if page > paginator.num_pages: page = paginator.num_pages p = paginator.page(page) fast_fleet = p.object_list if "fs_zawroc" in self.request.REQUEST: message = "Flotę zawrócono" send_info_message(user=self.game.user, message=message) zawroc(self.request.REQUEST['fs_zawroc'], self.game.user) if "g" in self.request.REQUEST and "s" in self.request.REQUEST and "p" in self.request.REQUEST and "typ" in self.request.REQUEST: try: g = int(self.request.REQUEST['g']) s = int(self.request.REQUEST['s']) p = int(self.request.REQUEST['p']) if self.request.REQUEST['typ'] == 'a': return HttpResponseRedirect( "/game/fs/atak/?g=%d&s=%d&p=%d" % (g, s, p)) elif self.request.REQUEST['typ'] == 'k': return HttpResponseRedirect( "/game/fs/kolonizuj/?g=%d&s=%d&p=%d" % (g, s, p)) elif self.request.REQUEST['typ'] == 'p': return HttpResponseRedirect( "/game/fs/przeslij/?g=%d&s=%d&p=%d" % (g, s, p)) elif self.request.REQUEST['typ'] == 't': return HttpResponseRedirect( "/game/fs/surowce/?g=%d&s=%d&p=%d" % (g, s, p)) elif self.request.REQUEST['typ'] == 'z': return HttpResponseRedirect( "/game/fs/zlom/?g=%d&s=%d&p=%d" % (g, s, p)) elif self.request.REQUEST['typ'] == 's': return HttpResponseRedirect( "/game/fs/spy/?g=%d&s=%d&p=%d" % (g, s, p)) except: message = "Wprowadź poprawne dane do ataku" send_error_message(user=self.game.user, message=message) pass dostepne_statki_tmp = Flota_p.objects.filter( planeta=current_planet, budynek__lata__gt=0, ilosc__gt=0).order_by("budynek") dostepne_statki = [] for i in dostepne_statki_tmp: d = i d.speed = int(get_speed(self.game, i.budynek, self.game.user)) dostepne_statki.append(d) # userprofile.fast_fleet.add(planeta) floty_own, floty_obce, _ = get_flota(self.game) topnav = topnav_site(self.game) return { "paginator": paginator, "fast_fleet": fast_fleet, "floty_own": floty_own, "floty_obce": floty_obce, 'topnav': topnav, "dostepne_statki": dostepne_statki }
def wiadomosc_przeslana(request, id): user = request.user try: temat = TematyMod.objects.get(pk=id, rozpatrzony=False) except: return HttpResponseRedirect(reverse("cms.views.wiadomosci_przeslane")) wiadomosci = WiadomosciMod.objects.filter(temat=temat).order_by("data") if request.method == 'POST': powod = request.POST.get('powod', '') if 'na_dni' in request.POST and 'ban_dla' in request.POST and len( powod) > 0: try: ban_dla = int(request.POST['ban_dla']) na_dni = int(request.POST['na_dni']) except: message = "Podaj wszystkie dane" send_error_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosc_przeslana", kwargs={"id": temat.pk})) if na_dni == 0: temat.uzasadnienie = powod temat.rozpatrzony = True temat.save() message = "Gracze zostali ułaskawieni" send_info_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosci_przeslane")) elif na_dni > 7 or na_dni < 1: message = "Wybierz poprawną ilość dni" send_error_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosc_przeslana", kwargs={"id": temat.pk})) if ban_dla == temat.nadawca.pk: if not user.is_superuser and temat.nadawca.is_staff: message = "Nie jesteś adminem, więc nie możesz banować moderatorów" send_error_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosc_przeslana", kwargs={"id": temat.pk})) ban = Bany.objects.create(user=temat.nadawca, do=datetime.datetime.now() + datetime.timedelta(days=na_dni), powod=powod) temat.ban = ban temat.uzasadnienie = powod temat.rozpatrzony = True temat.save() elif ban_dla == temat.odbiorca.pk: if not user.is_superuser and temat.odbiorca.is_staff: message = "Nie jesteś adminem, więc nie możesz banować moderatorów" send_error_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosc_przeslana", kwargs={"id": temat.pk})) ban = Bany.objects.create(user=temat.odbiorca, do=datetime.datetime.now() + datetime.timedelta(days=na_dni), powod=powod) temat.ban = ban temat.uzasadnienie = powod temat.rozpatrzony = True temat.save() else: message = "Wybierz właściwego gracza" send_error_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosc_przeslana", kwargs={"id": temat.pk})) message = "Gracz został zbanowany" send_info_message(user=user, message=message) return HttpResponseRedirect( reverse("cms.views.wiadomosci_przeslane")) else: message = "Podaj wszystkie dane" send_error_message(user=user, message=message) return jrender(request, "cms/wiadomosci/przeslana_wiecej.html", { "temat": temat, "wiadomosci": wiadomosci })