Autosave: 20260811-133656

This commit is contained in:
Flatlogic Bot 2026-08-11 13:36:57 +00:00
parent 8f5444f986
commit 662661adef
9 changed files with 331 additions and 44 deletions

View File

@ -1,18 +1,11 @@
DirectoryIndex index.php index.html
Options -Indexes
Options -MultiViews
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# 0) Serve existing files/directories as-is
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# 1) Internal map: /page or /page/ -> /page.php (if such PHP file exists)
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
# 2) Optional: strip trailing slash for non-directories (keeps .php links working)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [R=301,L]
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

View File

@ -1,4 +1,4 @@
WordPress Admin Credentials:
URL: http://localhost/wp-admin
Username: admin
Password: c59u3v2geHuIQMRP
Password: fhOe6ID2XZCSv90hpS3c

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -0,0 +1,2 @@
.abc-form-wrap{background:#fff;border:1px solid rgba(28,42,74,.12);box-shadow:0 24px 70px rgba(7,16,45,.12);border-radius:24px;padding:clamp(22px,4vw,38px);}
.abc-form{display:grid;gap:18px}.abc-grid-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.abc-form label{font-weight:700;color:#102247;font-size:14px;display:grid;gap:8px}.abc-form input,.abc-form select,.abc-form textarea{width:100%;border:1px solid #d8deea;border-radius:12px;padding:13px 14px;font:inherit;background:#f8fafc;color:#102247}.abc-form textarea{resize:vertical}.abc-form button{border:0;border-radius:999px;background:#1646a0;color:#fff;font-weight:800;padding:15px 24px;cursor:pointer;box-shadow:0 14px 32px rgba(22,70,160,.25)}.abc-form button:hover{background:#0b2f78}.abc-checkbox{display:flex!important;grid-template-columns:auto 1fr;align-items:center;gap:10px!important}.abc-checkbox input{width:auto}.abc-form fieldset{border:1px solid #d8deea;border-radius:18px;padding:16px;display:grid;gap:10px}.abc-form legend{font-weight:800;color:#102247;padding:0 8px}.abc-form fieldset label{display:flex;gap:10px;align-items:center;font-weight:600}.abc-form fieldset input{width:auto}.abc-form-notice{border-radius:16px;padding:14px 16px;margin-bottom:18px;font-weight:700}.abc-success{background:#e9f8ef;color:#0d6533;border:1px solid #b8e6c8}.abc-error{background:#fff0f0;color:#8a1f1f;border:1px solid #ffc9c9}.abc-form-small{color:#5c6982;font-size:13px;margin:0}@media(max-width:720px){.abc-grid-two{grid-template-columns:1fr}.abc-form-wrap{padding:20px}}

View File

@ -0,0 +1,287 @@
<?php
/**
* Plugin Name: ABC Leads & ESG Evaluation
* Description: Lightweight lead capture and preliminary ESG evaluation forms for Avangarde Bright Concepts.
* Version: 1.0.0
* Author: Flatlogic Site Engineer
*/
if (!defined('ABSPATH')) { exit; }
final class ABC_Leads_Plugin {
const CPT = 'abc_submission';
public static function init() {
add_action('init', [__CLASS__, 'register_cpt']);
add_shortcode('abc_contact_form', [__CLASS__, 'contact_form']);
add_shortcode('abc_esg_assessment', [__CLASS__, 'assessment_form']);
add_action('wp_enqueue_scripts', [__CLASS__, 'assets']);
add_action('admin_post_nopriv_abc_submit_contact', [__CLASS__, 'handle_contact']);
add_action('admin_post_abc_submit_contact', [__CLASS__, 'handle_contact']);
add_action('admin_post_nopriv_abc_submit_assessment', [__CLASS__, 'handle_assessment']);
add_action('admin_post_abc_submit_assessment', [__CLASS__, 'handle_assessment']);
add_filter('manage_' . self::CPT . '_posts_columns', [__CLASS__, 'columns']);
add_action('manage_' . self::CPT . '_posts_custom_column', [__CLASS__, 'column_content'], 10, 2);
add_filter('manage_edit-' . self::CPT . '_sortable_columns', [__CLASS__, 'sortable_columns']);
}
public static function register_cpt() {
register_post_type(self::CPT, [
'labels' => [
'name' => 'ABC Leads',
'singular_name' => 'ABC Lead',
'menu_name' => 'ABC Leads',
'add_new_item' => 'Add Lead',
'edit_item' => 'View Lead',
],
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'dashicons-chart-line',
'supports' => ['title', 'editor', 'custom-fields'],
'capability_type' => 'post',
]);
}
public static function assets() {
wp_enqueue_style('abc-leads', plugin_dir_url(__FILE__) . 'abc-leads.css', [], '1.0.0');
}
private static function redirect_back($status) {
$url = wp_get_referer() ?: home_url('/contact/');
$url = remove_query_arg(['abc_status'], $url);
wp_safe_redirect(add_query_arg('abc_status', $status, $url));
exit;
}
public static function handle_contact() {
if (!isset($_POST['abc_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['abc_nonce'])), 'abc_contact')) {
self::redirect_back('invalid');
}
$message = sanitize_textarea_field(wp_unslash($_POST['message'] ?? ''));
$fields = [
'name' => self::clean('name'),
'company' => self::clean('company'),
'email' => sanitize_email(wp_unslash($_POST['email'] ?? '')),
'phone' => self::clean('phone'),
'interest' => self::clean('interest'),
'newsletter' => isset($_POST['newsletter']) ? 'Da' : 'Nu',
];
if (!$fields['name'] || !$fields['email']) { self::redirect_back('missing'); }
$saved = self::save_submission('Solicitare consultanță', $fields, $message);
self::redirect_back(is_wp_error($saved) ? 'error' : 'contact_success');
}
public static function handle_assessment() {
if (!isset($_POST['abc_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['abc_nonce'])), 'abc_assessment')) {
self::redirect_back('invalid');
}
$message = sanitize_textarea_field(wp_unslash($_POST['notes'] ?? ''));
$fields = [
'name' => self::clean('name'),
'company' => self::clean('company'),
'email' => sanitize_email(wp_unslash($_POST['email'] ?? '')),
'company_size' => self::clean('company_size'),
'request_source' => self::clean('request_source'),
'topics' => self::clean('topics'),
'timeline' => self::clean('timeline'),
];
if (!$fields['company'] || !$fields['email']) { self::redirect_back('missing'); }
$saved = self::save_submission('Evaluare ESG preliminară', $fields, $message);
self::redirect_back(is_wp_error($saved) ? 'error' : 'assessment_success');
}
private static function status_notice($context) {
$status = isset($_GET['abc_status']) ? sanitize_key(wp_unslash($_GET['abc_status'])) : '';
if (!$status) { return ''; }
$messages = [
'invalid' => ['Nu am putut valida formularul. Vă rugăm să încercați din nou.', 'error'],
'missing' => ['Completați câmpurile obligatorii marcate cu *.', 'error'],
'error' => ['A apărut o eroare la trimitere. Vă rugăm să încercați din nou.', 'error'],
'contact_success' => ['Mulțumim. Solicitarea a fost înregistrată — vă vom contacta pentru discuția inițială.', 'success'],
'assessment_success' => ['Evaluarea preliminară a fost trimisă. Vom reveni cu pașii recomandați pentru organizarea ESG.', 'success'],
];
if (!isset($messages[$status])) { return ''; }
[$msg, $type] = $messages[$status];
return self::notice($msg, $type);
}
private static function clean($key) {
if (!isset($_POST[$key])) { return ''; }
if (is_array($_POST[$key])) {
return array_map('sanitize_text_field', wp_unslash($_POST[$key]));
}
return sanitize_text_field(wp_unslash($_POST[$key]));
}
private static function save_submission($type, $fields, $message = '') {
$name = $fields['name'] ?? '';
$company = $fields['company'] ?? '';
$email = $fields['email'] ?? '';
$title = trim($type . ' — ' . ($company ?: $name ?: $email ?: current_time('mysql')));
$content = $message ? wp_kses_post($message) : '';
$post_id = wp_insert_post([
'post_type' => self::CPT,
'post_status' => 'private',
'post_title' => $title,
'post_content' => $content,
], true);
if (is_wp_error($post_id)) { return $post_id; }
update_post_meta($post_id, '_abc_type', $type);
foreach ($fields as $key => $value) {
update_post_meta($post_id, '_abc_' . sanitize_key($key), is_array($value) ? implode(', ', $value) : $value);
}
update_post_meta($post_id, '_abc_submitted_at', current_time('mysql'));
return $post_id;
}
private static function notice($text, $type = 'success') {
return '<div class="abc-form-notice abc-' . esc_attr($type) . '">' . esc_html($text) . '</div>';
}
public static function contact_form() {
$notice = self::status_notice('contact');
if (false && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['abc_form_type']) && $_POST['abc_form_type'] === 'contact') {
if (!isset($_POST['abc_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['abc_nonce'])), 'abc_contact')) {
$notice = self::notice('Nu am putut valida formularul. Vă rugăm să încercați din nou.', 'error');
} else {
$message = sanitize_textarea_field(wp_unslash($_POST['message'] ?? ''));
$fields = [
'name' => self::clean('name'),
'company' => self::clean('company'),
'email' => sanitize_email(wp_unslash($_POST['email'] ?? '')),
'phone' => self::clean('phone'),
'interest' => self::clean('interest'),
'newsletter' => isset($_POST['newsletter']) ? 'Da' : 'Nu',
];
if (!$fields['name'] || !$fields['email']) {
$notice = self::notice('Completați cel puțin numele și adresa de email.', 'error');
} else {
$saved = self::save_submission('Solicitare consultanță', $fields, $message);
$notice = is_wp_error($saved)
? self::notice('A apărut o eroare la trimitere. Vă rugăm să încercați din nou.', 'error')
: self::notice('Mulțumim. Solicitarea a fost înregistrată — vă vom contacta pentru discuția inițială.');
}
}
}
ob_start(); ?>
<div class="abc-form-wrap">
<?php echo $notice; ?>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" class="abc-form">
<input type="hidden" name="action" value="abc_submit_contact">
<input type="hidden" name="abc_form_type" value="contact">
<?php wp_nonce_field('abc_contact', 'abc_nonce'); ?>
<div class="abc-grid-two">
<label>Nume și prenume*<input required name="name" type="text" autocomplete="name"></label>
<label>Companie<input name="company" type="text" autocomplete="organization"></label>
<label>Email*<input required name="email" type="email" autocomplete="email"></label>
<label>Telefon<input name="phone" type="tel" autocomplete="tel"></label>
</div>
<label>Zona de interes
<select name="interest">
<option>Diagnostic ESG</option>
<option>Solicitare ESG de la bancă / investitor</option>
<option>DNSH / proiect finanțat</option>
<option>Organizarea informațiilor ESG</option>
<option>Monitorizare și suport recurent</option>
</select>
</label>
<label>Mesaj<textarea name="message" rows="5" placeholder="Spuneți-ne ce solicitare ESG ați primit sau ce doriți să organizați."></textarea></label>
<label class="abc-checkbox"><input type="checkbox" name="newsletter" value="1"> Doresc primesc resurse ESG utile prin newsletter.</label>
<button type="submit">Solicită o discuție</button>
<p class="abc-form-small">Răspunsurile sunt salvate securizat în zona de administrare WordPress pentru follow-up.</p>
</form>
</div>
<?php return ob_get_clean();
}
public static function assessment_form() {
$notice = self::status_notice('assessment');
if (false && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['abc_form_type']) && $_POST['abc_form_type'] === 'assessment') {
if (!isset($_POST['abc_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['abc_nonce'])), 'abc_assessment')) {
$notice = self::notice('Nu am putut valida evaluarea. Vă rugăm să încercați din nou.', 'error');
} else {
$message = sanitize_textarea_field(wp_unslash($_POST['notes'] ?? ''));
$fields = [
'name' => self::clean('name'),
'company' => self::clean('company'),
'email' => sanitize_email(wp_unslash($_POST['email'] ?? '')),
'company_size' => self::clean('company_size'),
'request_source' => self::clean('request_source'),
'topics' => self::clean('topics'),
'timeline' => self::clean('timeline'),
];
if (!$fields['company'] || !$fields['email']) {
$notice = self::notice('Completați cel puțin compania și adresa de email.', 'error');
} else {
$saved = self::save_submission('Evaluare ESG preliminară', $fields, $message);
$notice = is_wp_error($saved)
? self::notice('A apărut o eroare la trimitere. Vă rugăm să încercați din nou.', 'error')
: self::notice('Evaluarea preliminară a fost trimisă. Vom reveni cu pașii recomandați pentru organizarea ESG.');
}
}
}
ob_start(); ?>
<div class="abc-form-wrap abc-assessment">
<?php echo $notice; ?>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" class="abc-form">
<input type="hidden" name="action" value="abc_submit_assessment">
<input type="hidden" name="abc_form_type" value="assessment">
<?php wp_nonce_field('abc_assessment', 'abc_nonce'); ?>
<div class="abc-grid-two">
<label>Companie*<input required name="company" type="text"></label>
<label>Persoană de contact<input name="name" type="text"></label>
<label>Email*<input required name="email" type="email"></label>
<label>Dimensiune companie
<select name="company_size"><option>IMM / antreprenorială</option><option>Companie medie</option><option>Companie mare</option><option>Grup internațional</option></select>
</label>
</div>
<label>De unde vine presiunea ESG?
<select name="request_source"><option>Bancă / finanțator</option><option>Client sau partener comercial</option><option>Program de finanțare</option><option>Autoritate / reglementare</option><option>Pregătire internă voluntară</option></select>
</label>
<fieldset><legend>Ce informații trebuie organizate?</legend>
<label><input type="checkbox" name="topics[]" value="Energie"> Energie</label>
<label><input type="checkbox" name="topics[]" value="Emisii"> Emisii GES</label>
<label><input type="checkbox" name="topics[]" value="Deșeuri"> Deșeuri / reciclare</label>
<label><input type="checkbox" name="topics[]" value="Politici ESG"> Politici și proceduri ESG</label>
<label><input type="checkbox" name="topics[]" value="DNSH"> DNSH / proiect finanțat</label>
</fieldset>
<label>Termen estimat
<select name="timeline"><option>Urgent sub 2 săptămâni</option><option>1 lună</option><option>13 luni</option><option>Planificare pentru viitor</option></select>
</label>
<label>Context / observații<textarea name="notes" rows="5" placeholder="Ex.: am primit un chestionar ESG de la bancă sau pregătim o finanțare."></textarea></label>
<button type="submit">Trimite evaluarea preliminară</button>
</form>
</div>
<?php return ob_get_clean();
}
public static function columns($columns) {
return [
'cb' => $columns['cb'],
'title' => 'Lead',
'abc_type' => 'Tip',
'abc_company' => 'Companie',
'abc_email' => 'Email',
'date' => 'Data',
];
}
public static function column_content($column, $post_id) {
$map = [
'abc_type' => '_abc_type',
'abc_company' => '_abc_company',
'abc_email' => '_abc_email',
];
if (isset($map[$column])) {
echo esc_html(get_post_meta($post_id, $map[$column], true));
}
}
public static function sortable_columns($columns) {
$columns['abc_type'] = 'abc_type';
return $columns;
}
}
ABC_Leads_Plugin::init();

View File

@ -1 +1,16 @@
<!-- wp:pattern {"slug":"twentytwentyfour/footer"} /-->
<!-- wp:group {"className":"abc-site-footer","layout":{"type":"constrained"}} -->
<div class="wp-block-group abc-site-footer"><!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:heading {"level":3} --><h3 class="wp-block-heading">Avangarde Bright Concepts</h3><!-- /wp:heading --><!-- wp:group {"className":"abc-footer-brand","layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group abc-footer-brand"><!-- wp:paragraph {"className":"abc-footer-tagline"} --><p class="abc-footer-tagline"><span>Build Brightness</span><span>in Your Business</span></p><!-- /wp:paragraph --></div>
<!-- /wp:group --><!-- wp:paragraph --><p>Consultanță ESG pentru companii, finanțări, DNSH și procese interne.</p><!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:heading {"level":3} --><h3 class="wp-block-heading">Acțiuni rapide</h3><!-- /wp:heading --><!-- wp:paragraph --><p><a href="/evaluare-esg/">Evaluare ESG preliminară</a><br><a href="/contact/">Solicită o discuție</a></p><!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:heading {"level":3} --><h3 class="wp-block-heading">LinkedIn</h3><!-- /wp:heading --><!-- wp:paragraph --><p>Integrarea LinkedIn este pregătită ca link; adăugați URL-ul oficial al companiei când este disponibil.</p><!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
<!-- wp:paragraph {"className":"abc-footer-note"} --><p class="abc-footer-note">© 2026 Avangarde Bright Concepts. Conținut MVP — poate fi extins bilingv RO/EN.</p><!-- /wp:paragraph --></div>
<!-- /wp:group -->

View File

@ -1,26 +1,16 @@
<!-- wp:group {"align":"wide","style":{"spacing":{"padding":{"top":"20px","bottom":"20px"}}},"backgroundColor":"base","layout":{"type":"constrained"}} -->
<div class="wp-block-group alignwide has-base-background-color has-background"
style="padding-top:20px;padding-bottom:20px">
<!-- wp:group {"align":"wide","layout":{"type":"flex","justifyContent":"space-between","flexWrap":"wrap"}} -->
<div class="wp-block-group alignwide">
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"},"layout":{"selfStretch":"fit","flexSize":null}},"layout":{"type":"flex"}} -->
<div class="wp-block-group">
<!-- wp:site-logo {"width":60 } /-->
<!-- wp:group {"style":{"spacing":{"blockGap":"0px"}}} -->
<div class="wp-block-group">
<!-- wp:site-title {"level":0} /-->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
<!-- wp:group {"layout":{"type":"flex","flexWrap":"wrap","justifyContent":"left"}} -->
<div class="wp-block-group">
<!-- wp:navigation {"layout":{"type":"flex","justifyContent":"right","orientation":"horizontal"},"style":{"spacing":{"margin":{"top":"0"},"blockGap":"var:preset|spacing|20"},"layout":{"selfStretch":"fit","flexSize":null}}} /-->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
<!-- wp:group {"className":"abc-site-header","layout":{"type":"constrained"}} -->
<div class="wp-block-group abc-site-header"><!-- wp:group {"className":"abc-header-inner","layout":{"type":"flex","justifyContent":"space-between","flexWrap":"wrap"}} -->
<div class="wp-block-group abc-header-inner"><!-- wp:group {"className":"abc-brand","layout":{"type":"flex"}} -->
<div class="wp-block-group abc-brand"><!-- wp:site-title {"level":0} /--><!-- wp:site-tagline /--></div>
<!-- /wp:group -->
<!-- wp:navigation {"overlayMenu":"mobile","layout":{"type":"flex","justifyContent":"right"}} -->
<!-- wp:navigation-link {"label":"Acasă","url":"/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"Servicii","url":"/servicii/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"ESG simplu","url":"/esg-explicat-simplu/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"Resurse","url":"/resurse-esg/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"Blog","url":"/blog/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"Evaluare ESG","url":"/evaluare-esg/","kind":"custom"} /-->
<!-- wp:navigation-link {"label":"Contact","url":"/contact/","kind":"custom"} /-->
<!-- /wp:navigation --></div>
<!-- /wp:group --></div>
<!-- /wp:group -->