Completed
Branch master (75b7df)
by Christopher
13:16
created
code/SiteTreeWhitelistExtension.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -1,14 +1,14 @@
 block discarded – undo
1 1
 <?php
2 2
 class SiteTreeWhitelistExtension extends DataExtension {
3 3
 
4
-	public function onAfterWrite(){
4
+	public function onAfterWrite() {
5 5
 		//top level page change should trigger re-generation of whitelist
6 6
 		if ($this->owner->getParentType() === 'root') {
7 7
 			WhitelistGenerator::generateWhitelist();
8 8
 		}
9 9
 	}
10 10
 	
11
-	public function onAfterDelete(){
11
+	public function onAfterDelete() {
12 12
 		if ($this->owner->getParentType() === 'root') {
13 13
 			WhitelistGenerator::generateWhitelist();
14 14
 		}
Please login to merge, or discard this patch.
code/WhitelistGenerator.php 1 patch
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -1,20 +1,20 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 class WhitelistGenerator extends Object implements Flushable {
3 3
 
4
-	public static function generateWhitelist(){
4
+	public static function generateWhitelist() {
5 5
 		$whitelist = self::generateWhitelistRules();
6 6
 		self::syncCacheFilesystem($whitelist);
7 7
 	}
8 8
 
9
-	public static function generateWhitelistRules(){
9
+	public static function generateWhitelistRules() {
10 10
 		//get all URL rules
11 11
 		$rules = Config::inst()->get('Director', 'rules');
12 12
 
13 13
 		$allTopLevelRules = array();
14 14
 		foreach ($rules as $pattern => $controllerOptions) {
15 15
 			//match first portion of the URL, either delimited by slash or colon or end-of-line
16
-			if (preg_match('/^(.*?)(\/|:|$)/', $pattern, $matches)){
17
-				if (!empty($matches[1])){
16
+			if (preg_match('/^(.*?)(\/|:|$)/', $pattern, $matches)) {
17
+				if (!empty($matches[1])) {
18 18
 					array_push($allTopLevelRules, $matches[1]);
19 19
 				}
20 20
 			}
@@ -27,18 +27,18 @@  discard block
 block discarded – undo
27 27
 			$filteredRules = array_merge($filteredRules, $addToWhitelist);
28 28
 		}
29 29
 		
30
-		foreach($allTopLevelRules as $rule) {
30
+		foreach ($allTopLevelRules as $rule) {
31 31
 			if (strpos($rule, '$') !== false) {
32 32
 				if ($rule === '$Controller') {
33 33
 					//special case for Controllers, add all possible controllers
34 34
 					$subControllers = ClassInfo::subclassesFor(new Controller());
35 35
 
36
-					foreach ($subControllers as $controller){
37
-						array_push($filteredRules, $controller);    //add the controller name as a link
36
+					foreach ($subControllers as $controller) {
37
+						array_push($filteredRules, $controller); //add the controller name as a link
38 38
 					}
39 39
 
40 40
 				} elseif ($rule === '$URLSegment') {
41
-					$topLevelPagesArray = array();  //temporary array to store top-level pages
41
+					$topLevelPagesArray = array(); //temporary array to store top-level pages
42 42
 
43 43
 					//special case for SiteTree, add all possible top Level Pages
44 44
 					$topLevelPages = SiteTree::get()->filter('ParentID', 0);
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 
56 56
 					$filteredRules = array_merge($filteredRules, $topLevelPagesArray, $oldTopLevelPagesArray);
57 57
 				} else {
58
-					user_error('Unknown wildcard URL match found: '.$rule, E_WARNING);
58
+					user_error('Unknown wildcard URL match found: ' . $rule, E_WARNING);
59 59
 				}
60 60
 			} else {
61 61
 				//add the rule to a new list of rules
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
 
91 91
 		//create list of files to create
92 92
 		$toCreate = array();
93
-		foreach ($whitelist as $listItem){
93
+		foreach ($whitelist as $listItem) {
94 94
 			if (!in_array($listItem, $whitelistFolderContents)) {
95 95
 				if (!empty($listItem)) {    //don't include empty files, such as the file for /
96 96
 					array_push($toCreate, $listItem);
@@ -100,8 +100,8 @@  discard block
 block discarded – undo
100 100
 
101 101
 		//create list of files to delete
102 102
 		$toDelete = array();
103
-		foreach ($whitelistFolderContents as $file){
104
-			if (!in_array($file, array('','..','.','.htaccess'))) {    //exclude things that should stay in the folder
103
+		foreach ($whitelistFolderContents as $file) {
104
+			if (!in_array($file, array('', '..', '.', '.htaccess'))) {    //exclude things that should stay in the folder
105 105
 				if (!in_array($file, $whitelist)) {
106 106
 					array_push($toDelete, $file);
107 107
 				}
@@ -127,11 +127,11 @@  discard block
 block discarded – undo
127 127
 	 * @param $currentTopLevelPages
128 128
 	 * @return array URLs of past top-level pages
129 129
 	 */
130
-	protected static function find_old_top_level_pages($currentTopLevelPages){
130
+	protected static function find_old_top_level_pages($currentTopLevelPages) {
131 131
 		$oldPageURLs = array();
132 132
 
133 133
 		$queryClass = 'SQLSelect';
134
-		if (!class_exists($queryClass) && class_exists('SQLQuery')){
134
+		if (!class_exists($queryClass) && class_exists('SQLQuery')) {
135 135
 			$queryClass = 'SQLQuery';
136 136
 		}
137 137
 		
@@ -141,13 +141,13 @@  discard block
 block discarded – undo
141 141
 			array(
142 142
 				'ParentID = 0',
143 143
 				'WasPublished = 1',
144
-				'URLSegment NOT IN (\''.implode("','",array_filter($currentTopLevelPages)).'\')'
144
+				'URLSegment NOT IN (\'' . implode("','", array_filter($currentTopLevelPages)) . '\')'
145 145
 			)
146 146
 		);
147 147
 
148 148
 		$records = $query->execute();
149 149
 		if ($records) {
150
-			foreach($records as $record) {
150
+			foreach ($records as $record) {
151 151
 				array_push($oldPageURLs, $record['URLSegment']);
152 152
 			}
153 153
 		}
@@ -155,25 +155,25 @@  discard block
 block discarded – undo
155 155
 		return $oldPageURLs;
156 156
 	}
157 157
 
158
-    public static function ensureWhitelistFolderExists(){
158
+    public static function ensureWhitelistFolderExists() {
159 159
 		$dir = BASE_PATH . DIRECTORY_SEPARATOR . Config::inst()->get('WhitelistGenerator', 'dir');
160 160
 		if (!file_exists($dir)) {
161 161
 			mkdir($dir); //create a new whitelist dir
162
-			chmod($dir,0777);    //make sure it is readable by the web-server user
162
+			chmod($dir, 0777); //make sure it is readable by the web-server user
163 163
 			//create a htaccess file to ensure that the whitelist cache directory is not web-accessible
164
-			file_put_contents($dir.DIRECTORY_SEPARATOR.'.htaccess', "Deny from all\n");
164
+			file_put_contents($dir . DIRECTORY_SEPARATOR . '.htaccess', "Deny from all\n");
165 165
 		}
166 166
 	}
167 167
 
168
-	public static function clearWhitelist(){
168
+	public static function clearWhitelist() {
169 169
 		$dir = BASE_PATH . DIRECTORY_SEPARATOR . Config::inst()->get('WhitelistGenerator', 'dir');
170 170
 		if (file_exists($dir)) {
171
-			array_map('unlink', glob($dir."/*"));
171
+			array_map('unlink', glob($dir . "/*"));
172 172
 		}
173 173
 	}
174 174
 
175 175
 	public static function flush() {
176
-		self::ensureWhitelistFolderExists();    //only create folder on flush, not on sitetree changes
176
+		self::ensureWhitelistFolderExists(); //only create folder on flush, not on sitetree changes
177 177
 		self::generateWhitelist();
178 178
 	}
179 179
 }
Please login to merge, or discard this patch.
tests/WhitelistGeneratorTest.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
         parent::setUp();
9 9
     }
10 10
 
11
-	public function testGenerateWhitelist(){
11
+	public function testGenerateWhitelist() {
12 12
 		$whitelist = WhitelistGenerator::generateWhitelistRules();
13 13
 
14 14
 		$top1 = $this->objFromFixture('SiteTree', 'top1');
@@ -107,13 +107,13 @@  discard block
 block discarded – undo
107 107
 
108 108
 	function testSiteTreeVersionsIncludedInWhitelist() {
109 109
 		$top1 = $this->objFromFixture('SiteTree', 'top1');
110
-		$top1->publish('Stage', 'Live');    //publish the page so it has been live and needs redirecting to
110
+		$top1->publish('Stage', 'Live'); //publish the page so it has been live and needs redirecting to
111 111
 
112 112
 		$newSegment = 'new-url-segment';
113 113
 		$oldSegment = $top1->URLSegment;
114 114
 		$top1->URLSegment = $newSegment;
115 115
 		$top1->write();
116
-		$top1->publish('Stage', 'Live');    //publish again with a new URL
116
+		$top1->publish('Stage', 'Live'); //publish again with a new URL
117 117
 
118 118
 
119 119
 		$whitelist = WhitelistGenerator::generateWhitelistRules();
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 		
148 148
 		$whitelist = WhitelistGenerator::generateWhitelistRules();
149 149
 
150
-		foreach($addToList as $add) {
150
+		foreach ($addToList as $add) {
151 151
 			$this->assertContains($add, $whitelist);
152 152
 		}
153 153
 	}
@@ -161,7 +161,7 @@  discard block
 block discarded – undo
161 161
 
162 162
 		$whitelist = WhitelistGenerator::generateWhitelistRules();
163 163
 
164
-		foreach($removeFromList as $remove) {
164
+		foreach ($removeFromList as $remove) {
165 165
 			$this->assertNotContains($remove, $whitelist);
166 166
 		}
167 167
 	}
Please login to merge, or discard this patch.