1 Erklärung
Leider bietet das wsc keine Möglichkeit an, um Templates oder PHP Dateien während des Updatevorgangs zu löschen. Aus diesem Grunde muss hier selbst über einen kleinen Umweg das ganze bewerkstelligt werden
2 package.xml
Als Meta Information zum Update muss das Script-PiP benutzt werden., welches wie folgt eingebunden werden kann. Es ist wichtig, das Files-PiP zuerst zu notieren, damit das Script-PiP auf die entsprechende Datei zugreifen kann.
XML: package.xml
<instruction type="file" />
<instruction type="script">acp/update_example.php</instruction>
3 update_example.php
Innerhalb eines Arrays werden die Dateien notiert, die gelöscht werden sollen. Für PHP Dateien, Templates und ACP Templates gibt es je ein separates Array. Weitere Anpassung sind i.d.R nicht erforderlich.
PHP
<?php
use wcf\data\package\Package;
use wcf\system\WCF;
/**
* @author Marcel Beckers
* @license Beerware <https://de.wikipedia.org/wiki/Beerware>
* @package de.yourecom.guestbook
*/
$files = [
'lib\data\product\LikeableProduct.class.php',
'lib\data\product\LikeableProductProvider.class.php'
];
$templates = [];
$acpTemplates = [];
// Ab hier nichts mehr ändern
$package = $this->installation->getPackage();
$application = Package::getAbbreviation($package);
$applicationDir = constant(strtoupper($application).'_DIR');
// delete files
foreach($files as $file) {
if (file_exists($applicationDir.$file)) {
unlink($applicationDir.$file);
}
$sql = "DELETE FROM wcf".WCF_N."_package_installation_file_log
WHERE filename = ?
AND application = ?
AND packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute([
$file,
$application,
$package->packageID
]);
}
// delete templates
foreach($templates as $template) {
if (file_exists($applicationDir.$template)) {
unlink($applicationDir.$template);
}
$sql = "DELETE FROM wcf".WCF_N."_template
WHERE templateName = ?
AND application = ?
AND packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute([
substr(basename($template), 0, -4),
$application,
$package->packageID
]);
}
// delete acp templates
foreach($acpTemplates as $acpTemplate) {
if (file_exists($applicationDir.'acp/template'.$acpTemplate)) {
unlink($applicationDir.'acp/template'.$acpTemplate);
}
$sql = "DELETE FROM wcf".WCF_N."_acp_template
WHERE templateName = ?
AND application = ?
AND packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute([
substr(basename($acpTemplate), 0, -4),
$application,
$package->packageID
]);
}
Display More
Ihr habt Fragen oder Anregungen? Lob oder Kritik? Lasst es mich doch durch einen Kommentar von euch wissen!