Module tasks + knowledgecenter_update aus Kundenprojekt übernehmen (bereinigt)
Beide Module wurden aus einem anderen Kundenprojekt kopiert und bereinigt: Knowledgecenter: - Bild-Cache (1.985 Dateien) geleert, Ordnerstruktur mit .gitkeep behalten - Files-Gallery-Lizenzschlüssel entfernt (config.php) - Kundenspezifische Kategorien gelöscht: Teil I/II/III QM-Struktur, nummerierte QM-Kapitel, Gremien (Präsidium/Finanzausschuss/Landesausschuss), Sitzungsservice-Serie, Protokoll-Abteilungen, Testeinträge - 56 generische Kategorien bleiben (Downloads, Onboarding, Personalthemen …) Tasks: - Alle Betriebsdaten gelöscht (114 Tasks, 914 Submissions, 579 Assignments) - Task-Definitionen und Verlinkungen geleert - Kategoriestruktur bleibt (Allgemein, IT, Personal, Buchhaltung …) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
444
module/knowledgecenter_update/Installation/Installation.php
Normal file
444
module/knowledgecenter_update/Installation/Installation.php
Normal file
@@ -0,0 +1,444 @@
|
||||
<?php
|
||||
|
||||
function echoSuccess($message)
|
||||
{
|
||||
echo "<div style='background-color:#e6ffed;color:#267b3c;padding:15px;
|
||||
border:1px solid #b2dfdb;border-radius:5px;margin:20px;
|
||||
font-family:sans-serif;'>✅ $message</div>";
|
||||
}
|
||||
|
||||
function echoError($message)
|
||||
{
|
||||
echo "<div style='background-color:#ffe6e6;color:#a33;padding:15px;
|
||||
border:1px solid #f5c2c2;border-radius:5px;margin:20px;
|
||||
font-family:sans-serif;'>❌ $message</div>";
|
||||
}
|
||||
|
||||
// Beispielhafte DB-Verbindung (nur Dummy für Kontext)
|
||||
if (!isset($GLOBALS['mysql_con'])) {
|
||||
echoError("Keine Datenbankverbindung gefunden.");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Tabellen-Erstellung
|
||||
function create_tables()
|
||||
{
|
||||
$allSuccess = true;
|
||||
|
||||
$queries = [
|
||||
// Tabellenname => SQL
|
||||
"knowledgecenter_posts" => "CREATE TABLE IF NOT EXISTS knowledgecenter_posts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
modified_by VARCHAR(255) COMMENT 'Name des Main Contact',
|
||||
preview_inline TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0 = keine Inline-Vorschau, 1 = Inline-Vorschau',
|
||||
background_color VARCHAR(9) NOT NULL DEFAULT '#FFFFFF',
|
||||
text_color VARCHAR(9) NOT NULL DEFAULT '#000000'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_contacts" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_contacts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
main_contact_id INT NOT NULL,
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_mandant" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_mandant (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
mandant_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_department" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_department (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
department_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_files" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_files (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
description VARCHAR(255),
|
||||
path VARCHAR(500),
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_role" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_role (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
role_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_versions" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_versions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
version_number INT NOT NULL,
|
||||
language_id INT NOT NULL,
|
||||
title VARCHAR(255),
|
||||
image VARCHAR(255),
|
||||
teaser TEXT,
|
||||
content LONGTEXT,
|
||||
author_id INT,
|
||||
state TINYINT DEFAULT 1,
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
valid_from DATETIME NULL,
|
||||
valid_until DATETIME NULL,
|
||||
background_color VARCHAR(9) NOT NULL DEFAULT '#FFFFFF',
|
||||
text_color VARCHAR(9) NOT NULL DEFAULT '#000000',
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_version_contacts" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_version_contacts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
version_id INT NOT NULL,
|
||||
contact_id INT NOT NULL,
|
||||
FOREIGN KEY (version_id) REFERENCES knowledgecenter_post_versions(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_categories_update" => "CREATE TABLE IF NOT EXISTS knowledgecenter_categories_update (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
sorting INT DEFAULT 0,
|
||||
state TINYINT DEFAULT 1,
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
modified_by VARCHAR(255) COMMENT 'Name des Main Contact',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_translations" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_translations (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
category_id INT NOT NULL,
|
||||
language_id INT NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
image VARCHAR(255),
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_post" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_post (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
category_id INT NOT NULL,
|
||||
post_id INT NOT NULL,
|
||||
FOREIGN KEY (category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_mandant" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_mandant (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
category_id INT NOT NULL,
|
||||
mandant_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_department" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_department (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
category_id INT NOT NULL,
|
||||
department_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_role" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_role (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
category_id INT NOT NULL,
|
||||
role_id INT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_post_comments" => "CREATE TABLE IF NOT EXISTS knowledgecenter_post_comments (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
post_id INT NOT NULL,
|
||||
parent_id INT DEFAULT NULL,
|
||||
text TEXT NOT NULL,
|
||||
author_id INT NOT NULL COMMENT 'main_contact_id',
|
||||
modified_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (post_id) REFERENCES knowledgecenter_posts(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (parent_id) REFERENCES knowledgecenter_post_comments(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
|
||||
"knowledgecenter_category_links" => "CREATE TABLE IF NOT EXISTS knowledgecenter_category_links (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
parent_category_id INT NOT NULL,
|
||||
child_category_id INT NOT NULL,
|
||||
sorting INT DEFAULT 0,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (parent_category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE,
|
||||
FOREIGN KEY (child_category_id) REFERENCES knowledgecenter_categories_update(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
|
||||
];
|
||||
|
||||
foreach ($queries as $name => $sql) {
|
||||
if (mysqli_query($GLOBALS['mysql_con'], $sql)) {
|
||||
echoSuccess("Tabelle <strong>$name</strong> wurde erfolgreich erstellt (oder existierte bereits).");
|
||||
} else {
|
||||
echoError("Fehler beim Erstellen der Tabelle <strong>$name</strong>: " . mysqli_error($GLOBALS['mysql_con']));
|
||||
$allSuccess = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $allSuccess;
|
||||
}
|
||||
|
||||
// Ausführen der Tabellen-Erstellung
|
||||
if (create_tables()) {
|
||||
echoSuccess("✅ Alle Tabellen erfolgreich erstellt!");
|
||||
} else {
|
||||
echoError("❌ Es gab Fehler beim Erstellen einzelner Tabellen.");
|
||||
}
|
||||
|
||||
// Jetzt die zusätzlichen Indexe mittels ALTER TABLE setzen
|
||||
$indexQueries = [
|
||||
// knowledgecenter_posts
|
||||
"ALTER TABLE knowledgecenter_posts ADD INDEX idx_created_at (created_at);",
|
||||
"ALTER TABLE knowledgecenter_posts ADD INDEX idx_modified_at (modified_at);",
|
||||
"ALTER TABLE knowledgecenter_posts ADD INDEX idx_modified_by (modified_by);",
|
||||
|
||||
// knowledgecenter_post_contacts
|
||||
"ALTER TABLE knowledgecenter_post_contacts ADD INDEX idx_post_id (post_id);",
|
||||
"ALTER TABLE knowledgecenter_post_contacts ADD INDEX idx_main_contact_id (main_contact_id);",
|
||||
|
||||
// knowledgecenter_post_mandant
|
||||
"ALTER TABLE knowledgecenter_post_mandant ADD INDEX idx_post_mandant (post_id, mandant_id);",
|
||||
|
||||
// knowledgecenter_post_department
|
||||
"ALTER TABLE knowledgecenter_post_department ADD INDEX idx_post_department (post_id, department_id);",
|
||||
|
||||
// knowledgecenter_post_files
|
||||
"ALTER TABLE knowledgecenter_post_files ADD INDEX idx_post_id (post_id);",
|
||||
|
||||
// knowledgecenter_post_role
|
||||
"ALTER TABLE knowledgecenter_post_role ADD INDEX idx_post_role (post_id, role_id);",
|
||||
|
||||
// knowledgecenter_post_versions
|
||||
"ALTER TABLE knowledgecenter_post_versions ADD INDEX idx_post_id (post_id);",
|
||||
"ALTER TABLE knowledgecenter_post_versions ADD INDEX idx_post_language (post_id, language_id);",
|
||||
|
||||
// knowledgecenter_post_version_contacts
|
||||
"ALTER TABLE knowledgecenter_post_version_contacts ADD INDEX idx_version_contact (version_id, contact_id);",
|
||||
|
||||
// knowledgecenter_categories_update
|
||||
"ALTER TABLE knowledgecenter_categories_update ADD INDEX idx_state_sorting (state, sorting);",
|
||||
"ALTER TABLE knowledgecenter_categories_update ADD INDEX idx_modified_at (modified_at);",
|
||||
"ALTER TABLE knowledgecenter_categories_update ADD INDEX idx_modified_by (modified_by);",
|
||||
|
||||
// knowledgecenter_category_translations
|
||||
"ALTER TABLE knowledgecenter_category_translations ADD INDEX idx_category_language (category_id, language_id);",
|
||||
|
||||
// knowledgecenter_category_post
|
||||
"ALTER TABLE knowledgecenter_category_post ADD INDEX idx_category_post (category_id, post_id);",
|
||||
|
||||
// knowledgecenter_category_mandant
|
||||
"ALTER TABLE knowledgecenter_category_mandant ADD INDEX idx_category_mandant (category_id, mandant_id);",
|
||||
|
||||
// knowledgecenter_category_department
|
||||
"ALTER TABLE knowledgecenter_category_department ADD INDEX idx_category_department (category_id, department_id);",
|
||||
|
||||
// knowledgecenter_category_role
|
||||
"ALTER TABLE knowledgecenter_category_role ADD INDEX idx_category_role (category_id, role_id);",
|
||||
|
||||
// knowledgecenter_post_comments
|
||||
"ALTER TABLE knowledgecenter_post_comments ADD INDEX idx_post_id (post_id);",
|
||||
"ALTER TABLE knowledgecenter_post_comments ADD INDEX idx_parent_id (parent_id);",
|
||||
|
||||
// knowledgecenter_category_links
|
||||
"ALTER TABLE knowledgecenter_category_links ADD INDEX idx_parent_child (parent_category_id, child_category_id);"
|
||||
];
|
||||
|
||||
foreach ($indexQueries as $query) {
|
||||
if (mysqli_query($GLOBALS['mysql_con'], $query)) {
|
||||
echoSuccess("Index erfolgreich erstellt: " . htmlspecialchars($query));
|
||||
} else {
|
||||
echoError("Fehler beim Erstellen des Index: " . mysqli_error($GLOBALS['mysql_con']) . " - Query: " . htmlspecialchars($query));
|
||||
}
|
||||
}
|
||||
|
||||
// Überprüfen, ob die Spalte "post_id" in der Tabelle "main_certificate" existiert
|
||||
$checkQuery = "SHOW COLUMNS FROM main_certificate LIKE 'post_id'";
|
||||
$checkResult = mysqli_query($GLOBALS['mysql_con'], $checkQuery);
|
||||
if ($checkResult && mysqli_num_rows($checkResult) == 0) {
|
||||
// Spalte existiert nicht – hinzufügen
|
||||
$alterQuery = "ALTER TABLE main_certificate ADD COLUMN post_id INT NOT NULL"; // oder NULL, je nach Anforderung
|
||||
if (mysqli_query($GLOBALS['mysql_con'], $alterQuery)) {
|
||||
echoSuccess("Spalte 'post_id' in Tabelle main_certificate erfolgreich hinzugefügt.");
|
||||
} else {
|
||||
echoError("Fehler beim Hinzufügen der Spalte 'post_id': " . mysqli_error($GLOBALS['mysql_con']));
|
||||
}
|
||||
} else {
|
||||
echoSuccess("Spalte 'post_id' existiert bereits in main_certificate.");
|
||||
}
|
||||
|
||||
// Array mit den Permissions, die hinzugefügt werden sollen
|
||||
$permissions = [
|
||||
[
|
||||
'description' => 'Darf Wiki Modul installieren',
|
||||
'code' => 'install_admin_kc',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Inhalte importieren',
|
||||
'code' => 'import_admin_kc',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitragsliste sehen',
|
||||
'code' => 'view_admin_kc_post_list',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Kategorie Admin Listen Items löschen',
|
||||
'code' => 'delete_admin_kc_category_item',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Kategorie Admin Liste sehen',
|
||||
'code' => 'view_admin_kc_category_list',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Kategorien erstellen',
|
||||
'code' => 'create_admin_kc_category',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Kategorien bearbeiten',
|
||||
'code' => 'edit_admin_kc_category',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf neuen Wiki Beitrag erstellen',
|
||||
'code' => 'create_admin_kc_post',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitragsversion ändern',
|
||||
'code' => 'edit_admin_kc_post_version',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf neue Wiki Beitragsversion erstellen',
|
||||
'code' => 'create_admin_kc_post_version',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitragsversion löschen',
|
||||
'code' => 'delete_admin_kc_post_version',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitragsdateien löschen',
|
||||
'code' => 'delete_admin_kc_post_file',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitragsdateien hinzufügen',
|
||||
'code' => 'add_admin_kc_post_file',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitrags Ansprechpartner verwalten',
|
||||
'code' => 'manage_admin_kc_post_contacts',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitrags Einstellungen sehen',
|
||||
'code' => 'view_admin_kc_post_settings',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
],
|
||||
[
|
||||
'description' => 'Darf Wiki Beitrags Einstellungen speichern',
|
||||
'code' => 'save_admin_kc_post_settings',
|
||||
'short_text' => '',
|
||||
'only_main_mandant' => 1,
|
||||
'default_active' => 0
|
||||
]
|
||||
];
|
||||
|
||||
// Iteriere über das Array und füge jede Permission ein:
|
||||
foreach ($permissions as $perm) {
|
||||
// Stelle sicher, dass Zeichenketten richtig escaped werden:
|
||||
$description = mysqli_real_escape_string($GLOBALS['mysql_con'], $perm['description']);
|
||||
$code = mysqli_real_escape_string($GLOBALS['mysql_con'], $perm['code']);
|
||||
$short_text = mysqli_real_escape_string($GLOBALS['mysql_con'], $perm['short_text']);
|
||||
$only_main_mandant = (int) $perm['only_main_mandant'];
|
||||
$default_active = (int) $perm['default_active'];
|
||||
|
||||
// Zuerst prüfen, ob eine Permission mit diesem Code bereits existiert.
|
||||
$checkSql = "SELECT id FROM main_permission WHERE code = '$code' LIMIT 1";
|
||||
$checkResult = mysqli_query($GLOBALS['mysql_con'], $checkSql);
|
||||
if ($checkResult && mysqli_num_rows($checkResult) > 0) {
|
||||
// Falls vorhanden, kannst Du eine Erfolgsmeldung anzeigen oder den Eintrag überspringen.
|
||||
echoSuccess("Permission '$description' existiert bereits.");
|
||||
continue; // Weitere Verarbeitung überspringen.
|
||||
}
|
||||
|
||||
// Falls nicht vorhanden, führe das INSERT aus:
|
||||
$insertSql = "INSERT INTO `main_permission` (`id`, `description`, `code`, `short_text`, `only_main_mandant`, `default_active`)
|
||||
VALUES (NULL, '$description', '$code', '$short_text', '$only_main_mandant', '$default_active')";
|
||||
if (mysqli_query($GLOBALS['mysql_con'], $insertSql)) {
|
||||
echoSuccess("Permission '$description' wurde erfolgreich hinzugefügt.");
|
||||
} else {
|
||||
echoError("Fehler beim Hinzufügen der Permission '$description': " . mysqli_error($GLOBALS['mysql_con']));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
// Einmalige Migration: legt in jedem bestehenden Beitragsordner unter
|
||||
// /userdata/knowledgecenter_update/posts/<hash>/ einen Symlink "shared"
|
||||
// an, der auf ../../shared zeigt.
|
||||
//
|
||||
// Idempotent (bereits vorhandene Einträge werden übersprungen) und
|
||||
// CLI-only — niemals direkt per HTTP aufrufbar.
|
||||
//
|
||||
// Usage:
|
||||
// php Installation/add_shared_symlinks.php --dry-run
|
||||
// php Installation/add_shared_symlinks.php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
http_response_code(403);
|
||||
exit('CLI only');
|
||||
}
|
||||
|
||||
$dryRun = in_array('--dry-run', $argv, true);
|
||||
|
||||
$postsDir = realpath(__DIR__ . '/../../../userdata/knowledgecenter_update/posts');
|
||||
$sharedDir = realpath(__DIR__ . '/../../../userdata/knowledgecenter_update/shared');
|
||||
|
||||
if ($postsDir === false) {
|
||||
fwrite(STDERR, "FEHLER: posts/-Verzeichnis nicht gefunden\n");
|
||||
exit(2);
|
||||
}
|
||||
if ($sharedDir === false) {
|
||||
fwrite(STDERR, "FEHLER: shared/-Verzeichnis nicht gefunden — bitte erst anlegen\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
echo "Mode: " . ($dryRun ? 'DRY-RUN (keine Änderungen)' : 'LIVE') . "\n";
|
||||
echo "Posts: $postsDir\n";
|
||||
echo "Shared: $sharedDir\n\n";
|
||||
|
||||
$dirs = glob($postsDir . '/*', GLOB_ONLYDIR);
|
||||
if ($dirs === false) {
|
||||
fwrite(STDERR, "FEHLER: glob() lieferte false\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
$created = 0;
|
||||
$skipped = 0;
|
||||
$collisions = 0;
|
||||
$failed = 0;
|
||||
|
||||
foreach ($dirs as $dir) {
|
||||
$linkPath = $dir . '/shared';
|
||||
$name = basename($dir);
|
||||
|
||||
if (is_link($linkPath)) {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
if (file_exists($linkPath)) {
|
||||
// gleichnamiger echter Ordner/Datei — nicht überschreiben
|
||||
echo "[KOLLISION] $name/shared existiert bereits als Ordner/Datei — übersprungen\n";
|
||||
$collisions++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($dryRun) {
|
||||
echo "[DRY-RUN] würde anlegen: $name/shared -> ../../shared\n";
|
||||
$created++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (@symlink('../../shared', $linkPath)) {
|
||||
$created++;
|
||||
} else {
|
||||
$err = error_get_last();
|
||||
echo "[FEHLER] $name/shared konnte nicht angelegt werden: " . ($err['message'] ?? 'unbekannt') . "\n";
|
||||
$failed++;
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n=== Zusammenfassung ===\n";
|
||||
echo "Beitragsordner gesamt: " . count($dirs) . "\n";
|
||||
echo "Symlinks " . ($dryRun ? 'geplant' : 'angelegt') . ": $created\n";
|
||||
echo "Bereits vorhanden: $skipped\n";
|
||||
echo "Kollisionen: $collisions\n";
|
||||
echo "Fehlgeschlagen: $failed\n";
|
||||
|
||||
exit($failed > 0 ? 1 : 0);
|
||||
Reference in New Issue
Block a user