Completed
Branch master (8e78bf)
by Gordon
11:01
created
code/SecureFileController.php 3 patches
Indentation   +228 added lines, -228 removed lines patch added patch discarded remove patch
@@ -9,238 +9,238 @@
 block discarded – undo
9 9
  */
10 10
 class SecureFileController extends Controller implements PermissionProvider {
11 11
 	
12
-	/**
13
-	 * @var array Disallow all public actions on this controller
14
-	 */
15
-	public static $allowed_actions = array();
16
-	
17
-	/**
18
-	 * @var string htaccess file as set by apache config
19
-	 */
20
-	protected static $htaccess_file = ".htaccess";
21
-	
22
-	/**
23
-	 * @var integer Size of output chunks in kb while in PHP fread mode.
24
-	 */
25
-	protected static $chunck_size_kb = 32;
26
-	
27
-	/**
28
-	 * @var boolean Flag use X-Sendfile header mode instead of PHP fread mode.
29
-	 */
30
-	protected static $use_x_sendfile = false;
31
-	
32
-	/**
33
-	 * @var boolean Flag use SilverStripe send file method.
34
-	 */
35
-	protected static $use_ss_sendfile = false;
36
-	
37
-	/**
38
-	 * @var array i18n data for not authorized message as passed to _t
39
-	 */
40
-	protected static $i18n_not_authorized = array('SecureFiles.NOTAUTHORIZED', 'Not Authorized');
41
-	
42
-	/**
43
-	 * @var array i18n data for not found message as passed to _t
44
-	 */
45
-	protected static $i18n_not_found = array('SecureFiles.NOTFOUND', 'Not Found');
46
-	
47
-	/**
48
-	 * Use X-Sendfile headers to send files to the browser.
49
-	 * This is quicker than pushing files through PHP but
50
-	 * requires either Lighttpd or mod_xsendfile for Apache
51
-	 * @link http://tn123.ath.cx/mod_xsendfile/ 
52
-	 */
53
-	static function use_x_sendfile_method() {
54
-		self::use_default_sendfile_method();
55
-		self::$use_x_sendfile = true;
56
-	}
57
-	
58
-	/**
59
-	 * Use internal SilverStripe to send files to the browser.
60
-	 * This is the least efficient method but is useful for 
61
-	 * testing. Not recommend for production
62
-	 * environments.
63
-	 */
64
-	static function use_ss_sendfile_method() {
65
-		self::use_default_sendfile_method();
66
-		self::$use_ss_sendfile = true;
67
-	}
68
-	
69
-	/**
70
-	 * Use the default chuncked file method to send files to the browser.
71
-	 * This is the default method.
72
-	 */
73
-	static function use_default_sendfile_method() {
74
-		self::$use_ss_sendfile = false;
75
-		self::$use_x_sendfile = false;
76
-	}
77
-	
78
-	/**
79
-	 * Set the size of upload chunk in bytes.
80
-	 * @param int $kilobytes
81
-	 */
82
-	static function set_chunk_size($kilobytes) {
83
-		$kilobytes = max(0, (int)$kilobytes);
84
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
85
-		self::$chunck_size_kb = $kilobytes;
86
-	}
87
-	
88
-	/**
89
-	 * Set the Apache access file name (.htaccess by default)
90
-	 * as determined by the AccessFileName Apache directive.
91
-	 * @param string $filename
92
-	 */
93
-	static function set_access_filename($filename) {
94
-		self::$htaccess_file = $filename;
95
-	}
96
-	
97
-	/**
98
-	 * Get the Apache access file name
99
-	 * @return string
100
-	 */
101
-	static function get_access_filename() {
102
-		return self::$htaccess_file;
103
-	}
104
-	
105
-	/**
106
-	 * Set a 'not authorized' message to replace the standard string
107
-	 * @param $message HTML body of 401 Not Authorized response
108
-	 * @param $i18n Reference to i18n path
109
-	 */
110
-	static function set_not_authorized_text($message = "Not Authorized", $i18n = "SecureFiles.NOTAUTHORIZED") {
111
-		self::$i18n_not_authorized = array($i18n, $message);
112
-	}
113
-	
114
-	/**
115
-	 * Set a 'not found' message to replace the standard string
116
-	 * @param $message HTML body of 404 Not Found response
117
-	 * @param $i18n Reference to i18n path
118
-	 */
119
-	static function set_not_found_text($message = "Not Found", $i18n = "SecureFiles.NOTFOUND") {
120
-		self::$i18n_not_found = array($i18n, $message);
121
-	}
122
-	
123
-	/**
124
-	 * Process incoming requests passed to this controller
125
-	 * 
126
-	 * @return HTTPResponse
127
-	 */
128
-	function handleAction() {
129
-		$url = array_key_exists('url', $_GET) ? $_GET['url'] : $_SERVER['REQUEST_URI'];
130
-		$file_path = Director::makeRelative($url);
131
-		$file = File::find($file_path);
12
+    /**
13
+     * @var array Disallow all public actions on this controller
14
+     */
15
+    public static $allowed_actions = array();
16
+	
17
+    /**
18
+     * @var string htaccess file as set by apache config
19
+     */
20
+    protected static $htaccess_file = ".htaccess";
21
+	
22
+    /**
23
+     * @var integer Size of output chunks in kb while in PHP fread mode.
24
+     */
25
+    protected static $chunck_size_kb = 32;
26
+	
27
+    /**
28
+     * @var boolean Flag use X-Sendfile header mode instead of PHP fread mode.
29
+     */
30
+    protected static $use_x_sendfile = false;
31
+	
32
+    /**
33
+     * @var boolean Flag use SilverStripe send file method.
34
+     */
35
+    protected static $use_ss_sendfile = false;
36
+	
37
+    /**
38
+     * @var array i18n data for not authorized message as passed to _t
39
+     */
40
+    protected static $i18n_not_authorized = array('SecureFiles.NOTAUTHORIZED', 'Not Authorized');
41
+	
42
+    /**
43
+     * @var array i18n data for not found message as passed to _t
44
+     */
45
+    protected static $i18n_not_found = array('SecureFiles.NOTFOUND', 'Not Found');
46
+	
47
+    /**
48
+     * Use X-Sendfile headers to send files to the browser.
49
+     * This is quicker than pushing files through PHP but
50
+     * requires either Lighttpd or mod_xsendfile for Apache
51
+     * @link http://tn123.ath.cx/mod_xsendfile/ 
52
+     */
53
+    static function use_x_sendfile_method() {
54
+        self::use_default_sendfile_method();
55
+        self::$use_x_sendfile = true;
56
+    }
57
+	
58
+    /**
59
+     * Use internal SilverStripe to send files to the browser.
60
+     * This is the least efficient method but is useful for 
61
+     * testing. Not recommend for production
62
+     * environments.
63
+     */
64
+    static function use_ss_sendfile_method() {
65
+        self::use_default_sendfile_method();
66
+        self::$use_ss_sendfile = true;
67
+    }
68
+	
69
+    /**
70
+     * Use the default chuncked file method to send files to the browser.
71
+     * This is the default method.
72
+     */
73
+    static function use_default_sendfile_method() {
74
+        self::$use_ss_sendfile = false;
75
+        self::$use_x_sendfile = false;
76
+    }
77
+	
78
+    /**
79
+     * Set the size of upload chunk in bytes.
80
+     * @param int $kilobytes
81
+     */
82
+    static function set_chunk_size($kilobytes) {
83
+        $kilobytes = max(0, (int)$kilobytes);
84
+        if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
85
+        self::$chunck_size_kb = $kilobytes;
86
+    }
87
+	
88
+    /**
89
+     * Set the Apache access file name (.htaccess by default)
90
+     * as determined by the AccessFileName Apache directive.
91
+     * @param string $filename
92
+     */
93
+    static function set_access_filename($filename) {
94
+        self::$htaccess_file = $filename;
95
+    }
96
+	
97
+    /**
98
+     * Get the Apache access file name
99
+     * @return string
100
+     */
101
+    static function get_access_filename() {
102
+        return self::$htaccess_file;
103
+    }
104
+	
105
+    /**
106
+     * Set a 'not authorized' message to replace the standard string
107
+     * @param $message HTML body of 401 Not Authorized response
108
+     * @param $i18n Reference to i18n path
109
+     */
110
+    static function set_not_authorized_text($message = "Not Authorized", $i18n = "SecureFiles.NOTAUTHORIZED") {
111
+        self::$i18n_not_authorized = array($i18n, $message);
112
+    }
113
+	
114
+    /**
115
+     * Set a 'not found' message to replace the standard string
116
+     * @param $message HTML body of 404 Not Found response
117
+     * @param $i18n Reference to i18n path
118
+     */
119
+    static function set_not_found_text($message = "Not Found", $i18n = "SecureFiles.NOTFOUND") {
120
+        self::$i18n_not_found = array($i18n, $message);
121
+    }
122
+	
123
+    /**
124
+     * Process incoming requests passed to this controller
125
+     * 
126
+     * @return HTTPResponse
127
+     */
128
+    function handleAction() {
129
+        $url = array_key_exists('url', $_GET) ? $_GET['url'] : $_SERVER['REQUEST_URI'];
130
+        $file_path = Director::makeRelative($url);
131
+        $file = File::find($file_path);
132 132
 		
133
-		if($file instanceof File) {
134
-			if ($file->canView()) {
135
-				$file->extend('onAccessGranted');
136
-				return $this->fileFound($file, $file_path);
137
-			} else {
138
-				$file->extend('onAccessDenied');
139
-				return $this->fileNotAuthorized(call_user_func_array('_t', self::$i18n_not_authorized));
140
-			}
141
-		} else {
142
-			return $this->fileNotFound(call_user_func_array('_t', self::$i18n_not_found));
143
-		}
144
-	}
145
-	
146
-	/**
147
-	 * File Not Found response
148
-	 * 
149
-	 * @param $body Optional message body
150
-	 * @return HTTPResponse
151
-	 */
152
-	function fileNotFound($body = "") {
153
-		if(ClassInfo::exists('SS_HTTPResponse')) {
154
-			return new SS_HTTPResponse($body, 404);
155
-		} else {
156
-			return new HTTPResponse($body, 404);
157
-		}
158
-	}
159
-	
160
-	/**
161
-	 * File not authorized response
162
-	 * 
163
-	 * @param $body Optional message body
164
-	 * @return HTTPResponse
165
-	 */
166
-	function fileNotAuthorized($body = "") {
167
-		Security::permissionFailure($this, $body);
168
-	}
169
-	
170
-	/**
171
-	 * File found response
172
-	 *
173
-	 * @param $file File to send
174
-	 * @param $alternate_path string If supplied, return the file from this path instead, for
175
-	 * example, resampled images.
176
-	 */
177
-	function fileFound(File $file, $alternate_path = null) {
133
+        if($file instanceof File) {
134
+            if ($file->canView()) {
135
+                $file->extend('onAccessGranted');
136
+                return $this->fileFound($file, $file_path);
137
+            } else {
138
+                $file->extend('onAccessDenied');
139
+                return $this->fileNotAuthorized(call_user_func_array('_t', self::$i18n_not_authorized));
140
+            }
141
+        } else {
142
+            return $this->fileNotFound(call_user_func_array('_t', self::$i18n_not_found));
143
+        }
144
+    }
145
+	
146
+    /**
147
+     * File Not Found response
148
+     * 
149
+     * @param $body Optional message body
150
+     * @return HTTPResponse
151
+     */
152
+    function fileNotFound($body = "") {
153
+        if(ClassInfo::exists('SS_HTTPResponse')) {
154
+            return new SS_HTTPResponse($body, 404);
155
+        } else {
156
+            return new HTTPResponse($body, 404);
157
+        }
158
+    }
159
+	
160
+    /**
161
+     * File not authorized response
162
+     * 
163
+     * @param $body Optional message body
164
+     * @return HTTPResponse
165
+     */
166
+    function fileNotAuthorized($body = "") {
167
+        Security::permissionFailure($this, $body);
168
+    }
169
+	
170
+    /**
171
+     * File found response
172
+     *
173
+     * @param $file File to send
174
+     * @param $alternate_path string If supplied, return the file from this path instead, for
175
+     * example, resampled images.
176
+     */
177
+    function fileFound(File $file, $alternate_path = null) {
178 178
 		
179
-		// File properties
180
-		$file_name = $file->Name;
181
-		$file_path = Director::getAbsFile($alternate_path ? $alternate_path : $file->FullPath);
182
-		$file_size = filesize($file_path);
179
+        // File properties
180
+        $file_name = $file->Name;
181
+        $file_path = Director::getAbsFile($alternate_path ? $alternate_path : $file->FullPath);
182
+        $file_size = filesize($file_path);
183 183
 		
184
-		// Testing mode - return an HTTPResponse
185
-		if(self::$use_ss_sendfile) {
186
-			if(ClassInfo::exists('SS_HTTPRequest')) {
187
-				return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
188
-			} else {
189
-				return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
190
-			}
191
-		}
184
+        // Testing mode - return an HTTPResponse
185
+        if(self::$use_ss_sendfile) {
186
+            if(ClassInfo::exists('SS_HTTPRequest')) {
187
+                return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
188
+            } else {
189
+                return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
190
+            }
191
+        }
192 192
 		
193
-		// Normal operation:
194
-		$mimeType = HTTP::getMimeType($file_name);
195
-		header("Content-Type: {$mimeType}; name=\"" . addslashes($file_name) . "\"");
196
-		header("Content-Disposition: attachment; filename=" . addslashes($file_name));
197
-		header("Cache-Control: max-age=1, private");
198
-		header("Content-Length: {$file_size}");
199
-		header("Pragma: ");
193
+        // Normal operation:
194
+        $mimeType = HTTP::getMimeType($file_name);
195
+        header("Content-Type: {$mimeType}; name=\"" . addslashes($file_name) . "\"");
196
+        header("Content-Disposition: attachment; filename=" . addslashes($file_name));
197
+        header("Cache-Control: max-age=1, private");
198
+        header("Content-Length: {$file_size}");
199
+        header("Pragma: ");
200 200
 		
201
-		if(self::$use_x_sendfile) {
202
-			session_write_close();
203
-			header('X-Sendfile: '.$file_path);
204
-			exit();
205
-		} elseif($filePointer = @fopen($file_path, 'rb')) {
206
-			session_write_close();
207
-			$this->flush();
208
-			// Push the file while not EOF and connection exists
209
-			while(!feof($filePointer) && !connection_aborted()) {
210
-				print(fread($filePointer, 1024 * self::$chunck_size_kb));
211
-				$this->flush();
212
-			}
213
-			fclose($filePointer);
214
-			exit();
215
-		} else {
216
-			// Edge case - either not found anymore or can't read
217
-			return $this->fileNotFound();
218
-		}
219
-	}
220
-	
221
-	/**
222
-	 * Flush the output buffer to the server (if possible).
223
-	 * @see http://nz.php.net/manual/en/function.flush.php#93531
224
-	 */
225
-	function flush() {
226
-		if(ob_get_length()) {
227
-			@ob_flush();
228
-			@flush();
229
-			@ob_end_flush();
230
-		}
231
-		@ob_start();
232
-	}
233
-	
234
-	/**
235
-	 * Permission provider for access to secure files
236
-	 * 
237
-	 * @return array
238
-	 */
239
-	function providePermissions() {
240
-		return array(
241
-			'SECURE_FILE_ACCESS' => _t('SecureFiles.SECUREFILEACCESS', 'Access to Secured Files'),
242
-			'SECURE_FILE_SETTINGS' => _t('SecureFiles.SECUREFILESETTINGS', 'Manage File Security Settings')
243
-		);
244
-	}
201
+        if(self::$use_x_sendfile) {
202
+            session_write_close();
203
+            header('X-Sendfile: '.$file_path);
204
+            exit();
205
+        } elseif($filePointer = @fopen($file_path, 'rb')) {
206
+            session_write_close();
207
+            $this->flush();
208
+            // Push the file while not EOF and connection exists
209
+            while(!feof($filePointer) && !connection_aborted()) {
210
+                print(fread($filePointer, 1024 * self::$chunck_size_kb));
211
+                $this->flush();
212
+            }
213
+            fclose($filePointer);
214
+            exit();
215
+        } else {
216
+            // Edge case - either not found anymore or can't read
217
+            return $this->fileNotFound();
218
+        }
219
+    }
220
+	
221
+    /**
222
+     * Flush the output buffer to the server (if possible).
223
+     * @see http://nz.php.net/manual/en/function.flush.php#93531
224
+     */
225
+    function flush() {
226
+        if(ob_get_length()) {
227
+            @ob_flush();
228
+            @flush();
229
+            @ob_end_flush();
230
+        }
231
+        @ob_start();
232
+    }
233
+	
234
+    /**
235
+     * Permission provider for access to secure files
236
+     * 
237
+     * @return array
238
+     */
239
+    function providePermissions() {
240
+        return array(
241
+            'SECURE_FILE_ACCESS' => _t('SecureFiles.SECUREFILEACCESS', 'Access to Secured Files'),
242
+            'SECURE_FILE_SETTINGS' => _t('SecureFiles.SECUREFILESETTINGS', 'Manage File Security Settings')
243
+        );
244
+    }
245 245
 
246 246
 }
247 247
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -80,8 +80,8 @@  discard block
 block discarded – undo
80 80
 	 * @param int $kilobytes
81 81
 	 */
82 82
 	static function set_chunk_size($kilobytes) {
83
-		$kilobytes = max(0, (int)$kilobytes);
84
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
83
+		$kilobytes = max(0, (int) $kilobytes);
84
+		if (!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
85 85
 		self::$chunck_size_kb = $kilobytes;
86 86
 	}
87 87
 	
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
 		$file_path = Director::makeRelative($url);
131 131
 		$file = File::find($file_path);
132 132
 		
133
-		if($file instanceof File) {
133
+		if ($file instanceof File) {
134 134
 			if ($file->canView()) {
135 135
 				$file->extend('onAccessGranted');
136 136
 				return $this->fileFound($file, $file_path);
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
 	 * @return HTTPResponse
151 151
 	 */
152 152
 	function fileNotFound($body = "") {
153
-		if(ClassInfo::exists('SS_HTTPResponse')) {
153
+		if (ClassInfo::exists('SS_HTTPResponse')) {
154 154
 			return new SS_HTTPResponse($body, 404);
155 155
 		} else {
156 156
 			return new HTTPResponse($body, 404);
@@ -182,8 +182,8 @@  discard block
 block discarded – undo
182 182
 		$file_size = filesize($file_path);
183 183
 		
184 184
 		// Testing mode - return an HTTPResponse
185
-		if(self::$use_ss_sendfile) {
186
-			if(ClassInfo::exists('SS_HTTPRequest')) {
185
+		if (self::$use_ss_sendfile) {
186
+			if (ClassInfo::exists('SS_HTTPRequest')) {
187 187
 				return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
188 188
 			} else {
189 189
 				return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
@@ -198,15 +198,15 @@  discard block
 block discarded – undo
198 198
 		header("Content-Length: {$file_size}");
199 199
 		header("Pragma: ");
200 200
 		
201
-		if(self::$use_x_sendfile) {
201
+		if (self::$use_x_sendfile) {
202 202
 			session_write_close();
203
-			header('X-Sendfile: '.$file_path);
203
+			header('X-Sendfile: ' . $file_path);
204 204
 			exit();
205
-		} elseif($filePointer = @fopen($file_path, 'rb')) {
205
+		} elseif ($filePointer = @fopen($file_path, 'rb')) {
206 206
 			session_write_close();
207 207
 			$this->flush();
208 208
 			// Push the file while not EOF and connection exists
209
-			while(!feof($filePointer) && !connection_aborted()) {
209
+			while (!feof($filePointer) && !connection_aborted()) {
210 210
 				print(fread($filePointer, 1024 * self::$chunck_size_kb));
211 211
 				$this->flush();
212 212
 			}
@@ -223,7 +223,7 @@  discard block
 block discarded – undo
223 223
 	 * @see http://nz.php.net/manual/en/function.flush.php#93531
224 224
 	 */
225 225
 	function flush() {
226
-		if(ob_get_length()) {
226
+		if (ob_get_length()) {
227 227
 			@ob_flush();
228 228
 			@flush();
229 229
 			@ob_end_flush();
Please login to merge, or discard this patch.
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -81,7 +81,9 @@
 block discarded – undo
81 81
 	 */
82 82
 	static function set_chunk_size($kilobytes) {
83 83
 		$kilobytes = max(0, (int)$kilobytes);
84
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
84
+		if(!$kilobytes) {
85
+		    user_error("Invalid download chunk size", E_USER_ERROR);
86
+		}
85 87
 		self::$chunck_size_kb = $kilobytes;
86 88
 	}
87 89
 	
Please login to merge, or discard this patch.
code/AdvertController.php 3 patches
Indentation   +162 added lines, -162 removed lines patch added patch discarded remove patch
@@ -1,23 +1,23 @@  discard block
 block discarded – undo
1 1
 <?php
2
-	class Advert_Controller extends Controller {
2
+    class Advert_Controller extends Controller {
3 3
 
4 4
 
5
-		/**
6
-		 * @var integer Size of output chunks in kb while in PHP fread mode.
7
-		 */
8
-		protected static $chunck_size_kb = 32;
5
+        /**
6
+         * @var integer Size of output chunks in kb while in PHP fread mode.
7
+         */
8
+        protected static $chunck_size_kb = 32;
9 9
 		
10
-		/**
11
-		 * @var boolean Flag use X-Sendfile header mode instead of PHP fread mode.
12
-		 */
13
-		protected static $use_x_sendfile = false;
10
+        /**
11
+         * @var boolean Flag use X-Sendfile header mode instead of PHP fread mode.
12
+         */
13
+        protected static $use_x_sendfile = false;
14 14
 		
15
-		/**
16
-		 * @var boolean Flag use SilverStripe send file method.
17
-		 */
18
-		protected static $use_ss_sendfile = false;
15
+        /**
16
+         * @var boolean Flag use SilverStripe send file method.
17
+         */
18
+        protected static $use_ss_sendfile = false;
19 19
 
20
-		/*
20
+        /*
21 21
 		When a URL of the following form is clicked,
22 22
 		http://SERVER/advert/26b0c28f4566dc54cc66770bdda86017851bd3dbbd4ac5868c63e003903dc8dc9b88b209bba54f1b5e6f4c3cf1295e58298e7d5a58b6c8ff02df9130ffd4ac30
23 23
 		a search is made for the digital signature in the adverts (this is indexed in the database)
@@ -26,44 +26,44 @@  discard block
 block discarded – undo
26 26
 
27 27
 		If a record is not found a 404 is returned
28 28
 		*/
29
-		public function click($args) {
30
-	    	$params = $args->allParams();
31
-	    	$digsig = $params['DigitalSignature'];
29
+        public function click($args) {
30
+            $params = $args->allParams();
31
+            $digsig = $params['DigitalSignature'];
32 32
 
33
-	    	$advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
33
+            $advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
34 34
 	    	
35
-	    	if (!$advert) {
36
-	    		$this->httpError(404, 'Advert "'.$digsig.'"" not found');
37
-	    	} else {
38
-	    		// record the click
39
-	    		$advert->Clickthroughs = $advert->Clickthroughs + 1;
40
-	    		$advert->write();
41
-	    		// documentation here states temporary directs are used, http://doc.silverstripe.org/framework/en/topics/controller
42
-	    		// this means the browser wont store the redirect and thus bypass the clickthrough recording
43
-	    		return $this->redirect($advert->WebsiteLink);
44
-	    	}
35
+            if (!$advert) {
36
+                $this->httpError(404, 'Advert "'.$digsig.'"" not found');
37
+            } else {
38
+                // record the click
39
+                $advert->Clickthroughs = $advert->Clickthroughs + 1;
40
+                $advert->write();
41
+                // documentation here states temporary directs are used, http://doc.silverstripe.org/framework/en/topics/controller
42
+                // this means the browser wont store the redirect and thus bypass the clickthrough recording
43
+                return $this->redirect($advert->WebsiteLink);
44
+            }
45 45
 
46 46
 	    	
47
-		}
48
-
49
-
50
-		public function image($args) {
51
-	    	$params = $args->allParams();
52
-	    	$digsig = $params['DigitalSignature'];
53
-
54
-	    	$advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
55
-	    	if (!$advert) {
56
-	    		$this->httpError(404, 'Advert "'.$digsig.'"" not found');
57
-	    	} else {
58
-	    		// record the click
59
-	    		$advert->Impressions = $advert->Impressions + 1;
60
-	    		$advert->write();
61
-	    		// documentation here states temporary directs are used, http://doc.silverstripe.org/framework/en/topics/controller
62
-	    		// this means the browser wont store the redirect and thus bypass the clickthrough recording
63
-
64
-	    		return $this->fileFound($advert->AdvertImage());
65
-	    	}
66
-		}
47
+        }
48
+
49
+
50
+        public function image($args) {
51
+            $params = $args->allParams();
52
+            $digsig = $params['DigitalSignature'];
53
+
54
+            $advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
55
+            if (!$advert) {
56
+                $this->httpError(404, 'Advert "'.$digsig.'"" not found');
57
+            } else {
58
+                // record the click
59
+                $advert->Impressions = $advert->Impressions + 1;
60
+                $advert->write();
61
+                // documentation here states temporary directs are used, http://doc.silverstripe.org/framework/en/topics/controller
62
+                // this means the browser wont store the redirect and thus bypass the clickthrough recording
63
+
64
+                return $this->fileFound($advert->AdvertImage());
65
+            }
66
+        }
67 67
 	
68 68
 
69 69
 
@@ -72,129 +72,129 @@  discard block
 block discarded – undo
72 72
 
73 73
 
74 74
 
75
-	/**
76
-	 * Use X-Sendfile headers to send files to the browser.
77
-	 * This is quicker than pushing files through PHP but
78
-	 * requires either Lighttpd or mod_xsendfile for Apache
79
-	 * @link http://tn123.ath.cx/mod_xsendfile/ 
80
-	 */
81
-	static function use_x_sendfile_method() {
82
-		self::use_default_sendfile_method();
83
-		self::$use_x_sendfile = true;
84
-	}
75
+    /**
76
+     * Use X-Sendfile headers to send files to the browser.
77
+     * This is quicker than pushing files through PHP but
78
+     * requires either Lighttpd or mod_xsendfile for Apache
79
+     * @link http://tn123.ath.cx/mod_xsendfile/ 
80
+     */
81
+    static function use_x_sendfile_method() {
82
+        self::use_default_sendfile_method();
83
+        self::$use_x_sendfile = true;
84
+    }
85 85
 	
86
-	/**
87
-	 * Use internal SilverStripe to send files to the browser.
88
-	 * This is the least efficient method but is useful for 
89
-	 * testing. Not recommend for production
90
-	 * environments.
91
-	 */
92
-	static function use_ss_sendfile_method() {
93
-		self::use_default_sendfile_method();
94
-		self::$use_ss_sendfile = true;
95
-	}
86
+    /**
87
+     * Use internal SilverStripe to send files to the browser.
88
+     * This is the least efficient method but is useful for 
89
+     * testing. Not recommend for production
90
+     * environments.
91
+     */
92
+    static function use_ss_sendfile_method() {
93
+        self::use_default_sendfile_method();
94
+        self::$use_ss_sendfile = true;
95
+    }
96 96
 	
97
-	/**
98
-	 * Use the default chuncked file method to send files to the browser.
99
-	 * This is the default method.
100
-	 */
101
-	static function use_default_sendfile_method() {
102
-		self::$use_ss_sendfile = false;
103
-		self::$use_x_sendfile = false;
104
-	}
97
+    /**
98
+     * Use the default chuncked file method to send files to the browser.
99
+     * This is the default method.
100
+     */
101
+    static function use_default_sendfile_method() {
102
+        self::$use_ss_sendfile = false;
103
+        self::$use_x_sendfile = false;
104
+    }
105 105
 	
106
-	/**
107
-	 * Set the size of upload chunk in bytes.
108
-	 * @param int $kilobytes
109
-	 */
110
-	static function set_chunk_size($kilobytes) {
111
-		$kilobytes = max(0, (int)$kilobytes);
112
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
113
-		self::$chunck_size_kb = $kilobytes;
114
-	}
106
+    /**
107
+     * Set the size of upload chunk in bytes.
108
+     * @param int $kilobytes
109
+     */
110
+    static function set_chunk_size($kilobytes) {
111
+        $kilobytes = max(0, (int)$kilobytes);
112
+        if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
113
+        self::$chunck_size_kb = $kilobytes;
114
+    }
115 115
 	
116
-	/**
117
-	 * Set the Apache access file name (.htaccess by default)
118
-	 * as determined by the AccessFileName Apache directive.
119
-	 * @param string $filename
120
-	 */
121
-	static function set_access_filename($filename) {
122
-		self::$htaccess_file = $filename;
123
-	}
116
+    /**
117
+     * Set the Apache access file name (.htaccess by default)
118
+     * as determined by the AccessFileName Apache directive.
119
+     * @param string $filename
120
+     */
121
+    static function set_access_filename($filename) {
122
+        self::$htaccess_file = $filename;
123
+    }
124 124
 	
125
-	/**
126
-	 * Get the Apache access file name
127
-	 * @return string
128
-	 */
129
-	static function get_access_filename() {
130
-		return self::$htaccess_file;
131
-	}
132
-
133
-
134
-
135
-	/**
136
-	 * File found response
137
-	 *
138
-	 * @param $file File to send
139
-	 * @param $alternate_path string If supplied, return the file from this path instead, for
140
-	 * example, resampled images.
141
-	 */
142
-	function fileFound(File $file, $alternate_path = null) {
125
+    /**
126
+     * Get the Apache access file name
127
+     * @return string
128
+     */
129
+    static function get_access_filename() {
130
+        return self::$htaccess_file;
131
+    }
132
+
133
+
134
+
135
+    /**
136
+     * File found response
137
+     *
138
+     * @param $file File to send
139
+     * @param $alternate_path string If supplied, return the file from this path instead, for
140
+     * example, resampled images.
141
+     */
142
+    function fileFound(File $file, $alternate_path = null) {
143 143
 		
144
-		// File properties
145
-		$file_name = $file->Name;
146
-		$file_path = Director::getAbsFile($alternate_path ? $alternate_path : $file->FullPath);
147
-		$file_size = filesize($file_path);
144
+        // File properties
145
+        $file_name = $file->Name;
146
+        $file_path = Director::getAbsFile($alternate_path ? $alternate_path : $file->FullPath);
147
+        $file_size = filesize($file_path);
148 148
 		
149
-		// Testing mode - return an HTTPResponse
150
-		if(self::$use_ss_sendfile) {
151
-			if(ClassInfo::exists('SS_HTTPRequest')) {
152
-				return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
153
-			} else {
154
-				return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
155
-			}
156
-		}
149
+        // Testing mode - return an HTTPResponse
150
+        if(self::$use_ss_sendfile) {
151
+            if(ClassInfo::exists('SS_HTTPRequest')) {
152
+                return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
153
+            } else {
154
+                return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
155
+            }
156
+        }
157 157
 		
158
-		// Normal operation:
159
-		$mimeType = HTTP::get_mime_type($file_name);
160
-		header("Content-Type: {$mimeType}; name=\"" . addslashes($file_name) . "\"");
161
-		header("Content-Disposition: attachment; filename=" . addslashes($file_name));
162
-		header("Cache-Control: max-age=1, private");
163
-		header("Content-Length: {$file_size}");
164
-		header("Pragma: ");
158
+        // Normal operation:
159
+        $mimeType = HTTP::get_mime_type($file_name);
160
+        header("Content-Type: {$mimeType}; name=\"" . addslashes($file_name) . "\"");
161
+        header("Content-Disposition: attachment; filename=" . addslashes($file_name));
162
+        header("Cache-Control: max-age=1, private");
163
+        header("Content-Length: {$file_size}");
164
+        header("Pragma: ");
165 165
 		
166
-		if(self::$use_x_sendfile) {
167
-			session_write_close();
168
-			header('X-Sendfile: '.$file_path);
169
-			exit();
170
-		} elseif($filePointer = @fopen($file_path, 'rb')) {
171
-			session_write_close();
172
-			$this->flush();
173
-			// Push the file while not EOF and connection exists
174
-			while(!feof($filePointer) && !connection_aborted()) {
175
-				//error_log("Sending $chunck_size_kb kb");
176
-				print(fread($filePointer, 1024 * self::$chunck_size_kb));
177
-				$this->flush();
178
-			}
179
-			fclose($filePointer);
180
-			exit();
181
-		} else {
182
-			// Edge case - either not found anymore or can't read
183
-			return $this->fileNotFound();
184
-		}
185
-	}
166
+        if(self::$use_x_sendfile) {
167
+            session_write_close();
168
+            header('X-Sendfile: '.$file_path);
169
+            exit();
170
+        } elseif($filePointer = @fopen($file_path, 'rb')) {
171
+            session_write_close();
172
+            $this->flush();
173
+            // Push the file while not EOF and connection exists
174
+            while(!feof($filePointer) && !connection_aborted()) {
175
+                //error_log("Sending $chunck_size_kb kb");
176
+                print(fread($filePointer, 1024 * self::$chunck_size_kb));
177
+                $this->flush();
178
+            }
179
+            fclose($filePointer);
180
+            exit();
181
+        } else {
182
+            // Edge case - either not found anymore or can't read
183
+            return $this->fileNotFound();
184
+        }
185
+    }
186 186
 	
187
-	/**
188
-	 * Flush the output buffer to the server (if possible).
189
-	 * @see http://nz.php.net/manual/en/function.flush.php#93531
190
-	 */
191
-	function flush() {
192
-		if(ob_get_length()) {
193
-			@ob_flush();
194
-			@flush();
195
-			@ob_end_flush();
196
-		}
197
-		@ob_start();
198
-	}
187
+    /**
188
+     * Flush the output buffer to the server (if possible).
189
+     * @see http://nz.php.net/manual/en/function.flush.php#93531
190
+     */
191
+    function flush() {
192
+        if(ob_get_length()) {
193
+            @ob_flush();
194
+            @flush();
195
+            @ob_end_flush();
196
+        }
197
+        @ob_start();
198
+    }
199 199
 
200 200
 }
201 201
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
 	    	$advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
34 34
 	    	
35 35
 	    	if (!$advert) {
36
-	    		$this->httpError(404, 'Advert "'.$digsig.'"" not found');
36
+	    		$this->httpError(404, 'Advert "' . $digsig . '"" not found');
37 37
 	    	} else {
38 38
 	    		// record the click
39 39
 	    		$advert->Clickthroughs = $advert->Clickthroughs + 1;
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 
54 54
 	    	$advert = Advert::get()->filter('DigitalSignature', $digsig)->first(); // should only be the one but make sure
55 55
 	    	if (!$advert) {
56
-	    		$this->httpError(404, 'Advert "'.$digsig.'"" not found');
56
+	    		$this->httpError(404, 'Advert "' . $digsig . '"" not found');
57 57
 	    	} else {
58 58
 	    		// record the click
59 59
 	    		$advert->Impressions = $advert->Impressions + 1;
@@ -108,8 +108,8 @@  discard block
 block discarded – undo
108 108
 	 * @param int $kilobytes
109 109
 	 */
110 110
 	static function set_chunk_size($kilobytes) {
111
-		$kilobytes = max(0, (int)$kilobytes);
112
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
111
+		$kilobytes = max(0, (int) $kilobytes);
112
+		if (!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
113 113
 		self::$chunck_size_kb = $kilobytes;
114 114
 	}
115 115
 	
@@ -147,8 +147,8 @@  discard block
 block discarded – undo
147 147
 		$file_size = filesize($file_path);
148 148
 		
149 149
 		// Testing mode - return an HTTPResponse
150
-		if(self::$use_ss_sendfile) {
151
-			if(ClassInfo::exists('SS_HTTPRequest')) {
150
+		if (self::$use_ss_sendfile) {
151
+			if (ClassInfo::exists('SS_HTTPRequest')) {
152 152
 				return SS_HTTPRequest::send_file(file_get_contents($file_path), $file_name);
153 153
 			} else {
154 154
 				return HTTPRequest::send_file(file_get_contents($file_path), $file_name);
@@ -163,15 +163,15 @@  discard block
 block discarded – undo
163 163
 		header("Content-Length: {$file_size}");
164 164
 		header("Pragma: ");
165 165
 		
166
-		if(self::$use_x_sendfile) {
166
+		if (self::$use_x_sendfile) {
167 167
 			session_write_close();
168
-			header('X-Sendfile: '.$file_path);
168
+			header('X-Sendfile: ' . $file_path);
169 169
 			exit();
170
-		} elseif($filePointer = @fopen($file_path, 'rb')) {
170
+		} elseif ($filePointer = @fopen($file_path, 'rb')) {
171 171
 			session_write_close();
172 172
 			$this->flush();
173 173
 			// Push the file while not EOF and connection exists
174
-			while(!feof($filePointer) && !connection_aborted()) {
174
+			while (!feof($filePointer) && !connection_aborted()) {
175 175
 				//error_log("Sending $chunck_size_kb kb");
176 176
 				print(fread($filePointer, 1024 * self::$chunck_size_kb));
177 177
 				$this->flush();
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
 	 * @see http://nz.php.net/manual/en/function.flush.php#93531
190 190
 	 */
191 191
 	function flush() {
192
-		if(ob_get_length()) {
192
+		if (ob_get_length()) {
193 193
 			@ob_flush();
194 194
 			@flush();
195 195
 			@ob_end_flush();
Please login to merge, or discard this patch.
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -109,7 +109,9 @@
 block discarded – undo
109 109
 	 */
110 110
 	static function set_chunk_size($kilobytes) {
111 111
 		$kilobytes = max(0, (int)$kilobytes);
112
-		if(!$kilobytes) user_error("Invalid download chunk size", E_USER_ERROR);
112
+		if(!$kilobytes) {
113
+		    user_error("Invalid download chunk size", E_USER_ERROR);
114
+		}
113 115
 		self::$chunck_size_kb = $kilobytes;
114 116
 	}
115 117
 	
Please login to merge, or discard this patch.
code/Advert.php 2 patches
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -6,15 +6,15 @@  discard block
 block discarded – undo
6 6
 class Advert extends DataObject {
7 7
 
8 8
 
9
-  static $searchable_fields = array(
9
+    static $searchable_fields = array(
10 10
     'WebsiteLink',
11
- );
11
+    );
12 12
 
13 13
 
14 14
  
15 15
 
16 16
 
17
-  static $db = array(
17
+    static $db = array(
18 18
     // title to show in model admin
19 19
     'Title' => 'Varchar(255)',
20 20
 
@@ -39,28 +39,28 @@  discard block
 block discarded – undo
39 39
     // stats
40 40
     'Impressions' => 'Int',
41 41
     'Clickthroughs' => 'Int',
42
- );
42
+    );
43 43
 
44 44
 
45 45
 
46 46
 
47
-  static $has_one = array(
47
+    static $has_one = array(
48 48
     'AdvertImage' => 'Image',
49 49
     'AdvertCategory' => "AdvertCategory",
50 50
     "AdvertLayoutType" => "AdvertLayoutType"
51
- );
51
+    );
52 52
 
53 53
 
54
-  public static $summary_fields = array(
54
+    public static $summary_fields = array(
55 55
     'Title' => 'Title',
56 56
     'AdvertCategory.Title',
57 57
     'AdvertLayoutType.Title',
58 58
     'StartDate' => 'StartDate',
59 59
     'FinishDate' => 'FinishDate'
60
- );
60
+    );
61 61
 
62 62
 
63
-  // add an index in the db for the digital signature and date ranges
63
+    // add an index in the db for the digital signature and date ranges
64 64
     static $indexes = array(
65 65
         'DigitalSignature' => true,
66 66
         'StartDate' => '(StartDate)',
@@ -72,11 +72,11 @@  discard block
 block discarded – undo
72 72
 
73 73
 
74 74
 
75
-  function getCMSFields() {
75
+    function getCMSFields() {
76 76
 
77 77
     Requirements::javascript('weboftalent-adverts/javascript/advertedit.js');
78 78
     
79
-     // throw away the scaffolding and start afresh
79
+        // throw away the scaffolding and start afresh
80 80
     $fields = new FieldList();
81 81
 
82 82
     // add a main tab
@@ -91,13 +91,13 @@  discard block
 block discarded – undo
91 91
     // a Javascript toggle on this field displays either the adbroker text field, or an image with URL
92 92
     $fields->addFieldToTab('Root.Main', new DropdownField('AdvertSource', 'The type of advert',
93 93
         singleton('Advert')->dbObject('AdvertSource')->enumValues()
94
-   ));
94
+    ));
95 95
 
96 96
     if ($this->ID == 0) {
97 97
         $html = '<div class="field text">An image can be uploaded after the advert is saved for the first time</div>';
98 98
         $fields->addFieldToTab('Root.Main', new LiteralField('ImageInfo', $html));
99 99
     } else {
100
-       $fields->addFieldToTab('Root.Main', $imageUploader = new UploadField('AdvertImage', 
100
+        $fields->addFieldToTab('Root.Main', $imageUploader = new UploadField('AdvertImage', 
101 101
         'Image that will be shown as the actual advert'));
102 102
         Folder::find_or_make('ads');
103 103
         $imageUploader->setFolderName('ads'
@@ -129,21 +129,21 @@  discard block
 block discarded – undo
129 129
     $fields->addFieldToTab('Root.Main', $layoutfield);
130 130
 
131 131
     return $fields;
132
-  }
132
+    }
133 133
 
134 134
 
135 135
 
136
-  public function onBeforeWrite() {
136
+    public function onBeforeWrite() {
137 137
     $this->DigitalSignature = $this->CalculateDigitalSignature();
138 138
     //error_log("DIG SIG:".$this->DigitalSignature);
139 139
     parent::onBeforeWrite();
140
-  }
140
+    }
141 141
 
142 142
 
143
-  /*
143
+    /*
144 144
     Calculate a digital signature from several of the fields
145 145
   */
146
-  public function CalculateDigitalSignature() {
146
+    public function CalculateDigitalSignature() {
147 147
     //error_log("Calculating dig sig");
148 148
     /* because we save the impression counter on every rendition this cannot include
149 149
     - number of impressions
@@ -155,7 +155,7 @@  discard block
 block discarded – undo
155 155
     $hashed = hash('sha512', $data);
156 156
     //error_log("HASH CREATED:".$hashed);
157 157
     return $hashed;
158
-  }
158
+    }
159 159
 
160 160
 
161 161
 
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
 
86 86
 
87 87
     // human readable title
88
-    $fields->addFieldToTab('Root.Main',  new TextField('Title', 
88
+    $fields->addFieldToTab('Root.Main', new TextField('Title', 
89 89
                                 'Human readable title for the advert'));
90 90
 
91 91
     // a Javascript toggle on this field displays either the adbroker text field, or an image with URL
@@ -107,10 +107,10 @@  discard block
 block discarded – undo
107 107
 
108 108
 
109 109
     // quick tags, faster than the grid editor - these are processed prior to save to create/assign tags
110
-    $fields->addFieldToTab('Root.Main',  new TextField('WebsiteLink', 
110
+    $fields->addFieldToTab('Root.Main', new TextField('WebsiteLink', 
111 111
                                 'The URL that will be shown when the advert image is clicked'));
112 112
 
113
-    $fields->addFieldToTab('Root.Main',  new TextareaField('AdbrokerJavascript', 
113
+    $fields->addFieldToTab('Root.Main', new TextareaField('AdbrokerJavascript', 
114 114
                                 'JavaScript provided by the adbroker'));
115 115
 
116 116
     $fields->addFieldToTab('Root.Main', $sdf = new DateField('StartDate', 'The date the advert becomes active'));
@@ -150,8 +150,8 @@  discard block
 block discarded – undo
150 150
     - last edited
151 151
     Otherwise the clickthrough will fail
152 152
     */
153
-    $data = $this->ID.'_'.$this->AdvertCategory()->Title.'_'.$this->AdvertLayoutType()->Title.'_'.$this->AdbrokerJavascript;
154
-    $data .= '_'.$this->StartDate.'_'.$this->FinishDate.'_'.$this->ClickThroughs.'_advert';
153
+    $data = $this->ID . '_' . $this->AdvertCategory()->Title . '_' . $this->AdvertLayoutType()->Title . '_' . $this->AdbrokerJavascript;
154
+    $data .= '_' . $this->StartDate . '_' . $this->FinishDate . '_' . $this->ClickThroughs . '_advert';
155 155
     $hashed = hash('sha512', $data);
156 156
     //error_log("HASH CREATED:".$hashed);
157 157
     return $hashed;
Please login to merge, or discard this patch.
code/AdvertReport.php 2 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -63,7 +63,7 @@
 block discarded – undo
63 63
             50
64 64
         );
65 65
 
66
-       // $df->setSize(100);
66
+        // $df->setSize(100);
67 67
         $params->push($df);
68 68
                  
69 69
         return $params;
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@
 block discarded – undo
29 29
     }
30 30
  
31 31
     public function sourceRecords($params = null) {
32
-        return DataList::create('Advert');//->limit(10);
32
+        return DataList::create('Advert'); //->limit(10);
33 33
     }
34 34
 
35 35
 
Please login to merge, or discard this patch.
code/AdvertLayoutType.php 2 patches
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -7,39 +7,39 @@  discard block
 block discarded – undo
7 7
 class AdvertLayoutType extends DataObject {
8 8
 
9 9
 
10
-  static $searchable_fields = array(
10
+    static $searchable_fields = array(
11 11
     'Title',
12
-  );
12
+    );
13 13
 
14 14
 
15 15
  
16 16
 
17 17
 
18
-  static $db = array(
18
+    static $db = array(
19 19
     // name of the layout type, e.g. 'main banner' or 'skyscraper'
20 20
     'Title' => 'Varchar(255)',
21 21
 
22 22
     // whether or not ads are enabled
23 23
     'Width' => 'Int',
24 24
     'Height' => 'Int'
25
-  );
25
+    );
26 26
 
27 27
 
28 28
 
29
-  public static $summary_fields = array(
29
+    public static $summary_fields = array(
30 30
     'Title' => 'Title',
31 31
     'Width' => 'Width',
32 32
     'Height' => 'Height'
33
-  );
33
+    );
34 34
 
35
-  static $has_many = array(
35
+    static $has_many = array(
36 36
     'Adverts' => 'Advert'
37
-  );
37
+    );
38 38
 
39 39
 
40 40
 
41 41
 
42
-  function getCMSFields() {
42
+    function getCMSFields() {
43 43
     $fields = new FieldList();
44 44
 
45 45
     // add a tab
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
     $fields->addFieldToTab( 'Root.Main', new NumericField( 'Height', 'The height of the advert in pixels' )  );
53 53
 
54 54
     return $fields;
55
-  }
55
+    }
56 56
 
57 57
 }
58 58
 
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -43,13 +43,13 @@
 block discarded – undo
43 43
     $fields = new FieldList();
44 44
 
45 45
     // add a tab
46
-    $fields->push( new TabSet( "Root", $mainTab = new Tab( "Main" ) ) );
47
-    $mainTab->setTitle( _t( 'SiteTree.TABMAIN', "Main" ) );
46
+    $fields->push(new TabSet("Root", $mainTab = new Tab("Main")));
47
+    $mainTab->setTitle(_t('SiteTree.TABMAIN', "Main"));
48 48
 
49 49
 
50
-    $fields->addFieldToTab( 'Root.Main',  new TextField( 'Title', 'The name of the category') );
51
-    $fields->addFieldToTab( 'Root.Main', new NumericField( 'Width', 'The width of the advert in pixels' )  );
52
-    $fields->addFieldToTab( 'Root.Main', new NumericField( 'Height', 'The height of the advert in pixels' )  );
50
+    $fields->addFieldToTab('Root.Main', new TextField('Title', 'The name of the category'));
51
+    $fields->addFieldToTab('Root.Main', new NumericField('Width', 'The width of the advert in pixels'));
52
+    $fields->addFieldToTab('Root.Main', new NumericField('Height', 'The height of the advert in pixels'));
53 53
 
54 54
     return $fields;
55 55
   }
Please login to merge, or discard this patch.
code/AdvertAdmin.php 2 patches
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -2,12 +2,12 @@
 block discarded – undo
2 2
 
3 3
 class AdvertAdmin extends ModelAdmin {
4 4
     
5
-  public static $managed_models = array(   //since 2.3.2
6
-      'Advert','AdvertCategory','AdvertLayoutType'
7
-   );
5
+    public static $managed_models = array(   //since 2.3.2
6
+        'Advert','AdvertCategory','AdvertLayoutType'
7
+    );
8 8
  
9
-  static $url_segment = 'adverts'; // will be linked as /admin/adverts
10
-  static $menu_title = 'Adverts';
9
+    static $url_segment = 'adverts'; // will be linked as /admin/adverts
10
+    static $menu_title = 'Adverts';
11 11
  
12 12
 }
13 13
 
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@
 block discarded – undo
3 3
 class AdvertAdmin extends ModelAdmin {
4 4
     
5 5
   public static $managed_models = array(   //since 2.3.2
6
-      'Advert','AdvertCategory','AdvertLayoutType'
6
+      'Advert', 'AdvertCategory', 'AdvertLayoutType'
7 7
    );
8 8
  
9 9
   static $url_segment = 'adverts'; // will be linked as /admin/adverts
Please login to merge, or discard this patch.
code/AdvertSiteConfig.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -3,22 +3,22 @@
 block discarded – undo
3 3
 class AdvertSiteConfig extends DataExtension {     
4 4
 
5 5
 		
6
-	 public static $db = array(			
7
-		'MpuAboveFoldPosition' => 'Int',
8
-		'MpuBelowFoldPosition' => 'Int'				
9
-	  );
6
+        public static $db = array(			
7
+        'MpuAboveFoldPosition' => 'Int',
8
+        'MpuBelowFoldPosition' => 'Int'				
9
+        );
10 10
 
11 11
 
12
-	public static $defaults = array(
13
-		'MpuAboveFoldPosition' => '4',
14
-		'MpuBelowFoldPosition' => '11'	
15
-	);
12
+    public static $defaults = array(
13
+        'MpuAboveFoldPosition' => '4',
14
+        'MpuBelowFoldPosition' => '11'	
15
+    );
16 16
  
17 17
     public function updateCMSFields(FieldList $fields) {
18
-	   $fields->addFieldToTab("Root.Advert", new NumericField("MpuAboveFoldPosition", 
19
-	   									"Position the list for the MPU advert above the fold"));
20
-	   $fields->addFieldToTab("Root.Advert", new NumericField("MpuBelowFoldPosition", 
21
-	   									"Position the list for the MPU advert below the fold"));
18
+        $fields->addFieldToTab("Root.Advert", new NumericField("MpuAboveFoldPosition", 
19
+                                            "Position the list for the MPU advert above the fold"));
20
+        $fields->addFieldToTab("Root.Advert", new NumericField("MpuBelowFoldPosition", 
21
+                                            "Position the list for the MPU advert below the fold"));
22 22
 	  
23 23
     }
24 24
 }
Please login to merge, or discard this patch.
code/AdvertControllerExtension.php 2 patches
Indentation   +69 added lines, -69 removed lines patch added patch discarded remove patch
@@ -2,19 +2,19 @@  discard block
 block discarded – undo
2 2
 
3 3
 class AdvertControllerExtension extends DataExtension {
4 4
 
5
-	/*
5
+    /*
6 6
 	Store id to advert category to avoid multiple same queries
7 7
 	*/
8
-	private static $cachedcategories = array();
8
+    private static $cachedcategories = array();
9 9
 
10
-	/*
10
+    /*
11 11
 	In order to prevent duplicate image adverts, stores those already served this request/response cycle
12 12
 	*/
13
-	private static $advertsalreadyserved = array();
13
+    private static $advertsalreadyserved = array();
14 14
 
15
-	static $ctr = 1;
15
+    static $ctr = 1;
16 16
 
17
-	/*
17
+    /*
18 18
 	Work out the appropriate category and render a random advert from that category
19 19
 	@param #adverttype The type of advert, e.g. MPU or Skyscraper
20 20
 	@param $prefix HTML prefix to the advert, e.g an li wrapper
@@ -22,67 +22,67 @@  discard block
 block discarded – undo
22 22
 	@param $numberofads - the number of adverts to search for.  Normally 1 but skyscraper needs 2
23 23
 	@param $showonajax - set this to false to hide adverts on ajax
24 24
 	*/
25
-	function RenderAdvert($cachekey,$adverttype,$template='InlineAdvert', $numberofads = 1, $showonajax = true) {
26
-			// If we are using ajax and showonajax is set to false, return no ad
27
-		if (Director::is_ajax()) {
28
-			if ($showonajax !== true) {
29
-				return '';
30
-			}
31
-		}
32
-
33
-		// this is from the advert model extension so will be in place
34
-		$advertcategoryid = $this->owner->CalculateAdvertCategoryID();
35
-
36
-		if (isset($cachedcategories[$advertcategoryid])) {
37
-			$advertcategory = $cachedcategories[$advertcategoryid];
38
-		}
39
-		if (!isset($advertcategory) ){
40
-			$advertcategory = AdvertCategory::get()->byID($advertcategoryid);
41
-			$cachedcategories[$advertcategoryid] = $advertcategory;
42
-		}
43
-
44
-		// check if the category is enabled, if not return a blank
45
-		if (isset($advertcategory) && $advertcategory->Enabled) {
46
-			$where = "AdvertLayoutType.Title = '$adverttype'";
47
-
48
-			if (isset($advertcategory)) {
49
-				$where .= ' AND Advert.AdvertCategoryID = '.$advertcategoryid;
50
-				$where .= ' AND (StartDate IS NULL OR !StartDate OR StartDate < NOW()) AND (FinishDate IS NULL OR !FinishDate OR NOW() < FinishDate)';
51
-
52
-				if (count(self::$advertsalreadyserved) > 0) {
53
-					$csv = implode(',', array_keys(self::$advertsalreadyserved));
54
-					$where .= " and Advert.ID not in ($csv)";
55
-				}
56
-			}
57
-
58
-			$adverts = Advert::get()->
59
-					innerJoin('AdvertLayoutType', 'Advert.AdvertLayoutTypeID = AdvertLayoutType.ID')
60
-					->innerJoin('AdvertCategory', 'Advert.AdvertCategoryID = AdvertCategory.ID')
61
-
62
-					// filter does not work here, use where instead
63
-					->where($where)
64
-					->sort('RAND()')->limit($numberofads);
65
-
66
-			$firstad = null;
67
-
68
-			// datalist->first() was sometimes producing the same answer twice - SS bug?					
69
-			foreach ($adverts->getIterator() as $advert) {
70
-				self::$advertsalreadyserved[$advert->ID] = $advert->ID;
71
-				if ($firstad === null) {
72
-					$firstad = $advert;
73
-				}
74
-			}
75
-
76
-			$forTemplate = new ArrayData(array(
77
-	        	'Adverts' => $adverts,
78
-	        	'Advert' => $firstad,
79
-	        	'CacheKey' => $cachekey
80
-	      	));
81
-	    	return $forTemplate->renderWith($template);
82
-		} else {
83
-			// return a blank if the cateogry is not enabled
84
-			return '';
85
-		}
86
-
87
-	}
25
+    function RenderAdvert($cachekey,$adverttype,$template='InlineAdvert', $numberofads = 1, $showonajax = true) {
26
+            // If we are using ajax and showonajax is set to false, return no ad
27
+        if (Director::is_ajax()) {
28
+            if ($showonajax !== true) {
29
+                return '';
30
+            }
31
+        }
32
+
33
+        // this is from the advert model extension so will be in place
34
+        $advertcategoryid = $this->owner->CalculateAdvertCategoryID();
35
+
36
+        if (isset($cachedcategories[$advertcategoryid])) {
37
+            $advertcategory = $cachedcategories[$advertcategoryid];
38
+        }
39
+        if (!isset($advertcategory) ){
40
+            $advertcategory = AdvertCategory::get()->byID($advertcategoryid);
41
+            $cachedcategories[$advertcategoryid] = $advertcategory;
42
+        }
43
+
44
+        // check if the category is enabled, if not return a blank
45
+        if (isset($advertcategory) && $advertcategory->Enabled) {
46
+            $where = "AdvertLayoutType.Title = '$adverttype'";
47
+
48
+            if (isset($advertcategory)) {
49
+                $where .= ' AND Advert.AdvertCategoryID = '.$advertcategoryid;
50
+                $where .= ' AND (StartDate IS NULL OR !StartDate OR StartDate < NOW()) AND (FinishDate IS NULL OR !FinishDate OR NOW() < FinishDate)';
51
+
52
+                if (count(self::$advertsalreadyserved) > 0) {
53
+                    $csv = implode(',', array_keys(self::$advertsalreadyserved));
54
+                    $where .= " and Advert.ID not in ($csv)";
55
+                }
56
+            }
57
+
58
+            $adverts = Advert::get()->
59
+                    innerJoin('AdvertLayoutType', 'Advert.AdvertLayoutTypeID = AdvertLayoutType.ID')
60
+                    ->innerJoin('AdvertCategory', 'Advert.AdvertCategoryID = AdvertCategory.ID')
61
+
62
+                    // filter does not work here, use where instead
63
+                    ->where($where)
64
+                    ->sort('RAND()')->limit($numberofads);
65
+
66
+            $firstad = null;
67
+
68
+            // datalist->first() was sometimes producing the same answer twice - SS bug?					
69
+            foreach ($adverts->getIterator() as $advert) {
70
+                self::$advertsalreadyserved[$advert->ID] = $advert->ID;
71
+                if ($firstad === null) {
72
+                    $firstad = $advert;
73
+                }
74
+            }
75
+
76
+            $forTemplate = new ArrayData(array(
77
+                'Adverts' => $adverts,
78
+                'Advert' => $firstad,
79
+                'CacheKey' => $cachekey
80
+                ));
81
+            return $forTemplate->renderWith($template);
82
+        } else {
83
+            // return a blank if the cateogry is not enabled
84
+            return '';
85
+        }
86
+
87
+    }
88 88
 }
89 89
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 	@param $numberofads - the number of adverts to search for.  Normally 1 but skyscraper needs 2
23 23
 	@param $showonajax - set this to false to hide adverts on ajax
24 24
 	*/
25
-	function RenderAdvert($cachekey,$adverttype,$template='InlineAdvert', $numberofads = 1, $showonajax = true) {
25
+	function RenderAdvert($cachekey, $adverttype, $template = 'InlineAdvert', $numberofads = 1, $showonajax = true) {
26 26
 			// If we are using ajax and showonajax is set to false, return no ad
27 27
 		if (Director::is_ajax()) {
28 28
 			if ($showonajax !== true) {
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
 		if (isset($cachedcategories[$advertcategoryid])) {
37 37
 			$advertcategory = $cachedcategories[$advertcategoryid];
38 38
 		}
39
-		if (!isset($advertcategory) ){
39
+		if (!isset($advertcategory)) {
40 40
 			$advertcategory = AdvertCategory::get()->byID($advertcategoryid);
41 41
 			$cachedcategories[$advertcategoryid] = $advertcategory;
42 42
 		}
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
 			$where = "AdvertLayoutType.Title = '$adverttype'";
47 47
 
48 48
 			if (isset($advertcategory)) {
49
-				$where .= ' AND Advert.AdvertCategoryID = '.$advertcategoryid;
49
+				$where .= ' AND Advert.AdvertCategoryID = ' . $advertcategoryid;
50 50
 				$where .= ' AND (StartDate IS NULL OR !StartDate OR StartDate < NOW()) AND (FinishDate IS NULL OR !FinishDate OR NOW() < FinishDate)';
51 51
 
52 52
 				if (count(self::$advertsalreadyserved) > 0) {
Please login to merge, or discard this patch.
code/AdvertSiteTreeExtension.php 2 patches
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -2,91 +2,91 @@
 block discarded – undo
2 2
 
3 3
 class AdvertSiteTreeExtension extends DataExtension {
4 4
 
5
-	/*
5
+    /*
6 6
 	Any page in the site tree can have an advert category.  This is used to determine the category
7 7
 	of adverts served in the tree of pages below it.  THe cached value is used to avoid having to
8 8
 	recalculate it by traversing the tree each time.
9 9
 	*/
10
-  	static $has_one = array(
11
-  		'AdvertCategory' => 'AdvertCategory',
12
-  		'CachedAdvertCategory' => 'AdvertCategory',
10
+        static $has_one = array(
11
+            'AdvertCategory' => 'AdvertCategory',
12
+            'CachedAdvertCategory' => 'AdvertCategory',
13 13
 
14
-  		// it is possible that a cached value may be null, so in order to avoid traversing the tree
15
-  		// each page load, use this flag first
16
-  		'IsCached' => 'Boolean'
17
-  	);
14
+            // it is possible that a cached value may be null, so in order to avoid traversing the tree
15
+            // each page load, use this flag first
16
+            'IsCached' => 'Boolean'
17
+        );
18 18
 
19
-  /*
19
+    /*
20 20
   Add a Location tab containing the map
21 21
   */
22
-  public function updateCMSFields( FieldList $fields ) {
23
-  	$categoryfield = new DropdownField('AdvertCategoryID', 'Category', AdvertCategory::get()->sort('Title')->map('ID', 'Title'));
22
+    public function updateCMSFields( FieldList $fields ) {
23
+        $categoryfield = new DropdownField('AdvertCategoryID', 'Category', AdvertCategory::get()->sort('Title')->map('ID', 'Title'));
24 24
     $categoryfield->setEmptyString('(Select one)');
25 25
     $fields->addFieldToTab( "Root.AdvertCategory", $categoryfield);
26
-  }
26
+    }
27 27
 
28
-  /*
28
+    /*
29 29
 	Prior to an item being saved, check for the category having being changed.  If so we need to clear the category cache
30 30
 	for all items in the database, and cache this one.
31 31
   */
32
-  public function onBeforeWrite() {
33
-  	$savedpage = SiteTree::get()->byID($this->owner->ID);
34
-  	//error_log("Formerly saved category id = ".$savedpage->AdvertCategory()->Title);
35
-  	//error_log("Category before save for page ".$this->owner->ID." is :".$this->owner->AdvertCategory()->Title);
36
-  	if ($savedpage->AdvertCategoryID != $this->owner->AdvertCategoryID) {
37
-  		//error_log("RESET CACHE");
32
+    public function onBeforeWrite() {
33
+        $savedpage = SiteTree::get()->byID($this->owner->ID);
34
+        //error_log("Formerly saved category id = ".$savedpage->AdvertCategory()->Title);
35
+        //error_log("Category before save for page ".$this->owner->ID." is :".$this->owner->AdvertCategory()->Title);
36
+        if ($savedpage->AdvertCategoryID != $this->owner->AdvertCategoryID) {
37
+            //error_log("RESET CACHE");
38 38
   		
39
-  		// clear caching for live and stage subtree
40
-  		DB::query('update SiteTree_Live set IsCachedID = false, CachedAdvertCategoryID = 0;');
41
-  		DB::query('update SiteTree set IsCachedID = false, CachedAdvertCategoryID = 0;');
42
-  	} else {
43
-  		//error_log("CACHE CAN KEEP GOING");
44
-  	}
45
-  	parent::onBeforeWrite();
39
+            // clear caching for live and stage subtree
40
+            DB::query('update SiteTree_Live set IsCachedID = false, CachedAdvertCategoryID = 0;');
41
+            DB::query('update SiteTree set IsCachedID = false, CachedAdvertCategoryID = 0;');
42
+        } else {
43
+            //error_log("CACHE CAN KEEP GOING");
44
+        }
45
+        parent::onBeforeWrite();
46 46
 
47
-  }
47
+    }
48 48
 
49 49
 
50
-  /*
50
+    /*
51 51
 	Get the advert category.  Either use the cached advert category, or traverse the tree towards the root looking for it
52 52
   */
53
-	public function CalculateAdvertCategoryID() {
54
-		// use the cached value
55
-		$result = $this->owner->CachedAdvertCategoryID;
53
+    public function CalculateAdvertCategoryID() {
54
+        // use the cached value
55
+        $result = $this->owner->CachedAdvertCategoryID;
56 56
 
57
-		// if the record is not marked as cached, see if it has a category
58
-		if (!$this->owner->IsCached) {
59
-			if($this->owner->AdvertCategoryID > 0) {
60
-				$this->owner->CachedAdvertCategoryID = $this->owner->AdvertCategoryID;
61
-				$this->owner->IsCached = true;
62
-				$this->owner->write;
63
-				$result = $this->owner->CachedAdvertCategoryID;
64
-			} else 
65
-				// otherwise traverse each parent in turn until reaching the root of the site, i.e. no parent
66
-			{
67
-				$parent = SiteTree::get()->byId($this->owner->ParentID);
68
-				if ($parent) { 
69
-					while (true) {
70
-						//error_log("TRAVERSING UP THE TREE LOOKING FOR CATEGORY");
71
-						if ($parent->IsCached) {
72
-							$this->owner->AdvertCategoryID = $parent->AdvertCategoryID;
73
-							$this->owner->IsCached = true;
74
-							$this->owner->write();
75
-							$result = $this->owner->AdvertCategoryID;
76
-							break;
77
-						}
57
+        // if the record is not marked as cached, see if it has a category
58
+        if (!$this->owner->IsCached) {
59
+            if($this->owner->AdvertCategoryID > 0) {
60
+                $this->owner->CachedAdvertCategoryID = $this->owner->AdvertCategoryID;
61
+                $this->owner->IsCached = true;
62
+                $this->owner->write;
63
+                $result = $this->owner->CachedAdvertCategoryID;
64
+            } else 
65
+                // otherwise traverse each parent in turn until reaching the root of the site, i.e. no parent
66
+            {
67
+                $parent = SiteTree::get()->byId($this->owner->ParentID);
68
+                if ($parent) { 
69
+                    while (true) {
70
+                        //error_log("TRAVERSING UP THE TREE LOOKING FOR CATEGORY");
71
+                        if ($parent->IsCached) {
72
+                            $this->owner->AdvertCategoryID = $parent->AdvertCategoryID;
73
+                            $this->owner->IsCached = true;
74
+                            $this->owner->write();
75
+                            $result = $this->owner->AdvertCategoryID;
76
+                            break;
77
+                        }
78 78
 
79
-						$parent = SiteTree::get()->byId($parent->ParentID);
80
-						if (!$parent) {
81
-							break;
82
-						}
83
-					}
84
-				}
85
-			}
79
+                        $parent = SiteTree::get()->byId($parent->ParentID);
80
+                        if (!$parent) {
81
+                            break;
82
+                        }
83
+                    }
84
+                }
85
+            }
86 86
 			
87
-		}
87
+        }
88 88
 
89
-		return $result;
90
-	}
89
+        return $result;
90
+    }
91 91
 
92 92
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -19,10 +19,10 @@  discard block
 block discarded – undo
19 19
   /*
20 20
   Add a Location tab containing the map
21 21
   */
22
-  public function updateCMSFields( FieldList $fields ) {
22
+  public function updateCMSFields(FieldList $fields) {
23 23
   	$categoryfield = new DropdownField('AdvertCategoryID', 'Category', AdvertCategory::get()->sort('Title')->map('ID', 'Title'));
24 24
     $categoryfield->setEmptyString('(Select one)');
25
-    $fields->addFieldToTab( "Root.AdvertCategory", $categoryfield);
25
+    $fields->addFieldToTab("Root.AdvertCategory", $categoryfield);
26 26
   }
27 27
 
28 28
   /*
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 
57 57
 		// if the record is not marked as cached, see if it has a category
58 58
 		if (!$this->owner->IsCached) {
59
-			if($this->owner->AdvertCategoryID > 0) {
59
+			if ($this->owner->AdvertCategoryID > 0) {
60 60
 				$this->owner->CachedAdvertCategoryID = $this->owner->AdvertCategoryID;
61 61
 				$this->owner->IsCached = true;
62 62
 				$this->owner->write;
Please login to merge, or discard this patch.