public function getListeners() { $ret = parent::getListeners(); //find components that can create ourself ($this->_class) foreach ($this->_getCreatingClasses($this->_class) as $class) { $ret[] = array('class' => $class, 'event' => 'Kwf_Events_Event_Media_Changed', 'callback' => 'onMediaChanged'); $ret[] = array('class' => $class, 'event' => 'Kwf_Component_Event_Component_ContentChanged', 'callback' => 'onContentChanged'); $ret[] = array('class' => $class, 'event' => 'Kwf_Component_Event_ComponentClass_ContentChanged', 'callback' => 'onClassContentChanged'); $imageEnlargeClasses = array(); foreach ($this->_getCreatingClasses($class) as $c) { if (in_array('Kwc_Basic_LinkTag_Component', Kwc_Abstract::getParentClasses($c))) { $imageEnlargeClasses = array_merge($imageEnlargeClasses, $this->_getCreatingClasses($c)); } else { $imageEnlargeClasses[] = $c; } } foreach ($imageEnlargeClasses as $imageEnlargeClass) { // TODO: does not cover "List_Switch with ImageEnlarge as large component (we have to go up one more level)" foreach ($this->_getCreatingClasses($imageEnlargeClass, null) as $listClass) { if (!is_instance_of($listClass, 'Kwc_Abstract_List_Component')) { $listClasses = $this->_getCreatingClasses($listClass, 'Kwc_Abstract_List_Component'); } else { $listClasses = array($listClass); } foreach ($listClasses as $listClass) { $ret[] = array('class' => $listClass, 'event' => 'Kwc_Abstract_List_EventItemDeleted', 'callback' => 'onListItemChange'); $ret[] = array('class' => $listClass, 'event' => 'Kwc_Abstract_List_EventItemInserted', 'callback' => 'onListItemChange'); $ret[] = array('class' => $listClass, 'event' => 'Kwc_Abstract_List_EventItemUpdated', 'callback' => 'onListItemChange'); } } } } return $ret; }
protected function _formatConfig($parentData, $row) { $ret = parent::_formatConfig($parentData, $row); $parentClasses = Kwc_Abstract::getParentClasses($parentData->componentClass); if (in_array('Kwc_Chained_CopyTarget_Component', $parentClasses)) { $ret['parent'] = $parentData; } return $ret; }
public function getListeners() { $ret = parent::getListeners(); foreach (Kwc_Abstract::getComponentClasses() as $class) { if (in_array('Kwc_Advanced_SearchEngineReferer_Component', Kwc_Abstract::getParentClasses($class))) { $m = Kwc_Abstract::createChildModel($class); $ret[] = array('class' => $m, 'event' => 'Kwf_Events_Event_Row_Inserted', 'callback' => 'onRowInsert'); } } return $ret; }
/** * Returns all component classes that can create $createdClass. Optionally filtering instances of $createClass. */ protected function _getCreatingClasses($createdClass, $createClass = null) { $ret = array(); foreach (Kwc_Abstract::getComponentClasses() as $c) { if (!$createClass || in_array($createClass, Kwc_Abstract::getParentClasses($c))) { if (Kwc_Abstract::getChildComponentClasses($c, array('componentClass' => $createdClass))) { $ret[] = $c; } } } return $ret; }
public function getListeners() { $ret = array(); foreach (Kwc_Abstract::getComponentClasses() as $class) { if (in_array('Kwc_Directories_List_Component', Kwc_Abstract::getParentClasses($class)) || in_array('Kwc_Directories_List_Trl_Component', Kwc_Abstract::getParentClasses($class))) { if (Kwc_Abstract::hasChildComponentClass($class, 'feed') && $this->_class == Kwc_Abstract::getChildComponentClass($class, 'feed')) { $directoryClasses = call_user_func(array(strpos($class, '.') ? substr($class, 0, strpos($class, '.')) : $class, 'getItemDirectoryClasses'), $class); foreach ($directoryClasses as $directoryClass) { $ret[] = array('class' => $directoryClass, 'event' => 'Kwc_Directories_List_EventItemInserted', 'callback' => 'onDirectoryUpdate'); $ret[] = array('class' => $directoryClass, 'event' => 'Kwc_Directories_List_EventItemDeleted', 'callback' => 'onDirectoryUpdate'); $ret[] = array('class' => $directoryClass, 'event' => 'Kwc_Directories_List_EventItemUpdated', 'callback' => 'onDirectoryUpdate'); $ret[] = array('class' => $directoryClass, 'event' => 'Kwc_Directories_List_EventItemsUpdated', 'callback' => 'onDirectoryUpdate'); } } } } return $ret; }
private function _fireTagEvent($event, $directory, $itemId = null) { $cacheId = 'kwc-dirlistview-isdata-' . $this->_class; $dirIs = Kwf_Cache_SimpleStatic::fetch($cacheId); if ($dirIs === false) { $dirIs = array('data' => false, 'string' => false); foreach (Kwc_Abstract::getComponentClasses() as $class) { if (in_array('Kwc_Directories_List_Component', Kwc_Abstract::getParentClasses($class)) || in_array('Kwc_Directories_List_Trl_Component', Kwc_Abstract::getParentClasses($class))) { if (Kwc_Abstract::hasChildComponentClass($class, 'child', 'view') && $this->_class == Kwc_Abstract::getChildComponentClass($class, 'child', 'view')) { $isData = call_user_func(array(strpos($class, '.') ? substr($class, 0, strpos($class, '.')) : $class, 'getItemDirectoryIsData'), $class); if ($isData) { $dirIs['data'] = true; } else { $dirIs['string'] = true; } } } } Kwf_Cache_SimpleStatic::add($cacheId, $dirIs); } $event = "Kwf_Component_Event_ComponentClass_Tag_{$event}"; if ($itemId) { if ($dirIs['data']) { $this->fireEvent(new $event($this->_class, $directory->componentId, $itemId)); } if ($dirIs['string']) { $this->fireEvent(new $event($this->_class, $directory->componentClass, $itemId)); } } else { if ($dirIs['data']) { $this->fireEvent(new $event($this->_class, $directory->componentId)); } if ($dirIs['string']) { $this->fireEvent(new $event($this->_class, $directory->componentClass)); } } }
/** * Returns componentClasses that match a given class in their inheritance chain * * Fast, as the result is static and will be cached * * @param string * @return string[] */ public static function getComponentClassesByParentClass($class) { if (!is_array($class)) { $class = array($class); } static $prefix; $cacheId = 'cclsbpc-' . implode('-', $class); $ret = Kwf_Cache_SimpleStatic::fetch($cacheId, $success); if ($success) { return $ret; } $ret = array(); foreach (Kwc_Abstract::getComponentClasses() as $c) { if (in_array($c, $class) || in_array(strpos($c, '.') ? substr($c, 0, strpos($c, '.')) : $c, $class)) { $ret[] = $c; continue; } foreach (Kwc_Abstract::getParentClasses($c) as $p) { if (in_array($p, $class)) { $ret[] = $c; break; } } } Kwf_Cache_SimpleStatic::add($cacheId, $ret); return $ret; }
private function _processComponentDependency($assetsType, $class, $rootComponent, $includeAdminAssets) { if (in_array($assetsType . $class . $includeAdminAssets, $this->_processedComponents)) { return; } array_push($this->_stack, $class); $assets = Kwc_Abstract::getSetting($class, 'assets'); $assetsAdmin = array(); if ($includeAdminAssets) { $assetsAdmin = Kwc_Abstract::getSetting($class, 'assetsAdmin'); } $this->_processedComponents[] = $assetsType . $class . $includeAdminAssets; if (isset($assets['dep'])) { foreach ($assets['dep'] as $dep) { $this->_processDependency($assetsType, $dep, $rootComponent); } } if (isset($assetsAdmin['dep'])) { foreach ($assetsAdmin['dep'] as $dep) { $this->_processDependency($assetsType, $dep, $rootComponent); } } if (isset($assets['files'])) { foreach ($assets['files'] as $file) { $this->_processDependencyFile($assetsType, $file, $rootComponent); } } if (isset($assetsAdmin['files'])) { foreach ($assetsAdmin['files'] as $file) { $this->_processDependencyFile($assetsType, $file, $rootComponent); } } //alle css-dateien der vererbungshierache includieren $componentCssFiles = array(); foreach (Kwc_Abstract::getParentClasses($class) as $c) { $curClass = $c; if (substr($curClass, -10) == '_Component') { $curClass = substr($curClass, 0, -10); } $curClass = $curClass . '_Component'; $file = str_replace('_', '/', $curClass); foreach ($this->_config->path as $type => $dir) { if ($dir == '.') { $dir = getcwd(); } if (is_file($dir . '/' . $file . '.css')) { $f = $type . '/' . $file . '.css'; $this->_processDependencyFile($assetsType, $f); } if (is_file($dir . '/' . $file . '.printcss')) { $f = $type . '/' . $file . '.printcss'; $this->_processDependencyFile($assetsType, $f); } } } $classes = Kwc_Abstract::getChildComponentClasses($class); $classes = array_merge($classes, Kwc_Abstract::getSetting($class, 'plugins')); foreach ($classes as $class) { if ($class) { $this->_processComponentDependency($assetsType, $class, $rootComponent, $includeAdminAssets); } } array_pop($this->_stack); }