From ae6f41d6ac78a36dc517d405956c07188ec30605 Mon Sep 17 00:00:00 2001 From: ljf Date: Sat, 5 Aug 2023 01:00:40 +0200 Subject: [PATCH] Config panel orga --- config_panel.toml | 510 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 510 insertions(+) create mode 100644 config_panel.toml diff --git a/config_panel.toml b/config_panel.toml new file mode 100644 index 0000000..ff78456 --- /dev/null +++ b/config_panel.toml @@ -0,0 +1,510 @@ + +version = "1.0" +[main] + +services = [] + +## (optional) This help properties is a short help displayed on the same line +## than the panel title but not displayed in the tab. +# help = "" + + [main.organization] + name = "" + # help = "" + + + +# [Organisation] +# Nom de l'organisation (type STRING, obligatoire, ex. LibreServiceEU). +[main.organization.name] + ask.en = "Nom de l'oganisation" + type = "string" + bind = "organization.name>/var/www/__APP__/public/organization.properties" + +# Description de l'organisation (type STRING, recommandé, ex. LibreServiceEU est le chaton de Devinsy). +[main.organization.description] + ask.en = "Description de l'organisation" + type = "string" + bind = "organization.description" + optional = true + +[main.organization.status-level] + ask.en = "Statut" + type = "string" + choices.ACTIVE = "Actif" + choices.IDLE = "En pause" + choices.AWAY = "Inactif" + bind = "organization.status.level" + optional = true + +[main.organization.status-description] + ask.en = "Description du statut" + type = "string" + bind = "organization.status.description" + optional = true + visible = "status-level == 'IDLE'" + +[main.organization.startdate] + ask.en = "Date de création" + type = "date" + optional = true + +[main.organization.enddate] + ask.en = "Date de fermeture" + type = "date" + optional = true + visible = "status-level == 'AWAY'" + + +[main.organization.type] + ask.en = "Type d'organisation" + type = "string" + choices.ASSOCIATION = "Association" + choices.INFORMAL = "Informel" + choices.COOPERATIVE = "Coopérative" + choices.MICROCOMPANY = "Micro entreprise" + choices.COMPANY = "Société" + choices.INDIVIDUAL = "Individue" + choices.OTHER = "Autre" + bind = "organization.type" + + +[main.organization.website] + ask.en = "Siteweb" + type = "url" + bind = "organization.website" + optional = true + + +[main.organization.logo] + ask.en = "Name of the project" + type = "url" + bind = "organization.logo" + optional = true + +[main.organization.contact-url] + ask.en = "URL de contact" + type = "url" + bind = "organization.contact.url" + optional = true + +[main.organization.contact-mail] + ask.en = "Mail de contact" + type = "email" + bind = "organization.contact.email" + optional = true + +[main.organization.legal-url] + ask.en = "Mentions légales" + type = "url" + bind = "organization.legal.url" + optional = true + +[main.organization.guide-technical] + ask.en = "Documentation technique" + type = "url" + bind = "organization.guide.technical" + default = "https://yunohost.org/admindoc" + optional = true + +[main.organization.guide-user] + ask.en = "Documentation utilisateurice" + type = "url" + bind = "organization.guide.user" + default = "https://yunohost.org/user_guide" + optional = true + +[main.organization.status-level-chatons] + ask.en = "Statut" + type = "string" + choices.ACTIVE = "Actif" + choices.IDLE = "En pause" + choices.AWAY = "Inactif" + bind = "organization.memberof.chatons.status.level" + +[main.organization.status-description] + ask.en = "Description du statut" + type = "string" + bind = "organization.memberof.chatons.status.description" + optional = true + visible = "status-level-chatons == 'IDLE'" + +[main.organization.startdate-chatons] + ask.en = "Date d'entrée dans le collectif" + type = "date" + bind = "organization.memberof.chatons.startdate" + +[main.organization.enddate-chatons] + ask.en = "Date de sortie du collectif" + type = "date" + optional = true + visible = "status-level-chatons == 'AWAY'" + bind = "organization.memberof.chatons.enddate" + + [main.owner] + name = "Propriétaire de l'organisation" + optional = true + + [main.owner.owner-name] + ask.en = "Nom" + type = "string" + bind = "organization.owner.name" + [main.owner.owner-website] + ask.en = "siteweb" + type = "url" + bind = "organization.owner.website" + [main.owner.owner-logo] + ask.en = "Logo" + type = "url" + bind = "organization.owner.logo" + + + + [main.location] + name = "Localisation de l'organisation" + # help = "" + optional = true + +[main.location.country-name] + ask.en = "Pays de l'organisation" + type = "string" + bind = "organization.country.name" + optional = false + +[main.location.country-code] + ask.en = "Code pays de l'organisation" + help = "Table ISO 3166-1 alpha-2 : https://fr.wikipedia.org/wiki/ISO_3166-1#Table_de_codage" + type = "string" + bind = "organization.country.code" + default = "FR" + +# Latitude (type DECIMAL_DEGREE, recommandé, format DD, ex. 15,23456). +[main.location.latitude] + ask.en = "Latitude" + type = "string" + bind = "organization.geolocation.latitude" +[main.location.longitude] + ask.en = "Longitude" + type = "string" + bind = "organization.geolocation.longitude" + +[main.location.address] + ask.en = "Adresse" + type = "string" + bind = "organization.geolocation.address" + + + + [main.socialnetworks] + name = "Réseaux sociaux" + help = "Liens vers les comptes réseaux sociaux de l'organisation" + optional = true + +[main.socialnetworks.diaspora] + ask.en = "Diaspora" + type = "url" + bind = "organization.socialnetworks.diaspora" +[main.socialnetworks.facebook] + ask.en = "Facebook" + type = "url" + bind = "organization.socialnetworks.facebook" +[main.socialnetworks.funkwhale] + ask.en = "Funkwhale" + type = "url" + bind = "organization.socialnetworks.funkwhale" +[main.socialnetworks.mastodon] + ask.en = "Mastodon" + type = "url" + bind = "organization.socialnetworks.mastodon" +[main.socialnetworks.pleroma] + ask.en = "Pleroma" + type = "url" + bind = "organization.socialnetworks.pleroma" +[main.socialnetworks.mobilizon] + ask.en = "Mobilizon" + type = "url" + bind = "organization.socialnetworks.mobilizon" +[main.socialnetworks.peertube] + ask.en = "Peertube" + type = "url" + bind = "organization.socialnetworks.peertube" +[main.socialnetworks.pixelfed] + ask.en = "Pixelfed" + type = "url" + bind = "organization.socialnetworks.pixelfed" +[main.socialnetworks.twitter] + ask.en = "Twitter" + type = "url" + bind = "organization.socialnetworks.twitter" + + [main.chatrooms] + name = "Salons de discussion" + help = "Adresse vers les salons/équipes de discussion publics de l'organisation" + optional = true + +[main.chatrooms.xmpp] + ask.en = "XMPP" + type = "url" + bind = "organization.chatrooms.xmpp" +[main.chatrooms.irc] + ask.en = "IRC" + type = "url" + bind = "organization.chatrooms.irc" +[main.chatrooms.matrix] + ask.en = "Matrix" + type = "url" + bind = "organization.chatrooms.matrix" +[main.chatrooms.rocketchat] + ask.en = "RocketChat" + type = "url" + bind = "organization.chatrooms.rocketchat" +[main.chatrooms.mattermost] + ask.en = "Mattermost" + type = "url" + bind = "organization.chatrooms.mattermost" + + + [main.funding] + name = "Dons" + help = "Services de paiement permettant de récolter des donations pour votre chaton" + optional = true +# Liens vers les services de paiement permettant de récolter des donations pour votre chaton (type URL, optionnel). +# Dans le cas d'une solution maison (exemple : pont vers votre banque), choisir "organization.funding.custom". +# Liste non exhaustive à laquelle vous pouvez ajouter d'autres services. +[main.funding.liberapay] + ask.en = "Liberapay" + type = "url" + bind = "organization.funding.liberapay" +[main.funding.tipee] + ask.en = "Tipee" + type = "url" + bind = "organization.funding.Tipee" +[main.funding.helloasso] + ask.en = "Helloasso" + type = "url" + bind = "organization.funding.helloasso" +[main.funding.paypal] + ask.en = "Paypal" + type = "url" + bind = "organization.funding.paypal" +[main.funding.custom] + ask.en = "Custom" + type = "url" + bind = "organization.funding.custom" + + + + + + + + + + + + + + + + + + + ######################################################################## + #### ABOUT QUESTIONS + ######################################################################## + + ## A section is compound of one or several questions. + + ## --------------------------------------------------------------------- + ## IMPORTANT: as for panel and section you have to choose an ID, but this + ## one should be unique in all this document, even if the question is in + ## an other panel. + ## --------------------------------------------------------------------- + + ## You can use same questions types and properties than in manifest.yml + ## install part. However, in YNH 4.3, a lot of change has been made to + ## extend availables questions types list. + ## See: TODO DOC LINK + + [main.customization.project_name] + + ## (required) The ask property is equivalent to the ask property in + ## the manifest. However, in config panels, questions are displayed on the + ## left side and therefore have less space to be rendered. Therefore, + ## it is better to use a short question, and use the "help" property to + ## provide additional details if necessary. + ask.en = "Name of the project" + + ## (required) The type property indicates how the question should be + ## displayed, validated and managed. Some types have specific properties. + ## + ## Types available: string, boolean, number, range, text, password, path + ## email, url, date, time, color, select, domain, user, tags, file. + ## + ## For a complete list with specific properties, see: TODO DOC LINK + type = "string" + + ######################################################################## + #### ABOUT THE BIND PROPERTY + ######################################################################## + + ## (recommended) 'bind' property is a powerful feature that let you + ## configure how and where the data will be read, validated and written. + + ## By default, 'bind property is in "settings" mode, it means it will + ## **only** read and write the value in application settings file. + ## bind = "settings" + + ## However, settings usually correspond to key/values in actual app configurations + ## Hence, a more useful mode is to have bind = ":FILENAME". In that case, YunoHost + ## will automagically find a line with "KEY=VALUE" in FILENAME + ## (with the adequate separator between KEY and VALUE) + ## + ## YunoHost will then use this value for the read/get operation. + ## During write/set operations, YunoHost will overwrite the value + ## in **both** FILENAME and in the app's settings.yml + + ## Configuration file format supported: yaml, toml, json, ini, env, php, + ## python. The feature probably works with others formats, but should be tested carefully. + + ## Note that this feature only works with relatively simple cases + ## such as `KEY: VALUE`, but won't properly work with + ## complex data structures like multilin array/lists or dictionnaries. + ## It also doesn't work with XML format, custom config function call, php define(), ... + + ## More info on TODO + # bind = ":/var/www/__APP__/settings.py" + + + ## By default, bind = ":FILENAME" will use the question ID as KEY + ## ... but the question ID may sometime not be the exact KEY name in the configuration file. + ## + ## In particular, in pepettes, the python variable is 'name' and not 'project_name' + ## (c.f. https://github.com/YunoHost-Apps/pepettes_ynh/blob/5cc2d3ffd6529cc7356ff93af92dbb6785c3ab9a/conf/settings.py##L11 ) + ## + ## In that case, the key name can be specified before the column ':' + + bind = "name:/var/www/__APP__/settings.py" + + ## --------------------------------------------------------------------- + ## IMPORTANT: other 'bind' mode exists: + ## + ## bind = "FILENAME" (with no column character before FILENAME) + ## may be used to bind to the **entire file content** (instead of a single KEY/VALUE) + ## This could be used to expose an entire configuration file, or binary files such as images + ## For example: + ## bind = "/var/www/__APP__/img/logo.png" + ## + ## bind = "null" can be used to disable reading / writing in settings. + ## This creates sort of a "virtual" or "ephemeral" question which is not related to any actual setting + ## In this mode, you are expected to define custom getter/setters/validators in scripts/config: + ## + ## getter: get__QUESTIONID() + ## setter: set__QUESTIONID() + ## validator: validate__QUESTIONID() + ## + ## You can also specify a common getter / setter / validator, with the + ## function 'bind' mode, for example here it will try to run + ## get__array_settings() first. + # bind = "array_settings()" + ## --------------------------------------------------------------------- + + ## --------------------------------------------------------------------- + ## IMPORTANT: with the exception of bind=null questions, + ## question IDs should almost **always** correspond to an app setting + ## initialized / reused during install/upgrade. + ## Not doing so may result in inconsistencies between the config panel mechanism + ## and the use of ynh_add_config + ## --------------------------------------------------------------------- + + ######################################################################## + #### OTHER GENERIC PROPERTY FOR QUESTIONS + ######################################################################## + + ## (optional) An help text for the question + help = "Fill the name of the project which will received donation" + + ## (optional) An example display as placeholder in web form + # example = "YunoHost" + + ## (optional) set to true in order to redact the value in operation logs + # redact = false + + ## (optional) for boolean questions you can specify replacement values + ## bound to true and false, in case property is bound to config file + # useful if bound property in config file expects something else than integer 1 + yes = "Enable" + # useful if bound property in config file expects something else than integer 0 + no = "Disable" + + ## (optional) A validation pattern + ## --------------------------------------------------------------------- + ## IMPORTANT: your pattern should be between simple quote, not double. + ## --------------------------------------------------------------------- + pattern.regexp = '^\w{3,30}$' + pattern.error = "The name should be at least 3 chars and less than 30 chars. Alphanumeric chars are accepted" + + ## Note: visible and optional properties are also available for questions + + + [main.customization.contact_url] + ask = "Contact url" + type = "url" + example = "mailto: contact@example.org" + help = "mailto: accepted" + pattern.regexp = '^mailto:[^@]+@[^@]+|https://$' + pattern.error = "Should be https or mailto:" + bind = ":/var/www/__APP__/settings.py" + + [main.customization.logo] + ask = "Logo" + type = "file" + accept = ".png" + help = "Fill with an already resized logo" + bind = "__INSTALL_DIR__/img/logo.png" + + [main.customization.favicon] + ask = "Favicon" + type = "file" + accept = ".png" + help = "Fill with an already sized favicon" + bind = "__INSTALL_DIR__/img/favicon.png" + + + [main.stripe] + name = "Stripe general info" + optional = false + + # The next alert is overwrited with a getter from the config script + [main.stripe.amount] + ask = "Donation in the month : XX € + type = "alert" + style = "success" + + [main.stripe.publishable_key] + ask = "Publishable key" + type = "string" + redact = true + help = "Indicate here the stripe publishable key" + bind = ":/var/www/__APP__/settings.py" + + [main.stripe.secret_key] + ask = "Secret key" + type = "string" + redact = true + help = "Indicate here the stripe secret key" + bind = ":/var/www/__APP__/settings.py" + + [main.stripe.prices] + ask = "Prices ID" + type = "tags" + help = """\ + Indicates here the prices ID of donation products you created in stripe interfaces. \ + Go on [Stripe products](https://dashboard.stripe.com/products) to create those donation products. \ + Fill it tag with 'FREQUENCY/CURRENCY/PRICE_ID' \ + FREQUENCY: 'one_time' or 'recuring' \ + CURRENCY: 'EUR' or 'USD' \ + PRICE_ID: ID from stripe interfaces starting with 'price_' \ + """ + pattern.regexp = '^(one_time|recuring)/(EUR|USD)/price_.*$' + pattern.error = "Please respect the format describe in help text for each price ID"