Struktur: Docker/ (skrift-backend, signature-service), Webseite/ (skrift-configurator, skrift-job-manager), Produktion/ (skrift-produktion, AutoRecover). Aufgeräumt: signature-to-svg entfernt, Backend-PayPal-Service entfernt (PayPal läuft client-seitig im Configurator), Dev-/Test-Artefakte und Deployment-Dokus bereinigt, .dockerignore repariert. CLAUDE.md mit Architektur ergänzt. Secrets (.env, config.json) via .gitignore ausgeschlossen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
105 lines
3.2 KiB
PHP
105 lines
3.2 KiB
PHP
<?php
|
||
/**
|
||
* Plugin Name: Skrift Auftragsmanager
|
||
* Description: Kundenauftrag-Verwaltung für den Skrift Konfigurator. Benötigt das Plugin "Skrift Konfigurator" für CSS, Proxy-Endpunkte und Backend-Verbindung.
|
||
* Version: 1.0.0
|
||
* Author: Skrift
|
||
*/
|
||
|
||
if (!defined('ABSPATH')) { exit; }
|
||
|
||
require_once plugin_dir_path(__FILE__) . 'includes/admin-job-manager.php';
|
||
|
||
// Cron beim Deaktivieren des Plugins entfernen
|
||
register_deactivation_hook(__FILE__, function () {
|
||
wp_clear_scheduled_hook('skrift_cleanup_old_jobs');
|
||
});
|
||
|
||
final class Skrift_Job_Manager_Plugin {
|
||
|
||
const VERSION = '1.0.0';
|
||
const SLUG = 'skrift-job-manager';
|
||
|
||
public function __construct() {
|
||
add_action('wp_enqueue_scripts', [$this, 'register_assets']);
|
||
add_filter('script_loader_tag', [$this, 'add_module_attribute'], 10, 3);
|
||
add_shortcode('skrift_kundenauftrag', [$this, 'render_shortcode']);
|
||
}
|
||
|
||
public function register_assets(): void {
|
||
$base = plugin_dir_url(__FILE__);
|
||
|
||
// Basis-CSS vom Konfigurator als Abhängigkeit (liefert --sk-* Variablen und alle .sk-* Klassen)
|
||
wp_register_style(
|
||
self::SLUG,
|
||
$base . 'assets/css/job-app.css',
|
||
['skrift-konfigurator'],
|
||
self::VERSION
|
||
);
|
||
|
||
// SheetJS UMD – im <head> damit window.XLSX vor ES6-Modulen verfügbar ist
|
||
wp_register_script(
|
||
'skrift-xlsx-js',
|
||
'https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js',
|
||
[],
|
||
'0.18.5',
|
||
false
|
||
);
|
||
|
||
wp_register_script(
|
||
self::SLUG,
|
||
$base . 'assets/js/job-app.js',
|
||
['skrift-xlsx-js'],
|
||
self::VERSION,
|
||
true
|
||
);
|
||
}
|
||
|
||
public function add_module_attribute(string $tag, string $handle, string $src): string {
|
||
if ($handle !== self::SLUG) return $tag;
|
||
return '<script type="module" src="' . esc_url($src) . '"></script>';
|
||
}
|
||
|
||
public function render_shortcode($atts = []): string {
|
||
wp_enqueue_style('skrift-konfigurator');
|
||
wp_enqueue_style(self::SLUG);
|
||
wp_enqueue_script('skrift-xlsx-js');
|
||
wp_enqueue_script(self::SLUG);
|
||
|
||
// Konfigurator-Einstellungen lesen (Backend-URL, API-Key, etc.)
|
||
if (class_exists('Skrift_Konfigurator_Admin_Settings')) {
|
||
$settings = Skrift_Konfigurator_Admin_Settings::get_settings();
|
||
} else {
|
||
$settings = get_option('skrift_konfigurator_settings', []);
|
||
}
|
||
|
||
$frontend_settings = $settings;
|
||
unset($frontend_settings['backend_connection']['api_token']);
|
||
unset($frontend_settings['api_security']);
|
||
unset($frontend_settings['paypal']['client_secret_sandbox']);
|
||
unset($frontend_settings['paypal']['client_secret_live']);
|
||
|
||
$job_settings = Skrift_Job_Manager::get_plugin_settings();
|
||
|
||
ob_start();
|
||
?>
|
||
<script>
|
||
window.SkriftJobApp = <?php echo wp_json_encode([
|
||
'version' => self::VERSION,
|
||
'restUrl' => esc_url_raw(rest_url()),
|
||
'nonce' => wp_create_nonce('wp_rest'),
|
||
'apiKey' => $settings['api_security']['api_key'] ?? '',
|
||
'settings' => $frontend_settings,
|
||
'redirectUrl' => $job_settings['redirect_url'] ?? '',
|
||
]); ?>;
|
||
</script>
|
||
<div class="sk-configurator sk-job-app" data-skrift-kundenauftrag="1">
|
||
<!-- Wird per JavaScript befüllt -->
|
||
</div>
|
||
<?php
|
||
return ob_get_clean();
|
||
}
|
||
}
|
||
|
||
new Skrift_Job_Manager_Plugin();
|