SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Batch Scripting with Drupal
(Featuring the EntityFieldQuery API)
Engr.Ranel O.Padon
DrupalCamp Manila 2014
ranel.padon@gmail.com | https://github.com/ranelpadon
About Me
Full-time Drupal developer for CNN Travel
Part-time Python lecturer.
Involved in computational Java and Python projects before.
Plays competitive football and futsal.
TOPICS
Why do batch scripting?
How to leverage Entities and the EntityFieldQuery API.
How to implement a batch module?
Sample Actual Use Cases
Why do batching?
There are things that are hard to teach to robots:
spatial awareness and image interpretation.
But there are things that machines could do and easily beat humans:
doing repetitive tasks.
In Drupal, you don't want your site editors to do repetitive tasks:
e.g. updating a field to the same value.
Why do batching?
Avoids PHP Timeout
For implementating intsallation profiles
Why do batching?
Batch processing is execution of a series of programs on a
computer without manual intervention.
Designed to integrate nicely with the Form API, but can also be used
by non-Form API scripts.
Why do batching?
Avoids PHP Timeout (max_execution_time errors)
For long and complex data processing
You can give the admins real-time feedback or summary of results.
When to do batching?
Implementing installation profiles
Used by Drupal's install.php and update.php
Updating the value of a field for all Event nodes.
Deleting all nodes older than 3 years.
Migrating Column nodes to Column taxonomy terms.
Creating custom nodes upon saving a content with an uploaded Excel file,
Batch API is triggered by hook_node_presave() and
goes through each row of the attached Excel file.
The Rise of Entities
“Oh no, I left my stuff in our house.”
Stuff, just like entities, are useful abstraction.
They could change meaning depending on the context.
The Rise of Entities
In Physics, you could treat each object under study as particles.
In Drupal, they are called entities.
Facilitates a unified way to work
with different data units
Concept simplification contributes
to better modularity,flexibility and maintainability.
http://evolvingweb.ca/story/understanding-entity-api-module
The Rise of Entities
Before D7, users and comments didn't have the same power
that nodes (content) had.
no translations, fields, versioning, and so on.
Views (relies on fields) didn’t work with comments and users.
The Rise of Entities
Field is a reusable piece of content. Each field is a primitive data type,
with custom validators and widgets for editing and formatters for display.
Entity Type group together fields (use Entity API for custom ones):
Nodes (content)
Comments
Taxonomy Terms
User Profiles
The Rise of Entities
Bundles are an implementation of an entity type.
They are subtypes of an entity type.
Bundles (subtypes) like articles, events, blog posts, or products could be
generated from node entity. You could add a file download field on
Basic Pages and a subtitle field on Articles.
You could also assign geographic coordinates field to all bundles/entities.
The Rise of Entities
Entity would be one instance of a particular entity type
(specific article or specific user via entity_load()).
Drupal 7 Core provides entity_load(), while the Entity API contrib
module provides entity_save() and entity_delete().
The Rise of Entities
In terms of Object-Oriented Programming:
An entity type is a base class
A bundle is an extended/derived class
A field is a class member,attribute, or property,
An entity is an object or instance of a base or extended class
EntityFieldQuery API
Tool for querying Entities (compared to db_select())
Can query entity properties and fields
Can query field data across entity types:
Fetch all pages and users tagged with taxonomy term “premium”
Returns entity IDs that you could load using entity_load()
Database-agnostic (no issues when migrating from MySQL to PostgreSQL)
EntityFieldQuery API
Fetch all nodes.
EntityFieldQuery API
Fetch all nodes of type “Article”.
EntityFieldQuery API
Fetch all nodes of type “Article”, Published only.
EntityFieldQuery API
Tool for querying Entities
EntityFieldQuery API
Tool for querying Entities
EntityFieldQuery API
Tool for querying Entities
Custom Batch Module
Form API meets Batch API
Custom Batch Module
Batch 12 things, process 5 things at a time
http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
Custom Batch Module
Form Submit trigger
http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
Custom Batch Module
Multiple callback operations and the dynamic $context array (stored in db)
http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
Custom Batch Module
Post Processing
http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
Custom Batch Module
The usual suspects:
mybatch.info
mybatch.module
Then, enable the module in “admin/modules” or using Drush:
$ drush en -y mybatch
Custom Batch Module
Information required in mybatch.module, without a form:
I. URL that will be utilized.
II. Function callback definition for that URL.
Usually contains the setup for the batch process.
III.The batch operation's function definition.
IV.The function definition that will be called after
the batch operation.
Custom Batch Module
1.The batch module URL (http://localhost/admin/mybatch):
Custom Batch Module
1I. Function callback for the URL, setups the batch process.
Custom Batch Module
III. Define the operation callback.
Custom Batch Module
IV.Define the post-operation callback.
Custom Batch Module
Custom Batch Module
III. Define the operation callback (Enhancement).
III. Define the operation callback (Enhancement).
1I. Function callback for the URL (Enhancement).
Custom Batch Module
Information required in mybatch.module, when using a form:
I. URL that will be utilized.
II. Form callback definition for that URL (hook_form).
III. Form Submit definition.
Usually contains the setup for the batch process.
IV.The batch operation's function definition.
V.The function definition that will be called after the batch operation.
Custom Batch Module
Batch API with Form API:
Custom Batch Module
I. URL that will be utilized.
Custom Batch Module
II. Form callback definition for that URL (hook_form).
Custom Batch Module
III. Form Submit definition.
Custom Batch Module
Part IV and V don't need to be changed:
Our Use Case 1
We need to update the Short Bio field text format of User Profiles
from Full HTML to Editorial Filter:
Our Use Case 1
Using our last batch module example module (with form), all parts
except part IV and V will be almost similar.
IV (1/4):
IV (2/4):
IV (3/4):
IV (4/4):
V:
Our Use Case 2
Preview map images for City/Country taxonomy terms with no set
value: (http://travel.cnn.com/malaysia)
Our Use Case 2
Preview map images for City/Country taxonomy terms with no set
value: (http://travel.cnn.com/japan)
Our Use Case 2
Batch API with Form API (Updating the preview images,
part I and part V are almost similar to that of Use Case 1)
II. Form callback definition for that URL (hook_form).
III. Form Submit definition.
IV.Batch operations callback (highlights only)
IV.Batch operations callback (highlights only)
IV.Batch operations callback (highlights only)
IV.Batch operations callback (highlights only)
Summary
Information required in mybatch.module, without a form:
I. URL that will be utilized.
II. Function callback definition for that URL.
Usually contains the setup for the batch process.
III.The batch operation's function definition.
IV.The function definition that will be called after
the batch operation.
Summary
Information required in mybatch.module, when using a form:
I. URL that will be utilized.
II. Form callback definition for that URL (hook_form).
III. Form Submit definition.
Usually contains the setup for the batch process.
IV.The batch operation's function definition.
V.The function definition that will be called after the batch operation.
Summary
Implementing the Batch API without a form could be also
integrated to Drupal hooks or even Drush.
EntityFieldQuery integration to batch operations callback
will facilitate a more readable, flexible, and maintainable
data fetching in the batch process.
Recommended Links
Batch API Docs:
https://drupal.org/node/180528
Examples Module (Batch API):
http://d7.drupalexamples.info/examples/batch_example
Batch API integration with Drush:
http://www.metaltoad.com/blog/using-drupal-batch-api
EntityFieldQuery Docs:
https://drupal.org/node/1343708
EntityFieldQuery as alternative to Views:
http://treehouseagency.com/blog/tim-cosgrove/2012/02/16/entityfieldquery-let-drupal-do-heavy-lifting-pt-1
Long Live Open-Source!

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

00 intro to java
00 intro to java00 intro to java
00 intro to java
 
Insight into java 1.8, OOP VS FP
Insight into java 1.8, OOP VS FPInsight into java 1.8, OOP VS FP
Insight into java 1.8, OOP VS FP
 
java token
java tokenjava token
java token
 
Java for C++ programers
Java for C++ programersJava for C++ programers
Java for C++ programers
 
Modular programming
Modular programmingModular programming
Modular programming
 
Grade 8: Introduction To Java
Grade 8: Introduction To JavaGrade 8: Introduction To Java
Grade 8: Introduction To Java
 
Java notes
Java notesJava notes
Java notes
 
Java applet
Java appletJava applet
Java applet
 
C++ to java
C++ to javaC++ to java
C++ to java
 
Programming in Java
Programming in JavaProgramming in Java
Programming in Java
 
Introduction of c# day3
Introduction of c# day3Introduction of c# day3
Introduction of c# day3
 
Java seminar
Java seminarJava seminar
Java seminar
 
Hack in the Box GSEC 2016 - Reverse Engineering Swift Applications
Hack in the Box GSEC 2016 - Reverse Engineering Swift ApplicationsHack in the Box GSEC 2016 - Reverse Engineering Swift Applications
Hack in the Box GSEC 2016 - Reverse Engineering Swift Applications
 
Java for Recruiters
Java for RecruitersJava for Recruiters
Java for Recruiters
 
Java swing 1
Java swing 1Java swing 1
Java swing 1
 
Java 8 - An Overview
Java 8 - An OverviewJava 8 - An Overview
Java 8 - An Overview
 
Core Java
Core JavaCore Java
Core Java
 
Object oriented-programming-in-c-sharp
Object oriented-programming-in-c-sharpObject oriented-programming-in-c-sharp
Object oriented-programming-in-c-sharp
 
Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone Development
 

Andere mochten auch

Switchable Map APIs with Drupal
Switchable Map APIs with DrupalSwitchable Map APIs with Drupal
Switchable Map APIs with DrupalRanel Padon
 
Python Programming - XII. File Processing
Python Programming - XII. File ProcessingPython Programming - XII. File Processing
Python Programming - XII. File ProcessingRanel Padon
 
PyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationPyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationRanel Padon
 
Operating System Presentation
Operating System PresentationOperating System Presentation
Operating System PresentationSajid Khan
 
Manual clips
Manual clipsManual clips
Manual clipsworkhome
 
デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。Chachamaru
 
Introdução a python módulo c
Introdução a python   módulo cIntrodução a python   módulo c
Introdução a python módulo cJader Gabriel
 
Creating masterpieces with raphael
Creating masterpieces with raphaelCreating masterpieces with raphael
Creating masterpieces with raphaelPippi Labradoodle
 
Python Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingPython Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingRanel Padon
 
Python Programming - IX. On Randomness
Python Programming - IX. On RandomnessPython Programming - IX. On Randomness
Python Programming - IX. On RandomnessRanel Padon
 
Understanding operating systems 5th ed ch04
Understanding operating systems 5th ed ch04Understanding operating systems 5th ed ch04
Understanding operating systems 5th ed ch04BarrBoy
 
Python Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsPython Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsRanel Padon
 
Python Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismPython Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismRanel Padon
 
Power and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryPower and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryRanel Padon
 

Andere mochten auch (20)

Switchable Map APIs with Drupal
Switchable Map APIs with DrupalSwitchable Map APIs with Drupal
Switchable Map APIs with Drupal
 
Python Programming - XII. File Processing
Python Programming - XII. File ProcessingPython Programming - XII. File Processing
Python Programming - XII. File Processing
 
PyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationPyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputation
 
Operating System Presentation
Operating System PresentationOperating System Presentation
Operating System Presentation
 
Manual clips
Manual clipsManual clips
Manual clips
 
デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。
 
Introdução a python módulo c
Introdução a python   módulo cIntrodução a python   módulo c
Introdução a python módulo c
 
Import python
Import pythonImport python
Import python
 
Mba
MbaMba
Mba
 
Python IDE Roundup
Python IDE RoundupPython IDE Roundup
Python IDE Roundup
 
Creating masterpieces with raphael
Creating masterpieces with raphaelCreating masterpieces with raphael
Creating masterpieces with raphael
 
Python Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingPython Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator Overloading
 
Py S60
Py S60Py S60
Py S60
 
Python Programming - IX. On Randomness
Python Programming - IX. On RandomnessPython Programming - IX. On Randomness
Python Programming - IX. On Randomness
 
Virtual Memory
Virtual MemoryVirtual Memory
Virtual Memory
 
Understanding operating systems 5th ed ch04
Understanding operating systems 5th ed ch04Understanding operating systems 5th ed ch04
Understanding operating systems 5th ed ch04
 
Python Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsPython Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular Expressions
 
Python Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismPython Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and Polymorphism
 
Introducción a dr racket
Introducción a dr racketIntroducción a dr racket
Introducción a dr racket
 
Power and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryPower and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQuery
 

Ähnlich wie Batch Scripting with Drupal (Featuring the EntityFieldQuery API)

Cetas - Application Development Services
Cetas - Application Development ServicesCetas - Application Development Services
Cetas - Application Development ServicesKabilan D
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Mack Hardy
 
My Very First Zf App Part One
My Very First Zf App   Part OneMy Very First Zf App   Part One
My Very First Zf App Part Oneisaaczfoster
 
Understanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profitUnderstanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profitPascal Rapicault
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshellLennart Schoors
 
.NET Portfolio
.NET Portfolio.NET Portfolio
.NET Portfoliomwillmer
 
Spring training
Spring trainingSpring training
Spring trainingTechFerry
 
Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site buildersKim Pepper
 
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource GroupLINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource GroupShahzad
 
Introduction to Zend Framework
Introduction to Zend FrameworkIntroduction to Zend Framework
Introduction to Zend FrameworkJamie Hurst
 
Angular kickstart slideshare
Angular kickstart   slideshareAngular kickstart   slideshare
Angular kickstart slideshareSaleemMalik52
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web DevelopmentRobert J. Stein
 
Orchard Dynamic Class Extensions
Orchard Dynamic Class ExtensionsOrchard Dynamic Class Extensions
Orchard Dynamic Class Extensionsmarkdolar
 
Unit - 1: ASP.NET Basic
Unit - 1:  ASP.NET BasicUnit - 1:  ASP.NET Basic
Unit - 1: ASP.NET BasicKALIDHASANR
 
Introduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKIntroduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKKarthik Subramanian
 
Introduction to the integral framework
Introduction to the integral frameworkIntroduction to the integral framework
Introduction to the integral frameworkKarthik Subramanian
 

Ähnlich wie Batch Scripting with Drupal (Featuring the EntityFieldQuery API) (20)

Yii php framework_honey
Yii php framework_honeyYii php framework_honey
Yii php framework_honey
 
Cetas - Application Development Services
Cetas - Application Development ServicesCetas - Application Development Services
Cetas - Application Development Services
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
 
Angular2 and You
Angular2 and YouAngular2 and You
Angular2 and You
 
My Very First Zf App Part One
My Very First Zf App   Part OneMy Very First Zf App   Part One
My Very First Zf App Part One
 
Understanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profitUnderstanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profit
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshell
 
.NET Portfolio
.NET Portfolio.NET Portfolio
.NET Portfolio
 
Spring training
Spring trainingSpring training
Spring training
 
Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site builders
 
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource GroupLINQ 2 SQL Presentation To Palmchip  And Trg, Technology Resource Group
LINQ 2 SQL Presentation To Palmchip And Trg, Technology Resource Group
 
Introduction to Zend Framework
Introduction to Zend FrameworkIntroduction to Zend Framework
Introduction to Zend Framework
 
Angular kickstart slideshare
Angular kickstart   slideshareAngular kickstart   slideshare
Angular kickstart slideshare
 
Yii framework
Yii frameworkYii framework
Yii framework
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
Orchard Dynamic Class Extensions
Orchard Dynamic Class ExtensionsOrchard Dynamic Class Extensions
Orchard Dynamic Class Extensions
 
Raptor 2
Raptor 2Raptor 2
Raptor 2
 
Unit - 1: ASP.NET Basic
Unit - 1:  ASP.NET BasicUnit - 1:  ASP.NET Basic
Unit - 1: ASP.NET Basic
 
Introduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKIntroduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORK
 
Introduction to the integral framework
Introduction to the integral frameworkIntroduction to the integral framework
Introduction to the integral framework
 

Mehr von Ranel Padon

CKEditor Widgets with Drupal
CKEditor Widgets with DrupalCKEditor Widgets with Drupal
CKEditor Widgets with DrupalRanel Padon
 
Views Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleViews Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleRanel Padon
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingRanel Padon
 
Python Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsPython Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsRanel Padon
 
Python Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsPython Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsRanel Padon
 
Python Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesPython Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesRanel Padon
 
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Ranel Padon
 
Python Programming - II. The Basics
Python Programming - II. The BasicsPython Programming - II. The Basics
Python Programming - II. The BasicsRanel Padon
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Ranel Padon
 
Web Mapping with Drupal
Web Mapping with DrupalWeb Mapping with Drupal
Web Mapping with DrupalRanel Padon
 

Mehr von Ranel Padon (10)

CKEditor Widgets with Drupal
CKEditor Widgets with DrupalCKEditor Widgets with Drupal
CKEditor Widgets with Drupal
 
Views Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleViews Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views Module
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI Programming
 
Python Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsPython Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and Assertions
 
Python Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsPython Programming - VI. Classes and Objects
Python Programming - VI. Classes and Objects
 
Python Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesPython Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and Dictionaries
 
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
 
Python Programming - II. The Basics
Python Programming - II. The BasicsPython Programming - II. The Basics
Python Programming - II. The Basics
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)
 
Web Mapping with Drupal
Web Mapping with DrupalWeb Mapping with Drupal
Web Mapping with Drupal
 

Kürzlich hochgeladen

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Kürzlich hochgeladen (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

Batch Scripting with Drupal (Featuring the EntityFieldQuery API)

  • 1. Batch Scripting with Drupal (Featuring the EntityFieldQuery API) Engr.Ranel O.Padon DrupalCamp Manila 2014 ranel.padon@gmail.com | https://github.com/ranelpadon
  • 2. About Me Full-time Drupal developer for CNN Travel Part-time Python lecturer. Involved in computational Java and Python projects before. Plays competitive football and futsal.
  • 3. TOPICS Why do batch scripting? How to leverage Entities and the EntityFieldQuery API. How to implement a batch module? Sample Actual Use Cases
  • 4. Why do batching? There are things that are hard to teach to robots: spatial awareness and image interpretation. But there are things that machines could do and easily beat humans: doing repetitive tasks. In Drupal, you don't want your site editors to do repetitive tasks: e.g. updating a field to the same value.
  • 5. Why do batching? Avoids PHP Timeout For implementating intsallation profiles
  • 6. Why do batching? Batch processing is execution of a series of programs on a computer without manual intervention. Designed to integrate nicely with the Form API, but can also be used by non-Form API scripts.
  • 7. Why do batching? Avoids PHP Timeout (max_execution_time errors) For long and complex data processing You can give the admins real-time feedback or summary of results.
  • 8. When to do batching? Implementing installation profiles Used by Drupal's install.php and update.php Updating the value of a field for all Event nodes. Deleting all nodes older than 3 years. Migrating Column nodes to Column taxonomy terms. Creating custom nodes upon saving a content with an uploaded Excel file, Batch API is triggered by hook_node_presave() and goes through each row of the attached Excel file.
  • 9. The Rise of Entities “Oh no, I left my stuff in our house.” Stuff, just like entities, are useful abstraction. They could change meaning depending on the context.
  • 10. The Rise of Entities In Physics, you could treat each object under study as particles. In Drupal, they are called entities. Facilitates a unified way to work with different data units Concept simplification contributes to better modularity,flexibility and maintainability. http://evolvingweb.ca/story/understanding-entity-api-module
  • 11. The Rise of Entities Before D7, users and comments didn't have the same power that nodes (content) had. no translations, fields, versioning, and so on. Views (relies on fields) didn’t work with comments and users.
  • 12. The Rise of Entities Field is a reusable piece of content. Each field is a primitive data type, with custom validators and widgets for editing and formatters for display. Entity Type group together fields (use Entity API for custom ones): Nodes (content) Comments Taxonomy Terms User Profiles
  • 13. The Rise of Entities Bundles are an implementation of an entity type. They are subtypes of an entity type. Bundles (subtypes) like articles, events, blog posts, or products could be generated from node entity. You could add a file download field on Basic Pages and a subtitle field on Articles. You could also assign geographic coordinates field to all bundles/entities.
  • 14. The Rise of Entities Entity would be one instance of a particular entity type (specific article or specific user via entity_load()). Drupal 7 Core provides entity_load(), while the Entity API contrib module provides entity_save() and entity_delete().
  • 15. The Rise of Entities In terms of Object-Oriented Programming: An entity type is a base class A bundle is an extended/derived class A field is a class member,attribute, or property, An entity is an object or instance of a base or extended class
  • 16. EntityFieldQuery API Tool for querying Entities (compared to db_select()) Can query entity properties and fields Can query field data across entity types: Fetch all pages and users tagged with taxonomy term “premium” Returns entity IDs that you could load using entity_load() Database-agnostic (no issues when migrating from MySQL to PostgreSQL)
  • 18. EntityFieldQuery API Fetch all nodes of type “Article”.
  • 19. EntityFieldQuery API Fetch all nodes of type “Article”, Published only.
  • 20. EntityFieldQuery API Tool for querying Entities
  • 21. EntityFieldQuery API Tool for querying Entities
  • 22. EntityFieldQuery API Tool for querying Entities
  • 23. Custom Batch Module Form API meets Batch API
  • 24. Custom Batch Module Batch 12 things, process 5 things at a time http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
  • 25. Custom Batch Module Form Submit trigger http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
  • 26. Custom Batch Module Multiple callback operations and the dynamic $context array (stored in db) http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
  • 27. Custom Batch Module Post Processing http://www.ent.iastate.edu/it/Batch_and_Queue.pdf
  • 28. Custom Batch Module The usual suspects: mybatch.info mybatch.module Then, enable the module in “admin/modules” or using Drush: $ drush en -y mybatch
  • 29. Custom Batch Module Information required in mybatch.module, without a form: I. URL that will be utilized. II. Function callback definition for that URL. Usually contains the setup for the batch process. III.The batch operation's function definition. IV.The function definition that will be called after the batch operation.
  • 30. Custom Batch Module 1.The batch module URL (http://localhost/admin/mybatch):
  • 31. Custom Batch Module 1I. Function callback for the URL, setups the batch process.
  • 32. Custom Batch Module III. Define the operation callback.
  • 33. Custom Batch Module IV.Define the post-operation callback.
  • 35. Custom Batch Module III. Define the operation callback (Enhancement).
  • 36. III. Define the operation callback (Enhancement).
  • 37. 1I. Function callback for the URL (Enhancement).
  • 38. Custom Batch Module Information required in mybatch.module, when using a form: I. URL that will be utilized. II. Form callback definition for that URL (hook_form). III. Form Submit definition. Usually contains the setup for the batch process. IV.The batch operation's function definition. V.The function definition that will be called after the batch operation.
  • 39. Custom Batch Module Batch API with Form API:
  • 40. Custom Batch Module I. URL that will be utilized.
  • 41. Custom Batch Module II. Form callback definition for that URL (hook_form).
  • 42. Custom Batch Module III. Form Submit definition.
  • 43. Custom Batch Module Part IV and V don't need to be changed:
  • 44. Our Use Case 1 We need to update the Short Bio field text format of User Profiles from Full HTML to Editorial Filter:
  • 45. Our Use Case 1 Using our last batch module example module (with form), all parts except part IV and V will be almost similar.
  • 50. V:
  • 51. Our Use Case 2 Preview map images for City/Country taxonomy terms with no set value: (http://travel.cnn.com/malaysia)
  • 52. Our Use Case 2 Preview map images for City/Country taxonomy terms with no set value: (http://travel.cnn.com/japan)
  • 53. Our Use Case 2 Batch API with Form API (Updating the preview images, part I and part V are almost similar to that of Use Case 1)
  • 54. II. Form callback definition for that URL (hook_form).
  • 55. III. Form Submit definition.
  • 56. IV.Batch operations callback (highlights only)
  • 57. IV.Batch operations callback (highlights only)
  • 58. IV.Batch operations callback (highlights only)
  • 59. IV.Batch operations callback (highlights only)
  • 60. Summary Information required in mybatch.module, without a form: I. URL that will be utilized. II. Function callback definition for that URL. Usually contains the setup for the batch process. III.The batch operation's function definition. IV.The function definition that will be called after the batch operation.
  • 61. Summary Information required in mybatch.module, when using a form: I. URL that will be utilized. II. Form callback definition for that URL (hook_form). III. Form Submit definition. Usually contains the setup for the batch process. IV.The batch operation's function definition. V.The function definition that will be called after the batch operation.
  • 62. Summary Implementing the Batch API without a form could be also integrated to Drupal hooks or even Drush. EntityFieldQuery integration to batch operations callback will facilitate a more readable, flexible, and maintainable data fetching in the batch process.
  • 63. Recommended Links Batch API Docs: https://drupal.org/node/180528 Examples Module (Batch API): http://d7.drupalexamples.info/examples/batch_example Batch API integration with Drush: http://www.metaltoad.com/blog/using-drupal-batch-api EntityFieldQuery Docs: https://drupal.org/node/1343708 EntityFieldQuery as alternative to Views: http://treehouseagency.com/blog/tim-cosgrove/2012/02/16/entityfieldquery-let-drupal-do-heavy-lifting-pt-1