DeployerGuide/Others/ObjectsTriggers: ExampleLogObserver.example

Plik ExampleLogObserver.example, 3.3 KB (dodany przez TS, 9 years temu)
xx
Line 
1<?php
2
3/**
4 * ExampleLogObserver
5 * Implementacja na podstawie wzorca obserwatora klasa Log oraz jej pochodne są
6 * elementem obserwowanym!
7 *
8 * http://php.net/manual/pl/class.splobserver.php
9 *
10 * @uses LogObserver
11 * @final
12 * @author Tomasz Świenty
13 * @version 0.3
14 * @copyright Copyright (c) BetaSoft
15 */
16final class ExampleLogObserver extends LogObserver {
17
18
19
20    /**
21     * update
22     *
23     * @param SplSubject $subject
24     * @return void
25     */
26    public function update(SplSubject $subject) {
27
28        // podstawowe sprawdzenie czy obserwowany obiekt jest instancją klasy Log
29        if (!is_a($subject, 'Log')) {
30            return TRUE;
31        }
32
33        // zwraca obiekt klasy LogEvent który przechowuje ostatniego eventa Loga
34        $event = $subject->getLastEvent();
35
36        /* zwraca klase obserwowanego obiektu w postaci np. CONTACT, PROCESS, EVENT
37           nazwa najczęściej odpowiada nazwie katalogu w classes/Log/Contact, classes/Log/Process
38           jeśli coś nie ma katalogu to nie ma loga i nie da się zrobić obserwatora :)
39        */
40        $clsnam = $event->getEventClsnam();
41
42        // identyfikator numeryczny np. contid dla $clsnam = CONTACT
43        $keyval = $event->getEventKeyval();
44
45        /* kategoria zmiany opisowa np. ADDED, MODIFIED
46           aby pobrać wszystkie dostępne kategorie zmian należy wywołać kod
47           $categoryMap = $subject->getCategoryMap();
48           format zwróconych danych to tablica
49         */
50        $chacat = $event->getEventCategory();
51
52        /* priorytet zdarzenia indeksowo np. 1, 5 itd zakres to 1-8 w postaci
53           1 - EVENT_EMERG
54           2 - EVENT_ALERT
55           3 - EVENT_CRIT
56           4 - EVENT_ERR
57           5 - EVENT_WARNING
58           6 - EVENT_NOTICE
59           7 - EVENT_INFO
60           8 - EVENT_DEBUG
61         */
62        $prior = $event->getEventPriority();
63
64        // priorytet tekstowo np. EVENT_INFO
65        $priorText = $event->getEventPriority(TRUE);
66
67        // kto wykonuje akcje tekstowo jesli ma byc usr_id trzeba dać getEventActor(FALSE)
68        $actor = $event->getEventActor();
69
70        /* jeśli event loga dotyczył zmian w kolumnach to są to szczegóły zmian w kolumnach w postaci tablic array(nazwa kolumny => poprzednia wartosc)
71           aby pobrać wszystkie kolumnych, których zmiana jest obserwowana należy wywołać kod
72           $observedColums = $subject->getObservedColums();
73           funkcja zwraca tablicę gdzie klucze to obserwowane kolumny a wartość to albo tablica albo string
74           - jeśli tablica to ta tablica posiada klucz func - funkcja sprawdzająca dane oraz text - opis kolumny
75           - jeśli string to opis kolumny
76         */
77        $details = $event->getEventDetails(TRUE);
78
79        // jeśli nie ma kategorii zmian to nie wykonuj mnie
80        if (!$chacat) {
81            return TRUE;
82        }
83
84        // np. ma obsługiwać tylko log klasy kontaktow czyli jeśli klasa inna niż CONTACT to nie wykonuj mnie
85        // sprawdzenie można dać wcześniej
86        if ($clsnam != 'CONTACT') {
87            return TRUE;
88        }
89
90        // jeśli kategoria zmian inna niż ADDED to nie wykonuj mnie
91        if ($chacat != 'ADDED') {
92            return TRUE;
93        }
94
95        // tutaj po spełnieniu warunków wykonania obserwatora wykonuję dedykowany kod
96
97    }
98
99} // class ExampleLogObserver
100
101?>