';
  $ret .= ' ';
  $ret .= ' ';
  foreach ($domainlist as $dom)
  {
    $s = ($selected == $dom->id) ? ' selected="selected" ': '';
    $ret .= "\n";
  }
  $ret .= '';
  return $ret;
}
function get_vhost_details($id)
{
  $id = (int) $id;
  $uid = (int) $_SESSION['userinfo']['uid'];
  $result = db_query("SELECT vh.*,IF(dav.id IS NULL OR dav.type='svn', 0, 1) AS is_dav,IF(dav.id IS NULL OR dav.type='dav', 0, 1) AS is_svn, IF(webapps.id IS NULL, 0, 1) AS is_webapp FROM vhosts.v_vhost AS vh LEFT JOIN vhosts.dav ON (dav.vhost=vh.id) LEFT JOIN vhosts.webapps ON (webapps.vhost = vh.id) WHERE uid={$uid} AND vh.id={$id}");
  if (mysql_num_rows($result) != 1)
    system_failure('Interner Fehler beim Auslesen der Daten');
  $ret = mysql_fetch_assoc($result);
  DEBUG($ret);
  return $ret;
}
function get_aliases($vhost)
{
  $result = db_query("SELECT id,fqdn,options FROM vhosts.v_alias WHERE vhost={$vhost}");
  $ret = array();
  while ($item = mysql_fetch_assoc($result)) {
    array_push($ret, $item);
  }
  return $ret;
}
function get_all_aliases($vhost)
{
  //$vhost = get_vhost_details( (int) $vhost );
  $aliases = get_aliases($vhost['id']);
  $ret = array();
  if (strstr($vhost['options'], 'aliaswww')) {
    array_push($ret, array('id' => 'www', 'fqdn' => 'www.'.$vhost['fqdn'], 'options' => (strstr($vhost['options'], 'forwardwww') ? 'forward' : '')));
  }
  foreach ($aliases as $item) {
    array_push($ret, $item);
    if (strstr($item['options'], 'aliaswww')) {
      array_push($ret, array('id' => 'www_'.$item['id'], 'fqdn' => 'www.'.$item['fqdn'], 'options' => (strstr($item['options'], 'forward') ? 'forward' : '')));
    }
  }
  return $ret;
}
function list_available_webapps()
{
  $result = db_query("SELECT id,displayname FROM vhosts.global_webapps");
  $ret = array();
  while ($item = mysql_fetch_assoc($result))
    array_push($ret, $item);
  return $ret;
}
function delete_vhost($id)
{
  $id = (int) $id;
  if ($id == 0)
    system_failure("id == 0");
  $vhost = get_vhost_details($id);
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Removing vhost #'.$id.' ('.$vhost['hostname'].'.'.$vhost['domain'].')');
  db_query("DELETE FROM vhosts.vhost WHERE id={$vhost['id']} LIMIT 1");
}
function make_svn_vhost($id) 
{
  $id = (int) $id;
  if ($id == 0)
    system_failure("id == 0");
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Converting vhost #'.$id.' to SVN');
  db_query("REPLACE INTO vhosts.dav (vhost, type) VALUES ({$id}, 'svn')");
  db_query("DELETE FROM vhosts.webapps WHERE vhost={$id}");
}
function make_dav_vhost($id) 
{
  $id = (int) $id;
  if ($id == 0)
    system_failure("id == 0");
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Converting vhost #'.$id.' to WebDAV');
  db_query("REPLACE INTO vhosts.dav (vhost, type, options) VALUES ({$id}, 'dav', 'nouserfile')");
  db_query("DELETE FROM vhosts.webapps WHERE vhost={$id}");
}
function make_regular_vhost($id)
{
  $id = (int) $id;
  if ($id == 0)
    system_failure("id == 0");
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Converting vhost #'.$id.' to regular');
  db_query("DELETE FROM vhosts.dav WHERE vhost={$id}");
  db_query("DELETE FROM vhosts.webapps WHERE vhost={$id}");
}
function make_webapp_vhost($id, $webapp) 
{
  $id = (int) $id;
  $webapp = (int) $webapp;
  if ($id == 0)
    system_failure("id == 0");
  $result = db_query("SELECT displayname FROM vhosts.global_webapps WHERE id={$webapp};");
  if (mysql_num_rows($result) == 0)
    system_failure("webapp-id invalid");
  $webapp_name = mysql_fetch_object($result)->displayname;
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Setting up webapp '.$webapp_name.' on vhost #'.$id);
  db_query("REPLACE INTO vhosts.webapps (vhost, webapp) VALUES ({$id}, {$webapp})");
  mail('webapps-setup@schokokeks.org', 'setup', 'setup');
}
function save_vhost($vhost)
{
  if (! is_array($vhost))
    system_failure('$vhost kein array!');
  $id = (int) $vhost['id'];
  $hostname = maybe_null($vhost['hostname']);
  $domain = (int) $vhost['domain_id'];
  if ($domain == 0)
    system_failure('$domain == 0');
  if ($vhost['domain_id'] == -1)
    $domain = 'NULL';
  $docroot = maybe_null($vhost['docroot']);
  $php = maybe_null($vhost['php']);
  $cgi = ($vhost['cgi'] == 1 ? 1 : 0);
  $ssl = maybe_null($vhost['ssl']);
  $suexec_user = 'NULL';
  $available_suexec = available_suexec_users();
  foreach ($available_suexec AS $u)
    if ($u['uid'] == $vhost['suexec_user'])
      $suexec_user = $u['uid'];
  $logtype = maybe_null($vhost['logtype']);
  $errorlog = (int) $vhost['errorlog'];
  if ($vhost['is_svn']) {
    if (! $vhost['options']) $vhost['options']='nodocroot';
    else $vhost['options']+=",nodocroot";
  }
  $options = mysql_real_escape_string( $vhost['options'] );
  $cert = 0;
  $certs = user_certs();
  foreach ($certs as $c)
    if ($c['id'] == $vhost['cert'])
      $cert = $c['id'];
  if ($cert == 0)
    $cert = 'NULL';
  $ipv4 = 'NULL';
  $ipv4_avail = user_ipaddrs();
  if (in_array($vhost['ipv4'], $ipv4_avail))
  {
    $ipv4 = maybe_null($vhost['ipv4']);
  }
  $autoipv6 = 1;
  if ($vhost['autoipv6'] == 0 ||  $vhost['autoipv6'] == 2) {
    $autoipv6 = $vhost['autoipv6'];
  }
  $stats = maybe_null($vhost['stats']);
  if ($id != 0) {
    logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Updating vhost #'.$id.' ('.$vhost['hostname'].'.'.$vhost['domain'].')');
    db_query("UPDATE vhosts.vhost SET hostname={$hostname}, domain={$domain}, docroot={$docroot}, php={$php}, cgi={$cgi}, `ssl`={$ssl}, `suexec_user`={$suexec_user}, logtype={$logtype}, errorlog={$errorlog}, certid={$cert}, ipv4={$ipv4}, autoipv6={$autoipv6}, options='{$options}', stats={$stats} WHERE id={$id} LIMIT 1");
  }
  else {
    logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'vhosts', 'Creating vhost '.$vhost['hostname'].'.'.$vhost['domain'].'');
    $result = db_query("INSERT INTO vhosts.vhost (user, hostname, domain, docroot, php, cgi, `ssl`, `suexec_user`, logtype, errorlog, certid, ipv4, autoipv6, options, stats) VALUES ({$_SESSION['userinfo']['uid']}, {$hostname}, {$domain}, {$docroot}, {$php}, {$cgi}, {$ssl}, {$suexec_user}, {$logtype}, {$errorlog}, {$cert}, {$ipv4}, {$autoipv6}, '{$options}', {$stats})");
    $id = mysql_insert_id();
  }
  $oldvhost = get_vhost_details($id);
  /*
    these vars may be 0 or 1.
    So newval > oldval means that it has been switched on yet.
  */
  if ($vhost['is_dav'] > $oldvhost['is_dav'])
      make_dav_vhost($id);
  elseif ($vhost['is_svn'] > $oldvhost['is_svn'])
      make_svn_vhost($id);
  elseif ($vhost['is_webapp'] > $oldvhost['is_webapp'])
      make_webapp_vhost($id, $vhost['webapp_id']);
  elseif ($vhost['is_dav'] == 0 && $vhost['is_svn'] == 0 && $vhost['is_webapp'] == 0)
      make_regular_vhost($id);
}
function get_alias_details($id)
{
  $id = (int) $id;
  $uid = (int) $_SESSION['userinfo']['uid'];
  $result = db_query("SELECT * FROM vhosts.v_alias WHERE id={$id}");
  
  if (mysql_num_rows($result) != 1)
    system_failure('Interner Fehler beim Auslesen der Alias-Daten');
  
  $alias = mysql_fetch_assoc($result);
  
  if ($alias['domain_id'] == NULL) {
    $alias['domain_id'] = -1;
  }
  /* Das bewirkt, dass nur die eigenen Aliase gesehen werden können */
  get_vhost_details( (int) $alias['vhost'] );
  return $alias;
}
function delete_alias($id)
{
  $id = (int) $id;
  $alias = get_alias_details($id);
  logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'aliases', 'Removing alias #'.$id.' ('.$alias['hostname'].'.'.$alias['domain'].')');
  db_query("DELETE FROM vhosts.alias WHERE id={$id}");
}
function save_alias($alias)
{
  if (! is_array($alias))
    system_failure('$alias kein array!');
  $id = (isset($alias['id']) ? (int) $alias['id'] : 0);
  $hostname = maybe_null($alias['hostname']);
  $domain = (int) $alias['domain_id'];
  if ($domain == 0)
    system_failure('$domain == 0');
  if ($alias['domain_id'] == -1)
    $domain = 'NULL';
  $vhost = get_vhost_details( (int) $alias['vhost']);
  $options = mysql_real_escape_string( $alias['options'] );
  if ($id == 0) {
    logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'aliases', 'Creating alias '.$alias['hostname'].'.'.$alias['domain'].' for VHost '.$vhost['id']);
    db_query("INSERT INTO vhosts.alias (hostname, domain, vhost, options) VALUES ({$hostname}, {$domain}, {$vhost['id']}, '{$options}')");
  }
  else {
    logger(LOG_INFO, 'modules/vhosts/include/vhosts', 'aliases', 'Updating alias #'.$id.' ('.$alias['hostname'].'.'.$alias['domain'].')');
    db_query("UPDATE vhosts.alias SET hostname={$hostname}, domain={$domain}, options='{$options}' WHERE id={$id} LIMIT 1");
  }
}
function available_suexec_users()
{
  $uid = (int) $_SESSION['userinfo']['uid'];
  $result = db_query("SELECT uid, username FROM vhosts.available_users LEFT JOIN vhosts.v_useraccounts ON (uid = suexec_user) WHERE mainuser={$uid}");
  $ret = array();
  while ($i = mysql_fetch_assoc($result))
    $ret[] = $i;
  DEBUG('available suexec-users:');
  DEBUG($ret);
  return $ret;
}
function user_ipaddrs()
{
  $uid = (int) $_SESSION['userinfo']['uid'];
  $result = db_query("SELECT ipaddr FROM vhosts.ipaddr_available WHERE uid={$uid}");
  $ret = array();
  while ($i = mysql_fetch_assoc($result))
  {
    $ret[] = $i['ipaddr'];
  }
  DEBUG($ret);
  return $ret;
}
?>