mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
feat: dual upload system — direct file storage + PeerTube API integration
Adds a parallel PeerTube upload system behind a feature flag (disabled by default until upload quota is granted). When disabled, the existing direct file upload path works unchanged. Files: - src/PeerTubeService.php — credential storage (encrypted), OAuth2 token retrieval, multipart upload to /api/v1/videos/upload - migrations/021_peertube_settings.sql — peertube_settings singleton table + peertube_upload_enabled site_setting (default 0) - admin/actions/settings.php — peertube section handler - admin/parametres.php / templates/admin/parametres.php — PeerTube UI section - partage/fichiers-fragment.php — shows file inputs when enabled, TODO notice otherwise - ThesisCreateController / ThesisEditController — handlePeerTubeUpload() - tfe.php — PeerTube iframe embed detection - AdminLogger — logPeerTubeUpdate()
This commit is contained in:
@@ -443,6 +443,7 @@
|
||||
$isAudio = in_array($ext, ['mp3','ogg','oga','wav','flac','aac','m4a'], true) || $fileType === 'audio';
|
||||
$isPdf = ($ext === 'pdf') || $fileType === 'main';
|
||||
$isWebsite = ($fileType === 'website');
|
||||
$isPeerTube = ($isExternalUrl && str_contains($filePath, '/videos/watch/'));
|
||||
$isOther = !($isImage || $isVideo || $isAudio || $isPdf || $isWebsite);
|
||||
|
||||
$_vttPath = null;
|
||||
@@ -485,6 +486,22 @@
|
||||
<img src="<?= $mediaUrl ?>"
|
||||
alt="<?= htmlspecialchars($caption !== '' ? $caption : $data['title'] . ' — ' . ($data['authors'] ?? '')) ?>">
|
||||
<?php elseif ($isVideo): ?>
|
||||
<?php if ($isPeerTube): ?>
|
||||
<iframe src="<?= $mediaUrl ?>embed"
|
||||
width="100%" height="400px"
|
||||
style="border:none"
|
||||
title="<?= $fileName ?>"
|
||||
sandbox="allow-same-origin allow-scripts"
|
||||
allowfullscreen
|
||||
loading="lazy">
|
||||
</iframe>
|
||||
<p class="tfe-pdf-fallback">
|
||||
<a href="<?= $mediaUrl ?>" target="_blank" rel="noopener">
|
||||
Ouvrir dans PeerTube
|
||||
<span class="sr-only">(ouvre dans un nouvel onglet)</span>
|
||||
</a>
|
||||
</p>
|
||||
<?php else: ?>
|
||||
<video width="100%" controls>
|
||||
<source src="<?= $mediaUrl ?>" type="video/<?= htmlspecialchars($ext === 'mov' ? 'mp4' : $ext) ?>">
|
||||
<?php if ($_vttPath): ?>
|
||||
@@ -493,7 +510,23 @@
|
||||
srclang="fr" label="Sous-titres" default>
|
||||
<?php endif; ?>
|
||||
</video>
|
||||
<?php endif; ?>
|
||||
<?php elseif ($isAudio): ?>
|
||||
<?php if ($isPeerTube): ?>
|
||||
<iframe src="<?= $mediaUrl ?>embed"
|
||||
width="100%" height="170px"
|
||||
style="border:none"
|
||||
title="<?= $fileName ?>"
|
||||
sandbox="allow-same-origin allow-scripts"
|
||||
loading="lazy">
|
||||
</iframe>
|
||||
<p class="tfe-pdf-fallback">
|
||||
<a href="<?= $mediaUrl ?>" target="_blank" rel="noopener">
|
||||
Ouvrir dans PeerTube
|
||||
<span class="sr-only">(ouvre dans un nouvel onglet)</span>
|
||||
</a>
|
||||
</p>
|
||||
<?php else: ?>
|
||||
<audio controls class="tfe-audio">
|
||||
<source src="<?= $mediaUrl ?>" type="audio/<?= htmlspecialchars(match($ext) {
|
||||
'mp3' => 'mpeg',
|
||||
@@ -506,6 +539,7 @@
|
||||
}) ?>">
|
||||
Votre navigateur ne supporte pas la lecture audio.
|
||||
</audio>
|
||||
<?php endif; ?>
|
||||
<?php else: /* other — download only */ ?>
|
||||
<div class="tfe-download-file">
|
||||
<a href="<?= $mediaUrl ?>&download=1" class="tfe-download-link">
|
||||
|
||||
Reference in New Issue
Block a user