Transcript PPT - eIFL

A brief overview of Drupal 7
By Robin Isard, Systems Librarian
Algoma University
What I'm going to look at

Overview of Drupal 7

The module system

How Drupal manages your data

Case study – 2 years working with Drupal
What is drupal?

Content Management System



Becoming more of a Content Management
Framework
Created by Dries Buytaert, a Belgian computer
science student in 1998
3 major releases since then

Current major release is Drupal 7

As of 2011 approximately 630,000 subscribed users

“A drop”
Architectural Overview

Essentially a LAMP stack

Modular


Core

Contributed

Custom

Themes
Business logic intensive
Core

Core modules

Blogs

Comments

Aggregator (RDF,
RSS, Atom feeds)

Hierarchical ordering
of content

Tracking system

Statistics

Forums

OpenID login

Polls

Logging

Taxonomy (tagging)

Theming system

Menu customization

Update manager

Trigger system
Drupal community
Contributed modules

Functionality and themes

9947 modules total

3929 compatible with Drupal 7

“Content”: 551

“File Management”: 90

“Administration”: 343

“Themes”: 298
IMCE
How modules work

A collection of php files designed to implement
some find of functionality

/sites/default/modules

mymod.info

mymod.install

mymod.module
.info
name = Administration menu
description = "Provides a dropdown menu to most administrative
tasks and other common destinations (to users with the proper
permissions)."
package = Administration
; Purposively added for feature development.
version = 7.x-3.x-dev
core = 7.x
project = admin_menu
/**
.install
* @file
* Install, update, and uninstall functions for the admin menu module.
*/
/**
* Implements hook_schema().
*/
function admin_menu_schema() {
$schema['cache_admin_menu'] = drupal_get_schema_unprocessed('system',
'cache');
$schema['cache_admin_menu']['description'] = 'Cache table for Administration
menu to store client-side caching hashes.';
return $schema;
}
.module

Hook system

Php function

Defined input and output

Allows you to implement a certain behavior at a
certain point in drupal core
Hooks


<moudle_name>_<hook_name>()

hook_user_load()

mymod_user_load()
342 available hooks

hook_comment_load

hook_cron

hook_css_alter

hook_field_validate
Example
/**
* Implements hook_help().
*/
function admin_menu_help($path, $arg) {
switch ($path) {
case 'admin/settings/admin_menu':
return t('The administration menu module provides a dropdown
menu arranged for one- or two-click access to most administrative
Tasks … the menu.');
case 'admin/help#admin_menu':
$output = '';
$output .= '<p>' . t('The administration menu module provides a dropdown
menu arranged for one- or two-click ....');
APIs

Module system (Drupal hooks)

Database abstraction layer (Schema API)

Menu system

Form generation

File upload system

Field API

Search system

Node access system

Theme system
Data access and storage
Data management

By default a LAMP stack


Drupal 7 has a rewritten database abstraction
layer



Other database options available with more or less
support
PostgreSQL now a first class member of the
community
MongoDB
Essentially uses Object-relational mapping
APIs

Entity (core)


Entity API
Schema API
Important data management
concepts


Entities

Users

Taxonomy terms

Comments

Nodes
Fields

Entity + Fields = Bundles
Bundle - Example

news_item (a node entity)
+

Date (field)

Subject (field)
=

“news_item bundle”
Key entity hooks

hook_entity_info()


hook_schema()


Entity (core)
Schema API
Entity API

entity_create()

entity_save()

entity_delete()

entity_view()

entity_access().
hook_entity_info()
function user_entity_info() {
$return = array(
'user' => array(
'label' => t('User'),
'controller class' => 'UserController',
'base table' => 'users',
'uri callback' => 'user_uri',
'label callback' => 'format_username',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'uid',
),
'
hook_schema()
function user_schema() {
$schema['authmap'] = array(
'description' => 'Stores distributed authentication mapping.',
'fields' => array(
'aid' => array(
'description' => 'Primary Key: Unique authmap ID.',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'uid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'description' => "User's {users}.uid.",
hook_schema()

Supports primary and foreign keys

Supports indexes

Field lengths


Precision
Signed / unsigned
Data storage example
Data storage example
public | node
| table |
public | field_data_field_db_access_link
| table |
public | field_data_field_db_build_name
| table |
public | field_data_field_db_description
| table |
public | field_data_field_db_ezp_note
| table |
public | field_data_field_db_ezp_test
| table |
public | field_data_field_db_sfx_name
| table |
public | field_data_field_db_url
| table |
Data storage example
TABLE: node
nid
vid
type
| 164
| 164
| db
language
| und
title
| Women Writers' Project
uid
|1
status
|1
created
| 1317243764
changed
| 1332779771
comment
|1
promote
|0
sticky
|0
tnid
|0
translate
|0
TABLE: field_data_field_db_url
entity_type
| node
bundle
| db
deleted
|0
entity_id
| 164
revision_id
| 164
language
| und
delta
|0
field_db_url_value | http://....
field_db_url_format |
Viewing your data


Views module

Still a contributed module

Essentially a report writer

Complicated
Database API
An example: Algoma University's Archive
Algoma University Archive

Over 25,000 images and documents

3 TB of data on scattered hard drives

Most of the data important for legal purposes

Index housed in InMagic-DBtextworks

“Relational like”

ASP driven

No social media aspects

No means to display the content in an engaging
way
Questions we asked about a new
CMS

Service integration

Is there documentation?

Is there an API?
Does it support data exchange protocols?



JSON
XML
RDP
Questions we asked about a new
CMS

Data access and storage

How does it store data?

Does it have a CRUD layer?

Can I get my data out of it in standard formats?



CSV
XML
What options are there for non-sql data?
Migration

2010 project started to update the archive

We chose Drupal because

It seemed to answer the questions listed above

of it's very large user community

recommendations from peers


it's ability to integrate with enterprise technologies
like Fedora Commons and Solr
It's social media abilities
Phase 1

Get the data out of InMagic and into Drupal

Took nearly 4 months

Process

Dump the data out of InMagic as CSV files

Import into PostgreSQL

Use SQL to clean up and format the data

Use “migration module” to import the cleaned up
tables into Drupal
Phase 2


Use Drupal's extensibility to ability to meet
archivist needs for the archive
Problems with contirb

Postgres

Bad code

Malfunctioning modules

Dates

Unix time stamp no good for archives
Phase 3 – in planning

Migrate to drupal 7

Needs to be done


No back-porting
Drupal is now smarter about databases – which is a
problem
Lessons learned - modules

Drupal runs the show

Always interact with Drupal via a module

Stay as close to core as possible

Is this the best possible module for the job?

Put time into choosing modules


When was the last commit?

Do you understand the code yourself?

Is there a plan to upgrade it?
Read the code for you modules

You should be able to fix it yourself
Lessons learned - database


Drupal doesn't really like relational databases
Do you know what a given module will do to the
DB?

Categories module

Does it use MySQL specific statements?

Use Fields and Views as much as possible

Always interact with the DB via a module
The possibilities

Database layer can be rewritten



All kinds of data stores theoretically possible
Can be conceptualized as simply a user interface
for different kinds of data stores
Discovery

Solr integration

Islandora

Web services