<?php

/**
 * Gestion du formulaire de téléchargement de plugin via une URL
 *
 * @plugin SVP pour SPIP
 * @license GPL
 * @package SPIP\SVP\Formulaires
 */

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

/**
 * Chargement du formulaire de téléchargement de plugin
 *
 * @return array
 *     Environnement du formulaire
 */
function formulaires_charger_plugin_archive_charger_dist() {

	if (!autoriser('ajouter', '_plugins')) {
		return false;
	}

	return [
		'archive' => '',
		'destination' => '',
		'password' => '',
	];
}

/**
 * Vérifications du formulaire de téléchargement de plugin
 *
 * Vérifie qu'une archive est saisie, et si la destination existe
 * demande à confirmer l'écrasement
 *
 * @return array
 *     Tableau des erreurs
 */
function formulaires_charger_plugin_archive_verifier_dist() {
	include_spip('inc/plugin'); // _DIR_PLUGINS_AUTO
	$erreurs = [];

	if (!autoriser('ajouter', '_plugins')) {
		$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
	} else {

		if (!$archive = _request('archive')) {
			$erreurs['archive'] = _T('info_obligatoire');
		} else {
			// Validité de l'url de l'archive
			$infos_archive = pathinfo($archive);
			if (!isset($infos_archive['extension'])) {
				$erreurs['archive'] = _T('svp:message_nok_url_archive');
			} else {
				// calcul du répertoire de destination
				if (!$destination = _request('destination')) {
					$destination = $infos_archive['filename'];
				}
				$destination = str_replace('../', '', $destination);
				set_request('destination', $destination);

				// si la destination existe, on demande confirmation de l'ecrasement.
				$dir = _DIR_PLUGINS_AUTO . $destination;
				if (is_dir($dir) and !_request('confirmer')) {
					$base = dirname($dir);
					$nom = basename($dir);
					$backup = "$base/.$nom.bck";
					$erreurs['confirmer'] = _T('svp:confirmer_telecharger_dans', [
						'dir' => joli_repertoire($dir),
						'dir_backup' => joli_repertoire($backup),
					]);
				}
			}
		}

		if (empty($password = _request('password'))) {
			$erreurs['password'] = _T('info_obligatoire');
		} else {
			include_spip('inc/auth');
			if (!auth_controler_password_auteur_connecte($password)) {
				$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
			}
		}

	}

	return $erreurs;
}

/**
 * Traitement du formulaire de téléchargement de plugin
 *
 * Télécharge le plugin via le téléporteur et rend la main.
 *
 * @return array
 *     Retours du traitement
 */
function formulaires_charger_plugin_archive_traiter_dist() {
	$retour = [];

	$archive = _request('archive');
	$dest = _request('destination');

	include_spip('action/teleporter');
	$teleporter_composant = charger_fonction('teleporter_composant', 'action');
	$ok = $teleporter_composant('http', $archive, _DIR_PLUGINS_AUTO . $dest);
	if ($ok !== true) {
		$retour['message_erreur'] = $ok;
	} else {
		$retour['message_ok'] = _T(
			'svp:message_telechargement_archive_effectue',
			['dir' => joli_repertoire(_DIR_PLUGINS_AUTO . $dest)]
		);
	}
	$retour['editable'] = true;

	return $retour;
}
