final TOUCHESSS

This commit is contained in:
Yamozha 2021-03-15 20:16:14 +02:00
parent 9de29a0ab4
commit 1913e45328
55 changed files with 352 additions and 70 deletions

Binary file not shown.

View File

@ -1,19 +1,27 @@
from django.shortcuts import render
import os.path
from users.models import Balance
from django.conf import settings
def homePage(request):
iter_var = 0
all_balance = []
try:
balObject = Balance.objects.filter(user=request.user.id)
userBalance = balObject.values("balanceValue")
userQR = f"Name = {request.user.username}, Date Joined = {request.user.date_joined.date()}, ID = {request.user.id}, Balance = {userBalance[0]['balanceValue']}"
a = Balance.objects.all()
for user in a:
all_balance.append(user.balanceValue)
print(f"{all_balance}")
limited_coins = settings.ALL_COINS - sum(all_balance)
context = {
"userQR":userQR,
"fullbalance": limited_coins,
"currencyTotal": sum(all_balance),
"userBalance": userBalance[0]["balanceValue"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -47,19 +47,23 @@
{% if image %}
<form method="post">
{% csrf_token %}
<p style="text-align: center;">Качено от: <br><p style="border:2px; border-color: #4CAF50; border-style: dashed; text-align: center;">{{username}}</p></p><br><br>
<p style="text-align: center;">Качено от: <br><p style="border:2px; border-color: #4CAF50; border-style: dashed; text-align: center;">{{username}}</p></p><br>
<div class="choice">
{% if is_video %}
<video style="display: block; margin: 0 auto; max-width:500px; max-height: 500px;" width="500" controls>
<source src="/media/{{ image }}" type="video/mp4">
</video>
{% else %}
<img src="/media/{{ image }}" width="500" width="500" ><br>
{% endif %}
</div><br>
<p style="text-shadow: 0 0 2px #28a745; float: left;">{{time}} <p style="text-shadow: 0 0 2px #28a745; float: right;">{{date}}</p></p>
</div>
<br><br><br>
<div class="choiceButtons">
<input name="isValid" type="submit" value="Valid" class="Buttons">Валидна</input>
<input name="isValid" type="submit" value="Valid" class="Buttons">
<input name="isValid" type="submit" value="Invalid" class="Buttons">
</form>

View File

@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}reValuate{% endblock %}</title>
{% load static %}
{% load qr_code %}
{% block optionalParams %} {% endblock %}
<!-- Required meta tags -->
@ -27,41 +28,43 @@
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item d-none d-md-block" >
{% if user.is_authenticated %}
<a class="nav-link" href="/upload/">Качи</a>
{% endif %}
</li>
<li class="nav-item d-none d-md-block" >
<li class="nav-item d-none d-md-block" >
{% if user.is_superuser %}
<a class="nav-link" href="/admin/">Админ</a>
{% endif %}
{% if user.is_superuser %}
<a class="nav-link" href="/admin/">Админ</a>
{% endif %}
</li>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown ">
<ul class="navbar-nav ml-auto" style="right: 0; left: auto;">
<li class="nav-item dropdown " >
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% if user.is_authenticated %}
{{ user.username }}
{% else %}
Акaунт
{% endif %}
</a>
<div class="dropdown-menu animate slideIn" aria-labelledby="navbarDropdown" >
{{ user.username }}
{% else %}
Акaунт
{% endif %}
</a>
<div class="dropdown-menu animate slideIn dropdown-menu-right" style="text-align: center;" aria-labelledby="navbarDropdown" >
{% if user.is_authenticated %}
<a class="dropdown-item "href="/view_media/">Прогрес</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item "href="{%url 'logout'%}">Излизане </a>
<div class="dropdown-divider"></div>
{% else %}
<a class="dropdown-item" href="/users/signup"> Регистрация </a>
<a class="dropdown-item" href="/users/signup"> Регистрация </a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/users/login"> Влизане </a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/users/login"> Влизане </a>
<div class="dropdown-divider"></div>
{% endif %}
</div>
</li>

View File

@ -4,7 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% load static %}
<link rel="stylesheet" href="/static/home/css/main.css" />
{% load qr_code %}
<link rel="stylesheet" href="/static/home/css/main.css" />
<noscript><link rel="stylesheet" href="/static/home/css/noscript.css" /></noscript>
<script src="http://github.hubspot.com/odometer/odometer.js"></script>
<link rel="stylesheet" href="https://raw.githubusercontent.com/HubSpot/odometer/master/themes/odometer-theme-car.css" />
@ -42,8 +43,8 @@
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown ">
<ul class="navbar-nav ml-auto" style="right: 0; left: auto;">
<li class="nav-item dropdown " >
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% if user.is_authenticated %}
{{ user.username }}
@ -51,8 +52,10 @@
Акaунт
{% endif %}
</a>
<div class="dropdown-menu animate slideIn" aria-labelledby="navbarDropdown" >
<div class="dropdown-menu animate slideIn dropdown-menu-right" style="text-align: center;" aria-labelledby="navbarDropdown" >
{% if user.is_authenticated %}
<div class="dropdown-item"> {% qr_from_text userQR size="T" %} </div>
<div class="dropdown-divider"></div>
<a class="dropdown-item "href="/view_media/">Прогрес</a>
<div class="dropdown-divider"></div>
@ -144,7 +147,7 @@
<div class="row gtr-150">
<div class="col-6 col-12-medium">
<header class="major">
<h2>Раздадени точки:<br />
<h2>Остават още:<br />
</h2>
</header>
@ -156,7 +159,7 @@
-moz-background-clip: text;
-moz-text-fill-color: transparent;
font-size:70px;
">{{ currencyTotal }}</div>
">{{ fullbalance }} reCoins</div>
</div>
</div>

View File

@ -0,0 +1,29 @@
{% extends 'base.html' %}
{% block title %} Update Balance {% endblock %}
{% block content %}
<div class="centered">
{% if request.user.is_superuser %}
<p>Hello, {{ user.username }} !</p>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input name="user_instance" id="user_instance" placeholder="Pencho Slaveikov"><br>
<input name="tokens" id="tokens" placeholder="523...">
<button type="submit">Upload</button>
</form>
{% else %}
<h1>Unauthorized</h1>
</div>
{% endif %}
{% endblock %}

View File

@ -24,8 +24,14 @@
{% for i in get_status reversed %}
<div class="slide" width=500px height=500px>
<img src="/media/{{ i.image }}" style=" display: block; margin: 0 auto; max-width:500px; max-height: 500px;"/>
<p style="text-shadow: 0 0 2px #28a745; float: left;">{{forloop.counter}}/{{img_number}} <p style="text-shadow: 0 0 2px #28a745; float: right;">{{i.date}}</p></p>
{% if i.is_video %}
<video style="display: block; margin: 0 auto; max-width:500px; max-height: 500px;" width="500" controls>
<source src="/media/{{ i.image }}" type="video/mp4">
</video>
{% else %}
<img src="/media/{{ i.image }}" style=" display: block; margin: 0 auto; max-width:500px; max-height: 500px;"/>
{% endif %}
<p style="text-shadow: 0 0 2px #28a745; float: left;">{{forloop.counter}}/{{img_number}} <p style="text-shadow: 0 0 2px #28a745; float: right;">{{i.date}}</p></p>
<br><br>
{% if i.reason %}
<p class="animate__animated animate__headShake" style="text-align: center;"> ❌ Снимката ти е маркирана като невалидна. Ако мислиш че има грешка ни изпратете <a href="mailto:boyan+revaluate@bobokara.com">имейл.</a></p>

View File

@ -70,7 +70,7 @@
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="image" style="font-size: 32px;">Качи снимка! </label><br><br><br>
<input id="image" type="file" name="image" required><br><br><br><br>
<input id="image" style="margin: 0 auto;" type="file" name="image" required><br>
<br>
<button class="Buttons" type="submit">Качи!</button>
</form>

View File

@ -1,12 +1,12 @@
from django import forms
from .models import Image
from .models import Media
class ImageForm(forms.ModelForm):
"""Form for the image model"""
class Meta:
model = Image
fields = ('image',)
model = Media
fields = ['image']
# class VideoForm(forms.ModelForm):
# """Form for the image model"""

View File

@ -0,0 +1,20 @@
# Generated by Django 3.1.6 on 2021-03-15 15:45
from django.db import migrations, models
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
('upload', '0014_image_time'),
]
operations = [
migrations.AlterField(
model_name='image',
name='image',
field=models.ImageField(upload_to=upload.models.imagesPath, validators=[upload.validators.imageValidate]),
),
]

View File

@ -0,0 +1,35 @@
# Generated by Django 3.1.6 on 2021-03-15 16:14
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('upload', '0015_auto_20210315_1745'),
]
operations = [
migrations.CreateModel(
name='Videos',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('video', models.FileField(upload_to=upload.models.videosPath, validators=[upload.validators.videoValidate])),
('tokenized', models.BooleanField(blank=True, default=None, max_length=3, null=True)),
('reason', models.CharField(max_length=120)),
('date', models.DateField(default=datetime.date.today)),
('time', models.TimeField(auto_now=True)),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'video',
'verbose_name_plural': 'videos',
},
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.1.6 on 2021-03-15 16:38
from django.db import migrations, models
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
('upload', '0016_videos'),
]
operations = [
migrations.AddField(
model_name='image',
name='video',
field=models.FileField(default=None, upload_to=upload.models.videosPath, validators=[upload.validators.videoValidate]),
),
migrations.DeleteModel(
name='Videos',
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 3.1.6 on 2021-03-15 16:39
from django.db import migrations, models
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
('upload', '0017_auto_20210315_1838'),
]
operations = [
migrations.AlterField(
model_name='image',
name='video',
field=models.FileField(blank=True, default=None, null=True, upload_to=upload.models.videosPath, validators=[upload.validators.videoValidate]),
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 3.1.6 on 2021-03-15 16:41
from django.db import migrations, models
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
('upload', '0018_auto_20210315_1839'),
]
operations = [
migrations.AlterField(
model_name='image',
name='image',
field=models.ImageField(blank=True, null=True, upload_to=upload.models.imagesPath, validators=[upload.validators.imageValidate]),
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 3.1.6 on 2021-03-15 16:47
from django.db import migrations, models
import upload.models
import upload.validators
class Migration(migrations.Migration):
dependencies = [
('upload', '0019_auto_20210315_1841'),
]
operations = [
migrations.AlterField(
model_name='image',
name='image',
field=models.FileField(blank=True, null=True, upload_to=upload.models.imagesPath, validators=[upload.validators.imageValidate]),
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 3.1.6 on 2021-03-15 16:48
from django.db import migrations, models
import upload.models
class Migration(migrations.Migration):
dependencies = [
('upload', '0020_auto_20210315_1847'),
]
operations = [
migrations.AlterField(
model_name='image',
name='image',
field=models.FileField(blank=True, null=True, upload_to=upload.models.imagesPath),
),
migrations.AlterField(
model_name='image',
name='video',
field=models.FileField(blank=True, default=None, null=True, upload_to=upload.models.videosPath),
),
]

View File

@ -0,0 +1,22 @@
# Generated by Django 3.1.6 on 2021-03-15 16:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('upload', '0021_auto_20210315_1848'),
]
operations = [
migrations.RemoveField(
model_name='image',
name='video',
),
migrations.AddField(
model_name='image',
name='is_video',
field=models.BooleanField(default=False),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 3.1.6 on 2021-03-15 17:01
from django.conf import settings
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('upload', '0022_auto_20210315_1852'),
]
operations = [
migrations.RenameModel(
old_name='Image',
new_name='Media',
),
]

View File

@ -13,14 +13,15 @@ from datetime import date
def imagesPath(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'images/{0}/{1}'.format(instance.user.id, filename)
return '{0}/{1}'.format(instance.user.id, filename)
def videosPath(instance,filename):
return f"videos/{instance.user.id}/{filename}"
return f"{instance.user.id}/videos/{filename}"
class Image(models.Model):
class Media(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
image = models.ImageField(upload_to=imagesPath,validators=[imageValidate], unique=True)
image = models.FileField(upload_to=imagesPath, blank=True, null=True,)
is_video = models.BooleanField(default=False)
tokenized = models.BooleanField(blank=True, null=True, default=None, max_length=3)
reason = models.CharField(max_length=120)
date = models.DateField(default=date.today)
@ -31,12 +32,14 @@ class Image(models.Model):
verbose_name = 'image'
verbose_name_plural = 'images'
# class Videos(models.Model):
# user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
# video = models.FileField(upload_to=videosPath, validators=[videoValidate])
# tokenized = models.BooleanField(blank=True, null=True, default=None, max_length=3)
# reason = models.CharField(max_length=120)
# date = models.DateField(default=date.today)
# time = models.TimeField(auto_now=True)
# class Meta:

View File

@ -1,9 +1,9 @@
from django.shortcuts import render, redirect
import os.path
import os
from .forms import ImageForm
from django.core.files.storage import FileSystemStorage
from .models import Image
from .models import Media
from .forms import ImageForm
from django.conf import settings
def uploadContent(request):
@ -27,13 +27,30 @@ def imageUpload(request):
print(request.user.id)
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
userIdModel = Image.objects.filter(user=request.user.id)
img_obj = form.instance
img_obj.user = request.user
form.save()
return render(request, 'uploadImage.html', {'form': form, 'img_obj': img_obj})
if "image" in request.FILES['image'].content_type:
print("Image")
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
img_obj = form.instance
img_obj.user = request.user
form.save()
return render(request, 'uploadImage.html', {'form': form, 'img_obj': img_obj})
elif "video" in request.FILES['image'].content_type:
form = ImageForm(request.POST, request.FILES)
print("Video")
print(request.FILES['image'])
if form.is_valid():
video_obj = form.instance
video_obj.user = request.user
video_obj.is_video = True
form.save()
return render(request, 'uploadImage.html', {'form': form, 'img_obj': video_obj})
else:
raise Exception("What")
else:
raise TypeError("Invalid File")
else:
form = ImageForm()
@ -56,8 +73,9 @@ def imageUpload(request):
def viewMedia(request):
get_status = Image.objects.filter(user_id=request.user.id)
img_list = os.listdir(settings.MEDIA_ROOT + f"images/{request.user.id}/")
get_status = Media.objects.filter(user_id=request.user.id)
img_list = os.listdir(settings.MEDIA_ROOT + f"{request.user.id}/")
context = {
"id":request.user.id,

View File

@ -5,7 +5,7 @@ from .models import Balance
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from django.contrib import messages
from upload.models import Image
from upload.models import Media
# need to make oauth facebook login
class SignUpView(generic.CreateView):
@ -40,17 +40,18 @@ def removeBalance(request):
balRem = None
if request.method == "POST":
tokens = request.POST["tokens"]
tokens = int(tokens)
tokens = int(tokens) * -1
user_given = request.POST["user_instance"]
try:
user_instance = Balance.objects.get(user=user_given)
sum_balance = user_instance.balanceValue - tokens
balAdd = Balance(balanceValue=sum_balance, user_id=user_instance)
balAdd.save()
print(balAdd)
sum_balance = user_instance.balanceValue + tokens
balRem = Balance(balanceValue=sum_balance, user_id=user_instance)
balRem.save()
print(balRem)
except Balance.DoesNotExist:
messages.error(request, f"User{user_given} doesn't have balance")
return render(request,"getBalance.html", {"userBalance":balAdd})
balRem = Balance(balanceValue=tokens, user_id=user_given)
balRem.save()
return render(request,"getBalance.html", {"userBalance":balRem})
else:
return render(request,"removeBalance.html")
@ -65,9 +66,10 @@ def getBalance(request):
def adminView(request):
try:
latestPicture = Image.objects.filter(tokenized=None)
latestPicture, userId, date, time = latestPicture.values("image")[0]["image"], latestPicture.values("user_id")[0]["user_id"], latestPicture.values("date")[0]["date"], latestPicture.values("time")[0]["time"]
latestPicture = Media.objects.filter(tokenized=None)
latestPicture, userId, date, time, is_video = latestPicture.values("image")[0]["image"], latestPicture.values("user_id")[0]["user_id"], latestPicture.values("date")[0]["date"], latestPicture.values("time")[0]["time"], latestPicture.values("is_video")[0]["is_video"]
username = User.objects.get(pk=userId)
if request.method == "POST":
if request.POST['isValid'] == "Valid":
try:
@ -80,21 +82,21 @@ def adminView(request):
balAdd = Balance(balanceValue=5, user_id=userId)
balAdd.save()
imageObj = Image.objects.get(image=latestPicture, user_id=userId)
imageObj = Media.objects.get(image=latestPicture, user_id=userId)
imageObj.tokenized = True
imageObj.save()
return redirect("/admin/")
elif request.POST['isValid'] == "Invalid":
imageObj = Image.objects.get(image=latestPicture, user_id=userId)
imageObj.tokenized=True
imageObj = Media.objects.get(image=latestPicture, user_id=userId)
imageObj.tokenized=False
imageObj.reason="Invalid"
imageObj.save()
return render(request, "adminView.html", {"time":time, "date":date,"image":latestPicture, "userId":userId, "username":username})
return render(request, "adminView.html", {"time":time, "date":date,"image":latestPicture, "userId":userId, "username":username, "is_video":is_video})
else:
return render(request, "adminView")
return render(request, "adminView.html", {"time":time, "date":date,"image":latestPicture, "userId":userId, "username":username})
return render(request, "adminView.html", {"time":time, "date":date,"image":latestPicture, "userId":userId, "username":username, "is_video":is_video})
except IndexError:
return render(request, "adminView.html")

View File

@ -47,6 +47,7 @@ INSTALLED_APPS = [
'home',
'users',
'upload',
'qr_code',
]
@ -140,6 +141,7 @@ LOGOUT_REDIRECT_URL = "/"
EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
EMAIL_FILE_PATH = str(BASE_DIR.joinpath('sent_emails'))
ALL_COINS = 1000000
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

View File

@ -21,7 +21,7 @@ from django.conf.urls.static import static
from django.contrib.auth import views
from django.views.generic.base import TemplateView
from upload.views import uploadContent, imageUpload, viewMedia
from users.views import getBalance, addToBalance, adminView
from users.views import getBalance, addToBalance, adminView, removeBalance
urlpatterns = [
path("", homePage, name='home'),
@ -33,6 +33,7 @@ urlpatterns = [
path("view_media/", viewMedia, name="All Media"),
# path("get_balance/",getBalance, name="Balance" ),
path("add_balance/", addToBalance, name="Add"),
path("remove_balance/", removeBalance, name="Add"),
path("admin/", adminView, name="admin")
]
if settings.DEBUG: