Index: core/kernel/db/cat_event_handler.php =================================================================== --- core/kernel/db/cat_event_handler.php +++ core/kernel/db/cat_event_handler.php @@ -505,32 +505,33 @@ /* @var $p_item kCatDBItem */ $p_item->Load( (int)$id ); + $related_ids = array(); - $p_resource_id = $p_item->GetDBField('ResourceId'); + if ( $p_item->isLoaded() ) { + $p_resource_id = (int)$p_item->GetDBField('ResourceId'); + $sql = 'SELECT SourceId, TargetId FROM ' . $rel_table . ' + WHERE + (Enabled = 1) + AND ( + (Type = 0 AND SourceId = ' . $p_resource_id . ' AND TargetType = ' . $item_type . ') + OR + (Type = 1 + AND ( + (SourceId = ' . $p_resource_id . ' AND TargetType = ' . $item_type . ') + OR + (TargetId = ' . $p_resource_id . ' AND SourceType = ' . $item_type . ') + ) + ) + )'; - $sql = 'SELECT SourceId, TargetId FROM '.$rel_table.' - WHERE - (Enabled = 1) - AND ( - (Type = 0 AND SourceId = '.$p_resource_id.' AND TargetType = '.$item_type.') - OR - (Type = 1 - AND ( - (SourceId = '.$p_resource_id.' AND TargetType = '.$item_type.') - OR - (TargetId = '.$p_resource_id.' AND SourceType = '.$item_type.') - ) - ) - )'; + $related_ids_array = $this->Conn->Query($sql); - $related_ids_array = $this->Conn->Query($sql); - $related_ids = Array(); - - foreach ($related_ids_array as $record) { - $related_ids[] = $record[ $record['SourceId'] == $p_resource_id ? 'TargetId' : 'SourceId' ]; + foreach ( $related_ids_array as $record ) { + $related_ids[] = $record[$record['SourceId'] == $p_resource_id ? 'TargetId' : 'SourceId']; + } } - if (count($related_ids) > 0) { + if ( $related_ids ) { $type_clauses['related']['include'] = '%1$s.ResourceId IN ('.implode(',', $related_ids).') AND PrimaryCat = 1'; $type_clauses['related']['except'] = '%1$s.ResourceId NOT IN ('.implode(',', $related_ids).') AND PrimaryCat = 1'; } @@ -538,6 +539,7 @@ $type_clauses['related']['include'] = '0'; $type_clauses['related']['except'] = '1'; } + $type_clauses['related']['having_filter'] = false; } Index: core/units/categories/categories_event_handler.php =================================================================== --- core/units/categories/categories_event_handler.php +++ core/units/categories/categories_event_handler.php @@ -399,32 +399,34 @@ /* @var $p_item kCatDBItem */ $p_item->Load( (int)$id ); + $related_ids = array(); - $p_resource_id = $p_item->GetDBField('ResourceId'); + if ( $p_item->isLoaded() ) { + $p_resource_id = (int)$p_item->GetDBField('ResourceId'); - $sql = 'SELECT SourceId, TargetId FROM '.$rel_table.' - WHERE - (Enabled = 1) - AND ( - (Type = 0 AND SourceId = '.$p_resource_id.' AND TargetType = '.$item_type.') + $sql = 'SELECT SourceId, TargetId FROM ' . $rel_table . ' + WHERE + (Enabled = 1) + AND ( + (Type = 0 AND SourceId = ' . $p_resource_id . ' AND TargetType = ' . $item_type . ') OR (Type = 1 AND ( - (SourceId = '.$p_resource_id.' AND TargetType = '.$item_type.') + (SourceId = ' . $p_resource_id . ' AND TargetType = ' . $item_type . ') OR - (TargetId = '.$p_resource_id.' AND SourceType = '.$item_type.') + (TargetId = ' . $p_resource_id . ' AND SourceType = ' . $item_type . ') ) ) - )'; + )'; - $related_ids_array = $this->Conn->Query($sql); - $related_ids = Array(); + $related_ids_array = $this->Conn->Query($sql); - foreach ($related_ids_array as $key => $record) { - $related_ids[] = $record[ $record['SourceId'] == $p_resource_id ? 'TargetId' : 'SourceId' ]; + foreach ( $related_ids_array as $key => $record ) { + $related_ids[] = $record[$record['SourceId'] == $p_resource_id ? 'TargetId' : 'SourceId']; + } } - if (count($related_ids) > 0) { + if ( $related_ids ) { $type_clauses['related']['include'] = '%1$s.ResourceId IN ('.implode(',', $related_ids).')'; $type_clauses['related']['except'] = '%1$s.ResourceId NOT IN ('.implode(',', $related_ids).')'; }