Пример #1
0
 function Delete($arFilter)
 {
     global $APPLICATION;
     if (!array_key_exists("SITE_ID", $arFilter)) {
         $arFilter["SITE_ID"] = SITE_ID;
     }
     if (array_key_exists("QUERY", $arFilter) && $arFilter["QUERY"] === false) {
         $arFilter["QUERY"] = $APPLICATION->GetCurPage();
     }
     $docRoot = CSite::GetSiteDocRoot($arFilter["SITE_ID"]);
     if (!file_exists($docRoot . "/urlrewrite.php")) {
         return true;
     }
     $arUrlRewrite = array();
     if (file_exists($docRoot . "/urlrewrite.php")) {
         include $docRoot . "/urlrewrite.php";
     }
     if (!is_array(self::$arRules[$docRoot])) {
         self::$arRules[$docRoot] = array();
     }
     foreach ($arUrlRewrite as $arRule) {
         self::$arRules[$docRoot][self::GetKey($arRule)] = $arRule;
     }
     $bFilterQuery = array_key_exists("QUERY", $arFilter);
     $bFilterCondition = array_key_exists("CONDITION", $arFilter);
     $bFilterID = array_key_exists("ID", $arFilter);
     $bFilterPath = array_key_exists("PATH", $arFilter);
     $bFound = false;
     foreach (self::$arRules[$docRoot] as $key => $arRule) {
         if ($bFilterQuery && !preg_match($arRule["CONDITION"], $arFilter["QUERY"])) {
             continue;
         }
         if ($bFilterCondition && $arRule["CONDITION"] != $arFilter["CONDITION"]) {
             continue;
         }
         if ($bFilterID && ($arFilter["ID"] != "NULL" && $arRule["ID"] != $arFilter["ID"] || $arFilter["ID"] == "NULL" && strlen($arRule["ID"]) <= 0)) {
             continue;
         }
         if ($bFilterPath && $arRule["PATH"] != $arFilter["PATH"]) {
             continue;
         }
         unset(self::$arRules[$docRoot][$key]);
         $bFound = true;
     }
     if ($bFound) {
         uasort(self::$arRules[$docRoot], array("CUrlRewriter", "__RecordsCompare"));
         if ($f = fopen($docRoot . "/urlrewrite.php", "w")) {
             fwrite($f, "<" . "?\n" . CUrlRewriter::printArray(self::$arRules[$docRoot]) . "\n?" . ">");
             fclose($f);
             bx_accelerator_reset();
             return true;
         } else {
             return false;
         }
     } else {
         return true;
     }
 }