Pārlūkot izejas kodu

Using sessions to define a personalized counter

Denis Merigoux 9 gadi atpakaļ
vecāks
revīzija
af73a255de

+ 1 - 1
counter/templates/baseTemplate.html

@@ -18,7 +18,7 @@
18 18
 		}
19 19
 
20 20
 		.seum-counter {
21
-			height: 125px;
21
+			height: 75px;
22 22
 			overflow: auto;
23 23
 		}
24 24
 

+ 2 - 2
counter/templates/counterTemplate.html

@@ -11,7 +11,7 @@
11 11
         <div class="panel-heading">
12 12
           <h2 class="panel-title">Dernier seum {% if not counter.lastReset.noSeum %}<span class="badge pull-right">{{ counter.seumCount }}</span>{% endif %}</h2>
13 13
         </div>
14
-        <div class="seum-counter panel-body">
14
+        <div class="seum-counter panel-body" style="height:125px" id="container{{counter.id}}">
15 15
           {% if counter.lastReset.noSeum %}
16 16
           <strong>N'a pas encore eu le seum.</strong>
17 17
           <br> {% else %}
@@ -20,7 +20,7 @@
20 20
 
21 21
           <p>{{ counter.lastReset.reason }}</p>
22 22
           <div class="text-center">
23
-            <button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
23
+            <button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';getElementById('container{{counter.id}}').style.height='225px';">Remettre à zéro</button>
24 24
           </div>
25 25
           <form style="display:none" id="counter{{counter.id}}" action="{% url 'reset-counter' %}" method="post">
26 26
             {% csrf_token %}

+ 74 - 17
counter/templates/homeTemplate.html

@@ -3,44 +3,101 @@
3 3
 	<h1>SeumBook™</h1>
4 4
 </div>
5 5
 <div class="container-fluid">
6
-	<div class="row">
7
-		{% for counter in counters %}
8
-		<div class="col-md-4 col-sm-6 col-lg-3">
9
-			<div class="panel panel-{{counter.CSSclass}}" style="opacity:{{counter.opacity}}">
6
+	{% if chooseCounter %}
7
+	<div class="row" id="my-counter">
8
+		<div class="col-sm-12">
9
+			<div class="panel panel-warning">
10 10
 				<div class="panel-heading">
11
-					<a class="counter-link" href="{% url 'counter' id_counter=counter.id %}">
12
-						<h2 class="panel-title">{{ counter.trigramme }} <small>{{ counter.name }}</small>
13
-							{% if not counter.lastReset.noSeum %}<span class="pull-right badge">{{ counter.seumCount }}</span>{% endif %}
11
+					<h2 class="panel-title">Mon compteur</h2>
12
+				</div>
13
+				<div class="panel-body">
14
+					<p>Choisis ton compteur pour qu'il apparaisse en haut de la liste quand tu reviendras sur le site !</p>
15
+					<form action="{% url 'set-my-counter'%}" method="post">
16
+						{% csrf_token %}
17
+						<div class="form-group">
18
+							<label for="myCounterSelect">Mon trigramme:</label>
19
+							<select class="form-control" name="myCounter">
20
+								{% for counter in counters %}
21
+								<option value="{{ counter.id }}">{{ counter.trigramme }} ({{ counter.name }})</option>
22
+								{% endfor %}
23
+							</select>
24
+						</div>
25
+						<input type="hidden" name="redirect" value="{% url 'home' %}"></input>
26
+						<div class="text-center">
27
+							<button type="submit" class="btn btn-default btn-success">Définir mon compteur</button>
28
+						</div>
29
+					</form>
30
+				</div>
31
+			</div>
32
+		</div>
33
+	</div>
34
+	{% else %}
35
+	<div class="row" id="my-counter">
36
+		<div class="col-sm-12">
37
+			<div class="panel panel-warning">
38
+				<div class="panel-heading">
39
+					<a class="counter-link" href="{% url 'counter' id_counter=myCounter.id %}">
40
+						<h2 class="panel-title">{{ myCounter.trigramme }} <small>{{ myCounter.name }}</small>
41
+							{% if not myCounter.lastReset.noSeum %}<span class="pull-right badge">{{ myCounter.seumCount }}</span>{% endif %}
14 42
 						</h2>
15 43
 					</a>
16 44
 				</div>
17
-				<div class="seum-counter panel-body">
18
-					{% if counter.lastReset.noSeum %}
45
+				<div class="seum-counter panel-body" id="container{{myCounter.id}}" style="height:125px">
46
+					{% if myCounter.lastReset.noSeum %}
19 47
 					<strong>N'a pas encore eu le seum.</strong>
20 48
 					<br> {% else %}
21
-					<strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
49
+					<strong>Je n'ai pas eu le seum depuis {{ myCounter.lastReset.formatted_delta }}.</strong>
22 50
 					<br> {% endif %}
23 51
 
24
-					<p>{{ counter.lastReset.reason }}</p>
25
-					<div class="text-center">
26
-						<button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
52
+					<p>{{ myCounter.lastReset.reason }}</p>
53
+					<div class="text-center" id="button{{myCounter.id}}">
54
+						<form action="{% url 'reset-my-counter' %}" method="post">
55
+							{% csrf_token %}
56
+							<button class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{myCounter.id}}').style.display='inline';getElementById('button{{myCounter.id}}').style.display='none';getElementById('container{{myCounter.id}}').style.height='225px';">Remettre à zéro</button>
57
+							<input type="hidden" name="redirect" value="{% url 'home' %}"></input>
58
+							<button type="submit" class="btn btn-default">Changer mon compteur</button>
59
+						</form>
27 60
 					</div>
28
-					<form style="display:none" id="counter{{counter.id}}" action="{% url 'reset-counter' %}" method="post">
61
+					<form style="display:none" id="counter{{myCounter.id}}" action="{% url 'reset-counter' %}" method="post">
29 62
 						{% csrf_token %}
30 63
 						<div class="form-group">
31 64
 							<label for="reason">Motif du seum :</label>
32 65
 							<textarea class="form-control" name="reason"></textarea>
33 66
 						</div>
34
-						<input type="hidden" name="counter" value="{{counter.id}}"></input>
67
+						<input type="hidden" name="counter" value="{{myCounter.id}}"></input>
35 68
 						<input type="hidden" name="redirect" value="{% url 'home' %}"></input>
36 69
 						<div class="text-center">
37
-							<button type="submit" class="btn btn-default btn-success">Foutre le seum</button>
70
+							<button type="submit" class="btn btn-default btn-success">J'ai le seum</button>
38 71
 						</div>
39 72
 					</form>
40 73
 				</div>
41 74
 			</div>
42 75
 		</div>
43
-		{% endfor %}
76
+	</div>
77
+	{% endif %}
78
+	<div class="row">
79
+		{% for counter in counters %} {% if chooseCounter or not counter.id == myCounter.id %}
80
+		<div class="col-md-4 col-sm-6 col-lg-3">
81
+			<div class="panel panel-{{counter.CSSclass}}" style="opacity:{{counter.opacity}}">
82
+				<div class="panel-heading">
83
+					<a class="counter-link" href="{% url 'counter' id_counter=counter.id %}">
84
+						<h2 class="panel-title">{{ counter.trigramme }} <small>{{ counter.name }}</small>
85
+							{% if not counter.lastReset.noSeum %}<span class="pull-right badge">{{ counter.seumCount }}</span>{% endif %}
86
+						</h2>
87
+					</a>
88
+				</div>
89
+				<div class="seum-counter panel-body">
90
+					{% if counter.lastReset.noSeum %}
91
+					<strong>N'a pas encore eu le seum.</strong>
92
+					<br> {% else %}
93
+					<strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
94
+					<br> {% endif %}
95
+
96
+					<p>{{ counter.lastReset.reason }}</p>
97
+				</div>
98
+			</div>
99
+		</div>
100
+		{% endif %} {% endfor %}
44 101
 	</div>
45 102
 	<div class="row">
46 103
 		<div class="col-sm-12">

+ 2 - 0
counter/urls.py

@@ -6,4 +6,6 @@ urlpatterns = [
6 6
     url(r'^$', views.home,name="home"),
7 7
     url(r'^reset-counter/',views.resetCounter,name="reset-counter"),
8 8
     url(r'^counter/(?P<id_counter>\d+)$', views.counter, name="counter"),
9
+    url(r'^set-my-counter/',views.setMyCounter,name="set-my-counter"),
10
+    url(r'^reset-my-counter/',views.resetMyCounter,name="reset-my-counter"),
9 11
 ]

+ 47 - 1
counter/views.py

@@ -28,10 +28,38 @@ def home(request):
28 28
     maxJSS = 0
29 29
     bestSeumeursNumber = 15
30 30
     # Display counters
31
-    counters = Counter.objects.all()
32 31
     lastResets = []
33 32
     # Calculates infos for each counter
34 33
     timezero = timedelta(0)
34
+
35
+    # First we determine if the session
36
+    if 'my-counter' in request.session:
37
+        chooseCounter = False
38
+        try:
39
+            myCounter = Counter.objects.get(id=request.session['my-counter'])
40
+            lastReset = Reset.objects.filter(
41
+                counter=myCounter).order_by('-timestamp')
42
+            if (lastReset.count() == 0):
43
+                # This person never had the seum
44
+                myCounter.lastReset = Reset()
45
+                myCounter.lastReset.delta = timezero
46
+                myCounter.lastReset.noSeum = True
47
+            else:
48
+                myCounter.lastReset = lastReset[0]
49
+                myCounter.lastReset.noSeum = False
50
+                myCounter.lastReset.delta = datetime.now(
51
+                ) - myCounter.lastReset.timestamp.replace(tzinfo=None)
52
+                myCounter.seumCount = Reset.objects.filter(
53
+                    counter=myCounter).count()
54
+            myCounter.lastReset.formatted_delta = format_timedelta(
55
+                myCounter.lastReset.delta, locale='fr', threshold=1)
56
+        except ObjectDoesNotExist:
57
+            chooseCounter = True
58
+    else:
59
+        myCounter = None
60
+        chooseCounter = True
61
+
62
+    counters = Counter.objects.all()
35 63
     for counter in counters:
36 64
         lastReset = Reset.objects.filter(
37 65
             counter=counter).order_by('-timestamp')
@@ -189,6 +217,8 @@ def home(request):
189 217
         'noGraph': noGraph,
190 218
         'noBestSeum': noBestSeum,
191 219
         'noSeumActivity': noSeumActivity,
220
+        'chooseCounter': chooseCounter,
221
+        'myCounter': myCounter,
192 222
     })
193 223
 
194 224
 
@@ -287,3 +317,19 @@ def counter(request, id_counter):
287 317
         'resets': resets,
288 318
         'seumFrequency': seumFrequency
289 319
     })
320
+
321
+
322
+def setMyCounter(request):
323
+    if (request.method == 'POST'):
324
+        # create a form instance and populate it with data from the request:
325
+        data = dict(request.POST)
326
+        # We put the id of the counter in the session
327
+        request.session['my-counter'] = data['myCounter'][0]
328
+        return HttpResponseRedirect(data['redirect'][0])
329
+
330
+
331
+def resetMyCounter(request):
332
+    if (request.method == 'POST'):
333
+        data = dict(request.POST)
334
+        del request.session['my-counter']
335
+        return HttpResponseRedirect(data['redirect'][0])