chores: PSR et indentation

issue_40
Cerdic 6 months ago
parent 828ce59e89
commit 7f07cedd76

@ -1,14 +1,15 @@
<?php
/**
* Action : Dissocier (et optionnellement supprimer) un document en tenant compte ses rôles
*
*
* - Si un rôle est précisé, on ne dissocie que ce rôle
* - Si aucun rôle n'est précisé, on dissocie tous les rôles sauf ceux principaux (=logos)
*
* @note
* Adapation de action/dissocier_document du plugin médias.
* Ajout d'un argument 'role' supplémentaire.
*
*
* @plugin Rôles de documents
* @copyright 2015-2018
* @author tcharlss
@ -60,7 +61,8 @@ function action_dissocier_document_role_dist($arg = null) {
if (count($arg) > 5 and $arg[5] == 'safe') {
$check = true;
}
if ($id_objet = intval($id_objet)
if (
$id_objet = intval($id_objet)
and (
($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'])
or autoriser('dissocierdocuments', $objet, $id_objet)
@ -98,31 +100,31 @@ function supprimer_lien_document_role($id_document, $objet, $id_objet, $role, $s
include_spip('roles_documents_fonctions');
// 1) Pas de suppression et rôle : on ne dissocie que ce rôle
if (!$supprime and $role) {
objet_dissocier(array('document' => $id_document), array($objet => $id_objet), array('role' => $role));
objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => $role]);
// 2) Pas de suppression et pas de rôle : on dissocie tous les rôles non principaux (conserver les logos quoi)
// l'API editer_liens ne semble pas accespter un tableau de plusieurs rôles dans la condition,
// on fait dans une requête à la mano.
} elseif(!$supprime and !$role) {
} elseif (!$supprime and !$role) {
if ($roles_non_principaux = roles_documents_presents_sur_objet($objet, $id_objet, 0, false)) {
include_spip('base/abstract_sql');
sql_delete(
'spip_documents_liens',
array(
[
'id_document=' . intval($id_document),
'objet=' . sql_quote($objet),
'id_objet=' . intval($id_objet),
sql_in('role', $roles_non_principaux['possibles']),
)
]
);
}
// 3) Suppression : on dissocie tout
} else {
objet_dissocier(array('document' => $id_document), array($objet => $id_objet), array('role' => '*'));
objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']);
}
// Si c'est une vignette, l'eliminer du document auquel elle appartient
// cas tordu peu probable
sql_updateq('spip_documents', array('id_vignette' => 0), 'id_vignette=' . $id_document);
sql_updateq('spip_documents', ['id_vignette' => 0], 'id_vignette=' . $id_document);
// verifier son statut apres une suppression de lien
include_spip('action/editer_document');
@ -134,8 +136,8 @@ function supprimer_lien_document_role($id_document, $objet, $id_objet, $role, $s
pipeline(
'post_edition',
array(
'args' => array(
[
'args' => [
'operation' => 'delier_document', // compat v<=2
'action' => 'delier_document',
'table' => 'spip_documents',
@ -143,9 +145,9 @@ function supprimer_lien_document_role($id_document, $objet, $id_objet, $role, $s
'objet' => $objet,
'id' => $id_objet,
'role' => $role,
),
],
'data' => null
)
]
);
if (
@ -196,7 +198,7 @@ function dissocier_document_role($document, $objet, $id_objet, $role, $supprime
} else {
list($image, $mode) = explode('/', $document);
$image = ($image == 'I');
$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
$typdoc = sql_in('docs.extension', ['gif', 'jpg', 'png'], $image ? '' : 'NOT');
$obj = 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet);

@ -86,10 +86,10 @@ function logo_modifier($objet, $id_objet, $etat, $source) {
return $erreur;
}
// On cherche le bon rôle à utiliser
$role = roles_documents_compatibilite_anciens_etats($objet, $mode);
include_spip('inc/documents');
$erreur = '';
@ -142,7 +142,7 @@ function logo_modifier($objet, $id_objet, $etat, $source) {
spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo');
return $erreur;
}
// Si ça a bien été ajouté, il faut maintenant requalifier avec le bon rôle
$update = sql_updateq(
'spip_documents_liens',

@ -1,4 +1,5 @@
<?php
/**
* Action : Convertir les logos traditionnels en logos avec rôle
*

@ -1,4 +1,5 @@
<?php
/**
* Action : supprimer un logo historique (qui n'est pas un document)
*

@ -1,4 +1,5 @@
<?php
/**
* Plugin Rôles de documents
* (c) 2015

@ -1,6 +1,5 @@
<?php
/**
* Gestion du formulaire d'édition de logo
*
@ -35,7 +34,7 @@ $logo_libelles['racine'] = _T('logo_standard_rubrique');
* @param array $options Tableau d'option (exemple : image_reduire => 50)
* @return array Variables d'environnement pour le fond
*/
function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array()) {
function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = []) {
include_spip('inc/config');
include_spip('inc/roles');
@ -68,7 +67,7 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $
// Filtrer selon l'éventuelle liste des rôles donnés
$roles_acceptes = null;
if (!empty($options['roles'])) {
$roles_acceptes = (is_array($options['roles']) ? $options['roles'] : array($options['roles']));
$roles_acceptes = (is_array($options['roles']) ? $options['roles'] : [$options['roles']]);
foreach ($roles as $cle => $liste) {
$roles[$cle] = array_intersect($roles_acceptes, $liste);
}
@ -97,7 +96,7 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $
);
// Valeurs initiales
$valeurs = array(
$valeurs = [
'editable' => $editable,
'logos' => $logos,
'objet' => $objet,
@ -106,7 +105,7 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $
'roles_attribuables' => $roles['attribuables'],
'_options' => $options,
'editer_logo' => true, // Un flag pour identifier le contexte
);
];
// Valeurs du formulaire d'ajout de document
$charger_joindre_document = charger_fonction('charger', 'formulaires/joindre_document');
@ -137,8 +136,8 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $
* @param array $options Tableau d'option (exemple : image_reduire => 50)
* @return string Hash du formulaire
*/
function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = array()) {
return serialize(array($objet, $id_objet));
function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = []) {
return serialize([$objet, $id_objet]);
}
/**
@ -153,10 +152,10 @@ function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = ''
* @param array $options Tableau d'option (exemple : image_reduire => 50)
* @return array Erreurs du formulaire
*/
function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = array()) {
function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = []) {
// Vérifications propres aux logos
$erreurs = array();
$erreurs = [];
// Vérifications du formulaire d'ajout de document
$verifier_joindre_document = charger_fonction('verifier', 'formulaires/joindre_document');
@ -180,10 +179,10 @@ function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '',
* @param array $options Tableau d'option (exemple : image_reduire => 50)
* @return array Retour des traitements
*/
function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = array()) {
function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = []) {
// Retours
$res = array('editable' => true);
$res = ['editable' => true];
// Redirection
if ($retour) {
@ -200,12 +199,12 @@ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $
_request('joindre_mediatheque')
and sql_countsel(
'spip_documents_liens',
array(
[
'objet = ' . sql_quote($objet),
'id_objet = ' . intval($id_objet),
'id_document = ' . intval($refdoc_joindre),
'id_document > 0'
)
]
)
);
@ -215,11 +214,11 @@ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $
$res_joindre_document = $traiter_joindre_document('new', $id_objet, $objet, 'choix');
// En cas de succès, on ajoute le rôle sélectionné
if ($roles = _request('roles')
if (
$roles = _request('roles')
and isset($res_joindre_document['message_ok'])
and !empty($res_joindre_document['ids'])
) {
// Un seul rôle peut être sélectionné, mais on ne sait jamais
if (is_array($roles)) {
$roles = array_shift($roles);
@ -232,32 +231,31 @@ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $
if (!$doc_deja_present) {
$update = sql_updateq(
'spip_documents_liens',
array('role' => $roles),
array(
['role' => $roles],
[
'id_document=' . intval($id_document),
'objet=' . sql_quote($objet),
'id_objet=' . intval($id_objet),
'role=' . sql_quote('document'),
)
]
);
// Cas 2 : le document était déjà lié, on crée un nouveau lien qualifié
} else {
$insert = sql_insertq(
'spip_documents_liens',
array(
[
'id_document' => intval($id_document),
'objet' => $objet,
'id_objet' => intval($id_objet),
'role' => $roles,
)
]
);
}
// Invalider les caches de l'objet
include_spip('inc/invalideur');
suivre_invalideur("id='$objet/$id_objet'");
}
// On fusionne les retours

@ -5,9 +5,10 @@
*
* `#FORMULAIRE_EDITER_ROLES_DOCUMENT{2,article,3}`
* pour editer les roles du document 2 lié à l'article 3
*
*
* @package SPIP\Formulaires
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -26,7 +27,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* ajaxReload : sélecteur CSS d'un bloc à recharger
* @return array
*/
function formulaires_editer_roles_document_charger_dist($id_document, $objet, $id_objet, $options = array()) {
function formulaires_editer_roles_document_charger_dist($id_document, $objet, $id_objet, $options = []) {
// charger les valeurs de editer_liens
$editer_liens_charger = charger_fonction('charger', 'formulaires/editer_liens');
@ -34,7 +35,7 @@ function formulaires_editer_roles_document_charger_dist($id_document, $objet, $i
// Renvoyer aussi id_document
if (is_array($valeurs)) {
$valeurs = array_merge($valeurs, array('id_document' => $id_document));
$valeurs = array_merge($valeurs, ['id_document' => $id_document]);
}
return $valeurs;
@ -44,7 +45,7 @@ function formulaires_editer_roles_document_charger_dist($id_document, $objet, $i
* Traiter le post des informations d'édition des rôles des liens d'un document
*
* On effectue les traitements par défaut de editer_liens, sauf qu'on s'assure de conserver l'unicité des rôles principaux (= logos)
*
*
* @param int $id_document
* Identifiant du document
* @param string $objet
@ -56,11 +57,11 @@ function formulaires_editer_roles_document_charger_dist($id_document, $objet, $i
* ajaxReload : sélecteur CSS d'un bloc à recharger
* @return array
*/
function formulaires_editer_roles_document_traiter_dist($id_document, $objet, $id_objet, $options = array()) {
function formulaires_editer_roles_document_traiter_dist($id_document, $objet, $id_objet, $options = []) {
include_spip('inc/editer_liens'); // inclus également les rôles
include_spip('base/objets');
$res = array();
$res = [];
$done = false; // flag pour savoir si on fait les traitements génériques de editer_liens
$id_table_objet = id_table_objet($objet);
@ -75,30 +76,32 @@ function formulaires_editer_roles_document_traiter_dist($id_document, $objet, $i
if ($ajouter) {
$role = retrouver_action_role_document($ajouter);
// Si c'est rôle principal (=logo) déjà attribué, on met à jour le lien existant
if (in_array($role, $roles['attribues'])
and $document_present = objet_trouver_liens(array('document' => '*'), array($objet => $id_objet), array('role=' . sql_quote($role)))
if (
in_array($role, $roles['attribues'])
and $document_present = objet_trouver_liens(['document' => '*'], [$objet => $id_objet], ['role=' . sql_quote($role)])
) {
$update = sql_updateq(
'spip_documents_liens',
array(
[
'id_document' => $id_document,
),
array(
'id_document='. intval($document_present[0]['id_document']),
],
[
'id_document=' . intval($document_present[0]['id_document']),
'objet=' . sql_quote($objet),
'id_objet=' . intval($id_objet),
'role=' . sql_quote($role),
)
]
);
$done = true;
}
// S'il existe un vieux logo avec le même rôle, on le supprime
// On fait la correspondance 'on' = role principal 1, 'off' = rôle principal 2
$chercher_logo = charger_fonction('chercher_logo', 'inc');
$etats = array('on', 'off');
$etats = ['on', 'off'];
$numero_role = array_search($role, $roles['possibles']);
$etat = isset($etats[$numero_role]) ? $etats[$numero_role] : false;
if ($etat
if (
$etat
and $vieux_logo = $chercher_logo($id_objet, $id_table_objet, $etat, true)
) {
include_spip('action/editer_logo');
@ -149,11 +152,12 @@ function retrouver_action_role_document($action) {
$role = false;
$action = array_flip($action);
$action = array_shift($action);
if (is_array($arguments = explode('-', $action))
if (
is_array($arguments = explode('-', $action))
and count($arguments) === 5
) {
$role = $arguments[4];
}
return $role;
}
}

@ -5,6 +5,7 @@
*
* @package SPIP\Formulaires
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -14,7 +15,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*
* @return array
*/
function formulaires_filtrer_roles_documents_charger_dist($redirect='') {
function formulaires_filtrer_roles_documents_charger_dist($redirect = '') {
$roles = roles_documents_presents();
$valeurs['roles'] = $roles;
@ -25,17 +26,17 @@ function formulaires_filtrer_roles_documents_charger_dist($redirect='') {
/**
* Traiter le post des informations de filtrage des rôles de documents
*
*
* @return array
*/
function formulaires_filtrer_roles_documents_traiter_dist($redirect='') {
function formulaires_filtrer_roles_documents_traiter_dist($redirect = '') {
$retours = array();
$retours = [];
if (!$redirect) {
$redirect = self();
$redirect = self();
}
$redirect = parametre_url($redirect, 'role', _request('role'));
$retours['redirect'] = $redirect;
return $retours;
}
}

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<ruleset>
<file>.</file>
<exclude-pattern>vendor/*</exclude-pattern>
<exclude-pattern>lang/*</exclude-pattern>
<exclude-pattern>lib/*</exclude-pattern>
<rule ref="SPIP41"/>
<config name="ignore_warnings_on_exit" value="1"/>
<arg name="cache" value=".php_cs.cache"/>
<arg name="report-full" value=".php_cs.txt"/>
<arg name="report-summary"/>
<arg value="s"/>
</ruleset>

@ -1,4 +1,5 @@
<?php
/**
* Plugin Rôles de documents
* (c) 2015
@ -14,26 +15,26 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* Fonction d'installation du plugin et de mise à jour.
**/
function roles_documents_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj = [];
// 1ère installation
$maj['create'] = array(
$maj['create'] = [
// supprimer la clé primaire actuelle pour pouvoir en changer en ajoutant la colonne rôle
array('sql_alter', 'TABLE spip_documents_liens DROP PRIMARY KEY'),
['sql_alter', 'TABLE spip_documents_liens DROP PRIMARY KEY'],
// ajout de la colonne role
array('maj_tables', array('spip_documents_liens')),
['maj_tables', ['spip_documents_liens']],
// la nouvelle colonne est la, mettre sa nouvelle clé primaire
array('sql_alter', 'TABLE spip_documents_liens ADD PRIMARY KEY (id_document,id_objet,objet,role)'),
['sql_alter', 'TABLE spip_documents_liens ADD PRIMARY KEY (id_document,id_objet,objet,role)'],
// Mettre un rôle 'document' par défaut aux liens dépourvus de rôle
array('sql_update', 'spip_documents_liens', array('role' => sql_quote('document')), 'role=' . sql_quote('')),
['sql_update', 'spip_documents_liens', ['role' => sql_quote('document')], 'role=' . sql_quote('')],
// Migration des logos SPIP 4 en docs avec rôles
['roles_documents_maj_migrer_logos_modes_vers_roles', _TIME_OUT],
);
];
// 1.0.1 : mettre un rôle 'document' par défaut aux liens dépourvus de rôle
$maj['1.0.1'] = array(
array('sql_update', 'spip_documents_liens', array('role' => sql_quote('document')), 'role=' . sql_quote('')),
);
$maj['1.0.1'] = [
['sql_update', 'spip_documents_liens', ['role' => sql_quote('document')], 'role=' . sql_quote('')],
];
// 1.1.2 : migration des logos SPIP 4 en docs avec rôles
$maj['1.1.2'] = [
@ -55,19 +56,21 @@ function roles_documents_vider_tables($nom_meta_base_version) {
// tant qu'il existe des doublons, on supprime une ligne doublonnée
// sinon on ne pourra pas modifier la cle primaire ensuite
// cet algo est certainement a optimiser
while ($doublons = sql_allfetsel(
array('id_document', 'id_objet', 'objet', 'role'),
array('spip_documents_liens'),
'',
'id_document,id_objet,objet',
'',
'',
'COUNT(*) > 1'
)) {
while (
$doublons = sql_allfetsel(
['id_document', 'id_objet', 'objet', 'role'],
['spip_documents_liens'],
'',
'id_document,id_objet,objet',
'',
'',
'COUNT(*) > 1'
)
) {
foreach ($doublons as $d) {
$where = array();
$where = [];
foreach ($d as $cle => $valeur) {
$where[] = "$cle=".sql_quote($valeur);
$where[] = "$cle=" . sql_quote($valeur);
}
sql_delete('spip_documents_liens', $where);
}
@ -103,11 +106,16 @@ function roles_documents_maj_migrer_logos_modes_vers_roles($timeout = null) {
foreach ($modes as $mode => $role) {
// Nb : on prend même ceux qui auraient éventuellement déjà un rôle logo,
// pour être sûr de reset le mode dans ce cas.
while ($documents = sql_allfetsel(
'D.id_document',
'spip_documents as D INNER JOIN spip_documents_liens L ON L.id_document=D.id_document',
'D.mode = ' . sql_quote($mode), '', '', '0,1000'
)) {
while (
$documents = sql_allfetsel(
'D.id_document',
'spip_documents as D INNER JOIN spip_documents_liens L ON L.id_document=D.id_document',
'D.mode = ' . sql_quote($mode),
'',
'',
'0,1000'
)
) {
$ids_documents = array_column($documents, 'id_document');
$ids_documents = array_map('intval', $ids_documents);
// On ajoute le rôle logo…

@ -1,4 +1,5 @@
<?php
/**
* Fonctions utiles au plugin Rôles de documents
*
@ -44,7 +45,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* - attribues : ceux attribués
* - attribuables : ceux non attribues
*/
function roles_documents_presents_sur_objet(string $objet, int $id_objet, int $id_document = 0, ? bool $principaux = null): array {
function roles_documents_presents_sur_objet(string $objet, int $id_objet, int $id_document = 0, ?bool $principaux = null): array {
// Garder le résultat
static $done;
@ -64,7 +65,6 @@ function roles_documents_presents_sur_objet(string $objet, int $id_objet, int $i
$id_document = (int) $id_document;
if ($infos_roles = roles_presents('document', $objet)) {
$roles_possibles = $infos_roles['roles']['choix'] ?? [];
$roles_principaux = $infos_roles['roles']['principaux'] ?? [];
@ -97,7 +97,7 @@ function roles_documents_presents_sur_objet(string $objet, int $id_objet, int $i
if (
!is_null($principaux)
and $roles_principaux
){
) {
$filtrer = ($principaux ? 'array_intersect' : 'array_diff');
$roles_possibles = array_values($filtrer($roles_possibles, $roles_principaux));
$roles_attribues = array_values($filtrer($roles_attribues, $roles_principaux));
@ -117,7 +117,7 @@ function roles_documents_presents_sur_objet(string $objet, int $id_objet, int $i
/**
* Lister tous les rôles de documents déclarés, tous objets confondus
*
*
* @return array
*/
function roles_documents_presents() {
@ -130,7 +130,7 @@ function roles_documents_presents() {
include_spip('inc/roles');
$roles_documents = [];
if ($roles_presents = roles_presents('document')) {
foreach($roles_presents['roles'] ?? [] as $objet) {
foreach ($roles_presents['roles'] ?? [] as $objet) {
$roles_documents = array_merge($roles_documents, $objet['choix'] ?? []);
}
$roles_documents = array_unique($roles_documents);
@ -171,7 +171,7 @@ function critere_logo($idb, &$boucles, $crit) {
if (count($crit->param)) {
$type_logo = calculer_liste(
array_shift($crit->param),
array(),
[],
$boucles,
$boucle->id_parent
);
@ -195,24 +195,24 @@ function critere_logo($idb, &$boucles, $crit) {
// gérer les logos enregistrés avec l'ancienne méthode, et pour {!logo}.
$boucle->from[$alias_jointure] = 'spip_documents_liens';
$boucle->from_type[$alias_jointure] = 'LEFT';
$boucle->join[$alias_jointure] = array(
$boucle->join[$alias_jointure] = [
"'$alias_table'",
"'id_objet'",
"'$id_table_objet'",
"'$alias_jointure.objet='.sql_quote('" . objet_type($alias_table) . "')." .
"' AND $alias_jointure.role LIKE \'logo\_" . ($type_logo ?: '%') . "\''",
);
];
$boucle->group[] = "$alias_table.$id_table_objet";
// On calcule alors le where qui va bien.
if ($crit->not) {
$where = "$alias_jointure.role IS NULL";
} else {
$where = array(
$where = [
"'LIKE'",
"'$alias_jointure.role'",
"'\'logo\_" . ($type_logo ?: '%') . "\''",
);
];
}
// Rétro-compatibilité : Si l'on ne cherche pas un type de logo particulier,
@ -225,14 +225,14 @@ function critere_logo($idb, &$boucles, $crit) {
. "'')";
if ($crit->not) {
$where_historique = array("'NOT'", $where_historique);
$where_historique = ["'NOT'", $where_historique];
}
$where = array(
$where = [
"'OR'",
$where,
$where_historique
);
];
}
// On ajoute le where à la boucle

@ -20,20 +20,20 @@ function inc_bigup_medias_formulaire_editer_logo($args, $formulaire) {
if (intval($args['args'][1]) or $args['args'][0] !== 'site') {
$options['drop-zone-extended'] = '#navigation';
}
// Mais pas contre c'est le form classique des documents
$formulaire->preparer_input(
'fichier_upload[]',
$options
);
$formulaire->inserer_js('bigup.logos.js');
return $formulaire;
}
/**
* Trouve le bon rôle à utiliser suivant un état ou rôle demandé qui peut être les anciens moches "on" et "off"
*
*
* @param string $objet Objet
* Objet dont on cherche le bon rôle correspondant à l'état demandé
* @param string $mode
@ -44,11 +44,11 @@ function inc_bigup_medias_formulaire_editer_logo($args, $formulaire) {
function roles_documents_compatibilite_anciens_etats(string $objet, string $etat) {
// Vieux états/modes
$etats = ['on', 'off'];
// Retrouver les rôles principaux pour cet objet
$roles = roles_presents('document', $objet);
$roles_principaux = !empty($roles['roles']['principaux']) ? $roles['roles']['principaux'] : ['logo', 'logo_survol'];
// Correspondance vieux états / rôles principaux (voir @note)
if ($etat == $etats[0] and isset($roles_principaux[0])) {
$role = $roles_principaux[0];
@ -58,7 +58,7 @@ function roles_documents_compatibilite_anciens_etats(string $objet, string $etat
// Sinon c'est un nouveau role directement (ou un truc qui n'existe pas et qui ne sortera rien)
$role = $etat;
}
return $role;
}
@ -82,30 +82,32 @@ function inc_chercher_logo($id_objet, $_id_objet, $mode = 'on', $compat_old_logo
include_spip('inc/chercher_logo');
$mode = preg_replace(',\W,', '', $mode);
$objet = objet_type($_id_objet);
if ($mode) {
include_spip('inc/roles');
// On cherche le bon rôle à utiliser
$role = roles_documents_compatibilite_anciens_etats($objet, $mode);
if ($document = sql_fetsel(
'doc.*, lien.role',
'spip_documents AS doc' .
if (
$document = sql_fetsel(
'doc.*, lien.role',
'spip_documents AS doc' .
' INNER JOIN spip_documents_liens AS lien' .
' ON lien.id_document = doc.id_document',
array(
[
'objet = ' . sql_quote($objet),
'id_objet = ' . intval($id_objet),
'role = ' . sql_quote($role),
//sql_in('role', $roles_principaux), // too much ?
]
)
)) {
) {
include_spip('inc/documents');
$chemin = get_spip_doc($document['fichier']);
return [$chemin, _DIR_IMG, $document['titre'], $document['extension'], @filemtime($chemin), $document];
}
# deprecated TODO remove
if ($compat_old_logos) {
# attention au cas $id = '0' pour LOGO_SITE_SPIP : utiliser intval()

@ -1,4 +1,5 @@
<?php
/**
* Plugin Rôles de documents
* (c) 2015
@ -25,7 +26,7 @@ function roles_documents_document_desc_actions($flux) {
$texte = '';
$exec = trouver_objet_exec(_request('exec'));
if ($exec !== false) {
$objet_exec = $exec['type'];
$id_table_objet_exec = $exec['id_table_objet'];
@ -47,14 +48,14 @@ function roles_documents_document_desc_actions($flux) {
// mini-formulaire
$form = recuperer_fond(
'prive/squelettes/inclure/editer_roles_document',
array(
[
'id_document' => $id_document,
'objet' => $objet,
'id_objet' => $id_objet,
'options' => array(
'options' => [
'ajaxReload' => $ajaxreload,
),
)
],
]
);
$texte = $form;
}
@ -90,7 +91,7 @@ function roles_documents_post_edition_lien($flux) {
and $id_objet = intval($flux['args']['id_objet'])
) {
// le champ 'rang_lien' n'est présent qu'à partir de SPIP 3.2 (ou avec le plugin ordoc)
$champs_synchronises = array('vu', 'rang_lien');
$champs_synchronises = ['vu', 'rang_lien'];
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('spip_documents_liens');
@ -99,19 +100,19 @@ function roles_documents_post_edition_lien($flux) {
$qualifier = sql_fetsel(
$champs_presents,
'spip_documents_liens',
array(
[
'id_document=' . $id_document,
'objet=' . sql_quote($objet),
'id_objet=' . $id_objet,
$colonne_role . '=' . sql_quote('document')
)
]
);
if ($qualifier) {
include_spip('action/editer_liens');
objet_qualifier_liens(
array('document' => $id_document),
array($objet => $id_objet),
array($colonne_role => $role) + $qualifier
['document' => $id_document],
[$objet => $id_objet],
[$colonne_role => $role] + $qualifier
);
}
}
@ -140,21 +141,21 @@ function roles_documents_post_edition($flux) {
include_spip('action/editer_liens');
// on regarde s'il y a des documents liés à l'objet modifié
if (count($liens = objet_trouver_liens(array('document'=>'*'), array($objet=>$id_objet)))) {
if (count($liens = objet_trouver_liens(['document' => '*'], [$objet => $id_objet]))) {
foreach ($liens as $l) {
// on récupère le champ "vu" du lien avec le rôle par défaut
$vu = sql_getfetsel(
'vu',
'spip_documents_liens',
'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .'
AND id_objet='.$id_objet .' AND role='.sql_quote('document')
'id_document=' . $l['id_document'] . ' AND objet=' . sql_quote($objet) . '
AND id_objet=' . $id_objet . ' AND role=' . sql_quote('document')
);
// on met à jour tous les autres liens avec rôle
sql_updateq(
'spip_documents_liens',
array('vu'=>$vu),
'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .'
AND id_objet='.$id_objet .' AND role!='.sql_quote('document')
['vu' => $vu],
'id_document=' . $l['id_document'] . ' AND objet=' . sql_quote($objet) . '
AND id_objet=' . $id_objet . ' AND role!=' . sql_quote('document')
);
}
}
@ -179,11 +180,10 @@ function roles_documents_pre_boucle($boucle) {
// Boucle DOCUMENTS
if ($boucle->type_requete === 'documents') {
// Vérifier s'il y a une jointure sur la table de liens
$jointure_documents = false;
if ($boucle->join) {
foreach($boucle->join as $join) {
foreach ($boucle->join as $join) {
if (array_search(sql_quote('documents'), $join) !== false) {
$jointure_documents = true;
break;
@ -221,7 +221,7 @@ function roles_documents_pre_boucle($boucle) {
'ids_boucles' => ['_illustrations', '_documents'],
]
];
foreach($squelettes_bypass as $squelette) {
foreach ($squelettes_bypass as $squelette) {
if (
$basename === $squelette['basename']
and in_array($id_boucle, $squelette['ids_boucles'])
@ -241,11 +241,11 @@ function roles_documents_pre_boucle($boucle) {
$abbrev_table_lien = array_search($table_liens, $boucle->from);
if ($abbrev_table_lien) {
$boucle->where[] = array(
$boucle->where[] = [
"'!='",
"'SUBSTR($abbrev_table_lien.role, 1, 4)'",
"'\'logo\''"
);
];
}
}
}
@ -269,7 +269,8 @@ function roles_documents_formulaire_traiter($flux) {
// Formulaire d'ajout de document
// En présence d'un role sélectionne, on requalifie le lien créé
// sauf si c'est le rôle par défaut
if ($flux['args']['form'] == 'joindre_document'
if (
$flux['args']['form'] == 'joindre_document'
and $roles = _request('roles')
and $objet = $flux['args']['args'][2]
and $id_objet = $flux['args']['args'][1]
@ -277,19 +278,19 @@ function roles_documents_formulaire_traiter($flux) {
) {
foreach ($flux['data']['ids'] as $id_document) {
if (!is_array($roles)) {
$roles = array($roles);
$roles = [$roles];
}
foreach ($roles as $role) {
if ($role != 'document') {
$update = sql_updateq(
'spip_documents_liens',
array('role' => $role),
array(
['role' => $role],
[
'id_document=' . intval($id_document),
'objet=' . sql_quote($objet),
'id_objet=' . intval($id_objet),
'role=' . sql_quote('document'),
)
]
);
}
}
@ -305,7 +306,7 @@ function roles_documents_formulaire_traiter($flux) {
*
* - Formulaire d'ajout de document : ajout du sélecteur de rôle, et rendre les identifiants uniques pour éviter un pb de JS quand le form est présent plusieurs fois sur la page.
* - Mediathèque : ajout du filtrage par rôle
*
*
* @pipeline recuperer_fond
*
* @param array $flux Données du pipeline
@ -319,7 +320,6 @@ function roles_documents_recuperer_fond($flux) {
and isset($flux['args']['contexte']['objet'])
and isset($flux['args']['contexte']['id_objet'])
) {
// 1) Ajout du sélecteur de rôle
// Est-ce qu'il s'agit d'un ajout de logo ?
@ -335,12 +335,12 @@ function roles_documents_recuperer_fond($flux) {
: $roles['attribuables']
);
$multiple = $editer_logo ? null : (count($roles_attribuables) > 1 ? 'oui' : null);
$contexte = array(
$contexte = [
'roles' => (isset($flux['args']['contexte']['roles']) ? $flux['args']['contexte']['roles'] : ''),
'roles_attribuables' => $roles_attribuables,
'multiple' => $multiple,
'editer_logo' => $editer_logo,
);
];
// On place le sélecteur au début (compliqué de le placer juste avant les boutons, déplacés en JS, et des blocs cachés)
$selecteur_roles = recuperer_fond('formulaires/inc-selecteur_role', $contexte);
@ -353,12 +353,10 @@ function roles_documents_recuperer_fond($flux) {
$uniqid = $domid . '_' . uniqid(); // Identifiant vraiement unique
$flux['data']['texte'] = str_replace($domid, $uniqid, $flux['data']['texte']);
}
}
// Médiathèque
if ($flux['args']['fond'] == 'prive/squelettes/inclure/mediatheque-navigation') {
$fond_roles = recuperer_fond('prive/squelettes/inclure/mediatheque-navigation-roles', $flux['args']['contexte']);
// On s'insère après le dernier <ul> de la barre d'onglets secondaires
// Sans parseur, c'est la galère
@ -382,7 +380,8 @@ function roles_documents_recuperer_fond($flux) {
**/
function roles_documents_formulaire_fond($flux) {
if ($flux['args']['form'] == 'editer_logo'
if (
$flux['args']['form'] == 'editer_logo'
//and !empty($flux['args']['contexte']['_bigup_rechercher_fichiers'])
) {
$flux_joindre_document = $flux;

Loading…
Cancel
Save