Hallo Community,
in dem Blog eintrag zeige ich euch wie ihr euch eine Eigene Sanktion erstellen könnt, als Beispiel benutze ich mein Gästebuch Plugin.
Die Sanktionen PIP wird benutzt wenn man eigene Sanktionen erstellen möchte wie in meinem Beispiel wird man aus dem Gästebuch gebannt.
Ihr müsst einmal die suspensiontype.xml erstellen in meinem beispiel sieht so so aus.
Bei <name> wird der Name der Sanktion angegeben
bei <classfile> wird der pfad zur SuspensionType.class.php angegeben standart ist es "lib/data/user/infraction/suspension/type/"
|
XML
|
1
2
3
4
5
6
7
8
9
10
|
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTDs/ruleconditiontype.dtd">
<data>
<import>
<type>
<name>banGuestbook</name>
<classfile>lib/data/user/infraction/suspension/type/BannGuestbookSuspensionType.class.php</classfile>
</type>
</import>
</data>
|
so nun haben wir die xml datei fertig jetzt erstellen wird die BannGuestbookSuspensionType.class.php , in der datei wird gesagt
was passiren soll wenn die Sanktion eintrifft. In meinem Beispiel wird der User aus dem Gästebuch gebannt.
Damit das aber auch geht habe ich vorher ein SQL befehl benutzt und mir eine weitere Spalte in der tabelle wcf1_user angelegt.
|
MySQL-Abfrage(n)
|
1
|
ALTER TABLE `wcf1_user` ADD `showGuestbook` TINYINT( 1 ) NOT NULL DEFAULT '1';
|
Hier nun die BannGuestbookSuspensionType.class.php
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?php
// wcf imports
require_once(WCF_DIR.'lib/data/user/infraction/suspension/type/AbstractSuspensionType.class.php');
/**
* Allows a temporary or permanent ban guestbook of a user.
*
* @author Jean-Marc Licht
* @copyright (c) 2009 by Jean-Marc Licht
* @license Creative Commons <by-nd> http://creativecommons.org/licenses/by-nd/3.0/deed.de
* @package de.masa-revenge.guestbook
* @subpackage data.user.infraction.suspension.type
* @category Community Framework (commercial)
*/
class BannGuestbookSuspensionType extends AbstractSuspensionType {
/**
* @see SuspensionType::apply()
*/
public function apply(User $user, UserSuspension $userSuspension, Suspension $suspension) {
$sql = "UPDATE wcf".WCF_N."_user
SET showGuestbook = 0
WHERE userID = ".$user->userID;
WCF::getDB()->sendQuery($sql);
}
/**
* @see SuspensionType::revoke()
*/
public function revoke(User $user, UserSuspension $userSuspension, Suspension $suspension) {
$sql = "UPDATE wcf".WCF_N."_user
SET showGuestbook = 1
WHERE userID = ".$user->userID;
WCF::getDB()->sendQuery($sql);
}
}
?>
|
So nun haben wir die Sanktion erstellt, das ganze sollte ja nun auch geprüft werden das könnte so aussehen in der DemoPage.class.php.
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
/**
* @see Page::readParameters()
*/
public function readParameters() {
parent::readParameters();
// Permission Denied for user are Bann from Guestbook
if(WCF::getUser()->showGuestbook == 0 && WCF::getUser()->userID > 0){
throw new PermissionDeniedException();
}
}
|