Files
Malin f55c91276e feat: add videodb media index with Docker stack
- Add videodb PHP/MySQL media collection manager (Blu-ray, DVD, CD)
- Dockerfile: PHP 8.1 + Apache with GD/mysqli/exif extensions
- docker-compose.yml: app on port 6761 + MySQL 8.0 with health checks
- docker-entrypoint.sh: auto-generates config.inc.php from env vars,
  waits for MySQL, initializes DB schema idempotently
- init-db.php: CLI schema installer using app's own prefix_query() logic
- Persistent volumes for DB, cache, and cover images

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 09:49:52 +02:00

340 lines
13 KiB
Smarty

{*
Edit template
$Id: edit.tpl,v 1.8 2013/03/14 17:17:27 andig2 Exp $
*}
<!-- {$smarty.template} -->
<script type="text/javascript" src="{$template}js/edit.js"></script>
<!--
<div id="images">Alternative images:</div>
-->
<form action="edit.php" method="post" enctype="multipart/form-data" name="edi">
<input type="hidden" name="id" value="{if !empty($video.id)}{$video.id}{/if}" />
<input type="hidden" name="save" value="1" />
<input type="hidden" name="autoid" value="{$autoid}" />
<input type="hidden" name="oldmediatype" value="{$video.mediatype}" />
<div class="row header">
<div class="small-12 large-7 columns">
<dl class="sub-nav" input-radio>
<dt>{$lang.radio_look_caption}:</dt>
{foreach $lookup key=k item=v}
<dd {if $lookup_id==$k}class="active"{/if}><a href="lookup" value="{$k}">{$v}</a></dd>
{/foreach}
</dl>
</div><!-- col -->
<div class="small-12 large-5 columns">
<div class="row collapse">
<div class="small-6 large-6 columns">
<dl class="sub-nav" input-checkbox>
<dt>{$lang.create_}</dt>
<dd {if !empty($add_flag)}class="active"{/if}><a href="add_flag" value="1">{$lang.add_another}</a></dd>
</dl>
</div><!-- col -->
<div class="small-6 large-6 columns">
<ul class="button-group right hide-for-small">
<li>
<a href="{if !empty($video.id)}show.php?id={$video.id}{else}index.php{/if}" class="button small">{$lang.cancel}</a>
<a href="#" class="button small submit">{$lang.save}</a>
</li>
</ul>
<ul class="button-group right hide-for-medium-up">
<li>
<a href="{if !empty($video.id)}show.php?id={$video.id}{else}index.php{/if}" class="button tiny">{$lang.cancel}</a>
<a href="#" class="button tiny submit">{$lang.save}</a>
</li>
</ul>
</div>
</div><!-- row -->
</div><!-- col -->
</div><!-- button-bar -->
<div class="row">
<div class="small-12 large-10 columns large-centered">
{if $http_error}
<div class="alert-box alert">
{$http_error}
<a href="#" class="close">&times;</a>
</div>
{/if}
<h4 class="subheader">{$lang.main_details}</h4>
<div class="row">
<div class="small-12 large-6 columns">
<label for="title">{$lang.title} <a href="javascript:void(lookupData(document.edi.title.value))"><i class="foundicon-search inline"></i></a></label>
<input type="text" name="title" id="title" value="{if !empty($video.q_title)}{$video.q_title}{/if}" class="autofocus" />
</div><!-- col -->
<div class="small-12 large-6 columns">
<label for="subtitle">{$lang.subtitle} <a href="javascript:void(lookupData(document.edi.subtitle.value))"><i class="foundicon-search inline"></i></a></label>
<input type="text" name="subtitle" id="subtitle" value="{if !empty($video.q_subtitle)}{$video.q_subtitle}{/if}"/>
</div><!-- col -->
</div><!-- row -->
<div class="row">
<div class="small-6 large-3 columns">
<label for="director">{$lang.director}</label>
<input type="text" name="director" id="director" value="{if !empty($video.q_director)}{$video.q_director}{/if}"/>
</div><!-- col -->
<div class="small-2 large-1 columns">
<label for="year">{$lang.year}</label>
<input type="text" name="year" id="year" alue="{if !empty($video.year)}{$video.year}{/if}"/>
</div><!-- col -->
<div class="small-4 large-2 columns">
<div class="row collapse">
<label for="runtime">{$lang.runtime}</label>
<div class="small-8 columns">
<input type="text" name="runtime" id="runtime" value="{if !empty($video.q_runtime)}{$video.q_runtime}{/if}" />
</div><!-- col -->
<div class="small-4 columns"><span class="postfix">min</span></div>
</div><!-- row -->
</div><!-- col -->
<div class="small-6 large-3 columns">
<label for="country">{$lang.country}</label>
<input type="text" name="country" id="country" value="{if !empty($video.q_country)}{$video.q_country}{/if}"/>
</div><!-- col -->
<div class="small-6 large-3 columns">
<label for="language">{$lang.language}</label>
{$video.f_language}
</div><!-- col -->
</div><!-- row -->
<div class="row">
<div class="small-2 large-1 columns">
<dl class="sub-nav" input-radio>
<dt>{$lang.rating}</dt>
</dl>
</div><!-- col -->
<div class="small-4 large-5 columns">
<dl class="sub-nav tight" input-radio>
{if !empty($video.rating)}
{$rate = $video.rating}
{else}
{$rate = 0}
{/if}
{for $r=0 to 10}
<dd {if $r == $rate|round}class="active"{/if}><a href="rating" value="{$r}">{$r}</a></dd>
{/for}
</dl>
</div><!-- col -->
<div class="small-6 columns">
<dl class="sub-nav inline" input-checkbox>
<dd {if !empty($video.seen)}class="active"{/if}><a href="seen" value="1">{$lang.seen}</a></dd>
</dl>
<dl class="sub-nav inline" input-checkbox>
<dd {if !empty($video.istv)}class="active"{/if}><a href="istv" value="1">{$lang.tvepisode}</a></dd>
</dl>
<dl class="sub-nav inline" input-checkbox>
{* <dd {if $video.3d}class="active"{/if}><a href="3d" value="1">{$lang.3d}3D</a></dd> *}
<dd {if !empty($video.3d)}class="active"{/if}>
<a href="3d" value="1">{$lang.3d}</a>
</dl>
</div><!-- col -->
</div><!-- row -->
<div class="row">
<div class="small-2 large-1 columns">
<dl class="sub-nav" input-checkbox>
<dt>{$lang.genre}</dt>
</dl>
</div><!-- col -->
<div class="small-10 large-11 columns">
<dl class="sub-nav" input-checkbox>
{foreach $genres as $genre}
<dd {if !empty($genre.checked)}class="active"{/if}><a href="genres[]" value="{$genre.id}">{$genre.name}</a></dd>
{/foreach}
</dl>
</div><!-- col -->
</div><!-- row -->
<h4 class="subheader">{$lang.media_details}</h4>
<div class="row">
<div class="small-12 large-6 columns">
<div class="row">
<div class="small-6 columns">
<label for="mediatype">{$lang.mediatype}</label>
{html_options name="mediatype" options=$mediatypes selected=$video.mediatype}
</div><!-- col -->
<div class="small-6 columns">
<label for="diskid">{$lang.diskid}</label>
<input type="text" name="diskid" id="diskid" value="{if !empty($video.q_diskid)}{$video.q_diskid}{/if}" />
</div><!-- col -->
</div></div><!-- row/col -->
<div class="small-12 large-6 columns">
<div class="row">
{if !empty($owners)}
<div class="small-6 columns">
<label>{$lang.owner}</label>
{html_options name=owner_id options=$owners selected=$video.owner_id}
</div><!-- col -->
{/if}
<div class="{if !empty($owners)}small-6{else}small-12{/if} columns">
<label for="imdbID">
{$lang.extid}
</label>
<div class="row collapse">
<div class="small-8 columns">
<input type="text" name="imdbID" id="imdbID" value="{if !empty($video.q_imdbID)}{$video.q_imdbID}{/if}" />
</div><!-- col -->
<div class="small-4 columns">
<a href="{if !empty($link)}{$link}{/if}" target="_blank" class="button postfix {if empty($link)}disabled{/if}">{$lang.visit}</a>
</div><!-- col -->
</div><!-- row -->
</div><!-- col -->
</div></div><!-- row/col -->
</div><!-- row -->
<div class="row">
<div class="small-12 large-6 columns">
<label for="imgurl">
{$lang.coverurl}
<a href="javascript:void(lookupImage(document.edi.title.value))"><i class="foundicon-search inline"></i></a>
</label>
<input type="text" name="imgurl" id="imgurl" value="{if !empty($video.q_imgurl)}{$video.q_imgurl}{/if}" />
</div><!-- col -->
<div class="small-12 large-6 columns">
<label>{$lang.coverupload}</label>
<div class="row collapse">
<div class="small-10 columns">
<input type="file" name="coverupload" id="coverupload" />
</div><!-- col -->
<div class="small-2 columns">
<a href='#' class="button postfix input-browse">{$lang.input_browse}</a>
</div><!-- col -->
</div>
</div><!-- col -->
</div><!-- row -->
<h4 class="subheader">{$lang.description_details}</h4>
<div class="row">
<div class="small-12 large-6 columns">
<label for="plot">{$lang.plot}</label>
<textarea class="large" name="plot" id="plot" wrap="virtual">{if !empty($video.q_plot)}{$video.q_plot}{/if}</textarea>
</div><!-- col -->
<div class="small-12 large-6 columns">
<label for="actors">{$lang.cast}</label>
<textarea class="large" name="actors" id="actors" wrap="off">{if !empty($video.q_actors)}{$video.q_actors}{/if}</textarea>
</div><!-- col -->
<div class="small-12 columns">
<label for="comment">{$lang.comment}</label>
<textarea class="large" name="comment" id="comment" wrap="virtual">{if !empty($video.q_comment)}{$video.q_comment}{/if}</textarea>
</div><!-- col -->
</div><!-- row -->
<h4 class="subheader">{$lang.file_details}</h4>
<div class="row">
<div class="small-12 large-6 columns">
<label for="filename">{$lang.filename}</label>
<input type="text" name="filename" id="filename" value="{if !empty($video.q_filename)}{$video.q_filename}{/if}"/>
</div><!-- col -->
<div class="small-6 large-4 columns">
<label for="filedate">{$lang.filedate}</label>
<input type="text" name="filedate" id="filedate" value="{if !empty($video.q_filedate)}{$video.q_filedate}{/if}"/>
</div><!-- col -->
<div class="small-6 large-2 columns">
<div class="row collapse">
<label for="filesize">{$lang.filesize}</label>
<div class="small-8 columns">
<input type="text" name="filesize" id="filesize" value="{if !empty($video.q_filesize)}{$video.q_filesize}{/if}"/>
</div><!-- col -->
<div class="small-4 columns"><span class="postfix">{$lang.bytes}</span></div>
</div><!-- row -->
</div><!-- col -->
</div><!-- row -->
<div class="row">
<div class="small-6 large-5 columns">
<label for="audio_codec">{$lang.audiocodec}</label>
<input type="text" name="audio_codec" id="audio_codec" value="{if !empty($video.q_audio_codec)}{$video.q_audio_codec}{/if}" />
</div><!-- col -->
<div class="small-6 large-5 columns">
<label for="video_codec">{$lang.videocodec}</label>
<input type="text" name="video_codec" id="video_codec" value="{if !empty($video.q_video_codec)}{$video.q_video_codec}{/if}" />
</div><!-- col -->
<div class="small-12 large-2 columns">
<div class="row collapse">
<label for="video_width">{$lang.dimension}</label>
<div class="small-5 columns">
<input type="text" name="video_width" id="video_width" value="{if !empty($video.q_video_width)}{$video.q_video_width}{/if}"/>
</div><!-- col -->
<div class="small-2 column"><span class="postfix">x</span></div>
<div class="small-5 columns">
<input type="text" name="video_height" id="video_height" value="{if !empty($video.q_video_height)}{$video.q_video_height}{/if}"/>
</div><!-- col -->
</div><!-- row -->
</div><!-- col -->
</div><!-- row -->
{if !empty($video.custom1name) || !empty($video.custom2name) || !empty($video.custom3name) || !empty($video.custom4name)}
<h4 class="subheader">{$lang.custom_details}</h4>
<div class="row">
{if !empty($video.custom1name)}
<div class="small-6 columns">
<label>{$video.custom1name}</label>{$video.custom1in}
</div><!-- col -->
{/if}
{if !empty($video.custom2name)}
<div class="small-6 columns">
<label>{$video.custom2name}</label>{$video.custom2in}
</div><!-- col -->
{/if}
</div><!-- row -->
<div class="row">
{if !empty($video.custom3name)}
<div class="small-6 columns">
<label>{$video.custom3name}</label>{$video.custom3in}
</div><!-- col -->
{/if}
{if !empty($video.custom4name)}
<div class="small-6 columns">
<label>{$video.custom4name}</label>{$video.custom4in}
</div><!-- col -->
{/if}
</div><!-- row -->
{/if}
</div><!-- col -->
</div><!-- row -->
</form>