Skip to content

Instantly share code, notes, and snippets.

@pedroborges
Created October 9, 2017 16:49
Show Gist options
  • Save pedroborges/3364f7415684410e815ef74d8c2f6e8c to your computer and use it in GitHub Desktop.
Save pedroborges/3364f7415684410e815ef74d8c2f6e8c to your computer and use it in GitHub Desktop.
Kirby Sermon Uploader
{
"require": {
"aws/aws-sdk-php": "^3.12",
"james-heinrich/getid3": "^1.9"
}
}
<?php // site/plugins/sermon-uploader.php
kirby()->hook('panel.file.upload', function($file) {
if ($file->extension() === 'mp3') {
uploadSermon($file);
}
});
function uploadSermon($file) {
$page = $file->page();
// Normalize audio filename based on page fields
$service = $page->service() ?: 'evening'; // morning or evening
$newName = "churchname_{$page->date('Y-m-d')}_{$service}.mp3";
// Generate S3 key name
$keyName = "podcasts/{$page->date('Y')}/{$newName}";
$file->rename($newName);
if (writeId3Tags($page, $file)) {
if (uploadToS3($keyName, $file)) {
updatePage($page, $file);
}
}
}
function updatePage($page, $file) {
$getID3 = new getID3();
$info = $getID3->analyze($file->root());
// Update sermon page with audio filesize, playtime and new filename
// This info is used to generate the podcast.rss file
$page->update([
'filesize' => $info['filesize'],
'playtime' => $info['playtime_string'],
'podcast' => $file->filename(),
]);
$file->delete();
}
function writeId3Tags($page, $file) {
$getID3 = new getID3();
$getID3->setOption(['encoding' => 'utf-8']);
require_once __DIR__ . '../../../vendor/james-heinrich/getid3/getid3/write.php';
$tagwriter = new getid3_writetags;
$tagwriter->filename = $file->root();
$tagwriter->tagformats = ['id3v1', 'id3v2.3'];
$tagwriter->overwrite_tags = true;
$tagwriter->remove_other_tags = false;
$tagwriter->tag_encoding = 'utf-8';
$tagwriter->tag_data = [
'title' => [$page->title()],
'artist' => [$page->author()->toAuthorFullname()],
'album' => [$page->site()->title()],
'year' => [$page->date('%Y')],
'genre' => ['Religious'],
'comment' => [$page->scripture()],
'copyright' => [$page->site()->copyright()],
'attached_picture' => [[
'picturetypeid' => 2,
'description' => 'cover',
'mime' => 'image/jpeg',
'data' => $page->parent()->image('podcast.jpg')->read(),
]]
];
return $tagwriter->WriteTags();
}
function uploadToS3($keyName, $file) {
// Add S3 configuration to site/config/config.php
//
// c::set('s3.bucket', 'S3_BUCKET');
// c::set('s3.config', [
// 'region' => 'us-east-1',
// 'version' => 'latest',
// 'credentials' => [
// 'key' => 'AWS_ACCESS_KEY_ID',
// 'secret' => 'AWS_SECRET_ACCESS_KEY',
// ],
// ]);
$s3 = new Aws\S3\S3Client(c::get('s3.config'));
$params = [
'Bucket' => c::get('s3.bucket'),
'Key' => $keyName,
'Body' => $file->read(),
];
$response = $s3->putObject($params);
return $response['@metadata']['statusCode'] === 200;
}
<?php
// Place this file on the root of the project
// Kirby will automatically load it
// See: https://getkirby.com/docs/developer-guide/configuration/folders#site-php
// Load PHP Composer packages only for the panel
if (class_exists('Panel')) require('vendor/autoload.php');
$kirby = kirby();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment