castopod/modules/Analytics/Config/Analytics.php

77 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Modules\Analytics\Config;
use App\Entities\Episode;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\HTTP\URI;
use Modules\Analytics\OP3;
class Analytics extends BaseConfig
{
/**
* Gateway to analytic routes. By default, all analytics routes will be under `/analytics` path
*/
public string $gateway = 'analytics';
/**
* --------------------------------------------------------------------
* Route filters options
* --------------------------------------------------------------------
* @var array<string, string>
*/
public array $routeFilters = [
'analytics-full-data' => 'permission:podcast#.view',
'analytics-data' => 'permission:podcast#.view',
'analytics-filtered-data' => 'permission:podcast#.view',
];
/**
* --------------------------------------------------------------------------
* Secret Salt
* --------------------------------------------------------------------------
*
* The secret salt is a string of random characters that is used when hashing data.
* Each Castopod instance has its own secret salt so keys will never be the same.
*
* Example:
* Z&|qECKBrwgaaD>~;U/tXG1U%tSe_oi5Tzy)h>}5NC2npSrjvM0w_Q>cs=0o=H]*
*/
public string $salt = '';
/**
* --------------------------------------------------------------------------
* The Open Podcast Prefix Project Config
* --------------------------------------------------------------------------
*
* @var array<string, string>
*/
public array $OP3 = [
'host' => 'https://op3.dev/',
];
public bool $enableOP3 = false;
/**
* get the full audio file url
*/
public function getAudioUrl(Episode $episode, array $params): string
{
$audioFileURI = new URI(service('file_manager')->getUrl($episode->audio->file_key));
$audioFileURI->setQueryArray($params);
// Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
if (! $episode->is_premium && service('settings')->get(
'Analytics.enableOP3',
'podcast:' . $episode->podcast_id
)) {
$op3 = new OP3($this->OP3);
$audioFileURI = new URI($op3->wrap($audioFileURI, $episode));
}
return (string) $audioFileURI;
}
}