Barion Pixel

Webshop

Árlista

Blog

Kapcsolat

Szerviz árajánlat

[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 3500],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 6000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘RB vagy LB gomb csere’, ‘price’ => 3000],
[‘issue’ => ‘RB és LB gomb csere’, ‘price’ => 6000],
[‘issue’ => ‘XABY, dpad és menü gombok javítása’, ‘price’ => 2000],
[‘issue’ => ‘RT vagy LT csere’, ‘price’ => 3000],
[‘issue’ => ‘RT és LT csere’, ‘price’ => 6000],
],
‘Xbox One’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 3500],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 6000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 5000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 9000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘RB vagy LB gomb csere’, ‘price’ => 3000],
[‘issue’ => ‘RB és LB gomb csere’, ‘price’ => 6000],
[‘issue’ => ‘XABY és menü gombok javítása’, ‘price’ => 2000],
[‘issue’ => ‘Dpad javítása’, ‘price’ => 2000],
[‘issue’ => ‘RT vagy LT javítás’, ‘price’ => 3000],
[‘issue’ => ‘RT és LT javítás’, ‘price’ => 6000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘Xbox One S’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 3500],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 6000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 5000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 9000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘RB vagy LB gomb csere’, ‘price’ => 3000],
[‘issue’ => ‘RB és LB gomb csere’, ‘price’ => 6000],
[‘issue’ => ‘XABY és menü gombok javítása’, ‘price’ => 2000],
[‘issue’ => ‘Dpad javítása’, ‘price’ => 2000],
[‘issue’ => ‘RT vagy LT javítás’, ‘price’ => 3000],
[‘issue’ => ‘RT és LT javítás’, ‘price’ => 6000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘Xbox series X/S’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 3500],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 6000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 5000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 9000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘RB vagy LB gomb csere’, ‘price’ => 3000],
[‘issue’ => ‘RB és LB gomb csere’, ‘price’ => 6000],
[‘issue’ => ‘XABY és menü gombok javítása’, ‘price’ => 2000],
[‘issue’ => ‘Dpad javítása’, ‘price’ => 2000],
[‘issue’ => ‘RT vagy LT javítás’, ‘price’ => 3000],
[‘issue’ => ‘RT és LT javítás’, ‘price’ => 6000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘Xbox elite series 2’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 6000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 12000],
[‘issue’ => ‘Dpad vagy ABXY javítása’, ‘price’ => 4000],
[‘issue’ => ‘RB vagy LB javítás’, ‘price’ => 5000],
[‘issue’ => ‘RB és LB javítás’, ‘price’ => 9000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 5000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 5000],
[‘issue’ => ‘Akkumulátor csere’, ‘price’ => 6000],
],
‘PlayStation 4 v1’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 4000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 8000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘R1 vagy L1 gomb javítás’, ‘price’ => 3000],
[‘issue’ => ‘R1 és L1 gomb javítás’, ‘price’ => 6000],
[‘issue’ => ‘Dpad javítása’, ‘price’ => 2000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘PlayStation 4 v2’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 4000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 8000],
[‘issue’ => ‘Analóg kupak csere’, ‘price’ => 1000],
[‘issue’ => ‘Két analóg kupak csere’, ‘price’ => 2000],
[‘issue’ => ‘R1 vagy L1 gomb javítás’, ‘price’ => 3000],
[‘issue’ => ‘R1 és L1 gomb javítás’, ‘price’ => 6000],
[‘issue’ => ‘Dpad javítása’, ‘price’ => 2000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘PlayStation SCUF’ => [ // = PS4 SCUF
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘R1 vagy L1 javítás’, ‘price’ => 4000],
[‘issue’ => ‘R1 és L1 javítás’, ‘price’ => 8000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
[‘issue’ => ‘Hátsó Paddles javítása’, ‘price’ => 4000],
],
‘PlayStation 5’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 6000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 12000],
[‘issue’ => ‘R1 vagy L1 javítás’, ‘price’ => 4000],
[‘issue’ => ‘R1 és L1 javítás’, ‘price’ => 8000],
[‘issue’ => ‘RT vagy LT javítás’, ‘price’ => 4000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘PlayStation 5 SCUF’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘R1 vagy L1 javítás’, ‘price’ => 4000],
[‘issue’ => ‘R1 és L1 javítás’, ‘price’ => 8000],
[‘issue’ => ‘Hátsó Paddles javítása’, ‘price’ => 4000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 4000],
],
‘PlayStation 5 EDGE’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 6000],
[‘issue’ => ‘Hall szenzoros analóg’, ‘price’ => 7000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 12000],
[‘issue’ => ‘Két hall szenzoros analóg’, ‘price’ => 14000],
[‘issue’ => ‘Ravaszok illetve gombok javítása’, ‘price’ => 5000],
[‘issue’ => ‘Jack csatlakozó csere vagy javítás’, ‘price’ => 4000],
[‘issue’ => ‘USB csatlakozó csere’, ‘price’ => 5000],
],
‘Nacon’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘R1 vagy R2 javítás’, ‘price’ => 4000],
[‘issue’ => ‘R1 és R2 javítás’, ‘price’ => 8000],
],
‘Razer’ => [
[‘issue’ => ‘Analóg csere (gyári)’, ‘price’ => 5000],
[‘issue’ => ‘Két analóg csere (gyári)’, ‘price’ => 10000],
[‘issue’ => ‘R1 vagy R2 javítás’, ‘price’ => 4000],
[‘issue’ => ‘R1 és R2 javítás’, ‘price’ => 8000],
],
];
}

public function enqueue_assets() {
// Minimal CSS
$css = ‘/* KDQ basic styles */
.kdq-wrap{max-width:820px;margin:0 auto;padding:16px}
.kdq-card{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:24px;box-shadow:0 4px 18px rgba(0,0,0,.06);}
.kdq-step{display:none}
.kdq-step.active{display:block}
.kdq-grid{display:grid;gap:16px}
@media(min-width:640px){.kdq-grid.cols-2{grid-template-columns:repeat(2,1fr)}}
label{font-weight:600;margin-bottom:6px;display:block}
select,input,textarea{width:100%;padding:10px;border:1px solid #d1d5db;border-radius:10px}
.kdq-actions{display:flex;gap:12px;justify-content:space-between;margin-top:16px}
.kdq-btn{appearance:none;border:none;border-radius:12px;padding:10px 16px;font-weight:700;cursor:pointer}
.kdq-btn.primary{background:#111827;color:#fff}
.kdq-btn.ghost{background:#f3f4f6}
.kdq-error{color:#b91c1c;margin-top:8px}
.kdq-summary table{width:100%;border-collapse:collapse}
.kdq-summary th,.kdq-summary td{border-bottom:1px solid #eee;padding:8px;text-align:left}
‘;
wp_register_style(‘kdq-form’, false);
wp_add_inline_style(‘kdq-form’, $css);
wp_enqueue_style(‘kdq-form’);

// JS
wp_register_script(‘kdq-form’, ”, [], false, true);
$data = [
‘ajaxUrl’ => admin_url(‘admin-ajax.php’),
‘nonce’ => wp_create_nonce(self::NONCE_ACTION),
‘priceMap’=> $this->get_price_map(),
];
wp_localize_script(‘kdq-form’, ‘KDQ_DATA’, $data);
wp_add_inline_script(‘kdq-form’, $this->inline_js());
wp_enqueue_script(‘kdq-form’);
}

public function render_shortcode($atts) {
ob_start(); ?>

1. lépés – Darabszám

2–3. lépés – Típus & hibák


4. lépés – Kapcsolati adatok






5. lépés – Összegzés & küldés


return ob_get_clean();
}

private function inline_js() {
return <<s.classList.toggle(‘active’, s.dataset.step==step));
el.dataset.step = step;
}

el.addEventListener(‘click’, (e)=>{
if(e.target.matches(‘[data-next]’)){
if(current===1){ buildControllers(); }
if(current===4){ if(!validateContacts()) return; buildSummary(); }
current=Math.min(current+1,5); show(current);
}
if(e.target.matches(‘[data-prev]’)){
current=Math.max(current-1,1); show(current);
}
});

function controllerTypes(){ return Object.keys(priceMap); }

function buildControllers(){
const wrap = document.getElementById(‘kdq-controllers’);
wrap.innerHTML=”;
const qty = parseInt(document.getElementById(‘kdq-qty’).value,10);
for(let i=0;i<qty;i++){
const idx=i+1;
const block=document.createElement(‘div’);
block.className=’kdq-card’;
block.style.margin=’12px 0′;
block.innerHTML = `

${idx}. kontroller

`;
wrap.appendChild(block);
const typeSel = block.querySelector(‘.kdq-type’);
const issuesWrap = block.querySelector(‘.kdq-issues’);
function renderIssues(){
const t = typeSel.value;
const ops = priceMap[t]||[];
issuesWrap.innerHTML = ops.map((o,ix)=>{
const id = `iss_${idx}_${ix}`;
return ``;
}).join(‘
‘);
}
typeSel.addEventListener(‘change’, renderIssues);
renderIssues();
}
}

function validateContacts(){
const name = document.getElementById(‘kdq-name’).value.trim();
const email = document.getElementById(‘kdq-email’).value.trim();
const phone = document.getElementById(‘kdq-phone’).value.trim();
const err = [];
if(!name) err.push(‘A név megadása kötelező.’);
if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) err.push(‘Érvénytelen e‑mail cím.’);
if(phone.length<6) err.push(‘Adj meg érvényes telefonszámot.’); if(err.length){ alert(err.join(‘\n’)); return false; } return true; } function collectData(){ const qty = parseInt(document.getElementById(‘kdq-qty’).value,10); const blocks = […document.querySelectorAll(‘#kdq-controllers .kdq-card’)]; const controllers = blocks.map(b=>{
const type = b.querySelector(‘.kdq-type’).value;
const issues = […b.querySelectorAll(‘.kdq-issues input:checked’)].map(i=>i.value);
return {type, issues};
});
const customer = {
name: document.getElementById(‘kdq-name’).value.trim(),
email: document.getElementById(‘kdq-email’).value.trim(),
phone: document.getElementById(‘kdq-phone’).value.trim(),
note: document.getElementById(‘kdq-note’).value.trim()
};
return {qty, controllers, customer};
}

function buildSummary(){
const {controllers, customer} = collectData();
const host = document.getElementById(‘kdq-summary’);
const rows = controllers.map((c, i)=>{
const issues = c.issues.length ? c.issues.join(‘, ‘) : ‘nincs kiválasztva‘;
return `

${i+1}.${c.type}${issues}

`;
}).join(”);
host.innerHTML = `

Név: ${customer.name}
E‑mail: ${customer.email}
Telefon: ${customer.phone}
${customer.note?(‘Megjegyzés: ‘+customer.note):”}

${rows}

# Típus Hibák

`;
}

document.getElementById(‘kdq-submit’).addEventListener(‘click’, async ()=>{
const errBox = document.getElementById(‘kdq-error’);
errBox.style.display=’none’;
const payload = collectData();
// minimális validáció: minden kontrollerhez kell legalább 1 hiba
const invalid = payload.controllers.some(c=>!c.issues.length);
if(invalid){ errBox.textContent=’Minden kontrollerhez válassz legalább egy hibát.’; errBox.style.display=’block’; return; }

try{
const res = await fetch(KDQ_DATA.ajaxUrl, {
method:’POST’,
headers:{‘Content-Type’:’application/x-www-form-urlencoded; charset=UTF-8′},
body: new URLSearchParams({
action: ‘kdq_submit_quote’,
nonce: KDQ_DATA.nonce,
data: JSON.stringify(payload)
})
});
const json = await res.json();
if(!json.success) throw new Error(json.message||’Ismeretlen hiba’);
el.querySelector(‘.kdq-card’).innerHTML = ‘

Köszönjük! Az ajánlatot elküldtük e‑mailben.

‘;
}catch(err){
errBox.textContent = err.message;
errBox.style.display=’block’;
}
});
})();
JS;
}

/**
* AJAX: ajánlat összeállítása és e‑mailek küldése (ügyfél + admin)
*/
public function handle_submit() {
header(‘Content-Type: application/json; charset=utf-8’);
try {
if (!isset($_POST[‘nonce’]) || !wp_verify_nonce($_POST[‘nonce’], self::NONCE_ACTION)) {
throw new Exception(‘Érvénytelen kérés (nonce).’);
}
$payload = json_decode(stripslashes($_POST[‘data’] ?? ”), true);
if (!$payload) throw new Exception(‘Hiányzó adatok.’);

$priceMap = $this->get_price_map();

$qty = intval($payload[‘qty’] ?? 0);
$controllers = $payload[‘controllers’] ?? [];
$customer = $payload[‘customer’] ?? [];

if ($qty < 1 || $qty !== count($controllers)) {
throw new Exception(‘A darabszám és a megadott kontrollerek nem egyeznek.’);
}
$name = sanitize_text_field($customer[‘name’] ?? ”);
$email= sanitize_email($customer[’email’] ?? ”);
$phone= sanitize_text_field($customer[‘phone’] ?? ”);
$note = sanitize_textarea_field($customer[‘note’] ?? ”);
if (!$name || !is_email($email) || strlen($phone) < 6) { throw new Exception(‘Hiányzó vagy hibás kapcsolatfelvételi adatok.’); } if (strlen($note) > 1000) { $note = substr($note, 0, 1000); }

// Kalkuláció és táblázatok
$rows_client = ”;
$rows_admin = ”;
$grand = 0;

foreach ($controllers as $i => $ctrl) {
$type = sanitize_text_field($ctrl[‘type’] ?? ”);
$issues = array_map(‘sanitize_text_field’, $ctrl[‘issues’] ?? []);
if (!$type || empty($issues)) {
throw new Exception(‘Minden kontrollerhez válassz hibát.’);
}

$sum = 0; $issueLines = ”;
foreach ($issues as $iss) {
$price = 0;
foreach(($priceMap[$type] ?? []) as $opt){ if($opt[‘issue’] === $iss){ $price = intval($opt[‘price’]); break; } }
$sum += $price;
$issueLines .= ‘

‘.esc_html($iss).’ – ‘.number_format_i18n($price,0).’ Ft

‘;
}
$grand += $sum;
$rows_client .= ‘

‘.($i+1).’.’.esc_html($type).”.$issueLines.’‘.number_format_i18n($sum,0).’ Ft

‘;
$rows_admin .= ‘

‘.($i+1).’.’.esc_html($type).”.implode(‘, ‘, array_map(‘esc_html’,$issues)).’‘.number_format_i18n($sum,0).’ Ft

‘;
}

$table_client = ‘

‘.$rows_client.’

# Típus Hibák Részösszeg
Végösszeg: ‘.number_format_i18n($grand,0).’ Ft

‘;

$table_admin = ‘

‘.$rows_admin.’

# Típus Hibák Részösszeg
Végösszeg: ‘.number_format_i18n($grand,0).’ Ft

‘;

$site = wp_specialchars_decode(get_bloginfo(‘name’), ENT_QUOTES);
$admin = get_option(‘admin_email’);

$hdrs = [‘Content-Type: text/html; charset=UTF-8’];

// Ügyfél e‑mail
$client_subject = ‘Ajánlat – ‘.$site;
$client_body = ‘

Kedves ‘.esc_html($name).’!

Köszönjük megkeresésed. Az alábbi táblázatban összefoglaltuk a kért javításokat és az árakat.

‘.$table_client.’

Megjegyzésed: ‘.nl2br(esc_html($note)).’

Hamarosan felvesszük veled a kapcsolatot a következő lépésekről.

Üdvözlettel,
‘.$site.’

‘;
wp_mail($email, $client_subject, $client_body, $hdrs);

// Admin e‑mail
$admin_subject = ‘Új ajánlatkérés – ‘.$site;
$admin_body = ‘

Név: ‘.esc_html($name).’
E‑mail: ‘.esc_html($email).’
Telefon: ‘.esc_html($phone).’

‘.($note?(‘

Megjegyzés:
‘.nl2br(esc_html($note)).’

‘):”).’

Tételek

‘.$table_admin;
wp_mail($admin, $admin_subject, $admin_body, $hdrs);

wp_send_json([‘success’=>true]);
} catch (Exception $e) {
wp_send_json([‘success’=>false,’message’=>$e->getMessage()]);
}
}
}

new KD_Repair_Quote_Form();