protected function _processCriteria(Criteria $criteria) { $map = array(Criteria\Type::ID => 'id', Criteria\Type::ICC => 'icc', Criteria\Type::IMSI => 'imsi', Criteria\Type::MSISDN => 'msisdn', Criteria\Type::ALIAS => 'alias', Criteria\Type::CUSTOM_FIELD_1 => 'custom_field_1', Criteria\Type::CUSTOM_FIELD_2 => 'custom_field_2', Criteria\Type::CUSTOM_FIELD_3 => 'custom_field_3', Criteria\Type::CUSTOM_FIELD_4 => 'custom_field_4', Criteria\Type::SIM_TYPE => 'sim_type', Criteria\Type::LIFE_CYCLE_STATE => 'life_cycle_state', Criteria\Type::PROVISION_DATE => 'provision_date', Criteria\Type::SHIPPING_DATE => 'shipping_date', Criteria\Type::ACTIVATION_DATE => 'activation_date', Criteria\Type::SERVICE_PROVIDER_ENABLER => 'service_provider_enabler', Criteria\Type::SERVICE_PROVIDER_COMM => 'service_provider_commercial', Criteria\Type::CUSTOMER => 'customer', Criteria\Type::AGGREGATOR => 'aggregator', Criteria\Type::END_USER => 'end_user', Criteria\Type::COMMERCIAL_GROUP => 'commercial_group', Criteria\Type::SUPERVISION_GROUP => 'supervision_group', Criteria\Type::BILLING_ACCOUNT => 'billing_account', Criteria\Type::ORDER_NUMBER => 'order_number', Criteria\Type::IMEI => 'imei', Criteria\Type::IMEI_CHANGE_DATE => 'imei_change_date', Criteria\Type::COMMUNICATION_MODULE_MANUFACTURER => 'communication_module_manufacturer', Criteria\Type::COMMUNICATION_MODULE_MODEL => 'communication_module_model', Criteria\Type::STATIC_IP => 'static_ip', Criteria\Type::STATIC_IP_RANGE => 'static_ip_range', Criteria\Type::CURRENT_IP => 'current_ip', Criteria\Type::CURRENT_IP_RANGE => 'current_ip_range', Criteria\Type::APN => 'apn', Criteria\Type::SERVICE_PACK => 'service_pack', Criteria\Type::EXPENSE => 'expense', Criteria\Type::CONSUMPTION => 'consumption', Criteria\Type::PRESENCE => 'presence', Criteria\Type::LOCATION => 'location', Criteria\Type::ALARM => 'alarm', Criteria\Type::LTE_ENABLED => 'lte_enabled', Criteria\Type::SUPPLEMENTARY_SERVICES => 'suppl_service'); $descriptors = Criteria::descriptor(); $fieldName = $map[$criteria->getType()]; $fieldDesc = $descriptors->getFieldByName($fieldName); if (!$fieldDesc) { return; } switch ($criteria->getType()) { case Criteria\Type::SERVICE_PROVIDER_ENABLER: case Criteria\Type::SERVICE_PROVIDER_COMM: case Criteria\Type::AGGREGATOR: case Criteria\Type::END_USER: $mongoField = $fieldName . '.id'; break; // TODO: WOW... maybe it isn't id filter? Javi request this change for demo. We have to talk with // Ericsson, must they accept names instead of ids? // TODO: WOW... maybe it isn't id filter? Javi request this change for demo. We have to talk with // Ericsson, must they accept names instead of ids? case Criteria\Type::CUSTOMER: $mongoField = $fieldName . '.id'; break; case Criteria\Type::ID: $mongoField = '_id'; break; case Criteria\Type::SUPPLEMENTARY_SERVICES: switch ($criteria->{$fieldName}) { case \Application\Proto\SubscriptionSupplServicesEnum::ADV_SUPERVISION: $subfield = 'adv_supervision'; break; case \Application\Proto\SubscriptionSupplServicesEnum::DCA: $subfield = 'dca'; break; case \Application\Proto\SubscriptionSupplServicesEnum::DIM: $subfield = 'dim'; break; case \Application\Proto\SubscriptionSupplServicesEnum::LOCATION: $subfield = 'location'; break; case \Application\Proto\SubscriptionSupplServicesEnum::VPN: $subfield = 'vpn'; break; } $mongoField = 'supplementary_services.' . $subfield; break; default: $mongoField = $fieldName; } if ($fieldDesc->getType() === DrSlump\Protobuf::TYPE_MESSAGE) { switch ($fieldDesc->getReference()) { case '\\Application\\Proto\\DateInterval': $value = array(); if ($criteria->{$fieldName}->start_date !== null) { $value['$gte'] = $criteria->{$fieldName}->start_date; } if ($criteria->{$fieldName}->end_date !== null) { $value['$lte'] = $criteria->{$fieldName}->end_date; } break; } } else { if ($criteria->getType() == Criteria\Type::SUPPLEMENTARY_SERVICES) { $value = 1; } else { $value = $criteria->{$fieldName}; } } if (!isset($value)) { return; } return array($mongoField => $value); }