summaryrefslogtreecommitdiff
path: root/public/ui-show-item.php
diff options
context:
space:
mode:
authorGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2026-07-12 15:51:52 +0300
committerGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2026-07-12 15:51:52 +0300
commit02608271bb2a9f3a65ed536984d306ee14b48e34 (patch)
tree3f23ec48a694ec014e845c4f70d9b5f1c065403c /public/ui-show-item.php
downloadkalassa-master.tar.gz
kalassa-master.tar.bz2
kalassa-master.zip
initialize repository; add docker config; migrate configuration to new specsHEADmaster
Diffstat (limited to 'public/ui-show-item.php')
-rw-r--r--public/ui-show-item.php470
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>