Browse Source

indentation et rien d'autre

v1
cedric@yterium.com 8 years ago
parent
commit
50d424a9d6
  1. 215
      formulaires/editer_liens.php

215
formulaires/editer_liens.php

@ -1,5 +1,4 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
@ -8,13 +7,13 @@
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
* \***************************************************************************/
/**
* Gestion du formulaire d'édition de liens
* Gestion du formulaire d'édition de liens
*
* @package SPIP\Formulaires
**/
**/
if (!defined('_ECRIRE_INC_VERSION')) return;
@ -26,14 +25,14 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* - l'objet dont on utilise sa table de liaison (table_source)
* - l'objet et id_objet sur qui on lie des éléments (objet, id_objet)
* - l'objet que l'on veut lier dessus (objet_lien)
*
*
* @param string $a
* @param string|int $b
* @param int|string $c
* @return array
* ($table_source,$objet,$id_objet,$objet_lien)
*/
function determine_source_lien_objet($a,$b,$c){
function determine_source_lien_objet($a, $b, $c){
$table_source = $objet_lien = $objet = $id_objet = null;
// auteurs, article, 23 :
// associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
@ -52,7 +51,7 @@ function determine_source_lien_objet($a,$b,$c){
$id_objet = $b;
}
return array($table_source,$objet,$id_objet,$objet_lien);
return array($table_source, $objet, $id_objet, $objet_lien);
}
/**
@ -73,9 +72,9 @@ function determine_source_lien_objet($a,$b,$c){
* @param bool $editable
* @return array
*/
function formulaires_editer_liens_charger_dist($a,$b,$c,$editable=true){
function formulaires_editer_liens_charger_dist($a, $b, $c, $editable = true){
list($table_source,$objet,$id_objet,$objet_lien) = determine_source_lien_objet($a,$b,$c);
list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
if (!$table_source OR !$objet OR !$objet_lien OR !$id_objet)
return false;
@ -86,43 +85,43 @@ function formulaires_editer_liens_charger_dist($a,$b,$c,$editable=true){
include_spip('action/editer_liens');
if (!objet_associable($objet_lien))
return false;
// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
include_spip('inc/autoriser');
$editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet) and autoriser('modifier',$objet,$id_objet));
if (!$editable AND !count(objet_trouver_liens(array($objet_lien=>'*'),array(($objet_lien==$objet_source?$objet:$objet_source)=>'*'))))
$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) and autoriser('modifier', $objet, $id_objet));
if (!$editable AND !count(objet_trouver_liens(array($objet_lien => '*'), array(($objet_lien==$objet_source ? $objet : $objet_source) => '*'))))
return false;
// squelettes de vue et de d'association
// ils sont différents si des rôles sont définis.
$skel_vue = $table_source."_lies";
$skel_ajout = $table_source."_associer";
$skel_vue = $table_source . "_lies";
$skel_ajout = $table_source . "_associer";
// description des roles
include_spip('inc/roles');
if ($roles = roles_presents($objet_source, $objet)) {
if ($roles = roles_presents($objet_source, $objet)){
// on demande de nouveaux squelettes en conséquence
$skel_vue = $table_source."_roles_lies";
$skel_ajout = $table_source."_roles_associer";
$skel_vue = $table_source . "_roles_lies";
$skel_ajout = $table_source . "_roles_associer";
}
$valeurs = array(
'id'=>"$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
'_vue_liee' => $skel_vue,
'_vue_ajout' => $skel_ajout,
'_objet_lien' => $objet_lien,
'id_lien_ajoute'=>_request('id_lien_ajoute'),
'objet'=>$objet,
'id_objet'=>$id_objet,
'objet_source'=>$objet_source,
'id_lien_ajoute' => _request('id_lien_ajoute'),
'objet' => $objet,
'id_objet' => $id_objet,
'objet_source' => $objet_source,
'table_source' => $table_source,
'recherche'=>'',
'recherche' => '',
'roles' => $roles, # description des roles
'visible'=>0,
'ajouter_lien'=>'',
'supprimer_lien'=>'',
'definir_roles'=>'',
'visible' => 0,
'ajouter_lien' => '',
'supprimer_lien' => '',
'definir_roles' => '',
'_oups' => _request('_oups'),
'editable' => $editable,
);
@ -132,7 +131,7 @@ function formulaires_editer_liens_charger_dist($a,$b,$c,$editable=true){
/**
* Traiter le post des informations d'édition de liens
*
*
* Les formulaires peuvent poster dans quatre variables
* - ajouter_lien et supprimer_lien
* - remplacer_lien
@ -151,41 +150,42 @@ function formulaires_editer_liens_charger_dist($a,$b,$c,$editable=true){
*
* definir_roles doit être de la forme, et sert en complément de ajouter_lien
* definir_roles[objet1-id1-objet2-id2] = array("role", "autre_role")
*
*
* @param string $a
* @param string|int $b
* @param int|string $c
* @param bool $editable
* @return array
*/
function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){
$res = array('editable'=>$editable?true:false);
list($table_source,$objet,$id_objet,$objet_lien) = determine_source_lien_objet($a,$b,$c);
function formulaires_editer_liens_traiter_dist($a, $b, $c, $editable = true){
$res = array('editable' => $editable ? true : false);
list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
if (!$table_source OR !$objet OR !$objet_lien)
return $res;
if (_request('tout_voir'))
set_request('recherche','');
set_request('recherche', '');
include_spip('inc/autoriser');
if (autoriser('modifier',$objet,$id_objet)) {
if (autoriser('modifier', $objet, $id_objet)){
// annuler les suppressions du coup d'avant !
if (_request('annuler_oups')
AND $oups = _request('_oups')
AND $oups = unserialize($oups)){
if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}","action",true)){
AND $oups = unserialize($oups)
){
if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", "action", true)){
$oups_objets($oups);
}
else {
$objet_source = objet_type($table_source);
include_spip('action/editer_liens');
foreach($oups as $oup) {
if ($objet_lien==$objet_source)
objet_associer(array($objet_source=>$oup[$objet_source]), array($objet=>$oup[$objet]),$oup);
else
objet_associer(array($objet=>$oup[$objet]), array($objet_source=>$oup[$objet_source]),$oup);
}
$objet_source = objet_type($table_source);
include_spip('action/editer_liens');
foreach ($oups as $oup){
if ($objet_lien==$objet_source)
objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup);
else
objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup);
}
}
# oups ne persiste que pour la derniere action, si suppression
set_request('_oups');
@ -197,10 +197,10 @@ function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){
// il est possible de preciser dans une seule variable un remplacement :
// remplacer_lien[old][new]
if ($remplacer = _request('remplacer_lien')){
foreach($remplacer as $k=>$v){
if ($old = lien_verifier_action($k,'')){
foreach(is_array($v)?$v:array($v) as $kn=>$vn)
if ($new = lien_verifier_action($kn,$vn)){
foreach ($remplacer as $k => $v){
if ($old = lien_verifier_action($k, '')){
foreach (is_array($v) ? $v : array($v) as $kn => $vn)
if ($new = lien_verifier_action($kn, $vn)){
$supprimer[$old] = 'x';
$ajouter[$new] = '+';
}
@ -209,54 +209,53 @@ function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){
}
if ($supprimer){
if ($supprimer_objets = charger_fonction("editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}","action",true)){
if ($supprimer_objets = charger_fonction("editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", "action", true)){
$oups = $supprimer_objets($supprimer);
}
else {
include_spip('action/editer_liens');
$oups = array();
foreach($supprimer as $k=>$v) {
if ($lien = lien_verifier_action($k,$v)){
$lien = explode("-", $lien);
list($objet_source,$ids,$objet_lie,$idl,$role) = $lien;
// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
$cond = $role ? array('role' => $role) : array();
if ($objet_lien==$objet_source){
$oups = array_merge($oups, objet_trouver_liens(array($objet_source=>$ids), array($objet_lie=>$idl), $cond));
objet_dissocier(array($objet_source=>$ids), array($objet_lie=>$idl), $cond);
}
else{
$oups = array_merge($oups, objet_trouver_liens(array($objet_lie=>$idl), array($objet_source=>$ids), $cond));
objet_dissocier(array($objet_lie=>$idl), array($objet_source=>$ids), $cond);
include_spip('action/editer_liens');
$oups = array();
foreach ($supprimer as $k => $v){
if ($lien = lien_verifier_action($k, $v)){
$lien = explode("-", $lien);
list($objet_source, $ids, $objet_lie, $idl, $role) = $lien;
// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
$cond = $role ? array('role' => $role) : array();
if ($objet_lien==$objet_source){
$oups = array_merge($oups, objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond));
objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond);
} else {
$oups = array_merge($oups, objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond));
objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond);
}
}
}
}
}
set_request('_oups',$oups?serialize($oups):null);
set_request('_oups', $oups ? serialize($oups) : null);
}
if ($ajouter){
if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}","action",true)){
if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", "action", true)){
$ajout_ok = $ajouter_objets($ajouter);
}
else {
$ajout_ok = false;
include_spip('action/editer_liens');
foreach($ajouter as $k=>$v){
if ($lien = lien_verifier_action($k,$v)) {
$ajout_ok = true;
list($objet1,$ids,$objet2,$idl) = explode("-",$lien);
$roles = lien_retrouver_roles_postes($lien);
if ($objet_lien==$objet1) {
lien_ajouter_liaison($objet1, $ids, $objet2, $idl, $roles);
} else {
lien_ajouter_liaison($objet2, $idl, $objet1, $ids, $roles);
$ajout_ok = false;
include_spip('action/editer_liens');
foreach ($ajouter as $k => $v){
if ($lien = lien_verifier_action($k, $v)){
$ajout_ok = true;
list($objet1, $ids, $objet2, $idl) = explode("-", $lien);
$roles = lien_retrouver_roles_postes($lien);
if ($objet_lien==$objet1){
lien_ajouter_liaison($objet1, $ids, $objet2, $idl, $roles);
} else {
lien_ajouter_liaison($objet2, $idl, $objet1, $ids, $roles);
}
set_request('id_lien_ajoute', $ids);
}
set_request('id_lien_ajoute',$ids);
}
}
}
# oups ne persiste que pour la derniere action, si suppression
# une suppression suivie d'un ajout dans le meme hit est un remplacement
# non annulable !
@ -265,17 +264,17 @@ function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){
}
}
return $res;
}
/**
* Retrouver l'action de liaision demandée
*
*
* Les formulaires envoient une action dans un tableau ajouter_lien
* ou supprimer_lien
*
*
* L'action est de la forme : objet1-id1-objet2-id2
* ou de la forme : objet1-id1-objet2-id2-role
*
@ -288,18 +287,18 @@ function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){
* @param string $v Valeur du tableau
* @return string Action demandée si trouvée, sinon ''
*/
function lien_verifier_action($k,$v) {
function lien_verifier_action($k, $v){
$action = '';
if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,",$k))
if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,", $k))
$action = $k;
if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,",$v)){
if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,", $v)){
if (is_numeric($k))
$action = $v;
if (_request($k))
$action = $v;
}
// ajout un role null fictif (plus pratique) si pas défini
if ($action and count(explode("-", $action)) == 4) {
if ($action and count(explode("-", $action))==4){
$action .= '-';
}
return $action;
@ -310,27 +309,27 @@ function lien_verifier_action($k,$v) {
* Retrouve le ou les roles postés avec une liaison demandée
*
* @internal
* @param string $lien Action du lien
* @param string $lien Action du lien
* @return array Liste des rôles. Tableau vide s'il n'y en a pas.
**/
function lien_retrouver_roles_postes($lien) {
**/
function lien_retrouver_roles_postes($lien){
// un role est défini dans la liaison
$defs = explode('-', $lien);
list(,,,,$role) = $defs;
list(, , , , $role) = $defs;
if ($role) return array($role);
// retrouver les rôles postés pour cette liaison, s'il y en a.
$roles = _request('definir_roles');
if (!$roles OR !is_array($roles)) {
if (!$roles OR !is_array($roles)){
return array();
}
// pas avec l'action complete (incluant le role)
if (!isset($roles[$lien]) OR !$roles = $roles[$lien]) {
if (!isset($roles[$lien]) OR !$roles = $roles[$lien]){
// on tente avec l'action sans le role
array_pop($defs);
$lien = implode('-', $defs);
if (!isset($roles[$lien]) OR !$roles = $roles[$lien]) {
if (!isset($roles[$lien]) OR !$roles = $roles[$lien]){
$roles = array();
}
}
@ -344,23 +343,23 @@ function lien_retrouver_roles_postes($lien) {
*
* Appelle la fonction objet_associer. L'appelle autant de fois qu'il y
* a de rôles demandés pour cette liaison.
*
*
* @internal
* @param string $objet_source Objet source de la liaison (qui a la table de liaison)
* @param array|string $ids Identifiants pour l'objet source
* @param string $objet_lien Objet à lier
* @param array|string $idl Identifiants pour l'objet lié
* @param string $objet_source Objet source de la liaison (qui a la table de liaison)
* @param array|string $ids Identifiants pour l'objet source
* @param string $objet_lien Objet à lier
* @param array|string $idl Identifiants pour l'objet lié
* @return void
**/
function lien_ajouter_liaison($objet_source, $ids, $objet_lien, $idl, $roles) {
**/
function lien_ajouter_liaison($objet_source, $ids, $objet_lien, $idl, $roles){
// retrouver la colonne de roles s'il y en a a lier
if ($roles and $colonne_role = roles_colonne($objet_source, $objet_lien)) {
foreach ($roles as $role) {
objet_associer(array($objet_source=>$ids), array($objet_lien=>$idl), array($colonne_role => $role));
if ($roles and $colonne_role = roles_colonne($objet_source, $objet_lien)){
foreach ($roles as $role){
objet_associer(array($objet_source => $ids), array($objet_lien => $idl), array($colonne_role => $role));
}
} else {
objet_associer(array($objet_source=>$ids), array($objet_lien=>$idl));
objet_associer(array($objet_source => $ids), array($objet_lien => $idl));
}
}

Loading…
Cancel
Save