private function writeOrderByEnumForType(KalturaTypeReflector $type) { $map = KAutoloader::getClassMap(); if (!isset($map[$type->getType()])) { return; } $this->_txt = ""; $parentType = $type; while (1) { $parentType = $parentType->getParentTypeReflector(); if ($parentType === null || $parentType->isFilterable()) { break; } } $partnetClassName = $parentType ? $parentType->getType() . "OrderBy" : "KalturaStringEnum"; $enumName = $type->getType() . "OrderBy"; $enumPath = dirname($map[$type->getType()]) . "/filters/orderEnums/{$enumName}.php"; $subpackage = ($type->getPackage() == 'api' ? '' : 'api.') . 'filters.enum'; $this->appendLine("<?php"); $this->appendLine("/**"); $this->appendLine(" * @package " . $type->getPackage()); $this->appendLine(" * @subpackage {$subpackage}"); $this->appendLine(" */"); $this->appendLine("class {$enumName} extends {$partnetClassName}"); $this->appendLine("{"); foreach ($type->getCurrentProperties() as $prop) { $filters = $prop->getFilters(); foreach ($filters as $filter) { if ($filter == "order") { $this->appendLine("\tconst " . $this->getOrderByConst($prop->getName()) . "_ASC = \"+" . $prop->getName() . "\";"); $this->appendLine("\tconst " . $this->getOrderByConst($prop->getName()) . "_DESC = \"-" . $prop->getName() . "\";"); } } } $reflectionClass = new ReflectionClass($type->getType()); if (!$type->isAbstract() && $reflectionClass->getMethod("getExtraFilters")->getDeclaringClass()->getName() === $reflectionClass->getName()) { $extraFilters = $type->getInstance()->getExtraFilters(); if ($extraFilters) { foreach ($extraFilters as $filterFields) { if (!isset($filterFields["order"])) { continue; } $fieldName = $filterFields["order"]; $fieldConst = $this->getOrderByConst($fieldName); $this->appendLine("\tconst {$fieldConst}_ASC = \"+{$fieldName}\";"); $this->appendLine("\tconst {$fieldConst}_DESC = \"-{$fieldName}\";"); } } } $this->appendLine("}"); $this->writeToFile($enumPath, $this->_txt); }
private function writeBaseFilterForType(KalturaTypeReflector $type) { $map = KAutoloader::getClassMap(); if (!isset($map[$type->getType()])) { return; } $filterClassName = $type->getType() . "BaseFilter"; $filterPath = dirname($map[$type->getType()]) . "/filters/base/{$filterClassName}.php"; $this->_txt = ""; $parentType = $type; while (1) { $parentType = $parentType->getParentTypeReflector(); if ($parentType === null || $parentType->isFilterable()) { break; } } $partnetClassName = $parentType ? $parentType->getType() . "Filter" : "KalturaFilter"; $subpackage = ($type->getPackage() == 'api' ? '' : 'api.') . 'filters.base'; $this->appendLine("<?php"); $this->appendLine("/**"); $this->appendLine(" * @package " . $type->getPackage()); $this->appendLine(" * @subpackage {$subpackage}"); $this->appendLine(" * @abstract"); $this->appendLine(" */"); $this->appendLine("class {$filterClassName} extends {$partnetClassName}"); $this->appendLine("{"); $this->appendLine("\tprivate \$map_between_objects = array"); $this->appendLine("\t("); // properies map foreach ($type->getCurrentProperties() as $prop) { $filters = $prop->getFilters(); foreach ($filters as $filter) { if ($filter != "order") { $propertyName = $this->formatFilterPropertyName($filter, $prop->getName()); $filterName = $this->formatFilterPropertyValue($filter, $prop->getName()); $this->appendLine("\t\t\"" . $propertyName . "\" => \"{$filterName}\","); } } } // extra filters properties map $extraFilters = null; $reflectionClass = new ReflectionClass($type->getType()); // invoke getExtraFilter only if it was defined in the current class if ($reflectionClass->getMethod("getExtraFilters")->getDeclaringClass()->getName() === $reflectionClass->getName()) { $extraFilters = $type->getInstance()->getExtraFilters(); if (!$extraFilters) { $extraFilters = array(); } foreach ($extraFilters as $filterFields) { if (isset($filterFields["filter"])) { $filter = $filterFields["filter"]; $fields = $filterFields["fields"]; $propertyName = $this->formatFilterPropertyNameForFields($filter, $fields); $filterName = $this->formatFilterPropertyValueForFields($filter, $fields); $this->appendLine("\t\t\"" . $propertyName . "\" => \"{$filterName}\","); } } } $this->appendLine("\t);"); $this->appendLine(""); // order by map $this->appendLine("\tprivate \$order_by_map = array"); $this->appendLine("\t("); foreach ($type->getCurrentProperties() as $prop) { $filters = $prop->getFilters(); foreach ($filters as $filter) { if ($filter == "order") { $propertyName = $prop->getName(); $orderFieldName = $this->formatOrderPropertyValue($propertyName); $this->appendLine("\t\t\"+" . $propertyName . "\" => \"+{$orderFieldName}\","); $this->appendLine("\t\t\"-" . $propertyName . "\" => \"-{$orderFieldName}\","); } } } if (is_array($extraFilters)) { foreach ($extraFilters as $filterFields) { if (isset($filterFields["order"])) { $propertyName = $filterFields["order"]; $orderFieldName = $this->formatOrderPropertyValue($propertyName); $this->appendLine("\t\t\"" . $propertyName . "\" => \"{$orderFieldName}\","); } } } $this->appendLine("\t);"); $this->appendLine(""); $this->appendLine("\tpublic function getMapBetweenObjects()"); $this->appendLine("\t{"); $this->appendLine("\t\treturn array_merge(parent::getMapBetweenObjects(), \$this->map_between_objects);"); $this->appendLine("\t}"); $this->appendLine(); $this->appendLine("\tpublic function getOrderByMap()"); $this->appendLine("\t{"); $this->appendLine("\t\treturn array_merge(parent::getOrderByMap(), \$this->order_by_map);"); $this->appendLine("\t}"); // class properties foreach ($type->getCurrentProperties() as $prop) { $filters = $prop->getFilters(); foreach ($filters as $filter) { if ($filter != "order") { $filterProp = $this->formatFilterPropertyName($filter, $prop->getName()); $filterPropType = $prop->getType(); $filterDynamicType = null; if (in_array($filter, array(baseObjectFilter::IN, baseObjectFilter::NOT_IN, baseObjectFilter::MATCH_OR, baseObjectFilter::MATCH_AND))) { if ($prop->isDynamicEnum()) { $filterDynamicType = $filterPropType; } $filterPropType = "string"; } $this->appendLine(); $this->appendLine("\t/**"); $this->appendLine("\t * " . $this->getDocForFilter($type->getInstance(), $filterProp)); $this->appendLine("\t * "); if ($filterDynamicType) { $this->appendLine("\t * @dynamicType {$filterDynamicType}"); } $this->appendLine("\t * @var {$filterPropType}"); $this->appendLine("\t */"); $this->appendLine("\tpublic \${$filterProp};"); } } } // extra filters for class properties if ($extraFilters !== null) { foreach ($extraFilters as $filterFields) { if (isset($filterFields["filter"])) { $this->appendLine(); $filter = $filterFields["filter"]; $fields = $filterFields["fields"]; $this->appendLine("\t/**"); $this->appendLine("\t * @var string"); $this->appendLine("\t */"); $this->appendLine("\tpublic \$" . $this->formatFilterPropertyNameForFields($filter, $fields) . ";"); } } } $this->appendLine("}"); $this->writeToFile($filterPath, $this->_txt); }