/**
  * Creates delivery list filter SQL to load current state delivery list
  *
  * @param oxuser $oUser      session user object
  * @param string $sCountryId user country id
  * @param string $sDelSet    user chosen delivery set
  *
  * @return string
  */
 protected function _getFilterSelect($oUser, $sCountryId, $sDelSet)
 {
     $oDb = oxDb::getDb();
     $sTable = getViewName('oxdelivery');
     $sQ = "select {$sTable}.* from ( select {$sTable}.* from {$sTable} left join oxdel2delset on oxdel2delset.oxdelid={$sTable}.oxid ";
     $sQ .= "where " . $this->getBaseObject()->getSqlActiveSnippet() . " and oxdel2delset.oxdelsetid = " . $oDb->quote($sDelSet) . " ";
     // defining initial filter parameters
     $sUserId = null;
     $aGroupIds = null;
     // checking for current session user which gives additional restrictions for user itself, users group and country
     if ($oUser) {
         // user ID
         $sUserId = $oUser->getId();
         // user groups ( maybe would be better to fetch by function oxuser::getUserGroups() ? )
         $aGroupIds = $oUser->getUserGroups();
     }
     $aIds = array();
     if (count($aGroupIds)) {
         foreach ($aGroupIds as $oGroup) {
             $aIds[] = $oGroup->getId();
         }
     }
     $sUserTable = getViewName('oxuser');
     $sGroupTable = getViewName('oxgroups');
     $sCountryTable = getViewName('oxcountry');
     $sCountrySql = $sCountryId ? "EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxcountry' and oxobject2delivery.OXOBJECTID=" . $oDb->quote($sCountryId) . ")" : '0';
     $sUserSql = $sUserId ? "EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxuser' and oxobject2delivery.OXOBJECTID=" . $oDb->quote($sUserId) . ")" : '0';
     $sGroupSql = count($aIds) ? "EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxgroups' and oxobject2delivery.OXOBJECTID in (" . implode(', ', oxDb::getInstance()->quoteArray($aIds)) . ") )" : '0';
     $sQ .= ") as {$sTable} where (\n            select\n                if(EXISTS(select 1 from oxobject2delivery, {$sCountryTable} where {$sCountryTable}.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxcountry' LIMIT 1),\n                    {$sCountrySql},\n                    1) &&\n                if(EXISTS(select 1 from oxobject2delivery, {$sUserTable} where {$sUserTable}.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxuser' LIMIT 1),\n                    {$sUserSql},\n                    1) &&\n                if(EXISTS(select 1 from oxobject2delivery, {$sGroupTable} where {$sGroupTable}.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid={$sTable}.OXID and oxobject2delivery.oxtype='oxgroups' LIMIT 1),\n                    {$sGroupSql},\n                    1)\n            )";
     $sQ .= " order by {$sTable}.oxsort ";
     return $sQ;
 }