Merge remote-tracking branch 'upstream/master'

This commit is contained in:
ericgaspar 2020-06-05 17:28:09 +02:00
commit e8b2520de4
No known key found for this signature in database
GPG key ID: 574F281483054D44
50 changed files with 1639 additions and 2019 deletions

20
app_kanboard.md Normal file
View file

@ -0,0 +1,20 @@
# <img src="/images/kanboard_logo.png" height="80px" alt="kanboard's logo"> Kanboard
[![Install kanboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kanboard) [![Integration level](https://dash.yunohost.org/integration/kanboard.svg)](https://dash.yunohost.org/appci/app/kanboard)
### Index
- [Useful links](#useful-links)
Kanboard is a visual task manager that makes it easy to manage small projects in a collaborative way. The tool is particularly suitable for people who use the Kanban method. Kanboard can be seen as a
(Simplified) alternative to the proprietary Trello software. Kanboard is a minimalist software, it focuses only on the features that are really necessary. The user interface is simple and clear.
The tool is designed to run on a small machine such as a Raspberry Pi or a Virtual Private Server (VPS). There are no external dependencies, drag and drop of tasks uses the new HTML5 APIs.
## Useful links
+ Website: [kanboard.org](https://kanboard.org)
+ Official documentation: [docs.kanboard.org/en/latest](https://docs.kanboard.org/en/latest)
+ Demonstration: [Demo](https://framaboard.org)
+ Application software repository: [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues)

18
app_kanboard_fr.md Normal file
View file

@ -0,0 +1,18 @@
# <img src="/images/kanboard_logo.png" height="80px" alt="logo de kanboard"> Kanboard
[![Install kanboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kanboard) [![Integration level](https://dash.yunohost.org/integration/kanboard.svg)](https://dash.yunohost.org/appci/app/kanboard)
### Index
- [Liens utiles](#liens-utiles)
Kanboard est un gestionnaire de tâches visuel qui permet de gérer facilement des petits projets de manière collaborative. L'outil est particulièrement adapté aux personnes qui utilisent la méthode Kanban. On peut voir Kanboard comme une alternative (simplifiée) au logiciel propriétaire Trello. Kanboard est un logiciel minimaliste, il se concentre uniquement sur les fonctionnalités réellement nécessaires. L'interface utilisateur est simple et clair.
L'outil est prévu pour fonctionner sur une petite machine tel qu'un Raspberry Pi ou un serveur virtuel privé (VPS). Il n'y a aucune dépendance externe, le glisser-déposer des tâches utilise les nouvelles API de HTML5.
## Liens utiles
+ Site web : [kanboard.org](https://kanboard.org)
+ Documentation officielle : [docs.kanboard.org/en/latest](https://docs.kanboard.org/fr/latest)
+ Démonstration : [Démo](https://framaboard.org)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues)

20
app_keeweb.md Normal file
View file

@ -0,0 +1,20 @@
# <img src="/images/keeweb_logo.png" height="80px" alt="keeweb's logo"> Keeweb
[![Install keeweb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=keeweb) [![Integration level](https://dash.yunohost.org/integration/keeweb.svg)](https://dash.yunohost.org/appci/app/keeweb)
### Index
- [Useful links](#useful-links)
An elegant and efficient web manager to manage your passwords remotely.
The file containing the passwords (.kdbx) can follow you locally on your PC, on a USB key or be stored on your server in webdav.
Keeweb also manages files compatible with other password managers such as [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) or [KeepassXC](https://keepassxc.org/).
## Useful links
+ Website: [keeweb.info](https://keeweb.info)
+ Official documentation: [keeweb.info](https://keeweb.info)
+ Demonstration: [Demo](https://app.keeweb.info)
+ Application software repository: [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues)

19
app_keeweb_fr.md Normal file
View file

@ -0,0 +1,19 @@
# <img src="/images/keeweb_logo.png" height="80px" alt="logo de keeweb"> Keeweb
[![Install keeweb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=keeweb) [![Integration level](https://dash.yunohost.org/integration/keeweb.svg)](https://dash.yunohost.org/appci/app/keeweb)
### Index
- [Liens utiles](#liens-utiles)
Un gestionnaire web élégant et efficace pour gérer vos mots de passe à distance.
Le fichier contenant les mots de passe (.kdbx) peut vous suivre en local sur votre PC, sur une clef USB ou être stocké sur votre serveur en webdav.
Keeweb gère aussi des fichiers compatibles avec les autres gestionnaires de mots de passe comme [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) ou [KeepassXC](https://keepassxc.org/).
## Liens utiles
+ Site web : [keeweb.info](https://keeweb.info)
+ Documentation officielle : [keeweb.info](https://keeweb.info)
+ Démonstration : [Démo](https://app.keeweb.info)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues)

20
app_moodle.md Normal file
View file

@ -0,0 +1,20 @@
# <img src="/images/moodle_logo.svg" height="80px" alt="moodle's logo"> Moodle
[![Install moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=moodle) [![Integration level](https://dash.yunohost.org/integration/moodle.svg)](https://dash.yunohost.org/appci/app/moodle)
### Index
- [Useful links](#useful-links)
Moodle is a Learning Management System (LMS) for creating, sharing and animating learning and training resources.
At least it can be used to share course materials (in different formats), but above all, it allows the creation of rich learning activities focusing on interactions between users (learners like
trainers).
It integrates about ten activities (quiz, lesson, forum, wiki, homework, survey, self-assessment workshop between peers...) and resource formats (pdf, text, audio-visual, image, scorm...) by default that can be enriched by modules
complementary (in particular to propose specific activities in certain areas).
## Useful links
+ Website: [moodle.org](https://moodle.org)
+ Official documentation: [docs.moodle.org](https://docs.moodle.org)
+ Application software repository: [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues)

18
app_moodle_fr.md Normal file
View file

@ -0,0 +1,18 @@
# <img src="/images/moodle_logo.svg" height="80px" alt="logo de moodle"> Moodle
[![Install moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=moodle) [![Integration level](https://dash.yunohost.org/integration/moodle.svg)](https://dash.yunohost.org/appci/app/moodle)
### Index
- [Liens utiles](#liens-utiles)
Moodle est un LMS (Learning Management System ou environnement d'apprentissage) permettant de créér, partager, animer des ressources didactiques et de formation.
A minima on pourra l'utiliser pour partager des supports de cours (sous différents formats), mais il permet surtout de créer des activités d'apprentissage riches privilégiant les interactions entre les utilisateurs (apprenants comme formateurs).
Il intègre une dizaine d'activités (quiz, leçon, forum, wiki, devoir, sondage, atelier auto-évalué entre pairs...) et formats de ressources (pdf, texte, audio-visuel, image, scorm...) par défaut qui peuvent être enrichis par des modules complémentaires (notamment pour proposer des activités spécifiques à certains domaines).
## Liens utiles
+ Site web : [moodle.org](https://moodle.org)
+ Documentation officielle : [docs.moodle.org](https://docs.moodle.org)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues)

21
app_mumbleserver.md Normal file
View file

@ -0,0 +1,21 @@
# <img src="/images/mumbleserver_logo.svg" height="80px" alt="mumbleserver's logo"> Mumbleserver
[![Install mumbleserver with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mumbleserver) [![Integration level](https://dash.yunohost.org/integration/mumbleserver.svg)](https://dash.yunohost.org/appci/app/mumbleserver)
### Index
- [Useful links](#useful-links)
Mumble is an efficient and stable Voice over IP software that allows you to create audio rooms for multiple people. It is a VoIP software that allows its users to benefit from very low latency and very high quality.
providing excellent sound quality. Mumble also incorporates a visual overlay that discreetly positions itself above the other windows to provide a view of the microphone activation of the people you are talking to.
Here is the 'Murmur' server that you will install on your instance of Yunohost.
It is necessary to use a [Mumble client](https://wiki.mumble.info/wiki/3rd_Party_Applications) to use it for each interlocutor.
## Useful links
+ Website: [www.mumble.info](https://www.mumble.info)
+ Official documentation: [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page)
+ Application software repository: [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues)

19
app_mumbleserver_fr.md Normal file
View file

@ -0,0 +1,19 @@
# <img src="/images/mumbleserver_logo.svg" height="80px" alt="logo de mumbleserver"> Mumbleserver
[![Install mumbleserver with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mumbleserver) [![Integration level](https://dash.yunohost.org/integration/mumbleserver.svg)](https://dash.yunohost.org/appci/app/mumbleserver)
### Index
- [Liens utiles](#liens-utiles)
Mumble est un logiciel de voix sur IP efficace et stable qui vous permet de créer des salons audio pour plusieurs interlocuteurs. C'est un logiciel de VoIP qui fait bénéficier à ses utilisateurs d'une latence très faible tout en fournissant une qualité de son excellente. Mumble intègre également une surcouche visuelle qui se positionne discrètement au dessus des autres fenêtres afin d'avoir une vision sur l'activation des micros des gens avec qui vous parlez.
Ici, c'est la partir serveur 'Murmur' que vous installerez sur votre instance de Yunohost.
Il est nécessaire d'utiliser un [client Mumble](https://wiki.mumble.info/wiki/3rd_Party_Applications) pour l'utiliser pour chaque interlocuteur·rice.
## Liens utiles
+ Site web : [www.mumble.info](https://www.mumble.info)
+ Documentation officielle : [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues)

16
app_phpmyadmin.md Normal file
View file

@ -0,0 +1,16 @@
# <img src="/images/phpmyadmin_logo.svg" height="80px" alt="phpmyadmin's logo"> phpMyAdmin
[![Install phpmyadmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpmyadmin) [![Integration level](https://dash.yunohost.org/integration/phpmyadmin.svg)](https://dash.yunohost.org/appci/app/phpmyadmin)
### Index
- [Useful links](#useful-links)
phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc) can be performed via the user interface, while you still have the ability to directly execute any SQL statement.
## Useful links
+ Website: [www.phpmyadmin.net](https://www.phpmyadmin.net/)
+ Official documentation: [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/)
+ Application software repository: [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues)

16
app_phpmyadmin_fr.md Normal file
View file

@ -0,0 +1,16 @@
# <img src="/images/phpmyadmin_logo.svg" height="80px" alt="logo de phpmyadmin"> phpMyAdmin
[![Install phpmyadmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpmyadmin) [![Integration level](https://dash.yunohost.org/integration/phpmyadmin.svg)](https://dash.yunohost.org/appci/app/phpmyadmin)
### Index
- [Liens utiles](#liens-utiles)
phpMyAdmin est un outil logiciel libre écrit en PHP, destiné à gérer l'administration de MySQL sur le Web. phpMyAdmin supporte un large éventail d'opérations sur MySQL et MariaDB. Les opérations fréquemment utilisées (gestion des bases de données, des tables, des colonnes, des relations, des index, des utilisateurs, des autorisations, etc.) peuvent être effectuées via l'interface utilisateur, tout en ayant la possibilité d'exécuter directement n'importe quelle instruction SQL.
## Liens utiles
+ Site web : [www.phpmyadmin.net](https://www.phpmyadmin.net/)
+ Documentation officielle : [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues)

16
app_phpsysinfo.md Normal file
View file

@ -0,0 +1,16 @@
# <img src="/images/phpsysinfo_logo.png" height="80px" alt="phpsysinfo's logo"> Phpsysinfo
[![Install phpsysinfo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpsysinfo) [![Integration level](https://dash.yunohost.org/integration/phpsysinfo.svg)](https://dash.yunohost.org/appci/app/phpsysinfo)
### Index
- [Useful links](#useful-links)
A customizable PHP script that displays information about your system (CPU, Ram, disks).
## Useful links
+ Website: [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/)
+ Demonstration: [Demo](https://phpsysinfo.github.io/phpsysinfo/demos.html)
+ Application software repository: [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues)

14
app_phpsysinfo_fr.md Normal file
View file

@ -0,0 +1,14 @@
# <img src="/images/phpsysinfo_logo.png" height="80px" alt="logo de phpsysinfo"> Phpsysinfo
[![Install phpsysinfo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpsysinfo) [![Integration level](https://dash.yunohost.org/integration/phpsysinfo.svg)](https://dash.yunohost.org/appci/app/phpsysinfo)
### Index
Un script PHP personnalisable qui affiche bien les informations sur votre système (CPU, Ram, disques...).
## Liens utiles
+ Site web : [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/)
+ Démonstration : [Démo](https://phpsysinfo.github.io/phpsysinfo/demos.html)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues)

View file

@ -11,7 +11,7 @@
Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, Piwigo est libre et gratuit. Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, Piwigo est libre et gratuit.
En plus des [fonctionnalités principales](http://piwigo.org/basics/features) de Piwigo, ce paquet propose également : En plus des [fonctionnalités principales](https://fr.piwigo.org/fonctionnalites) de Piwigo, ce paquet propose également :
* une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost : * une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost :
* installation privée : limitée aux utilisateurs de YunoHost * installation privée : limitée aux utilisateurs de YunoHost
@ -33,3 +33,5 @@ En plus des [fonctionnalités principales](http://piwigo.org/basics/features) de
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues) + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues)

19
app_searx.md Normal file
View file

@ -0,0 +1,19 @@
# <img src="/images/searx_logo.svg" height="80px" alt="searx's logo"> Searx
[![Install searx with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=searx) [![Integration level](https://dash.yunohost.org/integration/searx.svg)](https://dash.yunohost.org/appci/app/searx)
### Index
- [Useful links](#useful-links)
Searx is a free and decentralized meta-search engine. The queries made are not saved by searx in order to protect the privacy of the user-rice-s.
As a metasearch engine, searx collects and displays results from dozens of search engines. The search engines used (or not) can be configured in the preferences.
As a decentralized software, searx is installed on different instances (different servers). In France, associations such as Framasoft, Aquilenet or La Quadrature du Net have installed it on their servers.
## Useful links
+ Website: [searx.me](https://searx.me/)
+ Official documentation: [asciimoo.github.io/searx](https://asciimoo.github.io/searx/)
+ Demonstration: [Demo](https://demo.yunohost.org/searx/)
+ Application software repository: [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues)

19
app_searx_fr.md Normal file
View file

@ -0,0 +1,19 @@
# <img src="/images/searx_logo.svg" height="80px" alt="logo de searx"> Searx
[![Install searx with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=searx) [![Integration level](https://dash.yunohost.org/integration/searx.svg)](https://dash.yunohost.org/appci/app/searx)
### Index
- [Liens utiles](#liens-utiles)
Searx est un métamoteur de recherche libre et décentralisé. Les requêtes effectuées ne sont pas enregistrées par searx afin de protéger la vie privée des utilisateur·rice·s.
En tant que métamoteur, searx collecte et affiche les résultats issus de plusieurs dizaines de moteurs de recherche. Les moteurs utilisés (ou non) sont paramétrables dans les préférences.
En tant que logiciel décentralisé, searx est installé sur différentes instances (différents serveurs). En France, des associations comme Framasoft, Aquilenet ou La Quadrature du Net l'ont installé sur leurs serveurs.
## Liens utiles
+ Site web : [searx.me](https://searx.me/)
+ Documentation officielle : [asciimoo.github.io/searx](https://asciimoo.github.io/searx/)
+ Démonstration : [Démo](https://demo.yunohost.org/searx/)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues)

16
app_shellinabox.md Normal file
View file

@ -0,0 +1,16 @@
# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Shellinabox
[![Install shellinabox with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shellinabox) [![Integration level](https://dash.yunohost.org/integration/shellinabox.svg)](https://dash.yunohost.org/appci/app/shellinabox)
### Index
- [Useful links](#useful-links)
Shell In A Box implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins.
## Useful links
+ Website: [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox)
+ Official documentation: [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man)
+ Application software repository: [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues)

16
app_shellinabox_fr.md Normal file
View file

@ -0,0 +1,16 @@
# <img src="/images/shellinabox_logo.svg" height="80px" alt="logo de shellinabox"> Shellinabox
[![Install shellinabox with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shellinabox) [![Integration level](https://dash.yunohost.org/integration/shellinabox.svg)](https://dash.yunohost.org/appci/app/shellinabox)
### Index
- [Liens utiles](#liens-utiles)
Shell In A Box met en œuvre un serveur web qui peut saisir des lignes de commande arbitraires vers un émulateur de terminal. Cet émulateur est accessible à tout navigateur web compatible JavaScript et CSS et ne nécessite pas de plugins supplémentaires à votre navigateur Internet.
## Liens utiles
+ Site web : [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox)
+ Documentation officielle : [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues)

View file

@ -0,0 +1,16 @@
# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Unattended_upgrades
[![Install unattended_upgrades with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=unattended_upgrades) [![Integration level](https://dash.yunohost.org/integration/unattended_upgrades.svg)](https://dash.yunohost.org/appci/app/unattended_upgrades)
### Index
- [Useful links](#useful-links)
Unattended-upgrades can download and install security upgrades automatically and unattended, taking care to only install packages from the configured APT source, and checking for dpkg prompts about configuration file changes.
Apticron is a simple script which sends emails about pending package updates such as security updates, properly handling packages on hold both by dselect and aptitude.
## Useful links
+ Official documentation: [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades)
+ Application software repository: [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh)
+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues)

View file

@ -0,0 +1,16 @@
# <img src="/images/unattended_upgrades_logo.svg" height="80px" alt="logo de unattended_upgrades"> Unattended_upgrades
[![Install unattended_upgrades with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=unattended_upgrades) [![Integration level](https://dash.yunohost.org/integration/unattended_upgrades.svg)](https://dash.yunohost.org/appci/app/unattended_upgrades)
### Index
- [Liens utiles](#liens-utiles)
Unattended_upgrades est un outil qui permet de télécharger et installer les mises à jour de sécurité automatiquement et sans surveillance, en prenant soin de n'installer que les paquets provenant de la source APT configurée, et en vérifiant les invites dpkg concernant les modifications du fichier de configuration.
Apticron est un simple script qui envoie des courriels sur les mises à jour de paquets en attente comme les mises à jour de sécurité, en gérant correctement les paquets en attente.
## Liens utiles
+ Documentation officielle : [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades)
+ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh)
+ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues)

View file

@ -29,6 +29,6 @@ In addition to Wallabag core features, the following are made available with thi
### Upgrade from v1.x ### Upgrade from v1.x
No automatic upgrade process is available. You need a manual (but simple) migration from [Wallabag v1](/app_wallabag). No automatic upgrade process is available. You need a manual (but simple) migration from Wallabag v1.
Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html).

View file

@ -28,6 +28,6 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme
### Mettre à niveau depuis la v1.x ### Mettre à niveau depuis la v1.x
La mise à niveau depuis le paquet Yunohost de [Wallabag v1](/app_wallabag) demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle La mise à niveau depuis le paquet Yunohost de Wallabag v1 demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle
de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html).

163
apps.md
View file

@ -32,14 +32,14 @@ Search bar
Disclaimers Disclaimers
--> -->
<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> <div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the corresponding code repositories.</div>
<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> <div id="bad-quality-apps-disclaimer" class="alert alert-warning">
Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. Applications flagged as <span class="label label-warning label-as-badge">low quality</span> may be working, but they may not respect good packaging practices or lack integration of some features like backup/restore or single authentication. Be cautious when installing them.
</div> </div>
<div id="broken-apps-disclaimer" class="alert alert-danger"> <div id="broken-apps-disclaimer" class="alert alert-danger">
Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! Applications flagged as <span class="label label-danger label-as-badge">not working</span> are known to be broken and/or are still in development. **Do not install them** in a production environment!
</div> </div>
<div id="app-cards-list" class="app-cards-list"></div> <div id="app-cards-list" class="app-cards-list"></div>
@ -51,6 +51,10 @@ Custom CSS for this page
--> -->
<style> <style>
#wrapper {
max-width: 1100px;
}
/*================================================= /*=================================================
Search bar Search bar
=================================================*/ =================================================*/
@ -72,76 +76,84 @@ Custom CSS for this page
/*================================================= /*=================================================
App card App card
=================================================*/ =================================================*/
.app-card { .app-card {
margin-bottom:20px; margin-bottom:20px;
width:270px; width:31.2%;
float:left; float:left;
min-height: 1px; min-height: 1px;
margin-right: 10px; margin-right: 10px;
margin-left: 10px; margin-left: 10px;
border-radius: 3px; border-radius: 3px;
position: relative;
height: 230px;
} }
/*===============================================*/ .app-title {
margin-top: 0;
/*================================================= margin-bottom: 5px;
App card body font-size: 1.2em;
=================================================*/ font-weight: 700;
.app-card .panel-body > h3 { line-height: 1.1;
margin-top:0; color: black;
margin-bottom:5px; padding: 15px;
font-size:1.2em; padding-bottom: 0;
} }
.app-card .app-badges { .app-title .label {
height:35px; font-size: 0.5em;
} display: inline-block;
.app-card .app-badges .label, .app-card-date-maintainer { vertical-align: middle;
font-size:0.6em; padding: 0.5em 0.6em;
padding-bottom: 0.3em;
} }
.label-epic { .label-epic {
background-color: darkorchid; background-color: darkorchid;
} }
.app-card-date-maintainer { .app-descr {
text-align:right; height:100px;
max-height: 18px; overflow: hidden;
margin-bottom: 3px; padding: 0 15px;
margin-right: 7px; }
margin-top: -5px;
.app-footer {
width:100%;
position: absolute;
bottom: 0;
}
.app-maintainer {
font-size: 0.7em;
text-align: right;
margin-right: 5px;
} }
.app-card .unmaintained { .app-card .unmaintained {
color: #e0aa33; color: #e0aa33;
} }
.app-card-desc { /*===============================================
height:100px; App buttons
overflow: hidden;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/ =================================================*/
.app-card .btn-group { .app-buttons {
width:100%; width:100%;
margin-left: 0px;
} }
.app-card > .btn-group > .btn{ .app-buttons > .btn {
border-bottom:0; border-bottom:0;
font-size: 0.9em; font-size: 0.9em;
line-height: 1.58; line-height: 1.58;
} }
.app-card > .btn-group > .btn:first-child { .app-buttons > .btn:first-child {
border-left:0; border-left:0;
border-top-left-radius:0; border-top-left-radius:0;
} }
.app-card > .btn-group > .btn:last-child { .app-buttons > .btn:last-child {
border-right:0; border-right:0;
border-top-right-radius:0; border-top-right-radius:0;
margin-left: 0px; margin-left: 0px;
width: 33.6%; width: 33.6%;
} }
/*===============================================*/ /*===============================================*/
</style> </style>
@ -152,22 +164,19 @@ App card template
<script type="text/template" id="app-template2"> <script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}">
<div class="panel-body"> <div class="app-title">{app_name}</div>
<h3>{app_name}</h3> <div class="app-descr">{app_description}</div>
<div class="app-badges"></div> <div class="app-footer">
<div class="app-maintainer">
<div class="app-card-desc">{app_description}</div>
</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} - <span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span>
</div> </div>
<div class="btn-group" role="group"> <div class="app-buttons btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> <a href="#/app_{app_id}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div> </div>
</div>
</div> </div>
</script> </script>
@ -194,6 +203,8 @@ function timeConverter(UNIX_timestamp) {
$(document).ready(function () { $(document).ready(function () {
var default_lang = "en";
// Hide warrant about states when we're using the default filter // Hide warrant about states when we're using the default filter
$('#state-disclaimer').hide(); $('#state-disclaimer').hide();
var quality_filters = "decent"; var quality_filters = "decent";
@ -207,8 +218,8 @@ $(document).ready(function () {
// This is where we actually define how apps are filtered: // This is where we actually define how apps are filtered:
// we look for the name of the app (h3) and try to find the user input // we look for the name of the app (h3) and try to find the user input
// + we check this app match the current quality filter // + we check this app match the current quality filter
var app_name = $(this).find('h3').text().toLowerCase(); var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase();
if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) if (text.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0)
{ {
$(this).show(); $(this).show();
} }
@ -243,19 +254,22 @@ $(document).ready(function () {
// Fetch application catalog // Fetch application catalog
$.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { $.getJSON('https://app.yunohost.org/default/v2/apps.json', {}, function(data) {
catalog = $.map(data, function(el) { return el; }); catalog = $.map(data["apps"], function(el) { return el; });
// Clarify high quality state, and level if undefined or inprogress or notworking... // Clarify high quality state, and level if undefined or inprogress or notworking...
$.each(catalog, function(k, infos) { $.each(catalog, function(k, infos) {
if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { if ((infos.level === undefined) || (infos.level === 0) || (infos.state === "inprogress") || (infos.state === "notworking")) {
infos.level = null; infos.level = null;
} }
if ((infos.high_quality === true) && (infos.level === 8)) { if ((infos.high_quality === true) && (infos.level === 8)) {
infos.state = "high quality"; infos.state = "high quality";
} }
else if ((infos.state === "working") && (infos.level !== null) && (infos.level <= 4)) {
infos.state = "low quality";
}
}); });
// Sort apps according to their state and level... // Sort apps according to their state and level...
@ -279,32 +293,24 @@ $(document).ready(function () {
if (infos.state === "high quality") { if (infos.state === "high quality") {
app_quality = "high,decent,working,none"; app_quality = "high,decent,working,none";
app_state_css_style = "epic"; app_badge = "high quality";
app_badge_css_style = "epic";
app_install_css_style = "success"; app_install_css_style = "success";
app_level_css_style = "epic"; } else if ((infos.state === "working") && (infos.level > 4)) {
} else if (infos.level > 4) {
app_quality = "decent,working,none"; app_quality = "decent,working,none";
app_state_css_style = "success"; app_badge = null;
app_badge_css_style = "success";
app_install_css_style = "success"; app_install_css_style = "success";
app_level_css_style = "success"; } else if (infos.state === "low quality") {
} else if (infos.level > 0) {
app_quality = "working,none"; app_quality = "working,none";
app_state_css_style = "success"; app_badge = "low quality";
app_badge_css_style = "warning";
app_install_css_style = "warning"; app_install_css_style = "warning";
app_level_css_style = "warning";
} else { } else {
app_quality = "none"; app_quality = "none";
if (infos.state === "working") { app_badge = "not working";
app_state_css_style = "success"; app_badge_css_style = "danger";
}
else if (infos.state === "inprogress") {
app_state_css_style = "warning";
}
else {
app_state_css_style = "danger";
}
app_install_css_style = "danger"; app_install_css_style = "danger";
app_level_css_style = "danger";
} }
// If level is null, we wanna display '?' // If level is null, we wanna display '?'
@ -316,13 +322,12 @@ $(document).ready(function () {
html = $('#app-template2').html() html = $('#app-template2').html()
.replace(/{app_id}/g, app_id) .replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name) .replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en) .replace('{app_description}', infos.manifest.description[default_lang] || infos.manifest.description["en"])
.replace(/{app_git}/g, infos.git.url) .replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch) .replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level) .replace('{app_level}', infos.level)
.replace('{app_quality}', app_quality) .replace('{app_quality}', app_quality)
.replace('{app_update}', timeConverter(infos.lastUpdate)) .replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_css_style}', app_state_css_style)
.replace('{app_install_css_style}', app_install_css_style); .replace('{app_install_css_style}', app_install_css_style);
// Handle the maintainer info // Handle the maintainer info
@ -354,11 +359,17 @@ $(document).ready(function () {
// Fill the template // Fill the template
$('#app-cards-list').append(html); $('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); if (app_badge !== null) {
if ((infos.state === "high quality") || (infos.state === "working")) { $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-'+app_badge_css_style+'">'+app_badge+'</span>');
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); }
if (typeof(infos.category) === "string") {
category = data["categories"].find(function(el) { return el.id == infos.category; });
if (typeof(category) !== "undefined")
{
display = category["title"][default_lang] || category["title"]["en"];
$('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-default">'+display.toLowerCase()+'</span>');
}
} }
}); });
filter(); filter();

View file

@ -1,368 +0,0 @@
# Application catalog
<span class="javascriptDisclaimer">
This page requires Javascript enabled to display properly :s.
<br/>
<br/>
</span>
<!--
Search bar
-->
<div class="input-group">
<span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span>
<input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" data-quality-filter="high">Only high quality apps</a></li>
<li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li>
<li><a href="#" data-quality-filter="working">Only working apps</a></li>
<li><a href="#" data-quality-filter="none">All apps</a></li>
</ul>
</div>
</div>
<br />
<!--
Disclaimers
-->
<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div>
<div id="bad-quality-apps-disclaimer" class="alert alert-warning">
Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices.
</div>
<div id="broken-apps-disclaimer" class="alert alert-danger">
Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment!
</div>
<div id="app-cards-list" class="app-cards-list"></div>
<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div>
<!--
Custom CSS for this page
-->
<style>
/*=================================================
Search bar
=================================================*/
#filter-app-cards, #app-cards-list {
width:100%;
}
/*===============================================*/
/*=================================================
Force return space after card list
=================================================*/
#app-cards-list:after {
content:'';
display:block;
clear: both;
}
/*===============================================*/
/*=================================================
App card
=================================================*/
.app-card {
margin-bottom:20px;
width:270px;
float:left;
min-height: 1px;
margin-right: 10px;
margin-left: 10px;
border-radius: 3px;
}
/*===============================================*/
/*=================================================
App card body
=================================================*/
.app-card .panel-body > h3 {
margin-top:0;
margin-bottom:5px;
font-size:1.2em;
}
.app-card .app-badges {
height:35px;
}
.app-card .app-badges .label, .app-card-date-maintainer {
font-size:0.6em;
}
.label-epic {
background-color: darkorchid;
}
.app-card-date-maintainer {
text-align:right;
max-height: 18px;
margin-bottom: 3px;
margin-right: 7px;
margin-top: -5px;
}
.app-card .unmaintained {
color: #e0aa33;
}
.app-card-desc {
height:100px;
overflow: hidden;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/
.app-card .btn-group {
width:100%;
margin-left: 0px;
}
.app-card > .btn-group > .btn{
border-bottom:0;
font-size: 0.9em;
line-height: 1.58;
}
.app-card > .btn-group > .btn:first-child {
border-left:0;
border-top-left-radius:0;
}
.app-card > .btn-group > .btn:last-child {
border-right:0;
border-top-right-radius:0;
margin-left: 0px;
width: 33.6%;
}
/*===============================================*/
</style>
<!--
App card template
-->
<script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}">
<div class="panel-body">
<h3>{app_name}</h3>
<div class="app-badges"></div>
<div class="app-card-desc">{app_description}</div>
</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span>
</div>
<div class="btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div>
</div>
</script>
<!--
Javascript helpers
-->
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year;//+' at '+hour+':'+min
return time;
}
$(document).ready(function () {
// Hide warrant about states when we're using the default filter
$('#state-disclaimer').hide();
var quality_filters = "decent";
function filter(){
var current_quality_filter = $('#current-quality-filter').data("filter");
var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase();
$('.app-card').each(function() {
// This is where we actually define how apps are filtered:
// we look for the name of the app (h3) and try to find the user input
// + we check this app match the current quality filter
var app_name = $(this).find('h3').text().toLowerCase();
if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0)
{
$(this).show();
}
else
{
$(this).hide();
}
});
// Display or hide the disclaimers depending on the current filter...
((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide();
((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide();
}
//=================================================
// Search & filter bar event
//=================================================
$('#filter-app-cards').keyup(filter);
$('a[data-quality-filter]').on("click", function(){
$('#current-quality-filter').text($(this).text());
$('#current-quality-filter').data("filter", $(this).data("quality-filter"));
filter();
});
filter();
//=================================================
// Upload apps lists
//=================================================
var catalog = undefined;
// Fetch application catalog
$.getJSON('https://app.yunohost.org/apps.json', {}, function(data) {
catalog = $.map(data, function(el) { return el; });
// Clarify high quality state, and level if undefined or inprogress or notworking...
$.each(catalog, function(k, infos) {
if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) {
infos.level = null;
}
if ((infos.high_quality === true) && (infos.level === 8)) {
infos.state = "high quality";
}
});
// Sort apps according to their state and level...
catalog.sort(function(a, b){
a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1;
b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1;
if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id == b.manifest.id) {return 0;}
return -1;
});
// Add the card for each app
$.each(catalog, function(k, infos) {
app_id = infos.manifest.id;
// Define what style to use for state, level and install button
// according to the app quality ....
if (infos.state === "high quality") {
app_quality = "high,decent,working,none";
app_state_css_style = "epic";
app_install_css_style = "success";
app_level_css_style = "epic";
} else if (infos.level > 4) {
app_quality = "decent,working,none";
app_state_css_style = "success";
app_install_css_style = "success";
app_level_css_style = "success";
} else if (infos.level > 0) {
app_quality = "working,none";
app_state_css_style = "success";
app_install_css_style = "warning";
app_level_css_style = "warning";
} else {
app_quality = "none";
if (infos.state === "working") {
app_state_css_style = "success";
}
else if (infos.state === "inprogress") {
app_state_css_style = "warning";
}
else {
app_state_css_style = "danger";
}
app_install_css_style = "danger";
app_level_css_style = "danger";
}
// If level is null, we wanna display '?'
if (infos.level == null) {
infos.level = '?';
}
// Fill the template
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_quality}', app_quality)
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_css_style}', app_state_css_style)
.replace('{app_install_css_style}', app_install_css_style);
// Handle the maintainer info
if (infos.maintained == false)
{
html = html
.replace('{maintained_state}', 'unmaintained')
.replace('{maintained_icon}', 'warning-sign')
.replace('{app_maintainer}', "Unmaintained")
.replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !");
}
else {
html = html
.replace('{maintained_state}', 'maintained')
.replace('{maintained_icon}', 'user')
.replace('{maintained_help}', "Current maintainer of this package");
if ((infos.manifest.developer) && (infos.manifest.developer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.developer.name);
}
else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.maintainer.name);
}
else {
html = html.replace('{app_maintainer}', "???");
}
}
// Fill the template
$('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>');
if ((infos.state === "high quality") || (infos.state === "working")) {
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>');
}
});
filter();
});
//=================================================
});
</script>

View file

@ -1,368 +0,0 @@
# Application catalog
<span class="javascriptDisclaimer">
This page requires Javascript enabled to display properly :s.
<br/>
<br/>
</span>
<!--
Search bar
-->
<div class="input-group">
<span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span>
<input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" data-quality-filter="high">Only high quality apps</a></li>
<li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li>
<li><a href="#" data-quality-filter="working">Only working apps</a></li>
<li><a href="#" data-quality-filter="none">All apps</a></li>
</ul>
</div>
</div>
<br />
<!--
Disclaimers
-->
<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div>
<div id="bad-quality-apps-disclaimer" class="alert alert-warning">
Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices.
</div>
<div id="broken-apps-disclaimer" class="alert alert-danger">
Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment!
</div>
<div id="app-cards-list" class="app-cards-list"></div>
<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div>
<!--
Custom CSS for this page
-->
<style>
/*=================================================
Search bar
=================================================*/
#filter-app-cards, #app-cards-list {
width:100%;
}
/*===============================================*/
/*=================================================
Force return space after card list
=================================================*/
#app-cards-list:after {
content:'';
display:block;
clear: both;
}
/*===============================================*/
/*=================================================
App card
=================================================*/
.app-card {
margin-bottom:20px;
width:270px;
float:left;
min-height: 1px;
margin-right: 10px;
margin-left: 10px;
border-radius: 3px;
}
/*===============================================*/
/*=================================================
App card body
=================================================*/
.app-card .panel-body > h3 {
margin-top:0;
margin-bottom:5px;
font-size:1.2em;
}
.app-card .app-badges {
height:35px;
}
.app-card .app-badges .label, .app-card-date-maintainer {
font-size:0.6em;
}
.label-epic {
background-color: darkorchid;
}
.app-card-date-maintainer {
text-align:right;
max-height: 18px;
margin-bottom: 3px;
margin-right: 7px;
margin-top: -5px;
}
.app-card .unmaintained {
color: #e0aa33;
}
.app-card-desc {
height:100px;
overflow: hidden;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/
.app-card .btn-group {
width:100%;
margin-left: 0px;
}
.app-card > .btn-group > .btn{
border-bottom:0;
font-size: 0.9em;
line-height: 1.58;
}
.app-card > .btn-group > .btn:first-child {
border-left:0;
border-top-left-radius:0;
}
.app-card > .btn-group > .btn:last-child {
border-right:0;
border-top-right-radius:0;
margin-left: 0px;
width: 33.6%;
}
/*===============================================*/
</style>
<!--
App card template
-->
<script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}">
<div class="panel-body">
<h3>{app_name}</h3>
<div class="app-badges"></div>
<div class="app-card-desc">{app_description}</div>
</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span>
</div>
<div class="btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div>
</div>
</script>
<!--
Javascript helpers
-->
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year;//+' at '+hour+':'+min
return time;
}
$(document).ready(function () {
// Hide warrant about states when we're using the default filter
$('#state-disclaimer').hide();
var quality_filters = "decent";
function filter(){
var current_quality_filter = $('#current-quality-filter').data("filter");
var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase();
$('.app-card').each(function() {
// This is where we actually define how apps are filtered:
// we look for the name of the app (h3) and try to find the user input
// + we check this app match the current quality filter
var app_name = $(this).find('h3').text().toLowerCase();
if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0)
{
$(this).show();
}
else
{
$(this).hide();
}
});
// Display or hide the disclaimers depending on the current filter...
((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide();
((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide();
}
//=================================================
// Search & filter bar event
//=================================================
$('#filter-app-cards').keyup(filter);
$('a[data-quality-filter]').on("click", function(){
$('#current-quality-filter').text($(this).text());
$('#current-quality-filter').data("filter", $(this).data("quality-filter"));
filter();
});
filter();
//=================================================
// Upload apps lists
//=================================================
var catalog = undefined;
// Fetch application catalog
$.getJSON('https://app.yunohost.org/apps.json', {}, function(data) {
catalog = $.map(data, function(el) { return el; });
// Clarify high quality state, and level if undefined or inprogress or notworking...
$.each(catalog, function(k, infos) {
if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) {
infos.level = null;
}
if ((infos.high_quality === true) && (infos.level === 8)) {
infos.state = "high quality";
}
});
// Sort apps according to their state and level...
catalog.sort(function(a, b){
a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1;
b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1;
if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id == b.manifest.id) {return 0;}
return -1;
});
// Add the card for each app
$.each(catalog, function(k, infos) {
app_id = infos.manifest.id;
// Define what style to use for state, level and install button
// according to the app quality ....
if (infos.state === "high quality") {
app_quality = "high,decent,working,none";
app_state_css_style = "epic";
app_install_css_style = "success";
app_level_css_style = "epic";
} else if (infos.level > 4) {
app_quality = "decent,working,none";
app_state_css_style = "success";
app_install_css_style = "success";
app_level_css_style = "success";
} else if (infos.level > 0) {
app_quality = "working,none";
app_state_css_style = "success";
app_install_css_style = "warning";
app_level_css_style = "warning";
} else {
app_quality = "none";
if (infos.state === "working") {
app_state_css_style = "success";
}
else if (infos.state === "inprogress") {
app_state_css_style = "warning";
}
else {
app_state_css_style = "danger";
}
app_install_css_style = "danger";
app_level_css_style = "danger";
}
// If level is null, we wanna display '?'
if (infos.level == null) {
infos.level = '?';
}
// Fill the template
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_quality}', app_quality)
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_css_style}', app_state_css_style)
.replace('{app_install_css_style}', app_install_css_style);
// Handle the maintainer info
if (infos.maintained == false)
{
html = html
.replace('{maintained_state}', 'unmaintained')
.replace('{maintained_icon}', 'warning-sign')
.replace('{app_maintainer}', "Unmaintained")
.replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !");
}
else {
html = html
.replace('{maintained_state}', 'maintained')
.replace('{maintained_icon}', 'user')
.replace('{maintained_help}', "Current maintainer of this package");
if ((infos.manifest.developer) && (infos.manifest.developer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.developer.name);
}
else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.maintainer.name);
}
else {
html = html.replace('{app_maintainer}', "???");
}
}
// Fill the template
$('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>');
if ((infos.state === "high quality") || (infos.state === "working")) {
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>');
}
});
filter();
});
//=================================================
});
</script>

View file

@ -1,4 +1,4 @@
# Application catalog # Catalogue d'applications
<span class="javascriptDisclaimer"> <span class="javascriptDisclaimer">
Cette page requiert que Javascript soit activé pour s'afficher correctement :s. Cette page requiert que Javascript soit activé pour s'afficher correctement :s.
@ -34,11 +34,11 @@ Disclaimers
<div class="alert alert-info">L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code.</div> <div class="alert alert-info">L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code.</div>
<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> <div id="bad-quality-apps-disclaimer" class="alert alert-warning">
Les applications avec un niveau inférieur ou égal à 4 peuvent fonctionner, mais ne seront pas forcément bien intégrées avec YunoHost, ou bien ne respectent pas les bonnes pratiques de packaging. Les applications étiquettées <span class="label label-warning label-as-badge">low quality</span> fonctionnent peut-être, mais ne respectent pas les bonnes pratiques de packaging ou ne supportent pas certaines fonctionnalités comme les sauvegardes/restauration ou l'authentication unifiée. Soyez prudent si vous les installez.
</div> </div>
<div id="broken-apps-disclaimer" class="alert alert-danger"> <div id="broken-apps-disclaimer" class="alert alert-danger">
Les applications niveau 0, ou étiquettées <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont toujours en cours de packaging ou sont connues pour être cassées. **Ne les installez pas** sur un serveur de production! Les applications étiquettées <span class="label label-danger label-as-badge">not working</span> sont connues pour être cassées et/ou encore en développement. **Ne les installez pas** sur un serveur de production!
</div> </div>
<div id="app-cards-list" class="app-cards-list"></div> <div id="app-cards-list" class="app-cards-list"></div>
@ -50,6 +50,10 @@ Custom CSS for this page
--> -->
<style> <style>
#wrapper {
max-width: 1100px;
}
/*================================================= /*=================================================
Search bar Search bar
=================================================*/ =================================================*/
@ -71,76 +75,84 @@ Custom CSS for this page
/*================================================= /*=================================================
App card App card
=================================================*/ =================================================*/
.app-card { .app-card {
margin-bottom:20px; margin-bottom:20px;
width:270px; width:31.2%;
float:left; float:left;
min-height: 1px; min-height: 1px;
margin-right: 10px; margin-right: 10px;
margin-left: 10px; margin-left: 10px;
border-radius: 3px; border-radius: 3px;
position: relative;
height: 230px;
} }
/*===============================================*/ .app-title {
margin-top: 0;
/*================================================= margin-bottom: 5px;
App card body font-size: 1.2em;
=================================================*/ font-weight: 700;
.app-card .panel-body > h3 { line-height: 1.1;
margin-top:0; color: black;
margin-bottom:5px; padding: 15px;
font-size:1.2em; padding-bottom: 0;
} }
.app-card .app-badges { .app-title .label {
height:35px; font-size: 0.5em;
} display: inline-block;
.app-card .app-badges .label, .app-card-date-maintainer { vertical-align: middle;
font-size:0.6em; padding: 0.5em 0.6em;
padding-bottom: 0.3em;
} }
.label-epic { .label-epic {
background-color: darkorchid; background-color: darkorchid;
} }
.app-card-date-maintainer { .app-descr {
text-align:right; height:100px;
max-height: 18px; overflow: hidden;
margin-bottom: 3px; padding: 0 15px;
margin-right: 7px; }
margin-top: -5px;
.app-footer {
width:100%;
position: absolute;
bottom: 0;
}
.app-maintainer {
font-size: 0.7em;
text-align: right;
margin-right: 5px;
} }
.app-card .unmaintained { .app-card .unmaintained {
color: #e0aa33; color: #e0aa33;
} }
.app-card-desc { /*===============================================
height:100px; App buttons
overflow: hidden;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/ =================================================*/
.app-card .btn-group { .app-buttons {
width:100%; width:100%;
margin-left: 0px;
} }
.app-card > .btn-group > .btn{ .app-buttons > .btn {
border-bottom:0; border-bottom:0;
font-size: 0.9em; font-size: 0.9em;
line-height: 1.58; line-height: 1.58;
} }
.app-card > .btn-group > .btn:first-child { .app-buttons > .btn:first-child {
border-left:0; border-left:0;
border-top-left-radius:0; border-top-left-radius:0;
} }
.app-card > .btn-group > .btn:last-child { .app-buttons > .btn:last-child {
border-right:0; border-right:0;
border-top-right-radius:0; border-top-right-radius:0;
margin-left: 0px; margin-left: 0px;
width: 33.6%; width: 33.6%;
} }
/*===============================================*/ /*===============================================*/
</style> </style>
@ -151,22 +163,19 @@ App card template
<script type="text/template" id="app-template2"> <script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}">
<div class="panel-body"> <div class="app-title">{app_name}</div>
<h3>{app_name}</h3> <div class="app-descr">{app_description}</div>
<div class="app-badges"></div> <div class="app-footer">
<div class="app-maintainer">
<div class="app-card-desc">{app_description}</div>
</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} - <span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span>
</div> </div>
<div class="btn-group" role="group"> <div class="app-buttons btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> <a href="#/app_{app_id}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Installer</a> <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div>
</div> </div>
</div> </div>
</script> </script>
@ -193,6 +202,8 @@ function timeConverter(UNIX_timestamp) {
$(document).ready(function () { $(document).ready(function () {
var default_lang = "fr";
// Hide warrant about states when we're using the default filter // Hide warrant about states when we're using the default filter
$('#state-disclaimer').hide(); $('#state-disclaimer').hide();
var quality_filters = "decent"; var quality_filters = "decent";
@ -206,8 +217,8 @@ $(document).ready(function () {
// This is where we actually define how apps are filtered: // This is where we actually define how apps are filtered:
// we look for the name of the app (h3) and try to find the user input // we look for the name of the app (h3) and try to find the user input
// + we check this app match the current quality filter // + we check this app match the current quality filter
var app_name = $(this).find('h3').text().toLowerCase(); var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase();
if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) if (text.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0)
{ {
$(this).show(); $(this).show();
} }
@ -242,19 +253,22 @@ $(document).ready(function () {
// Fetch application catalog // Fetch application catalog
$.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { $.getJSON('https://app.yunohost.org/default/v2/apps.json', {}, function(data) {
catalog = $.map(data, function(el) { return el; }); catalog = $.map(data["apps"], function(el) { return el; });
// Clarify high quality state, and level if undefined or inprogress or notworking... // Clarify high quality state, and level if undefined or inprogress or notworking...
$.each(catalog, function(k, infos) { $.each(catalog, function(k, infos) {
if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { if ((infos.level === undefined) || (infos.level === 0) || (infos.state === "inprogress") || (infos.state === "notworking")) {
infos.level = null; infos.level = null;
} }
if ((infos.high_quality === true) && (infos.level === 8)) { if ((infos.high_quality === true) && (infos.level === 8)) {
infos.state = "high quality"; infos.state = "high quality";
} }
else if ((infos.state === "working") && (infos.level !== null) && (infos.level <= 4)) {
infos.state = "low quality";
}
}); });
// Sort apps according to their state and level... // Sort apps according to their state and level...
@ -278,32 +292,24 @@ $(document).ready(function () {
if (infos.state === "high quality") { if (infos.state === "high quality") {
app_quality = "high,decent,working,none"; app_quality = "high,decent,working,none";
app_state_css_style = "epic"; app_badge = "high quality";
app_badge_css_style = "epic";
app_install_css_style = "success"; app_install_css_style = "success";
app_level_css_style = "epic"; } else if ((infos.state === "working") && (infos.level > 4)) {
} else if (infos.level > 4) {
app_quality = "decent,working,none"; app_quality = "decent,working,none";
app_state_css_style = "success"; app_badge = null;
app_badge_css_style = "success";
app_install_css_style = "success"; app_install_css_style = "success";
app_level_css_style = "success"; } else if (infos.state === "low quality") {
} else if (infos.level > 0) {
app_quality = "working,none"; app_quality = "working,none";
app_state_css_style = "success"; app_badge = "low quality";
app_badge_css_style = "warning";
app_install_css_style = "warning"; app_install_css_style = "warning";
app_level_css_style = "warning";
} else { } else {
app_quality = "none"; app_quality = "none";
if (infos.state === "working") { app_badge = "not working";
app_state_css_style = "success"; app_badge_css_style = "danger";
}
else if (infos.state === "inprogress") {
app_state_css_style = "warning";
}
else {
app_state_css_style = "danger";
}
app_install_css_style = "danger"; app_install_css_style = "danger";
app_level_css_style = "danger";
} }
// If level is null, we wanna display '?' // If level is null, we wanna display '?'
@ -315,13 +321,12 @@ $(document).ready(function () {
html = $('#app-template2').html() html = $('#app-template2').html()
.replace(/{app_id}/g, app_id) .replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name) .replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.fr) .replace('{app_description}', infos.manifest.description[default_lang] || infos.manifest.description["en"])
.replace(/{app_git}/g, infos.git.url) .replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch) .replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level) .replace('{app_level}', infos.level)
.replace('{app_quality}', app_quality) .replace('{app_quality}', app_quality)
.replace('{app_update}', timeConverter(infos.lastUpdate)) .replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_css_style}', app_state_css_style)
.replace('{app_install_css_style}', app_install_css_style); .replace('{app_install_css_style}', app_install_css_style);
// Handle the maintainer info // Handle the maintainer info
@ -353,11 +358,17 @@ $(document).ready(function () {
// Fill the template // Fill the template
$('#app-cards-list').append(html); $('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); if (app_badge !== null) {
if ((infos.state === "high quality") || (infos.state === "working")) { $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-'+app_badge_css_style+'">'+app_badge+'</span>');
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">niveau '+infos.level+'</span>'); }
if (typeof(infos.category) === "string") {
category = data["categories"].find(function(el) { return el.id == infos.category; });
if (typeof(category) !== "undefined")
{
display = category["title"][default_lang] || category["title"]["en"];
$('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-default">'+display.toLowerCase()+'</span>');
}
} }
}); });
filter(); filter();

View file

@ -1,368 +0,0 @@
# Application catalog
<span class="javascriptDisclaimer">
This page requires Javascript enabled to display properly :s.
<br/>
<br/>
</span>
<!--
Search bar
-->
<div class="input-group">
<span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span>
<input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" data-quality-filter="high">Only high quality apps</a></li>
<li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li>
<li><a href="#" data-quality-filter="working">Only working apps</a></li>
<li><a href="#" data-quality-filter="none">All apps</a></li>
</ul>
</div>
</div>
<br />
<!--
Disclaimers
-->
<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div>
<div id="bad-quality-apps-disclaimer" class="alert alert-warning">
Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices.
</div>
<div id="broken-apps-disclaimer" class="alert alert-danger">
Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment!
</div>
<div id="app-cards-list" class="app-cards-list"></div>
<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div>
<!--
Custom CSS for this page
-->
<style>
/*=================================================
Search bar
=================================================*/
#filter-app-cards, #app-cards-list {
width:100%;
}
/*===============================================*/
/*=================================================
Force return space after card list
=================================================*/
#app-cards-list:after {
content:'';
display:block;
clear: both;
}
/*===============================================*/
/*=================================================
App card
=================================================*/
.app-card {
margin-bottom:20px;
width:270px;
float:left;
min-height: 1px;
margin-right: 10px;
margin-left: 10px;
border-radius: 3px;
}
/*===============================================*/
/*=================================================
App card body
=================================================*/
.app-card .panel-body > h3 {
margin-top:0;
margin-bottom:5px;
font-size:1.2em;
}
.app-card .app-badges {
height:35px;
}
.app-card .app-badges .label, .app-card-date-maintainer {
font-size:0.6em;
}
.label-epic {
background-color: darkorchid;
}
.app-card-date-maintainer {
text-align:right;
max-height: 18px;
margin-bottom: 3px;
margin-right: 7px;
margin-top: -5px;
}
.app-card .unmaintained {
color: #e0aa33;
}
.app-card-desc {
height:100px;
overflow: hidden;
}
/*===============================================*/
/*=================================================
App card footer
=================================================*/
.app-card .btn-group {
width:100%;
margin-left: 0px;
}
.app-card > .btn-group > .btn{
border-bottom:0;
font-size: 0.9em;
line-height: 1.58;
}
.app-card > .btn-group > .btn:first-child {
border-left:0;
border-top-left-radius:0;
}
.app-card > .btn-group > .btn:last-child {
border-right:0;
border-top-right-radius:0;
margin-left: 0px;
width: 33.6%;
}
/*===============================================*/
</style>
<!--
App card template
-->
<script type="text/template" id="app-template2">
<div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}">
<div class="panel-body">
<h3>{app_name}</h3>
<div class="app-badges"></div>
<div class="app-card-desc">{app_description}</div>
</div>
<div class="app-card-date-maintainer">
<span class="glyphicon glyphicon-refresh"></span> {app_update} -
<span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span>
</div>
<div class="btn-group" role="group">
<a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a>
<a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a>
<a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a>
</div>
</div>
</script>
<!--
Javascript helpers
-->
<script>
function timeConverter(UNIX_timestamp) {
var a = new Date(UNIX_timestamp*1000);
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (hour < 10) { hour = '0' + hour; }
if (min < 10) { min = '0' + min; }
var time = date+' '+month+' '+year;//+' at '+hour+':'+min
return time;
}
$(document).ready(function () {
// Hide warrant about states when we're using the default filter
$('#state-disclaimer').hide();
var quality_filters = "decent";
function filter(){
var current_quality_filter = $('#current-quality-filter').data("filter");
var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase();
$('.app-card').each(function() {
// This is where we actually define how apps are filtered:
// we look for the name of the app (h3) and try to find the user input
// + we check this app match the current quality filter
var app_name = $(this).find('h3').text().toLowerCase();
if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0)
{
$(this).show();
}
else
{
$(this).hide();
}
});
// Display or hide the disclaimers depending on the current filter...
((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide();
((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide();
}
//=================================================
// Search & filter bar event
//=================================================
$('#filter-app-cards').keyup(filter);
$('a[data-quality-filter]').on("click", function(){
$('#current-quality-filter').text($(this).text());
$('#current-quality-filter').data("filter", $(this).data("quality-filter"));
filter();
});
filter();
//=================================================
// Upload apps lists
//=================================================
var catalog = undefined;
// Fetch application catalog
$.getJSON('https://app.yunohost.org/apps.json', {}, function(data) {
catalog = $.map(data, function(el) { return el; });
// Clarify high quality state, and level if undefined or inprogress or notworking...
$.each(catalog, function(k, infos) {
if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) {
infos.level = null;
}
if ((infos.high_quality === true) && (infos.level === 8)) {
infos.state = "high quality";
}
});
// Sort apps according to their state and level...
catalog.sort(function(a, b){
a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1;
b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1;
if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;}
else if (a.manifest.id == b.manifest.id) {return 0;}
return -1;
});
// Add the card for each app
$.each(catalog, function(k, infos) {
app_id = infos.manifest.id;
// Define what style to use for state, level and install button
// according to the app quality ....
if (infos.state === "high quality") {
app_quality = "high,decent,working,none";
app_state_css_style = "epic";
app_install_css_style = "success";
app_level_css_style = "epic";
} else if (infos.level > 4) {
app_quality = "decent,working,none";
app_state_css_style = "success";
app_install_css_style = "success";
app_level_css_style = "success";
} else if (infos.level > 0) {
app_quality = "working,none";
app_state_css_style = "success";
app_install_css_style = "warning";
app_level_css_style = "warning";
} else {
app_quality = "none";
if (infos.state === "working") {
app_state_css_style = "success";
}
else if (infos.state === "inprogress") {
app_state_css_style = "warning";
}
else {
app_state_css_style = "danger";
}
app_install_css_style = "danger";
app_level_css_style = "danger";
}
// If level is null, we wanna display '?'
if (infos.level == null) {
infos.level = '?';
}
// Fill the template
html = $('#app-template2').html()
.replace(/{app_id}/g, app_id)
.replace(/{app_name}/g, infos.manifest.name)
.replace('{app_description}', infos.manifest.description.en)
.replace(/{app_git}/g, infos.git.url)
.replace('{app_branch}', infos.git.branch)
.replace('{app_level}', infos.level)
.replace('{app_quality}', app_quality)
.replace('{app_update}', timeConverter(infos.lastUpdate))
.replace('{app_state_css_style}', app_state_css_style)
.replace('{app_install_css_style}', app_install_css_style);
// Handle the maintainer info
if (infos.maintained == false)
{
html = html
.replace('{maintained_state}', 'unmaintained')
.replace('{maintained_icon}', 'warning-sign')
.replace('{app_maintainer}', "Unmaintained")
.replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !");
}
else {
html = html
.replace('{maintained_state}', 'maintained')
.replace('{maintained_icon}', 'user')
.replace('{maintained_help}', "Current maintainer of this package");
if ((infos.manifest.developer) && (infos.manifest.developer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.developer.name);
}
else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) {
html = html.replace('{app_maintainer}', infos.manifest.maintainer.name);
}
else {
html = html.replace('{app_maintainer}', "???");
}
}
// Fill the template
$('#app-cards-list').append(html);
$('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id);
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>');
if ((infos.state === "high quality") || (infos.state === "working")) {
$('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>');
}
});
filter();
});
//=================================================
});
</script>

View file

@ -1,8 +1,3 @@
<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div>
<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div>
# Apps wishlist # Apps wishlist
<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in apps list: see the <a href="/apps">apps list</a></div> <div class="alert alert-info">Before to add an app in wishlist please check your app is not already in apps list: see the <a href="/apps">apps list</a></div>
@ -57,6 +52,7 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [Gollum](https://github.com/gollum/gollum) - [Gollum](https://github.com/gollum/gollum)
- [Goploader](https://github.com/Depado/goploader) - [Goploader](https://github.com/Depado/goploader)
- [Granary](https://github.com/snarfed/granary) - [Granary](https://github.com/snarfed/granary)
- [Graphhopper](https://www.graphhopper.com/) / [github](https://github.com/graphhopper/graphhopper#get-started) or other routing service that can be plugged to [Nextcloud Maps](https://apps.nextcloud.com/apps/maps), e.g. OSRM (see below)
- [Guacamole](http://guacamole.apache.org/) - [Guacamole](http://guacamole.apache.org/)
- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) - [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica)
- [HackMD CE](https://github.com/hackmdio/hackmd) - [HackMD CE](https://github.com/hackmdio/hackmd)
@ -107,6 +103,7 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab)
- [OpenProject](https://github.com/opf/openproject) - [OpenProject](https://github.com/opf/openproject)
- [OpenSourceBilling](https://github.com/vteams/open-source-billing) - [OpenSourceBilling](https://github.com/vteams/open-source-billing)
- [OSRM](http://project-osrm.org/) / [github](https://github.com/Project-OSRM/osrm-backend/#quick-start) or other routing service that can be plugged to [Nextcloud Maps](https://apps.nextcloud.com/apps/maps), e.g. Graphhopper (see above)
- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) - [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/)
- [Paperless](https://github.com/danielquinn/paperless) - [Paperless](https://github.com/danielquinn/paperless)
- [Paperwork](http://paperwork.rocks) - [Paperwork](http://paperwork.rocks)
@ -136,6 +133,7 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network)
- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) - [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing)
- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) - [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr)
- [Spacedeck](https://github.com/spacedeck) (A web based, real time, collaborative whiteboard application with rich media support.)
- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) - [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit)
- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) - [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web)
- [Streisand](https://github.com/jlund/streisand) - [Streisand](https://github.com/jlund/streisand)
@ -155,11 +153,11 @@ The following list is a compiled wishlist of applications that would be nice-to-
- [Volumio](https://volumio.org) / [github](https://github.com/volumio) - [Volumio](https://volumio.org) / [github](https://github.com/volumio)
- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) - [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF)
- [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site) - [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site)
- [Whoogle](https://github.com/benbusby/whoogle-search) - Self-hosted, ad-free, privacy-respecting Google metasearch engine.
- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) - [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/)
- [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) - [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?)
- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) - [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic)
- [Zammad](https://github.com/zammad/zammad) - [Zammad](https://github.com/zammad/zammad)
- [ZeroTier](https://github.com/zerotier/ZeroTierOne)
- [Zola](https://www.getzola.org/) - A static site generator in one binary - [Zola](https://www.getzola.org/) - A static site generator in one binary
- [Zoneminder](https://github.com/ZoneMinder/zoneminder) - [Zoneminder](https://github.com/ZoneMinder/zoneminder)
- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) - [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip)

View file

@ -1,5 +1,10 @@
**Note :** depuis la version 2.5, Yunohost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). **Note :** depuis la version 2.5, Yunohost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**).
Quelques changements ont eu lieu qui impactent les procédures indiquées ci dessous :
* le groupe metronome n'est plus utilisé directement mais ssl-cert
* un repertoire /etc/yunohost/certs/DOMAIN.LTD-history/stamp est utilisé pour conserver chaque configuration créée et un lien symbolique est créé dessus.
### Ajout dun certificat signé par une autorité (autre que Let's Encrypt) ### Ajout dun certificat signé par une autorité (autre que Let's Encrypt)
Après création du certificat auprès de votre autorité denregistrement, vous devez être en possession dune clé privée, le fichier key et dun certificat public, le fichier crt. Après création du certificat auprès de votre autorité denregistrement, vous devez être en possession dune clé privée, le fichier key et dun certificat public, le fichier crt.

View file

@ -4,7 +4,7 @@
* [Writing documentation](/write_documentation) * [Writing documentation](/write_documentation)
* [Documentation writing guide](/doc_writing_guide) * [Documentation writing guide](/doc_writing_guide)
* [Markdown guide](/doc_markdown_guide) * [Markdown guide](/doc_markdown_guide)
* [Propulser son code avec Git & GitHub](/doc_use_git) * [Power your code using Git & GitHub](/doc_use_git)
* [Chat rooms](/chat_rooms) * [Chat rooms](/chat_rooms)
* Application packaging * Application packaging
* [Apps wishlist](/apps_wishlist) * [Apps wishlist](/apps_wishlist)

View file

@ -1,53 +1,10 @@
# Diagnose YunoHost functioning # Diagnose YunoHost functioning
If you have successfully [installed](/install) YunoHost and passed through the [post-installation](/postinstall), you probably have a **working server**. To diagnose that all critical aspects of your server are properly configured,
you should run a diagnosis from the webadmin in the "Diagnosis" section. (This
feature was added in Yunohost 3.8).
### <small>1.</small> Test it TODO: elaborate on the fact that the diagnosis runs periodically, sends an email
to root which is forwarded to the very first user created, and that issues
In a web browser, access to your server via the domain name you just entered at the post-installation step. should either be fixed or ignored (if they are understood/not relevant)
otherwise an email will be sent twice a day..
For example: `http://mydomain.com`
<div class="alert alert-warning">
If you have taken a <b>.nohost.me</b> or a <b>.noho.st</b> domain, you may have to wait 5 min before the address is reachable.
</div>
---
#### If that does not work...
---
### <small>2.</small> Have you configured your DNS well ?
<div class="alert alert-info">
This step is not necessary if you have a <b>.nohost.me</b> or a <b>.noho.st</b> domain
</div>
Go to https://www.whatsmydns.net/ , enter your domain name in the field and click `Search`.
If you do not see your IP address, or if there are red crosses everywhere, then you have probably misconfigured your [DNS](/dns).
---
### <small>3.</small> Are network ports opened on your router ?
If your DNS is properly configured, and your server is accessible locally, you may have **network ports blocked** or it may not be forwarded by your router.
In order to verify this, try accessing your server with a client outside your local network. For example via another WiFi access point or with your mobile phone in 3G/4G.
If the server is unreachable from outside your local network too, then the problem probably comes from your router's configuration.
<div class="alert alert-info">
Try to activate uPnP in your router's configuration interface, and check that your server is plugged in Ethernet directly behind it.
<p>
You can also redirect ports manually to your server's local IP address on the router's configuration interface.
</p>
</div>
---
### <small>4.</small> Does your router have hairpinning ?
If the server is accessible from outside your local network, but unreachable with its domain name on the local network, then your router probably lacks <a href="https://en.wikipedia.org/wiki/Hairpinning" target="_blank">hairpinning</a>.
Here is a [tutorial](dns_local_network) to access your server on a local network and bypass the hairpinning problem. The tutorial proposes a first solution to create a redirection with DNS of the ISP box and a second solution to modify the `hosts` file of the **clients** to instruct it to access the **server** via its local IP address. The first solution is preferable because it's not necessary to modify the `hosts` files on every computer on your local network, if you are using many different clients.

View file

@ -1,55 +1,12 @@
# Diagnostic du bon fonctionnement de YunoHost # Diagnostic du bon fonctionnement de YunoHost
Si vous avez réussi l[installation](/install) de YunoHost et passé létape de [post-installation](/postinstall), vous avez probablement un **serveur fonctionnel**. Pour vérifier que tous les aspects critiques de votre serveur sont correctement
configurés, il est recommandé d'utiliser le système de diagnostic disponible
dans la webadmin de YunoHost. (Cette fonctionnalité a été ajouté dans la version
3.8)
### <small>1.</small> Essayer TODO: elaborer le fait que le diagnostique tourne périodiquement, qu'un email
est envoyé à root qui est normalement forwardé vers le premier utilisateur créé,
Dans un navigateur web, essayez daccéder à votre serveur grâce au nom de domaine que vous avez entré à létape de post-installation. que les problèmes trouvés doivent soient être réglé, soit ignorés (si ils sont
compris ou ne sont pas pertinents) autrement un mail est envoyé deux fois par
Par exemple : `http://mondomaine.org` jour...
<div class="alert alert-warning">
Si vous avez opté pour un nom de domaine se terminant par <b>.nohost.me</b> ou <b>.noho.st</b>, vous devrez patienter cinq minutes avant que ladresse soit atteignable.
</div>
---
#### Si ça ne fonctionne pas…
---
### <small>2.</small> Avez-vous bien configuré votre DNS?
<div class="alert alert-info">
Cette étape nest pas nécessaire si vous possédez un nom de domaine en <b>.nohost.me</b> ou un <b>.noho.st</b>
</div>
Rendez-vous sur https://www.whatsmydns.net/, entrez votre nom de domaine dans le champ prévu à cet effet et cliquez sur `Search`. Si vous ne voyez pas votre adresse IP, ou sil y a des croix rouges par endroits, cela signifie que vous avez probablement mal configuré votre [DNS](/dns).
---
### <small>3.</small> Est-ce que les ports de votre box/routeur sont ouverts?
Si vos DNS sont bien configurés, et que le serveur est accessible localement, vous avez probablement des **ports bloqués** sur votre box/routeur ou non dirigés vers votre serveur.
Afin de le vérifier, essayez daccéder à votre serveur avec un client extérieur au réseau local. Par exemple grâce à un autre accès Wi-Fi ou avec un smartphone en 3G/4G.
Si le serveur est inatteignable depuis lextérieur du réseau local, le problème vient probablement de la configuration du routeur.
<div class="alert alert-info">
Essayez dactiver luPnP sur linterface de configuration de votre box/routeur, et vérifiez que le serveur y est directement connecté en Ethernet.
<p>
Vous pouvez également rediriger les ports manuellement vers ladresse IP locale de votre serveur grâce à linterface de configuration de votre box/routeur.
</p>
</div>
---
### <small>4.</small> Est-ce que votre box/routeur fait du hairpinning?
Si le serveur est accessible de lextérieur, mais inatteignable via son nom de domaine dans votre réseau local, votre box/routeur ne fait probablement pas correctement de <a href="https://fr.wikipedia.org/wiki/Hairpinning" target="_blank">hairpinning</a>.
Voici un [tutoriel](/dns_local_network) pour pouvoir accéder à son serveur en réseau local et contourner le problème de hairpinning. Le tutoriel propose en première solution de mettre en place une redirection avec le DNS de la box et en seconde solution de modifier le fichier `hosts` des **clients** pour indiquer quil doit accéder au **serveur** via son IP locale. La première solution est préférable car il ne nécessite pas de modifier le fichier `hosts` sur chacun des clients du réseau local.
___
Sinon, retentez linstallation en prenant cette fois un nom de domaine en **.nohost.me** ou en **.noho.st**.

View file

@ -68,6 +68,7 @@ Though it might be easier to understand it if displayed like this:
| CNAME | muc | `@` | | CNAME | muc | `@` |
| CNAME | pubsub | `@` | | CNAME | pubsub | `@` |
| CNAME | vjud | `@` | | CNAME | vjud | `@` |
| CNAME | xmpp-upload | `@` |
| **MX** | **@** | `your.domain.tld.` (and priority: 10) | | **MX** | **@** | `your.domain.tld.` (and priority: 10) |
| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | | TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` |
| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` |

View file

@ -35,6 +35,7 @@ _xmpp-server._tcp 3600 IN SRV 0 5 5269 tu.dominio.tld.
muc 3600 IN CNAME @ muc 3600 IN CNAME @
pubsub 3600 IN CNAME @ pubsub 3600 IN CNAME @
vjud 3600 IN CNAME @ vjud 3600 IN CNAME @
xmpp-upload 3600 IN CNAME @
# #
# Mail (MX, SPF, DKIM et DMARC) # Mail (MX, SPF, DKIM et DMARC)
@ -59,6 +60,7 @@ Pero puede ser un poco más fácil entenderla viéndola de esta manera :
| CNAME | muc | `@` | | CNAME | muc | `@` |
| CNAME | pubsub | `@` | | CNAME | pubsub | `@` |
| CNAME | vjud | `@` | | CNAME | vjud | `@` |
| CNAME | xmpp-upload | `@` |
| **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | | **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) |
| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | | TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` |
| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` |

View file

@ -69,6 +69,7 @@ suivante :
| CNAME | muc | `@` | | CNAME | muc | `@` |
| CNAME | pubsub | `@` | | CNAME | pubsub | `@` |
| CNAME | vjud | `@` | | CNAME | vjud | `@` |
| CNAME | xmpp-upload | `@` |
| **MX** | **@** | `votre.domaine.tld.` (et priorité: 10) | | **MX** | **@** | `votre.domaine.tld.` (et priorité: 10) |
| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | | TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` |
| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` |

View file

@ -65,7 +65,7 @@ you must request a domain reset on the forum
If you wish to use a different automatic domain, you first have to remove If you wish to use a different automatic domain, you first have to remove
your present domain registration. This is done in 3 steps: your present domain registration. This is done in 3 steps:
1. Remove the domain from your instance (via webadmin or the `yunohost doamin remove` CLI). 1. Remove the domain from your instance (via webadmin or the `yunohost domain remove` CLI).
**/!\ Caution: this will remove any app installed on this domain, along with its data.** **/!\ Caution: this will remove any app installed on this domain, along with its data.**
2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). 2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442).
3. Remove automatic domain configuration files on your server, via CLI only : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` 3. Remove automatic domain configuration files on your server, via CLI only : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns`

View file

@ -10,11 +10,11 @@
</ul> </ul>
</div> </div>
<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> <iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe>
</br> </br>
</br> </br>
<em>Note : this room is available via IRC (#yunohost on freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">using kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, or Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">using Riot</a>)</small></em> <em>Note : this room is available via IRC (#yunohost on freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">using kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, or Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">using Riot</a>)</small></em>
</center> </center>
<h3>... or ask on the forum !</h3> <h3>... or ask on the forum !</h3>

View file

@ -9,17 +9,17 @@
<li><em>تحلّى بالصبر</em>، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك.</li> <li><em>تحلّى بالصبر</em>، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك.</li>
</ul> </ul>
</div> </div>
<div dir="rtl"><strong>الإسم المستعار</strong> : <input id="nickname" value="foobar__" type="text"> <div dir="rtl"><strong>الإسم المستعار</strong> : <input id="nickname" value="ynhuser__" type="text">
</div> </div>
<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> <iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe>
</br> </br>
</br> </br>
<div dir="rtl"> <div dir="rtl">
<em>ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي </br> <em>ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي </br>
support@conference.yunohost.org </br> support@conference.yunohost.org </br>
<a target="_blank" href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">kiwiirc</a> باستخدام freenode على #yunohost IRC أو </br> <a target="_blank" href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">kiwiirc</a> باستخدام freenode على #yunohost IRC أو </br>
<a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">Riot</a> باستخدام Matrix أو </br> <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">Riot</a> باستخدام Matrix أو </br>
</em> </em>
</div> </div>

View file

@ -10,11 +10,11 @@
</ul> </ul>
</div> </div>
<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> <iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe>
</br> </br>
</br> </br>
<em>Note : ce salon est accessible via IRC (#yunohost sur freenode en utilisant <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">Kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, ou Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">en utilisant Riot</a>)</small>.</em> <em>Note : ce salon est accessible via IRC (#yunohost sur freenode en utilisant <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">Kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, ou Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">en utilisant Riot</a>)</small>.</em>
</center> </center>
<h3>... ou demandez sur le forum !</h3> <h3>... ou demandez sur le forum !</h3>

View file

@ -10,11 +10,11 @@
</ul> </ul>
</div> </div>
<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> <iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe>
</br> </br>
</br> </br>
<em>Nota : questa stanza e disponibile via IRC (#yunohost su freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=foobar|?&theme=mini#yunohost">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">usando Riot</a>)</small></em> <em>Nota : questa stanza e disponibile via IRC (#yunohost su freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">usando Riot</a>)</small></em>
</center> </center>
<h3>... o chiedi nel forum !</h3> <h3>... o chiedi nel forum !</h3>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="3890" height="2168" id="svg2">
<metadata id="metadata8">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs id="defs6"/>
<g id="g5" style="fill:#cccccc">
<path d="m 2889.39,6.3480122 -2.04,-4.07 c -1.01,-1.01 -2.03,-2.04 -4.06,-2.04 l -4.08,1.03 c -2.03,2.03 -3.05,3.05 -3.05,5.08 L 2789.64,1572.695 l 13.24,-2.035 83.46,-1523.70199 99.75,163.88 -1.02,0 c 75.32,221.88 106.87,458.02 94.66,708.41003 l 6.11,9.16 98.73,175.05996 6.1,6.11 c 151.66,133.336 321.63,222.907 509.94,268.707 l 45.8,74.309 6.11,2.031 1.02,-2.031 -866.19,-1416.82599 2.04,-29.52" id="path14"/>
<path d="m 2858.86,559.02801 c 106.87,218.84 145.54,549.62999 117.05,992.39199 l 416.29,-50.894 z" id="path18"/>
<path d="m 3807.48,1520.881 c 42.74,-5.086 70.22,-14.246 82.44,-27.476 l -2178.16,265.656 -1.02,0 c 1.02,90.586 41.73,161.836 121.12,212.723 21.37,15.269 43.77,26.465 64.12,33.59 19.34,-22.387 40.72,-38.676 66.17,-53.946 l 1.01,0 c 228,-138.422 566.94,-159.8 1014.78,-65.136 l 5.09,1.011 c 48.86,10.18 97.71,22.399 143.52,36.645 13.22,2.035 24.42,-2.035 33.58,-10.18 16.29,-12.215 36.65,-21.375 64.13,-27.476 l 0,-1.02 c 72.27,-128.25 169.97,-222.906 292.12,-284.996 84.48,-41.727 182.19,-69.215 291.1,-79.395" id="path20"/>
<path d="M 2761.15,1560.585 2860.89,31.798012 C 2716.36,589.56801 2484.29,1110.698 2165.71,1594.167 l 595.44,-33.582" id="path22"/>
<path d="m 2200.32,329.008 -4.07,-2.04 -4.07,1.02 -2.04,5.08 -82.44,1323.18799 12.21,-1.019 82.45,-1322.169 -2.04,-4.06" id="path24"/>
<path d="m 2084.29,1627.756 0,0 87.53,-1290.608 -461.08,1330.308 373.55,-39.7" id="path26"/>
</g>
<g id="g13" style="fill:none;stroke:#cccccc;stroke-width:12;stroke-linecap:round;stroke-linejoin:round">
<path d="m 2102.61,2057.9534 c -115.02,54.9606 -198.48,64.1207 -251.41,30.5387 -52.93,-35.6247 -134.36,-27.4847 -244.28,24.4219" id="path34"/>
<path d="m 2372.33,2066.093 c -21.37,-7.125 -44.78,-12.211 -69.21,-14.25 -49.87,-4.066 -109.93,15.27 -180.16,57.0042 -70.23,42.746 -154.71,59.0351 -255.48,49.8711" id="path36"/>
<path d="m 3000.34,1962.273 c -484.5,-99.742 -833.61,-76.336 -1047.35,71.25" id="path38"/>
<path d="m 3305.69,2010.117 c -21.38,-8.145 -44.79,-13.235 -69.22,-14.254 -49.87,-4.067 -109.92,15.269 -180.15,57.004 -70.23,41.7262 -154.71,58.0114 -255.48,49.8708" id="path40"/>
<path d="m 2655.29,341.21801 c -49.88,-30.54 -101.78,-22.39 -155.73,25.44 -46.82,-47.83 -95.67,-55.98 -146.57,-25.44" id="path42" style="stroke-width:29"/>
<path d="m 2542.31,170.21801 c -50.89,-30.53 -100.76,-18.32 -151.66,36.64 -49.88,-54.96 -100.76,-67.17 -151.66,-36.64" id="path44" style="stroke-width:29"/>
</g>
<g style="fill:#6c78af" id="g33">
<path d="m 56.770404,1763.8603 134.914516,0 c 40.53785,0 70.3051,11.5406 89.30315,34.6149 18.99058,23.0812 25.15303,55.2422 18.48477,96.4878 -2.73388,16.9207 -7.61168,32.4501 -14.63698,46.5933 -7.02825,14.1442 -16.30891,27.067 -27.84598,38.7573 -13.71822,14.0684 -29.07355,24.148 -46.07783,30.2307 -17.00335,6.0818 -38.74881,9.1232 -65.23042,9.1232 l -60.093245,0 -14.951878,92.5154 -70.16450702,0 56.29840402,-348.3226 z m 61.252276,55.1047 -23.613063,146.1033 42.675303,0 c 28.28742,0 49.25184,-5.7744 62.90101,-17.3383 13.63797,-11.5649 22.6337,-30.807 26.98842,-57.7355 4.19709,-25.968 1.75658,-44.2941 -7.2996,-54.9935 -9.06329,-10.6883 -26.92099,-16.036 -53.57751,-16.036 l -48.07456,0" id="path66"/>
<path d="m 378.24196,1671.3451 69.63516,0 -14.95189,92.5152 61.94982,0 c 38.98987,0 66.01185,7.3901 81.07593,22.1571 15.06891,14.7762 19.95224,38.5804 14.64264,71.4329 l -26.22037,162.2172 -70.68973,0 24.9538,-154.3893 c 2.84147,-17.5516 1.46456,-29.4876 -4.12427,-35.815 -5.58913,-6.3193 -17.28356,-9.4871 -35.06873,-9.4871 l -55.57891,0 -32.27423,199.6914 -69.64729,0 56.29807,-348.3224" id="path68"/>
<path d="m 666.43774,1763.8603 134.9135,0 c 40.54695,0 70.30511,11.5406 89.30319,34.6149 18.99454,23.0812 25.15404,55.2422 18.4898,96.4878 -2.7339,16.9207 -7.61577,32.4501 -14.63297,46.5933 -7.03329,14.1442 -16.32202,27.067 -27.85103,38.7573 -13.72229,14.0684 -29.07657,24.148 -46.08084,30.2307 -17.00032,6.0818 -38.74478,9.1232 -65.23548,9.1232 l -60.08435,0 -14.95188,92.5154 -70.16093,0 56.29099,-348.3226 z m 61.26036,55.1047 -23.61306,146.1033 42.6753,0 c 28.28641,0 49.2478,-5.7744 62.88888,-17.3383 13.641,-11.5649 22.64179,-30.807 26.99549,-57.7355 4.19406,-25.968 1.7576,-44.2941 -7.30364,-54.9935 -9.06329,-10.6883 -26.92099,-16.036 -53.56841,-16.036 l -48.07456,0" id="path70"/>
</g>
<g style="fill:#f89c0e" id="g65">
<path d="m 1027.7488,1597.3243 134.9473,0 59.2813,323.8687 163.9729,-323.8687 134.4328,0 -68.203,422.055 -90.0955,0 60.5624,-328.7447 -165.335,328.7447 -97.63,0 -62.0922,-332.1897 -44.4691,332.1897 -93.58345,0 68.21155,-422.055" id="path72"/>
<path d="m 1682.3349,1951.0787 68.129,0 39.0484,-241.6556 84.6928,0 -48.7474,301.634 c -6.6176,41.0085 -21.4426,71.3829 -44.4508,91.1237 -23.0089,19.7312 -54.9295,29.6038 -95.7507,29.6038 l -166.0776,0 10.1515,-62.7878 151.4988,0 c 16.2574,0 29.3646,-3.7991 39.3223,-11.39 9.9443,-7.6043 16.0994,-18.6108 18.427,-33.0342 l 0.8443,-5.1933 -74.9653,0 c -47.9513,0 -80.6531,-9.1406 -98.0934,-27.4219 -17.4525,-18.2801 -22.7167,-48.7649 -15.8297,-91.453 l 30.891,-191.0813 83.7372,0 -29.8633,184.7645 c -3.7745,23.3729 -2.642,38.6968 3.4343,45.9753 6.0641,7.2784 20.5937,10.9158 43.6016,10.9158" id="path74"/>
<path d="m 2102.3044,1597.3243 97.5197,0 118.1874,422.055 -102.2734,0 -23.907,-100.4601 -189.9554,0 -55.1868,100.4601 -97.5321,0 253.1476,-422.055 z m 31.6507,83.8058 -90.1808,162.444 130.2183,0 -40.0375,-162.444" id="path76"/>
<path d="m 2637.3031,2019.3793 -162.6964,0 c -49.1642,0 -85.2663,-13.9786 -108.3193,-41.9409 -23.0404,-27.9573 -30.5053,-66.9321 -22.4309,-116.9135 3.316,-20.4913 9.2287,-39.3092 17.7509,-56.4463 8.5217,-17.1419 19.771,-32.7965 33.7592,-46.9712 16.6286,-17.0415 35.3095,-29.2498 56.0305,-36.6239 20.7209,-7.3752 47.0449,-11.0604 78.9594,-11.0604 l 72.6621,0 18.1132,-112.0988 84.3865,0 -68.2152,422.055 z m -73.6376,-66.4629 28.5697,-176.7241 -51.2224,0 c -34.3524,0 -59.8397,6.9489 -76.4874,20.8321 -16.6223,13.8929 -27.5723,37.0269 -32.8017,69.397 -5.0795,31.4221 -2.0777,53.6898 9.0062,66.8122 11.0837,13.1222 32.7053,19.6828 64.8648,19.6828 l 58.0708,0" id="path78"/>
<path d="m 2761.0228,1709.4231 325.2334,0 c 47.155,0 79.7016,8.9067 97.6259,26.6992 17.9129,17.8022 23.6511,46.7028 17.1903,86.702 l -31.7718,196.555 -85.3299,0 30.0434,-185.9259 c 3.6903,-22.7947 2.5585,-37.8305 -3.3836,-45.1151 -5.966,-7.2785 -20.0182,-10.9208 -42.1807,-10.9208 l -47.5103,0 -39.1073,241.9618 -86.604,0 39.1073,-241.9618 -98.9777,0 -39.1073,241.9618 -85.3298,0 50.1021,-309.9562" id="path80"/>
<path d="m 3389.6515,1674.2008 -88.8214,0 12.4228,-76.8765 88.8214,0 -12.4228,76.8765 z m -55.7924,345.1785 -88.8215,0 50.0899,-309.9562 88.8214,0 -50.0898,309.9562" id="path82"/>
<path d="m 3457.2112,1709.4231 159.3518,0 c 48.1596,0 81.1348,8.7634 98.9115,26.2691 17.7775,17.5156 23.3935,46.5596 16.8359,87.1321 l -31.7597,196.555 -84.705,0 30.1524,-186.5005 c 3.7421,-23.1817 2.4511,-38.2189 -3.8732,-45.1102 -6.325,-6.9 -20.6913,-10.3511 -43.0866,-10.3511 l -68.1168,0 -39.1072,241.9618 -84.6928,0 50.0897,-309.9562" id="path84"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

40
images/searx_logo.svg Normal file
View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="330.93661" height="303.22852" id="svg2" version="1.1" inkscape:version="0.48.4 r9939" sodipodi:docname="searx_logo.svg" inkscape:export-filename="/home/a/magnif.png" inkscape:export-xdpi="23.1774" inkscape:export-ydpi="203.1774">
<defs id="defs4">
<linearGradient inkscape:collect="always" id="linearGradient3857">
<stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3859"/>
<stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3861"/>
</linearGradient>
<linearGradient id="linearGradient3790">
<stop style="stop-color:#a9a9a9;stop-opacity:1;" offset="0" id="stop3792"/>
<stop style="stop-color:#000000;stop-opacity:1;" offset="1" id="stop3794"/>
</linearGradient>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3790" id="radialGradient3798" cx="294.45947" cy="208.37973" fx="294.45947" fy="208.37973" r="107.58125" gradientUnits="userSpaceOnUse"/>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3857" id="linearGradient3865" x1="120.68947" y1="239.61774" x2="120.68947" y2="602.17517" gradientUnits="userSpaceOnUse"/>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3790" id="linearGradient3912" x1="186.74416" y1="354.42426" x2="255.84358" y2="254.35953" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2227304,0,0,0.89945099,-289.31433,113.40259)"/>
<filter inkscape:collect="always" id="filter4024" x="-0.12996517" width="1.2599303" y="-0.14709377" height="1.2941875" color-interpolation-filters="sRGB">
<feGaussianBlur inkscape:collect="always" stdDeviation="6.4759344" id="feGaussianBlur4026"/>
</filter>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.979899" inkscape:cx="-11.542922" inkscape:cy="142.31651" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1855" inkscape:window-height="1056" inkscape:window-x="65" inkscape:window-y="24" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" fit-margin-top="0" fit-margin-left="0" fit-margin-right="-24" fit-margin-bottom="-6"/>
<metadata id="metadata7">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-61.719803,-34.870671)">
<path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 70.523181,34.870671 c -7.11959,15.242893 -10.17798,31.779192 -8.22563,48.814566 5.01677,43.774133 41.675309,79.324503 91.536109,95.162893 -6.62576,-22.40752 -5.34093,-44.9362 2.6395,-65.84431 C 108.73618,98.821131 74.828141,70.195435 70.523181,34.870671 z" id="path3814-0-7" inkscape:connector-curvature="0"/>
<path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 303.77876,36.21406 c 7.11959,15.242893 10.17798,31.779192 8.22563,48.814566 -5.01677,43.774134 -41.67531,79.324504 -91.53611,95.162894 6.62576,-22.40752 5.34093,-44.9362 -2.6395,-65.84431 47.73698,-14.18269 81.64502,-42.808386 85.94998,-78.13315 z" id="path3814-0" inkscape:connector-curvature="0"/>
<path transform="matrix(0.6556593,-0.75505688,0.75505688,0.6556593,0,0)" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m -5.0905523,259.06055 18.4167573,0 c 6.220455,0 11.228257,16.68196 11.228257,37.40349 l 0,172.83701 c 0,20.72153 -5.007802,37.40349 -11.228257,37.40349 l -18.4167573,0 c -6.2204547,0 -11.2282577,-16.68196 -11.2282577,-37.40349 l 0,-172.83701 c 0,-20.72153 5.007803,-37.40349 11.2282577,-37.40349 z" id="rect3804" inkscape:connector-curvature="0"/>
<path sodipodi:type="arc" style="fill:url(#radialGradient3798);fill-opacity:1;fill-rule:nonzero;stroke:none" id="path2987" sodipodi:cx="294.45947" sodipodi:cy="208.37973" sodipodi:rx="107.58125" sodipodi:ry="107.58125" d="m 402.04073,208.37973 a 107.58125,107.58125 0 1 1 -215.16251,0 107.58125,107.58125 0 1 1 215.16251,0 z" transform="translate(-107.07617,-60.609153)"/>
<path sodipodi:type="arc" style="fill:url(#linearGradient3865);fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3757" sodipodi:cx="131.82491" sodipodi:cy="299.29346" sodipodi:rx="101.52033" sodipodi:ry="101.52033" d="m 233.34524,299.29346 a 101.52033,101.52033 0 1 1 -203.040667,0 101.52033,101.52033 0 1 1 203.040667,0 z" transform="matrix(0.76865672,0,0,0.76865672,85.80266,-82.535889)"/>
<path sodipodi:type="arc" style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3800" sodipodi:cx="183.34268" sodipodi:cy="156.35687" sodipodi:rx="27.274118" sodipodi:ry="27.274118" d="m 210.6168,156.35687 a 27.274118,27.274118 0 1 1 -54.54824,0 27.274118,27.274118 0 1 1 54.54824,0 z" transform="translate(5,-7.1428572)"/>
<path sodipodi:type="arc" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path3802" sodipodi:cx="197.9899" sodipodi:cy="203.32896" sodipodi:rx="5.5558391" sodipodi:ry="5.5558391" d="m 203.54574,203.32896 a 5.5558391,5.5558391 0 1 1 -11.11168,0 5.5558391,5.5558391 0 1 1 11.11168,0 z" transform="translate(1.4847712,-63.564549)"/>
<rect style="fill:#ffffff;fill-opacity:0.82211531;fill-rule:nonzero;stroke:none;filter:url(#filter4024)" id="rect3916" width="2.2392972" height="159.43797" x="19.525793" y="337.8396" rx="2.8666623" ry="9.0007057" transform="matrix(0.74466525,-0.84318084,0.84318084,0.74466525,-35.543204,-26.349917)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

1
isp.md
View file

@ -14,6 +14,7 @@ A list of French and Belgian ISPs is available on the [french page](/isp).
| Cox | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | | Cox | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer |
| Charter | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | | Charter | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer |
| DSLExtreme | Multiple | Yes | Yes | No | No | Yes, extra charge. | | DSLExtreme | Multiple | Yes | Yes | No | No | Yes, extra charge. |
| AT&T| Multiple | Yes | No. Only for business class customer. | unknown. | unknown. | unknown. |
### UK ### UK
| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP |

View file

@ -1,12 +1,11 @@
# Configure port-forwarding # Configure port-forwarding
If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). If you want a short explanation on what is and why you need port forwarding, have a look in [this page](port_forwarding). If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). If you want a short explanation on what is and why you need port forwarding, have a look to [this page](port_forwarding).
### 0. Diagnose ports opened ### 0. Diagnose ports opened
After configuring port forwarding, you should be able to validate with this small tool that your ports are correctly forwarded : The new diagnosis tool introduced in 3.8 can be used to diagnose that ports are
correctly exposed.
<a class="btn btn-default" href="http://ports.yunohost.org">Check which ports are forwarded</a>
### 1. Access your box/router administration interface ### 1. Access your box/router administration interface
@ -14,13 +13,15 @@ Your box/router admin interface is usually reachable via http://192.168.0.1 or h
### 2. Find the local IP of your server ### 2. Find the local IP of your server
Identify what is the local IP of your server, either : Identify what is thei *local* IP of your server, either :
- from your box/router interface, which might list devices connected - from your box/router interface, which might list devices connected
- from the YunoHost webadmin, in 'State of the server', 'Network' - from the YunoHost webadmin, in 'Diagnosis', section 'Internet connectivity', click on 'Details' on the IPv4 report.
- from the command line in your server, by running `ip a | grep "scope global" | awk '{print $2}'` - from the command line in your server, by running `hostname -I`
A local IP address typically looks like `192.168.xx.yy`, or `10.0.xx.yy`. A local IP address typically looks like `192.168.xx.yy`, or `10.0.xx.yy`.
The local IP address needs to be static, so that the port forwards that you are going to configure in the next step will always reach your server. You should go into your box/router and make sure that the local IP address of your server is static instead of dynamic.
### 3. Forwarding ports ### 3. Forwarding ports
In your router admin interface, look for something like 'router configuration' or 'port forwarding'. The naming differs among the various kinds of boxes. In your router admin interface, look for something like 'router configuration' or 'port forwarding'. The naming differs among the various kinds of boxes.

View file

@ -4,9 +4,8 @@ Si vous vous auto-hébergez à la maison et sans VPN, il vous faut rediriger les
### 0. Diagnostiquer les ports ouverts ### 0. Diagnostiquer les ports ouverts
Une fois que vous aurez configuré la redirection, vous devriez pouvoir valider avec ce petit outil que vos ports sont bien redirigés : Une fois les redirections configurées, l'outil de diagnostic introduit dans
YunoHost 3.8 vous permettra de vérifier si les ports sont correctement exposés.
<a class="btn btn-default" href="http://ports.yunohost.org">Vérifier la redirection des ports</a>
### 1. Accéder à l'interface d'administration de votre box/routeur ### 1. Accéder à l'interface d'administration de votre box/routeur
@ -19,8 +18,8 @@ fournis par votre fournisseur d'accès internet (FAI).
Identifiez quelle est l'IP locale de votre serveur, soit : Identifiez quelle est l'IP locale de votre serveur, soit :
- depuis l'interface de votre routeur/box, qui liste peut-être les dispositifs - depuis l'interface de votre routeur/box, qui liste peut-être les dispositifs
connectés; connectés;
- depuis la webadmin de Yunohost, dans 'Diagnostic', section 'Connectivité Internet', cliquer sur 'Details' à côté de la ligne sur IPv4.
- depuis la webadmin de YunoHost, dans 'État du serveur', 'Réseau'; - depuis la webadmin de YunoHost, dans 'État du serveur', 'Réseau';
- depuis la ligne de commande dans votre serveur, par exemple avec `ip a | grep "scope global" | awk '{print $2}'`.
Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`. Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`.

View file

@ -169,7 +169,7 @@ name = "Leed configuration"
Will be available under this name in the config script: Will be available under this name in the config script:
``` ```bash
YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC
``` ```

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@ returncode=0
for LINK in $(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/') for LINK in $(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/')
do do
PAGE=$(echo $LINK | awk -F: '{print $3}') PAGE=$(echo $LINK | awk -F: '{print $3}')
[ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" [ -e "$PAGE.md" ] || echo "This Markdown link looks dead (page doesn't exist in english?) $LINK"
[ -e "$PAGE.md" ] || returncode=1 [ -e "$PAGE.md" ] || returncode=1
done done
@ -12,7 +12,7 @@ done
for LINK in $(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"') for LINK in $(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"')
do do
PAGE=$(echo $LINK | awk -F: '{print $3}') PAGE=$(echo $LINK | awk -F: '{print $3}')
[ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" [ -e "$PAGE.md" ] || echo "This HTML link looks dead (page doesn't exist in english?) $LINK"
[ -e "$PAGE.md" ] || returncode=1 [ -e "$PAGE.md" ] || returncode=1
done done

27
try_ca.md Normal file
View file

@ -0,0 +1,27 @@
#Prova YunoHost
<div class="alert alert-warning" markdown="1">
**Nota:** Aquest és un servidor de demostració, podria estar caigut de tant en tant.
<br>
</div>
<br>
<div class="row text-center">
<div class="col-md-6">
<a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfície d'usuària</a>
<p class="text-muted">Nom d'usuària: demo<br>Contrasenya: demo</p>
</div>
<div class="col-md-5">
<a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfície d'administració</a>
<p class="text-muted">Contrasenya: demo</p>
</div>
</div>
<br>
<p class="text-center" markdown="1">
***Servidor de demostració amablement ofert per
<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>***
</p>

View file

@ -0,0 +1,204 @@
# YunoHost per a organitzacions sense ànim de lucre
## Taula de continguts
* [Introducció](#introduction)
* [Qui](#who)
* [Què](#what)
* [Quan](#when)
* [On](#where)
* [Per què](#why)
* [Com](#how)
* [Conclusió](#conclusion)
## Introducció
L'objectiu d'aquest document és presentar un cas d'ús específic de [YunoHost](https://yunohost.org) per a organitzacions sense ànim de lucre.
## Qui
Organitzacions sense ànim de lucre, ONGs o qualsevol tipus d'associació.
## Què
Normalment les organitzacions sense ànim de lucre han de donar alguns serveis públics:
* Consell d'administració / Comitè director / Voluntàries amb:
* [Correus electrònics](#mails)
* [Calendari](#calendar)
* [Contacte](#contact)
* [Fitxers compartits / Drive](#shared-files)
* [Missatgeria instantània](#instant-communication)
* [Intranet / base de coneixements](#intranet)
* [ERP / Comptabilitat](#erp-accounting)
* Membres amb:
* [Pàgina web pública amb accés privat i individual](#public-web-site)
* [Adhesió](#membership)
* [Inscripció a esdeveniments](#events-registration)
* [Butlletí d'informació](#newsletter-mailing)
* [Fòrum](#forum)
* Públic amb:
* [Pàgina web pública](#public-web-site)
* [Butlletí d'informació](#newsletter-mailing)
## Quan
Quan l'organització estigui preparada per a fer el pas.
## On
El servidor YunoHost de l'organització pot estar allotjat en diferents llocs:
* Allotjament propi en un servidor, ordinador o Raspberry darrera una connexió ADSL, SDSL o fibra
* Serveis d'allotjament de [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters)
* Serveis d'allotjament comercials que ofereixin màquines virtuals Debian
## Per què
YunoHost pot cobrir la majoria de necessitats d'una organització sense ànim de lucre i permet tenir el control sobre les dades de l'organització.
## Com
### YunoHost
YunoHost és una distribució GNU/Linux basada en Debian empaquetada amb programari lliure que automatitza la instal·lació d'un servidor web personal. L'objectiu de YunoHost és permetre a les usuàries allotjar fàcilment els seus propis serveis web al oferir una interfície web en la que es poden instal·lar diferents aplicacions només amb uns quants clics.
![](https://upload.wikimedia.org/wikipedia/commons/0/07/Yunohost_user_portal.png)
YunoHost de base ofereix:
* Un sistema d'aplicacions
* Una interfície web
* Una interfície per línia de comandes (CLI): Moulinette
* Un servidor web: Nginx
* Un servidor DNS: Dnsmasq
* Una base de dades: MariaDB
* Un sistema de còpies de seguretat
* Un SSO: SSOwat
* OpenLDAP
* Correu electrònic:
* SMTP: Postfix
* IMAP & POP3: Dovecot
* Un antispam: rspamd, rmilter
* Un servidor de missatgeria instantània XMPP: Metronome IM
### Nom de domini
La primera cosa que s'haurà de tenir per poder instal·lar un servidor YunoHost és un nom de domini. Habitualment el nom de domini el pot oferir el mateix servei d'allotjament.
### Correus electrònics
De base, YunoHost ofereix un sistema de correus electrònics disponible utilitzant POP / IMAP / SMTP.
Els comptes de correu electrònic es poden gestionar per mitjà de la interfície web o de la línia de comandes. Els comptes creats es guarden en l'OpenLDAP.
Es poden instal·lar paquets addicionals per donar més funcionalitats al sistema de correu electrònic de YunoHost:
* Un client web utilitzant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh)
* ActiveSync utilitzant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh)
* Un grup de difusió interna utilitzant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh)
### Calendari
Per oferir calendaris personals o compartits haureu d'instal·lar:
* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh)
* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh)
### Contactes
Per oferir un sistema de contactes personal haureu d'instal·lar:
* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh)
* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh)
### Fitxers compartits
Per oferir un sistema de fitxers compartit: carpetes personals i compartides, podeu instal·lar [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh).
Els fitxers estaran disponibles a través d'una interfície web o bé utilitzant un client de sincronització.
### Missatgeria instantània
De base YunoHost ofereix un servidor XMPP, pel que podeu instal·lar un client web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh).
També podeu instal·lar un servidor matrix:
* El servidor: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh)
* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh)
### Intranet
Per a una organització sense ànim de lucre, una bona manera d'implementar una intranet és oferir una wiki interna per a que les usuàries puguin llegir, editar i afegir contingut. Vegeu aquí alguns paquets que permeten implementar una wiki:
* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilitzant la sintaxi wiki
* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilitzant la sintaxi markdown
### ERP / Comptabilitat
Arribats a un cert punt una organització sense ànim de lucre podria necessitar un sistema de comptabilitat / ERP, aquí hi ha dos propostes:
* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh)
* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh)
### Pàgina web pública
Hi ha múltiples maneres d'implementar una pàgina web pública:
* Un pàgina simple amb html, css, etc... utilitzant: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh)
* Utilitzant un CMS (sistema de gestió de contingut) com [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh)
Però us proposem una alternativa una mica més potent: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh):
* Drupal és un entorn de treball potent de codi obert per la gestió de contingut
* amb CiviCRM que és un CRM de codi obert per a les organitzacions sense ànim de lucre
### Adhesió
Amb CiviCRM podeu tenir adhesions en línia i pagament.
### Inscripció a esdeveniments
Amb CiviCRM, podeu posar a disposició una agenda en línia per permetre als membres o al públic inscriure's gratuïtament o pagant.
### Butlletí d'informació
La millor manera de gestionar-ho és utilitzar el mòdul de llistes de difusió de CiviCRM.
### Fòrum
Hi ha múltiples opcions, tenir un fòrum integrat a Drupal o utilitzar un sistema dedicat com ara [Flarum](https://github.com/YunoHost-Apps/flarum_ynh).
### Còpies de seguretat
YunoHost ofereix el seu propi sistema de còpies de seguretat. Abans de cada actualització, YunoHost fa una còpia de seguretat de la versió actual del paquet i la restaura automàticament si falla l'actualització.
Les còpies de seguretat de YunoHost s'emmagatzemen localment a `/home/yunohost.backup/archives`.
Però per un servidor en producció, còpies de seguretat locals no són suficients, així que s'hauran d'implementar còpies de seguretat alternatives:
* Còpia de seguretat de la màquina virtual si ho permet el sistema d'allotjament.
* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) és un sistema de còpies de seguretat automàtiques del servidor. Les còpies de seguretat es poden enviar a d'altres llocs, locals o distants.
* [Borg](https://github.com/YunoHost-Apps/borg_ynh) i [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permeten externalitzar les còpies de seguretat.
* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si teniu de servidors YunoHost, permet tenir un servidor secundari que pot ser utilitzat en cas que caigui el servidor principal. Aquest servidor secundari permetrà desplegar una còpia del servidor i tornar a posar en marxar YunoHost durant la caiguda.
### Anar més enllà
#### Galeria de fotografies federada
* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh)
#### Galeria àudio federada
* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh)
* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh)
#### Galeria vídeo federada
* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh)
#### Xarxa social federada
* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh)
* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh)
* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh)
#### Blog federat
* [Plume](https://github.com/YunoHost-Apps/plume_ynh)
* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh)
#### Xat
* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh)
## Conclusió
YunoHost por cobrir el 99% de les necessitats de les organitzacions sense ànim de lucre, permetent així que recuperin la sobirania i puguin protegir les seves dades, així com escollir les aplicacions que volen utilitzar.
I si n'hi ha alguna que no està disponible, poden [empaquetar-la per YunoHost](/contributordoc), és molt senzill.

View file

@ -17,8 +17,8 @@ Fonctionnalités
- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; - <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ;
- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; - <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ;
- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; - <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ;
- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> gères les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; - <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> gère les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ;
- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> ... et des **systèmes de sécurité** <small>(fail2ban, yunohost-firewall)</small> ; - <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> et des **systèmes de sécurité** <small>(fail2ban, yunohost-firewall)</small> ;
Origine Origine
------- -------