-
Notifications
You must be signed in to change notification settings - Fork 39
/
Events.php
72 lines (69 loc) · 2.76 KB
/
Events.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
class Kwc_Basic_ImageEnlarge_EnlargeTag_Events extends Kwc_Abstract_Events
{
private function _canCreateUsIndirectly($class)
{
static $cache = array();
$cacheId = $this->_class.'-'.$class;
if (isset($cache[$cacheId])) return $cache[$cacheId];
foreach (Kwc_Abstract::getChildComponentClasses($class, array('generatorFlags'=>array('static'=>true))) as $c) {
if ($c == $this->_class) {
$cache[$cacheId] = true;
return true;
}
if ($this->_canCreateUsIndirectly($c)) {
return true;
}
}
$cache[$cacheId] = false;
return false;
}
public function getListeners()
{
$ret = parent::getListeners();
foreach (Kwc_Abstract::getComponentClasses() as $class) {
if ($this->_canCreateUsIndirectly($class)) {
$ret[] = array(
'class' => $class,
'event' => 'Kwf_Component_Event_ComponentClass_ContentChanged',
'callback' => 'onClassContentChanged'
);
$ret[] = array(
'class' => $class,
'event' => 'Kwc_Abstract_Image_ImageChangedEvent',
'callback' => 'onImageChanged'
);
}
}
return $ret;
}
public function onImageChanged(Kwc_Abstract_Image_ImageChangedEvent $event)
{
$components = $event->component
->getRecursiveChildComponents(array('componentClass' => $this->_class, 'ignoreVisible'=>true)); //ignore visible because we need to clear media cache for invisible images too (as it's shown in preview)
foreach ($components as $component) {
$imageData = $component->getComponent()->getImageData();
if ($imageData) {
$dim = $component->getComponent()->getImageDimensions();
$typeBase = $component->getComponent()->getBaseType();
$steps = Kwf_Media_Image::getResponsiveWidthSteps($dim, $imageData['file']);
$types = array();
foreach ($steps as $step) {
$types[] = str_replace('{width}', $step, $typeBase);
}
$this->fireEvent(new Kwf_Events_Event_Media_Changed(
$this->_class, $component, $types
));
}
$this->fireEvent(new Kwf_Component_Event_Component_ContentChanged(
$this->_class, $component
));
}
}
public function onClassContentChanged(Kwf_Component_Event_ComponentClass_ContentChanged $event)
{
$this->fireEvent(new Kwf_Component_Event_ComponentClass_ContentChanged(
$this->_class
));
}
}