예제 #1
0
 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);
 }
예제 #2
0
 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);
 }