From ca1c1238a8d8f1dc89c092216491d3ec9464382c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 10 Jul 2021 12:49:44 +0200 Subject: [PATCH] 4.8.1 (#16) * 4.8.1 (#15) * 4.8.1 * Add template * Auto-update README Co-authored-by: Yunohost-Bot <> --- README.md | 50 +- README_fr.md | 67 +- check_process | 11 +- doc/.DS_Store | Bin 0 -> 6148 bytes doc/DISCLAIMER.md | 5 + doc/DISCLAIMER_fr.md | 5 + doc/screenshots/screenshot.png | Bin 0 -> 15900 bytes manifest.json | 10 +- scripts/install | 29 +- scripts/restore | 27 +- scripts/upgrade | 72 +- sources/root_access_disabled/adminer.php | 1257 +++++++++++----------- sources/with_root_access/index.php | 1257 +++++++++++----------- 13 files changed, 1392 insertions(+), 1398 deletions(-) create mode 100644 doc/.DS_Store create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/DISCLAIMER_fr.md create mode 100644 doc/screenshots/screenshot.png diff --git a/README.md b/README.md index b2e32d8..06ce8d0 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,44 @@ + + # Adminer for YunoHost [![Integration level](https://dash.yunohost.org/integration/adminer.svg)](https://dash.yunohost.org/appci/app/adminer) ![](https://ci-apps.yunohost.org/ci/badges/adminer.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/adminer.maintain.svg) -[![Install Adminer with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=adminer) +[![Install Adminer with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=adminer) *[Lire ce readme en français.](./README_fr.md)* -> *This package allows you to install Adminer quickly and simply on a YunoHost server. +> *This package allows you to install Adminer quickly and simply on a YunoHost server. If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview -Adminer (formerly phpMinAdmin better alternate to phpMyAdmin) is a full-featured database management tool (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Replace phpMyAdmin with Adminer and you will get a tidier user interface, better support for MySQL features, higher performance and more security. [See detailed comparison](https://www.adminer.org/en/phpmyadmin). -**Shipped version:** 4.8.0 +Database management in a single PHP file + +**Shipped version:** 4.8.1~ynh1 + +**Demo:** https://demo.adminer.org/adminer.php?username= ## Screenshots -![](https://www.adminer.org/static/screenshots/db.png) +![](./doc/screenshots/screenshot.png) -## Demo - -* [Official demo](https://demo.adminer.org/adminer.php?username=) +## Disclaimers / important information ## Configuration You need to know the root password from here `/etc/yunohost/mysql` or the app username and password from `setting.yml` under `/etc/yunohost/apps/appname` to login. -For themes download the adminer.css from the main website and replace the file in the app folder. +For themes download the `adminer.css` from the main website and replace the file in the app folder. If you have problems with drivers see here: https://www.adminer.org/en/drivers. -## YunoHost specific features +## Documentation and resources -#### Multi-user support - - * Are LDAP and HTTP auth supported? **No** - * Can the app be used by multiple users? **Yes** - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/adminer_%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/adminer/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/adminer_%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/adminer/) - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/adminer_ynh/issues - * App website: https://www.adminer.org/ - * Upstream app repository: https://github.com/vrana/adminer/ - * YunoHost website: https://yunohost.org/ - ---- +* Official app website: https://www.adminer.org/ +* Upstream app code repository: https://github.com/vrana/adminer/ +* YunoHost documentation for this app: https://yunohost.org/app_adminer +* Report a bug: https://github.com/YunoHost-Apps/adminer_ynh/issues ## Developer info @@ -58,3 +50,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/adminer_ynh/tree/test or sudo yunohost app upgrade adminer -u https://github.com/YunoHost-Apps/adminer_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md index 5ffa594..6466d03 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,65 +1,40 @@ # Adminer pour YunoHost -[![Integration level](https://dash.yunohost.org/integration/adminer.svg)](https://dash.yunohost.org/appci/app/adminer) ![](https://ci-apps.yunohost.org/ci/badges/adminer.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/adminer.maintain.svg) -[![Installer Adminer avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=adminer) +[![Niveau d'intégration](https://dash.yunohost.org/integration/adminer.svg)](https://dash.yunohost.org/appci/app/adminer) ![](https://ci-apps.yunohost.org/ci/badges/adminer.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/adminer.maintain.svg) +[![Installer Adminer avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=adminer) -*[Read this readme in english.](./README.md)* +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* -> *Ce package vous permet d'installer Adminer rapidement et simplement sur un serveur YunoHost. -Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install) pour apprendre comment l'installer.* +> *Ce package vous permet d'installer Adminer rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble -Adminer (anciennement phpMinAdmin, meilleure alternative à phpMyAdmin) est un outil de gestion de base de données (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Remplacez phpMyAdmin par Adminer et vous obtiendrez une interface utilisateur plus ordonnée, une meilleure prise en charge des fonctionnalités MySQL, des performances plus élevées et plus de sécurité. [Voir comparaison détaillée](https://www.adminer.org/en/phpmyadmin). -**Version incluse :** 4.8.0 +Gestionnaire de base de données en un seul fichier PHP + +**Version incluse :** 4.8.1~ynh1 + +**Démo :** https://demo.adminer.org/adminer.php?username= ## Captures d'écran -![](https://www.adminer.org/static/screenshots/db.png) +![](./doc/screenshots/screenshot.png) -## Démo - -* [Démo officielle](https://demo.adminer.org/adminer.php?username=) +## Avertissements / informations importantes ## Configuration Vous devez connaître le mot de passe root à partir d'ici `/etc/yunohost/mysql` ou le nom d'utilisateur et le mot de passe de l'application dans `setting.yml` sous `/etc/yunohost/apps/appname` pour vous connecter. -Pour les thèmes, téléchargez le fichier adminer.css depuis le site Web principal et placez le fichier dans le dossier de l'application. +Pour les thèmes, téléchargez le fichier `adminer.css` depuis le site Web principal et placez le fichier dans le dossier de l'application. Si vous rencontrez des problèmes avec les pilotes, consultez : https://www.adminer.org/en/drivers. -## Documentation +## Documentations et ressources - * Documentation officielle : Lien vers la documentation officielle de cette application. - * Documentation YunoHost : Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. - -## Caractéristiques spécifiques YunoHost - -#### Support multi-utilisateur - -* L'authentification LDAP et HTTP est-elle prise en charge ? **Non** -* L'application peut-elle être utilisée par plusieurs utilisateurs ? **Oui** - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/adminer_%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/adminer/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/adminer_%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/adminer/) - -## Limitations - -* Limitations connues. - -## Additional information - -* Autres informations que vous souhaitez ajouter sur cette application. - -## Liens - - * Signaler un bug : https://github.com/YunoHost-Apps/adminer_ynh/issues - * Site de l'application : https://www.adminer.org/ - * Dépôt de l'application principale : https://github.com/vrana/adminer/ - * Site web YunoHost : https://yunohost.org/ - ---- +* Site officiel de l'app : https://www.adminer.org/ +* Dépôt de code officiel de l'app : https://github.com/vrana/adminer/ +* Documentation YunoHost pour cette app : https://yunohost.org/app_adminer +* Signaler un bug : https://github.com/YunoHost-Apps/adminer_ynh/issues ## Informations pour les développeurs @@ -68,6 +43,8 @@ Merci de faire vos pull request sur la [branche testing](https://github.com/Yuno Pour essayer la branche testing, procédez comme suit. ``` sudo yunohost app install https://github.com/YunoHost-Apps/adminer_ynh/tree/testing --debug -or +ou sudo yunohost app upgrade adminer -u https://github.com/YunoHost-Apps/adminer_ynh/tree/testing --debug ``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/check_process b/check_process index 44c97a8..26f0c64 100644 --- a/check_process +++ b/check_process @@ -1,13 +1,9 @@ -# See here for more information -# https://github.com/YunoHost/package_check#syntax-check_process-file - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) + domain="domain.tld" + path="/path" root_access=0 - is_public=1 (PUBLIC|public=1|private=0) - + is_public=1 ; Checks pkg_linter=1 setup_sub_dir=1 @@ -18,7 +14,6 @@ upgrade=1 backup_restore=1 multi_instance=1 - port_already_use=0 change_url=1 ;;; Options Email= anmol@datamol.org diff --git a/doc/.DS_Store b/doc/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c90376b56b73b627c519d1a34c5d8c9abb7004dc GIT binary patch literal 6148 zcmeHKyG{c^3>-s>NNG}1?l15Mt0;UyegFv&DbPhqfch%Fi%(bFB<-Yt6!=#P*lfL7ulP#UTPH8)y|&RG>0a|qcjG!J4AG8> j(T=(Cc6=8_S=W5c^IkY62A%n!6ZJFTy2zx!wH5dQ#>Eyj literal 0 HcmV?d00001 diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..51982ab --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,5 @@ +## Configuration + +You need to know the root password from here `/etc/yunohost/mysql` or the app username and password from `setting.yml` under `/etc/yunohost/apps/appname` to login. +For themes download the `adminer.css` from the main website and replace the file in the app folder. +If you have problems with drivers see here: https://www.adminer.org/en/drivers. diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..010d328 --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,5 @@ +## Configuration + +Vous devez connaître le mot de passe root à partir d'ici `/etc/yunohost/mysql` ou le nom d'utilisateur et le mot de passe de l'application dans `setting.yml` sous `/etc/yunohost/apps/appname` pour vous connecter. +Pour les thèmes, téléchargez le fichier `adminer.css` depuis le site Web principal et placez le fichier dans le dossier de l'application. +Si vous rencontrez des problèmes avec les pilotes, consultez : https://www.adminer.org/en/drivers. diff --git a/doc/screenshots/screenshot.png b/doc/screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..09c33093f59b1ecf890772210f23a8d59e8107ca GIT binary patch literal 15900 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 9e8a926..46b48eb 100644 --- a/manifest.json +++ b/manifest.json @@ -7,8 +7,14 @@ "fr": "Gestionnaire de base de données en un seul fichier PHP" }, - "version": "4.8.0~ynh1", + "version": "4.8.1~ynh1", "url": "https://www.adminer.org/", + "upstream": { + "license": "Apache-2.0", + "website": "https://www.adminer.org/", + "demo": "https://demo.adminer.org/adminer.php?username=", + "code": "https://github.com/vrana/adminer/" + }, "license": "Apache-2.0", "maintainer": { "name": "Anmol Sharma", @@ -21,7 +27,7 @@ "url": "https://github.com/jesuisfol/adminer_ynh" }, "requirements": { - "yunohost": ">= 4.1.7" + "yunohost": ">= 4.2.4" }, "multi_instance": true, "services": [ diff --git a/scripts/install b/scripts/install index 0c7f432..667f176 100644 --- a/scripts/install +++ b/scripts/install @@ -45,6 +45,14 @@ ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url ynh_app_setting_set --app=$app --key=root_access --value=$root_access +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." --weight=2 + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -63,23 +71,10 @@ if [[ $root_access -eq 1 ]]; then cp -a ../sources/root_access_disabled/. $final_path fi -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=2 - -# Create a system user -ynh_system_user_create --username=$app - -#================================================= -# GENERIC FINALIZATION -#================================================= -# SECURE FILES AND DIRECTORIES -#================================================= - -# Set permissions to app files -chown -R www-data:www-data $final_path -chmod 755 -R $final_path/adminer.php +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" +chmod 755 $final_path/adminer.php #================================================= # NGINX CONFIGURATION diff --git a/scripts/restore b/scripts/restore index 579cde3..16ba223 100644 --- a/scripts/restore +++ b/scripts/restore @@ -46,6 +46,14 @@ test ! -d $final_path \ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -53,21 +61,10 @@ ynh_script_progression --message="Restoring Adminer main directory..." --weight= ynh_restore_file --origin_path="$final_path" -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= - -# Restore permissions to app files -chown -R www-data:www-data $final_path -chmod 755 -R $final_path/adminer.php +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" +chmod 755 $final_path/adminer.php #================================================= # RESTORE THE PHP-FPM CONFIGURATION diff --git a/scripts/upgrade b/scripts/upgrade index 53faa4c..c3adec7 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -22,6 +22,26 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) root_access=$(ynh_app_setting_get --app=$app --key=root_access) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +#================================================= +# CHECK VERSION +#================================================= + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up Adminer before upgrading (may take a while)..." --weight=3 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= @@ -40,48 +60,38 @@ if ynh_legacy_permissions_exists; then ynh_app_setting_delete --app=$app --key=is_public fi -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up Adminer before upgrading (may take a while)..." --weight=3 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - # restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - #================================================= # CREATE DEDICATED USER #================================================= ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 # Create a dedicated user (if not existing) -ynh_system_user_create --username=$app +ynh_system_user_create --username=$app --home_dir="$final_path" -# Copy source files -ynh_secure_remove $final_path +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= -mkdir -p $final_path +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + # Copy source files + ynh_secure_remove $final_path -if [[ $root_access -eq 1 ]]; then -#copy files from with_root_access folder to the final_path - cp -a ../sources/with_root_access/. $final_path - else - #copy files from root_access_disabled folder to the final_path - cp -a ../sources/root_access_disabled/. $final_path + mkdir -p $final_path + + if [[ $root_access -eq 1 ]]; then + #copy files from with_root_access folder to the final_path + cp -a ../sources/with_root_access/. $final_path + else + #copy files from root_access_disabled folder to the final_path + cp -a ../sources/root_access_disabled/. $final_path + fi fi -#================================================= -# SECURE FILES AND DIRECTORIES -#================================================= - -# Set permissions to app files -chmod 755 -R $final_path/adminer.php -chown -R www-data:www-data $final_path +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" +chmod 755 $final_path/adminer.php #================================================= # NGINX CONFIGURATION diff --git a/sources/root_access_disabled/adminer.php b/sources/root_access_disabled/adminer.php index b9ce4d0..762aaaf 100644 --- a/sources/root_access_disabled/adminer.php +++ b/sources/root_access_disabled/adminer.php @@ -5,56 +5,56 @@ * @copyright 2007 Jakub Vrana * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) -* @version 4.8.0 +* @version 4.8.1 */function -adminer_errors($Ac,$Cc){return!!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~',$Cc);}error_reporting(6135);set_error_handler('adminer_errors',2);$Yc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Yc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Hi=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Hi)$$X=$Hi;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function +adminer_errors($Cc,$Ec){return!!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~',$Ec);}error_reporting(6135);set_error_handler('adminer_errors',E_WARNING);$ad=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($ad||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Ii=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Ii)$$X=$Ii;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function connection(){global$g;return$g;}function adminer(){global$b;return$b;}function version(){global$ia;return$ia;}function -idf_unescape($v){$pe=substr($v,-1);return -str_replace($pe.$pe,$pe,substr($v,1,-1));}function +idf_unescape($v){if(!preg_match('~^[`\'"]~',$v))return$v;$qe=substr($v,-1);return +str_replace($qe.$qe,$qe,substr($v,1,-1));}function escape_string($X){return substr(q($X),1,-1);}function number($X){return preg_replace('~[^0-9]+~','',$X);}function number_type(){return'((?$W){unset($sg[$z][$ge]);if(is_array($W)){$sg[$z][stripslashes($ge)]=$W;$sg[]=&$sg[$z][stripslashes($ge)];}else$sg[$z][stripslashes($ge)]=($Yc?$W:stripslashes($W));}}}}function -bracket_escape($v,$Na=false){static$ti=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return -strtr($v,($Na?array_flip($ti):$ti));}function -min_version($Yi,$Ce="",$h=null){global$g;if(!$h)$h=$g;$mh=$h->server_info;if($Ce&&preg_match('~([\d.]+)-MariaDB~',$mh,$C)){$mh=$C[1];$Yi=$Ce;}return(version_compare($mh,$Yi)>=0);}function +remove_slashes($tg,$ad=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($z,$X)=each($tg)){foreach($X +as$he=>$W){unset($tg[$z][$he]);if(is_array($W)){$tg[$z][stripslashes($he)]=$W;$tg[]=&$tg[$z][stripslashes($he)];}else$tg[$z][stripslashes($he)]=($ad?$W:stripslashes($W));}}}}function +bracket_escape($v,$Na=false){static$ui=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return +strtr($v,($Na?array_flip($ui):$ui));}function +min_version($Zi,$De="",$h=null){global$g;if(!$h)$h=$g;$nh=$h->server_info;if($De&&preg_match('~([\d.]+)-MariaDB~',$nh,$C)){$nh=$C[1];$Zi=$De;}return(version_compare($nh,$Zi)>=0);}function charset($g){return(min_version("5.5.3",0,$g)?"utf8mb4":"utf8");}function -script($xh,$si="\n"){return"$xh$si";}function -script_src($Mi){return"\n";}function +script($yh,$ti="\n"){return"$yh$ti";}function +script_src($Ni){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function target_blank(){return' target="_blank" rel="noreferrer noopener"';}function h($P){return str_replace("\0","�",htmlspecialchars($P,ENT_QUOTES,'utf-8'));}function nl_br($P){return str_replace("\n","
",$P);}function -checkbox($D,$Y,$db,$le="",$tf="",$hb="",$me=""){$I="".($tf?script("qsl('input').onclick = function () { $tf };",""):"");return($le!=""||$hb?"$I".h($le)."":$I);}function -optionlist($zf,$fh=null,$Qi=false){$I="";foreach($zf -as$ge=>$W){$_f=array($ge=>$W);if(is_array($W)){$I.='';$_f=$W;}foreach($_f -as$z=>$X)$I.=''.h($X);if(is_array($W))$I.='';}return$I;}function -html_select($D,$zf,$Y="",$sf=true,$me=""){if($sf)return"".(is_string($sf)?script("qsl('select').onchange = function () { $sf };",""):"");$I="";foreach($zf +checkbox($D,$Y,$db,$me="",$uf="",$hb="",$ne=""){$I="".($uf?script("qsl('input').onclick = function () { $uf };",""):"");return($me!=""||$hb?"$I".h($me)."":$I);}function +optionlist($_f,$gh=null,$Ri=false){$I="";foreach($_f +as$he=>$W){$Af=array($he=>$W);if(is_array($W)){$I.='';$Af=$W;}foreach($Af +as$z=>$X)$I.=''.h($X);if(is_array($W))$I.='';}return$I;}function +html_select($D,$_f,$Y="",$tf=true,$ne=""){if($tf)return"".(is_string($tf)?script("qsl('select').onchange = function () { $tf };",""):"");$I="";foreach($_f as$z=>$X)$I.="";return$I;}function -select_input($Ia,$zf,$Y="",$sf="",$eg=""){$Xh=($zf?"select":"input");return"<$Xh$Ia".($zf?">