Entity API. Alexandre Todorov, Felip Manyer i Ballester. Montpellier, le 17 septembre 2014



Documents pareils
OpenPaaS Le réseau social d'entreprise

Créer une base de données vidéo sans programmation (avec Drupal)

BIRT (Business Intelligence and Reporting Tools)

4 Exemples de problèmes MapReduce incrémentaux

Nouveautés de Drupal 8. Léon

Introduction à ElasticSearch

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Catalogue des formations Edition 2015

Savoir- Faire Offres mé1ers Offres technologiques

Webinar. Découvrez Rubedo, la première solution CMS open-source tirant profit des atouts de Zend Framework et du NoSQL. avec la participation de

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

PHP 5.4 Développez un site web dynamique et interactif

Alfstore workflow framework Spécification technique

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Devenez un véritable développeur web en 3 mois!

Bases de Données NoSQL

PHP 5. La base de données MySql. A. Belaïd 1

Compte Rendu d intégration d application

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

DRUPAL Réalisez des développements professionnels avec PHP (2ième édition)

SharePoint 2013 Développez en.net pour personnaliser SharePoint (Apps, REST, CSOM et Azure)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Le Web de Données Dan VODISLAV Université de Cergy-Pontoise Master Informatique M2 Plan

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

DRUPAL Guide de référence des meilleures extensions

Olivier Mondet

IBM System i. DB2 Web Query for System i : le successeur de Query/400? Oui, mais bien plus!!!

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Paris Airports - Web API Airports Path finding

Exploration des technologies web pour créer une interaction entre Mahara et les plateformes professionnelles et sociales

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Bases de Données relationnelles et leurs systèmes de Gestion

Construire une application marketing Facebook sur la plateforme Windows Azure

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

as Architecture des Systèmes d Information

Notes de cours : bases de données distribuées et repliquées

SYSTÈMES D INFORMATIONS

Stockage de données sous Android

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Langage SQL : créer et interroger une base

DRUPAL. Réalisez des développements professionnels avec PHP. Résumé. David OLMETA Rémi BENOIT. ENI Editions - All rigths reserved - Moha Anisa

Drupal (V7) : principes et petite expérience

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Data Tier Application avec SQL Server 2008 R2

3 Octobre Les Communautés MS

I4 : Bases de Données

Drupal un CMS orienté mé2er. Romain JARRAUD Mathieu GROS

Architecture Orientée Service, JSON et API REST

AVRIL Au delà de Hadoop. Panorama des solutions NoSQL

SQL Parser XML Xquery : Approche de détection des injections SQL

Composants Logiciels. Le modèle de composant de CORBA. Plan

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Learning Object Metadata

Le langage SQL (première partie) c Olivier Caron

La base de données XML exist. A. Belaïd

Démarrer rapidement un site avec Drupal 7

Présentation générale du projet data.bnf.fr

Projet Android (LI260) Cours 2

Bases Java - Eclipse / Netbeans

Cours Bases de données

Partie 0 : Gestion des tablespace et des utilisateurs... 3

4. SERVICES WEB REST 46

Le stockage local de données en HTML5

SQL Historique

3 chapitre Groupe Eyrolles, 2008

Module pour la solution e-commerce Magento

TP Contraintes - Triggers

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Plateforme PAYZEN. Définition de Web-services

Information utiles. webpage : Google+ : digiusto/

Gestion Electronique de Document (ECM/GED)

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Profils d installation sous Drupal 7

Les processus métiers : concepts, modèles et systèmes

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Interaction entre réseaux sociaux et sites web

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Chaîne opératoire de réalisation d une base de données. ANF «Comment concevoir une base de données» (29-30/01/2015)

Découvrir le CMS. et l utiliser dans une approche pro!

CATALOGUE DE FORMATIONS BUSINESS INTELLIGENCE. Edition 2012

1/ Présentation de SQL Server :

Les bases de données relationnelles

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Drupal, le couteau suisse de la publication d informations

Mise en œuvre des serveurs d application

SQL Server 2012 Implémentation d'une solution de Business Intelligence (Sql Server, Analysis Services...)

Infrastructure de Données Spatiales

Transcription:

Entity API Alexandre Todorov, Felip Manyer i Ballester Montpellier, le 17 septembre 2014 Alexandre Todorov, Felip Manyer i Ballester Entity API 1/43

À propos d Alexandre (Improvisation) Alexandre Todorov, Felip Manyer i Ballester Entity API 2/43

À propos de Felip Drupalien depuis fin 2009, centralien de Lyon (2008). Exerce en indépendant à Perpignan sous le nom commercial «Res Telæ». Vient aux meetups pour donner libre cours à sa logorrhée, mais aussi rencontrer des gens comme lui. «Anarchiste» ayant atteint la trentaine, fermement opposé à la confiscation et la minitellisation d Internet. Loisirs : natation, cyclisme, sports de montagne, piano, sciences naturelles, linguistique, OpenStreetMap, Guifi (?), changer le monde... Alexandre Todorov, Felip Manyer i Ballester Entity API 3/43

1 Les entités, c est quoi? 2 Alexandre Todorov, Felip Manyer i Ballester Entity API 4/43

Historique (1/2) En Drupal 6 L unité de données de plus haut niveau est le nœud. Arrive CCK : définition de champs (donnée + sémantique) au sein d un type de contenu. Génial! Attachons des champs aux utilisateurs et aux commentaires modules les transformant en nœuds. En Drupal 7 Field API embarquée dans le cœur. Apparition d une API gérant les opérations CRUD de manière unifiée : nœuds, utilisateurs, commentaires, taxonomies, etc. sont des entités, accédant au même niveau de citoyenneté. Alexandre Todorov, Felip Manyer i Ballester Entity API 5/43

Historique (2/2) Le support des entités par le cœur est incomplet : entity_get_info(), entity_load(). Entity API apporte des fonctions manquantes : entity_get_property_info(), entity_view(), entity_create(), entity_save(), entity_delete(), ainsi que des surcouches extrêmement utiles : entity_metadata_wrapper(). Alexandre Todorov, Felip Manyer i Ballester Entity API 6/43

Vocabulaire Type d entité Exemple : nœud, utilisateur, terme de taxonomie, bean, votre entité perso. Bundle Une «variation» d un type d entité. Exple : type de contenu pour les nœuds. Tous les types d entités n ont pas de bundles (exple : utilisateurs). Propriété Une unité de données commune à tous les bundles. Exple : titre, date de création. Champs Une unité de données possédant une sémantique définie, attaché à un (des) bundle(s) en particulier. (Champs + formateurs et view modes = ) Alexandre Todorov, Felip Manyer i Ballester Entity API 7/43

Intérêt Standardisation Des modules comme Search, Vote, Entity Reference, Rules ou Views sont tous capables de travailler en coopération sur une unité de données commune. Exemples Bean mime le comportement des blocs du cœur, mais s édite comme un nœud, peut embarquer des champs, possède des bundles et des view modes. Drupal Commerce architecture entièrement mise en œuvre sous forme d entités (produits, commandes, «line items», etc.) Alexandre Todorov, Felip Manyer i Ballester Entity API 8/43

Modélisation d entités Pourquoi modéliser ses données? support d échange, documentation et maintenance «petit schéma» et»long discours» graphiques non subjectifs Entités ou nœuds Contenu semi-structuré structure hiérarchique (GED) ou non (éditoriale, web) avec des champs communs (titre, corps, mise à jour, etc.) Contenu structuré produit, stock, commande (e-commerce) user, taxonomy, comment, node (Drupal) Comportements spécifiques (méthodes) par entité Alexandre Todorov, Felip Manyer i Ballester Entity API 9/43

Exemple ISWC Alexandre Todorov, Felip Manyer i Ballester Entity API 10/43

Intégration rapide de MCD Entity Construction Kit (ECK) Gestion des types d entités, bundles et entités Interfaces utilisateur (site builders) Classes (développeurs) Features (config) Ajouter des comportements aux propriétés (exple. titre, date, texte, etc.) Configurations prêtes à l emploi (définitions, callbacks, controllers, etc.) Utilisation d Entity et property info pour : Views relationships (jointures) Formulaires CRUD - entity_dependency - les propriétés de type «clé étrangère» seront exposées par l instance de l entité correspondante. Alexandre Todorov, Felip Manyer i Ballester Entity API 11/43

Plugin behavior - relation n - 1 $plugin = array( label => "Relation n-1", entity_save => iswc_relationn1_property_entity_save, property_info => iswc_relationn1_property_property_info, default_widget => iswc_relationn1_property_widget, default_formatter => iswc_relationn1_property_formatter ); Alexandre Todorov, Felip Manyer i Ballester Entity API 12/43

Views relationship + Entity Dependency hook_entity_property_info() $info[ rel_person_organization ] [ properties ][ PersonID ][ type ] = eck_person ; $info[ rel_person_organization ] [ properties ][ OrganizationID ][ type ] = eck_organization ; // relation n-1: for behaviors $info[ eck_paper ] [ properties ][ conference ][ type ] = eck_conference ; $info[ eck_paper ][ properties ][ parent ][ type ] = eck_paper ; hook_entity_dependencies() pour eck_paper // eck_paper.conference -> eck_conference entity_dependency_add( $dependencies, $entity, eck_conference, array( conference ) ); Alexandre Todorov, Felip Manyer i Ballester Entity API 13/43

1 Les entités, c est quoi? 2 Alexandre Todorov, Felip Manyer i Ballester Entity API 19/43

Déclarer une entité : hook_schema() (1/2) function profil_schema() { return array( profil => array( description => Table stockant les profils, fields => array( pid => array( description => Clef primaire, type => serial, unsigned => TRUE, not null => TRUE, ), uid => array( description => Utilisateur auteur du profil, type => int, unsigned => TRUE, not null => TRUE, ), Alexandre Todorov, Felip Manyer i Ballester Entity API 20/43

Déclarer une entité : hook_schema() (2/2) } date => array( description => Date du profil, type => int, not null => TRUE, ), created => array(...), changed => array(...), autre_propriete => array(...), ), unique keys => array( uid_date => array( uid, date )), foreign keys => array( uid => array( table => users, columns => array( uid => uid ), ), ), primary key => array( pid ), ), ); Alexandre Todorov, Felip Manyer i Ballester Entity API 21/43

Déclarer une entité : hook_entity_info() function profil_entity_info() { return array( profil => array( label => t( Profil ), plural label => t( Profils ), description => t( Renseignements quotidiens utilisateur ), base table => profil, entity keys => array( id => pid ), module => profil, controller class => ProfilController, views controller class => EntityDefaultViewsController, fieldable => TRUE, label callback => profil_label_callback, uri callback => entity_class_uri, ), ); } Alexandre Todorov, Felip Manyer i Ballester Entity API 22/43

Déclarer une entité : le contrôleur class ProfilController extends EntityAPIController { public function load($ids = array(), $conditions = array()) { $entities = parent::load($ids, $conditions); // Un traitement. Exemple : désérialiser un champ. return $entities; } } public function save($entity, DatabaseTransaction $transaction = NULL) if (isset($entity->is_new)) { $entity->created = REQUEST_TIME; } $entity->changed = REQUEST_TIME; // Un traitement. Exemple : sérialiser un champ. return parent::save($entity, $transaction); } Alexandre Todorov, Felip Manyer i Ballester Entity API 23/43

Déclarer une entité : hook_entity_property_info() function profil_entity_property_info_alter(&$info) { $info[ profil ][ properties ][ uid ] = array( label => t( Utilisateur ), description => t("utilisateur ayant renseigné ce profil"), type => user, schema field => uid, ); $info[ profil ][ properties ][ date ] = array( label => t("date du profil"), description => t("date de ce profil"), type => date, schema field => date, ); } Alexandre Todorov, Felip Manyer i Ballester Entity API 24/43

Surcouche de métadonnées (entity metadata wrappers) Des outils puissants pour manipuler les entités Créer un «wrapper» $wrapper = entity_metadata_wrapper( node, $node); Modifier des valeurs $wrapper->author->mail->set( sepp@example.com ); $wrapper->author->mail = sepp@example.com ; Récupérer des valeurs $wrapper->author->mail->value(); $wrapper->title->value(array( sanitize => TRUE)); $wrapper->body->value->raw(); Alexandre Todorov, Felip Manyer i Ballester Entity API 25/43

EntityFieldQuery 1/3 Interroger les entités : propriétés, champs et autres métadonnées génériques (cœur) entitycondition($name, $value, $operator = NULL) entity_type node, taxonomy_term, comment, user, file bundle article, page (not supported in comment) revision_id entity_id propertycondition($name, $value, $operator = NULL) fieldcondition($field, $column = NULL, $value = NULL, $operator = NULL, $delta_group = NULL, $language_group = NULL) $column la colonne du champ $delta_group les conditions dans le même groupe doivent avoir le même $delta_group $language_group les conditions dans le même groupe doivent avoir le même $language_group. Alexandre Todorov, Felip Manyer i Ballester Entity API 26/43

EntityFieldQuery 2/3 Syntaxe compacte, facile à suivre $query = new EntityFieldQuery(); $query->entitycondition( entity_type, node ) ->entitycondition( bundle, article ) ->propertycondition( status, 1) ->fieldcondition( field_news_types, value, spotlight, = ) ->fieldcondition( field_photo, fid, NULL,!= ) ->fieldcondition( field_faculty_tag, tid, $value) ->fieldcondition( field_news_publishdate, value, $year. %, like ) ->fieldorderby( field_photo, fid, DESC ) ->range(0, 10) ->addmetadata( account, user_load(1)); // Run the query as user 1. $result = $query->execute(); if (isset($result[ node ])) { $news_items_nids = array_keys($result[ node ]); $news_items = entity_load( node, $news_items_nids); Alexandre Todorov, Felip Manyer i Ballester Entity API 27/43

EntityFieldQuery 3/3 Autres méthodes propertyorderby($column, $direction = ASC ) ne fonctionne pas sur toutes les propriétés range($start = NULL, $length = NULL) count() addmetadata($key, $object) // Exécuter la requête en tant que root. $query->addmetadata( account, user_load(1)); addtag( random ) function mymodule_query_random_alter($query) { $query->orderrandom(); } Alexandre Todorov, Felip Manyer i Ballester Entity API 28/43

Exposer des entités «no DB» NoSQL clé-valeur mongodb graph - triple store RDF document XML, GED Données distantes flux, URLs, DAV (Webdav, Caldav, Carddav) Alexandre Todorov, Felip Manyer i Ballester Entity API 29/43

Entités Google Picasa Alexandre Todorov, Felip Manyer i Ballester Entity API 30/43

Entités «no DB» + champs Exemple : WebDAV Field column entity_id : int entité identifiable par name (URI)? URI vers Int (CRC32) Nitems 1 Probabilité collision : 2 Nitems 32 4G Field columns URI + suffixe (si collision) Synchro sur origine (hooks API) Alexandre Todorov, Felip Manyer i Ballester Entity API 31/43

Allons en profiter! NoSQL, entités à distance, intégration de données API CRUD en classes + hooks Rapport avec les autres modules : Token, Entity Reference, Views integration Entity API metadata wrapper : hook_entity_property_info() Rules CRUD hooks - évènements / Data selectors / Actions / modifier séparément propriétés VBO Passer les ids au wrapper pour lazy loading RDFx getpredicates, addstatement, addresource, addlitteral Restws (D8) expose entités comme services web RESTful Wsclient Description services entité OG entité qui servira le type de groupe Features entités exportables Alexandre Todorov, Felip Manyer i Ballester Entity API 32/43

Drupal 8 : Entity dans le cœur Objets d entités, EntityInterface Contrôleurs de stockage CRUD Unification des champs et des propriétés Métadonnées sur les champs / propriétés API de validation Composants réutilisables Les entités : du contenu? = configuration + contenu Alexandre Todorov, Felip Manyer i Ballester Entity API 33/43

Drupal 8 : travailler avec les entités Utiliser des méthodes : ispublished(), gettitle(). Tout est champs! Formateurs et widgets pour tout le monde. Champs d entités = Champs configurables (D7 fields) + champs de base (D7 properties) + champs personnalisés (D7 extra field) champs : comportements réutilisables pour les types d entités en même temps que le stockage (UUID, Language, Path) Champs calculés lorsqu on y accède Entités de configuration? Alexandre Todorov, Felip Manyer i Ballester Entity API 34/43

Drupal 8 - définir un nouveau type d entité Annotations sur la classe de l entité Définir les champs : basefielddefinitions($entity_type) Logique de stockage indépendante Handlers : CommentStorage, CommentStorageSchema CommentAccessControlHandler CommentViewBuilder CommentViewsData CommentForm, DeleteForm CommentTranslationHandler Alexandre Todorov, Felip Manyer i Ballester Entity API 35/43

Drupal 8 : API de validation des entités Découplée du formulaires : services REST Utilise le composant Validator de Symfony Basée sur plugins de contraintes Alexandre Todorov, Felip Manyer i Ballester Entity API 36/43

Drupal 8 : interroger les entités Service d interrogation, tel que défini par le stockage fonctionne indépendamment Ne pas interroger directement la base de données en dehors du gestionnaire de stockage (ou du service d interrogation des entités) Je ne me soucie pas de MongoDB! Changements multilingues du schéma : interrogation des langues Agrégation : aggregate( nid, count ) Relations : user_id.entity.name Alexandre Todorov, Felip Manyer i Ballester Entity API 37/43

Drupal 8 : entités de configuration Entités de configuration pour «type de nœud» Handlers NodeTypeAccessControlHandler NodeTypeForm, NodeTypeDeleteConfirm NodeTypeListBuilder Alexandre Todorov, Felip Manyer i Ballester Entity API 38/43

Drupal 8 API de données typées Il s agit de métadonnées : en tirer parti. Description des données à l aide des définitions de données Basé sur une liste extensible de types de données : string, integer, float, entités, nœud, field_item:image Primitives, ComplexData, liste Alexandre Todorov, Felip Manyer i Ballester Entity API 39/43

Drupal 8 : comparaison avec Drupal 7 Entity wrapper Entity EntityAPIController EntityStorageBase + EntityViewBuilder Jusqu à présent, manquants? EntityUIController, EntityViewsController Entity property info Field definitions, Data definitions EntityAPIControllerExportable ConfigEntityStorage Ils y sont presque... Alexandre Todorov, Felip Manyer i Ballester Entity API 40/43

Drupal 8 : content entities Alexandre Todorov, Felip Manyer i Ballester Entity API 41/43

Drupal 8 : config entities Alexandre Todorov, Felip Manyer i Ballester Entity API 42/43

Drupal 8 : entities storage Alexandre Todorov, Felip Manyer i Ballester Entity API 43/43