/** * Tries to get the name of an action (edit, delete, list, new, save) for a given object-type. * Example: Converts list to listOtherObject for the object class_module_demo_demo if the annotation * @ objectListOtherObject class_module_demo_demo is declared * * @param string $strAction * @param $objInstance * * @return string */ protected function getActionNameForClass($strAction, $objInstance) { if (isset(self::$arrActionNameMapping[$strAction])) { $strAnnotationPrefix = self::$arrActionNameMapping[$strAction]; if ($strAction == "new") { return $strAction . $this->getStrCurObjectTypeName(); } else { $objReflection = new class_reflection($this); $arrAnnotations = $objReflection->getAnnotationsWithValueFromClass(get_class($objInstance)); foreach ($arrAnnotations as $strProperty) { if (uniStrpos($strProperty, $strAnnotationPrefix) === 0) { return $strAction . uniSubstr($strProperty, uniStrlen($strAnnotationPrefix)); } } } } return parent::getActionNameForClass($strAction, $objInstance); }
/** * Returns a list of all annotation names with a given value. * * @param string $strValue Annotation value * @param class_reflection_enum $objEnum - whether to return annotation values or parameters, default is values * @return array List of annotation names */ public function getAnnotationsWithValueFromClass($strValue, class_reflection_enum $objEnum = null) { if ($objEnum == null) { $objEnum = class_reflection_enum::VALUES(); } $arrReturn = array(); $strClassDoc = $this->objReflectionClass->getDocComment(); $arrProperties = $this->searchAllAnnotationsInDoc($strClassDoc); if ($objEnum->equals(class_reflection_enum::VALUES())) { foreach ($arrProperties as $strName => $arrValues) { if (in_array($strValue, $arrValues["values"])) { $arrReturn[] = $strName; } } } else { if ($objEnum->equals(class_reflection_enum::PARAMS())) { foreach ($arrProperties as $strName => $arrValues) { $arrParameters = $arrValues["params"]; foreach ($arrParameters as $arrParams) { foreach ($arrParams as $strParamName => $objParamValue) { if (is_array($objParamValue)) { if (in_array($strValue, $objParamValue)) { $arrReturn[$strName] = $strName; } } else { if ($objParamValue == $strValue) { $arrReturn[$strName] = $strName; } } } } } $arrReturn = array_keys($arrReturn); } } //check if there's a base-class -> inheritance $objBaseClass = $this->objReflectionClass->getParentClass(); if ($objBaseClass !== false) { $objBaseAnnotations = new class_reflection($objBaseClass->getName()); $arrReturn = array_merge($arrReturn, $objBaseAnnotations->getAnnotationsWithValueFromClass($strValue, $objEnum)); } return $arrReturn; }
/** * @dataProvider additionProvider */ public function testGetAnnotationsWithValueFromClassParameter($a) { $objAnnotations = new class_reflection(new C()); $arrClassAnnotations = $objAnnotations->getAnnotationsWithValueFromClass(54, class_reflection_enum::PARAMS()); $this->assertEquals(1, count($arrClassAnnotations)); $arrClassAnnotations = $objAnnotations->getAnnotationsWithValueFromClass("0", class_reflection_enum::PARAMS()); $this->assertEquals(2, count($arrClassAnnotations)); $this->assertTrue(in_array("@classParamTest2", $arrClassAnnotations)); $this->assertTrue(in_array("@classParamTest3", $arrClassAnnotations)); $arrClassAnnotations = $objAnnotations->getAnnotationsWithValueFromClass(0, class_reflection_enum::PARAMS()); $this->assertEquals(2, count($arrClassAnnotations)); $this->assertTrue(in_array("@classParamTest2", $arrClassAnnotations)); $this->assertTrue(in_array("@classParamTest3", $arrClassAnnotations)); $arrClassAnnotations = $objAnnotations->getAnnotationsWithValueFromClass("hans im glück", class_reflection_enum::PARAMS()); $this->assertEquals(1, count($arrClassAnnotations)); $this->assertTrue(in_array("@classParamTest2", $arrClassAnnotations)); $arrClassAnnotations = $objAnnotations->getAnnotationsWithValueFromClass("", class_reflection_enum::PARAMS()); $this->assertEquals(0, count($arrClassAnnotations)); }