public static function getDeepestCommonParent($nodeInfo = array(), $parameters = array()) { Assert::expectNotEmptyArray($nodeInfo, 'nodeInfo'); $filter = array(); $msg = Loc::getMessage('SALE_LOCATION_TREE_ENTITY_BAD_ARGUMENT_NODEINFO_MISFORMED_EXCEPTION'); $min = false; $max = false; foreach ($nodeInfo as $node) { //$node['ID'] = Assert::expectIntegerPositive($node['ID'], false, $msg); $node['LEFT_MARGIN'] = Assert::expectIntegerPositive($node['LEFT_MARGIN'], false, $msg); $node['RIGHT_MARGIN'] = Assert::expectIntegerPositive($node['RIGHT_MARGIN'], false, $msg); if ($min === false || $node['LEFT_MARGIN'] < $min) { $min = $node['LEFT_MARGIN']; } if ($max === false || $node['RIGHT_MARGIN'] > $max) { $max = $node['RIGHT_MARGIN']; } } if (empty($parameters)) { $parameters = array(); } if (!is_array($parameters['order'])) { $parameters['order'] = array(); } $parameters['filter']['<LEFT_MARGIN'] = $min; $parameters['filter']['>RIGHT_MARGIN'] = $max; $parameters['order'] = array_merge(array('LEFT_MARGIN' => 'desc', 'RIGHT_MARGIN' => 'asc'), $parameters['order']); $parameters['limit'] = 1; return static::getList($parameters); }
/** * Functions for massive check for link type * * */ public static function getLinkStatusForMultipleNodes($nodeInfo = array(), $entityPrimary, $connectors = false) { $nodeInfo = Assert::expectNotEmptyArray($nodeInfo, '$nodeInfo'); $entityPrimary = Assert::expectStringNotNull($entityPrimary, '$entityPrimary'); $result = array(); if (!static::checkLinkUsageAny($entityPrimary)) { foreach ($nodeInfo as $node) { $result[$node['ID']] = self::LSTAT_BELOW_CONNECTOR; } return $result; } if (!is_array($connectors)) { $connectors = static::getConnectedLocationsInfo($entityPrimary); } foreach ($nodeInfo as $node) { $node = Assert::expectNotEmptyArray($node, '$nodeInfo[]'); $node['ID'] = Assert::expectIntegerPositive($node['ID'], '$nodeInfo[][ID]'); $node['LEFT_MARGIN'] = Assert::expectIntegerPositive($node['LEFT_MARGIN'], '$nodeInfo[][LEFT_MARGIN]'); $node['RIGHT_MARGIN'] = Assert::expectIntegerPositive($node['RIGHT_MARGIN'], '$nodeInfo[][RIGHT_MARGIN]'); $result[$node['ID']] = false; foreach ($connectors as $connector) { if ($connector['ID'] == $node['ID']) { $result[$node['ID']] = self::LSTAT_IS_CONNECTOR; break; } elseif ($node['LEFT_MARGIN'] >= $connector['LEFT_MARGIN'] && $node['RIGHT_MARGIN'] <= $connector['RIGHT_MARGIN']) { $result[$node['ID']] = self::LSTAT_BELOW_CONNECTOR; break; } elseif ($node['LEFT_MARGIN'] <= $connector['LEFT_MARGIN'] && $node['RIGHT_MARGIN'] >= $connector['RIGHT_MARGIN']) { $result[$node['ID']] = self::LSTAT_ABOVE_CONNECTOR; break; } } if (!$result[$node['ID']]) { $result[$node['ID']] = self::LSTAT_IN_NOT_CONNECTED_BRANCH; } } return $result; }