/**
  * Returns an SQL part which makes sure that fetched nodes are (not) part of the given node path
  * and not the parent node
  *
  * @param string $outPathConditionStr
  * @param string $outNotEqParentStr
  * @param int $nodeID
  * @param bool $depth
  * @param string $depthOperator
  * @return bool
  */
 static function createPathConditionAndNotEqParentSQLStrings(&$outPathConditionStr, &$outNotEqParentStr, $nodeID, $depth = false, $depthOperator = 'le')
 {
     if (!$depthOperator) {
         $depthOperator = 'le';
     }
     // check if we are only fetching children
     // - depth (lower than or) eqaul to 1
     // - depth lower than 2 = depth equal to 1
     $onlyChildren = $depth === 1 && ($depthOperator === 'le' || $depthOperator === 'eq') || $depth === 2 && $depthOperator === 'lt';
     if (is_array($nodeID) && count($nodeID) == 1) {
         $nodeID = $nodeID[0];
     }
     if (is_array($nodeID)) {
         $outNotEqParentStr = '';
         // a parent_node_id condition suffits when only fetching children
         if ($onlyChildren) {
             $db = eZDB::instance();
             $outPathConditionStr = $db->generateSQLINStatement($nodeID, 'ezcontentobject_tree.parent_node_id', false, true, 'int') . ' and';
         } else {
             $nodeIDList = $nodeID;
             $sqlPartForOneNodeList = array();
             foreach ($nodeIDList as $nodeID) {
                 $node = eZContentObjectTreeNodeNoLanguage::fetch($nodeID, false, false);
                 if (!is_array($node)) {
                     return false;
                 }
                 $nodePath = $node['path_string'];
                 $nodeDepth = $node['depth'];
                 $depthCond = '';
                 if ($depth) {
                     $sqlDepthOperator = '<=';
                     if ($depthOperator) {
                         if ($depthOperator == 'lt') {
                             $sqlDepthOperator = '<';
                         } else {
                             if ($depthOperator == 'gt') {
                                 $sqlDepthOperator = '>';
                             } else {
                                 if ($depthOperator == 'le') {
                                     $sqlDepthOperator = '<=';
                                 } else {
                                     if ($depthOperator == 'ge') {
                                         $sqlDepthOperator = '>=';
                                     } else {
                                         if ($depthOperator == 'eq') {
                                             $sqlDepthOperator = '=';
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     $nodeDepth += $depth;
                     $depthCond = ' and ezcontentobject_tree.depth ' . $sqlDepthOperator . ' ' . $nodeDepth . ' ';
                 }
                 $requireNotEqParentStr = !$depth || $depthOperator == 'le' || $depthOperator == 'lt';
                 $notEqParentStr = $requireNotEqParentStr ? " and ezcontentobject_tree.node_id != {$nodeID} " : '';
                 $sqlPartForOneNodeList[] = " ( ezcontentobject_tree.path_string like '{$nodePath}%'   {$depthCond} {$notEqParentStr} ) ";
             }
             $outPathConditionStr = implode(' or ', $sqlPartForOneNodeList);
             $outPathConditionStr = ' (' . $outPathConditionStr . ') and';
         }
     } else {
         if ($nodeID == 0) {
             return false;
         }
         // a parent_node_id condition suffits when only fetching children
         if ($onlyChildren) {
             $outNotEqParentStr = '';
             $outPathConditionStr = 'ezcontentobject_tree.parent_node_id = ' . (int) $nodeID . ' and';
         } else {
             $node = eZContentObjectTreeNodeNoLanguage::fetch($nodeID, false, false);
             if (!is_array($node)) {
                 return false;
             }
             $nodePath = $node['path_string'];
             $nodeDepth = $node['depth'];
             $outNotEqParentStr = eZContentObjectTreeNodeNoLanguage::createNotEqParentSQLString($nodeID, $depth, $depthOperator);
             $outPathConditionStr = eZContentObjectTreeNodeNoLanguage::createPathConditionSQLString($nodePath, $nodeDepth, $depth, $depthOperator);
         }
     }
     return true;
 }