From 9a2d4442d68cea71849fa4a46d3c54c31d808aac Mon Sep 17 00:00:00 2001
From: RealET <real3t@gmail.com>
Date: Thu, 3 Mar 2022 13:43:33 +0100
Subject: [PATCH] API SPIP pour les auteurs, sites et formulaires formidable +
 nettoyage de code et execeptions sur autorisations

---
 base/soyezcreateurs.php            | 112 ++++++++++++++++++++---------
 soyezcreateurs_administrations.php |  10 ---
 2 files changed, 78 insertions(+), 44 deletions(-)

diff --git a/base/soyezcreateurs.php b/base/soyezcreateurs.php
index d59dd29d..68ee9cc4 100644
--- a/base/soyezcreateurs.php
+++ b/base/soyezcreateurs.php
@@ -11,7 +11,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
 
 include_spip("inc/lang");
 include_spip('inc/meta');
-
+include_spip('inc/autoriser');
+include_spip('action/editer_objet');
 
 // Déclaration des champs extra nécessaires à SoyezCréateurs
 function soyezcreateurs_declarer_champs_extras($champs = array()) {
@@ -139,7 +140,6 @@ function id_groupe($titre) {
 
 //fonction qui permet de créer un groupe de mots clés
 function create_groupe($groupe, $descriptif='', $texte='', $unseul='non', $obligatoire='non', $tables_liees='', $minirezo='oui', $comite='oui', $forum='non') {
-	include_spip('action/editer_objet');
 	$id_groupe = find_groupe($groupe);
 	spip_log("1. (create_groupe) pret a creer groupe : titre = $groupe. retour de find_groupe = $id_groupe", _LOG_DEBUG);
 	if ($id_groupe == 0) {
@@ -170,8 +170,8 @@ function supprimer_mot_groupe($nom_groupe,$nom_mot) {
 	if ($id_groupe>0) {
 		$id_mot = id_mot($nom_mot, $id_groupe);
 		if ($id_mot>0) {
-			sql_delete("spip_mots", "id_mot=$id_mot");
-			sql_delete("spip_mots_liens", "id_mot=$id_mot");
+			include_spip('action/editer_mot');
+			mot_supprimer($id_mot);
 		}
 	}
 }
@@ -180,9 +180,9 @@ function vider_groupe($nom_groupe) {
 	$id_groupe = id_groupe($nom_groupe);
 	if ($id_groupe>0) {
 		$id_mots = sql_select('id_mot',  'spip_mots',  'id_groupe='.sql_quote($id_groupe));
+		include_spip('action/editer_mot');
 		while($id_mot = sql_fetch($id_mots)){
-			sql_delete("spip_mots", "id_mot=".$id_mot['id_mot']);
-			sql_delete("spip_mots_liens", "id_mot=".$id_mot['id_mot']);
+			mot_supprimer($id_mot);
 		}
 		sql_delete("spip_groupes_mots", "id_groupe=$id_groupe");
 	}
@@ -190,7 +190,6 @@ function vider_groupe($nom_groupe) {
 
 //fonction qui mets à jour un groupe de mots clés
 function remplacer_groupe($titre, $descriptif, $texte, $unseul, $obligatoire, $tables_liees, $minirezo, $comite, $forum) {
-	include_spip('action/editer_objet');
 	$id_groupe = id_groupe($titre);
 		$set = array(
 			"titre" => $titre,
@@ -233,7 +232,6 @@ function id_mot($titre, $id_groupe) {
 
 //fonction qui permet de créer un mot clé
 function create_mot($groupe, $mot, $descriptif='', $texte='') {
-	include_spip('action/editer_objet');
 	$id_groupe = id_groupe($groupe);
 	$find_mot = find_mot($mot, $id_groupe);
 	if ($find_mot == 0) {
@@ -262,7 +260,6 @@ function create_mot($groupe, $mot, $descriptif='', $texte='') {
 
 //fonction qui permet de mettre à jour un mot clé 
 function remplacer_mot($id_mot, $mot, $descriptif, $texte, $id_groupe, $groupe) {
-	include_spip('action/editer_objet');
 	$set = array(
 		"titre" => $mot,
 		"descriptif" => $descriptif,
@@ -276,7 +273,6 @@ function remplacer_mot($id_mot, $mot, $descriptif, $texte, $id_groupe, $groupe)
 
 //fonction qui permet de changer un mot clé de groupe
 function deplacer_mot($id_mot, $id_groupe) {
-	include_spip('action/editer_objet');
 	$set = array(
 		"id_groupe" => $id_groupe
 	);
@@ -319,7 +315,6 @@ function delete_rubrique($titre) {
 
 // fonction qui permet de renommer une rubrique à partir du titre
 function rename_rubrique($titre, $nouveau_titre) {
-	include_spip('action/editer_objet');
 	$id_rubrique = id_rubrique($titre);
 	if ($id_rubrique) {
 		$set = array(
@@ -334,7 +329,6 @@ function rename_rubrique($titre, $nouveau_titre) {
 
 //fonction qui permet de créer une rubrique
 function create_rubrique($titre, $id_parent='0', $descriptif='') {
-	include_spip('action/editer_objet');
 	$id_rubrique = find_rubrique($titre);
 	if ($id_rubrique == 0) {
 		$set= array(
@@ -342,7 +336,9 @@ function create_rubrique($titre, $id_parent='0', $descriptif='') {
 			"id_parent" => $id_parent,
 			"descriptif" => $descriptif
 		);
+		autoriser_exception('inserer', 'rubrique', $id_rubrique);
 		$id_rubrique = objet_inserer('rubrique', $id_parent, $set);
+		autoriser_exception('inserer', 'rubrique', $id_rubrique, false);
 		spip_log("1. (create_rubrique) rubrique cree : id = $id_rubrique, titre = $titre", _LOG_DEBUG);
 	}
 	else if ($id_rubrique > 0) {
@@ -354,8 +350,6 @@ function create_rubrique($titre, $id_parent='0', $descriptif='') {
 
 //fonction qui mets à jour une rubrique
 function remplacer_rubrique($id_rubrique, $set) {
-	include_spip('action/editer_objet');
-	include_spip('inc/autoriser');
 	// donner une autorisation exceptionnelle temporaire
 	autoriser_exception('modifier', 'rubrique', $id_rubrique);
 	$retour = objet_modifier('rubrique', $id_rubrique, $set);
@@ -389,7 +383,6 @@ function id_article($titre, $id_rubrique) {
 
 //fonction qui permet de créer un article
 function create_article($texte, $rubrique, $lang='fr') {
-	include_spip('action/editer_objet');
 	$id_rubrique = id_rubrique($rubrique);
 	$count_articles = find_article($texte['titre'], $id_rubrique);
 	if ($count_articles == 0) {
@@ -411,7 +404,9 @@ function create_article($texte, $rubrique, $lang='fr') {
 			"url_site" => $texte['url_site'],
 			"virtuel" => $texte['virtuel']
 		);
+		autoriser_exception('inserer', 'article', $id_rubrique);
 		$id_article = objet_inserer('article', $id_rubrique, $set);
+		autoriser_exception('inserer', 'article', $id_rubrique, false);
 		spip_log("2. (create_article) article insere : $id_article", _LOG_DEBUG);
 	}
 	else if ($count_articles > 0) {
@@ -424,7 +419,6 @@ function create_article($texte, $rubrique, $lang='fr') {
 
 //fonction qui permet de mettre à jour un article
 function remplacer_article($id_article, $id_rubrique, $texte) {
-	include_spip('action/editer_objet');
 	$set = array(
 		"surtitre" => $texte['surtitre'],
 		"soustitre" => $texte['soustitre'],
@@ -436,7 +430,9 @@ function remplacer_article($id_article, $id_rubrique, $texte) {
 		"url_site" => $texte['url_site'],
 		"virtuel" => $texte['virtuel']
 	);
+	autoriser_exception('modifier', 'article', $id_article);
 	objet_modifier('article', $id_article, $set);
+	autoriser_exception('modifier', 'article', $id_article, false);
 	return true;
 }
 
@@ -449,7 +445,7 @@ function poubelle_article($id_or_titre_article, $titre_rubrique) {
 			$id_article = id_article($id_or_titre_article, $id_rubrique);
 		}
 		if ($id_article) {
-			include_spip('action/editer_objet');
+			autoriser_exception('modifier', 'article', $id_article);
 			objet_modifier(
 				'article',
 				$id_article, 
@@ -457,6 +453,7 @@ function poubelle_article($id_or_titre_article, $titre_rubrique) {
 					'statut'	=> 'poubelle'
 				)
 			);
+			autoriser_exception('modifier', 'article', $id_article, false);
 		}
 	}
 }
@@ -542,7 +539,6 @@ function create_rubrique_mot($rubrique, $mot, $groupe) {
 }
 
 function create_evenement($rubrique, $article, $titre_evenement, $debut, $fin, $descriptif = '',$lieu ='', $horaire='oui') {
-	include_spip('action/editer_objet');
 	$id_rubrique = id_rubrique($rubrique);
 	if ($id_rubrique > 0) {
 		$id_article = id_article($article, $id_rubrique );
@@ -563,7 +559,6 @@ function create_evenement($rubrique, $article, $titre_evenement, $debut, $fin, $
 }
 
 function create_encart($titre, $identifiant, $largeur=0, $hauteur=0) {
-	include_spip('action/editer_objet');
 	$titre = sql_quote($titre);
 	$result = sql_fetsel(
 		"id_encart",
@@ -578,9 +573,13 @@ function create_encart($titre, $identifiant, $largeur=0, $hauteur=0) {
 		"hauteur" => $hauteur
 	);
 	if ($id_encart > 0) {
+		autoriser_exception('modifier', 'encart', $id_encart);
 		objet_modifier("encart", $id_encart, $set);
+		autoriser_exception('modifier', 'encart', $id_encart, false);
 	} else {
+		autoriser_exception('inserer', 'encart', $id_encart);
 		$id_encart = objet_inserer("encart", $id_encart, $set);
+		autoriser_exception('inserer', 'encart', $id_encart, false);
 	}
 	return $id_encart;
 }
@@ -611,12 +610,25 @@ function find_auteur_email($id_auteur) {
 
 //fonction qui permet de créer un auteur (sans login ni mot de passe)
 function create_auteur($nom, $email='', $bio='') {
-	include_spip('action/editer_objet');
 	$id_auteur = find_auteur($nom);
 	if ($id_auteur > 0) {
-		objet_modifier("auteurs", $id_auteur, $set);
+		$set = array(
+			"email" => $email,
+			"bio" => $bio
+		);
+		autoriser_exception('modifier', 'auteur', $id_auteur);
+		objet_modifier("auteur", $id_auteur, $set);
+		autoriser_exception('modifier', 'auteur', $id_auteur, false);
 	} else {
-		$id_auteur = objet_inserer("auteurs", $id_auteur, array("nom" => $nom, "email" => $email, "bio" => $bio, "statut" => "1comite"));
+		$set = array(
+			"nom" => $nom,
+			"email" => $email,
+			"bio" => $bio,
+			"statut" => '1comite'
+		);
+		autoriser_exception('inserer', 'auteur', $id_auteur);
+		$id_auteur = objet_inserer("auteur", $id_auteur, $set);
+		autoriser_exception('inserer', 'auteur', $id_auteur, false);
 	}
 	spip_log("1. (create_auteur) auteur cree : id = $id_auteur, nom = $nom", _LOG_DEBUG);
 	return $id_auteur;
@@ -625,7 +637,6 @@ function create_auteur($nom, $email='', $bio='') {
 
 function create_document($chemin, $objet, $mode, $champs='non', $id_document='non') {
 	include_spip('action/ajouter_documents');
-	include_spip('inc/autoriser');
 	$chemin = find_in_path($chemin);
 	$type = $objet['type'];
 	$id_objet = $objet['id_objet'];
@@ -661,18 +672,31 @@ function id_site($titre, $id_rubrique) {
 }
 
 function create_site($site, $rubrique) {
-	include_spip('action/editer_objet');
 	$id_rubrique = id_rubrique($rubrique);
-	$date = date("Y-m-d H:i:s");
 	if ($id_rubrique > 0) {
 		$id_site = id_site($site['nom_site'], $id_rubrique);
 		if ($id_site > 0) {
+			$set = array(
+				"url_site" => $site['url_site'],
+				"url_syndic" => $site['url_syndic'],
+				"descriptif" => $site['descriptif'],
+				"statut" => $site['statut'] ? $site['statut']:'prop',
+				"syndication" => $site['url_syndic'] ? 'oui':'non',
+				"oubli" => $site['oubli'] ? 'oui':'non'
+			);
 			objet_modifier('site', $id_rubrique, $set);
 		} else {
-			$id_site = objet_inserer('site', $id_rubrique, array("id_rubrique" => $id_rubrique, "nom_site" => $site["nom_site"], "url_site" => $site["url_site"], "url_syndic" => $site["url_syndic"], "descriptif" => $site["descriptif"], "statut" => $site["statut"] ? $site['statut'] : 'prop', "date" => $date, "syndication" => $site["url_syndic"] ? "oui" : "non", "oubli" => $site["oubli"] ? "oui":"non"));
-			include_spip('inc/rubriques');
-			calculer_rubriques();
-			propager_les_secteurs();
+			$set = array(
+				"id_rubrique" => $id_rubrique,
+				"nom_site" => $site['nom_site'],
+				"url_site" => $site['url_site'],
+				"url_syndic" => $site['url_syndic'],
+				"descriptif" => $site['descriptif'],
+				"statut" => $site['statut'] ? $site['statut']:'prop',
+				"syndication" => $site['url_syndic'] ? 'oui':'non',
+				"oubli" => $site['oubli'] ? 'oui':'non'
+			);
+			$id_site = objet_inserer('site', $id_rubrique, $set);
 			effacer_meta("date_calcul_rubriques");
 		}
 	return $id_site;
@@ -692,19 +716,39 @@ function id_formidable($identifiant) {
 }
 
 function create_formidable($formidable) {
-	include_spip('action/editer_objet');
 	$id_formulaire = id_formidable($formidable['identifiant']);
 	if ($id_formulaire > 0) {
-		objet_modifier('formulaires', $id_formulaire, $set);
+		$set = array(
+			"titre" => $formidable['titre'],
+			"descriptif" => $formidable['descriptif'],
+			"message_retour" => $formidable['message_retour'],
+			"saisies" => $formidable['saisies'],
+			"traitements" => $formidable['traitements'],
+			"public" => $formidable['public'],
+			"statut" => $formidable['statut'],
+			"apres" => $formidable['apres'],
+			"url_redirect" => $formidable['url_redirect']
+		);
+		objet_modifier('formulaire', $id_formulaire, $set);
 	} else {
-		$id_formulaire = objet_inserer('formulaires', $id_formulaire, array("identifiant" => $formidable['identifiant'], "titre" => $formidable['titre'], "descriptif" => $formidable["descriptif"], "message_retour" => $formidable["message_retour"], "saisies" => $formidable["saisies"], "traitements" => $formidable["traitements"], "public" => $formidable["traitements"], "statut" => $formidable["statut"], "apres" => $formidable["apres"], "url_redirect" => $formidable["url_redirect"]));
-		include_spip('inc/rubriques');
+		$set = array(
+			"identifiant" => $formidable['identifiant'],
+			"titre" => $formidable['titre'],
+			"descriptif" => $formidable['descriptif'],
+			"message_retour" => $formidable['message_retour'],
+			"saisies" => $formidable['saisies'],
+			"traitements" => $formidable['traitements'],
+			"public" => $formidable['public'],
+			"statut" => $formidable['statut'],
+			"apres" => $formidable['apres'],
+			"url_redirect" => $formidable['url_redirect']
+		);
+		$id_formulaire = objet_inserer('formulaires', $id_formulaire, $set);
 	}
 	return $id_formulaire;
 }
 
 function poubelle_site($titre_site, $titre_rubrique) {
-	include_spip('action/editer_objet');
 	$id_rubrique = id_rubrique($titre_rubrique);
 	if ($id_rubrique) {
 		$id_syndic = id_site($titre_site, $id_rubrique);
diff --git a/soyezcreateurs_administrations.php b/soyezcreateurs_administrations.php
index f3f18353..b8af84cc 100644
--- a/soyezcreateurs_administrations.php
+++ b/soyezcreateurs_administrations.php
@@ -23,7 +23,6 @@ function soyezcreateurs_upgrade($nom_meta_base_version,$version_cible){
 	
 	$maj['3.0.20'] = array( array('soyezcreateurs_3_0_20') );
 	$maj['3.0.24'] = array( array('soyezcreateurs_3_0_24') );
-	$maj['3.0.28'] = array( array('soyezcreateurs_3_0_28') );
 	$maj['3.0.30'] = array( array('soyezcreateurs_3_0_30') );
 	$maj['3.0.31'] = array( array('soyezcreateurs_3_0_31') );
 	$maj['3.0.33'] = array( array('soyezcreateurs_3_0_33') );
@@ -197,14 +196,6 @@ function soyezcreateurs_3_0_24() {
 	}
 }
 
-function soyezcreateurs_3_0_28() {
-	// Au cas où : remttre au carré les id_secteur des articles et rubriques.
-	include_spip('inc/rubriques');
-	calculer_rubriques();
-	propager_les_secteurs();
-	effacer_meta("date_calcul_rubriques");
-}
-
 function soyezcreateurs_3_0_30() {
 	$id_mot = create_mot("_ModePortail", "ZoomSur2_Variante1", "Affecter ce mot clef à l’objet que vous voulez placer dans le cadre « Zoom sur secondaire » (facultatif).\n\nLe site prendra le dernier article ayant ce mot clef.", "Variante sur 2 colonnes : \n-* Titre de la rubrique contenant l’article\n-* 1re colonne :\n-** Document joint (de type autre média, PowerPoint par exemple) affiché avec son logo\n-** Chapo de l'article en dessous (permet de faire un lien)\n-* 2e colonne :\n-** Logo de l’article\n-** faisant un lien vers l’article (et si c’est une redirection, ça peut conduire à une autre page");
 }
@@ -409,7 +400,6 @@ function soyezcreateurs_finalisationinstall() {
 	// On termine en invalidant les caches
 	include_spip('inc/invalideur');
 	suivre_invalideur("soyezcreateurs");
-	
 }
 
 /*
-- 
GitLab