static function prepareAssociationConditions($redefined_context, $dimensions, $properties, $object_type_id, $pg_ids, $selection_members) { $is_property = array(); foreach ($properties as $p => $value) { //obtener miembros de la dimension asociada que tienen como propiedad los miembros seleccionados de esta dimension foreach ($value as $v) { $associations = DimensionMemberAssociations::getAllAssociations($v, $p); if (!is_null($associations)) { foreach ($associations as $association) { $is_property[$v] = true; $v_ids_csv = is_array($dimensions[$v]['allowed_members']) && count($dimensions[$v]['allowed_members']) > 0 ? implode(",", $dimensions[$v]['allowed_members']) : '0'; $p_ids_csv = is_array($dimensions[$p]['allowed_members']) && count($dimensions[$p]['allowed_members']) > 0 ? implode(",", $dimensions[$p]['allowed_members']) : '0'; $prop_members = MemberPropertyMembers::getAssociatedMembers($association->getId(), $v_ids_csv, $p_ids_csv); if (count($prop_members) > 0) { $property_members[] = $prop_members; } } } } } // intersect the allowed members for each property $member_intersection = array_var($property_members, 0, array()); if (count($property_members) > 1) { $k = 1; while ($k < count($property_members)) { $member_intersection = array_intersect($member_intersection, $property_members[$k++]); } } $association_conditions = ""; foreach ($redefined_context as $key => $value) { $dimension = Dimensions::getDimensionById($value); if (!isset($is_property[$value])) { $member_ids = $dimensions[$value]['allowed_members']; } else { $member_ids = $member_intersection; } $association_conditions .= self::prepareQuery($association_conditions, $dimension, $member_ids, $object_type_id, $pg_ids, 'AND', $selection_members); } $dims = Dimensions::findAll(); foreach ($dims as $dim) { if (!in_array($dim->getId(), $redefined_context) && !isset($properties[$dim->getId()]) && $dim->canContainObjects()) { $member_ids = array(); $all_members = $dim->getAllMembers(); foreach ($all_members as $member) { $member_ids[] = $member->getId(); } $association_conditions .= self::prepareQuery($association_conditions, $dim, $member_ids, $object_type_id, $pg_ids, 'OR', $selection_members, true); } } return $association_conditions; }