/** * fromReflection() - build a Code Generation PHP Object from a Class Reflection * * @param Zend_Reflection_Class $reflectionClass * @return dmZendCodeGeneratorPhpClass */ public static function fromReflection(Zend_Reflection_Class $reflectionClass) { $class = new self(); $class->setSourceContent($class->getSourceContent()); $class->setSourceDirty(false); if ($reflectionClass->getDocComment() != '') { $class->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionClass->getDocblock())); } $class->setAbstract($reflectionClass->isAbstract()); $class->setName($reflectionClass->getName()); if ($parentClass = $reflectionClass->getParentClass()) { $class->setExtendedClass($parentClass->getName()); $interfaces = array_diff($parentClass->getInterfaces(), $reflectionClass->getInterfaces()); } else { $interfaces = $reflectionClass->getInterfaces(); } $class->setImplementedInterfaces($interfaces); $properties = array(); foreach ($reflectionClass->getProperties() as $reflectionProperty) { if ($reflectionProperty->getDeclaringClass()->getName() == $class->getName()) { $properties[] = Zend_CodeGenerator_Php_Property::fromReflection($reflectionProperty); } } $class->setProperties($properties); $methods = array(); foreach ($reflectionClass->getMethods(-1, 'dmZendReflectionMethod') as $reflectionMethod) { if ($reflectionMethod->getDeclaringClass()->getName() == $class->getName()) { $methods[] = dmZendCodeGeneratorPhpMethod::fromReflection($reflectionMethod); } } $class->setMethods($methods); return $class; }
/** * Method scan given object for properties which has public getters * and generate array of entities-replacements pairs from this method * @param $object Object * @param $namespace Custom namespace for replacements * @return Tools_Content_EntityParser Return self for chaining * @throws Exceptions_SeotoasterException */ public function objectToDictionary($object, $namespace = null) { if (!is_object($object)) { throw new Exceptions_SeotoasterException('Given variable must be an object'); } $reflection = new Zend_Reflection_Class($object); $dictionary = array(); foreach ($reflection->getProperties() as $prop) { $normalizedPropName = join('', array_map('ucfirst', explode('_', $prop->getName()))); $getter = 'get' . join('', array_map('ucfirst', explode('_', $prop->getName()))); if ($reflection->hasMethod($getter)) { $replacement = $object->{$getter}(); $className = empty($namespace) ? preg_replace('/.*_([\\w\\d]*)$/', '$1', $reflection->getName()) : $namespace; $entityName = strtolower($className . ':' . $normalizedPropName); if (!is_array($replacement) && !is_object($replacement)) { $dictionary[$entityName] = $replacement; } } } $this->addToDictionary($dictionary); return $this; }
/** * Add a confirmation code to the form using the {@link Zend_Form_Element_Hash} * useful to avoid CSRF attack and prevent resubmission of forms * * @return void */ protected function addConfirmationCode() { $class = new Zend_Reflection_Class($this); $name = $class->getName() . '_confirmcode'; $this->addElement('hash', $name, array('decorators' => array('viewHelper'), 'ignore' => true)); }
/** * Parse observer class for contstants containing trigger names * @param $pluginName * @return array List of trigger-observer pairs */ private function _getTriggers($pluginName) { $triggers = array(); $observers = $this->_getPluginObserversList($pluginName); if (is_array($observers) && !empty($observers)) { foreach ($observers as $observerName) { $reflection = new Zend_Reflection_Class($observerName); $propList = $reflection->getConstants(); if (!empty($propList)) { foreach ($propList as $constName => $trigger) { if (strpos($constName, 'TRIGGER_') !== 0) { continue; } $triggers[] = array('trigger_name' => $trigger, 'observer' => $reflection->getName()); } } } } return $triggers; }