[chronojump-server] Implemented players profile image functionality and updates
- From: Max Ros i Morejon <maxros src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump-server] Implemented players profile image functionality and updates
- Date: Sun, 31 Mar 2019 21:06:18 +0000 (UTC)
commit bf9d417e0d7d8fd251d3609a5992bc153b6b539f
Author: Max Ros i Morejon <mros33 gmail com>
Date: Sun Mar 31 23:03:56 2019 +0200
Implemented players profile image functionality and updates
.../chronojump_networks/organizations/api/views.py | 19 +++++++--
.../chronojump_networks/organizations/models.py | 8 ++--
.../organizations/groups/group_players_list.html | 5 ++-
.../players/add_edit_player_form.html | 27 ++----------
.../organizations/players/players_list.html | 48 +++++++++++++++-------
.../chronojump_networks/templates/pages/index.html | 12 +++---
6 files changed, 65 insertions(+), 54 deletions(-)
---
diff --git a/chronojumpserver-django/chronojump_networks/organizations/api/views.py
b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
index 43be9b4..73c09c8 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/api/views.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
@@ -4,6 +4,10 @@ from ..models import Player, GroupPlayer, Group, Station, Gym, Exercise, RFIDHis
from ..decorators import check_user_organization
from .serializers import PlayerSerializer, StationSerializer, ExerciseSerializer, GymStationsSerializer
+from django.core.files.storage import default_storage
+from django.core.files.base import ContentFile
+from django.conf import settings
+
from django.http import HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404
from rest_framework.response import Response
@@ -12,7 +16,7 @@ from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModel
from rest_framework.permissions import IsAuthenticated
from .permissions import IsCoachOfTheGroup
-from time import sleep
+from time import sleep, time
class GroupPlayerListGenericAPIView(ListAPIView):
permission_classes = (IsAuthenticated, IsCoachOfTheGroup)
@@ -118,29 +122,38 @@ class PlayerListView(ListCreateAPIView):
print("crea player")
data = dict(request.data)
# TODO: Sure there is a better way to do this
+ photo = data['image'][0]
+ new_photo = photo.name + '_' + str(int(time()))
+ print(new_photo)
o = Player.objects.create(
name = str(data['name'][0]),
- #image = str(data['image'][0]),
+ image = 'players/' + new_photo,
number = int(data['number'][0]),
height = float(data['height'][0]),
weight = float(data['weight'][0]),
rfid = str(data['rfid'][0]),
organization_id = int(self.kwargs['organization_id'])
)
+ full_path = os.path.join(settings.MEDIA_ROOT, 'players', new_photo)
+ path = default_storage.save(full_path, ContentFile(photo.read()))
s = PlayerSerializer(o)
return Response(s.data)
def put(self, request, *args, **kwars):
print("update player view")
data = dict(request.data)
+ photo = data['image'][0]
+ new_photo = photo.name + '_' + str(int(time()))
o = Player.objects.get(id=int(data['id'][0]))
o.name = str(data['name'][0])
- #o.image = str(data['image'][0])
+ o.image = 'players/' + new_photo
o.number = int(data['number'][0])
o.height = float(data['height'][0])
o.weight = float(data['weight'][0])
o.rfid = str(data['rfid'][0])
o.organization_id = int(self.kwargs['organization_id'])
+ full_path = os.path.join(settings.MEDIA_ROOT, 'players', new_photo)
+ path = default_storage.save(full_path, ContentFile(photo.read()))
o.save()
return JsonResponse({}, status=200, safe=False)
diff --git a/chronojumpserver-django/chronojump_networks/organizations/models.py
b/chronojumpserver-django/chronojump_networks/organizations/models.py
index 02150b5..88de1fd 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/models.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/models.py
@@ -219,7 +219,7 @@ class Player(ChronojumpBaseModel):
height = models.FloatField(default=0)
weight = models.FloatField(default=0)
rfid = models.CharField(max_length=23, unique=True)
- image = models.FileField(upload_to='players', null=True, blank=True)
+ image = models.FileField(upload_to='players', null=True, blank=True,
default='chronojump_networks/static/images/no_image.png')
is_available = models.BooleanField(default=True)
number = models.IntegerField(null=True,blank=True)
@@ -242,11 +242,9 @@ class Group(ChronojumpBaseModel):
db_column='responsibleId')
gym = models.ForeignKey(Gym,
- on_delete=models.SET_NULL,
+ on_delete=models.CASCADE,
related_name="gym_groups",
- db_column='gymId',
- blank=True,
- null=True)
+ db_column='gymId')
class GroupCoach(models.Model):
diff --git
a/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
b/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
index b350905..ce68fe3 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
@@ -496,8 +496,9 @@
/* initials operations for task */
function newTaskInitialOperations(player_id) {
// Load station from assigned gym to group
-
- console.log("initial gym is " + "{{ group.gym.name}}");
+ console.log("nom grup -{{ group.name}}-");
+ console.log("nom gym -{{ group.gym}}-");
+ console.log("initial gym is -{{ group.gym.name}}-");
$('#numSets').val('1');
$('#numReps').val('1');
$('#taskLoad').val('');
diff --git
a/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
b/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
index 124ec6b..ad76e85 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
@@ -19,7 +19,9 @@
<div class="col-sm-4">
<div class="form-group col-sm-4">
<label for="photo">{% trans 'Photography' %}</label>
- <img src="..." alt="..." class="img-thumbnail">
+ <p>
+ <input id="id_image" type="file" class="" name="image"
enctype='multipart/form-data'>
+ </p>
</div>
<div class="form-group">
<label for="number">{% trans 'Number' %}</label>
@@ -71,26 +73,3 @@
<!-- /.modal-dialog -->
</div>
-
-<!--
-<script>
-
-$(document).ready(function() {
- $('#btn_read_rfid').click(function() {
- $.ajax({
- 'url': "{% url 'api_organizations:register_rfid' %}",
- 'method': 'GET',
- success: function(data) {
- console.log(data);
- $('#input_rfid').val(data.rfid);
- },
- error: function (request, status, error) {
- alert(request.msg);
- }
-
- })
- })
-
-}) //end of document ready
-
-</script>-->
diff --git a/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
b/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
index 5827e0a..c037953 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
@@ -16,7 +16,7 @@
<div class="page-header row">
<div class="col-sm-9">
- <!--<img src="/media/{{ user.organization.image }}" class="img-fluid float-left" width="48px"
height="48px" style="margin-top:12px;margin-right:10px;"/>-->
+ <img src="/media/{{ user.organization.image }}" class="img-fluid float-left" width="48px" height="48px"
style="margin-top:12px;margin-right:10px;"/>
<h1 class="display-4">{% trans 'Players list' %}</h1>
</div>
@@ -77,11 +77,11 @@
data: 'image',
orderable: false,
render: function(value, type, row) {
- if (value) {
+ if (value) {
var src = value;
} else {
// Otherwise show the no_image icon
- var src = '/static/images/no_image.png';
+ var src = 'chronojump_networks/static/images/no_image.png';
}
var html = '<img src="' + src + '" class="img-fluid rounded" width="32px"
height="32px"/>';
return html;
@@ -221,7 +221,7 @@
$('#weight').val('');
$('#number').val('');
$('#input_rfid').val('');
- //$('image').val('');
+ $('#id_image').val('');
}
$('#btn_read_rfid').click(function() {
@@ -244,8 +244,7 @@
if($('#input_rfid').val()=="" || $('#height').val()=="" || $('#weight').val()=="" ||
$('#fullname').val()=="") alert("{% trans 'All fields must be filled' %}");
else {
var player = serializePlayer();
- console.log(player.id);
- if(player.id) {
+ if($('#personId').val()) {
console.log("update");
//update player
updatePlayer(player);
@@ -259,24 +258,36 @@
// Get all the values in the form into json object
function serializePlayer() {
+ console.log("id = " + $('#personId').val());
let player_id = $('#personId').val();
let player_name = $('#fullname').val();
let player_height = $('#height').val();
let player_weight = $('#weight').val();
-// let player_image = $('#photo').val();
let player_number = $('#number').val();
let player_rfid = $('#input_rfid').val();
- var player = {
+ var formdata = new FormData();
+ jQuery.each($('#id_image')[0].files, function(i, file) {
+ formdata.append('image', file);
+ console.log(file);
+ });
+ formdata.append('id',player_id);
+ formdata.append('name',player_name);
+ formdata.append('height',player_height);
+ formdata.append('weight',player_weight);
+ formdata.append('number',player_number);
+ formdata.append('rfid',player_rfid);
+ console.log(formdata);
+ //if(player_image=='') player_image = 'chronojump_networks/static/images/no_image.png'
+ /*var player = {
'id': player_id,
'name': player_name,
'height': player_height,
'weight': player_weight,
-// 'image': player_image,
+ 'image': player_image,
'number': player_number,
'rfid': player_rfid
- }
- console.log(player);
- return player;
+ }*/
+ return formdata;
}
// Dump values from player into Modal Form
@@ -288,8 +299,11 @@
$('#weight').val(player.weight);
$('#number').val(player.number);
$('#input_rfid').val(player.rfid);
- //$('image').val('');
+ console.log(player.image);
+ /*if(player.image.url=='chronojump_networks/static/images/no_image.png') $('#id_image').val('');
+ else $('#id_image').val(player.image.url);*/
+ $('#image').val(player.image);
}
function putPlayer(player) {
@@ -299,6 +313,9 @@
'url': "{% url 'api_organizations:players_list' organization_id=user.organization.id %}",
'method': 'POST',
'data': player,
+ 'cache': false,
+ 'contentType' : false,
+ 'processData' : false,
success: function(data) {
alert("{% trans 'The player has been created' %}");
table_players.ajax.reload(enablePlayersTableFunctionality,false);
@@ -318,6 +335,9 @@
'url': "{% url 'api_organizations:players_list' organization_id=user.organization.id %}",
'method': 'PUT',
'data': player,
+ 'cache': false,
+ 'contentType' : false,
+ 'processData' : false,
success: function(data) {
alert("{% trans 'The player has been updated' %}");
table_players.ajax.reload(enablePlayersTableFunctionality, false);
@@ -330,7 +350,7 @@
})
}
-
+
});
</script>
{% endblock %}
diff --git a/chronojumpserver-django/chronojump_networks/templates/pages/index.html
b/chronojumpserver-django/chronojump_networks/templates/pages/index.html
index 87910fc..445ac10 100644
--- a/chronojumpserver-django/chronojump_networks/templates/pages/index.html
+++ b/chronojumpserver-django/chronojump_networks/templates/pages/index.html
@@ -58,9 +58,9 @@
<div class="col-sm-6">
<a class="btn btn-outline-dark btn-block font-weight-bold text-uppercase" href="{% url
'results:list' %}">{% trans 'Results' %}</a>
</div>
- <!--<div class="col-sm-6">
+ <div class="col-sm-6">
<a class="btn btn-outline-dark btn-block font-weight-bold text-uppercase" href="#">{% trans
'Sprints' %}</a>
- </div>-->
+ </div>
</div>
{% if user.groups_by_coach %}
<h2 class="text-center">{% trans 'My Groups' %}</h2>
@@ -87,18 +87,18 @@
{% if user.id == user.organization.responsible.id %}
<h2 class="text-center">{% trans 'Organization options' %}</h2>
<div class="row buttons" >
- <!--<div class="col-sm-6 col-md-3">
+ <div class="col-sm-6 col-md-3">
<a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans
'Staff' %}</a>
- </div>-->
+ </div>
<div class="col-sm-6 col-md-3">
<a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="{% url
'organizations:players_list' organization_id=user.organization.id %}">{% trans 'Players' %}</a>
</div>
- <!--<div class="col-sm-6 col-md-3">
+ <div class="col-sm-6 col-md-3">
<a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans
'Groups' %}</a>
</div>
<div class="col-sm-6 col-md-3">
<a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans
'Gyms' %}</a>
- </div>-->
+ </div>
</div>
{% endif %}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]