<?php session_start(); require('incl/const.php'); require('class/database.php'); require('class/map.php'); require('class/app.php'); require('class/access_groups.php'); if(!isset($_SESSION['user']) || $_SESSION['user']->accesslevel != 'Admin'){ header('Location: ../login.php'); exit; } $database = new Database(DB_HOST, DB_NAME, DB_USER, DB_PASS, DB_PORT, DB_SCMA); $map = ['name' => '','description' => '']; $map_acc_ids = array(); $use_dt = false; if(!empty($_GET['id'])){ $map_obj = new map_Class($database->getConn(), $_SESSION['user']->id); $result = $map_obj->getById($_GET['id']); if(!$result){ $_GET['error'] = 'Error: No such map!'; exit; } $map = pg_fetch_assoc($result); pg_free_result($result); $map_acc_grps = $map_obj->getAccessGroups($_GET['id']); $map_acc_ids = array_keys($map_acc_grps); list($dss,$lys,$use_dt) = App::parseDatasources(APPS_DIR.'/'.$map['id']); }else{ $upload_dir = App::upload_dir($_SESSION['user']->ftp_user); $app_names = App::getApps($upload_dir); } $acc_obj = new access_group_Class($database->getConn(), $_SESSION['user']->id); $acc_grps = $acc_obj->getRowsArr(); ?> <!DOCTYPE html> <html dir="ltr" lang="en"> <head> <?php include("incl/meta.php"); ?> <link href="dist/css/table.css" rel="stylesheet"> <?php if(!empty($_GET['id'])){ ?> <link href="dist/css/accordion.css" rel="stylesheet"> <?php } ?> <script type="text/javascript"> $(document).ready(function() { $('[data-toggle="tooltip"]').tooltip(); $('#map_form').submit(false); <?php if(isset($_GET['id'])){ foreach($dss as $dsi => $ds) { if($ds['data_type'] == 'gs'){ ?> $('#pg_details<?=$dsi?>').hide(); <?php } else if($ds['data_type'] == 'pg'){ ?> $('#gs_details<?=$dsi?>').hide(); <?php }else { ?> $('#pg_details<?=$dsi?>').hide(); $('#gs_details<?=$dsi?>').hide(); <?php } } foreach($lys as $lyi => $ly) { if($ly['layer_type'] == 'gs_geo'){ ?> $('#wms_details<?=$lyi?>').hide(); <?php }else if($ly['layer_type'] == 'wms'){ ?> $('#gs_geo_details<?=$lyi?>').hide(); <?php } } } ?> $('#archive').hide(); $(document).on("click", 'input[name="from_type"]', function() { if($(this).attr('id') == 'from_uploaded'){ $('#app').show(); $('#app').prop('disabled', false); $('#app').prop('required',true); $('#archive').hide();$('#archive').prop('disabled', true); $('#archive').prop('required',false); }else{ $('#app').hide(); $('#app').prop('disabled', true); $('#app').prop('required',false); $('#archive').show(); $('#archive').prop('disabled', false); $('#archive').prop('required',true); } }); //// data $(document).on("click", 'input[class="data_files"]', function() { const id = $(this).attr('data-id'); let pg = $('#pg_details' + id); let gs = $('#gs_details' + id); pg.hide(); pg.children('input').prop('required',false); gs.hide(); gs.children('input').prop('required',false); }); $(document).on("click", 'input[class="data_pg"]', function() { const id = $(this).attr('data-id'); let pg = $('#pg_details' + id); let gs = $('#gs_details' + id); pg.show(); pg.children('input').prop('required',true); gs.hide(); gs.children('input').prop('required',false); }); $(document).on("click", 'input[class="data_gs"]', function() { const id = $(this).attr('data-id'); let pg = $('#pg_details' + id); let gs = $('#gs_details' + id); pg.hide(); pg.children('input').prop('required',false); gs.show(); gs.children('input').prop('required',true); }); //// layers $(document).on("click", 'input[class="layer_wms"]', function() { const id = $(this).attr('data-id'); let wms = $('#wms_details' + id); let gs = $('#gs_geo_details' + id); wms.show(); wms.children('input').prop('required',true); wms.children('input[name^="wms_user"], input[name^="wms_pwd"]').prop('required',false); gs.hide(); gs.children('input').prop('required',false); }); $(document).on("click", 'input[class="layer_gs_geo"]', function() { const id = $(this).attr('data-id'); let wms = $('#wms_details' + id); let gs = $('#gs_geo_details' + id); wms.hide(); wms.children('input').prop('required',false); gs.show(); gs.children('input').prop('required',true); }); // Update/Create connection on submit button click $(document).on("click", "#btn_submit", function() { let obj = $(this); let input = $('#map_form').find('input[type="text"], input[type="password"], select'); let empty = false; input.each(function() { if (!$(this).prop('disabled') && $(this).prop('required') && !$(this).val()) { $(this).addClass("error"); empty = true; } else { $(this).removeClass("error"); } }); if(empty){ $('#map_form').find(".error").first().focus(); }else{ $.ajax({ type: "POST", url: 'action/map.php', data: new FormData($('#map_form')[0]), processData: false, contentType: false, dataType:"json", success: function(response){ alert(response.message); if(response.success) { <?php if(isset($_GET['id'])){ ?> window.location.href = 'maps.php'; // redirect to maps.php <?php } else { ?> window.location.href = 'edit_map.php?id=' + response.id; // redirect to step 2 for datasources <?php } ?> } } }); } }); }); </script> </head> <body> <div id="main-wrapper" data-layout="vertical" data-navbarbg="skin5" data-sidebartype="full" data-sidebar-position="absolute" data-header-position="absolute" data-boxed-layout="full"> <?php const MENU_SEL = 'maps.php'; include("incl/topbar.php"); include("incl/sidebar.php"); ?> <div class="page-wrapper"> <div class="page-breadcrumb" style="padding-left:30px; padding-right: 30px; padding-top:0px; padding-bottom: 0px"> <div class="row align-items-center"> <div class="col-6"> <nav aria-label="breadcrumb"> </nav> <?php if(isset($_GET['id'])){ ?> <h1 class="mb-0 fw-bold">Update Map <?=$_GET['id']?></h1> <?php } else { ?> <h1 class="mb-0 fw-bold">Add new map</h1> <?php } ?> </div> <div class="col-6"> <div class="text-end upgrade-btn"> </div> </div> </div> </div> <div class="container-fluid"> <form action="" method="post" enctype="multipart/form-data" id="map_form" style="width: 50%;"> <?php if (isset($_GET['error'])) { ?> <div class="alert alert-danger" role="alert"> <?=$_GET['error']?> </div> <?php } ?> <?php if(isset($_GET['id'])){ ?> <input type="hidden" class="form-control" name="id" id="id" value="<?=$_GET['id']?>" /> <?php } ?> <input type="hidden" class="form-control" name="save" id="save" value="1" /> <div class="form-group"> <label for="name" class="form-label">Name</label> <input type="text" class="form-control" name="name" id="name" value="<?=$map['name']?>" required/> <label for="description" class="form-label">Description</label> <input type="text" class="form-control" name="description" id="description" value="<?=$map['description']?>" required/> </div> <?php if(!isset($_GET['id'])){ ?> <fieldset> <legend>Source</legend> <div class="form-group"> <input type="radio" id="from_uploaded" name="from_type" value="uploaded" checked> <label for="from_uploaded">Uploads</label> <input type="radio" id="from_zip" name="from_type" value="archive"> <label for="from_zip">Archive</label> <select class="form-control" name="app" id="app" aria-label="Select app"> <?php foreach($app_names as $k){ ?> <option <?php if($k == $map['name']){ ?> selected <?php }?> value="<?=$k?>"><?=$k?></option> <?php } ?> </select> <input type="file" class="form-control" name="archive" id="archive" value="" accept=".zip" disabled/> <p>NOTE: Archive can contains files, or project directory.</p> </div> </fieldset> <?php }else { $aci = 0; ?> <fieldset> <legend>Data</legend> <?php foreach($dss as $dsi => $ds) { ?> <div class="panel-group" id="accordion<?=$aci?>" role="tablist" aria-multiselectable="false"> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="heading<?=$aci?>"> <h5 class="panel-title"> <a role="button" data-toggle="collapse" class="accordion-plus-toggle collapsed" data-parent="#accordion<?=$aci?>" href="#collapse<?=$aci?>" aria-expanded="false" aria-controls="collapse<?=$aci?>"><?=$ds['name']?></a> </h5> </div> <div id="collapse<?=$aci?>" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading<?=$aci?>"> <div class="form-group col-sm"> <input type="radio" class="data_files" data-id="<?=$dsi?>" name="data_type<?=$dsi?>" value="file" <?php if($ds['data_type'] == 'file'){ ?> checked<?php } ?>> <label for="data_files<?=$dsi?>">Files</label> <input type="radio" class="data_pg" data-id="<?=$dsi?>" name="data_type<?=$dsi?>" value="pg" <?php if($ds['data_type'] == 'pg'){ ?> checked<?php } ?>> <label for="data_pg<?=$dsi?>">Postgres</label> <input type="radio" class="data_gs" data-id="<?=$dsi?>" name="data_type<?=$dsi?>" value="gs" <?php if($ds['data_type'] == 'gs'){ ?> checked<?php } ?>> <label for="data_gs<?=$dsi?>">GeoServer</label> </div> <div class="pg_details" id="pg_details<?=$dsi?>"> <label for="pg_host<?=$dsi?>" class="form-label">Host</label> <input type="text" class="form-control" name="pg_host<?=$dsi?>" id="pg_host<?=$dsi?>" value="<?=$ds['pg_host']?>"/> <label for="pg_port<?=$dsi?>" class="form-label">Port</label> <input type="text" class="form-control" name="pg_port<?=$dsi?>" id="pg_port<?=$dsi?>" value="<?=$ds['pg_port']?>"/> <label for="pg_db<?=$dsi?>" class="form-label">Database</label> <input type="text" class="form-control" name="pg_db<?=$dsi?>" id="pg_db<?=$dsi?>" value="<?=$ds['pg_db']?>"/> <label for="pg_user<?=$dsi?>" class="form-label">User</label> <input type="text" class="form-control" name="pg_user<?=$dsi?>" id="pg_user<?=$dsi?>" value="<?=$ds['pg_user']?>"/> <label for="pg_pwd<?=$dsi?>" class="form-label">Password</label> <input type="password" class="form-control" name="pg_pwd<?=$dsi?>" id="pg_pwd<?=$dsi?>" value="<?=$ds['pg_pwd']?>"/> <div class="form-group"> <label for="pg_cache<?=$dsi?>" class="form-label">Cache</label> <input type="number" name="pg_cache_val<?=$dsi?>" id="pg_cache_val<?=$dsi?>" value="<?=$ds['pg_cache_val']?>"/> <select name="pg_cache_per<?=$dsi?>" id="pg_cache_per<?=$dsi?>"> <?php foreach(TIME_MAP as $per => $val) { ?> <option value="<?=$per?>" <?php if($ds['pg_cache_per'] == $per) { ?> selected <?php } ?>><?=$per?></option> <?php } ?> </select> </div> </div> <div class="gs_details" id="gs_details<?=$dsi?>"> <label for="gs_host<?=$dsi?>" class="form-label">Host</label> <input type="text" class="form-control" name="gs_host<?=$dsi?>" id="gs_host<?=$dsi?>" value="<?=$ds['gs_host']?>"/> <label for="gs_user<?=$dsi?>" class="form-label">User</label> <input type="text" class="form-control" name="gs_user<?=$dsi?>" id="gs_user<?=$dsi?>" value="<?=$ds['gs_user']?>"/> <label for="gs_pwd<?=$dsi?>" class="form-label">Password</label> <input type="password" class="form-control" name="gs_pwd<?=$dsi?>" id="gs_pwd<?=$dsi?>" value="<?=$ds['gs_pwd']?>"/> <label for="gs_ws<?=$dsi?>" class="form-label">Workspace</label><input type="text" class="form-control" name="gs_ws<?=$dsi?>" id="gs_ws<?=$dsi?>" value="<?=$ds['gs_ws']?>"/> <div class="form-group"> <label for="gs_cache<?=$dsi?>" class="form-label">Cache</label> <input type="number" name="gs_cache_val<?=$dsi?>" id="gs_cache_val<?=$dsi?>" value="<?=$ds['gs_cache_val']?>"/> <select name="gs_cache_per<?=$dsi?>" id="gs_cache_per<?=$dsi?>"> <?php foreach(TIME_MAP as $per => $val) { ?> <option value="<?=$per?>" <?php if($ds['gs_cache_per'] == $per) { ?> selected <?php } ?>><?=$per?></option> <?php } ?> </select> </div> </div> </div> </div> </div> <?php $aci = $aci + 1; } ?> </fieldset> <fieldset> <legend>Layers</legend> <?php foreach($lys as $lyi => $ly) { ?> <div class="panel-group" id="accordion<?=$aci?>" role="tablist" aria-multiselectable="false"> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="heading<?=$aci?>"> <h5 class="panel-title"> <a role="button" data-toggle="collapse" class="accordion-plus-toggle collapsed" data-parent="#accordion<?=$aci?>" href="#collapse<?=$aci?>" aria-expanded="false" aria-controls="collapse<?=$aci?>"><?=$ly['name']?></a> </h5> </div> <div id="collapse<?=$aci?>" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading<?=$aci?>"> <div class="form-group col-sm"> <input type="radio" class="layer_wms" data-id="<?=$lyi?>" name="layer_type<?=$lyi?>" value="wms" <?php if($ly['layer_type'] == 'wms'){ ?> checked<?php } ?>> <label for="layer_wms<?=$lyi?>">WMS</label> <input type="radio" class="layer_gs_geo" data-id="<?=$lyi?>" name="layer_type<?=$lyi?>" value="gs_geo" <?php if($ly['layer_type'] == 'gs_geo'){ ?> checked<?php } ?>> <label for="layer_gs_geo<?=$lyi?>">GeoJSON(GS)</label> </div> <input type="hidden" name="layer_varname<?=$lyi?>" id="layer_varname<?=$lyi?>" value="<?=$ly['layer_varname']?>"/> <div class="wms_details" id="wms_details<?=$lyi?>"> <label for="wms_url<?=$lyi?>" class="form-label">URL</label> <input type="text" class="form-control" name="wms_url<?=$lyi?>" id="wms_url<?=$lyi?>" value="<?=$ly['wms_url']?>"/> <label for="wms_ws<?=$lyi?>" class="form-label">Workspace</label> <input type="text" class="form-control" name="wms_ws<?=$lyi?>" id="wms_ws<?=$lyi?>" value="<?=$ly['wms_ws']?>"/> <label for="wms_layer<?=$lyi?>" class="form-label">Layer</label> <input type="text" class="form-control" name="wms_layer<?=$lyi?>" id="wms_layer<?=$lyi?>" value="<?=$ly['wms_layer']?>"/> <label for="wms_user<?=$lyi?>" class="form-label">User (only for secured connections)</label> <input type="text" class="form-control" name="wms_user<?=$lyi?>" id="wms_user<?=$lyi?>" value="<?=$ly['wms_user']?>"/> <label for="wms_pwd<?=$lyi?>" class="form-label">Password</label> <input type="password" class="form-control" name="wms_pwd<?=$lyi?>" id="wms_pwd<?=$lyi?>" value="<?=$ly['wms_pwd']?>"/> </div> <div class="gs_geo_details" id="gs_geo_details<?=$lyi?>"> <label for="gs_geo_host<?=$lyi?>" class="form-label">Host</label> <input type="text" class="form-control" name="gs_geo_host<?=$lyi?>" id="gs_geo_host<?=$lyi?>" value="<?=$ly['gs_geo_host']?>"/> <label for="gs_geo_user<?=$lyi?>" class="form-label">User</label> <input type="text" class="form-control" name="gs_geo_user<?=$lyi?>" id="gs_geo_user<?=$lyi?>" value="<?=$ly['gs_geo_user']?>"/> <label for="gs_geo_pwd<?=$lyi?>" class="form-label">Password</label> <input type="password" class="form-control" name="gs_geo_pwd<?=$lyi?>" id="gs_geo_pwd<?=$lyi?>" value="<?=$ly['gs_geo_pwd']?>"/> <label for="gs_geo_ws<?=$lyi?>" class="form-label">Workspace</label> <input type="text" class="form-control" name="gs_geo_ws<?=$lyi?>" id="gs_geo_ws<?=$lyi?>" value="<?=$ly['gs_geo_ws']?>"/> <label for="gs_geo_layer<?=$lyi?>" class="form-label">Layer</label> <input type="text" class="form-control" name="gs_geo_layer<?=$lyi?>" id="gs_geo_layer<?=$lyi?>" value="<?=$ly['gs_geo_layer']?>"/> <div class="form-group"> <label for="gs_geo_color<?=$lyi?>" class="form-label">Color</label> <input type="color" class="form-control" name="gs_geo_color<?=$lyi?>" id="gs_geo_color<?=$lyi?>" value="<?=$ly['gs_geo_color']?>"/> <input type="range" class="form-control" name="gs_geo_opacity<?=$lyi?>" id="gs_geo_opacity<?=$lyi?>" value="<?=$ly['gs_geo_opacity']?>" min="0" max="100"/> </div> <div class="form-group"> <label for="gs_geo_fillcolor<?=$lyi?>" class="form-label">Fill Color</label> <input type="color" class="form-control" name="gs_geo_fill_color<?=$lyi?>" id="gs_geo_fill_color<?=$lyi?>" value="<?=$ly['gs_geo_fill_color']?>"/> <input type="range" class="form-control" name="gs_geo_fill_opacity<?=$lyi?>" id="gs_geo_fill_opacity<?=$lyi?>" value="<?=$ly['gs_geo_fill_opacity']?>" min="0" max="100"/> </div> <div class="form-group"> <label for="gs_geo_cache<?=$lyi?>" class="form-label">Cache</label> <input type="number" name="gs_geo_cache_val<?=$lyi?>" id="gs_geo_cache_val<?=$lyi?>" value="<?=$ly['gs_geo_cache_val']?>"/> <select name="gs_geo_cache_per<?=$lyi?>" id="gs_geo_cache_per<?=$lyi?>"> <?php foreach(TIME_MAP as $per => $val) { ?> <option value="<?=$per?>" <?php if($ly['gs_geo_cache_per'] == $per) { ?> selected <?php } ?>><?=$per?></option> <?php } ?> </select> </div> </div> </div> </div> </div> <?php $aci = $aci + 1; } ?> </fieldset> <?php } ?> <fieldset> <legend>View</legend> <div class="form-group"> <input type="checkbox" class="form-checkbox" name="use_datatable" id="use_datatable" value="1" <?php if($use_dt) {?> checked <?php } ?>/> <label for="use_datatable" class="form-label">Show DataTable below map</label> </div> <div class="form-group"> <label for="image" class="form-label">Preview image (.png, .jpeg formats)</label> <?php if(isset($_GET['id']) && is_file("../assets/maps/".$_GET['id'].".png")){ ?> <img src="../assets/maps/<?=$_GET['id']?>.png" alt="Map Preview" width="200" height="150"> <?php } else { ?> <img src="../assets/maps/default.png" alt="Map Preview" width="200" height="150"> <?php } ?> <input type="file" class="form-control" name="image" id="image" value="" accept=".png,.jpg,.jpeg"/> </div> <div class="form-group"> <label for="accgrps" class="form-label">Access Groups</label> <select class="form-control" name="accgrps[]" id="accgrps" aria-label="Select access groups" multiple required> <?php foreach($acc_grps as $k => $v){?> <option <?php if(in_array($k, $map_acc_ids)){?> selected <?php }?> value="<?=$k?>"><?=$v?></option> <?php } ?> </select> </div> </fieldset> <button type="submit" class="btn btn-primary" id="btn_submit"><?php if(isset($_GET['id'])){ ?>Update<?php } else { ?>Create<?php } ?></button> </form> </div> </div> <footer class="footer text-center"> </footer> </div> <script src="dist/js/sidebarmenu.js"></script> <script src="dist/js/custom.js"></script> </body> </html>