Created
October 9, 2017 16:49
-
-
Save pedroborges/3364f7415684410e815ef74d8c2f6e8c to your computer and use it in GitHub Desktop.
Kirby Sermon Uploader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"require": { | |
"aws/aws-sdk-php": "^3.12", | |
"james-heinrich/getid3": "^1.9" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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