mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-23 01:01:20 +00:00

- add "ActivityPub" library to handle server to server federation and basic client to server protocols using activitypub: - add webfinger endpoint to look for actor - add actor definition with inbox / outbox / followers - remote follow an actor - create notes with possible preview cards - interract with favourites, reblogs and replies - block incoming actors and/or domains - broadcast/schedule activities to fediverse followers using a cron task - For castopod, the podcast is the actor: - overwrite the activitypub library for castopod's specific needs - perform basic interactions administrating a podcast to interact with fediverse users: - create notes with episode attachment - favourite and share a note + reply - add specific castopod_namespaces for podcasts and episodes definitions - overwrite CodeIgniter's Route service to include alternate-content option for activitystream requests - update episode publication logic: - remove publication inputs in create / edit episode form - publish / schedule or unpublish an episode after creation - the podcaster publishes a note when publishing an episode - Javascript / Typescript modules: - fix Dropdown.ts to keep dropdown menu in foreground - add Modal.ts for funding links modal - add Toggler.ts to toggle various css states in ui - User Interface: - update tailwindcss to v2 - use castopod's pine and rose colors - update public layout to a 3 column layout - add pages in public for podcast activity, episode list and notes - update episode page to include linked notes - remove previous and next episodes from episode pages - show different public views depending on whether user is authenticated or not - use Kumbh Sans and Montserrat fonts - update CodeIgniter's config files - with CodeIgniter's new requirements, update docker environments are now based on php v7.3 image - move Image entity to Libraries - update composer and npm packages to latest versions closes #69 #65 #85, fixes #51 #91 #92 #88
78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
|
|
|
use CodeIgniter\CLI\CLI;
|
|
|
|
// The main Exception
|
|
CLI::newLine();
|
|
CLI::write('[' . get_class($exception) . ']', 'light_gray', 'red');
|
|
CLI::newLine();
|
|
CLI::write($message);
|
|
CLI::newLine();
|
|
CLI::write(
|
|
'at ' .
|
|
CLI::color(
|
|
clean_path($exception->getFile()) . ':' . $exception->getLine(),
|
|
'green'
|
|
)
|
|
);
|
|
CLI::newLine();
|
|
|
|
// The backtrace
|
|
if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
|
|
$backtraces = $exception->getTrace();
|
|
|
|
if ($backtraces) {
|
|
CLI::write('Backtrace:', 'green');
|
|
}
|
|
|
|
foreach ($backtraces as $i => $error) {
|
|
$padFile = ' '; // 4 spaces
|
|
$padClass = ' '; // 7 spaces
|
|
$c = str_pad($i + 1, 3, ' ', STR_PAD_LEFT);
|
|
|
|
if (isset($error['file'])) {
|
|
$filepath = clean_path($error['file']) . ':' . $error['line'];
|
|
|
|
CLI::write($c . $padFile . CLI::color($filepath, 'yellow'));
|
|
} else {
|
|
CLI::write(
|
|
$c . $padFile . CLI::color('[internal function]', 'yellow')
|
|
);
|
|
}
|
|
|
|
$function = '';
|
|
|
|
if (isset($error['class'])) {
|
|
$type =
|
|
$error['type'] === '->'
|
|
? '()' . $error['type']
|
|
: $error['type'];
|
|
$function .=
|
|
$padClass . $error['class'] . $type . $error['function'];
|
|
} elseif (!isset($error['class']) && isset($error['function'])) {
|
|
$function .= $padClass . $error['function'];
|
|
}
|
|
|
|
$args = implode(
|
|
', ',
|
|
array_map(function ($value) {
|
|
switch (true) {
|
|
case is_object($value):
|
|
return 'Object(' . get_class($value) . ')';
|
|
case is_array($value):
|
|
return count($value) ? '[...]' : '[]';
|
|
case is_null($value):
|
|
return 'null'; // return the lowercased version
|
|
default:
|
|
return var_export($value, true);
|
|
}
|
|
}, array_values($error['args'] ?? []))
|
|
);
|
|
|
|
$function .= '(' . $args . ')';
|
|
|
|
CLI::write($function);
|
|
CLI::newLine();
|
|
}
|
|
}
|