コード例 #1
0
 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;
 }