<?php
# $Id$
# http://www.mapbender.org/index.php?title=Edit_WMS_Metadata
# Copyright (C) 2009 OSGeo
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

$e_id="EditWMSMetadata";
require_once(dirname(__FILE__)."/mb_validatePermission.php");
require_once(dirname(__FILE__)."/../classes/class_administration.php");

include_once '../include/dyn_css.php';

$adm = new administration();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Edit WMS Metadata</title>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">   
<script language="JavaScript">
var dTarget;
function save() {
   document.forms[0].update_content.value=1;
   document.forms[0].submit();
}

function deletepreview(layer_id) {
	var url = String(document.location);
	url = url.substr(0, url.indexOf('?'));
	window.open(url+"?<?php echo $urlParameters; ?>&delete_preview=1&layer_id="+layer_id,'delete preview', 'height=50, width=150, dependent=yes');
	document.getElementById(layer_id+"_dp").style.display="none";
}

function pick_the_date(obj) {
    dTarget = obj;
	var datePickerParameters = "m=Jan_Feb_Mrz_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez&d=Mo_Di_Mi_Do_Fr_Sa_So&t=heute";
	var datePickerStyle = "left=200,top=200,width=230,height=210,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0"
    var dp = window.open('../extensions/datepicker/datepicker.php?' + datePickerParameters,'dp',datePickerStyle);
    dp.focus();
    return false;
}
</script>
<link rel="stylesheet" type="text/css" href="../css/metadata.css" />
</head>
<body>
<?php

function guessTimestamp($timestr) {
	
     if (mb_strpos($timestr, '.')) {
        list($day, $month, $year) = explode(".", $timestr);
     }
     elseif (mb_strpos($timestr, '/')) {
        list($month, $day, $year) = explode("/", $timestr);
     }
     elseif (mb_strpos($timestr, '-')) {
        list($year, $month, $day) = explode("-", $timestr);
     }
     else {
     	$year = 0;
        $month = 0;
        $day = 0;
     }
     return mktime(0, 0, 0, $month, $day, intval($year));
}

#Update handling

if (isset($_REQUEST['update_content']) && $_REQUEST['update_content'] == true) {
	
	$update_wms_sql = "UPDATE wms SET "; 
	$update_wms_sql .= "wms_title = $1, wms_abstract = $2, fees = $3, ";
	$update_wms_sql .= "accessconstraints = $4, contactperson = $5, ";
	$update_wms_sql .= "contactposition = $6, contactorganization = $7, ";
	$update_wms_sql .= "address = $8, city = $9, stateorprovince = $10, ";
	$update_wms_sql .= "postcode = $11, country = $12, ";
	$update_wms_sql .= "contactvoicetelephone = $13, ";
	$update_wms_sql .= "contactfacsimiletelephone = $14, ";
	$update_wms_sql .= "contactelectronicmailaddress = $15 ";

	$v = array();
	array_push($v, $_REQUEST['wms_title_box']);
	array_push($v, $_REQUEST['wms_abstract_box']);
	array_push($v, $_REQUEST['fees_box']);
	array_push($v, $_REQUEST['accessconstraints_box']);
	array_push($v, $_REQUEST['contactperson_box']);
	array_push($v, $_REQUEST['contactposition_box']);
	array_push($v, $_REQUEST['contactorganization_box']);
	array_push($v, $_REQUEST['address_box']);
	array_push($v, $_REQUEST['city_box']);
	array_push($v, $_REQUEST['stateorprovince_box']);
	array_push($v, $_REQUEST['postcode_box']);
	array_push($v, $_REQUEST['country_box']);
	array_push($v, $_REQUEST['contactvoicetelephone_box']);
	array_push($v, $_REQUEST['contactfacsimiletelephone_box']);
	array_push($v, $_REQUEST['contactelectronicmailaddress_box']);
	$t = array("s", "s", "s", "s", "s", "s", "s", "s", "s", "s", "s", "s", "s", "s", "s");

	if (isset($_REQUEST['wms_timestamp_box']) && $_REQUEST['wms_timestamp_box'] <> "") {
        $update_wms_sql .= ", wms_timestamp = $16 ";
		array_push($v, guessTimestamp($_REQUEST['wms_timestamp_box']));
		array_push($t, "s");

		$update_wms_sql .= "WHERE wms_id = $17";
	}
	else {
		$update_wms_sql .= "WHERE wms_id = $16";
	}
	array_push($v, 	$_REQUEST['wms_id']);
	array_push($t, "s");

    $res_update_wms_sql = db_prep_query($update_wms_sql, $v, $t);

    while(list($key,$val) = each($_REQUEST)) {
        if(preg_match("/___/", $key)) {
            $myKey = explode("___", $key);
            $layer_id = preg_replace("/L_/","",$myKey[0]);
            if($myKey[1]=="layer_abstract") {
				$layer_sql = "UPDATE layer SET layer_abstract = $1 ";
				$layer_sql .= "WHERE layer_id = $2 AND fkey_wms_id = $3";  
                $v = array($val, $layer_id, $_REQUEST['wms_id']);
                $t = array("s", "i", "s");
                $res_keyword_sql = db_prep_query($layer_sql, $v, $t);
            }
            if($myKey[1]=="layer_keywords") {
                #Get all keywords depending on the given layer after user modification
                $keywords  = explode(",",$val);
                #delete all blanks from the keywords list
                for ($j = 0; $j < count($keywords); $j++) {
                    $word = $keywords[$j];
                    $word = trim($word);
                    $keywords[$j] = $word;
                }
                #echo "1: Keywords eines Layers: id des Layers: ", $layer_id, ", �bergebener String: ", $val, ";<br>";
                #Get all keywords depending on this layer from database
                $keyword_sql = "SELECT keyword_id, keyword FROM keyword, layer_keyword, layer " .
                               "WHERE keyword.keyword_id = layer_keyword.fkey_keyword_id " .
                               "AND layer_keyword.fkey_layer_id = layer.layer_id " .
                               "AND layer.fkey_wms_id = $1 " .
                               "AND layer.layer_id = $2";
                
                $v = array($_REQUEST['wms_id'], $layer_id); 
                $t = array("s", "i");
                $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
                while($keyword_row = db_fetch_array($res_keyword_sql))
                {
                    $keyword = $keyword_row['keyword'];
                    $keyword_id = $keyword_row['keyword_id'];
                    #keyword has been deleted or has been modified
                    #keyword exists in database but not in user data
                    $index = -1;
                    #echo "1a: Abfrage ob DB Keywords in User Liste: Keyword: ", $keyword, ";<br>";
                    if(in_array($keyword, $keywords) == false)
                    {
                        #echo "1c: Keyword nicht in User Liste: Keyword: ", $keyword, ";<br>";
                        #Deleting reference to the keyword from the layer_keyword table.
                        $keyword_sql = "DELETE FROM layer_keyword " .
                                       "WHERE fkey_layer_id = $1 " .
                                       "AND fkey_keyword_id = $2";
                        $v = array($layer_id, $keyword_id);
                        $t = array("i", "i");
                        db_prep_query($keyword_sql, $v, $t);
                        #Checking, if the keyword is in use by any layer
                        $layer_sql = "SELECT * FROM layer_keyword " .
                                       "WHERE fkey_keyword_id = $1";
                        $v = array($keyword_id);
                        $t = array("i");
                        $res_layer_sql = db_prep_query($layer_sql, $v, $t);
                        if(!($row = db_fetch_array($res_layer_sql)))
                        {
                            #If keyword will not longer be in use, delete it from keyword table
                            $keyword_sql = "DELETE FROM keyword " .
                                           "WHERE keyword_id = $1";
                            $v = array($keyword_id);
                            $t = array("i");
                            db_prep_query($keyword_sql, $v, $t);
                        }
                    }
                    #Keyword exists in the database and in the user data
                    else
                    {
                        #echo "1d: Keyword ist in User Liste: Keyword: ", $keyword, ";<br>";
                        for($i = 0; $i < count($keywords); $i++)
                        {
                            #Delete keyword from the user data list, because the data
                            #have not to be updated within the database
                            if($keywords[$i] == $keyword)
                            {
                                $keywords[$i] = null;
                            }
                        }
                    }
                }
                #Inserting keyword, that are not existing in the database
                for($i = 0; $i < count($keywords); $i++)
                {
                    #echo "2: Alle Eintr�ge des Keyword arrays: Keyword: ", $keywords[$i], "; Index: ", $i, ";<br>";
                    if($keywords[$i] != null)
                    {
                        #echo "3: Eintr�ge ungleich null: Keyword: ", $keywords[$i], "; Index: ", $i, ";<nr>";
                        $keyword = trim($keywords[$i]);
                        #Check, if the keyword is exsiting in the database
                        $keyword_sql = "SELECT keyword_id FROM keyword " .
                                       "WHERE UPPER(keyword) = UPPER($1)";
                        $v = array($keyword);
                        $t = array("s");
                        $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
                        $keyword_row = db_fetch_array($res_keyword_sql);
                        #Keyword exists in the database
                        if($keyword_row != null)
                        {
                            $keyword_id = $keyword_row[0];
                            #echo "4: Keyword in Datenbank vorhanden: id des Keywords: ", $keyword_id, ";<br>";
                        }
                        #Keyword does not exist in the database
                        else
                        {
                            $keyword_sql = "INSERT INTO keyword (keyword) VALUES ($1)";
                            $v = array($keyword);
                            $t = array("s");
                            $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
                            
                            $keyword_sql = "SELECT keyword_id FROM keyword WHERE keyword = $1";
                            $v = array($keyword);
                            $t = array("s");
                            $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
                            $keyword_row = db_fetch_array($res_keyword_sql);
                            if($keyword_row != null)
                            {
                                $keyword_id = $keyword_row[0];
                                #echo "4: Keyword in der Datenbank nicht vorhanden: id des Keywords: ", $keyword_id, ";<br>";
                            }
                        }
                        #Inserting the reference between layer and keyword in the layer_keyword table
                        $keyword_sql = "INSERT INTO layer_keyword (fkey_layer_id, fkey_keyword_id) " .
                                       "VALUES ($1, $2)";
                        $v = array($layer_id, $keyword_id);
                        $t = array("s", "s");
                        $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
                    }
                }
                #Delete all elements from array
                unset($keywords);
            }
        }
    }
}
unset($update_content);

#delete preview

if(isset($_REQUEST['delete_preview']) && $_REQUEST['delete_preview']=='1'
	&& isset($_REQUEST['layer_id']))
{
    $preview_sql = "DELETE FROM layer_preview WHERE fkey_layer_id = $1";
    $v = array($_REQUEST['layer_id']);
    $t = array("s");
    $res_preview_sql = db_prep_query($preview_sql, $v, $t);
    die("Preview has been deleted!</body></html>");
}
?>
<form name='form1' action='<?php echo $self . "&show_wms_list=true"; ?>' method='post'>

<table border='0'>
<tr>
<td WIDTH="300" align="left">
<B>WMS Metadaten<B/>
<td/>
<td WIDTH="160">
<td/>
</tr>

<?php  

#Use select box to select a wms

if (isset($_REQUEST['show_wms_list']) && $_REQUEST['show_wms_list'] == true)
{

    #Querying information from wms data table 
    $wms_sql = "SELECT wms_id, wms_title FROM wms WHERE wms_owner = $1 ORDER BY wms_title";
    $v = array(Mapbender::session()->get("mb_user_id"));
    $t = array("i");
    $res_wms_sql = db_prep_query($wms_sql, $v, $t);
    #wms-selection

    $selectBox = "";
    while($row = db_fetch_array($res_wms_sql)) {
        if ($adm->getWmsPermission($row["wms_id"], Mapbender::session()->get("mb_user_id"))) {
	        $selectBox .= "<option value='".$row["wms_id"]."' ";
	        if(isset($_REQUEST['wmsList']) && $_REQUEST['wmsList'] == $row["wms_id"]) {
	            $selectBox .= "selected";
	        }
	        $selectBox .= "> ".$row["wms_title"]."</option>";
        }
    }
    
    if ($selectBox != "") {
	    echo "<tr><td>";
	    echo "<select size=6 name='wmsList' onchange='submit()'>".$selectBox."</select>";
	    echo "</td><td width='160px' align='right'>";
	    echo "<input type='button' class='sbutton' value='save' onclick='save()'>";
		echo "</td></tr>";
    }
    else {
    	echo "<div>no wms owner.</div>";
    	die;
    }

    if(isset($_REQUEST['wmsList']) == true && $_REQUEST['wmsList'] <>0)
    editWMSByWMSID ($_REQUEST['wmsList']);
}

echo "</table>";

//$wms_id;
function editWMSByWMSID($param_wms_id)
{
    global $wms_id;
    $wms_id = $param_wms_id;

}


if(isset($wms_id) == true && $wms_id <>0)
{ 
	$selected_wms_sql = "SELECT * FROM wms WHERE wms_id = $1";
	$v = array($wms_id);
	$t = array("s");
    $res_selected_wms_sql = db_prep_query($selected_wms_sql, $v, $t);
    $selected_row = db_fetch_array($res_selected_wms_sql);

?>
    
    <table border='0' class='table_top' >
    <tr>
    <td>WMS-Titel:<td><td/>
    <input type='text' name='wms_title_box' value='<?php echo $selected_row["wms_title"];?>' /><td/>

    <td>WMS- Abstract:<td><td/>
    <input type='text' name='wms_abstract_box' value='<?php echo htmlentities($selected_row["wms_abstract"],ENT_QUOTES,"UTF-8");?>' /><td/>

    <td >Fees:<td><td/>
    <input type='text' name='fees_box' value='<?php echo $selected_row["fees"]?>'/><td/>
    <tr/>
       
    <tr>
    <td>Access Constraints:<td><td/>
    <input type='text' name='accessconstraints_box' value='<?php echo $selected_row["accessconstraints"]?>'/><td/>

    <td>Contact Person:<td><td/>
    <input type='text' name='contactperson_box' value='<?php echo $selected_row["contactperson"]?>'/><td/>

    <td>Contact Position:<td><td/>
    <input type='text' name='contactposition_box' value='<?php echo $selected_row["contactposition"]?>'/><td/>
    <tr/>
    
    <tr>
    <td>Contact Organization:<td><td/>
    <input type='text' name='contactorganization_box' value='<?php echo $selected_row["contactorganization"]?>'/><td/>
 
    <td>Address:<td><td/>
    <input type='text' name='address_box' value='<?php echo $selected_row["address"]?>'/><td/>

    <td style="width:">City:<td><td/>
    <input type='text' name='city_box' value='<?php echo $selected_row["city"]?>'/><td/>
    <tr/>
    
    <tr>
    <td>State or Province:<td><td/>
    <input type='text' name='stateorprovince_box' value='<?php echo $selected_row["stateorprovince"]?>'/><td/>

    <td>Postcode:<td><td/>
    <input type='text' name='postcode_box' value='<?php echo $selected_row["postcode"]?>'/><td/>
    
    <td>Country:<td><td/>
    <input type='text' name='country_box' value='<?php echo $selected_row["country"]?>'/><td/>
    <tr/>
    
    <tr>
    <td>Telephone:<td><td/>
    <input type='text' name='contactvoicetelephone_box' 
        value='<?php echo $selected_row["contactvoicetelephone"]?>'/><td/>
    
    <td>Fax:<td><td/>
    <input type='text' name='contactfacsimiletelephone_box' value='<?php echo $selected_row["contactfacsimiletelephone"]?>'/><td/>
    
    <td>E-Mail:<td><td/>
    <input type='text' name='contactelectronicmailaddress_box' value='<?php echo $selected_row["contactelectronicmailaddress"]?>'/><td/>
    <tr/>
    <tr>
    <?php
  if (isset($selected_row["wms_timestamp"]) && $selected_row["wms_timestamp"] <> "") {
    $datum = date("d.m.Y",$selected_row["wms_timestamp"]);
  }
  else $datum = ""
?>
    <td>Date:<td><td/>
    <input type='text' name='wms_timestamp_box' value='<?php echo $datum?>' onClick='pick_the_date(document.form1.wms_timestamp_box)'/><td/>
    <tr/>
    
    <table class="table_layer">
    <tr><td>Nr.</td><td>Title</td><td>Abstract</td><td>Keywords</td><td></td></tr>

    
<?php
   
    $layer_sql = "SELECT * FROM layer WHERE layer.fkey_wms_id = $1" .
                 " ORDER BY layer_pos";
    $v = array($wms_id);
    $t = array("s");
    $res_layer_sql = db_prep_query($layer_sql, $v, $t);
    
    while($layer_row = db_fetch_array($res_layer_sql))
    {
    ?>
        <tr align='center'>
        <td><input type='text' size='1' name='L_<?php echo $layer_row['layer_id']?>___layer_nr' 
            value='<?php echo $layer_row['layer_pos']?>' readonly></td>
        <td><input type='text' size='15' name='L_<?php echo $layer_row['layer_id']?>___layer_title' 
            value='<?php echo $layer_row['layer_title']?>' readonly></td>
        <td><input type='text' size='42' name='L_<?php echo $layer_row['layer_id']?>___layer_abstract'
            value='<?php echo htmlentities($layer_row['layer_abstract'],ENT_QUOTES,"UTF-8")?>'>

    <?php
        $keyword_sql = "SELECT keyword FROM keyword, layer_keyword, layer " .
                       "WHERE keyword.keyword_id = layer_keyword.fkey_keyword_id " .
                       "AND layer_keyword.fkey_layer_id = layer.layer_id " .
                       "AND layer.fkey_wms_id = $1 " .
                       "AND layer.layer_id = $2";
        $v = array($wms_id, $layer_row['layer_id']);
        $t = array("s", "i");
        $res_keyword_sql = db_prep_query($keyword_sql, $v, $t);
        $keywordList = "";
        $seperator = "";
        while($keyword_row = db_fetch_array($res_keyword_sql))
        {
            if($keywordList != "")
            {    
                $seperator = ",";
            }
            $keywordList .= $seperator.$keyword_row["keyword"];
        }
        ?>
        <td><input type='text' size='42' name='L_<?php echo $layer_row['layer_id']?>___layer_keywords' 
             value='<?php echo $keywordList?>'>        
        </td>
        <td>
        <!--
        <input type="button" value='preview' onclick="window.open('../frames/index.php?&gui_id=layer_preview&layer_preview=1&portal_services=<?php echo $layer_row['layer_id'];?>', 'mini_mapbender', 'height=370, width=370, dependent=yes');">
        -->
        </td>
        <td>
<?php 
/*
    $preview_sql = "SELECT * FROM layer_preview " .
                   "WHERE fkey_layer_id = ".$layer_row['layer_id']."";
    $res_preview_sql = db_query($preview_sql);
	if(db_numrows($res_preview_sql)>0){?>
        <!--
        <input id="<?php echo $layer_row['layer_id'];?>_dp" type="button" value='delete preview' onclick="deletepreview('<?php echo $layer_row['layer_id'];?>');">
        -->
<?php }else{?>
		<!--
        <input id="<?php echo $layer_row['layer_id'];?>_dp" type="button" value='delete preview' style="display:none;" onclick="deletepreview('<?php echo $layer_row['layer_id'];?>');">
        -->
<?php }*/?>
        </td>
        </tr>
    <?php
    }

    ?>
    </table>
    <input type='hidden' name='update_content' value=''/>
    <input type='hidden' name='wms_id' value='<?php echo $wms_id ?>'/>
	<!--
    <input type="hidden" value='' name='delete_preview'>
    -->
    <input type="hidden" value='' name='layer_id'>
    </form>
    </body>
    </html>
<?php
}
?>