diff options
| author | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2026-07-12 15:51:52 +0300 |
|---|---|---|
| committer | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2026-07-12 15:51:52 +0300 |
| commit | 02608271bb2a9f3a65ed536984d306ee14b48e34 (patch) | |
| tree | 3f23ec48a694ec014e845c4f70d9b5f1c065403c /public/ui-show-item.php | |
| download | kalassa-master.tar.gz kalassa-master.tar.bz2 kalassa-master.zip | |
Diffstat (limited to 'public/ui-show-item.php')
| -rw-r--r-- | public/ui-show-item.php | 470 |
1 files changed, 470 insertions, 0 deletions
diff --git a/public/ui-show-item.php b/public/ui-show-item.php new file mode 100644 index 0000000..9e642e4 --- /dev/null +++ b/public/ui-show-item.php @@ -0,0 +1,470 @@ +<?php +// 00. INITIALIZATION ---------------------------------------------------------- +// * Load Parametres, Session and Functions; +// * Check User Permitions +// * Check Script Call +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + include("config/parametres.php"); + include("includes/sessions.php"); + include("includes/functions.php"); + + // if visitor has no ROLE -or- if ADMIN : then redirect to Login|Panel + // --------------------------------------------------------------------------- + if (!ROLE || (ROLE == ADMIN)) { + header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + header("Location: /"); + die(); + } + + // if item ID not passed redirec to to Control-Panel (or login) + // --------------------------------------------------------------------------- + if (isset($_GET['id'])) $item_id = $_GET['id']; + else { + $pi_Error = array('url' => '/', 'msg' => ERR_NEED_ID); + // include ("includes/show-error.php"); + } + + +// 01. GET DATA NEEDED --------------------------------------------------------- +// * from database +// * calculate psevdo-field values +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + // get totals of categories + // --------------------------------------------------------------------------- + $totals = get_totals(); + + // read fields options (json format) + // --------------------------------------------------------------------------- + $formARRAY = json_decode(FORMJSON); + + // get item record + // --------------------------------------------------------------------------- + + // init database connection + $_dbc = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBMS); + if ($_dbc->connect_errno) { + echo "Database connection failed; Please try in a few minutes. "; + if (TESTING) echo $_dbc->connect_error; + $_dbc->close(); die(); + } + $_dbc->set_charset("utf8"); + + // prepare statemet + $_stm = $_dbc->prepare("SELECT identity, img, img2, operator, `timestamp`, record FROM items WHERE id = ?"); + $_stm->bind_param("d", $item_id); // bind values + $_stm->execute(); // execute query + $_stm->store_result(); // store result + + if ($_stm->num_rows) { + + $_stm->bind_result($idnt, $imgfile, $imgfile2, $opr, $tm, $serREC); // bind result variables + $_stm->fetch(); // fetch FIRST record values + // unserialize main record to variable + $record = unserialize($serREC); + + $it_id = explode('.', $idnt); + + // calculate record + $record['id'] = $item_id; + $record['identity'] = $idnt; + $record['operator'] = $opr; + $record['itemid'] = end($it_id); + $record['totalitems'] = $totals[$record['ccode']]; + date_default_timezone_set('Europe/Athens'); + setlocale(LC_ALL, 'el_GR.UTF-8', 'grc'); + $record['timestamp'] = local_dt($tm); + + // calculate about image + if (strlen($imgfile) > 9) { + $has_image = true; + $sub_dir = intdiv($item_id,FOLDER_CPC) .'/'; + $image = '/'. UPLOAD_DIR . $sub_dir . $imgfile; + $thumb = '/'. UPLOAD_DIR . $sub_dir .'pi'. $imgfile; + } + else $has_image = false; + + // calculate about image2 + if (strlen($imgfile2) > 9) { + $has_image2 = true; + $sub_dir = intdiv($item_id,FOLDER_CPC) .'/'; + $image2 = '/'. UPLOAD_DIR . $sub_dir . $imgfile2; + $thumb2 = '/'. UPLOAD_DIR . $sub_dir .'pi'. $imgfile2; + } + else $has_image2 = false; + } + + $_stm->close(); // close statement + $_dbc->close(); // close connection + + + +// 02. RENDER HTML and DATA ---------------------------------------------------- +// * Draw fileds from Json Array per section +// * Put data from Record +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +?><!DOCTYPE html> +<html prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB" dir="ltr"> + <head> + <!-- Metas + Title --> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + + <title><?=PROJECT?> : Προεπισκόπιση Εγγραφής</title> + + <!-- CSS needed --> + <link href="https://fonts.googleapis.com/css?family=Ubuntu:400,700&display=swap" rel="stylesheet"> + <link rel="stylesheet" href="/css/bootstrap.min.css" /><!-- v4.4.1 --> + <link rel="stylesheet" href="/css/pi.css" /> + + <style> + @media print { + .dropdown-menu, .dropdown-menu .dropdown-item { display: none !important; } + } + </style> + </head> + <body> + <?php // Menu ---------------------------------------------------------------- + include("includes/menu.php"); + ?> + +<div class="pi-container"> + <h2>Προεπισκόπιση Εγγραφής</h2> + <h4> + Αριθμός Ταυτότητας αντικειμένου: <?=$idnt?> + <span class="pi-action"><a class="btn btn-pi-color" href="/ui-edit-item.php?id=<?=$record['id']?>">Επεξεργασία</a></span> + <?php if (ROLE > EDITOR) : ?> + <span class="pi-action"><a class="btn btn-pi-light" href="/print.php?id=<?=$record['id']?>" target="_blanc">Εκτύπωση καρτέλας</a></span> + <?php endif; ?> + </h4> + <hr /> + + <!-- upload image section --> + <div> + <p style="text-align: right; "> + <a class="btn btn-primary" data-toggle="collapse" href="#collapse-image" role="button">Φωτογραφίες αντικειμένου</a> + </p> + + <div class="collapse" id="collapse-image"> + + <!-- image --> + <div class="card card-body"> + + <div class="bgColor"> + <form id="upload-form" method="post"> + <div id="targetLayer"> + <?php if ($has_image) : ?> + <img class="image-preview" src="<?=$thumb?>" class="upload-preview"> + <?php else : ?> + No Image + <?php endif; ?> + </div> + <div id="uploadFormLayer"> + <input name="fileToUpload" type="file" class="inputFile" /><br/> + <input type="submit" value="Επισύναψη" class="btnSubmit" /><br /> + <div class="pi-note"> + <hr /> + Με την επισύναψη διαγράφεται τυχον παλιά φωτογραφία. + </div> + </form> + </div> + </div> + + </div> + + <!-- 2nd image --> + <div class="card card-body"> + + <div class="bgColor"> + <form id="upload-form2" method="post"> + <div id="targetLayer2"> + <?php if ($has_image2) : ?> + <img class="image-preview" src="<?=$thumb2?>" class="upload-preview"> + <?php else : ?> + No Image + <?php endif; ?> + </div> + <div id="uploadFormLayer2"> + <input name="fileToUpload" type="file" class="inputFile" /><br/> + <input type="submit" value="Επισύναψη" class="btnSubmit" /><br /> + <div class="pi-note"> + <hr /> + Με την επισύναψη διαγράφεται τυχον παλιά φωτογραφία. + </div> + </form> + </div> + </div> + + </div> + + + + </div> + + </div> + <!-- / upload iimage --> + + <?php foreach ($formARRAY as $key => $section) : ?> + <!-- <a class="pi-show-(+)-tab" data-toggle="collapse" href="#<?=$section->section?>" role="button" aria-expanded="true"><h4><?=$section->label?></a> --> + <h4><?=$section->label?></h4> + <!-- <div class="collapse multi-collapse" id="<?=$section->section?>"> --> + <div class="row"> + + <?php foreach ($section->childs as $key => $field) : ?> + <?php + $class = (isset($field->len)) ? ' col-md-'.$field->len : 'col-md-12'; // column class (for width) + ?> + <div class="pi-preview <?=$class?>"> + <span><?=$field->lab?> :</span> + <?php + $fdata = parse_any($field->nam, $record[$field->nam]); // parse field + current value + + $txt = $fdata['multi'] ? implode(", ", $fdata['value']) : $fdata['value']; // if array of values, implode values + + // handle ccode + // btw. get 'general' local-name + if ($field->nam == 'ccode') { + $cc = parse_ccode($record[$field->nam]); + // $piMore = $cc->local; + $localname = $cc->local; + } + // --- depricated: new field was set (localname) + // else $piMore = ""; + + // handle local-name + if ($field->nam == 'localname') { + // if a localname was explicity set use it; otherwise (if empty) use the 'general' one + if (trim($txt) == "") { + $txt = $localname; + } + } + ?> + + <?php if (($field->nam == 'ccode') || ($field->nam == 'identity')) : ?> + <strong><?=nl2br($txt)?></strong> + <?php else : ?> + <?=nl2br($txt)?> + <?php endif; ?> + + <?php /* --- depricated: if ($piMore != '') : ?> + (<?=$piMore?>) + <?php endif; */ ?> + + </div> + + <?php endforeach; ?> + + </div> + <!-- </div> --> + + <br /> + <?php endforeach; ?> + + <p class="pi-preview"> + <span class="pi-field-name">Συμπληρωματική Πληροφορία</span> + <?php + $fdata = parse_any($field->nam, $record['note']); // parse field + current value + $txt = $fdata['value']; // if array of values, implode values + ?> + <?=nl2br($txt)?> + </p> + + <span class="pi-action"><a class="btn btn-pi-color" href="/ui-edit-item.php?id=<?=$record['id']?>">Επεξεργασία Εγγραφής</a></span> + +</div> +<!-- DOM ENDS HERE --> + + <!-- scripts and libraries + load and register one by one, so you don't need to worry about if they are ready --> +<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.4.1/jquery-migrate.min.js"></script> +<script src="/js/bootstrap.min.js"></script> +<script> +// NOW RUN EVERYTHING AFTER JQUERY (AND DOM ready) +// ----------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////// + + // 00. FLAGS and NEEDED FUNCTIONS + // --------------------------------------------------------------------------- + ////////////////////////////////////////////////////////////////////////////// + + var waitingResponse = false; // flag for an ajax request that was sent and still waiting response + + // pure JS ajax GET request + // return data as JSON + // no fancy things like UTF8; if needed use base64 --------------------------- + function ajax_get(url, callback) { + var xmlhttp = new XMLHttpRequest(); + xmlhttp.onreadystatechange = function() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + + try { + var data = JSON.parse(xmlhttp.responseText); + } catch(err) { + console.log(err.message + " in " + xmlhttp.responseText); + return; + } + callback(data); + } + }; + + xmlhttp.open("GET", url, true); + xmlhttp.send(); + } + + + // 01. MENU MANAGEMENT + // --------------------------------------------------------------------------- + ////////////////////////////////////////////////////////////////////////////// + + // menu management + // --------------------------------------------------------------------------- + $('.dropdown-item').on('click', function(e){ + e.preventDefault(); + + if (!waitingResponse) { + waitingResponse = true; + + // var r = confirm("Δεν έχετε αποθηκεύσει το τρέχον αντικείμενο!\nΕίστε σίγουροι ότι θέλετε να εγκαταλείψετε τη σελίδα;"); + r = true; // no need for confirmation + if (r) { + + // all data-goto have the format: 'method,uri_address' + // uri_address is the url to call + // method options: + // * url : means goto url (redirect) + // * ajax : means call url via ajax; if 'success = true' then goto '/' after that + // ----------------------------------------------------------------------- + var opt = $(this).data('goto').split(','); // split data-goto + + if (opt[0] == 'url') { // if method = url + window.location.href = opt[1]; + } + else { // else, method = ajax + ajax_get(opt[1], function(response) { + if (response.success) { + window.location.href = '/'; + } + }); + } + + } + else { + // user did not confirmed the selection; do nothing + } + + waitingResponse = false; + } + + }); + + + // 02.IMAGE UPLOAD + // --------------------------------------------------------------------------- + ////////////////////////////////////////////////////////////////////////////// + + // image (1st image) + + var id = <?=$item_id?>; // current item id + var old = '<?=($has_image ? $imgfile : "")?>'; // current uploaded image for item + + $("#upload-form").on('submit', function(e) { + e.preventDefault(); + + if (!waitingResponse) { + waitingResponse = true; + + // url to call for next upload + var url = "upload.php?id=" + id + ((old == '') ? "" : ("&del=" + old)); + var imgHTML; + + $.ajax({ + url: url, + type: "POST", + data: new FormData(this), + contentType: false, + cache: false, + processData:false, + + success: function(data) { + var json = $.parseJSON(data); + if (json.success) { + imgHTML = '<img class="image-preview" src="/'+ json.thumbnail +'" class="upload-preview">'; + old = json.img; // register new 'old' image + } + else { + imgHTML = json.err; + } + + $("#targetLayer").html( imgHTML ); // refresh image + $('#upload-form').trigger("reset"); // reset form + + waitingResponse = false; + }, + error: function() { + // ... + waitingResponse = false; + } + }); + + } + + }); + + // image 2 (2nd image) + + var old2 = '<?=($has_image2 ? $imgfile2 : "")?>'; // current uploaded image for item + + $("#upload-form2").on('submit', function(e) { + e.preventDefault(); + + if (!waitingResponse) { + waitingResponse = true; + + // url to call for next upload + var url = "upload.php?id=" + id + "&sec=1" + ((old2 == '') ? "" : ("&del=" + old2)); + var imgHTML; + + $.ajax({ + url: url, + type: "POST", + data: new FormData(this), + contentType: false, + cache: false, + processData:false, + + success: function(data) { + var json = $.parseJSON(data); + if (json.success) { + imgHTML = '<img class="image-preview" src="/'+ json.thumbnail +'" class="upload-preview">'; + old2 = json.img; // register new 'old' image + } + else { + imgHTML = json.err; + } + + $("#targetLayer2").html( imgHTML ); // refresh image + $('#upload-form2').trigger("reset"); // reset form + + waitingResponse = false; + }, + error: function() { + // ... + waitingResponse = false; + } + }); + + } + + }); + +</script> + </body> +</html> |
