mirror of
https://github.com/YunoHost/apps.git
synced 2024-09-03 20:06:07 +02:00
appgenerator: rework the main form structure to have something matching the manifest structure: GeneralInfos, UpstreamInfos, IntegrationInfos, InstallQuestions, Resources
This commit is contained in:
parent
bd9ec14c5d
commit
9de1ac0281
2 changed files with 259 additions and 287 deletions
|
@ -40,10 +40,6 @@ from flask_cors import CORS
|
|||
from urllib import parse
|
||||
from secrets import token_urlsafe
|
||||
|
||||
#### GLOBAL VARIABLES
|
||||
YOLOGEN_VERSION = "0.7.5"
|
||||
GENERATOR_DICT = {"GENERATOR_VERSION": YOLOGEN_VERSION}
|
||||
|
||||
#### Create FLASK and Jinja Environments
|
||||
app = Flask(__name__)
|
||||
app.config["SECRET_KEY"] = token_urlsafe(16) # Necessary for the form CORS
|
||||
|
@ -175,56 +171,32 @@ class Form_Python(FlaskForm):
|
|||
},
|
||||
)
|
||||
|
||||
class GeneralInfos(FlaskForm):
|
||||
|
||||
## Manifest form
|
||||
# Dependencies form
|
||||
class DependenciesForm(FlaskForm):
|
||||
auto_update = BooleanField(
|
||||
"Activer le robot de mise à jour automatiques :",
|
||||
default=False,
|
||||
app_id = StringField(
|
||||
Markup(
|
||||
"""Identifiant (id) de l'application <i class="grayed_hint">(en minuscule et sans espaces)</i> :"""
|
||||
),
|
||||
validators=[DataRequired(), Regexp("[a-z_1-9]+.*(?<!_ynh)$")],
|
||||
render_kw={
|
||||
"title": "Si le logiciel est disponible sur github et publie des releases ou des tags pour ses nouvelles versions, un robot proposera automatiquement des mises à jours."
|
||||
},
|
||||
)
|
||||
|
||||
## TODO
|
||||
# These infos are used by https://github.com/YunoHost/apps/blob/master/tools/autoupdate_app_sources/autoupdate_app_sources.py
|
||||
# to auto-update the previous asset urls and sha256sum + manifest version
|
||||
# assuming the upstream's code repo is on github and relies on tags or releases
|
||||
# See the 'sources' resource documentation for more details
|
||||
|
||||
# autoupdate.strategy = "latest_github_tag"
|
||||
|
||||
dependencies = StringField(
|
||||
"Dépendances de l'application (liste des paquets apt) à installer :",
|
||||
render_kw={
|
||||
"placeholder": "foo foo2.1-ext somerandomdep",
|
||||
"placeholder": "yunohost_awesome_app",
|
||||
"class": "form-control",
|
||||
"title": "Lister les paquets dont dépend l'application, séparés par un espace.",
|
||||
"title": "Définir l'identifiant de l'application, utilisé pour le nom du dépôt Github",
|
||||
},
|
||||
)
|
||||
|
||||
use_db = SelectField(
|
||||
"Configurer une base de données :",
|
||||
choices=[
|
||||
("false", "Non"),
|
||||
("mysql", "MySQL/MariaDB"),
|
||||
("postgresql", "PostgreSQL"),
|
||||
],
|
||||
default="false",
|
||||
render_kw={"title": "L'application nécessite-t-elle une base de données ?"},
|
||||
app_name = StringField(
|
||||
"Nom de l'application :",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"placeholder": "My Great App",
|
||||
"class": "form-control",
|
||||
"title": "Définir le nom de l'application, affiché dans l'interface",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# manifest
|
||||
class manifestForm(DependenciesForm):
|
||||
version = StringField(
|
||||
"Version",
|
||||
validators=[Regexp("\d{1,4}.\d{1,4}(.\d{1,4})?(.\d{1,4})?~ynh\d+")],
|
||||
render_kw={"class": "form-control", "placeholder": "1.0~ynh1"},
|
||||
)
|
||||
description_en = TextAreaField(
|
||||
"Description en quelques lignes de l'application, en anglais :",
|
||||
"Description en quelques mots de l'application (en) :",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
|
@ -234,7 +206,7 @@ class manifestForm(DependenciesForm):
|
|||
},
|
||||
)
|
||||
description_fr = TextAreaField(
|
||||
"Description en quelques lignes de l'application :",
|
||||
"Description en quelques mots de l'application (fr) :",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
|
@ -244,14 +216,32 @@ class manifestForm(DependenciesForm):
|
|||
},
|
||||
)
|
||||
|
||||
# TODO : handle multiple names separated by commas (.split(',') ?
|
||||
class IntegrationInfos(FlaskForm):
|
||||
|
||||
# TODO : people shouldnt have to put the ~ynh1 ? This should be added automatically when rendering the app files ?
|
||||
version = StringField(
|
||||
"Version",
|
||||
validators=[Regexp("\d{1,4}.\d{1,4}(.\d{1,4})?(.\d{1,4})?~ynh\d+")],
|
||||
render_kw={"class": "form-control", "placeholder": "1.0~ynh1"},
|
||||
)
|
||||
|
||||
maintainers = StringField(
|
||||
"Mainteneurs et mainteneuses",
|
||||
"Mainteneur·euse de l'app YunoHost créée",
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
"placeholder": "Généralement vous mettez votre nom ici… Si vous êtes d'accord ;)",
|
||||
},
|
||||
) # TODO : Usually you put your name here… if you like ;)
|
||||
)
|
||||
|
||||
yunohost_required_version = StringField(
|
||||
"Minimum YunoHost version",
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
"placeholder": "11.1.21",
|
||||
"title": "Version minimale de Yunohost pour que l'application fonctionne.",
|
||||
},
|
||||
)
|
||||
|
||||
architectures = SelectMultipleField(
|
||||
"Architectures supportées :",
|
||||
choices=[
|
||||
|
@ -264,26 +254,14 @@ class manifestForm(DependenciesForm):
|
|||
default=["all"],
|
||||
validators=[DataRequired()],
|
||||
)
|
||||
yunohost_required_version = StringField(
|
||||
"Mainteneurs et mainteneuses",
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
"placeholder": "11.1.21",
|
||||
"title": "Version minimale de Yunohost pour que l'application fonctionne.",
|
||||
},
|
||||
)
|
||||
|
||||
multi_instance = BooleanField(
|
||||
"Application multi-instance",
|
||||
default=False,
|
||||
render_kw={
|
||||
"class": "",
|
||||
"title": "Peux-t-on installer simultannément plusieurs fois l'application sur un même serveur ?",
|
||||
},
|
||||
"L'app pourra être installée simultannément plusieurs fois sur la même machine",
|
||||
default=True,
|
||||
)
|
||||
|
||||
ldap = SelectField(
|
||||
"Integrate with LDAP (user can login using Yunohost credentials :",
|
||||
"L'app s'intègrera avec le LDAP (c-a-d pouvoir se connecter en utilisant ses identifiants YunoHost)",
|
||||
choices=[
|
||||
("false", "False"),
|
||||
("true", "True"),
|
||||
|
@ -292,11 +270,11 @@ class manifestForm(DependenciesForm):
|
|||
default="not_relevant",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"title": """Not to confuse with the "sso" key: the "ldap" key corresponds to wether or not a user *can* login on the app using its YunoHost credentials."""
|
||||
"title": "Not to confuse with the 'sso' key: the 'ldap' key corresponds to wether or not a user *can* login on the app using its YunoHost credentials."
|
||||
},
|
||||
)
|
||||
sso = SelectField(
|
||||
"Integrate with Yunohost SingleSignOn (SSO) :",
|
||||
"L'app s'intègrera avec le SSO (Single Sign On) de YunoHost (c-a-d être connecté automatiquement à l'app si connecté au portail YunoHost)",
|
||||
choices=[
|
||||
("false", "False"),
|
||||
("true", "True"),
|
||||
|
@ -305,10 +283,13 @@ class manifestForm(DependenciesForm):
|
|||
default="not_relevant",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"title": """Not to confuse with the "ldap" key: the "sso" key corresponds to wether or not a user is *automatically logged-in* on the app when logged-in on the YunoHost portal."""
|
||||
"title": "Not to confuse with the 'ldap' key: the 'sso' key corresponds to wether or not a user is *automatically logged-in* on the app when logged-in on the YunoHost portal."
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class UpstreamInfos(FlaskForm):
|
||||
|
||||
license = StringField(
|
||||
"Licence",
|
||||
validators=[DataRequired()],
|
||||
|
@ -316,7 +297,7 @@ class manifestForm(DependenciesForm):
|
|||
)
|
||||
|
||||
website = StringField(
|
||||
"Site web",
|
||||
"Site web officiel",
|
||||
validators=[URL(), Optional()],
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
|
@ -324,7 +305,7 @@ class manifestForm(DependenciesForm):
|
|||
},
|
||||
)
|
||||
demo = StringField(
|
||||
"Site de démonstration",
|
||||
"Démo officielle de l'app",
|
||||
validators=[URL(), Optional()],
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
|
@ -356,40 +337,26 @@ class manifestForm(DependenciesForm):
|
|||
},
|
||||
)
|
||||
|
||||
data_dir = BooleanField(
|
||||
"L'application nécessite un répertoire dédié pour ses données",
|
||||
default=False,
|
||||
render_kw={
|
||||
"title": "Faut-il créer un répertoire /home/yunohost.app/votreApplication ?"
|
||||
},
|
||||
)
|
||||
data_subdirs = StringField(
|
||||
"Si nécessaire, lister les sous-répertoires à configurer :",
|
||||
validators=[Optional()],
|
||||
render_kw={"class": "form-control", "placeholder": "data, uploads, themes"},
|
||||
)
|
||||
use_whole_domain = BooleanField(
|
||||
"L'application nécessite d'utiliser tout un domaine (installation à la racine) :",
|
||||
default=False,
|
||||
render_kw={
|
||||
"title": "Doit-on installer l'application à la racine du domaine ? Sinon, on pourra l'installer dans un sous-dossier, par exemple /mon_app."
|
||||
},
|
||||
)
|
||||
supports_change_url = BooleanField(
|
||||
"L'application autorise le changement d'adresse (changement de domaine ou de chemin)",
|
||||
default=True,
|
||||
render_kw={
|
||||
"title": "Faut-il permettre le changement d'URL pour l'application ? (fichier change_url)"
|
||||
},
|
||||
class InstallQuestions(FlaskForm):
|
||||
|
||||
domain_and_path = SelectField(
|
||||
"Demander l'URL sur laquelle sera installée l'app (variables 'domain' et 'path')",
|
||||
default="true",
|
||||
choices=[
|
||||
("true", "Demander le domaine+path"),
|
||||
("full_domain", "Demander le domaine uniquement (l'app nécessite d'être installée à la racine d'un domaine dédié à cette app)"),
|
||||
("false", "Ne pas demander (l'app n'est pas une webapp)")
|
||||
],
|
||||
)
|
||||
|
||||
needs_admin = BooleanField(
|
||||
"L'application nécessite de configurer un compte d'administration :",
|
||||
init_main_permission = BooleanField(
|
||||
"Demander qui pourra accéder à l'app (parmi visitors/all_users/admins)",
|
||||
default=True,
|
||||
)
|
||||
|
||||
init_admin_permission = BooleanField(
|
||||
"Demander qui pourra accéder à l'interface d'admin (ceci suppose que l'app dispose d'une interface d'admin)",
|
||||
default=False,
|
||||
render_kw={
|
||||
"class": "",
|
||||
"title": "Faut-il configurer un compte admin à l'installation ?",
|
||||
},
|
||||
)
|
||||
|
||||
# admin_password_help_message = BooleanField("TODO :", default=False,
|
||||
|
@ -399,6 +366,7 @@ class manifestForm(DependenciesForm):
|
|||
language = SelectMultipleField(
|
||||
"Langues supportées :",
|
||||
choices=[
|
||||
("_", "None / not relevant"),
|
||||
("en", "English"),
|
||||
("fr", "Français"),
|
||||
("en", "Spanish"),
|
||||
|
@ -411,38 +379,17 @@ class manifestForm(DependenciesForm):
|
|||
("nl", "Dutch"),
|
||||
("ru", "Russian"),
|
||||
],
|
||||
default=["en"],
|
||||
default=["_"],
|
||||
validators=[DataRequired()],
|
||||
)
|
||||
|
||||
default_language = SelectField(
|
||||
"Langues par défaut :",
|
||||
choices=[
|
||||
("en", "English"),
|
||||
("fr", "Français"),
|
||||
("en", "Spanish"),
|
||||
("it", "Italian"),
|
||||
("zh", "Chinese"),
|
||||
("jp", "Japanese"),
|
||||
("da", "Danish"),
|
||||
("pt", "Portugese"),
|
||||
("nl", "Dutch"),
|
||||
("ru", "Russian"),
|
||||
],
|
||||
default=["en"],
|
||||
)
|
||||
|
||||
visibility = RadioField(
|
||||
"Visibilité de l'application :",
|
||||
choices=[
|
||||
("admin", "Administrateur/administratrice uniquement"),
|
||||
("all_users", "Personnes connectées"),
|
||||
("visitors", "Publique"),
|
||||
],
|
||||
default="all_users",
|
||||
validators=[DataRequired()],
|
||||
)
|
||||
|
||||
# manifest
|
||||
class Resources(FlaskForm):
|
||||
|
||||
|
||||
# Sources
|
||||
source_url = StringField(
|
||||
"Code source ou exécutable de l'application",
|
||||
validators=[DataRequired(), URL()],
|
||||
|
@ -450,52 +397,92 @@ class manifestForm(DependenciesForm):
|
|||
"class": "form-control",
|
||||
"placeholder": "https://github.com/foo/bar/archive/refs/tags/v1.2.3.tar.gz",
|
||||
},
|
||||
) # Application source code URL
|
||||
)
|
||||
sha256sum = StringField(
|
||||
"Empreinte du code source (format sha256sum)",
|
||||
"Checksum sha256 des sources",
|
||||
validators=[DataRequired(), Length(min=64, max=64)],
|
||||
render_kw={
|
||||
"class": "form-control",
|
||||
"placeholder": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
||||
"title": "Sha256sum of the archive. Should be 64 characters-long.",
|
||||
},
|
||||
) # Source code hash (sha256sum format)
|
||||
)
|
||||
|
||||
auto_update = BooleanField(
|
||||
"Activer le robot de mise à jour automatique des sources",
|
||||
default=False,
|
||||
render_kw={
|
||||
"title": "Si le logiciel est disponible sur github et publie des releases ou des tags pour ses nouvelles versions, un robot proposera automatiquement des mises à jour de l'url et de la checksum."
|
||||
},
|
||||
)
|
||||
|
||||
## TODO
|
||||
# These infos are used by https://github.com/YunoHost/apps/blob/master/tools/autoupdate_app_sources/autoupdate_app_sources.py
|
||||
# to auto-update the previous asset urls and sha256sum + manifest version
|
||||
# assuming the upstream's code repo is on github and relies on tags or releases
|
||||
# See the 'sources' resource documentation for more details
|
||||
|
||||
# autoupdate.strategy = "latest_github_tag"
|
||||
|
||||
|
||||
|
||||
apt_dependencies = StringField(
|
||||
"Dépendances à installer via apt (séparées par des virgules)",
|
||||
render_kw={
|
||||
"placeholder": "foo foo2.1-ext somerandomdep",
|
||||
"class": "form-control",
|
||||
},
|
||||
)
|
||||
|
||||
database = SelectField(
|
||||
"Initialiser une base de données :",
|
||||
choices=[
|
||||
("false", "Non"),
|
||||
("mysql", "MySQL/MariaDB"),
|
||||
("postgresql", "PostgreSQL"),
|
||||
],
|
||||
default="false",
|
||||
render_kw={"title": "L'application nécessite-t-elle une base de données ?"},
|
||||
)
|
||||
|
||||
system_user = BooleanField(
|
||||
"Initialiser un utilisateur système pour cet app",
|
||||
default=True,
|
||||
)
|
||||
|
||||
install_dir = BooleanField(
|
||||
"Initialiser un dossier d'installation de l'app (typiquement /var/www/$app)",
|
||||
default=True,
|
||||
)
|
||||
|
||||
data_dir = BooleanField(
|
||||
"Initialiser un dossier pour les données de l'app (typiquement /home/yunohost.app/$app)",
|
||||
default=False,
|
||||
)
|
||||
|
||||
ports = BooleanField(
|
||||
"L'app aura besoin d'un port interne pour le reverse proxy entre nginx et l'app (généralement pas nécessaire pour les apps statiques ou php, mais généralement nécessaire pour les apps de type nodejs, python, ruby, ...)",
|
||||
)
|
||||
|
||||
## Main form
|
||||
|
||||
|
||||
class appGeneratorForm(
|
||||
manifestForm, DependenciesForm, Form_PHP, Form_NodeJS, Form_Python
|
||||
class GeneratorForm(
|
||||
GeneralInfos, IntegrationInfos, UpstreamInfos, InstallQuestions, Resources,
|
||||
Form_PHP, Form_NodeJS, Form_Python
|
||||
):
|
||||
app_name = StringField(
|
||||
"Nom de l'application :",
|
||||
validators=[DataRequired()],
|
||||
render_kw={
|
||||
"placeholder": "My Great App",
|
||||
"class": "form-control",
|
||||
"title": "Définir le nom de l'application, affiché dans l'interface",
|
||||
},
|
||||
)
|
||||
app_id = StringField(
|
||||
Markup(
|
||||
"""Identifiant (id) de l'application <i class="grayed_hint">(en minuscule et sans espaces)</i> :"""
|
||||
),
|
||||
validators=[DataRequired(), Regexp("[a-z_1-9]+.*(?<!_ynh)$")],
|
||||
render_kw={
|
||||
"placeholder": "yunohost_awesome_app",
|
||||
"class": "form-control",
|
||||
"title": "Définir l'identifiant de l'application, utilisé pour le nom du dépôt Github",
|
||||
},
|
||||
)
|
||||
|
||||
tutorial = SelectField(
|
||||
"Type d'application :",
|
||||
generator_mode = SelectField(
|
||||
"Mode du générateur :",
|
||||
choices=[("false", "Version épurée"), ("true", "Version tutoriel")],
|
||||
default="true",
|
||||
validators=[DataRequired()],
|
||||
)
|
||||
|
||||
supports_change_url = BooleanField(
|
||||
"L'application autorise le changement d'adresse (changement de domaine ou de chemin)",
|
||||
default=True,
|
||||
render_kw={
|
||||
"title": "Faut-il permettre le changement d'URL pour l'application ? (fichier change_url)"
|
||||
},
|
||||
)
|
||||
|
||||
use_logrotate = BooleanField(
|
||||
"Utiliser logrotate pour gérer les journaux :",
|
||||
default=True,
|
||||
|
@ -606,38 +593,15 @@ class appGeneratorForm(
|
|||
},
|
||||
)
|
||||
|
||||
needs_exposed_ports = StringField(
|
||||
"Nom de l'application :",
|
||||
validators=[Optional(), Regexp("([0-9]+,)+([0-9]+)?")],
|
||||
# TODO : add this in the HTML
|
||||
render_kw={
|
||||
"placeholder": "5000, ",
|
||||
"class": "form-control",
|
||||
"title": "Liste de ports à ouvrir publiquement, séparés par des virgules. NE PAS ACTIVER si le port est uniquement utilisé en interne ou disponible via le reverse-proxy de Nginx.",
|
||||
},
|
||||
)
|
||||
|
||||
submit = SubmitField("Soumettre")
|
||||
|
||||
|
||||
#### Retriving templates
|
||||
|
||||
parameters = dict(GENERATOR_DICT)
|
||||
|
||||
template_manifest = environment.get_template("manifest.j2")
|
||||
|
||||
|
||||
|
||||
#### Initialising variables
|
||||
|
||||
|
||||
#### Web pages
|
||||
|
||||
|
||||
@app.route("/", methods=["GET", "POST"])
|
||||
def main_form():
|
||||
if not "appGeneratorForm" in locals():
|
||||
main_form = appGeneratorForm()
|
||||
def main_form_route():
|
||||
|
||||
parameters = {}
|
||||
main_form = GeneratorForm()
|
||||
|
||||
if request.method == "POST":
|
||||
result = request.form
|
||||
|
@ -793,32 +757,10 @@ def main_form():
|
|||
parameters["preview"] = False
|
||||
|
||||
return render_template(
|
||||
"index.html", main_form=main_form
|
||||
"index.html", parameters=parameters, main_form=main_form
|
||||
)
|
||||
|
||||
|
||||
@app.route("/install")
|
||||
def install_page():
|
||||
template_install = environment.get_template("install.j2")
|
||||
return render_template(template_install)
|
||||
|
||||
|
||||
@app.route("/generator", methods=("GET", "POST"))
|
||||
def create():
|
||||
if request.method == "POST":
|
||||
title = request.form["title"]
|
||||
content = request.form["content"]
|
||||
|
||||
if not title:
|
||||
flash("Title is required!")
|
||||
elif not content:
|
||||
flash("Content is required!")
|
||||
else:
|
||||
install.append({"title": title, "content": content})
|
||||
return redirect("/")
|
||||
return render_template("form.html")
|
||||
|
||||
|
||||
@app.route("/download_zip", methods=("GET", "POST"))
|
||||
def telecharger_zip():
|
||||
# Retrieve arguments
|
||||
|
|
|
@ -232,9 +232,9 @@
|
|||
{{ main_form.hidden_tag() }}
|
||||
|
||||
|
||||
{{ main_form.tutorial.label }} {{ main_form.tutorial() }}
|
||||
{{ main_form.generator_mode.label }} {{ main_form.generator_mode() }}
|
||||
{# TODO : this doesn't work, should be changed on the fly. Is it worth the trouble ?
|
||||
{% if main_form.tutorial %}
|
||||
{% if main_form.generator_mode %}
|
||||
L'application générée contiendra des commentaires additionnels pour faciliter la compréhension
|
||||
{% else %}
|
||||
L'application générée ne contiendra que le minimum nécessaire
|
||||
|
@ -245,11 +245,17 @@
|
|||
<span><i class="grayed_hint">En mode tutoriel, l'application générée contiendra des commentaires additionnels pour faciliter la compréhension. En version épurée, l'application générée ne contiendra que le minimum nécessaire.</i></span>
|
||||
|
||||
|
||||
<h2>L'application à empaquetter dans Yunohost</h2>
|
||||
<p><i>Cette partie sert à indiquer comment le logiciel est intégré à Yunohost.</i></p>
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
|
||||
<h2>Informations générales</h2>
|
||||
|
||||
<div>
|
||||
{{ main_form.app_name.label }} {{ main_form.app_name()}}
|
||||
<br>
|
||||
{{ main_form.app_id.label}} {{ main_form.app_id() }} <span>_ynh</span>
|
||||
{{ main_form.app_id.label}} {{ main_form.app_id() }}
|
||||
<br>
|
||||
|
||||
|
||||
|
@ -264,13 +270,39 @@
|
|||
height:
|
||||
2.5em;min-height: 1em; max-height: 4em;flex-grow: 1;box-sizing: border-box;")}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h2>Informations sur l'upstream</h2>
|
||||
|
||||
<div>
|
||||
<p><i>Le terme upstream désigne le projet original qui maintient l'app</i></p>
|
||||
{{ main_form.license.label}} {{ main_form.license()}}
|
||||
<br>
|
||||
|
||||
<h2>Intégration</h2>
|
||||
<p><i>Cette partie sert à indiquer comment le logiciel est intégré à Yunohost.</i></p>
|
||||
{{ main_form.website.label}} {{ main_form.website()}}
|
||||
<br>
|
||||
{{ main_form.demo.label}} {{ main_form.demo()}}
|
||||
<br>
|
||||
{{ main_form.admindoc.label}} {{ main_form.admindoc()}}
|
||||
<br>
|
||||
{{ main_form.userdoc.label}} {{ main_form.userdoc()}}
|
||||
<br>
|
||||
{{ main_form.code.label}} {{ main_form.code()}}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h2>Informations sur le paquet et l'intégration dans YunoHost</h2>
|
||||
|
||||
<div>
|
||||
{{ main_form.version.label}} {{ main_form.version()}}
|
||||
<br>
|
||||
{{ main_form.maintainers.label}} {{ main_form.maintainers(style="width: 60%;")}}
|
||||
|
@ -285,58 +317,83 @@
|
|||
<br>
|
||||
{{ main_form.sso.label}} {{ main_form.sso()}}
|
||||
<br>
|
||||
|
||||
<h2>Informations sur le logiciel</h2>
|
||||
<p><i>Cette partie donne des informations génériques sur le logiciel.</i></p>
|
||||
<br>
|
||||
{{ main_form.license.label}} {{ main_form.license()}}
|
||||
<br>
|
||||
{{ main_form.website.label}} {{ main_form.website()}}
|
||||
<br>
|
||||
{{ main_form.demo.label}} {{ main_form.demo()}}
|
||||
<br>
|
||||
{{ main_form.admindoc.label}} {{ main_form.admindoc()}}
|
||||
<br>
|
||||
{{ main_form.userdoc.label}} {{ main_form.userdoc()}}
|
||||
<br>
|
||||
{{ main_form.code.label}} {{ main_form.code()}}
|
||||
</div>
|
||||
|
||||
|
||||
<h2>Paramétrage de l'application</h2>
|
||||
<p><i>Cette partie sert à indiquer comment configurer l'application côté Yunohost.</i></p>
|
||||
<hr/>
|
||||
|
||||
|
||||
<fieldset name="data_dir_main_form" class="box data_dir_config" style="width:90%;">
|
||||
<legend>Dossier des données</legend>
|
||||
{{ main_form.data_dir.label}} {{ main_form.data_dir()}}
|
||||
|
||||
<h2>Questions à poser pendant l'installation</h2>
|
||||
|
||||
<div>
|
||||
<p>
|
||||
<i>Cette partie sert à indiquer les questions qui devront être posées.</i>
|
||||
<br>
|
||||
{{ main_form.data_subdirs.label}} {{ main_form.data_subdirs()}}
|
||||
<br>
|
||||
</fieldset>
|
||||
<em>NB: seules des questions standard sont proposées ici, il faudra éventuellement compléter à la main en
|
||||
suivant le modèle des autres questions.</em>
|
||||
</p>
|
||||
|
||||
{{ main_form.domain_and_path.label}} {{ main_form.domain_and_path()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.init_main_permission.label}} {{ main_form.init_main_permission()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.init_admin_permission.label}} {{ main_form.init_admin_permission()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.language.label}} {{ main_form.language()}}
|
||||
</div>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h2>Ressources à initialiser</h2>
|
||||
|
||||
<div>
|
||||
<p>
|
||||
<i>Il s'agit d'éléments techniques configurés avant que le "vrai" script d'install de l'app ne soit lancé. Typiquement : créer un user système, télécharger les sources de l'app, initialiser le dossier d'install et de données, installer des dépendances avec apt, créer une base de donnée SQL, ...</i>
|
||||
</p>
|
||||
|
||||
<span>Sources du logiciel</span>
|
||||
<div style="padding-left: 2em;">
|
||||
{{ main_form.source_url.label}} {{ main_form.source_url()}}
|
||||
<br/>
|
||||
{{ main_form.sha256sum.label}} {{ main_form.sha256sum()}}
|
||||
<br/>
|
||||
{{ main_form.auto_update.label}} {{ main_form.auto_update()}}
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
|
||||
{{ main_form.system_user.label}} {{ main_form.system_user()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.install_dir.label}} {{ main_form.install_dir()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.data_dir.label}} {{ main_form.data_dir()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.apt_dependencies.label}} {{ main_form.apt_dependencies(style="width:40%;")}}
|
||||
<br>
|
||||
|
||||
{{ main_form.ports.label}} {{ main_form.ports()}}
|
||||
<br>
|
||||
|
||||
{{ main_form.database.label }} {{ main_form.database() }}
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h2>Technologies spécifiques (to be reworked)</h2>
|
||||
|
||||
{{ main_form.supports_change_url.label}} {{ main_form.supports_change_url()}}
|
||||
<br>
|
||||
|
||||
|
||||
<fieldset name="data_dir_main_form" class="box data_dir_config" style="width:90%;">
|
||||
<legend>Paramètres de langue</legend>
|
||||
<div style="display: flex; align-items: center;">
|
||||
<div style="width: 50%; float:left">
|
||||
{{ main_form.language.label}} {{ main_form.language()}}
|
||||
</div>
|
||||
<div style="width: 50%; float:right">
|
||||
{{ main_form.default_language.label}} {{
|
||||
main_form.default_language()}}
|
||||
|
||||
</div>
|
||||
|
||||
<br style="clear:both;"/>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
|
||||
{{ main_form.visibility.label}} {{ main_form.visibility()}}
|
||||
<br>
|
||||
{{ main_form.use_logrotate.label}} {{ main_form.use_logrotate()}}
|
||||
<br>
|
||||
|
||||
|
@ -444,33 +501,6 @@
|
|||
</script> -->
|
||||
|
||||
|
||||
<h2>Questions à poser pendant l'installation</h2>
|
||||
<p><i>Cette partie sert à indiquer les questions qui devront être posées.</i>
|
||||
<br>
|
||||
<em>NB: seules des questions standard sont proposées ici, il faudra éventuellement compléter à la main en
|
||||
suivant le modèle des autres questions.</em>
|
||||
</p>
|
||||
|
||||
{{ main_form.use_whole_domain.label}} {{ main_form.use_whole_domain()}}
|
||||
<br>
|
||||
|
||||
|
||||
<h2>Source du logiciel et dépendances</h2>
|
||||
|
||||
{{ main_form.source_url.label}} {{ main_form.source_url()}}
|
||||
<br>
|
||||
{{ main_form.sha256sum.label}} {{ main_form.sha256sum()}}
|
||||
<br>
|
||||
{{ main_form.auto_update.label}} {{ main_form.auto_update()}}
|
||||
<br>
|
||||
{{ main_form.dependencies.label}} {{ main_form.dependencies(style="width:40%;")}}
|
||||
<br><br>
|
||||
|
||||
|
||||
{{ main_form.use_db.label }} {{ main_form.use_db() }}
|
||||
<br>
|
||||
|
||||
|
||||
<h3>Utilisation de PHP</h3>
|
||||
{{ main_form.use_php.label}} {{ main_form.use_php(onchange="showForm(this, 'PHP')") }}<br>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue