Änderungen

Addons erstellen

6.668 Byte hinzugefügt, 09:43, 10. Okt. 2018
/* Beispiel-Code */
== Attribute ==
Jedes Addon benötigt ein String-Attribut ''public static $shortName'', das den Namen des Addon-Verzeichnisses enthält.
 
== Addon-Informationen ==
Ihr Addon benötigt einen Konstruktor, der die aktuelle Sprache als Attribut nimmt. Der Konstruktor muss einige Infos zum Addon setzen, die in der Administration in der Addon-Verwaltung angezeigt werden:
 
<source lang="php">
public function __construct($language) {
$this->name = self::$shortName;
parent::__construct();
 
$this->info = Array(
'name' => "Modul-Name",
'version' => "1.0",
'company' => "sourceWAY.de",
'url' => "https://sourceway.de/",
);
}
</source>
== Einstellungen ==
== System-Routinen ==
Sie können die System-Routinen für die Aktivierung und Deaktivierung eines Addons erweitern.Beispielsweise können Sie eine Tabellen-Spalte hinzufügen und entfernen: <source lang="php">public function activate() { global $CFG, $db; parent::activate();  $db->query("ALTER TABLE `" .$CFG['DB']['PREFIX'] . "clients` ADD `dsgvo_av` INT(11) NOT NULL DEFAULT '0';");} public function deactivate() { global $CFG, $db; parent::deactivate();  $db->query("ALTER TABLE `" . $CFG['DB']['PREFIX'] . "clients` REMOVE `dsgvo_av`;");}</source> Wichtig ist der Aufruf der original De-/aktivierungsfunktion. Ferner müssen Sie eine Methode definieren, wenn Sie das Löschen des Moduls aus der Administration ermöglichen möchten. Standardmäßig bietet sich folgende Methode an: <source lang="php">public function delete() { return $this->deleteDir(realpath(__DIR__));}</source> Natürlich können Sie die Löschfunktion um beliebige Routinen erweitern. Die Löschung eines Addons ist nur im deaktivierten Zustand möglich, sodass Sie sich nicht um das Aufräumen der Datenbank kümmern müssen, wenn Sie dies bereits bei der Deaktivierung machen.
== Seiten im Kundenbereich ==
Ihr Addon kann neue Seiten im Kundenbereich erstellen.Hierzu müssen die zu erstellenden Seite von der Methode ''clientPages()'' zurückgegeben werden.Hier muss auch definiert werden, welche Methode einen Aufruf behandeln soll: <source lang="php">public function clientPages() { return Array("dsgvo" => "displayClientPage");}</source> Die Methode könnte dann zum Beispiel so aussehen: <source lang="php">public function displayClientPage() { global $pars, $title, $tpl, $var, $lang;  switch ($pars[0]) { case 'av': $title = $this->getLang("AV"); $tpl = __DIR__ ."/templates/av.tpl"; $var['av'] = false; break;  default: $title = $lang['ERROR']['TITLE']; $tpl = "error"; break; }}</source>
== Seiten in der Administration ==
...Auch in der Administration kann ein Addon neue Seiten erstellen: <source lang="php">public function adminPages() { return Array("oauth2config" => "admin");}</source> Sie können sehr einfach Einträge in das "Addons"-Menü hinzufügen, hierzu ist die Angabe des Link-Namens und der Ziel-Seite erforderlich: <source lang="php">public function adminMenu() { return Array("OAuth2" => "oauth2config");}</source>
== Sprachsystem ==
Sie können eigene Sprachdateien für Ihr Addon nutzen.Dazu erstellen Sie im Addonverzeichnis einen Ordner ''language''.Darin nehmen Sie Sprachdateien für die gewünschten Sprache auf, zum Beispiel eine ''deutsch.php'': <source lang="php"><?php$addonlang = Array();$addonlang['NAME'] = "DSGVO";$addonlang['AV'] = "Auftragsverarbeitungs-Vertrag";</source> Die Initialisierung des Sprach-Systems muss anschließend im Konstruktor des Addons erfolgen: <source lang="php">$this->language = $language; if (!include (__DIR__ . "/language/$language.php")) { throw new ModuleException();} if (!is_array($addonlang) || !isset($addonlang["NAME"])) { throw new ModuleException();} $this->lang = $addonlang;</source> Anschließend kann eine Methode verwendet werden, um Sprachvariablen zu bekommen. Bei Verwendung des Templatesystems müssen die Sprachvariablen extra übergeben werden. <source lang="php">$this->getLang("NAME"); // Bestimmte Sprachvariable$this->getLang(); // Das komplette Sprach-Array $var['l'] = $this->getLang();</source>
== Template-Dateien ==
Sie können das Template-System sowohl für Seiten im Kundenbereich als auch in der Administration verwenden.Hierzu bietet es sich an, im Addon-Verzeichnis einen neuen Ordner ''templates'' zu erstellenZur Verwendung des Template-Systems müssen Sie in der Methode für die jeweilige Seite die Variable ''$tpl'' auf den vollständigen Pfad zum gewünschten Template setzen. Beachten Sie hierbei bitte, dass Sie diese Variable erst am Anfang der Methode per <code>global $tpl;</code> freigeben müssen.
== Hooks ==
..Mit Addons können Sie [[Hooks]] nutzen, um in Systemabläufe von sourceDESK einzugreifen und bei Events informiert zu werden.
== Widgets ==
..Es ist möglich, mit Ihrem Addon [[Widgets#Widget erstellen|eigene Widgets zu erstellen]], die dann auf der Startseite der Administration angezeigt werden können.
== Beispiel-Code ==
<source lang="php"><?php// Addon for monitoring log class LogMonitor extends Addon { public static $shortName = "log_monitor";  public function __construct($language) { $this->name = self::$shortName; parent::__construct(); $this->info = Array( 'name' => "Log-Monitor", 'version' => "1.0", 'company' => "sourceWAY.de", 'url' => "https://sourceway.de/", ); }  public function delete() { return $this->deleteDir(realpath(__DIR__)); }  public function hooks() { return Array( Array("UserLogEntry", "log", 0), ); }  public function log($params) { $user = $params['user']; $log = $params['log'];  if ($this->interestingUser($user) || $this->interestingText($log)) { Telegram::sendMessage($this->buildMsg($user, $log)); }  }  private function buildMsg($user, $log) { global $raw_cfg; if (!($user instanceof User)) { return false; }  return '<a href="' . $raw_cfg['PAGEURL'] . 'admin/?p=customers&edit=' . $user->get()['ID'] . '">' . htmlentities($user->get()['name']) . '</a>: ' . htmlentities($log); }  private function interestingUser($user) { if (!($user instanceof User)) { return false; }  $ex = explode(",", $this->options["user"]); foreach ($ex as &$v) { $v = intval(trim($v)); }  return in_array($user->get()["ID"], $ex); }  private function interestingText($log) { $log = trim($log);  $ex = explode(",", $this->options["text"]); foreach ($ex as $v) { if (strpos($log, trim($v)) !== false && !empty(trim($v))) { return true; } }  return false; }  public function getSettings() { return Array( "user" => Array("placeholder" => "1,5,7,...", "label" => "Zu &uuml;berwachende Benutzer (mehrere mit Komma trennen)", "type" => "text"), "text" => Array("placeholder" => "Domain,...", "label" => "Zu &uuml;berwachender Text (mehrere mit Komma trennen)", "type" => "text"), ); }}</source>