Merge pull request #48 from th3r00t/newui

Roll Favorites system into Development
This commit is contained in:
th3r00t
2020-07-21 23:59:08 -04:00
committed by GitHub
10 changed files with 87 additions and 43 deletions

View File

@@ -52,7 +52,7 @@ INSTALLED_APPS = [
"interface.templatetags",
"debug_toolbar",
]
AUTH_USER_MODEL = "interface.CustomUser"
AUTH_USER_MODEL = "interface.User"
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",

View File

@@ -17,6 +17,8 @@ from django.conf import settings
from django.contrib import admin
from django.urls import include, path, re_path
from django.contrib.auth import views as auth_views
from django.contrib.auth.models import User
from django.shortcuts import HttpResponse
from interface import views
urlpatterns = [
@@ -26,7 +28,6 @@ urlpatterns = [
path("sort/<_order>", views.index, name="index"),
path("flip_sort/<_order>", views.flip_sort, name="index"),
path("download/<pk>", views.download, name="download"),
path("favorite/<pk>", views.favorite, name="favorite"),
path("share/<pk>", views.share, name="share"),
path("share/<pk>", views.info, name="info"),
path("prev_page/<bookset>", views.prev_page, name="prev_page"),
@@ -40,6 +41,7 @@ urlpatterns = [
path("signup", views.signup, name="signup"),
path("login", views.userlogin, name="login"),
path('logout', views.userlogout, name='logout'),
path('favorite/<pk>', views.favorite, name='favorite'),
path(
'admin/password_reset/',
auth_views.PasswordResetView.as_view(),

View File

@@ -1,12 +1,12 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import Books, Collections, Favorites, Navigation, CustomUser
from .models import Books, Collections, Favorites, Navigation, User
from .forms import CustomUserCreationForm, CustomUserChangeForm
class CustomUserAdmin(UserAdmin):
model = CustomUser
model = User
add_form = CustomUserCreationForm
form = CustomUserChangeForm
list_display = ["email", "username", "facebook", "twitter", "sponsorid", "matrixid"]
@@ -27,4 +27,4 @@ admin.site.register(Books)
admin.site.register(Collections)
admin.site.register(Favorites)
admin.site.register(Navigation)
admin.site.register(CustomUser, CustomUserAdmin)
admin.site.register(User, CustomUserAdmin)

View File

@@ -1,23 +1,23 @@
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AuthenticationForm
from .models import CustomUser
from .models import User
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
model = User
fields = ("username", "email", "facebook", "twitter", "sponsorid", "matrixid")
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
model = User
fields = ("username", "email", "facebook", "twitter", "sponsorid", "matrixid")
class CustomUserLoginForm(AuthenticationForm):
class Meta:
Model = CustomUser
Model = User
fields = ("username", "password")
@@ -27,11 +27,11 @@ class SignUpForm(CustomUserCreationForm):
matrixid = forms.CharField(max_length=30, required=False, help_text='Optional.')
class Meta:
model = CustomUser
model = User
fields = ("username", "email", "matrixid")
class UserLoginForm(CustomUserLoginForm):
class Meta:
model = CustomUser
model = User

View File

@@ -1,7 +1,8 @@
from django.contrib.postgres.search import SearchVector
from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import AbstractUser, User
from django.contrib.auth import get_user_model
# Create your models here.
@@ -110,25 +111,38 @@ class Navigation(models.Model):
return results
class User(AbstractUser):
facebook = models.CharField(max_length=255, null=True)
twitter = models.CharField(max_length=255, null=True)
ulvl = models.IntegerField(default=1)
sponsorid = models.IntegerField(null=True)
matrixid = models.CharField(max_length=255, null=True)
def __str__(self):
return self.username
class Favorites(models.Model):
"""
pyShelfs User Database class
:param uname: User Name
:param fname: First Name
Favorites Database class
:param book: book foreign key
:param user: user foreign key
"""
class Meta:
db_table = "favorites"
def __str__(self):
return self.title
favorite = models.ManyToManyField(Books)
uname = models.ManyToManyField(settings.AUTH_USER_MODEL)
return self.book
book = models.ForeignKey(Books, on_delete=models.CASCADE)
user = models.ForeignKey(
User,
on_delete=models.CASCADE
)
def generic_search(self, query):
try:
results = Favorites.objects.annotate(search=SearchVector("uname"),).filter(
results = Favorites.objects.annotate(search=SearchVector("user"),).filter(
search=query
)
except Exception as e:
@@ -136,9 +150,3 @@ class Favorites(models.Model):
return results
class CustomUser(AbstractUser):
facebook = models.CharField(max_length=255, null=True)
twitter = models.CharField(max_length=255, null=True)
ulvl = models.IntegerField(default=1)
sponsorid = models.IntegerField(null=True)
matrixid = models.CharField(max_length=255, null=True)

View File

@@ -541,6 +541,10 @@ a.book_link {
padding: 5px 10px 5px 10px;
}
.favorite {
color: #a7ff00 !important;
}
.controls {
cursor: pointer;
}

View File

@@ -552,6 +552,9 @@ a.book_link {
font-size: x-large;
padding: 5px 10px 5px 10px;
}
.favorite{
color: #a7ff00 !important;
}
.controls{
cursor: pointer;
}

View File

@@ -74,6 +74,9 @@ $(document).ready(function(){
$('#btn_login').on('click', function(){
$('#hdr_nav_login').toggle();
});
$('.favorite_action').on('click', function(){
$(this).toggleClass('favorite');
});
$('#sortlist').change(function () {
var optionSelected = $(this).find("option:selected");
var valueSelected = optionSelected.val();
@@ -101,3 +104,4 @@ function resize_search(win_width){
$('.search_string').val("Search");
}
}

View File

@@ -39,9 +39,9 @@
<li class="nav_menu_tab"><i class="fas fa-bug"></i>&nbsp;Bug report</li>
<li class="nav_menu_tab" id="btn_login"> <i class="fa fa-user-circle" aria-hidden="true"></i>
{% if request.user.is_authenticated %}
<a href='logout' class='nav_link'>&nbsp;{{ request.user }}</a>
<a href='/logout' class='nav_link'>&nbsp;{{ request.user }}</a>
{% else %}
<a href="login" class='nav_link'>&nbsp;Login</a>
<a href="/login" class='nav_link'>&nbsp;Login</a>
{% endif %}
</li>
</div>
@@ -97,8 +97,12 @@
{% endif %}
<li class="book_tags">Tags: {{ book.tags }}</li>
<li class="book_controls">
<span class="favorite-button controls">
<a href="{% url 'favorite' pk=book.pk %}" class="book_link"><i class="fas fa-thumbs-up icon"></i></a>
<span class="favorite-button controls favorite_action">
{% if book.is_favorite %}
<a href="{% url 'favorite' pk=book.pk %}" class="book_link favorite"><i class="fas fa-thumbs-up icon"></i></a>
{% else %}
<a href="{% url 'favorite' pk=book.pk %}" class="book_link not_favorite"><i class="fas fa-thumbs-up icon"></i></a>
{% endif %}
</span>
<span class="download-button controls">
<a href="{% url 'download' pk=book.pk %}" class="book_link"><i class="fas fa-book icon"></i></a>

View File

@@ -8,10 +8,13 @@ from django.http import JsonResponse
from django.shortcuts import HttpResponse, render, redirect # render_to_response
from django.utils.text import slugify
from django.contrib.auth import login, authenticate, logout
from django.contrib import auth
from django.contrib.auth.models import User
from django.conf import settings
from django.contrib.auth import get_user_model
import json
from .forms import SignUpForm, UserLoginForm
from .models import Books, Collections, Navigation, Favorites
from .models import Books, Collections, Navigation, Favorites, User
config = Config(Path("../"))
@@ -53,6 +56,7 @@ def userlogin(request):
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
user.save()
return redirect('home')
form = UserLoginForm()
return render(request, 'login.html', {'form': form})
@@ -148,7 +152,7 @@ def prev_page(request, bookset, query=None, _limit=None, _order='title'):
)
def book_set(_order, _limit=None, _set=1, _flip=False):
def book_set(request, _order, _limit=None, _set=1, _flip=False):
"""
Get books results by set #
"""
@@ -160,7 +164,16 @@ def book_set(_order, _limit=None, _set=1, _flip=False):
books = Books.objects.all().order_by(_order).reverse()[_set_min:_set_max]
else:
books = Books.objects.all().order_by(_order)[_set_min:_set_max]
return books
try:
favorites = Favorites.objects.filter(user=request.user)
for book in books:
for favorite in favorites:
if book == favorite.book:
book.is_favorite = True
break
return books
except Exception as e:
return books
def collection(_collection, _set, _limit=None):
@@ -203,7 +216,7 @@ def download(request, pk):
"""
Download book by primary key
"""
_book = Books.objects.all().filter(pk=pk)[0]
_book = Books.objects.get(pk=pk)
_fn = hr_name(_book)
response = HttpResponse(
open(os.path.abspath(_book.file_name), "rb"), content_type="application/zip"
@@ -216,8 +229,14 @@ def favorite(request, pk):
"""
Add book to favorites bu primary key
"""
_book = Books.objects.all().filter(pk=pk)[0]
print(Favorite(book=_book, uname=User))
_d = Favorites.objects.filter(user=request.user, book=Books.objects.get(pk=pk))
if len(_d) == 1:
_d.delete()
return HttpResponse(status=204)
_f = Favorites(book=Books.objects.get(pk=pk))
_f.user = request.user
_f.save()
return HttpResponse(status=204)
def share(request, pk):
@@ -328,8 +347,8 @@ def payload(request, query, _set, _limit, _order, **kwargs):
_set_min = _set_max - _limit
_now_showing = "%s-%s"%(_set_min, _set_max)
if request.session['ascending']:
_r = book_set(_order, _limit, _set)
else: _r = book_set(_order, _limit, _set, True)
_r = book_set(request, _order, _limit, _set)
else: _r = book_set(request, _order, _limit, _set, True)
_r_len, _search = None, None
except KeyError:
_set = int(_set)
@@ -366,8 +385,8 @@ def payload(request, query, _set, _limit, _order, **kwargs):
_results.count()
except KeyError:
if request.session['ascending']:
_r = book_set(_order, _limit, _set)
else: _r = book_set(_order, _limit, _set, True)
_r = book_set(request, _order, _limit, _set)
else: _r = book_set(request, _order, _limit, _set, True)
_r_len, _search = None, None
_bookstats, _collectionstats, _collectionobject = \