Craft\RetourController::actionImportHtaccess PHP Method

actionImportHtaccess() public method

public actionImportHtaccess ( array $variables = [] )
$variables array
    public function actionImportHtaccess(array $variables = array())
    {
        $file = \CUploadedFile::getInstanceByName('file');
        if (!is_null($file)) {
            $filename = $file->getTempName();
            $handle = @fopen($filename, "r");
            if ($handle) {
                $skippingRule = false;
                while (($line = fgets($handle)) !== false) {
                    $redirectType = "";
                    RetourPlugin::log("parsing line: " . $line, LogLevel::Info, false);
                    $line = ltrim($line);
                    $line = preg_replace('/\\s+/', ' ', $line);
                    $redirectParts = explode(" ", $line);
                    RetourPlugin::log("line parts: " . print_r($redirectParts, true), LogLevel::Info, false);
                    array_shift($redirectParts);
                    if (!empty($redirectParts[0]) && !empty($redirectParts[1]) && !empty($redirectParts[2])) {
                        if (strpos($line, 'RedirectMatch') === 0) {
                            $redirectType = "regexmatch";
                            $srcUrl = $redirectParts[1];
                            $destUrl = $redirectParts[2];
                            $redirectCode = $redirectParts[0];
                        } else {
                            if (strpos($line, 'Redirect') === 0) {
                                $redirectType = "exactmatch";
                                $srcUrl = $redirectParts[1];
                                $destUrl = $redirectParts[2];
                                $redirectCode = $redirectParts[0];
                            }
                        }
                    }
                    /* -- We should just ignore RewriteRule's completely 
                                        if (strpos($line, 'RewriteRule') === 0)
                                        {
                                            $srcUrl = $redirectParts[0];
                                            $destUrl = $redirectParts[1];
                                            $redirectCode = $redirectParts[2];
                                            $pos = strpos($redirectCode, 'R=');
                                            if ($pos !== false)
                                            {
                                                $redirectType = "regexmatch";
                                                $redirectCode = substr($redirectCode, $pos + 2, 3);
                                            }
                                        }
                    
                                        if (strpos($line, 'RewriteCond') === 0)
                                            $skippingRule = true;
                    
                                        if (strpos($line, 'RewriteEngine') === 0)
                                            $skippingRule = false;
                    */
                    if ($redirectType != "" && !$skippingRule) {
                        $record = new Retour_StaticRedirectsRecord();
                        $record->locale = craft()->language;
                        $record->redirectMatchType = $redirectType;
                        $record->redirectSrcUrl = $srcUrl;
                        if ($record->redirectMatchType == "exactmatch" && $record->redirectSrcUrl != "") {
                            $record->redirectSrcUrl = '/' . ltrim($record->redirectSrcUrl, '/');
                        }
                        $record->redirectSrcUrlParsed = $record->redirectSrcUrl;
                        $record->redirectDestUrl = $destUrl;
                        $record->redirectHttpCode = $redirectCode;
                        $record->hitLastTime = DateTimeHelper::currentUTCDateTime();
                        $record->associatedElementId = 0;
                        $result = craft()->retour->saveStaticRedirect($record);
                    }
                }
                if (!feof($handle)) {
                    craft()->userSession->setError(Craft::t('Error: unexpected fgets() fail.'));
                }
                fclose($handle);
            }
        } else {
            craft()->userSession->setError(Craft::t('Please upload a file.'));
        }
    }