internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: zestedesavoir/zds-site

Issue:
[Bêta v1.8] Les flux rss ne fonctionnent plus => erreur 500
En direct de la beta, il est impossible d'avoir les flux rss en cliquant sur les liens correspondant. On se prend une erreur 500.

C'est donc une regression, puisque ça marche en prod.



Discussion:
https://github.com/zestedesavoir/zds-site/issues/2564, j'ai exactement la même erreur, quand j'essaye d’accéder au flux en local.

«You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.»

Ajouter SITE_ID=1 marche mais aucune idée des conséquences.

On dirait un effet de bord merdique de [ce commit](https://github.com/SpaceFox/zds-site/commit/c4605fd1997e478128b6e1cdf831637862293832). J'espère juste que l'on peut faire fonctionner ces RSS sans avoir besoin de ce paramètre.

PS : Si vous pouviez indiquer quelque chose comme "bêta v1.8" dans le titre, ce serait génial.

Source: https://docs.djangoproject.com/en/1.8/ref/contrib/sites/#how-django-uses-the-sites-framework

En gros, ce que j'ai compris de la documentation, c'est que c'est pas obligatoire mais fortement conseillé de l'utiliser ce module multi-site, même quand on a un seul site comme nous.

> Although it’s not required that you use the sites framework, it’s strongly encouraged, because Django 
> takes advantage of it in a few places. 

En gros, il précise après que c'est utilisé pour le RSS pour deux choses, pour établir les urls si on précise pas l'adresse complète, ce qui est notre cas. C'est aussi utilisé pour le title et la description. 
C'est aussi utiliser pour d'autre trucs, je te laisse lire le petit paragraphe.

Pourquoi un ? car c'est l'id dans la base de données de l'enregistrement ou y'a les infos du domain et du nom. La table s’appelle: django_site.


Resolving patch:
diff --git a/zds/settings.py b/zds/settings.py
--- a/zds/settings.py
+++ b/zds/settings.py
@@ -176,6 +176,8 @@
     # 'django.contrib.admindocs',
 )
 
+SITE_ID = 1
+
 THUMBNAIL_ALIASES = {
     '': {
         'avatar': {'size': (60, 60), 'crop': True},


Test patch:
Repository: zestedesavoir/zds-site

Issue:
Derniers sujets sur la Home : la date sur mobile n'est pas optimisée 
Sur mobile on à en général pas beaucoup de place. Et il faudrait éviter d'afficher la date literralle pour optimiser la place. Cf screen (paysage).

![13 mai 2015 181424 gmt 0200](https://cloud.githubusercontent.com/assets/6066015/7615213/59898462-f99c-11e4-866d-a136e7446c5b.jpg)



Discussion:
hum... je sais pas s'il faut tagger Bug ou Regression...

Je dirais une évolution en fait puisque c'est déjà comme ça et que c'est pas un bug d'affichage, juste un confort d'utilisation.

Ce sera sûrement réglé en même temps que #2694 ! ;)


Resolving patch:
diff --git a/zds/featured/forms.py b/zds/featured/forms.py
--- a/zds/featured/forms.py
+++ b/zds/featured/forms.py
@@ -52,7 +52,7 @@ class Meta:
         max_length=FeaturedResource._meta.get_field('image_url').max_length,
         widget=forms.TextInput(
             attrs={
-                'placeholder': _(u'Lien vers l\'url de l\'image de la une.')
+                'placeholder': _(u'Lien vers l\'url de l\'image de la une (dimensions: 228x228).')
             }
         )
     )


Test patch:
Repository: zestedesavoir/zds-site

Issue:
Erreurs 404 non générées sur certaines pages
Certaines pages devraient générées des erreurs 404 au lieu d'afficher le contenu des pages.
J'ai découvert ce bug en voulant corriger des erreurs dans les liens sur la page des CGU, un oubli de mailto produit actuellement un lien vers http://zestedesavoir.com/pages/cgu/communication@zestedesavoir.com qui affiche la page des CGU. Or une erreur 404 devrait être générée. Peu importe la suite de l'URL cela fonctionne et ce pour plusieurs pages...
Il manque un `$` à la fin de certaines expressions régulières dans zds/pages/urls.py.

De plus le fichier urls.py importe pages.views mais ne l'utilise à aucun moment.
Du coup je me demande si je supprime l'import de views (ligne 5) ou bien si j'utilise par exemple `views.about` au lieu de `'zds.pages.views.about'` ?

Je veux bien bien me charger de faire une PR pour corriger ces bugs :)

EDIT: Je n'arrive pas à m'assigner à cette issue (comme suggéré par CONTRIBUTING.md), problèmes de droits ?



Discussion:

Resolving patch:
diff --git a/zds/pages/urls.py b/zds/pages/urls.py
--- a/zds/pages/urls.py
+++ b/zds/pages/urls.py
@@ -2,17 +2,15 @@
 
 from django.conf.urls import patterns, url
 
-from . import views
-
 
 urlpatterns = patterns('',
 
                        url(r'^apropos/$', 'zds.pages.views.about'),
                        url(r'^association/$', 'zds.pages.views.association'),
-                       url(r'^contact/', 'zds.pages.views.contact'),
-                       url(r'^cgu/', 'zds.pages.views.eula'),
-                       url(r'^alertes/', 'zds.pages.views.alerts'),
-                       url(r'^cookies/', 'zds.pages.views.cookies'),
+                       url(r'^contact/$', 'zds.pages.views.contact'),
+                       url(r'^cgu/$', 'zds.pages.views.eula'),
+                       url(r'^alertes/$', 'zds.pages.views.alerts'),
+                       url(r'^cookies/$', 'zds.pages.views.cookies'),
                        url(r'^association/inscription/$', 'zds.pages.views.assoc_subscribe'),
 
                        url(r'^$', 'zds.pages.views.index'),
diff --git a/zds/search/urls.py b/zds/search/urls.py
--- a/zds/search/urls.py
+++ b/zds/search/urls.py
@@ -2,7 +2,6 @@
 
 from django.conf.urls import patterns, url
 
-from . import views
 from haystack.views import search_view_factory
 from zds.search.views import CustomSearchView
 from zds.search.forms import CustomSearchForm
@@ -15,5 +14,5 @@
                        ), name='haystack_search'))
 
 urlpatterns += patterns('',
-                        url(r'^opensearch.xml', 'zds.search.views.opensearch')
+                        url(r'^opensearch\.xml$', 'zds.search.views.opensearch')
                         )


Test patch:
Repository: zestedesavoir/zds-site

Issue:
[Beta 15.5.1]Liste des tutoriels pas toujours par 3
Lorsqu'on n'est pas connecté (pas testé avec un membre connecté) et qu'on va sur la page de la liste de tous les tutos, on se retrouve avec les 5 premiers qui singent la home page alors que la norme sur cette page là c'est 3 contenu par ligne. Du coup sur la première ligne on en a 5 et les contenus 2 à 5 sont plus petits et donc moins lisibles.

firefox 38 Xubuntu 15.04 écran 15.5'' 16/9 1024p

![ug_tuto](https://cloud.githubusercontent.com/assets/1523653/7789348/9794b5b4-025d-11e5-91d1-c1c3c9471a93.png)



Discussion:
Ca, c'est un problème de cache je dirais... Je pense que c'est la version "mini" qui est mise en cache à cause de la home, et c'est celle la qui est rendue sur la page d'index des tutos... Je sais pas trop comment marche ce cache, donc ping @SpaceFox 

Putain, c'est pour ça que je _déteste_ cette possibilité d'avoir des paramètres facultatifs... surtout quand comme ici lesdits paramètres ne sont précisés nulle part dans le fichier appelé.

Je note aussi que la manière de gérer les version bêta sur `tutorial_item.part.html` est totalement incohérent avec son pendant `article_item.part.html`. J'espère que la ZEP-12 corrigera ça.


Resolving patch:
diff --git a/zds/tutorial/models.py b/zds/tutorial/models.py
--- a/zds/tutorial/models.py
+++ b/zds/tutorial/models.py
@@ -370,8 +370,10 @@ def save(self, *args, **kwargs):
         super(Tutorial, self).save(*args, **kwargs)
 
         # Clear associated cache keys
-        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, True]))
-        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, False]))
+        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, True, True]))
+        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, True, False]))
+        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, False, True]))
+        cache.delete(make_template_fragment_key('tutorial_item', [self.pk, False, False]))
 
     def get_note_count(self):
         """Return the number of notes in the tutorial."""


Test patch:
Repository: zestedesavoir/zds-site

Issue:
La page de maintenance ne fonctionne plus
Je ne sais pas ce qui a été modifié sur la conf nginx, mais la page de maintenance ne fonctionne visiblement plus, vu comment tout le monde a gueulé pendant la MEP de la v1.7c.



Discussion:

Resolving patch:
diff --git a/zds/settings.py b/zds/settings.py
--- a/zds/settings.py
+++ b/zds/settings.py
@@ -503,6 +503,11 @@
 # See http://daniel.hepper.net/blog/2014/04/fixing-1_6-w001-when-upgrading-from-django-1-5-to-1-7/
 TEST_RUNNER = 'django.test.runner.DiscoverRunner'
 
+# Properly handle HTTPS vs HTTP
+SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
+# /!\ WARNING : It will probably open security holes in your site if the proxy behing isn't well configured
+# Read the docs for further informations - https://docs.djangoproject.com/en/1.7/ref/settings/#secure-proxy-ssl-header
+
 # Load the production settings, overwrite the existing ones if needed
 try:
     from settings_prod import *


Test patch:
Repository: zestedesavoir/zds-site

Issue:
Impossible de rechercher certainnes informations au delà de la première page
**Scénario 1:**
- Aller sur la page de recherche : `http://zestedesavoir.com/rechercher/`
- Saisir dans la zone de recherche : `&ab`
- Constatez qu'il y'a des résultats sur plusieurs pages
- Cliquer sur suivant
- **Pouf : une erreur 404**

**Scénario 2:**
- Aller sur la page de recherche : `http://zestedesavoir.com/rechercher/`
- Saisir dans la zone de recherche : `#1`
- Constatez qu'il y'a des résultats sur plusieurs pages
- Cliquer sur suivant
- **Pouf : le vide s'empare de nous**



Discussion:
@DevHugo ? :)

Il passe des trucs chelou des les url sans ça, ça fonctionne, c'est pas ma top priorité, je t'avoue.


Resolving patch:
diff --git a/zds/utils/templatetags/append_to_get.py b/zds/utils/templatetags/append_to_get.py
--- a/zds/utils/templatetags/append_to_get.py
+++ b/zds/utils/templatetags/append_to_get.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 
 from django import template
+from django.utils.http import urlquote
 from functools import wraps
 
 register = template.Library()
@@ -84,7 +85,7 @@ def render(self, context):
             get[key] = self.__dict_pairs[key].resolve(context)
 
         if len(get) > 0:
-            list_arg = [u"{0}={1}".format(key, value) for key in get.keys() for value in get.getlist(key)]
+            list_arg = [u"{0}={1}".format(key, urlquote(value)) for key in get.keys() for value in get.getlist(key)]
             path += u"?" + u"&".join(list_arg)
 
         return path


Test patch:
Repository: zestedesavoir/zds-site

Issue:
L'affichage des pseudos dans la liste des tutoriels / article déconne
L'affichage du pseudo "Bat'" n'est pas correct.

![bug](https://cloud.githubusercontent.com/assets/6099338/8538835/07cccad8-2473-11e5-8849-c645a0c34875.png)

Possible de voir le comportement sur la page: https://zestedesavoir.com/tutoriels/?tag=dot-net



Discussion:
Je viens de regarder, cela vient du tag _captureas_ définit dans `zds/utils/templatetags/captureas.py`.

La définition de la fonction render est la suivante:

``` python
    def render(self, context):
        """
        Render the node list to the variable name.

        :param context: Current context.
        :return: Empty string
        :rtype: str
        """
        output = self.__node_list.render(context)
        context[self.__variable_name] = output.strip()
        return ''
```

Or `output` est une chaîne de caractère _safe_ (de type `django.utils.safestring.SafeText`). Or l'ajout de .strip() transforme la chaîne et son nouveau type devient `unicode` ! Ainsi le code reçu est échappé automatiquement puis à nouveau du fait que la chaîne ne soit pas sûre (_safe_).

Voilà donc je propose d'ajouter un appel à mark_safe (ou virer le strip).
Voici le patch pour l'ajout de mark_safe.

``` patch
ddiff --git a/zds/utils/templatetags/captureas.py b/zds/utils/templatetags/captureas.py
index d9d0aa1..4d1db59 100644
--- a/zds/utils/templatetags/captureas.py
+++ b/zds/utils/templatetags/captureas.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-

 from django import template
+from django.utils.safestring import mark_safe

 register = template.Library()

@@ -54,5 +55,5 @@ class CaptureasNode(template.Node):
         :rtype: str
         """
         output = self.__node_list.render(context)
-        context[self.__variable_name] = output.strip()
+        context[self.__variable_name] = mark_safe(output.strip())
         return ''
```

J'ai testé cela fonctionne. Je peux proposer une PR basique pour corriger le bug si vous voulez ! Dites-le moi.

Je pense que tu as raison, bien vu. Tu peux proposer une PR, si tu veux sinon quelqu'un le fera.

Je vais la faire dans un instant alors ;)


Resolving patch:
diff --git a/zds/utils/templatetags/captureas.py b/zds/utils/templatetags/captureas.py
--- a/zds/utils/templatetags/captureas.py
+++ b/zds/utils/templatetags/captureas.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 
 from django import template
+from django.utils.safestring import mark_safe
 
 register = template.Library()
 
@@ -54,5 +55,5 @@ def render(self, context):
         :rtype: str
         """
         output = self.__node_list.render(context)
-        context[self.__variable_name] = output.strip()
+        context[self.__variable_name] = mark_safe(output.strip())
         return ''


Test patch:
Repository: zestedesavoir/zds-site

Issue:
[beta 15.9] Erreur 500 lors d'une citation malencontreuse d'une réactions
Lien incriminé : https://beta.zestedesavoir.com/contenus/reactions/ajouter/?cite=75912&pk=205

Pouf **erreur 500**.

On ne devrait jamais avoir d'erreur 500 dans la vraie vie.



Discussion:
Les identifiants sont corrects ?


Resolving patch:
diff --git a/zds/tutorialv2/views/views_published.py b/zds/tutorialv2/views/views_published.py
--- a/zds/tutorialv2/views/views_published.py
+++ b/zds/tutorialv2/views/views_published.py
@@ -374,8 +374,11 @@ def get(self, request, *args, **kwargs):
                     return StreamingHttpResponse(json_writer.dumps({"text": text}, ensure_ascii=False))
                 else:
                     self.quoted_reaction_text = text
-
-        return super(SendNoteFormView, self).get(request, *args, **kwargs)
+        try:
+            return super(SendNoteFormView, self).get(request, *args, **kwargs)
+        except MustRedirect:  # if someone changed the pk arguments, and reached a "must redirect" public
+            # object
+            raise Http404("Not found public content with pk " + str(self.request.GET.get("pk", 0)))
 
     def post(self, request, *args, **kwargs):
 


Test patch:
Repository: zestedesavoir/zds-site

Issue:
[beta 15.9] L'auteur ne follow pas automatiquement son topic de beta
Lorsqu'un auteur met sont contenu en beta, un sujet est crée. C'est une bonne chose.

Le problème vient du fait que ce topic n'est pas follow automatiquement par l'auteur.

es una regresión.



Discussion:
_Si_

Bon, [c'est étonnant](https://github.com/zestedesavoir/zds-site/blob/dev/zds/tutorialv2/views/views_contents.py#L1358-L1362), mais peut-être que je me suis planté quelque part (en plus, je pensais que ce comportement était testé unitairement :'( )


Resolving patch:
diff --git a/zds/tutorialv2/views/views_contents.py b/zds/tutorialv2/views/views_contents.py
--- a/zds/tutorialv2/views/views_contents.py
+++ b/zds/tutorialv2/views/views_contents.py
@@ -1359,7 +1359,7 @@ def form_valid(self, form):
                     for author in self.object.authors.all():
                         if author.pk is not self.request.user.pk:
                             follow(topic, author)
-                            mark_read(topic, author)
+                        mark_read(topic, author)
 
                     bot = get_object_or_404(User, username=settings.ZDS_APP['member']['bot_account'])
                     msg_pm = render_to_string(


Test patch:
diff --git a/zds/tutorialv2/tests/tests_views.py b/zds/tutorialv2/tests/tests_views.py
--- a/zds/tutorialv2/tests/tests_views.py
+++ b/zds/tutorialv2/tests/tests_views.py
@@ -2656,8 +2656,9 @@ def test_warn_typo(self):
         self.assertEqual(302, response.status_code)
         sha_beta = PublishableContent.objects.get(pk=tuto.pk).sha_beta
         self.assertEqual(sha_draft, sha_beta)
-
         tuto = PublishableContent.objects.get(pk=tuto.pk)
+        # checks the user follow it
+        self.assertEqual(TopicRead.objects.filter(topic__pk=tuto.beta_topic.pk).count(), 1)
         versioned = tuto.load_version(sha_beta)
 
         # check if author get error when warning typo on its own tutorial
Repository: zestedesavoir/zds-site

Issue:
[beta 15.9] Erreur 500 lors d'une citation malencontreuse d'une réaction saison 2
Attention ce bug n'est pas un doublon de  #3009 (l'exception levée est différente).

Lien incriminé : https://beta.zestedesavoir.com/contenus/reactions/editer/?message=736718&pk=12

Pouf **erreur 500**.

On ne devrait jamais avoir d'erreur 500 dans la vraie vie.



Discussion:

Resolving patch:
diff --git a/zds/tutorialv2/views/views_published.py b/zds/tutorialv2/views/views_published.py
--- a/zds/tutorialv2/views/views_published.py
+++ b/zds/tutorialv2/views/views_published.py
@@ -445,6 +445,8 @@ def get_form_kwargs(self):
                 .prefetch_related("author")\
                 .filter(pk=int(self.request.GET["message"]))\
                 .first()
+            if self.reaction is None:
+                raise Http404("Message asked and not found")
             kwargs['reaction'] = self.reaction
         else:
             raise Http404("The 'message' parameter must be a digit.")


Test patch:
diff --git a/zds/tutorialv2/tests/tests_views.py b/zds/tutorialv2/tests/tests_views.py
--- a/zds/tutorialv2/tests/tests_views.py
+++ b/zds/tutorialv2/tests/tests_views.py
@@ -4787,7 +4787,7 @@ def test_last_reactions(self):
 
         tuto = PublishableContent.objects.get(pk=self.tuto.pk)
 
-        reactions = list(ContentReaction.objects.filter(related_content=self.tuto).all())
+        reactions = ContentReaction.objects.filter(related_content=self.tuto).all()
         self.assertEqual(len(reactions), 2)
 
         self.assertEqual(ContentRead.objects.filter(user=self.user_author).count(), 1)  # reaction read
@@ -4848,6 +4848,23 @@ def test_last_reactions(self):
         result = self.client.get(reverse('zds.pages.views.index'))  # go to whatever page
         self.assertEqual(result.status_code, 200)
 
+    def test_note_with_bad_param(self):
+        self.assertEqual(
+            self.client.login(
+                username=self.user_staff.username,
+                password='hostel77'),
+            True)
+        url_template = reverse("content:update-reaction") + "?pk={}&message={}"
+        result = self.client.get(url_template.format(self.tuto.pk, 454545665895123))
+        self.assertEqual(404, result.status_code)
+        reaction = ContentReaction(related_content=self.tuto, author=self.user_guest, position=1)
+        reaction.update_content("blah")
+        reaction.save()
+        self.tuto.last_note = reaction
+        self.tuto.save()
+        result = self.client.get(url_template.format(861489632, reaction.pk))
+        self.assertEqual(404, result.status_code)
+
     def tearDown(self):
 
         if os.path.isdir(settings.ZDS_APP['content']['repo_private_path']):
Repository: zestedesavoir/zds-site

Issue:
Adresse mail de contact inutilisables
Certaines pages (au moins la page de contact et les CGU) utilisent l'adresse association@zestedesavoir.com ; or si j'ai bien compris seules certaines personnes (CA de l'association) peuvent envoyer des informations sur cette adresse...

Il faudrait :
- Soit l'ouvrir à tous
- Soit changer l'adresse par une adresse utilisable par tous (mais qui ?)



Discussion:
On ne pourrais pas tout simplement rediriger "association@zestedesavoir.com" vers l'adresse gmail de comm qui, elle rajouterai une règle de redirection vers le groupe CA ?

Du nouveau ?

Ping !

Est-ce que c'est vraiment une issue ça ?

Plop ! Cette adresse est présente sur la page "asso" et sur la page "contact". Il serait bon de trouver une solution. Soit on vire cette adresse purement et simplement, et tout passe par communication@@zestedesavoir.com, soit on débloque association@zestedesavoir.com, mais en l'état, ça fait pas sérieux...

Juste pour dire qu'en plus de la page asso et de la page contact, cette adresse est présente aussi dans les CGU. D'un point de vue légal ça ne fait pas très propre.

Je propose qu'on adopte l'idée de @ChantyTaguan ici, en remplaçant temporairement l'adresse de l'asso par communication@zestedesavoir.com.

Pour celà, rien de plus simple que d'aller modifier dans le setting de prod le paramètre [suivant](https://github.com/zestedesavoir/zds-site/blob/dev/zds/settings.py#L313) avec la bonne adresse. Et le changement sera repercuté sur toutes les pages.

> Je propose qu'on adopte l'idée de @ChantyTaguan ici, en remplaçant temporairement l'adresse de l'asso par communication@zestedesavoir.com.

[ça c'est fait](http://zestedesavoir.com/pages/contact/).

Le ticket est resolu via l'utilisation de la boite mail de communication non ? On peut fermer ?

ping !!

Plop ! Le ticket étant toujours ouvert, je profite de celui-ci (ce sera l'occasion de le fermer ^__^). L'adresse email communication@zestedesavoir.com semble ne plus fonctionner. Je ne sais pas depuis quand mais je soupçonne la migration sur le nouveau serveur.

Je peux ouvrir un nouveau ticket si vous préférez mais vu que le titre correspondait nickel...

Ping ? C'est quand même pas mal gênant que l'asso/la comm ne puisse plus être contactées...


Resolving patch:
diff --git a/zds/settings.py b/zds/settings.py
--- a/zds/settings.py
+++ b/zds/settings.py
@@ -374,7 +374,7 @@
         'abbr': u"zds",
         'url': u"http://127.0.0.1:8000",
         'dns': u"zestedesavoir.com",
-        'email_contact': u"communication@zestedesavoir.com",
+        'email_contact': u"zestedesavoir@gmail.com",
         'email_noreply': u"noreply@zestedesavoir.com",
         'repository': u"https://github.com/zestedesavoir/zds-site",
         'bugtracker': u"https://github.com/zestedesavoir/zds-site/issues",
@@ -388,7 +388,7 @@
         'association': {
             'name': u"Zeste de Savoir",
             'fee': u"20 €",
-            'email': u"association@zestedesavoir.com",
+            'email': u"zestedesavoir@gmail.com",
             'email_ca': u"ca-zeste-de-savoir@googlegroups.com"
         },
         'licenses': {


Test patch: