Changeset 65438 in spip-zone


Ignore:
Timestamp:
Sep 1, 2012, 7:27:22 AM (9 years ago)
Author:
gildas.cotomale@…
Message:

amelioration de la prise en charge des champs extras

Location:
_plugins_/Association/Associaspip
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/association_options.php

    r65375 r65438  
    10051005        }
    10061006        if ($ObjetEtendu) {
    1007 /* Le code suivant fonctionne, mais :
    1008 -* il manque le formatage correct des donnees, surtout pour les listes (cas par exemple des : auteurs, mots cles, documents, enums definis dans l'interface).
    1009 -* seuls les champs extras crees manuellement (par l'interface donc) sont pris en compte, pas ceux rajoutes via pipeline par d'autres plugins.
    1010                 $champsExtras = association_trouver_iextras($ObjetEtendu);
     1007                $champsExtras = association_trouver_iextras($ObjetEtendu, $id); // on recupere les champs extras crees manuellement (i.e. via l'interface d'edition du prive, pas ceux rajoutes par les plugins !)
    10111008                if ( count($champsExtras) ) {
    1012                         $donneesExtras = sql_fetsel(array_keys($champsExtras), "spip_${ObjetEtendu}s", 'id_'.($type?$type:$ObjetEtendu).'='.intval($id) ); // on recupere les donnees... (il faut que le nom de la table soit le pluriel en "-s" de l'objet et que l'identifiant soit l'objet prefixe de "id_" :-S)
    1013                         foreach ($champsExtras as $col_name => $col_label) {
    1014                                 $res .= '<dt>'. _T($col_label) .'</dt><dd>'. propre($donneesExtras[$col_name]) .'</dd>'; // propre() encadre dans P... Cette presentation est propre a Associaspip. L'appel au pipeline "afficher_contenu_objet" remplace tout le "foreach" avec plutot : $res .= "<div class='$col_name'><strong>$col_label</strong> $donneesExtras[$col_name]</div>";
     1009                        foreach ($champsExtras as $champExtra) {
     1010                                $res .= '<dt>'. $champExtra[0] .'</dt>';
     1011                                $res .= '<dd>'. $champExtra[1] .'</dd>';
     1012/*
     1013                                if ( strstr($champExtra[1], '<div')===0 ) { // c'est dans un "DIV" superflu
     1014                                        $res .= substr_replace( substr_replace($chamExtra[1], '</dd>', strrpos($chamExtra[1],'</div>'), 6), 'dd', 1, 3);
     1015                                } else {
     1016                                        $res .= '<dd>'. $champExtra[0] .'</dd>';
     1017                                }
     1018*/
     1019                                $res .= '<!--dd>'. $champExtra[2] .'</dd-->'; // comparaison de controle
    10151020                        }
    10161021                }
    1017 du coup, on readapte : */
    1018                 $res .= '<dt>+</dt><dd>'. pipeline('afficher_contenu_objet', array('args'=>array('type'=>$ObjetEtendu, 'id_objet'=>$id, 'contexte'=>array()), 'data'=>'',) ) .'</dd>';
    10191022        }
    10201023        if ( count($DesLignes) OR $ObjetEtendu )
     
    14471450 * @param string $ObjetEtendu
    14481451 *   Nom de l'objet dont on veut recuperer les champs etendus
     1452 * @param int $id
     1453 *   ID de l'objet dont il veut recuperer aussi les donnees
     1454 *   Par defaut : aucun (i.e. 0)
    14491455 * @return array $champsExtrasVoulus
    1450  *   'nom_de_la_colonne'=>"Libelle du champ"
    1451  */
    1452 function association_trouver_iextras($ObjetEtendu)
     1456 *   - si on ne veut pas de donnee :
     1457 *     'nom_de_la_colonne'=>"Libelle du champ"
     1458 *   - si on veut aussi les donnees :
     1459 *     'nom_de_la_colonne'=>array( "Libelle du champ", "Donnee formatee", "Donnee brute SQL")
     1460 */
     1461function association_trouver_iextras($ObjetEtendu, $id=0)
    14531462{
    14541463        $champsExtrasVoulus = array();
    14551464        if (test_plugin_actif('IEXTRAS')) { // le plugin "Interfaces pour ChampsExtras2" est installe et active : on peut donc utiliser les methodes/fonctions natives...
    14561465                include_spip('inc/iextras'); // charger les fonctions de l'interface/gestionnaire (ce fichier charge les methode du core/API)
     1466                if ($id)
     1467                        include_spip('cextras_pipelines'); // pour eviter le "Fatal error : Call to undefined function cextras_enum()" en recuperant un fond utilisant les enum...
    14571468                $ChampsExtrasGeres = iextras_get_extras_par_table(); // C'est un tableau des differents "objets etendus" (i.e. tables principaux SPIP sans prefixe et au singulier -- par exemple la table 'spip_asso_membres' correspond a l'objet 'asso_membre') comme cle.
    1458                 foreach ($ChampsExtrasGeres[$ObjetEtendu] as $$ChampExtraRang => $ChampExtraInfos ) { // Pour chaque objet, le tableau a une entree texte de cle "id_objet" et autant d'entrees tableau de cles numerotees automatiquement (a partir de 0) qu'il y a de champs extras definis. Chaque champ extra defini est un tableau avec les cle=>type suivants : "table"=>string, "champ"=>string, "label"=>string, "precisions"=>string, "obligatoire"=>string, "verifier"=>bool, "verifier_options"=>array, "rechercher"=>string, "enum"=>string, "type"=>string, "sql"=>string, "traitements"=>string, "saisie_externe"=>bool, "saisie_parametres"]=>array("explication"=>string, "attention"=>string, "class"=> string, "li_class"]=>string,)
    1459                         if ( is_array($ChampExtraInfos)
    1460                                 $champsExtrasVoulus[$ChampExtraInfos['champ']] = _TT($ChampExtraInfos['label']); // _TT est defini dans cextras_balises.php
     1469                foreach ($ChampsExtrasGeres[$ObjetEtendu] as $ChampExtraRang => $ChampExtraInfos ) { // Pour chaque objet, le tableau a une entree texte de cle "id_objet" et autant d'entrees tableau de cles numerotees automatiquement (a partir de 0) qu'il y a de champs extras definis.
     1470                        if ( is_array($ChampExtraInfos) ) { // Chaque champ extra defini est un tableau avec les cle=>type suivants : "table"=>string, "champ"=>string, "label"=>string, "precisions"=>string, "obligatoire"=>string, "verifier"=>bool, "verifier_options"=>array, "rechercher"=>string, "enum"=>string, "type"=>string, "sql"=>string, "traitements"=>string, "saisie_externe"=>bool, "saisie_parametres"]=>array("explication"=>string, "attention"=>string, "class"=> string, "li_class"]=>string,)
     1471                                $label = _TT($ChampExtraInfos['label']); // _TT est defini dans cextras_balises.php
     1472                                if ( $id ) {
     1473                                        $desc_table = charger_fonction('trouver_table', 'base');
     1474                                        $champs = $desc_table("spip_$ChampExtraInfos[table]s");
     1475                                        $datum_raw = sql_getfetsel($ChampExtraInfos['champ'], "spip_$ChampExtraInfos[table]s", $champs['key']['PRIMARY KEY'].'='.intval($id) ); // on recupere les donnees... (il faut que la table ait le nom de l'objet et le suffixe "s" :-S)
     1476                                        $datum_parsed = recuperer_fond('extra-vues/'.$ChampExtraInfos['type'], array (
     1477                                                'champ_extra' => $ChampExtraInfos['champ'],
     1478                                                'label_extra' => '', // normalement : _TT($ChampExtraInfos['label']), avec la chaine vide on aura juste "<strong></strong> " a virer...
     1479                                                'voleur_extra' => $ChampExtraInfos['traitement']?$ChampExtraInfos['traitement']($datum_raw):$datum_raw,
     1480                                                'enum_extra' => $ChampExtraInfos['enum'], // parametre indispensable pour les champs de type "option"/"radio"/"case" http://forum.spip.net/fr_245942.html#forum245980
     1481                                        )); // resultat du pipeline "affiche_contenu_objet" altere (prive du libelle du champ qui est envoye separement)
     1482                                        $champsExtrasVoulus[$ChampExtraInfos['champ']] = array( $label, str_ireplace('<strong></strong>', '', $datum_parsed), $datum_raw );
     1483                                } else {
     1484                                        $champsExtrasVoulus[$ChampExtraInfos['champ']] = $label;
     1485                                }
     1486                        }
    14611487                }
    14621488        } else { // le plugin "Interfaces pour ChampsExtras2" n'est pas actif :-S Mais peut-etre a-t-il ete installe ?
     
    14671493                foreach ($ChampsExtrasGeres as $ChampExtra) { // Chaque champ extra defini est un tableau avec les cle=>type suivants (les cles commencant par "_" initialisent des methodes de meme nom sans le prefixe) : "table"=>string, "champ"=>string, "label"=>string, "precisions"=>string, "obligatoire"=>string, "verifier"=>bool, "verifier_options"=>array, "rechercher"=>string, "enum"=>string, "type"=>string, "sql"=>string, "traitements"=>string, "_id"=>string, "_type"=>string, "_objet"=>string, "_table_sql"=>string, "saisie_externe"=>bool, "saisie_parametres"]=>array("explication"=>string, "attention"=>string, "class"=> string, "li_class"]=>string,)
    14681494                        if ($ChampExtra['table']==$ObjetEtendu) // c'est un champ extra de la 'table' ou du '_type' d'objet qui nous interesse
    1469                                 $champsExtrasVoulus[$ChampExtra['champ']] = $TT($ChampExtra['label']);
     1495                                $label = $TT($ChampExtra['label']);
     1496                                if ( $id ) {
     1497                                        $datum_raw = sql_getfetsel($ChampExtra['champ'], $ChampExtra[_table_sql], "id__$ChampExtra[_type]=".intval($id) ); // on recupere les donnees... (il faut que l'identifiant soit l'objet prefixe de "id_" :-S)
     1498                                        switch ( $ChampExtra['type'] ) { // Comme on n'est pas certain de pouvoir trouver "inc/iextra.php" et "inc/cextra.php" on a des chance que foire par moment. On va donc gerer les cas courants manuellement.
     1499                                                case 'case' : // "<select type='checkbox' .../>..."
     1500                                                case 'option' : // "<select ...>...</select>"
     1501                                                case 'radio' : // "<select type='radio' .../>..."
     1502                                                        $valeurs = array();
     1503                                                        $enum = explode("\r\n", $ChampExtra['enum']);
     1504                                                        foreach ($enum as $pair) {
     1505                                                                list($key,$value) = explode(',', $pair, 1);
     1506                                                                $valeurs[$key] = $value;
     1507                                                        }
     1508                                                        $datum_parsed = $ChampExtra['traitement']?$ChampExtra['traitement']($valeurs[$datum_raw]):$valeurs[$datum_raw];
     1509                                                        break;
     1510                                                case 'oui_non' :
     1511                                                        $datum_parsed = _T("item:$datum_raw");
     1512                                                        break;
     1513//                                              case 'asso_activite' :
     1514                                                case 'assoc_compte' :
     1515//                                              case 'asso_don' :
     1516                                                case 'asso_membre' :
     1517                                                case 'asso_ressource' :
     1518//                                              case 'asso_vente' :
     1519                                                        $raccourci = substr($ChampExtra['type'], 4);
     1520                                                        if ( $ChampExtra['traitement'] )
     1521                                                                $datum_parsed = $ChampExtra['traitement']('[->'.$raccourci.$datum_raw.']');
     1522                                                        else { // il faut une requete de plus
     1523                                                                switch ($raccourci) {
     1524//                                                                      case 'activite' :
     1525                                                                        case 'compte' :
     1526                                                                                $valeur = 'justification';
     1527                                                                                break;
     1528//                                                                      case 'don' :
     1529                                                                        case 'membre' :
     1530                                                                                $valeur = 'nom_famille'; // il faudrait "concatener" : nom_famille, prenom, sexe ; le tout en fonction des metas... mais http://sql.1keydata.com/fr/sql-concatener.php
     1531                                                                                break;
     1532                                                                        case 'ressource' :
     1533                                                                                $valeur = 'intitule';
     1534                                                                                break;
     1535//                                                                      case 'vente' :
     1536                                                                }
     1537                                                                $datum_parsed = sql_getfetsel($valeur, "spip_$ChampExtra[type]s", 'id_'.($raccourci=='membre'?'auteur':$raccourci).'='.intval($datum_raw) );
     1538                                                        }
     1539                                                        break;
     1540                                                case 'article' :
     1541                                                case 'auteur' :
     1542                                                case 'breve' :
     1543                                                case 'document' :
     1544                                                case 'evenement' :
     1545                                                case 'rubrique' :
     1546                                                case 'site' :
     1547                                                        if ( $ChampExtra['traitement'] )
     1548                                                                $datum_parsed = $ChampExtra['traitement']('[->'.$ChampExtra['type'].$datum_raw.']');
     1549                                                        else { // il faut une requete de plus
     1550                                                                $datum_parsed = sql_getfetsel($ChampExtra['type']=='auteur'?'nom':'titre', "spip_$ChampExtra[type]s", "id_$ChampExtra[type]=".intval($datum_raw) );
     1551                                                        }
     1552                                                        break;
     1553                                                case 'auteurs' :
     1554                                                        if ( $ChampExtra['traitement'] ) {
     1555                                                                $valeurs = explode($datum_raw, ',');
     1556                                                                foreach ($valeurs as $rang=>$valeur)
     1557                                                                        $valeurs[$rang] = '[->auteur'.$valeurs[$rang].']';
     1558                                                                $datum_parsed = implode(';', $valeurs);
     1559                                                        } else { // il faut une requete de plus
     1560                                                                $valeurs = sql_fetchall('nom', "spip_auteurs", "id_auteur IN (".sql_quote($datum_raw).')' );
     1561                                                                $datum_parsed = implode(';', $valeurs);
     1562                                                        }
     1563                                                        break;
     1564                                                case 'bloc' : // "<textarea...>...</textarea>"
     1565                                                case 'ligne' : // "<input type='text' .../>"
     1566                                                default :
     1567                                                        $ChampExtra['traitement']?$ChampExtra['traitement']($datum_raw):$datum_raw;
     1568                                        }
     1569                                        $champsExtrasVoulus[$ChampExtra['champ']] = array( $label, $print, $datum );
     1570                                } else {
     1571                                        $champsExtrasVoulus[$ChampExtra['champ']] = $label;
     1572                                }
    14701573                }
    14711574        }
  • _plugins_/Association/Associaspip/exec/adherents.php

    r65375 r65438  
    7070                if ( !$GLOBALS['association_metas']['id_asso'] )
    7171                        $champsExclus[] = 'id_asso';
    72                 echo association_boite_listepdf('membre', array('where_adherents'=>$where_adherents, 'jointure_adherents'=>$jointure_adherents, 'statut_interne'=>$statut_interne), 'adherent_libelle_', $champsExclus, true);
     72                echo association_bloc_listepdf('membre', array('where_adherents'=>$where_adherents, 'jointure_adherents'=>$jointure_adherents, 'statut_interne'=>$statut_interne), 'adherent_libelle_', $champsExclus, true);
    7373                debut_cadre_association('annonce.gif', 'adherent_titre_liste_actifs');
    7474                // FILTRES
Note: See TracChangeset for help on using the changeset viewer.