CheatSheet

1.  Datenklassen

1.1  Benutzer

Aktuellen Benutzer finden

User::findCurrent();

Wert aus der Benutzer-Konfiguration auslesen

$wert = UserConfig::get(User::findCurrent()->id)->getValue('WERT_NAME');

Wert in der Benutzer-Konfiguration speichern

UserConfig::get(User::findCurrent()->id)->store('WERT_NAME', $wert);

WICHTIG: $wert wird standardmäßig als String gespeichert, sofern nichts anderes in der Config-Tabelle angegeben ist! Arrays sollten vorher mit json_encode(studip_utf8encode($array)); kodiert werden!

Prüfen, ob ein Benutzer Administrator ist

$perm->have_perm('admin')

Liefert true zurück, wenn der Benutzer entweder 'root'- oder 'admin'-Berechtigungen hat, ansonsten false.

1.2  SimpleORMap

Veranstaltungen

Courses (/lib/models/Course.class.php)

Archivierte Veranstaltungen

ArchivedCourses (/lib/models/ArchivedCourse.class.php)

Dozenten

User-Klasse, alle Objekte, bei welchen das Attribut "perms" auf "dozent" gesetzt ist.

Benutzer

User (/lib/models/User.class.php), Erweiterung von AuthUserMd5, welche die Grunddaten (z.B. Vorname, Nachname, Benutzername) eines Benutzers enthält.

2.  Controller-relevante Klassen

2.1  URLs

URL erzeugen

URLHelper::getLink('dispatch.php/CONTROLLER);, wobei CONTROLLER der aufzurufende Controller ist.

WICHTIG: getLink ändert URLS so ab, sodass diese in HTML-Code eingebettet werden können. Beispielsweise wird aus & ein &. Will man diese Umwandlung nicht, sollte URLHelper::getURL(); verwendet werden.

URL-Erzeugung im Plugin

PluginEngine::getLink(PLUGIN, PARAMETER, PFAD);, PLUGIN = $this->plugin (im Controller) oder $plugin (im Template), PARAMETER = assoziatives Array, PFAD = Pfad zum Controller)

WICHTIG: getLink ändert URLS so ab, sodass diese in HTML-Code eingebettet werden können. Beispielsweise wird aus & ein &. Will man diese Umwandlung nicht, sollte PluginEngine::getURL(); verwendet werden.

Sobald man sich in einer Trails-App befindet, sollte allerdings die Controller-Methode url_for() genutzt werden, welche den obigen Aufruf kapselt und vereinfacht.

Icon-Erzeugung

Icon::create(SYMBOL, KATEGORIE)->asImg(GRÖßE);, SYMBOL = das anzuzeigende Symbol, KATEGORIE = farbliche Einordnung des Symbols (z.B. "clickable"), GRÖßE = Angabe in Pixeln (z.B. "12px")

2.2  URL-Parameter "dauerhaft" machen

Um einen Parameter beim Aufruf der nächsten Seite mitgeben zu können, verwendet man die Methode addLinkParam von URLHelper:

URLHelper::addLinkParam('name', WERT);

An die URL wird nun der Parameter name mit dem Wert WERT angehängt (z.B.: http://example.org?name=WERT).

3.  Darstellung

3.1  Navigationselemente

Navigationselement auf der Startseite hinzufügen

<?php
$navigation = new Navigation('LINKBESCHREIBUNG', 'EINE_URL'); //Erzeugen des Navigationselementes mit einem passenden Text und der gewünschten URL
Navigation::addItem('/start/ID', $navigation); //ID = eindeutige Bezeichnung des Navigationselementes. /start/ muss auf jeden Fall dorthin, damit das Element auf der Startseite angezeigt wird

Reiternavigation (Tabs) erzeugen

<?php
$navigation = new Navigation('LINKBESCHREIBUNG', 'EINE_URL');
Navigation::addItem('/ID', $navigation); //ID = eindeutiger Pfad. Dieser liegt in der "Wurzel", also nicht unterhalb anderer Pfade wie z.B. /start/

In dem Controller, welcher über obiges Navigationselement erreichbar ist, muss das Navigationselement aktiviert werden:

<?php
Navigation::activateItem('/ID');

Hinweis: Natürlich sind auch hier Unterpfade, z.B. /ID/NOCHEINEID möglich.

Icon in Reiternavigation einfügen

Beim Hinzufügen von Icons in die Reiternavigation muss beachtet werden, dass das Icon eines aktiven Reiters eine andere Farbe hat als das Icon eines inaktiven Reiters. Deshalb muss der Wechsel des Icons bei der Aktivierung eines Reiters durchgeführt werden.

Definition des Reiters in der Navigationsstruktur:

<?php
$navigation = new Navigation(
    'Text',
    PluginEngine::getUrl('ein/link')
    );
$navigation->setImage(Icon::create('edit', 'info_alt'));
Navigation::addItem('/navigations/pfad', $navigation);

Damit wurde ein Reiter mitsamt Icon definiert. "info_alt" bezeichnet nach aktuellem Stand (2016-07-27) eine weiße Icon-Farbe. Um das Icon in einem aktiven Reiter anders zu färben, aktiviert man diesen und setzt das Icon neu:

<?php
if(Navigation::hasItem('/navigations/pfad')) {
    $nav = Navigation::getItem('/navigations/pfad');
    $nav->setImage(Icon::create('assessment', 'info'));
    Navigation::activateItem('/navigations/pfad');
}

Damit wird der Farbwechsel beim Aktivieren (Besuchen) und Deaktivieren (Verlassen) eines Reiters durchgeführt.

3.2  Hinweistexte

Möglichkeiten für Hinweistexte:

  • MessageBox::error -> Fehlermeldungen
  • MessageBox::info -> Informationen
  • MessageBox::warning -> Warnmeldungen (aber keine Fehler)
  • MessageBox::success -> Erfolgsbestätigungen (Aktionen, die erfolgreich abgeschlossen wurden)

Mehr Informationen: Messagebox

Hinweistexte vom Controller heraus ausgeben

<?php
PageLayout::postError(_('Fehler!'));

Mehr zu PageLayout: PageLayout

3.3  Sidebar

Navigations-Bereich hinzufügen

<?php
$navigation = new NavigationWidget();
$navigation->setTitle('Titel des Bereiches');

//hier wird ein Link hinzugefügt:
$navigation->addLink(
    'Ein Linktitel',
    PluginEngine::getURL($this->plugin, [], 'show')
);

Sidebar::Get()->addWidget($navigation); //Navigations-Bereich in die Sidebar einhängen

Link auf Dialog im ActionsWidget hinzufügen

<?php
$actions = new ActionsWidget();
$actions->addLink(
    'Beschreibung',
    URLHelper::getURL('dispatch.php/CONTROLLER'),
    con::create(SYMBOL, KATEGORIE)
)->asDialog();

CONTROLLER ist der aufzurufende Controller, SYMBOL das ausgewählte Symbol, dessen Farbe durch die Kategorie KATEGORIE gesetzt wird. Mit der Methode asDialog() (Klasse LinkElement in /lib/classes/sidebar) wird das HTML-Attribut "data-dialog" beim Erstellen des HTML-Codes des Links gesetzt.

Schnellsuche (Suche mit Drop-Down-Menü) zu einem Suchfeld der Sidebar hinzufügen

<?php
$searchWidget = new SearchWidget(PluginEngine::getLink($this->plugin, array(), 'search'));
$searchWidget->setTitle(_('Suche'));
$searchWidget->setMethod('post');

$sqlSearch = new SQLSearch("SELECT auth_user_md5.user_id as userId FROM auth_user_md5 " .
    "WHERE ((vorname like CONCAT('%', :input, '%') " .
    "OR (nachname like CONCAT('%', :input, '%')) ",
    _('Benutzername')
    );

//QuickSearch zum SearchWidget hinzufügen:
$searchWidget->addNeedle(
    _('Benutzername'),
    'userId',
    _('Benutzername'),
    $sqlSearch
    );
 

Mehr zu QuickSearch: QuickSearch

3.4  Templates

Button erzeugen

<?= \Studip\Button::create(_('Speichern')); ?>

Button für Dialog erzeugen

<div data-dialog-button>
    <?= \Studip\Button::create(_('Speichern')); ?>
</div>

4.  Plugins

4.1  Herausfinden, ob ein anderes Plugin aktiviert ist

Dies ist z.B. sinnvoll, wenn ein Plugin von einem anderen Plugin oder dessen Klassen abhängig ist. Folgender Code prüft, ob ein anderes Plugin aktiviert ist:

$pluginManager = PluginManager::getInstance();
$pluginManager->getPluginInfo('AnderesPlugin');
//$pluginManager enthält nun Daten über das gesuchte andere Plugin.
if ($pluginManager['enabled']) {
    //das andere Plugin ist angeschaltet: Nun können z.B. Klassen dieses Plugins eingebunden werden oder andere Dinge gemacht werden, die dieses Plugin voraussetzen
}

4.2  Alle Plugins für eine Seite deaktivieren

Um festzustellen, ob Probleme auf einer Seite von einem Plugin ausgelöst werden, können auf dieser Seite alle Plugins deaktiviert werden, indem der URL-Parameter disable_plugins=1 angehängt wird.

5.  JavaScript

5.1  foreach in JavaScript

for (var element of someArray) {
    doSomething(element);
}

Siehe: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

5.2  JavaScript-Datei eines Plugins einbinden

In der Plugin-Klasse wird im Konstruktor folgender Code eingefügt, falls das JavaScript auf allen Seiten verfügbar sein soll. Ansonsten muss der folgende Code in der perform()-Methode des Plugins eingefügt werden, damit das JavaScript nur auf den Pluginseiten zur Verfügung steht:

<?php

PageLayout::addScript($this->getPluginURL() . '/assets/javascript/JavaScriptDatei.js');

Mehr zu PageLayout: PageLayout

5.3  URL in JavaScript erzeugen

In JavaScript ist ebenfalls ein URLHelper implementiert, welcher sich ähnlich aufrufen lässt, wie der URLHelper in PHP:

STUDIP.URLHelper.getURL(URL, {"parameter" : WERT});

Das Objekt, welches in JSON-Notation hinter der URL angegeben wird, beinhaltet Parameter, welche an die URL angehängt werden.

6.  Composer

6.1  Wie installiere ich die durch Composer definierten Abhängigkeiten?

composer install bzw. make composer

6.2  Wie installiere ich eine neue Abhängigkeit mittels Composer?

composer require <lib>

6.3  Wie aktualisiere ich eine durch Composer definierte Abhängigkeit?

composer update <lib>

Es dürfen immer nur einzelne Abhängigkeiten im Rahmen eines TICs (oder Bugfixes, wenn nötig) aktualisiert werden, da durch das Update durch API-Änderungen oder andere kritische Änderungen Probleme entstehen können. Es sollte niemals grundlos composer update ohne Angabe einer Lib aufgerufen werden.

6.4  Wo finde ich weitere Informationen, wie man Composer verwendet?

https://getcomposer.org/doc/01-basic-usage.md

Letzte Änderung am February 19, 2021, at 11:54 AM von tleilax.