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>
This commit is contained in:
2026-05-11 09:49:52 +02:00
commit f55c91276e
1230 changed files with 252321 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
body {font-family:sans-serif; font-size:14px; background-color: #9FAABB;}
a:link {text-decoration:none; color:#000000;}
a:visited {text-decoration:none; color:#000000;}
a:active {text-decoration:none; color:#000000;}
a:hover {text-decoration:none; color: red;}
.even {background-color:#D3DAE3;}
.odd {background-color:#FFFFFF;}
.lent {background-color:#999999;}
.center {text-align: center;}
.filter {font-size:12px; background-color:#C1D7EB;}
.list_title {font-weight:bold}
.list_diskid {font-weight:bold;font-size:12px}
.list_seen {font-size:12px}
.list_info {font-style:italic}
.list_plot {font-size:12px}
.tableborder {border-width:1px; border-style:solid; border-color:navy;}
.infobox {border-width:1px; border-style:solid; border-color:#000000; font-size:18px;}
.infobox td {text-align:center}
.show_title {font-size:20pt; font-weight:bolder;}
.show_subtitle {font-size:16pt; font-weight:bolder;}
.notavail {color:#ff0000; font-weight:bold}
.logo {color: navy; font-size:28px; font-weight:bolder; font-style:italic;}
.splitbrain {font-size:10px;}
.version {font-size:10px;}
.example {font-family:monospace; color:#004444;}
.textbox {font-family:sans-serif; font-size:12px; width:300px; height:120px }
/* setup screenshot thumbnails */
.setup-thumb {
float: left;
width: 105px;
text-align: center;
font-size: 12px;
border: 1px solid #999;
margin: 0 15px 15px 0;
padding: 5px;
}
.setup-thumb a:hover {
text-decoration: none;
}
/* this fixes a problem with opera */
tr {vertical-align: top;}
td {vertical-align: top; text-align:left}
/* special formatings for stuff in the helpbrowser */
.helpbrowser code {font-family:monospace; color:#004444;}
.helpbrowser td {background-color:#EEEEEE;}
.helpbrowser th {background-color:#EEEEEE;}
.helpbrowser h1 {text-align:center; font-size:20pt; font-weight:bolder;}
.helpbrowser h2 {margin-left:10px; font-size:16pt; font-weight:bolder;}
.helpbrowser h3 {margin-left:30px; font-size:12pt; font-weight:bolder; font-variant:small-caps}
.helpbrowser p {text-align:justify; margin-left:50px; width:90%}
.helpbrowser pre {margin-left:50px; font-family:monospace; color:#004444;}
.helpbrowser ul {margin-left:50px; width:90%}
.helpbrowser dl {margin-left:50px; width:90%}
.helpbrowser dd {margin-bottom:10px;}
.helpbrowser table {margin-left:50px; width:90%}

View File

@@ -0,0 +1,89 @@
{*
Template for the borrowing a single disk
$Id: borrow.tpl,v 2.10 2008/03/09 14:57:22 andig2 Exp $
*}
<div align="center">
{if $diskid != '' && $editable}
<table width="50%" class="infobox">
<tr>
<td align="center" style="text-align:center">
<form action="borrow.php" name="borrow" id="borrow" method="post">
<input type="hidden" name="diskid" id="diskid" value="{$diskid}" />
{if $who != ''}
<br />
{$lang.diskid} {$diskid}
{$lang.lentto} {$who} ({$dt})
<br />
<input type="hidden" name="return" id="return" value="1" />
<input type="submit" value="{$lang.returned}" />
{else}
<br />
{$lang.diskid} {$diskid} {$lang.available}
<br />
{$lang.borrowto}
<input type="text" size="40" maxlength="255" name="who" id="who" />
<input type="submit" value="{$lang.okay}" />
{/if}
<br />
<br />
</form>
</td>
</tr>
</table>
<script language="JavaScript" type="text/javascript">
if (document.forms['borrow'].who) document.forms['borrow'].who.focus();
</script>
{/if}
<br />
{if $config.multiuser}
<table>
<tr>
<td><h3>{$lang.curlentfrom}</h3></td>
<td><h3><form action="borrow.php">{html_options name=owner options=$owners selected=$owner onchange="submit()"}</form></h3></td>
<td><h3>:</h3></td>
</tr>
</table><br/>
{else}
<h3>{$lang.curlent}</h3>
{/if}
{if $borrowlist}
<table width="100%" class="tableborder">
<tr class="{cycle values="even,odd"}">
<th>{$lang.diskid}</th>
{if $config.multiuser}<th>{$lang.owner}</th>{/if}
<th>{$lang.title}</th>
<th>{$lang.lentto}</th>
<th>{$lang.date}</th>
<th></th>
</tr>
{foreach item=disk from=$borrowlist}
<tr class="{cycle values="even,odd"}">
<td align="center" style="text-align:center"><a href="search.php?q={$disk.diskid}&fields=diskid&nowild=1">{$disk.diskid}</a></td>
{if $config.multiuser}
<td align="center" style="text-align:center">{$disk.owner}</td>
{/if}
<td align="center" style="text-align:center">
<a href="show.php?id={$disk.id}">{$disk.title}</a>
{if $disk.count > 1} ... {/if}
</td>
<td align="center" style="text-align:center">{$disk.who}</td>
<td align="center" style="text-align:center">{$disk.dt}</td>
<td align="center" style="text-align:center">
{if $disk.editable}
<a href="borrow.php?diskid={$disk.diskid}&return=1">[ {$lang.returned} ]</a>
{/if}
</td>
</tr>
{/foreach}
</table>
{else}
{$lang.l_nothing}
{/if}
</div>
<br /><br />

View File

@@ -0,0 +1,28 @@
{*
Index of the contrib content
$Id: contrib.tpl,v 2.2 2005/05/26 07:35:45 andig2 Exp $
*}
<table width="100%" class="tablelist" cellspacing="0" cellpadding="0">
<tr><td colspab="3" height="20px">&nbsp;</td></tr>
{counter start=0 print=false name=contentcount}
{foreach item=file from=$files}
{cycle values="even,odd" assign=CLASS print=false}
<tr class="{$CLASS}">
<td width="10%">
<td width="80%" align="left">
<table>
<tr>
<td>
<a href="{$file[0]}">{$file[1]}</a>
</td>
</tr>
</table>
</td>
<td width="10%">
{counter assign=count name=contentcount}
</tr>
{/foreach}
<tr><td colspab="3" height="20px">&nbsp;</td></tr>
</table>

View File

@@ -0,0 +1,72 @@
body {font-family:sans-serif;font-size:16px;}
a:link {text-decoration:none; color:#000044;}
a:visited {text-decoration:none; color:#000044;}
a:active {text-decoration:none; color:#000044;}
a:hover {text-decoration:underline;}
.even {background-color:#FFFFFF;}
.odd {background-color:#EEEEEE;}
.lent {background-color:#FFCCCC;}
.center {text-align: center;}
.filter {font-size:12px}
.list_title {font-weight:bold}
.list_diskid {font-weight:bold;font-size:12px}
.list_seen {font-size:12px}
.list_info {font-style:italic}
.list_plot {font-size:12px}
.tableborder {border-width:1px; border-style:solid; border-color:#000000;}
.infobox {border-width:1px; border-style:solid; border-color:#000000; font-size:18px;}
.infobox td {text-align:center}
.show_title {font-size:20pt; font-weight:bolder;}
.show_subtitle {font-size:16pt; font-weight:bolder;}
.show_id {font-size:16pt; font-weight:bolder;}
.notavail {color:#ff0000; font-weight:bold}
.logo {font-size:28px; font-weight:bolder; font-style:italic;}
.splitbrain {font-size:10px;}
.version {font-size:10px;}

View File

@@ -0,0 +1,15 @@
{*
Deletion confirmation
$Id: delete.tpl,v 2.0 2003/08/20 19:07:34 agohr Exp $
*}
<br />
<div align="center">
<table width="50%" class="infobox" style="text-align:left">

View File

@@ -0,0 +1,304 @@
{*
Template for the edit interface
$Id: edit.tpl,v 2.19 2007/12/29 10:23:18 andig2 Exp $
*}
{if $http_error}
<pre>{$http_error}</pre>
{/if}
<script language="JavaScript" type="text/javascript" src="javascript/edit.js"></script>
<form action="edit.php" id="edi" name="edi" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" id="id" value="{if !empty($video.id)}{$video.id}{/if}" />
<input type="hidden" name="engine" id="engine" value="{if !empty($engine)}{$engine}{/if}" />
<input type="hidden" name="save" id="save" value="1" />
<table class="tableborder">
<tr>
<td>
<table>
<tr>
<td>
{$lang.title}
</td>
<td>
<input type="text" name="title" id="title" value="{if !empty($video.q_title)}{$video.q_title}{/if}" size="43" maxlength="255" />
<a href="javascript:void(lookupData(document.edi.title.value))"><img src="images/search.gif" alt="" border="0" align="middle" /></a>
</td>
</tr>
<tr>
<td>
{$lang.subtitle}
</td>
<td>
<input type="text" name="subtitle" id="subtitle" value="{if !empty($video.q_subtitle)}{$video.q_subtitle}{/if}" size="43" maxlength="255" />
<a href="javascript:void(lookupData(document.edi.subtitle.value))"><img src="images/search.gif" alt="" border="0" align="middle" /></a>
</td>
</tr>
<tr>
<td>
{$lang.language}
</td>
<td>
{$video.f_language}
</td>
</tr>
<tr>
<td>
{$lang.diskid}
</td>
<td>
<input type="text" name="diskid" id="diskid" value="{if !empty($video.q_diskid)}{$video.q_diskid}{/if}" size="15" maxlength="255" />
<input type="hidden" name="autoid" id="autoid" value="{$autoid}" />
<input type="hidden" name="oldmediatype" id="oldmediatype" value="{$video.mediatype}" />
{$lang.mediatype} {html_options name="mediatype" options=$mediatypes selected=$video.mediatype}
</td>
</tr>
<tr>
<td>
<label for="istv">{$lang.tvepisode}</label>
</td>
<td>
{if !empty($video.istv)}
{$istv_val = $video.istv}
{else}
{$istv_val = null}
{/if}
{html_checkbox name="istv" value=1 checked=$istv_val}
</td>
</tr>
<tr>
<td>
<label for="seen">{$lang.seen}</label>
</td>
<td>
{if !empty($video.seen)}
{$seen_val = $video.seen}
{else}
{$seen_val = null}
{/if}
{html_checkbox name="seen" value=1 checked=$seen_val}
</td>
</tr>
<tr>
<td>
{$lang.filename}
</td>
<td>
<input type="text" name="filename" id="filename" value="{if !empty($video.q_filename)}{$video.q_filename}{/if}" size="45" maxlength="255" />
</td>
</tr>
<tr>
<td>
{$lang.filesize}
</td>
<td>
<input type="text" name="filesize" id="filesize" value="{if !empty($video.q_filesize)}{$video.q_filesize}{/if}" size="10" maxlength="15" /> bytes
</td>
</tr>
<tr>
<td>
{$lang.filedate}
</td>
<td>
<input type="text" name="filedate" id="filedate" value="{if !empty($video.q_filedate)}{$video.q_filedate}{/if}" maxlength="20" />
</td>
</tr>
<tr>
<td>
{$lang.audiocodec}
</td>
<td>
<input type="text" name="audio_codec" id="audio_codec" value="{if !empty($video.q_audio_codec)}{$video.q_audio_codec}{/if}" />
</td>
</tr>
<tr>
<td>
{$lang.videocodec}
</td>
<td>
<input type="text" name="video_codec" id="video_codec" value="{if !empty($video.q_video_codec)}{$video.q_video_codec}{/if}" />
</td>
</tr>
<tr>
<td>
{$lang.dimension}
</td>
<td>
<input type="text" name="video_width" id="video_width" value="{if !empty($video.q_video_width)}{$video.q_video_width}{/if}" size="5" maxlength="4" /> x
<input type="text" name="video_height" id="video_height" value="{if !empty($video.q_video_height)}{$video.q_video_height}{/if}" size="5" maxlength="4" />
</td>
</tr>
<tr>
<td>{$lang.rating}:</td>
<td>
{if !empty($video.rating)}
{rating_input value = $video.rating}
{else}
{rating_input value = null}
{/if}
</td>
</tr>
<tr>
<td colspan="2">
{$lang.genre}
<br />
{$genreselect}
</td>
</tr>
{if !empty($video.custom1name)}
<tr>
<td>{$video.custom1name}</td>
<td>{$video.custom1in}</td>
</tr>
{/if}
{if !empty($video.custom2name)}
<tr>
<td>{$video.custom2name}</td>
<td>{$video.custom2in}</td>
</tr>
{/if}
{if !empty($video.custom3name)}
<tr>
<td>{$video.custom3name}</td>
<td>{$video.custom3in}</td>
</tr>
{/if}
{if !empty($video.custom4name)}
<tr>
<td>{$video.custom4name}</td>
<td>{$video.custom4in}</td>
</tr>
{/if}
</table>
</td>
<td>
<table>
<tr>
<td>
IMDb-ID
</td>
<td>
<input type="text" name="imdbID" id="imdbID" value="{if !empty($video.q_imdbID)}{$video.q_imdbID}{/if}" size="15" maxlength="30" onchange="{literal}if(document.edi.imdbID.value != '') {document.edi.lookup1.checked=true} else {document.edi.lookup0.checked=true}{/literal}" />
{if !empty($video.q_imdbID) && $video.q_imdbID != ''}
<a href="http://uk.imdb.com/Title?{$video.q_imdbID}" target="_blank">{$lang.visit}</a>
{/if}
</td>
</tr>
<tr>
<td>
{$lang.coverurl}
</td>
<td>
<input type="text" name="imgurl" id="imgurl" value="{if !empty($video.q_imgurl)}{$video.q_imgurl}{/if}" size="45" maxlength="255" />
<a href="javascript:void(lookupImage(document.edi.title.value))"><img src="images/search.gif" alt="" border="0" align="middle" /></a>
</td>
</tr>
<tr>
<td>
{$lang.coverupload}
</td>
<td>
<input type="file" name="coverupload" id="coverupload" size="30" />
</td>
</tr>
<tr>
<td>
{$lang.country}
</td>
<td>
<input type="text" name="country" id="country" value="{if !empty($video.q_country)}{$video.q_country}{/if}" size="45" maxlength="255" />
</td>
</tr>
<tr>
<td>
{$lang.director}
</td>
<td>
<input type="text" name="director" id="director" value="{if !empty($video.q_director)}{$video.qq_director}{/if}" size="45" maxlength="255" />
</td>
</tr>
<tr>
<td>
{$lang.runtime}
</td>
<td>
<input type="text" name="runtime" id="runtime" value="{if !empty($video.q_runtime)}{$video.q_runtime}{/if}" size="5" maxlength="5" />min
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$lang.year}
<input type="text" name="year" id="year" value="{if !empty($video.q_year)}{$video.q_year}{/if}" size="5" maxlength="4" />
</td>
</tr>
<tr>
<td>
{$lang.plot}
</td>
<td>
<textarea cols="36" rows="6" name="plot" id="plot" wrap="virtual" class="textbox">{if !empty($video.q_plot)}{$video.q_plot}{/if}</textarea>
</td>
</tr>
<tr>
<td>
{$lang.cast}
</td>
<td>
<textarea cols="36" rows="6" name="actors" id="actors" wrap="off" class="textbox">{if !empty($video.q_actors)}{$video.q_actors}{/if}</textarea>
</td>
</tr>
<tr>
<td>
{$lang.comment}
</td>
<td>
<textarea cols="36" rows="6" name="comment" id="comment" wrap="virtual" class="textbox">{if !empty($video.q_comment)}{$video.q_comment}{/if}</textarea>
</td>
</tr>
{if !empty($owners)}
<tr>
<td>
{$lang.owner}
</td>
<td>
{html_options name=owner_id options=$owners selected=$video.owner_id}
</td>
</tr>
{/if}
</table>
</td>
</tr>
</table>
<b>{$lang.radio_look_caption}:</b> {html_radios name=lookup options=$lookup checked="$lookup_id"}
{if !empty($add_flag)}{html_checkbox name="add_flag" value=1 checked=$add_flag label=$lang.add_another}{/if}
<div align="center"><input type="submit" value="{$lang.save}" accesskey="s" /></div>
<br />
</form>

View File

@@ -0,0 +1,31 @@
{*
The filters on top of the browse page
$Id: filters.tpl,v 2.4 2005/05/24 17:49:34 chinamann Exp $
*}
<form action="index.php" id="browse" name="browse">
<table width="100%" class="tableborder">
<tr>
<td class="filter">
{html_radios name=filter options=$filters checked=$filter label_class="filterlink" onclick="submit()"}
</td>
{if !empty($order_options) AND $filter<>'new'}
<td align="right" class="filter" nowrap="nowrap">
<label class="filterlink" for="order">{$lang.order}: </label>{html_options name="order" id="order" options=$order_options selected=$order onchange="submit()"}
</td>
{/if}
<td align="right" class="filter">
<input type="checkbox" name="showtv" id="showtv" value="1" {if $showtv}checked="checked"{/if} onclick="submit()" /><label for="showtv">{$lang.radio_showtv}</label>
</td>
{if !empty($owners)}
<td class="filter">
<div align="right">
{html_options name=owner options=$owners selected=$owner onchange="submit()"}
</div>
</td>
{/if}
<td align="right">
<input type="submit" value="{$lang.okay}" name="OK" id="OK" />
</td>
</tr>
</table>
</form>

View File

@@ -0,0 +1,26 @@
{*
This is the footer which is displayed on bottom of every page
$Id: footer.tpl,v 2.5 2008/02/17 17:44:54 andig2 Exp $
*}
{$DEBUG}
<table width="100%" class="footertable">
<tr>
<td width="50">
<a href="#top"><img src="images/top.gif" border="0" alt="" class="toplink" /></a>
</td>
<td align="left" style="text-align:left">
{if !empty($loggedin)}
<span class="version">{$lang.loggedinas} {$loggedin}</span>
{/if}
</td>
<td align="right" style="text-align:right">
<a href="https://github.com/andig/videodb.git" class="splitbrain">v.{$version}</a>
</td>
</tr>
</table>
</div>
</body>
</html>

View File

@@ -0,0 +1,37 @@
{*
This is the header which is displayed on top of every page
$Id: header.tpl,v 2.13 2013/03/14 17:17:27 andig2 Exp $
*}
{include file="xml.tpl"}
<body>
<a name="top"></a>
<div align="center">
<table width="100%" class="menutable">
<tr>
<td width="120" valign="bottom">
<span class="logo">VideoDB</span>
</td>
<td width="100%" valign="bottom" align="center" style="text-align:center">
{if !empty($header.browse)}[&nbsp;<a href="{$header.browse}" accesskey="i">{$lang.browse}</a>&nbsp;] {/if}
{if !empty($header.trace)}[&nbsp;<a href="{$header.trace}">{$lang.imdbbrowser}</a>&nbsp;] {/if}
{if !empty($header.random)}[&nbsp;<a href="{$header.random}">{$lang.random}</a>&nbsp;] {/if}
{if !empty($header.search)}[&nbsp;<a href="{$header.search}" accesskey="f">{$lang.search}</a>&nbsp;] {/if}
{if !empty($header.new)}[&nbsp;<a href="{$header.new}" accesskey="n">{$lang.n_e_w}</a>&nbsp;] {/if}
{if !empty($header.edit)}[&nbsp;<a href="{$header.edit}" accesskey="e">{$lang.edit}</a>&nbsp;] {/if}
{if !empty($header.view)}[&nbsp;<a href="{$header.view}">{$lang.view}</a>&nbsp;] {/if}
{if !empty($header.del)}[&nbsp;<a href="{$header.del}" onclick="return(confirm('{$lang.really_del|escape:javascript|escape}?'))">{$lang.delete}</a>&nbsp;] {/if}
{if !empty($header.contrib)}[&nbsp;<a href="{$header.contrib}" accesskey="c">{$lang.contrib}</a>&nbsp;] {/if}
{if !empty($header.borrow)}[&nbsp;<a href="{$header.borrow}" accesskey="b">{$lang.borrow}</a>&nbsp;] {/if}
{if !empty($header.stats)}[&nbsp;<a href="{$header.stats}">{$lang.statistics}</a>&nbsp;] {/if}
{if !empty($header.setup)}[&nbsp;<a href="{$header.setup}">{$lang.setup}</a>&nbsp;] {/if}
{if !empty($header.profile)}[&nbsp;<a href="{$header.profile}">{$lang.profile}</a>&nbsp;] {/if}
{if !empty($header.help)}[&nbsp;<a href="{$header.help}" accesskey="h">{$lang.help}</a>&nbsp;] {/if}
{if !empty($header.login)}[&nbsp;<a href="{$header.login}" accesskey="l">{if !empty($loggedin)}{$lang.logout}{else}{$lang.login}{/if}</a>&nbsp;]{/if}
</td>
</tr>
</table>
<br />

View File

@@ -0,0 +1,7 @@
<table width="100%" class="tableborder">
<tr><td>
<span class="helpbrowser">
{$helptext}

View File

@@ -0,0 +1,71 @@
/* drJeckyll's style */
body {font-family:sans-serif; font-size:14px; background-color: #cbc9f4;}
a:link {text-decoration:none; color:#000011;}
a:visited {text-decoration:none; color:#000011;}
a:active {text-decoration:none; color:#000011;}
a:hover {text-decoration:underline;}
.even {background-color:#b2b4ec;}
.odd {background-color:#9ea0d2;}
.lent {background-color:#999999;}
.center {text-align: center;}
.filter {font-size:12px}
.list_title {font-weight:bold}
.list_diskid {font-weight:bold;font-size:12px}
.list_seen {font-size:12px}
.list_info {font-style:italic}
.list_plot {font-size:12px}
.tableborder {border-width:1px; border-style:solid; border-color:#9ea0d2;;}
.infobox {border-width:1px; border-style:solid; border-color:#000000; font-size:18px;}
.infobox td {text-align:center}
.show_title {font-size:20pt; font-weight:bolder;}
.show_subtitle {font-size:16pt; font-weight:bolder;}
.notavail {color:#ff0000; font-weight:bold}
.logo {color: navy; font-size:28px; font-weight:bolder; font-style:italic;}
.splitbrain {font-size:10px;}
.version {font-size:10px;}

View File

@@ -0,0 +1,79 @@
{*
Output of search results/browselist
$Id: list.tpl,v 2.18 2013/03/14 17:17:27 andig2 Exp $
*}
{if !empty($list)}
<table width="100%" class="tableborder">
{foreach item=video from=$list}
{cycle values="even,odd" assign=CLASS print=false}
{if $video.who != ''}
{assign var=CLASS value="lent"}
{/if}
<tr class="{$CLASS}">
{if $video.imgurl != ''}
<td width="37" align="center">
<a class="list_title" href="show.php?id={$video.id}">
<img src="{$video.imgurl}" border="0" width="35" height="48" align="top" alt="" />
</a>
</td>
{/if}
<td>
<a class="list_title" href="show.php?id={$video.id}">
{$video.title}
{if $video.subtitle}
- {$video.subtitle}
{/if}
</a>
[<span class="list_info">{if $video.year}<a href="search.php?q={$video.year}&fields=year&nowild=1">{$video.year}</a>{/if}{if $video.director && $video.year}; {/if}{if $video.director != ""}<a href="search.php?q=%22{$video.director}%22&isname=Y">{$video.director}</a>{/if}</span>]
<br />
<span class="list_plot">
{$video.plot|truncate:250}
<a class="list_title" href="show.php?id={$video.id}">{$lang.more}</a>
</span>
</td>
<td align="center" nowrap="nowrap" style="text-align:center">
<span class="list_diskid"><a href="search.php?q={$video.diskid}&fields=diskid&nowild=1">{$video.diskid}</a></span>
<br />
{foreach item=itemlang from=$video.language}
{if $itemlang}<a href="search.php?q={$itemlang|escape:url}&fields=language">
{if !empty($video.flagfile[$itemlang])}
<img src="{$video.flagfile[$itemlang]}" border="0" alt="{$itemlang}"/>
{else}
{$itemlang}
{/if}</a>
{/if}
{/foreach}
<br />
{if $video.seen}
<span class="list_seen">{$lang.seen}</span>
{/if}
</td>
<td align="center" nowrap="nowrap" style="text-align:center">
{if $video.editable}
<a href="edit.php?id={$video.id}">{$lang.edit}</a><br />
<a href="delete.php?id={$video.id}" onclick="return(confirm('{$video.title|escape:javascript|escape}: {$lang.really_del}?'))">{$lang.delete}</a>
{/if}
</td>
</tr>
{foreachelse}
<tr>
<td align="center" style="text-align:center">
<br />
{$lang.l_nothing}
<br />
<br />
</td>
</tr>
{/foreach}
</table>
{/if}

View File

@@ -0,0 +1,34 @@
{*
Output of login page
*}
<div align="center">
<p>{$lang.enterusername}</p>
<form action="login.php" id="login" method="post">
<input type="hidden" value="{$refer}" name="refer"/>
<table class="tableborder">
<tr>
<td>{$lang.username}:</td>
<td><input type="textbox" id="username" name="username"/></td>
</tr>
<tr>
<td>{$lang.password}:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" name="permanent" id="permanent" value="1"/><label for="permanent">{$lang.stayloggedin}</label></td>
</tr>
<tr>
<td colspan="2" align="middle" style="text-align:center"><input type="submit" value="{$lang.login}"/></td>
</tr>
</table>
</form>
<p>{$error}</p>
</div>
<script language="JavaScript" type="text/javascript">
document.forms['login'].username.focus();
</script>

View File

@@ -0,0 +1,88 @@
{*
IMDB search popup
$Id: lookup.tpl,v 2.15 2009/04/04 16:21:33 andig2 Exp $
*}
{include file="xml.tpl"}
<body>
<script language="JavaScript" type="text/javascript" src="javascript/lookup.js"></script>
<table width="100%" class="tablemenu" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td width="100%" align="left" style="text-align:left">
{foreach item=eng from=$engines}
[&nbsp;<a href="{$eng.url}">{$eng.name}</a>&nbsp;]
{/foreach}
</td>
</tr>
<tr>
<td>
<form action="lookup.php" id="lookup" name="lookup">
<table width="100%" class="tablefilter" cellspacing="5">
<tr>
<td nowrap="nowrap">
<input type="text" name="find" id="find" value="{$q_find}" size="31" style="width:200px" />
<input type="submit" class="button" value="{$lang.l_search}" />
{include file="lookup_engines.tpl"}
<script language="JavaScript" type="text/javascript">
document.lookup.find.focus();
</script>
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
{if $http_error}
<pre>{$http_error}</pre>
{/if}
{if $imdbresults}
<b>{$lang.l_select}</b>
{if $searchtype == 'image'}
{foreach item=match from=$imdbresults}
<div class="thumbnail">
<a href="javascript:void(returnImage('{$match.coverurl|escape:"javascript"}'));" title="Select image and close Window">
<img src="{$match.imgsmall}" align="left" width="60" height="90" /><br />
{$match.title}
</a>
</div>
{/foreach}
{else}
<ul>
{foreach item=match from=$imdbresults}
<li>
<a href="javascript:void(returnData('{$match.id}','{$match.title|escape:"javascript"}','{$match.subtitle|escape:"javascript"}', '{$engine}'));" title="add ID and close Window">{$match.title}{if $match.subtitle} - {$match.subtitle}{/if}</a>
{if $match.details or $match.imgsmall}
<br/>
<font size="-2">
{if $match.imgsmall}<img src="{$match.imgsmall}" align="left" width="25" height="35">{/if}
{$match.details}
</font>
{/if}
</li>
{/foreach}
</ul>
{/if}
{else}
<div align="center"><b>{$lang.l_nothing}</b></div>
<br />
{/if}
<br /><br />
<div align="right">
[ <a href="http://uk.imdb.com/Find?{$find|escape:url}" target="_blank">{$lang.l_selfsearch}</a> ]
</div>
</body>
</html>

View File

@@ -0,0 +1,98 @@
body {font-family:sans-serif;font-size:16px; background-image:url(metal/alu.jpg);}
input,textarea,select,option {background-color:#C7C7D1; background-image:url(metal/alu.jpg);}
a:link {text-decoration:none; color:#333366;}
a:visited {text-decoration:none; color:#333366;}
a:active {text-decoration:none; color:#333366;}
a:hover {text-decoration:none; color:#333399;}
.even {background-image:url(metal/alu3.jpg);}
.odd {background-image:url(metal/alu2.jpg);}
.lent {background-image:url(metal/alu4.jpg);}
.center {text-align: center;}
.filter {font-size:12px}
.list_title {font-weight:bold}
.list_diskid {font-weight:bold;font-size:12px}
.list_seen {font-size:12px}
.list_info {font-style:italic}
.list_plot {font-size:12px}
.tableborder {border-width:1px;
border-style:solid;
border-left-color:#ffffff;
border-right-color:#555555;
border-top-color:#ffffff;
border-bottom-color:#555555;}
.infobox { border-width:1px;
border-style:solid;
border-left-color:#ffffff;
border-right-color:#555555;
border-top-color:#ffffff;
border-bottom-color:#555555; font-size:18px;
text-align:center;}
.infobox td {text-align:center}
.toplink { padding:2px;
background-image:url(metal/alu3.jpg);
border-width:1px;
border-style:solid;
border-left-color:#ffffff;
border-right-color:#555555;
border-top-color:#ffffff;
border-bottom-color:#555555;}
.splitbrain { font-size:10px;}
.version { font-size:10px;
border-width:1px;
border-style:solid;

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,71 @@
/* found at http://niels.beyond-reality.nl/video/ */
body {font-family:sans-serif; font-size:16px; background-color: #FF9933;}
a:link {text-decoration:none; color:#000011;}
a:visited {text-decoration:none; color:#000011;}
a:active {text-decoration:none; color:#000011;}
a:hover {text-decoration:underline;}
.even {background-color:#FFBB55;}
.odd {background-color:#FFAA44;}
.lent {background-color:#999999;}
.center {text-align: center;}
.filter {font-size:12px}
.list_title {font-weight:bold}
.list_diskid {font-weight:bold;font-size:12px}
.list_seen {font-size:12px}
.list_info {font-style:italic}
.list_plot {font-size:12px}
.tableborder {border-width:1px; border-style:solid; border-color:#3333FF;}
.infobox {border-width:1px; border-style:solid; border-color:#000000; font-size:18px;}
.infobox td {text-align:center}
.show_title {font-size:20pt; font-weight:bolder;}
.show_subtitle {font-size:16pt; font-weight:bolder;}
.notavail {color:#ff0000; font-weight:bold}
.logo {color: Steelblue; font-size:28px; font-weight:bolder; font-style:italic;}
.splitbrain {font-size:10px;}
.version {font-size:10px;}

View File

@@ -0,0 +1,18 @@
{*
The configuration template
$Id: profile.tpl,v 2.2 2004/06/09 16:13:05 agohr Exp $
*}
<form method="post" action="profile.php">
<input type="hidden" name="save" value="1" />
<table width="100%" class="tableborder">
{include file="options.tpl"}
</table>
<br />
<div align="center">
<input type="submit" value="{$lang.save}" accesskey="s" />
</div>
<br />
</form>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@@ -0,0 +1,64 @@
{*
Template for the search interface
$Id: search.tpl,v 2.14 2005/06/04 16:21:09 andig2 Exp $
*}
<script language="JavaScript" type="text/javascript" src="javascript/search.js"></script>
{include file="searchengines.tpl"}
<form action="search.php" id="search" name="search">
<table width="100%" class="tableborder" cellpadding="4">
<tr>
<td>
<table width="100%" border="0" cellpadding="5" cellspacing="0">
<tr>
<td width="20%">
<span class="filterlink">{$lang.keywords}:</span>
<br/>
<input type="text" name="q" id="q" value="{$q_q}" size="45" maxlength="300"/>
<br/>
{include file="searchradios.tpl"}
<input type="button" value="{$lang.l_search}" onClick="submitSearch()" class="button" />
</td>
</tr>
<tr>
<td>
{$lang.keywords_desc}
</td>
</tr>
</table>
</td>
<td nowrap="nowrap" align="center" style="text-align:center">
{$lang.fieldselect}:<br />
<select name="fields[]" size="6" multiple="multiple">
{html_options options=$search_fields selected=$selected_fields}
</select><br />
<a href="javascript:selectAllFields()">{$lang.selectall}</a>
</td>
<td nowrap="nowrap">
{if !empty($owners)}
<span>{$lang.owner}:</span>
{html_options name=owner options=$owners selected=$video.owner_id}<br/>
{/if}
{$lang.genre_desc}:
{$genreselect}
</td>
{if !empty($imgurl)}
<td>
{*
<a href='http://uk.imdb.com/Name?{$q_q|replace:"&quot;":""|escape:url}'>
*}
<a href='http://uk.imdb.com/Name?{$q|replace:"&quot;|\"":""|escape:url}'>
<img align=left src="{$imgurl}" border="0" width="97" height="144">
</a>
</td>
{/if}
</tr>
</table>
</form>
<script language="JavaScript" type="text/javascript">
selectField(document.search.q);
</script>

View File

@@ -0,0 +1,32 @@
{*
The configuration template
$Id: setup.tpl,v 2.11 2010/02/14 12:25:12 andig2 Exp $
*}
<table width="100%" >
<tr>
<td align="right">
<form action="setup.php" style="display:inline">
<input type="hidden" name="cacheempty" value="1" />
<input type="submit" value="{$lang.cacheempty}" class="editcaption" onclick="return(confirm('{$lang.really_del|escape:javascript|escape}?'))" />
</form>
<form action="users.php" style="display:inline"><input type="submit" value="{$lang.help_usermanagern}" class="button"/></form>
</td>
</tr>
</table>
<form method="post" action="setup.php">
<input type="hidden" name="save" value="1" />
<table width="100%" class="tableborder">
{include file="options.tpl"}
</table>
<br />
<div align="center">
<input type="submit" value="{$lang.save}" accesskey="s" />
</div>
<br />
</form>

View File

@@ -0,0 +1,255 @@
{*
Template for the video detailview
$Id: show.tpl,v 2.17 2008/12/07 12:43:28 andig2 Exp $
*}
<table width="100%" class="tableborder"><tr><td>
<!-- content begin -->
<table width="100%" class='odd'>
<tr>
<td align="center" rowspan="2" width="200" style="text-align:center">
{if $link}
{if $config.imdbBrowser}{assign var="link" value=$link|escape:url}{assign var="link" value="trace.php?videodburl=$link"}{/if}
{/if}
{html_image file=$video.imgurl link=$link title=$lang.visit max_width="97" max_height="144"}
</td>
<td colspan="2">
<span class="show_title">{$video.title}</span>
{if $video.subtitle != ''}
<br/>
<span class="show_subtitle">{$video.subtitle}</span>
{/if}
</td>
<td align="center" style="text-align:center">
{if $video.diskid != ''}
<span class="show_id"><a href="search.php?q={$video.diskid}&fields=diskid&nowild=1">{$video.diskid}</a></span>
{if !empty($video.who) && $video.who != ''}
<br />
{$lang.notavail} {$video.who}
{/if}
{/if}
</td>
</tr>
<tr>
<td>
<table>
{if $video.year}
<tr><td><b>{$lang.year}:</b></td><td><a href="search.php?q={$video.year}&fields=year&nowild=1">{$video.year}</a></td></tr>
{/if}
{if $video.director != ''}
<tr><td><b>{$lang.director}:</b></td><td><a href="search.php?q=%22{$video.director|escape:url}%22&isname=Y">{$video.director}</a></td></tr>
{/if}
{if count($video.country)}
<tr><td><b>{$lang.country}:</b></td>
<td>
{*
<a href="search.php?q=%22{$video.country|escape:url}%22&fields=country&nowild=1">{$video.country}</a>
*}
{foreach item=country from=$video.country}
<a href="search.php?q=%22{$country|escape:url}%22&fields=country">{$country}</a>
{/foreach}
</td></tr>
{/if}
<tr>
<td><b>{$lang.seen}:</b></td>
<td>
<form action="show.php" name="show" id="show">
<input type="hidden" name="id" id="id" value="{$video.id}" />
<input type="hidden" name="save" id="save" value="1" />
{html_checkbox name="seen" value=1 checked=$video.seen onclick="submit()"}
{if $video.seen}<label for="seen">{$lang.yes}</label>{/if}
</form>
</td>
</tr>
<tr>
<td><b>{$lang.rating}:</b></td>
<td>{html_rating value=$video.rating}</td>
</tr>
</table>
</td>
<td>
<table>
{if $video.runtime > 0}
<tr><td><b>{$lang.length}:</b></td><td><b>{math equation="floor(x/60)" x=$video.runtime}</b> h <b>{math equation="x - floor(x/60) * 60" x=$video.runtime}</b> min ({$video.runtime} min)</td></tr>
{/if}
{if $video.language}
<tr>
<td><b>{$lang.language}:</b></td>
<td>
{foreach item=language from=$video.language}
<a href="search.php?q=%22{$language|escape:url}%22&fields=language">{$language}</a>
{/foreach}
</td>
</tr>
{/if}
{if $video.mediatype != ''}
<tr><td><b>{$lang.mediatype}:</b></td><td><a href="search.php?q=%22{$video.mediatype|escape:url}%22&fields=mediatype&nowild=1">{$video.mediatype}</a></td></tr>
{/if}
{if !empty($video.owner)}
<tr>
<td><b>{$lang.owner}:</b></td>
<td>
<a href="search.php?q={$video.owner|escape:url}&fields=owner&nowild=1">{$video.owner}</a>
{if $loggedin != '' and $video.email != '' and $video.owner != $loggedin and $video.who == '' and $video.diskid != ''}
[ <a href="javascript:void(open('borrowask.php?id={$video.id|escape:url}&diskid={$video.diskid|escape:url}','borrowask','width=210,height=210,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no'))">{$lang.borrowask}</a> ]
{/if}
</td>
</tr>
{/if}
</table>
</td>
<td width="200">
{if $genres}
<b>{$lang.genres}:</b><br />
{foreach item=genre from=$genres}
<a href="search.php?q=&genres[]={$genre.id}">{$genre.name}</a><br />
{/foreach}
{/if}
</td>
</tr>
</table>
<table width="100%">
{if $video.plot != ''}
<tr>
<td colspan="2" style="text-align:justify">
<b>{$lang.plot}:</b><br />{$video.plot}<br />
<br />
</td>
</tr>
{/if}
<tr>
<td>
<table>
{if $video.filename != ''}
<tr><td><b>{$lang.filename}:</b></td><td>{$video.filename}</td></tr>
{/if}
{if $video.filesize > 0}
<tr><td><b>{$lang.filesize}:</b></td><td>{$video.filesize} mb</td></tr>
{/if}
{if $video.filedate != "0000-00-00 00:00:00"}
<tr><td><b>{$lang.filedate}:</b></td><td>{$video.filedate}</td></tr>
{/if}
{if $video.audio_codec != ''}
<tr><td><b>{$lang.audiocodec}:</b></td><td>{$video.audio_codec}</td></tr>
{/if}
{if $video.video_codec != ''}
<tr><td><b>{$lang.videocodec}:</b></td><td>{$video.video_codec}</td></tr>
{/if}
{if $video.video_height > 0 || $video.video_width > 0}
<tr><td><b>{$lang.dimension}:</b></td><td>{$video.video_width}x{$video.video_height}<br /><br /></td></tr>
{/if}
</table>
</td>
<td>
<table>
{if $video.comment != ''}
<tr>
<td><b>{$lang.comment}:</b></td>
<td>{$video.comment}</td>
</tr>
{/if}
{if !empty($video.custom1name) && !empty($video.custom1out)}
<tr>
<td><b>{$video.custom1name}:</b></td>
<td>{$video.custom1out}</td>
</tr>
{/if}
{if !empty($video.custom2name) && !empty($video.custom2out)}
<tr>
<td><b>{$video.custom2name}:</b></td>
<td>{$video.custom2out}</td>
</tr>
{/if}
{if !empty($video.custom3name) && !empty($video.custom3out)}
<tr>
<td><b>{$video.custom3name}:</b></td>
<td>{$video.custom3out}</td>
</tr>
{/if}
{if !empty($video.custom4name) && !empty($video.custom4out)}
<tr>
<td><b>{$video.custom4name}:</b></td>
<td>{$video.custom4out}</td>
</tr>
{/if}
</table>
</td>
</tr>
<tr>
<td width="100%" colspan="2">
{if $video.actors != ''}
<b>{$lang.cast}:
{if $cast_toggle}
{if $show_cast}
<a href="show.php?id={$video.id}" class="button submit">{$lang.hidecast}</a>
{else}
<a href="show.php?id={$video.id}&amp;show_cast=1" class="button submit">{$lang.showcast}</a>
{/if}
{/if}
</b>
{if $show_cast}
<table width="100%">
{counter start=0 print=false name=castcount assign=count}
{foreach item=actor from=$video.cast}
{if $count == 0}
<tr class="{cycle values="odd,even"}">
{/if}
<td width="{math equation="floor(100 / x)" x=$castcolumns}%">
<dl>
{if $actor.imgurl != ''}
<a href="{$actor.imdburl}"><img src="{$actor.imgurl}" width="38" height="52" border="0" align="left"></a>
{/if}
<dt>
<a href="search.php?q=%22{$actor.name|escape:url}%22&isname=Y">{$actor.name}</a>
</dt>
<dd>
{foreach item=role from=$actor.roles}
{$role}<br/>
{/foreach}
</dd>
</dl>
</td>
{counter assign=count name=castcount}
{if $count == $castcolumns}
{counter start=0 print=false name=castcount}
</tr>
{/if}
{/foreach}
</table>
{/if}
<br />
{/if}
</td>
</tr>
</table>
<!-- content end -->
</td></tr></table>

View File

@@ -0,0 +1,118 @@
{*
Template for the statistics page
$Id: stats.tpl,v 2.11 2008/11/13 17:56:05 andig2 Exp $
*}
<table width="100%" class="tableborder">
<tr>
<td align="center">
<table>
{if !empty($owners)}
<tr>
<td><b>{$lang.owner}:</b></td>
<td><form action="stats.php">{html_options name=owner options=$owners selected=$owner onchange="submit()"}</form></td>
</tr>
{/if}
<tr>
<td><b>{$lang.totalfiles}:</b></td>
<td>{$stats.count_all}</td>
</tr>
<tr>
<td><b>{$lang.tv_episodes}:</b></td>
<td><a href="search.php?q=1&fields=istv">{$stats.count_tv}</a></td>
</tr>
<tr>
<td><b>{$lang.numberdisks}:</b></td>
<td>{$stats.count_disk}</td>
</tr>
<tr>
<td><b>{$lang.videobygen}:</b><br />{$lang.multiple}</td>
<td>
{foreach item=row from=$stats.count_genre}
<a href="search.php?q=&genres[]={$row.id}">{$row.name}</a> : {$row.count}<br />
{/foreach}
</td>
</tr>
<tr>
<td><b>{$lang.year}:</b></td>
<td>
<table cellpadding="2">
<tr>
<td valign="bottom" align="left" style="text-align:left"><small>{$stats.first_year|spacify:"<br />"}</small></td>
<td colspan="2" valign="bottom" align="left" class="odd">
{foreach key=year item=count from=$stats.count_year}<a href="search.php?q={$year}&fields=year&nowild=1"><img src="images/bar.gif" width="3" height="{$count}" title="{$year}: {$count}" border="0" alt="" /></a>{/foreach}
</td>
<td valign="bottom" align="right" style="text-align:right"><small>{$stats.last_year|spacify:"<br />"}</small></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td align="center">
<table>
<tr>
<td><b>{$lang.averagefilesize}:</b></td>
<td>{$stats.avg_size} mb</td>
</tr>
<tr>
<td><b>{$lang.totalsize}</b></td>
<td>{$stats.sum_size} gb</td>
</tr>
<tr>
<td><b>{$lang.averageruntime}:</b></td>
<td>{$stats.avg_time} min</td>
</tr>
<tr>
<td><b>{$lang.totalruntime}:</b></td>
<td>{$stats.sum_time} h</td>
</tr>
<tr>
<td><b>{$lang.totalseen}:</b></td>
<td>{$stats.seen_time} h</td>
</tr>
<tr>
<td><b>{$lang.languages}:</b><br /></td>
<td>
<table cellspacing="0">
{foreach item=row from=$stats.count_lang}
{if $row.language}<tr><td><a href="search.php?q={$row.language|escape:url}&fields=language">{$row.language}</a>:</td><td>{$row.count}</td></tr>{/if}
{/foreach}
</table>
</td>
</tr>
<tr>
<td><b>{$lang.videobymedia}:</b></td>
<td>
<table cellspacing="0">
{foreach item=row from=$stats.count_media}
<tr><td><a href="search.php?q={$row.name|escape:url}&fields=mediatype&nowild=1">{$row.name}</a>:</td><td>{$row.count}</td></tr>
{/foreach}
</table>
</td>
</tr>
<tr>
<td><b>{$lang.videobyvcodec}:</b><br /></td>
<td>
<table cellspacing="0">
{foreach item=row from=$stats.count_vcodec}
{if $row.video_codec}<tr><td><a href="search.php?q={$row.video_codec|escape:url}&fields=video_codec&nowild=1">{$row.video_codec}</a>:</td><td>{$row.count}</td></tr>{/if}
{/foreach}
</table>
</td>
</tr>
<tr>
<td><b>{$lang.videobyacodec}:</b><br /></td>
<td>
<table cellspacing="0">
{foreach item=row from=$stats.count_acodec}
{if $row.audio_codec}<tr><td><a href="search.php?q={$row.audio_codec|escape:url}&fields=audio_codec&nowild=1">{$row.audio_codec}</a>:</td><td>{$row.count}</td></tr>{/if}
{/foreach}
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@@ -0,0 +1,26 @@
{*
Template for browsing IMDB through VideoDB
$Id: trace.tpl,v 2.10 2005/05/20 10:02:17 andig2 Exp $
*}
<table width="100%" class="tableborder">
<tr>
<td>URL: </span><a href="{$url}" target="_blank">{$url}</a></td>
<td nowrap="nowrap" align="right" style="text-align:right">{if $fetchtime}{$lang.fetchtime}: {$fetchtime}s{/if}
<td align="right" style="text-align:right;">
<form action="trace.php" method="get" style="margin:0px; padding:0px;">
<input type="hidden" name="videodburl" value="{$url}" />
<input type="hidden" name="videodbreload" value="Y" />

View File

@@ -0,0 +1,106 @@
{*
Template for the user management screen
$Id: users.tpl,v 1.13 2013/03/15 16:42:46 andig2 Exp $
*}
<div align="center">
<p>{$message}</p>
<h3>{$lang.existingusers}</h3>
<table width="100%" class="tableborder">
<tr class="{cycle values="even,odd"}">
<th>{$lang.username}</th>
<th>{$lang.permissions}</th>
<th>{$lang.email}</th>
<th>{$lang.password}</th>
<th colspan="3">{$lang.action}</th>
</tr>
{foreach item=user from=$userlist}
<tr class="{cycle values="even,odd"}">
<form action="users.php" method="post">
<input type="hidden" name="id" value="{$user.id}" />
<input type="hidden" name="name" value="{$user.name|escape}" />
<td align="center" style="text-align:center">
<b>{$user.name}</b>
</td>
<td align="left" style="text-align:left">
{html_checkbox style="vertical-align:middle;" name="readflag" value="1" id="readflag"|cat:$user.name checked=$user.read label=$lang.perm_readall}<br/>
{html_checkbox style="vertical-align:middle;" name="writeflag" value="1" id="writeflag"|cat:$user.name checked=$user.write label=$lang.perm_writeall}<br/>
{html_checkbox style="vertical-align:middle;" name="adultflag" value="1" id="adultflag"|cat:$user.name checked=$user.adult label=$lang.perm_adult}<br/>
{html_checkbox style="vertical-align:middle;" name="adminflag" value="1" id="adminflag"|cat:$user.name checked=$user.admin label=$lang.perm_admin}
</td>
<td align="center" style="text-align:center">
{if $user.guest}
<input type="hidden" name="email" value="{$user.email|escape}" />
{else}
<input type="text" name="email" value="{$user.email|escape}" />
{/if}
</td>
<td align="center" style="text-align:center">
{if $user.guest}
<input type="hidden" name="password" />
{else}
<input type="text" name="password" />
{/if}
</td>
<td align="center" style="text-align:center">
<input type="submit" value="{$lang.update}" />
</td>
<td align="center" style="text-align:center">
{if !$user.guest}
<a href="users.php?del={$user.id|escape:url}" onClick="return confirm('{$lang.really_del|escape:javascript|escape}?')">{$lang.delete}</a>
{else}
&nbsp;
{/if}
</td>
<td align="center" style="text-align:center">
<a href="permissions.php?from_uid={$user.id|escape:url}">{$lang.perm}</a>
</td>
</form>
</tr>
{/foreach}
</table>
<br />
<h3>{$lang.createuser}</h3>
<form action="users.php" method="post">
<input type="hidden" name="newuser" value="1" />
<table width="100%" class="tableborder">
<tr class="{cycle values="even,odd"}">
<th>{$lang.username}</th>
<th>{$lang.permissions}</th>
<th>{$lang.email}</th>
<th>{$lang.password}</th>
<th></th>
</tr>
<tr class="{cycle values="even,odd"}">
<td align="center" style="text-align:center">
<input type="text" name="name" />
</td>
<td align="left" style="text-align:left">
{html_checkbox style="vertical-align:middle;" name="readflag" value="1" id="readflagNEWUSER" label=$lang.perm_readall}<br/>
{html_checkbox style="vertical-align:middle;" name="writeflag" value="1" id="writeflagNEWUSER" label=$lang.perm_writeall}<br/>
{html_checkbox style="vertical-align:middle;" name="adultflag" value="1" id="adultflagNEWUSER" label=$lang.perm_adult}<br/>
{html_checkbox style="vertical-align:middle;" name="adminflag" value="1" id="adminflagNEWUSER" label=$lang.perm_admin}
</td>
<td align="center" style="text-align:center">
<input type="text" name="email" />
</td>
<td align="center" style="text-align:center">
<input type="text" name="password" />
</td>
<td align="center" style="text-align:center">
<input type="submit" value="{$lang.create}" />
</td>
</form>
</tr>
</table>
</form>
</div>