From 0297666a7a0e961d3d8eeea56b3f067e35e4cdd9 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Mon, 14 Jan 2013 12:55:01 -0500
Subject: [PATCH] - nginx_merge_locations function now supports locations that are in one line (like "location /webftp/conf/ { deny all; }").

---
 server/plugins-available/nginx_plugin.inc.php |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 5074ffa..4234f94 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2313,8 +2313,35 @@
 
 		$lines = explode("\n", $vhost_conf);
 		
+		// if whole location block is in one line, split it up into multiple lines
 		if(is_array($lines) && !empty($lines)){
+			$linecount = sizeof($lines);
+			for($h=0;$h<$linecount;$h++){
+				$lines[$h] = rtrim($lines[$h]);
+				if(substr(ltrim($lines[$h]), 0, 8) == 'location' && strpos($lines[$h], '{') !== false && strpos($lines[$h], ';') !== false){
+					$lines[$h] = str_replace("{", "{\n", $lines[$h]);
+					$lines[$h] = str_replace(";", ";\n", $lines[$h]);
+					if(strpos($lines[$h], '##merge##') !== false){
+						$lines[$h] = str_replace('##merge##', '', $lines[$h]);
+						$lines[$h] = substr($lines[$h],0,strpos($lines[$h], '{')).' ##merge##'.substr($lines[$h],strpos($lines[$h], '{')+1);
+					}
+				}
+				if(substr(ltrim($lines[$h]), 0, 8) == 'location' && strpos($lines[$h], '{') !== false && strpos($lines[$h], '}') !== false && strpos($lines[$h], ';') === false){
+					$lines[$h] = str_replace("{", "{\n", $lines[$h]);
+					if(strpos($lines[$h], '##merge##') !== false){
+						$lines[$h] = str_replace('##merge##', '', $lines[$h]);
+						$lines[$h] = substr($lines[$h],0,strpos($lines[$h], '{')).' ##merge##'.substr($lines[$h],strpos($lines[$h], '{')+1);
+					}
+				}
+			}
+		}
+		$vhost_conf = implode("\n", $lines);
+		unset($lines);
+		unset($linecount);
 		
+		$lines = explode("\n", $vhost_conf);
+			
+		if(is_array($lines) && !empty($lines)){	
 			$locations = array();
 			$islocation = false;
 			$linecount = sizeof($lines);
@@ -2383,7 +2410,7 @@
 			$vhost_conf = implode("\n", $lines);
 		}
 		
-		return $vhost_conf;
+		return trim($vhost_conf);
 	}
 	
 	function client_delete($event_name,$data) {

--
Gitblit v1.9.1