NotificationCenter
Verschicken von Notifications
<TODO: elmar>
Empfangen von Notifications
<TODO: elmar>
Gegenwärtige Verwendungen
Die im offiziellen verwendeten Notifications werden im folgenden beschrieben.
Notification: ConfigValueChanged
Dies Notification wird versendet, wenn sich ein in der Klasse Config
enthaltener Parameter geändert hat. Als subject
wird die Config-Instanz mitgegeben und als userdata
der neue und alte Wert.
<TODO: elmar oder anoack>
lib/classes/Config.class.php: NotificationCenter::postNotification('ConfigValueChanged', $this, array('field' => $field, 'old_value' => $old_value,
'new_value' => $value_entry->value));
Notifications: CourseRemovedFromModule
und CourseAddedToModule
lib/classes/StudipSemTree.class.php: NotificationCenter::postNotification('CourseRemovedFromModule', $studyarea, array('module_id' => $sem_tree_id, 'course_id' => $seminar_id));
lib/classes/StudipSemTree.class.php: NotificationCenter::postNotification('CourseAddedToModule', $studyarea, array('module_id' => $sem_tree_id, 'course_id' => $seminar_id));
<TODO: elmar oder anoack>
Notifications: Dateien
Wenn eine Datei hochgeladen wird, wird vor dem tatsächlichen Anlegen die Notification DocumentWillCreate
und nach dem Anlegen DocumentDidCreate
versendet. Als subject
dient dabei stets die zugehörige Instanz der Klasse StudipDocument
.
Wenn der Inhalt einer Datei upgedatet wird, wird analog vorher die Notification DocumentWillUpdate
und hinterher DocumentDidUpdate
verschickt. Auch hier ist das subject
wieder die Instanz der Klasse StudipDocument
.
Auch wenn eine Datei gelöscht wird, werden Notifications versendet: DocumentWillDelete
und DocumentDidDelete
. Auch in diesen Fällen werden als subject
Instanzen der Klasse StudipDocument
verwendet, wenn gleich diese gerade bei DocumentDidDelete
eher dokumentarisch verwendet werden können, da sie ja gelöscht wurden.
Notifications: Forum
Wenn ein Forumsbeitrag verfasst wurde, wird vor dem tatsächlichen Speichern die Notification PostingWillCreate
und nach dem Speichern PostingDidCreate
versendet. Das subject
ist die ID des Forumsbeitrags.
Wenn ein Forumsbeitrag verändert wurde, wird vor dem tatsächlichen Speichern die Notification PostingWillUpdate
und nach dem Speichern PostingDidUpdate
versendet. Das subject
ist die ID des Forumsbeitrags.
Auch wenn ein Forumsbeitrag gelöscht wird, gibt es Notifications: PostingWillDelete
und PostingDidDelete
. Auch dort wird der Vollständigkeit halber die ID des Forumsbeitrags übergeben.
Notifications: Wiki
Wenn eine Wikiseite verfasst wurde, wird vor dem tatsächlichen Speichern die Notification PostingWillCreate
und nach dem Speichern PostingDidCreate
versendet. Das subject
ist ein Array mit range_id
und keyword
der Wikiseite.
Wenn eine Wikiseite verändert wurde, wird vor dem tatsächlichen Speichern die Notification PostingWillUpdate
und nach dem Speichern PostingDidUpdate
versendet. Das subject
ist ein Array mit range_id
und keyword
der Wikiseite.
Auch wenn eine Wikiseite gelöscht wird, gibt es Notifications: PostingWillDelete
und PostingDidDelete
. Auch dort wird der Vollständigkeit halber ein Array mit range_id
und keyword
der Wikiseite übergeben.
Wie benenne ich eine Notification?
Dazu gibt es bisher keine gültige Richtlinie. Offenbar scheint sich aber abzuzeichnen, dass der Name in CamelCase geschrieben und eine Handlung beschreibt. Da das NotificationCenter an die Originalimplementation aus NextStep angelehnt ist, macht es vermutlich Sinnn, ähnliche Konventionen wie dort zu verwenden. So beschreibt der Artikel NSNotfication Not Working, But Looks Right? :: Find That Bug! ein BestPractice, wonach die Notifications:
JJColorChange
und:
JJColorChanged
nur schwer im Code zu unterscheiden sind, da sie sich lediglich um einen Buchstaben unterscheiden. Die Empfehlung lautet statt:
lieber:
- CamelCase
- CamelDidCase
- CamelWillCase
- CamelByCase
zu verwenden. Aus diesen Gründen wurden bei den Notifications für Dateien, Wikiseiten und Forumsbeiträgen die Namen entsprechend gewählt.