Merge branch 'reorganise-talks'

This commit is contained in:
Oliver Davies 2017-10-28 02:01:15 +01:00
commit 3958e1413d
35 changed files with 461 additions and 362 deletions

View file

@ -1,5 +1,7 @@
<?php
use App\FormatTalks\FormatTalksBundle;
use App\FormatTalks\SculpinFormatTalksBundle;
use Opdavies\Sculpin\Bundle\ContentGeneratorBundle\SculpinContentGeneratorBundle;
use Opdavies\Sculpin\Bundle\GistEmbedBundle\SculpinGistEmbedBundle;
use Opdavies\Sculpin\Bundle\TwigMarkdownBundle\SculpinTwigMarkdownBundle;
@ -19,6 +21,8 @@ class SculpinKernel extends AbstractKernel
SculpinContentGeneratorBundle::class,
SculpinGistEmbedBundle::class,
SculpinTwigMarkdownBundle::class,
SculpinFormatTalksBundle::class,
];
}
}

View file

@ -1,218 +1,89 @@
events:
events:
drupal-bristol:
name: Drupal Bristol
location: Bristol, UK
website: https://www.drupalbristol.org.uk
drupal-bristol:
name: 'Drupal Bristol'
location: 'Bristol, UK'
website: 'https://www.drupalbristol.org.uk'
drupal-somerset:
name: Drupal Somerset
location: 'Glastonbury, UK'
drupal-somerset:
name: 'Drupal Somerset'
location: 'Glastonbury, UK'
drupalcamp-brighton-15:
name: DrupalCamp Brighton 2015
location: Brighton, UK
website: ~
drupalcamp-brighton-15:
name: 'DrupalCamp Brighton 2015'
location: 'Brighton, UK'
website: ~
drupalcamp-bristol-16:
name: DrupalCamp Bristol 2016
location: Bristol, UK
website: https://2016.drupalcampbristol.org.uk
drupalcamp-bristol-16:
name: 'DrupalCamp Bristol 2016'
location: 'Bristol, UK'
website: 'https://2016.drupalcampbristol.org.uk'
drupalcamp-dublin-17:
name: DrupalCamp Dublin 2017
location: Dublin, Ireland
website: http://2017.drupal.ie
drupalcamp-dublin-17:
name: DrupalCamp Dublin 2017
location: Dublin, Ireland
website: http://2017.drupal.ie
drupalcamp-london-14:
name: DrupalCamp London 2014
location: London, UK
website: ~
drupalcamp-london-14:
name: DrupalCamp London 2014
location: London, UK
website: ~
drupalcamp-london-15:
name: DrupalCamp London 2015
location: London, UK
website: ~
drupalcamp-london-15:
name: DrupalCamp London 2015
location: London, UK
website: ~
drupalcamp-london-16:
name: DrupalCamp London 2016
location: London, UK
website: ~
drupalcamp-london-16:
name: DrupalCamp London 2016
location: London, UK
website: ~
drupalcamp-london-17:
name: DrupalCamp London 2017
location: London, UK
website: http://drupalcamp.london
drupalcamp-london-17:
name: DrupalCamp London 2017
location: London, UK
website: http://drupalcamp.london
drupalcamp-north-15:
name: DrupalCamp North 2015
location: Sunderland, UK
website: http://drupalcampnorth.org
drupalcamp-north-15:
name: DrupalCamp North 2015
location: Sunderland, UK
website: http://drupalcampnorth.org
nomad-php:
name: Nomad PHP
location: Online
website: https://nomadphp.com
nomad-php:
name: Nomad PHP
location: Online
website: https://nomadphp.com
nwdug:
name: NWDUG
location: Manchester, UK
website: http://nwdrupal.org.uk
nwdug:
name: NWDUG
location: Manchester, UK
website: http://nwdrupal.org.uk
phpnw17:
name: PHP North West 2017
location: Manchester, UK
website: http://conference.phpnw.org.uk/phpnw17
phpnw17:
name: PHP North West 2017
location: Manchester, UK
website: http://conference.phpnw.org.uk/phpnw17
phpsc16:
name: PHP South Coast 2016
location: Portsmouth, UK
website: http://2016.phpsouthcoast.co.uk
phpsc16:
name: PHP South Coast 2016
location: Portsmouth, UK
website: http://2016.phpsouthcoast.co.uk
phpsw:
name: PHPSW
location: Bristol, UK
website: https://phpsw.uk
phpsw:
name: PHPSW
location: Bristol, UK
website: https://phpsw.uk
swdug:
name: SWDUG
location: Cardiff, UK
website: ~
swdug:
name: SWDUG
location: Cardiff, UK
website: ~
umbristol:
name: umBristol
location: Bristol, UK
website: http://umbristol.co.uk
umbristol:
name: umBristol
location: Bristol, UK
website: http://umbristol.co.uk
unifieddiff:
name: 'unified.diff'
location: Cardiff, UK
website: http://unifieddiff.co.uk
dates:
- event: unifieddiff
date: '2012-09-05'
talk_id: 1
- event: swdug
date: '2013-07-10'
talk_title: Drupal and the LDAP Module
- event: drupalcamp-london-14
date: '2014-03-01'
talk: git-flow
talk_id: 2
- event: drupal-bristol
date: '2014-08-19'
talk: drush-make-drupalbristol
talk_id: 3
- event: swdug
date: '2014-08-19'
talk_title: About the Drupal Association
- event: drupalcamp-brighton-15
date: '2015-01-18'
talk_id: 4
- event: drupalcamp-london-15
date: '2015-02-28'
talk_id: 4
- event: phpsw
date: '2015-04-08'
talk_id: 5
- event: drupalcamp-north-15
date: '2015-07-25'
talk_id: 6
- event: umbristol
date: '2015-08-25'
talk_id: 7
- event: phpsw
date: '2015-10-14'
talk_id: 8
feedback: https://joind.in/talk/view/15486
- event: drupalcamp-london-16
date: '2016-03-05'
talk_id: 9
- event: nwdug
date: '2016-03-08'
talk_id: 10
- event: drupal-bristol
date: '2016-04-02'
talk_id: 10
- event: phpsc16
date: '2016-06-11'
talk_id: 11
feedback: https://joind.in/talk/41d0f
- event: drupalcamp-bristol-16
date: '2016-07-23'
talk_id: 12
- event: phpsw
date: '2016-11-09'
talk_id: 13
- event: drupal-bristol
date: '2016-11-17'
talk_id: 14
- event: drupal-bristol
date: '2017-01-18'
talk_id: 15
- event: phpsw
date: '2017-02-08'
talk_id: 16
feedback: https://joind.in/event/phpsw-new-skills-february-17/it-started-with-a-patch
- event: drupalcamp-london-17
date: '2017-03-04'
time: '16:15 - 17:00'
talk_id: 17
- event: drupalcamp-london-17
date: '2017-03-04'
time: '12:05 - 12:50'
talk_id: 15
- event: nomad-php
date: '2017-04-20'
time: '19:00 (CET)'
type: Lightning talk
talk_id: 18
- event: phpsw
date: '2017-09-13'
time: ~
feedback: https://joind.in/talk/a5ff3
talk_id: 18
- event: phpnw17
date: '2017-10-01'
time: '09:00 - 09:45'
talk_id: 18
feedback: 'https://joind.in/talk/4e35d'
- event: drupalcamp-dublin-17
date: '2017-10-20'
time: '15:00 - 15:40'
talk_id: 19
- event: drupalcamp-dublin-17
date: '2017-10-21'
time: '12:00 - 12:40'
talk_id: 17
- event: drupal-somerset
date: '2017-10-26'
talk_id: 19
unifieddiff:
name: 'unified.diff'
location: Cardiff, UK
website: http://unifieddiff.co.uk

View file

@ -11,12 +11,25 @@
"opdavies/sculpin-twig-markdown-bundle": "^0.1",
"php": "^5.5|^7.0",
"sculpin/sculpin": "^2.1@dev",
"tsphethean/sculpin-related-posts-bundle": "~0.1.0"
"tsphethean/sculpin-related-posts-bundle": "~0.1.0",
"wikimedia/composer-merge-plugin": "^1.4"
},
"require-dev": {
"opdavies/sculpin-content-generator-bundle": "@stable"
},
"config": {
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\FormatTalks\\": "src/format-talks-bundle/src"
}
},
"extra": {
"merge-plugin": {
"include": [
"src/*/composer.json"
]
}
}
}

98
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "a0f8f8519a18431f6596a4a342fd66fe",
"content-hash": "ae2c2cbaa6243333432aa088b4edb5c3",
"packages": [
{
"name": "composer/ca-bundle",
@ -2419,6 +2419,53 @@
"homepage": "https://symfony.com",
"time": "2017-06-01T20:52:29+00:00"
},
{
"name": "tightenco/collect",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/tightenco/collect.git",
"reference": "73aa38b20d932f5e8f8ccf721e4c27f4304783d6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tightenco/collect/zipball/73aa38b20d932f5e8f8ccf721e4c27f4304783d6",
"reference": "73aa38b20d932f5e8f8ccf721e4c27f4304783d6",
"shasum": ""
},
"require": {
"php": ">=5.6.4"
},
"require-dev": {
"mockery/mockery": "^0.9.7",
"phpunit/phpunit": "^5.7"
},
"type": "library",
"autoload": {
"files": [
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
"Illuminate\\": "src/Illuminate"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylorotwell@gmail.com"
}
],
"description": "Collect - Illuminate Collections as a separate package.",
"keywords": [
"collection",
"laravel"
],
"time": "2017-08-14T20:47:19+00:00"
},
{
"name": "tsphethean/sculpin-related-posts-bundle",
"version": "0.1.0",
@ -2769,6 +2816,55 @@
"string"
],
"time": "2017-05-11T10:04:12+00:00"
},
{
"name": "wikimedia/composer-merge-plugin",
"version": "v1.4.1",
"source": {
"type": "git",
"url": "https://github.com/wikimedia/composer-merge-plugin.git",
"reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
"reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0",
"php": ">=5.3.2"
},
"require-dev": {
"composer/composer": "~1.0.0",
"jakub-onderka/php-parallel-lint": "~0.8",
"phpunit/phpunit": "~4.8|~5.0",
"squizlabs/php_codesniffer": "~2.1.0"
},
"type": "composer-plugin",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
},
"class": "Wikimedia\\Composer\\MergePlugin"
},
"autoload": {
"psr-4": {
"Wikimedia\\Composer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bryan Davis",
"email": "bd808@wikimedia.org"
}
],
"description": "Composer plugin to merge multiple composer.json files",
"time": "2017-04-25T02:31:25+00:00"
}
],
"packages-dev": [

View file

@ -1,16 +1,13 @@
<div class="mt4">
<h2>Events</h2>
{% set events = [] %}
{% for date in site.events.dates if date.talk_id == page.talk_id %}
{% set events = events|merge([{
date: date,
event: site.events.events[date.event],
{% set talks = [] %}
{% for event in page.events %}
{% set talks = talks|merge([{
event: event|merge(site.events[event.event]),
talk: page,
}]) %}
{% endfor %}
{% include 'talks-table' with {
events: events,
talk_page: true
} %}
{% include "talks-table" with { talk_page: true } %}
</div>

View file

@ -0,0 +1,56 @@
<tr class="striped--near-white">
<td class="pa2">
{{ row.event.date|date(row.event.fuzzy_date ? 'F Y' : 'j F Y') }}
{% if row.event.time is defined %}
<small class="db black-70">
{{ row.event.time }}
</small>
{% endif %}
</td>
{% if not talk_page %}
<td class="pa2">
{% if row.talk.url is not empty %}
<a href="{{ row.talk.url }}">
{{ row.talk.title }}
</a>
{% else %}
{{ row.talk.title }}
{% endif %}
<small class="db black-70">
{{ row.event.type|default('Talk') }}
</small>
</td>
{% endif %}
<td class="pa2">
{% if row.event.website is not empty %}
<a href="{{ row.event.website }}">
{{ row.event.name }}
</a>
{% else %}
{{ row.event.name }}
{% endif %}
{% if row.event.location is defined %}
<small class="db black-70">
{{ row.event.location }}
</small>
{% endif %}
</td>
{% if not upcoming %}
<td class="ph2">
{% if row.event.feedback and row.event.date <= today %}
<a
href="{{ row.event.feedback }}"
class="button"
title="Read or leave feedback for this talk">
<i class="fa fa-comment-o"></i> joind.in
</a>
{% endif %}
</td>
{% endif %}
</tr>

View file

@ -17,65 +17,8 @@
</thead>
<tbody>
{% set today = 'today'|date('Y-m-d') %}
{% for row in events %}
<tr class="striped--near-white">
<td class="pa2">
{{ row.date.date|date(row.date.fuzzy_date ? 'F Y' : 'j F Y') }}
{% if row.date.time is defined %}
<small class="db black-70">
{{ row.date.time }}
</small>
{% endif %}
</td>
{% if not talk_page %}
<td class="pa2">
{% if row.date.talk_title is not defined %}
{% for talk in data.talks if talk.talk_id == row.date.talk_id %}
<a href="{{ talk.url }}">
{{ talk.title }}
</a>
{% endfor %}
{% else %}
{{ row.date.talk_title }}
{% endif %}
<small class="db black-70">
{{ row.date.type|default('Talk') }}
</small>
</td>
{% endif %}
<td class="pa2">
{% if row.event.website is not empty %}
<a href="{{ row.event.website }}">
{{ row.event.name }}
</a>
{% else %}
{{ row.event.name }}
{% endif %}
{% if row.event.location is defined %}
<small class="db black-70">
{{ row.event.location }}
</small>
{% endif %}
</td>
{% if not upcoming %}
<td class="ph2">
{% if row.date.feedback and row.date.date <= today %}
<a
href="{{ row.date.feedback }}"
class="button"
title="Read or leave feedback for this talk">
<i class="fa fa-comment-o"></i> joind.in
</a>
{% endif %}
</td>
{% endif %}
</tr>
{% for row in talks %}
{% include "talks-table-row" %}
{% endfor %}
</tbody>
</table>

View file

@ -1,5 +1,4 @@
---
talk_id: 8
title: Building Static Websites with Sculpin
type: Lightning talk
slides:
@ -11,6 +10,10 @@ tweets: yes
video:
embed: <iframe width="560" height="315" src="https://www.youtube.com/embed/aN53arCKZAU" frameborder="0" allowfullscreen></iframe>
url: https://www.youtube.com/watch?v=aN53arCKZAU
events:
- event: phpsw
date: '2015-10-14'
feedback: 'https://joind.in/talk/view/15486'
---
[Sculpin][0] is a static site generator written in PHP. It converts Markdown files, Twig templates and standard HTML into a static HTML site that can be easily deployed.

View file

@ -1,11 +1,13 @@
---
talk_id: 7
title: Dancing for Drupal
slides:
url: https://speakerdeck.com/opdavies/umbristol-dancing-for-drupal
embed: <script async class="speakerdeck-embed" data-id="ffa9b6dea6dc4a8eb207b9982ed6e1bd" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
tags: [meetup, umbristol, drupal]
tweets: yes
events:
- event: umbristol
date: '2015-08-25'
---
As part of their [CMS Dance-Off][1], I was selected to speak about Drupal alongside other speakers representing Umbraco, Sitecore and Episerver.

View file

@ -1,5 +1,4 @@
---
talk_id: 19
title: 'Deploying Drupal with Fabric'
type: Talk
slides:
@ -14,6 +13,12 @@ meta:
title: Deploying Drupal with Fabric
description: "You've built your Drupal site, now learn how to deploy it with Fabric."
type: website
events:
- event: drupalcamp-dublin-17
date: '2017-10-20'
time: '15:00 - 15:40'
- event: drupal-somerset
date: '2017-10-26'
---
Youve built your website, and now you just need to deploy it. There are various ways that this could be done - from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended).

View file

@ -1,5 +1,4 @@
---
talk_id: 18
title: Deploying PHP Applications with Fabric
slides:
url: https://speakerdeck.com/opdavies/deploying-php-applications-with-fabric
@ -18,6 +17,18 @@ meta:
width: 2560
height: 1440
type: image/png
events:
- event: nomad-php
date: '2017-04-20'
time: '19:00 (CET)'
type: 'Lightning talk'
- event: phpsw
date: '2017-09-13'
feedback: https://joind.in/talk/a5ff3
- event: phpnw17
date: '2017-10-01'
time: '09:00 - 09:45'
feedback: 'https://joind.in/talk/4e35d'
---
Youve built your application, and now you just need to deploy it. There are various ways that this could be done from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended).

View file

@ -1,5 +1,4 @@
---
talk_id: 9
title: Getting Started with Drupal 8 Module Development
tags: [conference, php, drupal, drupalcamp, drupal-8]
tweets: yes
@ -18,6 +17,9 @@ meta:
type: 'image/png'
height: 540
width: 960
events:
- event: drupalcamp-london-16
date: '2016-03-05'
---
New to object-orientated PHP, Symfony or YAML, and want to get started building modules in Drupal 8? This is the session for you!

View file

@ -1,10 +1,13 @@
---
talk_id: 11
title: Drupal 8: Rejoining the Herd
tags: [conference, php, drupal, drupal-8]
slides:
url: https://speakerdeck.com/opdavies/drupal-rejoining-the-herd
embed: <script async class="speakerdeck-embed" data-id="440fd6592f474741bc606c96bc32c104" data-ratio="1.37081659973226" src="//speakerdeck.com/assets/embed.js"></script>
events:
- event: phpsc16
date: '2016-06-11'
feedback: 'https://joind.in/talk/41d0f'
---
[Drupal 8][0] was (finally) released on November 19th 2015, after almost 4 years of work and code commits by over 3,200 different contributors. Whilst its pretty much the same as the Drupal that we know and, hopefully, love, a lot has changed behind the scenes and under the hood!

View file

@ -1,7 +1,5 @@
---
talk_id: 5
title: Drupal 8
type: Lightning talk
slides:
url: https://speakerdeck.com/opdavies/drupal-8
embed: <script async class="speakerdeck-embed" data-id="46ba4ba577d94a32b7abdade610ceb69" data-ratio="1.29456384323641" src="//speakerdeck.com/assets/embed.js"></script>
@ -10,6 +8,9 @@ video:
embed: <iframe width="560" height="315" src="https://www.youtube.com/embed/36zCxPrOOzM" frameborder="0" allowfullscreen></iframe>
tags: [meetup, phpsw, drupal, drupal-8]
tweets: yes
events:
- event: phpsw
date: '2015-04-08'
---
This was a ten minute lightning talk, designed to highlight the major changes coming in Drupal 8.

View file

@ -1,5 +1,4 @@
---
talk_id: 10
title: Drupal VM Generator
type: Lightning talk
code: https://github.com/opdavies/drupal-vm-generator
@ -10,6 +9,11 @@ slides:
video:
url: https://youtu.be/U1pbKAAO2Wo?t=3696
embed: <iframe width="560" height="315" src="https://www.youtube.com/embed/U1pbKAAO2Wo?start=3696" frameborder="0" allowfullscreen></iframe>
events:
- event: nwdug
date: '2016-03-08'
- event: drupal-bristol
date: '2016-04-02'
---
An short talk about the [Drupal VM Generator][1] project.

View file

@ -1,11 +1,13 @@
---
talk_id: 12
title: Drupal VM, Meet Symfony Console
tags: [conference, php, drupal-vm, symfony]
slides:
url: https://speakerdeck.com/opdavies/drupal-vm-meet-symfony-console
embed: <script async class="speakerdeck-embed" data-id="56c79770f73f4e47a542a30243437c49" data-ratio="1.37081659973226" src="//speakerdeck.com/assets/embed.js"></script>
image: drupal-vm-meet-symfony-console.png
events:
- event: drupalcamp-bristol-16
date: '2016-07-23'
---
_TL;DR - Come and learn about Symfony Console, with examples from a real-world project._

View file

@ -1,8 +1,12 @@
---
talk_id: 4
title: Drupal.org in 2015: What's Coming Next
tags: [conference, drupalcamp, drupalcamp-london, drupal-association]
slides:
url: https://speakerdeck.com/opdavies/drupal-dot-org-in-15
embed: <script async class="speakerdeck-embed" data-id="0cf8d7b647c94ae289e9db2b46a9e8f2" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
events:
- event: drupalcamp-brighton-15
date: '2015-01-18'
- event: drupalcamp-london-15
date: '2015-02-28'
---

View file

@ -1,8 +1,10 @@
---
talk_id: 3
title: drush make drupalbristol
slides:
url: https://speakerdeck.com/opdavies/drush-make-drupalbristol
embed: <script async class="speakerdeck-embed" data-id="42605700f102013198de5a5f6f23ab67" data-ratio="1.29456384323641" src="//speakerdeck.com/assets/embed.js"></script>
tags: [meetup, drupal, drupal-bristol, drush, drush-make]
events:
- event: drupal-bristol
date: '2014-08-19'
---

View file

@ -1,5 +1,4 @@
---
talk_id: 15
title: Getting (Your Data) Into Drupal 8
slides:
url: https://speakerdeck.com/opdavies/getting-your-data-into-drupal-8-drupal-bristol
@ -19,6 +18,12 @@ meta:
height: 1440
type: image/png
use: [talks]
events:
- event: drupal-bristol
date: '2017-01-18'
- event: drupalcamp-london-17
date: '2017-03-04'
time: '12:05 - 12:50'
---
If youve moved a site from Drupal 6 to 7, the chances are that youve either used the upgrade path to update your old site in-place, or you built a new site from scratch and used the Migrate module from contrib to migrate your data from the old database.

View file

@ -1,5 +1,4 @@
---
talk_id: 2
title: Never Commit to Master - An Introduction to Git Flow
slides:
url: https://speakerdeck.com/opdavies/never-commit-to-master-an-introduction-to-git-flow
@ -9,4 +8,7 @@ video:
embed: <iframe width="560" height="315" src="https://www.youtube.com/embed/T-miCpHxfds" frameborder="0" allowfullscreen></iframe>
tags: [conference, drupalcamp, drupalcamp-london, git, git-flow]
tweets: yes
events:
- event: drupalcamp-london-14
date: '2014-03-01'
---

View file

@ -1,10 +1,12 @@
---
talk_id: 14
title: Goodbye Drush Make. Hello Composer!
tags: ['meetup', 'drupal', 'composer']
slides:
url: http://bit.ly/slides-goodbye-drush-make-hello-composer2
embed: '<script async class="speakerdeck-embed" data-id="1c1e0e129ab34816bd4c4edb5f6642c2" data-ratio="1.37081659973226" src="//speakerdeck.com/assets/embed.js"></script>'
events:
- event: drupal-bristol
date: '2016-11-17'
---
One of the main outcomes of Drupal 8 was “getting off the island” with third-party code included in core and adopting modern best practices from the wider PHP ecosystem - including [Composer][1], PHPs dependency manager.

View file

@ -1,5 +1,4 @@
---
talk_id: 16
title: It All Started With A Patch
type: Lightning talk
tags: [meetup, phpsw, open-source]
@ -9,5 +8,9 @@ slides:
video:
url: https://www.youtube.com/watch?v=5FYMRR61sdo
embed: '<iframe width="560" height="315" src="https://www.youtube.com/embed/5FYMRR61sdo" frameborder="0" allowfullscreen></iframe>'
events:
- event: phpsw
date: '2017-02-08'
feedback: 'https://joind.in/event/phpsw-new-skills-february-17/it-started-with-a-patch'
---
A crash course of why and how to get involved with open source.

View file

@ -1,5 +1,4 @@
---
talk_id: 13
title: Modern Drupal Development with Composer
type: Lightning talk
tags: ['meetups', 'phpsw', 'drupal', 'composer']
@ -9,6 +8,9 @@ slides:
video:
url: https://www.youtube.com/watch?v=Yi_FPI3xHwc
embed: '<iframe width="560" height="315" src="https://www.youtube.com/embed/Yi_FPI3xHwc" frameborder="0" allowfullscreen></iframe>'
events:
- event: phpsw
date: '2016-11-09'
---
Building a Drupal application? You no longer need to download archives to add new modules or update core, or deal with Drupal specific tools to manage your codebase.

View file

@ -1,8 +1,10 @@
---
talk_id: 1
title: So, what is this Drupal thing?
video:
url: https://vimeo.com/49827006
embed: <iframe src="https://player.vimeo.com/video/49827006" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
tags: [meetup, drupal, unified-diff]
events:
- event: unifieddiff
date: '2012-09-05'
---

View file

@ -1,5 +1,4 @@
---
talk_id: 17
title: TDD - Test Driven Drupal
slides:
url: 'https://speakerdeck.com/opdavies/tdd-test-driven-drupal'
@ -19,6 +18,13 @@ meta:
height: 1440
type: image/png
use: [talks]
events:
- event: drupalcamp-london-17
date: '2017-03-04'
time: '16:15 - 17:00'
- event: drupalcamp-dublin-17
date: '2017-10-21'
time: '12:00 - 12:40'
---
Testing is important. Why? It allows developers to add new features and edit and refactor existing code without the worry of adding regressions, reduces the reliance on manual testing to discover bugs, and by taking a test driven approach, your implementation code is leaner as you only write what is needed for your tests to pass.

View file

@ -1,5 +1,4 @@
---
talk_id: 6
title: Test Drive Twig with Sculpin
slides:
url: https://speakerdeck.com/opdavies/test-drive-twig-with-sculpin
@ -7,6 +6,9 @@ slides:
code: https://github.com/opdavies/sculpin-demo
tags: [conference, drupalcamp, drupalcamp-north, sculpin, twig]
tweets: yes
events:
- event: drupalcamp-north-15
date: '2015-07-25'
---
[Sculpin][1] is a static site generator written in PHP, and based on [Symfony components][2]. It uses [YAML][3] and [Twig][4], which makes it very appealing to Drupal people wanting to learn these in preparation for Drupal 8.

28
source/talks.html.twig Normal file
View file

@ -0,0 +1,28 @@
---
layout: page
title: Talks
meta:
description: 'Information about previous and upcoming talks that Oliver has presented at conferences and user groups'
use: [talks]
---
{% block content %}
<p>I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please <a href="{{ site.url }}/contact">get in touch</a>.</p>
<h2>Last 5 Talks</h2>
{% set talks = [] %}
{% for talk in data.talks %}
{% for event in talk.events %}
{% set talks = talks|merge([{
event: event|merge(site.events[event.event]),
talk: talk,
}]) %}
{% endfor %}
{% endfor %}
{% include "talks-table" with {
talks: talks|format_talks|slice(0,5)
} %}
<p>Upcoming talks can be found in the <a href="{{ site.url }}/talks/archive">talks archive</a>.</p>
{% endblock %}

View file

@ -1,48 +0,0 @@
---
layout: default
title: Talks
meta:
description: 'Information about previous and upcoming talks that Oliver has presented at conferences and user groups'
use: [talks, posts]
---
{% block content %}
# Talks
I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please [get in touch][0].
There is also information about events that Ive attended and spoken at on my [Lanyrd][1] and [Joind.in][2] profiles.
{% set upcoming_events = [] %}
{% set past_events = [] %}
{% for date in site.events.dates %}
{% if date.date >= 'today'|date('Y-m-d') %}
{% set upcoming_events = upcoming_events|merge([{
date: date,
event: site.events.events[date.event]
}]) %}
{% else %}
{% set past_events = past_events|merge([{
date: date,
event: site.events.events[date.event]
}]) %}
{% endif %}
{% endfor %}
{% if upcoming_events is not empty %}
## Upcoming Talks
{% include 'talks-table' with { events: upcoming_events, upcoming: true } %}
{% endif %}
## Last 5 Talks
{% include 'talks-table' with { events: past_events|reverse|slice(0,5) } %}
You can view more talks in the [talks archive][3].
{% endblock %}
[0]: {{site.url}}/contact
[1]: {{site.lanyrd.url}}
[2]: {{site.joindin.url}}
[3]: {{site.url}}/talks/archive

View file

@ -0,0 +1,29 @@
---
layout: page
title: Talk Archive
use: [talks]
talks:
- title: 'Drupal and the LDAP module'
events:
- date: '2013-07-10'
event: swdug
- title: 'About the Drupal Association'
events:
- date: '2014-08-19'
event: swdug
---
<p>Here are a list of my previous conference and user group talks:</p>
{% set talks = [] %}
{% for talk in data.talks|merge(page.talks) %}
{% for event in talk.events %}
{% set talks = talks|merge([{
event: event|merge(site.events[event.event]),
talk: talk,
}]) %}
{% endfor %}
{% endfor %}
{% include 'talks-table' with { talks: talks|format_talks } %}
<p>Upcoming talks can be found on the <a href="{{ site.url }}/talks">talks page]</a>.</p>

View file

@ -1,24 +0,0 @@
---
layout: page
title: Talk Archive
use: [talks]
---
Here are a list of my previous conference and user group talks:
{% set events = [] %}
{% for date in site.events.dates|reverse %}
{% if date.date >= 'today'|date('Y-m-d') %}
{% else %}
{% set events = events|merge([{
date: date,
event: site.events.events[date.event],
}]) %}
{% endif %}
{% endfor %}
{% include 'talks-table' %}
Upcoming talks can be found on the [talks page][0].
[0]: {{site.url}}/talks

View file

@ -0,0 +1,5 @@
services:
app.twig.format_talks:
class: 'App\FormatTalks\Twig\FormatTalksExtension'
tags:
- { name: twig.extension }

View file

@ -0,0 +1,5 @@
{
"require": {
"tightenco/collect": "^5.4"
}
}

View file

@ -0,0 +1,20 @@
<?php
namespace App\FormatTalks\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
class SculpinFormatTalksExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../../Resources/config'));
$loader->load('services.yml');
}
}

View file

@ -0,0 +1,7 @@
<?php
namespace App\FormatTalks;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class SculpinFormatTalksBundle extends Bundle {}

View file

@ -0,0 +1,34 @@
<?php
namespace App\FormatTalks\Twig;
use Twig_Extension;
use Twig_SimpleFilter;
class FormatTalksExtension extends Twig_Extension
{
/**
* {@inheritdoc}
*/
public function getFilters()
{
return [
new Twig_SimpleFilter('format_talks', [$this, 'formatTalks']),
];
}
public function formatTalks($talks)
{
return collect($talks)
->sortBy('event.date')
->all();
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'format_talks';
}
}