Cistka
This commit is contained in:
44
administrace/data/katalog-26032301.xml
Normal file
44
administrace/data/katalog-26032301.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0"?>
|
||||
<katalog>
|
||||
<kategorie nazev="Prkna">
|
||||
<produkt nazev="Prkna 2/15/300">
|
||||
<rozmery>2/15/300</rozmery>
|
||||
<cena>100</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
<produkt nazev="Prkna 2/15/400">
|
||||
<rozmery>2/15/400</rozmery>
|
||||
<cena>110</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
<produkt nazev="Prkna 2/15/500">
|
||||
<rozmery>2/15/500</rozmery>
|
||||
<cena>120</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
</kategorie>
|
||||
<kategorie nazev="Palubky">
|
||||
<produkt nazev="palubky 2/14/400">
|
||||
<rozmery>2/14/400</rozmery>
|
||||
<cena>200</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
<produkt nazev="palubky 2/14/500">
|
||||
<rozmery>2/14/500</rozmery>
|
||||
<cena>210</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
</kategorie>
|
||||
<kategorie nazev="Hranoly">
|
||||
<produkt nazev="hranol 20/20/200">
|
||||
<rozmery>20/20/200</rozmery>
|
||||
<cena>300</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
<produkt nazev="hranol 25/25/200">
|
||||
<rozmery>25/25/200</rozmery>
|
||||
<cena>310</cena>
|
||||
<mj>m3</mj>
|
||||
</produkt>
|
||||
</kategorie>
|
||||
</katalog>
|
||||
@@ -1 +1,66 @@
|
||||
HELLO WORLD
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>JCH</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"/>
|
||||
|
||||
<style>
|
||||
|
||||
body {
|
||||
background-color: #7A532B;
|
||||
background-image: url(/img/prkna2.jpg);
|
||||
}
|
||||
button.uprav {
|
||||
background-color: lightgreen;
|
||||
}
|
||||
button.vymaz {
|
||||
background-color: #C44536;
|
||||
}
|
||||
div.katalog {
|
||||
background-color:#9D6E3C;
|
||||
padding: .3em;
|
||||
}
|
||||
div.kategorie {
|
||||
background-color: #7A532B;
|
||||
margin: .3em;
|
||||
border: 1px solid #5C3D1F;
|
||||
}
|
||||
div.kategorie>input {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
div.polozka {
|
||||
font-size: 1.2em;
|
||||
color: black;
|
||||
background-color: #A3723E;
|
||||
margin: .3em;
|
||||
padding: .2em;
|
||||
border: 1px solid #5C3D1F;
|
||||
}
|
||||
input,select,button {
|
||||
background-color: #B98855;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body >
|
||||
<select id="fileSelect">
|
||||
<option value="">-- vyber soubor --</option>
|
||||
<option value="JCH">Katalog-2026-03-23.xml</option>
|
||||
<option value="JCH">Katalog-2026-03-21.xml</option>
|
||||
<option value="JCH">Katalog-2026-02-15.xml</option>
|
||||
<option value="JCH">Katalog-2026-01-01.xml</option>
|
||||
</select>
|
||||
|
||||
<button id="loadkata" onclick="naplnitKatalog()">Načíst Katalog</button>
|
||||
<button id="savekata">Ulozit Katalog</button>
|
||||
<button id="presentkata">Vystavit Katalog</button>
|
||||
<button class="pridat-kategorii" style="">Pridat Kategorii</button>
|
||||
|
||||
|
||||
<div id="telo">
|
||||
</body>
|
||||
</html>
|
||||
<script src="katalog.js"></script>
|
||||
|
||||
392
administrace/katalog.js
Normal file
392
administrace/katalog.js
Normal file
@@ -0,0 +1,392 @@
|
||||
|
||||
function katalogToXML(katalog) {
|
||||
let xml = '<katalog>';
|
||||
|
||||
Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
xml += `<kategorie nazev="${kategorie}">`;
|
||||
|
||||
Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
xml += `<produkt nazev="${nazev}">`;
|
||||
Object.entries(data).forEach(([key, value]) => {
|
||||
xml += `<${key}>${value}</${key}>`;
|
||||
});
|
||||
xml += `</produkt>`;
|
||||
});
|
||||
|
||||
xml += `</kategorie>`;
|
||||
});
|
||||
|
||||
xml += '</katalog>';
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
||||
function xmlToKatalog(xmlString) {
|
||||
const parser = new DOMParser();
|
||||
const xmlDoc = parser.parseFromString(xmlString, "application/xml");
|
||||
const katalog = {};
|
||||
|
||||
xmlDoc.querySelectorAll('kategorie').forEach(kat => {
|
||||
const kNazev = kat.getAttribute('nazev');
|
||||
katalog[kNazev] = {};
|
||||
|
||||
kat.querySelectorAll('produkt').forEach(prod => {
|
||||
const pNazev = prod.getAttribute('nazev');
|
||||
const data = {};
|
||||
|
||||
prod.childNodes.forEach(node => {
|
||||
if(node.nodeType === 1) { // ELEMENT_NODE
|
||||
const key = node.nodeName;
|
||||
let value = node.textContent;
|
||||
// pokus převést čísla
|
||||
if(!isNaN(value)) value = Number(value);
|
||||
data[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
katalog[kNazev][pNazev] = data;
|
||||
});
|
||||
});
|
||||
|
||||
return katalog;
|
||||
}
|
||||
|
||||
function uuidv4() {
|
||||
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
|
||||
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
|
||||
);
|
||||
}
|
||||
|
||||
// Vypocita ceny do katalogu na zaklade zadane ceny bez DPH
|
||||
// Ceny se zaokrouhluji na koruny nahoru
|
||||
// Vsechny rozmery v katalogu jsou v cm
|
||||
function vypocitejCenu(uuid) {
|
||||
let nazev = document.getElementById("nazev-"+uuid).value
|
||||
// Prehodi pripadnou desetinnou carku na desetinnou tecku
|
||||
let zakladniCenaBezDPH = document.getElementById("cena-"+uuid).value.replace(/,/,'.')
|
||||
let mj = document.getElementById("mj-"+uuid).value
|
||||
// Rozbije rozmery na jednotlive hodnoty, prevede na cisla, seradi vzestupne
|
||||
let rozmery = document.getElementById("rozmery-"+uuid).value.split('/').map(Number).sort((x, y) => x - y)
|
||||
|
||||
let cena = {
|
||||
"bezDPH": zakladniCenaBezDPH,
|
||||
"sDPH": zakladniCenaBezDPH * 1.21,
|
||||
"ks": 0
|
||||
}
|
||||
console.log(mj)
|
||||
|
||||
if (mj == "ks") {
|
||||
cena.ks = cena.sDPH
|
||||
}
|
||||
// MJ = m
|
||||
// cena je s DPH za m
|
||||
// pouzije se pouze nejvetsi z rozmeru
|
||||
else if (mj == "m") {
|
||||
cena.ks = cena.sDPH/(100/rozmery.pop())
|
||||
}
|
||||
// MJ = m2
|
||||
// cena je s DPH za m2
|
||||
// zahazuje se nejmensi ze tri rozmeru
|
||||
// vypocet je cena/(10000/(r1*r2))
|
||||
else if (mj == "m2") {
|
||||
cena.ks = cena.sDPH/(10000/(rozmery.pop()*rozmery.pop()))
|
||||
}
|
||||
// MJ = m3
|
||||
// cena je s DPH za m3
|
||||
// vypocet je cena/(1000000/(r1*r2*r3))
|
||||
else if (mj == "m3") {
|
||||
cena.ks = cena.sDPH/(1000000/(rozmery.pop()*rozmery.pop()*rozmery.pop()))
|
||||
}
|
||||
|
||||
cena.bezDPH = Math.ceil(cena.bezDPH)
|
||||
cena.sDPH= Math.ceil(cena.sDPH)
|
||||
cena.ks = Math.ceil(cena.ks)
|
||||
document.getElementById("cenadph-"+uuid).value = cena.sDPH
|
||||
document.getElementById("cenaks-"+uuid).value = cena.ks
|
||||
return cena
|
||||
}
|
||||
|
||||
function zapniNaElementSortableJS(el) {
|
||||
new Sortable(el, {
|
||||
group: 'nested',
|
||||
animation: 150,
|
||||
fallbackOnBody: true,
|
||||
filter: ".ignore-elements",
|
||||
onMove: function (evt) {
|
||||
const dragged = evt.dragged; // element, který se táhne
|
||||
const target = evt.to; // element, kam by měl být vložen
|
||||
const isPolozka = dragged.classList.contains('polozka'); // např. kategorie mají class 'category'
|
||||
const targetIsKatalog = target.classList.contains('katalog'); // produkty mají class 'item'
|
||||
// Pokud se snažíme vložit kategorii do produktu, zablokuj
|
||||
if (! isPolozka && ! targetIsKatalog) {
|
||||
return false; // zakáže přesun
|
||||
}
|
||||
return true; // jinak povolit
|
||||
},
|
||||
swapThreshold: 0.65
|
||||
});
|
||||
}
|
||||
|
||||
// Rucne vyrobit polozku
|
||||
document.addEventListener("click", function(event) {
|
||||
if (event.target.classList.contains("pridat-polozku")) {
|
||||
let kategorie = event.target.closest(".kategorie");
|
||||
let seznam = kategorie.querySelector(".polozky");
|
||||
let nova = vyrobPolozku("Nova polozka", 100, "m3", "10/10/100");
|
||||
seznam.appendChild(nova);
|
||||
}
|
||||
// Rucne vyrobit kategorii
|
||||
if (event.target.classList.contains("pridat-kategorii")) {
|
||||
//let katalog = event.target.closest(".katalog");
|
||||
let katalog = document.getElementById("katalog")
|
||||
let nova = vyrobKategorii("Nova Kategorie");
|
||||
katalog.appendChild(nova)
|
||||
//event.target.before(nova)
|
||||
}
|
||||
if (event.target.classList.contains("vymaz-kat")) {
|
||||
let potvrzeni = confirm("Opravdu vymazat?")
|
||||
if(potvrzeni) {
|
||||
event.target.closest(".kategorie").remove()
|
||||
}
|
||||
}
|
||||
if (event.target.classList.contains("vymaz")) {
|
||||
let potvrzeni = confirm("Opravdu vymazat?")
|
||||
if(potvrzeni) {
|
||||
event.target.closest(".polozka").remove()
|
||||
}
|
||||
}
|
||||
if(event.target.classList.contains("ulozit-katalog")) {
|
||||
// tady se bude implementovat ulozeni katalogu do XML
|
||||
console.log("FF")
|
||||
console.log(document.getElementById("katalog"))
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function vyrobPolozku(nazev, cena, mj, rozmery) {
|
||||
|
||||
let uuid = uuidv4()
|
||||
let btnDel = document.createElement("button");
|
||||
btnDel.className = "vymaz"
|
||||
btnDel.textContent = "✗"
|
||||
|
||||
let nova = document.createElement("div");
|
||||
nova.className = "list-group-item nested-2 polozka";
|
||||
nova.id = uuid
|
||||
nova.appendChild(btnDel)
|
||||
|
||||
let nazevPolozky = document.createElement("input")
|
||||
nazevPolozky.setAttribute("type", "text")
|
||||
nazevPolozky.value = nazev
|
||||
nazevPolozky.id = "nazev-" + uuid
|
||||
|
||||
let rozmeryPolozky = document.createElement("input")
|
||||
rozmeryPolozky.setAttribute("type", "text")
|
||||
rozmeryPolozky.value = rozmery
|
||||
rozmeryPolozky.id = "rozmery-" + uuid
|
||||
rozmeryPolozky.setAttribute("onChange", "vypocitejCenu(this.parentElement.id)")
|
||||
|
||||
let cenaPolozky = document.createElement("input")
|
||||
cenaPolozky.setAttribute("type", "text")
|
||||
cenaPolozky.setAttribute("onChange", "vypocitejCenu(this.parentElement.id)")
|
||||
cenaPolozky.value = cena
|
||||
cenaPolozky.id = "cena-" + uuid
|
||||
|
||||
let cenaPolozkySDPH = document.createElement("input")
|
||||
cenaPolozkySDPH.setAttribute("type", "text")
|
||||
cenaPolozkySDPH.id = "cenadph-" + uuid
|
||||
let cenaPolozkyKs = document.createElement("input")
|
||||
cenaPolozkyKs.setAttribute("type", "text")
|
||||
cenaPolozkyKs.id = "cenaks-" + uuid
|
||||
|
||||
let mjPolozky = document.createElement("select")
|
||||
mjPolozky.id = "mj-" + uuid
|
||||
mjPolozky.setAttribute("onChange", "vypocitejCenu(this.parentElement.id)")
|
||||
let mjMoznosti = [{"klic": "m", "hodnota": "m"}, {"klic": "m2","hodnota": "m²"},{"klic": "m3","hodnota": "m³"},{"klic": "ks","hodnota": "ks"}]
|
||||
mjMoznosti.forEach((x, index, array) => {
|
||||
var option = document.createElement("option");
|
||||
option.value = x.klic
|
||||
option.text = x.hodnota
|
||||
mjPolozky.appendChild(option);
|
||||
});
|
||||
|
||||
nova.appendChild(document.createTextNode(" Nazev "));
|
||||
nova.appendChild(nazevPolozky)
|
||||
nova.appendChild(document.createTextNode(" Rozmery "));
|
||||
nova.appendChild(rozmeryPolozky)
|
||||
nova.appendChild(document.createTextNode(" MJ "));
|
||||
nova.appendChild(mjPolozky)
|
||||
nova.appendChild(document.createTextNode(" Cena bez DPH "));
|
||||
nova.appendChild(cenaPolozky)
|
||||
nova.appendChild(document.createTextNode(" Cena s DPH "));
|
||||
nova.appendChild(cenaPolozkySDPH)
|
||||
nova.appendChild(document.createTextNode(" Cena s DPH/ks "));
|
||||
nova.appendChild(cenaPolozkyKs)
|
||||
|
||||
return nova
|
||||
}
|
||||
|
||||
function vyrobKategorii(nazev) {
|
||||
let uuid = uuidv4()
|
||||
let kategorie = document.createElement("div")
|
||||
kategorie.className = "list-group-item nested-1 kategorie"
|
||||
let nazevKategorie = document.createElement("input")
|
||||
nazevKategorie.setAttribute("type", "text")
|
||||
nazevKategorie.value = nazev
|
||||
nazevKategorie.id = "nazev-" + uuid
|
||||
//kategorie.textContent = nazev
|
||||
kategorie.appendChild(nazevKategorie)
|
||||
let katProdCont = document.createElement("div")
|
||||
katProdCont.className = "list-group nested-sortable polozky"
|
||||
kategorie.appendChild(katProdCont)
|
||||
|
||||
let pridavatko = document.createElement("button");
|
||||
pridavatko.className = "pridat-polozku"
|
||||
pridavatko.textContent = "Pridat Polozku"
|
||||
let btnDel = document.createElement("button");
|
||||
btnDel.className = "vymaz-kat"
|
||||
btnDel.textContent = "Odebrat Kategorii"
|
||||
|
||||
kategorie.appendChild(btnDel)
|
||||
kategorie.appendChild(pridavatko)
|
||||
|
||||
zapniNaElementSortableJS(katProdCont)
|
||||
|
||||
return kategorie
|
||||
}
|
||||
|
||||
function vyrobKatalog() {
|
||||
let kat = document.createElement("div")
|
||||
kat.className = "list-group nested-sortable katalog"
|
||||
kat.id = "katalog"
|
||||
zapniNaElementSortableJS(kat)
|
||||
return kat
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Vygenerovat ze vzorovych dat
|
||||
// Tady se nepredpoklada dopocitani ceny s DPH a za kus
|
||||
// Cena s DPH a za kus bude ulozena v datech predem vyrobeneho katalogu
|
||||
let kata = vyrobKatalog()
|
||||
function naplnitKatalog() {
|
||||
let potvrzeni = confirm("Nacist vybrany katalog?\r !! Neulozene zmeny budou ztraceny !!")
|
||||
if(! potvrzeni) {
|
||||
return
|
||||
}
|
||||
document.getElementById("katalog").innerHTML=""
|
||||
let katalog = {
|
||||
"Prkna": {
|
||||
"Prkna 2/15/300 JCH": {
|
||||
"rozmery": "2/15/300",
|
||||
"cena": 100,
|
||||
"mj": "m3"
|
||||
},
|
||||
"Prkna 2/15/400": {
|
||||
"rozmery": "2/15/400",
|
||||
"cena": 110,
|
||||
"mj": "m3"
|
||||
},
|
||||
"Prkna 2/15/500": {
|
||||
"rozmery": "2/15/500",
|
||||
"cena": 120,
|
||||
"mj": "m3"
|
||||
}
|
||||
},
|
||||
"Palubky": {
|
||||
"palubky 2/14/400": {
|
||||
"rozmery": "2/14/400",
|
||||
"cena": 200,
|
||||
"mj": "m3"
|
||||
},
|
||||
"palubky 2/14/500": {
|
||||
"rozmery": "2/14/500",
|
||||
"cena": 210,
|
||||
"mj": "m3"
|
||||
}
|
||||
},
|
||||
"Hranoly": {
|
||||
"hranol 20/20/200": {
|
||||
"rozmery": "20/20/200",
|
||||
"cena": 300,
|
||||
"mj": "m3"
|
||||
},
|
||||
"hranol 25/25/200": {
|
||||
"rozmery": "25/25/200",
|
||||
"cena": 310,
|
||||
"mj": "m3"
|
||||
}
|
||||
}
|
||||
}
|
||||
Object.entries(katalog).forEach(([kategorie, produkty]) => {
|
||||
let kat = vyrobKategorii(kategorie)
|
||||
katProdCont = kat.getElementsByClassName("polozky")[0]
|
||||
Object.entries(produkty).forEach(([nazev, data]) => {
|
||||
let prod = vyrobPolozku(nazev, data.cena, data.mj, data.rozmery)
|
||||
katProdCont.appendChild(prod)
|
||||
});
|
||||
kata.appendChild(kat)
|
||||
});
|
||||
|
||||
return kata
|
||||
}
|
||||
|
||||
document.getElementById("telo").appendChild(kata)
|
||||
|
||||
// let pridavatko = document.createElement("button");
|
||||
// pridavatko.className = "pridat-kategorii"
|
||||
// pridavatko.textContent = "Pridat Kategorii"
|
||||
// document.getElementById("katalog").appendChild(pridavatko)
|
||||
|
||||
//document.getElementById("telo").appendChild(ukladatko)
|
||||
|
||||
// console.log(katalogToXML(katalog))
|
||||
//
|
||||
// XML='<katalog><kategorie nazev="Prkna"><produkt nazev="Prkna 2/15/300"><cena>100</cena><mj>m3</mj></produkt><produkt nazev="Prkna 2/15/400"><cena>110</cena><mj>m3</mj></produkt><produkt nazev="Prkna 2/15/500"><cena>120</cena><mj>m3</mj></produkt></kategorie><kategorie nazev="Palubky"><produkt nazev="palubky 2/14/400"><cena>200</cena><mj>m3</mj></produkt><produkt nazev="palubky 2/14/500"><cena>210</cena><mj>m3</mj></produkt></kategorie><kategorie nazev="Hranoly"><produkt nazev="hranol 20/20/200"><cena>300</cena><mj>m3</mj></produkt><produkt nazev="hranol 25/25/200"><cena>310</cena><mj>m3</mj></produkt></kategorie></katalog>'
|
||||
//
|
||||
// console.log(xmlToKatalog(XML))
|
||||
|
||||
|
||||
|
||||
// Tohle je GPT funkcionalita pro management souboru
|
||||
/*
|
||||
const select = document.getElementById('fileSelect');
|
||||
const output = document.getElementById('output');
|
||||
const button = document.getElementById('loadBtn');
|
||||
|
||||
// načtení seznamu souborů
|
||||
async function loadFileList() {
|
||||
const res = await fetch('/api/files');
|
||||
const files = await res.json();
|
||||
|
||||
// filtr jen XML (klidně to nech na backendu)
|
||||
const xmlFiles = files.filter(f => f.name.endsWith('.xml'));
|
||||
|
||||
xmlFiles.forEach(file => {
|
||||
const option = document.createElement('option');
|
||||
option.value = file.name;
|
||||
option.textContent = file.name;
|
||||
select.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
// načtení konkrétního souboru
|
||||
async function loadSelectedFile() {
|
||||
const fileName = select.value;
|
||||
|
||||
if (!fileName) {
|
||||
alert('Nevybral jsi soubor');
|
||||
return;
|
||||
}
|
||||
|
||||
const res = await fetch(`/api/file?name=${encodeURIComponent(fileName)}`);
|
||||
const data = await res.text(); // XML → text
|
||||
|
||||
output.textContent = data;
|
||||
}
|
||||
|
||||
// eventy
|
||||
button.addEventListener('click', loadSelectedFile);
|
||||
|
||||
// init
|
||||
loadFileList();*/
|
||||
15
krovy.php
15
krovy.php
@@ -12,10 +12,7 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top moje">
|
||||
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item">
|
||||
@@ -35,28 +32,21 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h1>Prodej řeziva - Zdeněk Beneš</h1>
|
||||
|
||||
</nav>
|
||||
|
||||
<main role="main" class="container">
|
||||
|
||||
<div class="homepage-jumbotron">
|
||||
<h2>Dodávka krovů</h2>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<p class="lead centruj_text">
|
||||
Naším cílem je zajistit, aby se Vaše sny mohly uskutečnit. Neváhejte nás tedy kontaktovat a my zajistíme, aby Vám sousedi Váš projekt záviděli!
|
||||
<br><br>
|
||||
Využijte formulář níže, zanechte nám na sebe kontakt. My se ozveme.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-2"></div>
|
||||
<div class="col-8">
|
||||
@@ -178,9 +168,6 @@ if($_POST["sendMail"]) {
|
||||
$m->sendMail();
|
||||
echo "Email Odeslán.";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -196,4 +183,4 @@ if($_POST["sendMail"]) {
|
||||
<script src="./js/captcha.js"></script>
|
||||
|
||||
|
||||
</body></html>
|
||||
</body></html>
|
||||
|
||||
115
mail.php
115
mail.php
@@ -1,58 +1,57 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
class email {
|
||||
|
||||
// Reciever - String var
|
||||
|
||||
// Format: "email@adresa.cz"
|
||||
|
||||
public $reciever = null;
|
||||
|
||||
// Sender - string var
|
||||
|
||||
// Format: "Zobrazene Jmeno <email@adresa.cz>"
|
||||
|
||||
public $sender = null;
|
||||
|
||||
// ReplyTo - string var
|
||||
|
||||
// Format: "email@adresa.cz"
|
||||
|
||||
public $replyTo = null;
|
||||
|
||||
// CarbonCopies - string array
|
||||
|
||||
// Format: array("email@adresa.cz", "email@adresa.cz", ...)
|
||||
|
||||
public $cc = null;
|
||||
|
||||
// Subject - string var
|
||||
|
||||
// Format: "Some String"
|
||||
|
||||
public $subject = null;
|
||||
|
||||
// MailContent - string var
|
||||
|
||||
// Format: "Some String"
|
||||
|
||||
public $content = null;
|
||||
|
||||
// headers - string var
|
||||
|
||||
// Is built by setHeader() function
|
||||
|
||||
private $headers = "";
|
||||
|
||||
|
||||
|
||||
public function setHeaders() {
|
||||
|
||||
|
||||
|
||||
if(isset($this->sender) ) {
|
||||
|
||||
$this->headers .= "From: " . $this->sender . PHP_EOL;
|
||||
|
||||
<?php
|
||||
class email {
|
||||
// Reciever - String var
|
||||
// Format: "email@adresa.cz"
|
||||
public $reciever = null;
|
||||
// Sender - string var
|
||||
// Format: "Zobrazene Jmeno <email@adresa.cz>"
|
||||
public $sender = null;
|
||||
// ReplyTo - string var
|
||||
// Format: "email@adresa.cz"
|
||||
public $replyTo = null;
|
||||
// CarbonCopies - string array
|
||||
// Format: array("email@adresa.cz", "email@adresa.cz", ...)
|
||||
public $cc = null;
|
||||
// Subject - string var
|
||||
// Format: "Some String"
|
||||
public $subject = null;
|
||||
// MailContent - string var
|
||||
// Format: "Some String"
|
||||
public $content = null;
|
||||
// headers - string var
|
||||
// Is built by setHeader() function
|
||||
private $headers = "";
|
||||
|
||||
public function setHeaders() {
|
||||
if(isset($this->sender) ) {
|
||||
$this->headers .= "From: " . $this->sender . PHP_EOL;
|
||||
} else {
|
||||
echo "WARN: From(sender) is not set!";
|
||||
}
|
||||
|
||||
if(isset($this->replyTo) ) {
|
||||
$this->headers .= "Reply-To: <" . $this->replyTo . ">" . PHP_EOL;
|
||||
} else {
|
||||
echo "WARN: Reply-To is not set!";
|
||||
}
|
||||
|
||||
foreach($this->cc as $x) {
|
||||
$this->headers .= "Bcc: " . $x . PHP_EOL;
|
||||
}
|
||||
$this->headers .= "X-Mailer: PHP/" . phpversion() . PHP_EOL;
|
||||
$this->headers .= "X-Priority: 2" . PHP_EOL;
|
||||
$this->headers .= "MIME-Version: 1.0" . PHP_EOL;
|
||||
$this->headers .= "Content-Type: text/html; charset=utf-8" . PHP_EOL;
|
||||
|
||||
}
|
||||
|
||||
public function sendMail() {
|
||||
if(isset($this->reciever) && isset($this->subject) && isset($this->content)) {
|
||||
mb_send_mail($this->reciever, $this->subject, $this->content, $this->headers);
|
||||
} else {
|
||||
echo "ERR: mail reciever/subject/content is not set!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<h1>Edit sortimentu</h1>
|
||||
@@ -1,5 +0,0 @@
|
||||
<form method="POST" action="/admin.php">
|
||||
|
||||
<input type="text" name="uname">
|
||||
|
||||
<input type="password" name="pword">
|
||||
Reference in New Issue
Block a user