1<?php
2
3App::uses('CakeEvent', 'Event');
4App::uses('DebugTimer', 'DebugKit.Lib');
5App::uses('CrudListener', 'Crud.Controller/Crud');
6
7/**
8 * Implements timings for DebugKit / Crud
9 *
10 * Licensed under The MIT License
11 * For full copyright and license information, please see the LICENSE.txt
12 */
13class DebugKitListener extends CrudListener {
14
15/**
16 * List of events implemented by this class
17 *
18 * @return array
19 */
20	public function implementedEvents() {
21		return array(
22			'Crud.startup' => array('callable' => 'startup'),
23			'Crud.beforeHandle' => array('callable' => 'beforeHandle', 'priority' => 1),
24			'Crud.beforeRender' => array('callable' => 'beforeRender', 'priority' => 5000),
25
26			'Crud.beforePaginate' => array('callable' => 'beforePaginate', 'priority' => 1),
27			'Crud.afterPaginate' => array('callable' => 'afterPaginate', 'priority' => 5000),
28
29			'Crud.beforeSave' => array('callable' => 'beforeSave', 'priority' => 1),
30			'Crud.afterSave' => array('callable' => 'afterSave', 'priority' => 5000),
31
32			'Crud.beforeFind' => array('callable' => 'beforeFind', 'priority' => 1),
33			'Crud.afterFind' => array('callable' => 'afterFind', 'priority' => 5000),
34
35			'Crud.beforeDelete' => array('callable' => 'beforeDelete', 'priority' => 1),
36			'Crud.afterDelete' => array('callable' => 'afterDelete', 'priority' => 5000),
37		);
38	}
39
40/**
41 * Start timer for Crud.beforeHandle
42 *
43 * And enable event logging. The Crud.startup event will not itself have been logged
44 *
45 * @param CakeEvent $event
46 * @return void
47 */
48	public function startup(CakeEvent $event) {
49		$this->_crud()->config('eventLogging', true);
50		$this->_crud()->logEvent('Crud.startup');
51	}
52
53/**
54 * Start timer for Crud.init
55 *
56 * And enable event logging. The Crud.initialize event will not itself have been logged
57 *
58 * @param CakeEvent $event
59 * @return void
60 */
61	public function beforeHandle(CakeEvent $event) {
62		parent::beforeHandle($event);
63
64		DebugTimer::start('Event: Crud.beforeHandle');
65	}
66
67/**
68 * Stop timer for Crud.init
69 *
70 * @param CakeEvent $event
71 * @return void
72 */
73	public function beforeRender(CakeEvent $event) {
74		DebugTimer::stop('Event: Crud.beforeHandle');
75	}
76
77/**
78 * Start timer for Crud.Paginate
79 *
80 * @param CakeEvent $event
81 * @return void
82 */
83	public function beforePaginate(CakeEvent $event) {
84		DebugTimer::start('Event: Crud.Paginate');
85	}
86
87/**
88 * Stop timer for Crud.Paginate
89 *
90 * @param CakeEvent $event
91 * @return void
92 */
93	public function afterPaginate(CakeEvent $event) {
94		DebugTimer::stop('Event: Crud.Paginate');
95	}
96
97/**
98 * Start timer for Crud.Save
99 *
100 * @param CakeEvent $event
101 * @return void
102 */
103	public function beforeSave(CakeEvent $event) {
104		DebugTimer::start('Event: Crud.Save');
105	}
106
107/**
108 * Stop timer for Crud.Save
109 *
110 * @param CakeEvent $event
111 * @return void
112 */
113	public function afterSave(CakeEvent $event) {
114		DebugTimer::stop('Event: Crud.Save');
115	}
116
117/**
118 * Start timer for Crud.Find
119 *
120 * @param CakeEvent $event
121 * @return void
122 */
123	public function beforeFind(CakeEvent $event) {
124		DebugTimer::start('Event: Crud.Find');
125	}
126
127/**
128 * Stop timer for Crud.Find
129 *
130 * @param CakeEvent $event
131 * @return void
132 */
133	public function afterFind(CakeEvent $event) {
134		DebugTimer::stop('Event: Crud.Find');
135	}
136
137/**
138 * Start timer for Crud.Delete
139 *
140 * @param CakeEvent $event
141 * @return void
142 */
143	public function beforeDelete(CakeEvent $event) {
144		DebugTimer::start('Event: Crud.Delete');
145	}
146
147/**
148 * Stop timer for Crud.Delete
149 *
150 * @param CakeEvent $event
151 * @return void
152 */
153	public function afterDelete(CakeEvent $event) {
154		DebugTimer::stop('Event: Crud.Delete');
155	}
156
157}
158