diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 637a40b273..bf4243c36d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ env: PYTHON_VERSION: "3.7" MARIADB_VERSION: "10.4.10" COVERALLS_VERSION: "2.2.0" - BLACK_VERSION: "21.8b0" # needs to be also updated in requirements-dev.txt and .pre-commit-config.yaml + BLACK_VERSION: "21.12b0" # needs to be also updated in requirements-dev.txt and .pre-commit-config.yaml # As GitHub Action does not allow environment variables # to be used in services definitions, these are only for @@ -223,6 +223,9 @@ jobs: - name: Install Python dependencies run: pip install -r requirements-ci.txt + - name: Check that no migration is missing + run: python manage.py makemigrations --check --dry-run + - name: Build and start zmarkdown run: | make zmd-install diff --git a/.nvmrc b/.nvmrc index 48082f72f0..b6a7d89c68 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12 +16 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8519ebbe94..5f8a27b7b5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ repos: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/psf/black - rev: 21.8b0 # needs to be also updated in requirements-dev.txt and .github/workflows/ci.yml + rev: 21.12b0 # needs to be also updated in requirements-dev.txt and .github/workflows/ci.yml hooks: - id: black language_version: python3 diff --git a/Gulpfile.js b/Gulpfile.js index 9f5c913eae..13e01d3a12 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -175,7 +175,7 @@ function spriteImages() { // Prepares files for zmarkdown function prepareZmd() { - return gulp.src(['node_modules/katex/dist/{katex.min.css,fonts/*}']) + return gulp.src(['zmd/node_modules/katex/dist/{katex.min.css,fonts/*}']) .pipe(gulp.dest('dist/css/')) } diff --git a/Makefile b/Makefile index 6cc7aefcb3..ac95851e19 100644 --- a/Makefile +++ b/Makefile @@ -33,10 +33,10 @@ install-back-with-prod: pip install --upgrade -r requirements-dev.txt -r requirements-prod.txt run-back: zmd-check ## Run the backend server - python manage.py runserver --nostatic + python manage.py runserver --nostatic 0.0.0.0:8000 run-back-fast: zmd-check ## Run the backend server in fast mode (no debug toolbar & full browser cache) - python manage.py runserver --settings zds.settings.dev_fast + python manage.py runserver --settings zds.settings.dev_fast 0.0.0.0:8000 lint-back: ## Lint Python code black . --check diff --git a/assets/js/mobile-menu.js b/assets/js/mobile-menu.js index 8ea47b98ca..75f39f69ac 100644 --- a/assets/js/mobile-menu.js +++ b/assets/js/mobile-menu.js @@ -46,7 +46,7 @@ * Manage mobile sidebar on resize */ $(window).on('resize', function() { - if (parseInt($('html').css('width')) < 960 && !disableMobileMenu) { + if (parseInt($('html').css('width')) < 1024 && !disableMobileMenu) { $('.page-container').css('width', $('html').css('width')) if (!$('#mobile-menu').hasClass('initialized')) { diff --git a/assets/scss/layout/_content.scss b/assets/scss/layout/_content.scss index f98d3b9db2..c665cc9bea 100644 --- a/assets/scss/layout/_content.scss +++ b/assets/scss/layout/_content.scss @@ -200,6 +200,11 @@ margin-right: $length-10; } + ul, + ol { + margin-right: $length-10; + } + figure { p, blockquote { diff --git a/doc/source/back-end/gallery.rst b/doc/source/back-end/gallery.rst index 4ec385d7a1..3a93d1b236 100644 --- a/doc/source/back-end/gallery.rst +++ b/doc/source/back-end/gallery.rst @@ -24,7 +24,7 @@ Il est ensuite possible d'uploader des images via le menu de gauche : Liens permettant d'uploader des images -Via celui-ci, on peut importer des archives contenant des images (au format ZIP) ou des images seules. Dans ce dernier cas, le formulaire d'*upload* est le suivant : +Via celui-ci, on peut importer des archives (au format ZIP) contenant des images ou des images seules. Dans ce dernier cas, le formulaire d'*upload* est le suivant : .. figure:: ../images/gallery/nouvelle-image.png :align: center @@ -33,6 +33,9 @@ Via celui-ci, on peut importer des archives contenant des images (au format ZIP) Comme on peut le voir, chaque image doit posséder au minimum un titre et peut posséder une légende, qui sera employée par la suite. Il est donc conseillé de remplir également ce second champ, bien que ce ne soit pas obligatoire. Quant à l'image elle-même, sa taille ne peut pas excéder 1024 Kio. +.. attention:: + Le titre de l'image n'entre pas en compte dans le nommage de l'image une fois cette dernière téléchargée. Afin de réduire le risque de rencontrer des conflits de noms de fichiers, ces derniers sont hashés. + Une fois l'image uploadée, il est possible d'y effectuer différentes actions sur la page qui lui est spécifique : .. figure:: ../images/gallery/gestion-image.png @@ -40,14 +43,11 @@ Une fois l'image uploadée, il est possible d'y effectuer différentes actions s Gestion d'une image -Autrement dit, +Autrement dit : -+ En modifier le titre, la légende ou encore l'image en elle-même. À noter que le titre et la légende peuvent être modifiés **sans qu'il ne soit nécessaire** d'uploader une nouvelle image. ++ En modifier le titre, la légende ou encore l'image en elle-même. À noter que le titre et la légende peuvent être modifiés **sans qu'il ne soit nécessaire** d'uploader une nouvelle image. Si une nouvelle version de l'image est uploadée, l'ancienne version de l'image n'est pas supprimée du serveur et reste accessible depuis son URL ; un nouvel identifiant (et donc une nouvelle URL) sera attribué à la nouvelle version de l'image. Cela signifie notamment que mettre à jour une image ne changera pas l'image là où elle a déjà été utilisée (tutoriel, article, message, ...). Ce comportement permet d'éviter que les images utilisées dans des contenus validés soient changées sans repasser par une validation. + Obtenir le code à insérer dans un champ de texte acceptant le Markdown pour l'image en elle-même, sa miniature ou encore la miniature accompagnée du lien vers l'image en taille réelle. -.. attention:: - Le titre de l'image n'entre pas en compte dans le nommage de l'image une fois cette dernière téléchargée. Afin de réduire le risque de rencontrer des conflits de noms de fichiers, ces derniers sont hashés. - Les utilisateurs et leurs droits -------------------------------- diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst index 05aea6f295..1d19067107 100644 --- a/doc/source/contributing.rst +++ b/doc/source/contributing.rst @@ -18,11 +18,10 @@ Contribuer à Zeste De Savoir 1. Créez une branche pour contenir votre travail. 2. Faites vos modifications. 3. Ajoutez un test pour votre modification. Seules les modifications de documentation et les réusinages n'ont pas besoin de nouveaux tests. -4. Assurez-vous que vos tests passent en utilisant la commande ``python manage.py test`` (`voir la documentation `_). Lancer la commande sur tous les tests du site risque de prendre un certain temps et n'est pas nécessaire : les tests seront de toute manière lancés de manière automatisée sur votre *pull request*. -5. Si vous avez fait des modifications du _frontend_, jouez les tests associés : ``yarn test``. -6. Si vous modifiez les modèles (les fichiers ``models.py``), n'oubliez pas de créer les fichiers de migration : ``python manage.py makemigrations``. -7. Poussez votre travail et faites une *pull request*. -8. Si votre travail nécessite des actions spécifiques lors du déploiement, précisez-les dans le corps de votre *pull request*. Elles seront ajoutées au *changelog* par le mainteneur qui effectuera le *merge*. +4. Assurez-vous que vos tests passent en utilisant la commande ``make test-back`` (voyez la `page dédiée <./guides/backend-tests.html>`_ pour plus de détails). Lancer la commande sur tous les tests du site risque de prendre un certain temps et n'est pas nécessaire : les tests seront de toute manière lancés de manière automatisée sur votre *pull request*. +5. Si vous avez modifié les modèles (les fichiers ``models.py``), n'oubliez pas de créer les fichiers de migration : ``python manage.py makemigrations``. +6. Poussez votre travail et faites une *pull request*. +7. Si votre travail nécessite des actions spécifiques lors du déploiement, précisez-les dans le corps de votre *pull request*. Elles seront ajoutées au *changelog* par le mainteneur qui effectuera le *merge*. Quelques bonnes pratiques ------------------------- diff --git a/doc/source/install.rst b/doc/source/install.rst index 77af624dc4..76762a90ca 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -27,7 +27,7 @@ Si vous souhaitez terminer d'installer puis démarrer une instance locale de ZdS install/install-* -Les détails concernant la contribution au code du site peuvent être trouvé `ici <./contributing.html>`_. +Les détails concernant la contribution au code du site peuvent être trouvés `ici <./contributing.html>`_. Quelques informations supplémentaires: diff --git a/doc/source/install/install-docker.rst b/doc/source/install/install-docker.rst new file mode 100644 index 0000000000..2666e68e74 --- /dev/null +++ b/doc/source/install/install-docker.rst @@ -0,0 +1,51 @@ +======================== +Installation dans Docker +======================== + + +.. note:: + + Par manque de développeurs utilisant Docker au sein de l'équipe de + développement de ZdS, cette section n'est guère fournie. Les instructions + données ici ne le sont qu'à titre indicatif. N'hésitez pas à signaler tout + problème ou proposer des améliorations ! + +L'installation de l'environnement de développement dans Docker se base sur `l'installation sous Linux `_. + +Lancez un shell interactif dans un conteneur basé sur Debian : + +.. sourcecode:: bash + + docker run -it -p 8000:8000 debian:bullseye + + +Une fois dans le conteneur, saisissez les commandes suivantes : + +.. sourcecode:: bash + + # On se place dans le $HOME + cd + + # Permet d'utiliser correctement apt + DEBIAN_FRONTEND=noninteractive + + # Installez les paquets minimaux requis + apt update + apt install sudo make vim git + + # Clonez le dépôt de ZdS + git clone https://github.com//zds-site.git + cd zds-site/ + + # Installez ZdS + make install-linux + + # Nécessaire pour avoir nvm dans le PATH + source ../.bashrc + + # À partir de maintenant, les commandes ne sont plus spécifiques à l'utilisation de Docker. + + # Lancement de ZdS + source zdsenv/bin/activate + make zmd-start + make run-back diff --git a/doc/source/install/install-linux.rst b/doc/source/install/install-linux.rst index 83d58c1f5f..eb750ac80a 100644 --- a/doc/source/install/install-linux.rst +++ b/doc/source/install/install-linux.rst @@ -15,7 +15,10 @@ Pour installer une version locale de ZdS sur GNU/Linux, veuillez suivre les inst - Si malgré tout vous ne parvenez pas à installer ZdS, n'hésitez pas à ouvrir `un sujet sur le forum `_ -Après avoir cloné, installer ZdS sous Linux est relativement simple. En effet, il suffit de lancer la commande suivante (qui se chargera d'installer ce qui est nécessaire, plus d'infos ci-dessous): +Pour installer ZdS, vous aurez besoin d'abord des programmes ``make`` et ``sudo``. S'ils ne sont pas déjà installés sur votre système, ils sont généralement disponibles dans les gestionnaires de paquets sous le même nom. + + +Après avoir cloné le dépôt du code source, installer ZdS sous Linux est relativement simple. En effet, il suffit de lancer la commande suivante (qui se chargera d'installer ce qui est nécessaire, plus d'infos ci-dessous): .. sourcecode:: bash @@ -35,11 +38,23 @@ Une fois que c'est fait, vous pouvez directement lancer votre instance à l'aide make zmd-start # démarrer zmarkdown make run-back # démarer le serveur django - Stoppez le serveur à l'aide de ctrl+c. Pour sortir de votre environnement, tapez ``deactivate``. Vous pouvez également `indiquer à Git de ne pas effectuer de commit s'il y a des erreurs de formatage dans le code <../utils/git-pre-hook.html>`__. +Si vous utilisez un shell autre que bash, et que vous avez l’erreur suivante quand vous activez ``zdsenv`` : + +.. sourcecode:: bash + + …/zds-site/zdsenv/bin/activate:67: command not found: nvm + +Alors c’est très probablement dû au script d’installation de nvm qui ne gère que Bash. Pour corriger ce problème, ouvrez votre fichier ``.bashrc`` et copiez les lignes concernant nvm dans le fichier de configuration de votre shell. Ces fichiers se trouvent dans votre répertoire utilisateur, par exemple : + +.. sourcecode:: bash + + ~/.bashrc + ~/.zshrc + Plus d'informations ------------------- diff --git a/fixtures/advanced/aide_tuto_media.yaml b/fixtures/advanced/aide_tuto_media.yaml index cc24431f54..3ef53cb61a 100755 --- a/fixtures/advanced/aide_tuto_media.yaml +++ b/fixtures/advanced/aide_tuto_media.yaml @@ -1,27 +1,27 @@ -- factory: zds.utils.factories.HelpWritingFactory +- factory: zds.utils.tests.factories.HelpWritingFactory fields: title: "Rédacteur" tablelabel: "Besoin d'aide pour la rédaction" slug: "redacteur" fixture_image_path: "aide_redacteur.png" -- factory: zds.utils.factories.HelpWritingFactory +- factory: zds.utils.tests.factories.HelpWritingFactory fields: title: "Correcteur" tablelabel: "Besoin d'aide pour la correction" slug: "correcteur" fixture_image_path: "aide_correcteur.png" -- factory: zds.utils.factories.HelpWritingFactory +- factory: zds.utils.tests.factories.HelpWritingFactory fields: title: "Illustrateur" tablelabel: "Besoin d'aide pour l'illustration" slug: "illustrateur" fixture_image_path: "aide_illustrateur.png" -- factory: zds.utils.factories.HelpWritingFactory +- factory: zds.utils.tests.factories.HelpWritingFactory fields: title: "Repreneur" tablelabel: "Cherche un repreneur" slug: "repreneur" - fixture_image_path: "aide_repreneur.png" \ No newline at end of file + fixture_image_path: "aide_repreneur.png" diff --git a/fixtures/forums.yaml b/fixtures/forums.yaml index 69c5e589a1..a49fcf641e 100644 --- a/fixtures/forums.yaml +++ b/fixtures/forums.yaml @@ -106,3 +106,11 @@ subtitle: Discutez de tout ! category: 4 slug: discussions-generales +- model: forum.Forum + pk: 13 + fields: + title: Staff only + subtitle: Réservé à l'équipe ! + category: 4 + slug: staff-only + groups: [1] diff --git a/package.json b/package.json index 53cafec939..c5ee725c20 100644 --- a/package.json +++ b/package.json @@ -25,26 +25,25 @@ }, "homepage": "https://github.com/zestedesavoir/zds-site", "dependencies": { - "autoprefixer": "10.2.5", - "chart.js": "3.5.1", + "autoprefixer": "10.4.2", + "chart.js": "3.7.0", "chartjs-adapter-moment": "1.0.0", - "cssnano": "5.0.4", + "cssnano": "5.0.15", "del": "6.0.0", - "easymde": "2.10.2-360.0", + "easymde": "2.16.1", "gulp": "4.0.2", "gulp-concat": "2.6.1", "gulp-dart-sass": "1.0.2", "gulp-if": "3.0.0", "gulp-imagemin": "7.1.0", "gulp-options": "1.1.1", - "gulp-postcss": "9.0.0", + "gulp-postcss": "9.0.1", "gulp-terser-js": "5.1.2", "gulp.spritesmith": "6.12.1", "jquery": "3.6.0", - "katex": "0.11.1", "moment": "2.29.1", "normalize.css": "8.0.1", - "postcss": "8.3.0" + "postcss": "8.4.5" }, "devDependencies": { "eslint-config-standard": "14.1.1", diff --git a/requirements-dev.txt b/requirements-dev.txt index 142d9dc965..94e66db865 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,12 +1,12 @@ -r requirements.txt -black==21.8b0 # needs to be also updated in .github/workflows/ci.yml and .pre-commit-config.yaml -colorlog==6.4.1 -django-debug-toolbar==3.2.2 -django-extensions==3.1.3 -Faker==8.12.1 -pre-commit==2.15.0 -PyYAML==5.4.1 +black==21.12b0 # needs to be also updated in .github/workflows/ci.yml and .pre-commit-config.yaml +colorlog==6.6.0 +django-debug-toolbar==3.2.4 +django-extensions==3.1.5 +Faker==10.0.0 +pre-commit==2.16.0 +PyYAML==6.0 selenium==3.141.0 -Sphinx==4.2.0 +Sphinx==4.3.2 sphinx_rtd_theme==1.0.0 diff --git a/requirements-prod.txt b/requirements-prod.txt index 33fb56d47d..c0766fd28b 100644 --- a/requirements-prod.txt +++ b/requirements-prod.txt @@ -1,6 +1,6 @@ -r requirements.txt gunicorn==20.1.0 -mysqlclient==2.0.3 -sentry-sdk==1.3.1 -ujson==4.1.0 +mysqlclient==2.1.0 +sentry-sdk==1.5.1 +ujson==5.1.0 diff --git a/requirements.txt b/requirements.txt index 4d9c43e981..ee575d81d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,28 +6,28 @@ social-auth-app-django==5.0.0 # Explicit dependencies (references in code) beautifulsoup4==4.10.0 -django-crispy-forms==1.12.0 -django-model-utils==4.1.1 +django-crispy-forms==1.13.0 +django-model-utils==4.2.0 django-munin==0.2.1 django-recaptcha==2.0.6 -Django==2.2.24 -easy-thumbnails==2.8rc0 -factory-boy==3.2.0 -geoip2==4.2.0 -GitPython==3.1.14 +Django==3.2.12 +easy-thumbnails==2.8.0 +factory-boy==3.2.1 +geoip2==4.5.0 +GitPython==3.1.24 homoglyphs==2.0.4 -lxml==4.6.3 -Pillow==8.3.2 -python-memcached==1.59 +lxml==4.7.1 +Pillow==9.0.1 +pymemcache==3.5.0 requests==2.26.0 toml==0.10.2 # Api dependencies -django-cors-headers==3.8.0 -django-filter==2.4.0 +django-cors-headers==3.10.1 +django-filter==21.1 django-oauth-toolkit==1.5.0 djangorestframework-xml==2.0.0 -djangorestframework==3.12.4 +djangorestframework==3.13.1 drf-extensions==0.7.1 dry-rest-permissions==0.1.10 drf_yasg==1.20.0 diff --git a/scripts/dependencies/debian.txt b/scripts/dependencies/debian.txt index aaac3293bc..e56dd78a6c 100644 --- a/scripts/dependencies/debian.txt +++ b/scripts/dependencies/debian.txt @@ -1,5 +1,5 @@ #title=Debian -#desc=Utilisation de apt-get / Testé sur Debian Stretch (9), Buster (10) +#desc=Utilisation de apt-get / Testé sur Debian Stretch (9), Buster (10), Bullseye (11) #updatecmd=apt-get -y update #installcmd=apt-get -y install git diff --git a/scripts/dependencies/ubuntu.txt b/scripts/dependencies/ubuntu.txt index 969c3492d4..82b633729d 100644 --- a/scripts/dependencies/ubuntu.txt +++ b/scripts/dependencies/ubuntu.txt @@ -1,5 +1,5 @@ #title=Ubuntu -#desc=Utilisation de apt-get / Testé sur : Ubuntu 16.04 LTS, 18.04 LTS, 19.04 & Linux Mint 19 +#desc=Utilisation de apt-get / Testé sur : 18.04 LTS, 19.04, 20.04 LTS & Linux Mint 19 #updatecmd=apt-get -y update #installcmd=apt-get -y install git diff --git a/scripts/install_zds.sh b/scripts/install_zds.sh index 897217ddfd..18c2f1a73f 100755 --- a/scripts/install_zds.sh +++ b/scripts/install_zds.sh @@ -222,7 +222,16 @@ if ! $(_in "--force-skip-activating" $@) && [[ ( $VIRTUAL_ENV == "" || $(realpat echo " - If you don't have other choice, use \`--force-skip-activating\`." exit 1 fi -else + + # Some dependencies (like rust ones) require a recent pip: + print_info "* upgrading pip" + pip install --upgrade pip; exVal=$? + + if [[ $exVal != 0 ]]; then + print_error "!! Failed to upgrade pip" + exit 1 + fi + print_info "!! Add \`$(realpath $ZDS_VENV)\` in your PATH." if [ ! -d $ZDS_VENV ]; then @@ -434,6 +443,19 @@ if ! $(_in "-back" $@) && ( $(_in "+back" $@) || $(_in "+base" $@) || $(_in "+f fi +# zmd (zmd has to be installed before the build the front) +if ! $(_in "-zmd" $@) && ( $(_in "+zmd" $@) || $(_in "+base" $@) || $(_in "+full" $@) ); then + print_info "* [+zmd] install zmarkdown dependencies" --bold + + make zmd-install; exVal=$? + + if [[ $exVal != 0 ]]; then + print_error "!! Cannot install zmd (use \`-zmd\` to skip)" + exit 1 + fi +fi + + # install front if ! $(_in "-front" $@) && ( $(_in "+front" $@) || $(_in "+base" $@) || $(_in "+full" $@) ); then print_info "* [+front] install front dependencies & build front" --bold @@ -458,19 +480,6 @@ if ! $(_in "-front" $@) && ( $(_in "+front" $@) || $(_in "+base" $@) || $(_in " fi -# zmd -if ! $(_in "-zmd" $@) && ( $(_in "+zmd" $@) || $(_in "+base" $@) || $(_in "+full" $@) ); then - print_info "* [+zmd] install zmarkdown dependencies" --bold - - make zmd-install; exVal=$? - - if [[ $exVal != 0 ]]; then - print_error "!! Cannot install zmd (use \`-zmd\` to skip)" - exit 1 - fi -fi - - # fixtures if ! $(_in "-data" $@) && ( $(_in "+data" $@) || $(_in "+base" $@) || $(_in "+full" $@) ); then print_info "* [+data] fixtures" --bold diff --git a/templates/base.html b/templates/base.html index 76c878c01e..10975e9365 100644 --- a/templates/base.html +++ b/templates/base.html @@ -99,7 +99,7 @@ {% block canonical %}{% endblock %} {# Webfont async loading #} - + {% block extra_css %} diff --git a/templates/forum/category/forum.html b/templates/forum/category/forum.html index 999bc73fb0..949ea8d7c2 100644 --- a/templates/forum/category/forum.html +++ b/templates/forum/category/forum.html @@ -66,9 +66,11 @@ {% block new_btn %} - - {% trans "Nouveau sujet" %} - + {% if user.profile.can_write_now %} + + {% trans "Nouveau sujet" %} + + {% endif %} {% endblock %} diff --git a/templates/forum/topic/index.html b/templates/forum/topic/index.html index 91bd080b79..1f2a656bb8 100644 --- a/templates/forum/topic/index.html +++ b/templates/forum/topic/index.html @@ -161,21 +161,21 @@ {% endblock %} - {% block new_btn %} - - {% trans "Nouveau sujet" %} - - - {% if topic.author.pk == user.pk and topic.first_post.is_visible or is_staff %} - - {% trans "Éditer le sujet" %} - - {% endif %} + {% if user.profile.can_write_now %} + + {% trans "Nouveau sujet" %} + + + {% if topic.author.pk == user.pk and topic.first_post.is_visible or is_staff %} + + {% trans "Éditer le sujet" %} + + {% endif %} + {% endif %} {% endblock %} - {% block sidebar_actions %} {% if topic.author.pk == user.pk %}
  • diff --git a/templates/member/admin/memberip.html b/templates/member/admin/memberip.html index cfea986314..4532788f7a 100644 --- a/templates/member/admin/memberip.html +++ b/templates/member/admin/memberip.html @@ -26,7 +26,7 @@ {% block content %}

    {% blocktrans %} - Liste des membres dont la dernière IP connue est {{ ip }} + Liste des membres dont la dernière IP connue est {{ ip }} {% endblocktrans %}

    @@ -37,4 +37,25 @@ {% endfor %} + + {# Checks if it's an IPV6 to show the members from the same IPV6 network #} + {% if ":" in ip %} +

    + {% blocktrans %} + Liste des membres dont la dernière IP connue fait partie du bloc {{ network_ip }} + {% endblocktrans %} +

    + +
    +
      + {% for member in network_members %} +
    • {% include "misc/member_item.part.html" with member=member info=member.last_visit|format_date:True avatar=True %}
    • + {% endfor %} +
    +
    + +

    + En IPv6, les adresses sont attribuées par bloc d'IP. Un bot de spam peut donc facilement changer d'adresse IP au sein de ce bloc. Sont affichés ici tous les membres dont l'IPv6 fait partie du même bloc que l'IP demandée. +

    + {% endif %} {% endblock %} diff --git a/templates/member/profile.html b/templates/member/profile.html index f31bffab95..ad8ced65e3 100644 --- a/templates/member/profile.html +++ b/templates/member/profile.html @@ -119,14 +119,6 @@

    {% endfor %}
    - -