File "apache.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/redirection/fileio/apache.php
File size: 5.19 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

class Red_Apache_File extends Red_FileIO
{
    public function force_download()
    {
        parent::force_download();
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . $this->export_filename('htaccess') . '"');
    }
    public function get_data(array $items, array $groups)
    {
        include_once dirname(dirname(__FILE__)) . '/models/htaccess.php';
        $htaccess = new Red_Htaccess();
        foreach ($items as $item) {
            $htaccess->add($item);
        }
        return $htaccess->get() . PHP_EOL;
    }
    public function load($group, $filename, $data)
    {
        $data = str_replace("\n", "\r", $data);
        $lines = array_filter(explode("\r", $data));
        $count = 0;
        foreach ((array) $lines as $line) {
            $item = $this->get_as_item($line);
            if ($item) {
                $item['group_id'] = $group;
                $redirect = Red_Item::create($item);
                if (!is_wp_error($redirect)) {
                    $count++;
                }
            }
        }
        return $count;
    }
    public function get_as_item($line)
    {
        $item = false;
        if (preg_match('@rewriterule\\s+(.*?)\\s+(.*?)\\s+(\\[.*\\])*@i', $line, $matches) > 0) {
            $item = array('url' => $this->regex_url($matches[1]), 'match_type' => 'url', 'action_type' => 'url', 'action_data' => array('url' => $this->decode_url($matches[2])), 'action_code' => $this->get_code($matches[3]), 'regex' => $this->is_regex($matches[1]));
        } elseif (preg_match('@Redirect\\s+(.*?)\\s+"(.*?)"\\s+(.*)@i', $line, $matches) > 0 || preg_match('@Redirect\\s+(.*?)\\s+(.*?)\\s+(.*)@i', $line, $matches) > 0) {
            $item = array('url' => $this->decode_url($matches[2]), 'match_type' => 'url', 'action_type' => 'url', 'action_data' => array('url' => $this->decode_url($matches[3])), 'action_code' => $this->get_code($matches[1]));
        } elseif (preg_match('@Redirect\\s+"(.*?)"\\s+(.*)@i', $line, $matches) > 0 || preg_match('@Redirect\\s+(.*?)\\s+(.*)@i', $line, $matches) > 0) {
            $item = array('url' => $this->decode_url($matches[1]), 'match_type' => 'url', 'action_type' => 'url', 'action_data' => array('url' => $this->decode_url($matches[2])), 'action_code' => 302);
        } elseif (preg_match('@Redirectmatch\\s+(.*?)\\s+(.*?)\\s+(.*)@i', $line, $matches) > 0) {
            $item = array('url' => $this->decode_url($matches[2]), 'match_type' => 'url', 'action_type' => 'url', 'action_data' => array('url' => $this->decode_url($matches[3])), 'action_code' => $this->get_code($matches[1]), 'regex' => true);
        } elseif (preg_match('@Redirectmatch\\s+(.*?)\\s+(.*)@i', $line, $matches) > 0) {
            $item = array('url' => $this->decode_url($matches[1]), 'match_type' => 'url', 'action_type' => 'url', 'action_data' => array('url' => $this->decode_url($matches[2])), 'action_code' => 302, 'regex' => true);
        }
        if ($item) {
            $item['action_type'] = 'url';
            $item['match_type'] = 'url';
            if ($item['action_code'] === 0) {
                $item['action_type'] = 'pass';
            }
            return $item;
        }
        return false;
    }
    private function decode_url($url)
    {
        $url = rawurldecode($url);
        $url = preg_replace('@\\\\/@', '/', $url);
        $url = preg_replace('@\\\\.@', '\\\\.', $url);
        return $url;
    }
    private function is_str_regex($url)
    {
        $regex = '()[]$^?+.';
        $escape = false;
        $len = strlen($url);
        for ($x = 0; $x < $len; $x++) {
            $escape = false;
            $char = substr($url, $x, 1);
            if ($char === '\\') {
                $escape = true;
            } elseif (strpos($regex, $char) !== false && !$escape) {
                return true;
            }
        }
        return false;
    }
    private function is_regex($url)
    {
        if ($this->is_str_regex($url)) {
            $tmp = ltrim($url, '^');
            $tmp = rtrim($tmp, '$');
            if ($this->is_str_regex($tmp)) {
                return true;
            }
        }
        return false;
    }
    private function regex_url($url)
    {
        $url = $this->decode_url($url);
        if ($this->is_str_regex($url)) {
            $tmp = ltrim($url, '^');
            $tmp = rtrim($tmp, '$');
            if ($this->is_str_regex($tmp)) {
                return '^/' . ltrim($tmp, '/');
            }
            return '/' . ltrim($tmp, '/');
        }
        return $this->decode_url($url);
    }
    private function get_code($code)
    {
        if (strpos($code, '301') !== false || stripos($code, 'permanent') !== false) {
            return 301;
        }
        if (strpos($code, '302') !== false) {
            return 302;
        }
        if (strpos($code, '307') !== false || stripos($code, 'seeother') !== false) {
            return 307;
        }
        if (strpos($code, '404') !== false || stripos($code, 'forbidden') !== false || strpos($code, 'F') !== false) {
            return 404;
        }
        if (strpos($code, '410') !== false || stripos($code, 'gone') !== false || strpos($code, 'G') !== false) {
            return 410;
        }
        return 302;
    }
}