|
1 Fix Reverse Proxy Support: |
|
2 http://drupal.org/node/244593 |
|
3 http://drupal.org/files/issues/drupal_80.patch |
|
4 |
|
5 Index: includes/bootstrap.inc |
|
6 --- includes/bootstrap.inc.orig 2008-02-11 15:36:21 +0100 |
|
7 +++ includes/bootstrap.inc 2008-04-09 20:47:49 +0200 |
|
8 @@ -272,6 +272,7 @@ |
|
9 */ |
|
10 function conf_init() { |
|
11 global $base_url, $base_path, $base_root; |
|
12 + global $base_url_local; |
|
13 |
|
14 // Export the following settings.php variables to the global namespace |
|
15 global $db_url, $db_prefix, $cookie_domain, $conf, $installed_profile, $update_free_access; |
|
16 @@ -723,9 +724,22 @@ |
|
17 * generate an equivalent using other environment variables. |
|
18 */ |
|
19 function request_uri() { |
|
20 + global $base_url; |
|
21 + global $base_url_local; |
|
22 |
|
23 if (isset($_SERVER['REQUEST_URI'])) { |
|
24 $uri = $_SERVER['REQUEST_URI']; |
|
25 + if (isset($base_url) && isset($base_url_local)) { |
|
26 + $parts = parse_url($base_url_local); |
|
27 + if ( strlen($uri) >= strlen($base_url_local) |
|
28 + && substr($uri, 0, strlen($base_url_local)) == $base_url_local) { |
|
29 + $uri = $base_url . substr($uri, strlen($base_url_local)); |
|
30 + } |
|
31 + elseif ( strlen($uri) >= strlen($parts["path"]) |
|
32 + && substr($uri, 0, strlen($parts["path"])) == $parts["path"]) { |
|
33 + $uri = $base_url . substr($uri, strlen($parts["path"])); |
|
34 + } |
|
35 + } |
|
36 } |
|
37 else { |
|
38 if (isset($_SERVER['argv'])) { |
|
39 @@ -792,6 +806,7 @@ |
|
40 } |
|
41 } |
|
42 // Prevent multiple slashes to avoid cross site requests via the FAPI. |
|
43 + if (substr($uri, 0, 1) == "/") |
|
44 $uri = '/'. ltrim($uri, '/'); |
|
45 |
|
46 return $uri; |
|
47 Index: sites/default/default.settings.php |
|
48 --- sites/default/default.settings.php.orig 2007-12-20 10:35:10 +0100 |
|
49 +++ sites/default/default.settings.php 2008-04-09 20:47:32 +0200 |
|
50 @@ -126,6 +126,24 @@ |
|
51 # $base_url = 'http://www.example.com'; // NO trailing slash! |
|
52 |
|
53 /** |
|
54 + * Local Base URL (optional). |
|
55 + * |
|
56 + * If you are running Drupal behind a reverse proxy, $base_url (see above) |
|
57 + * usually points to the URL of the reverse proxy. Drupal uses this for |
|
58 + * all sorts of external URLs. In order to correctly calculate sub-URLs |
|
59 + * below $base_url for embedded HTML forms, Drupal also has to know the |
|
60 + * URL on the local/origin server under which Drupal is contacted by the |
|
61 + * reverse proxy. This is what $base_url_local is for. |
|
62 + * |
|
63 + * Examples: |
|
64 + * $base_url_local = 'http://www.example.com:8080/drupal'; |
|
65 + * |
|
66 + * It is not allowed to have a trailing slash; Drupal will add it |
|
67 + * for you. |
|
68 + */ |
|
69 +# $base_url_local = 'http://www.example.com:8080/drupal'; // NO trailing slash! |
|
70 + |
|
71 +/** |
|
72 * PHP settings: |
|
73 * |
|
74 * To see what PHP settings are possible, including whether they can |
|
75 |
|
76 ----------------------------------------------------------------------------- |
|
77 |
|
78 1. Support HTTP Proxies (mainly for update checks, RSS fetching, etc) |
|
79 http://drupal.org/node/7881 |
|
80 http://drupal.org/files/issues/proxy_11.patch |
|
81 (post-adjusted and improved by RSE) |
|
82 |
|
83 2. Fix CSS Cache Building Procedure |
|
84 http://drupal.org/node/275381 |
|
85 http://drupal.org/files/issues/drupal-css-cache-building.patch |
|
86 (created by RSE) |
|
87 |
|
88 Index: includes/common.inc |
|
89 --- includes/common.inc.orig 2008-04-09 23:11:44 +0200 |
|
90 +++ includes/common.inc 2008-06-26 20:16:16 +0200 |
|
91 @@ -439,13 +439,27 @@ |
|
92 case 'http': |
|
93 $port = isset($uri['port']) ? $uri['port'] : 80; |
|
94 $host = $uri['host'] . ($port != 80 ? ':'. $port : ''); |
|
95 - $fp = @fsockopen($uri['host'], $port, $errno, $errstr, 15); |
|
96 + if (variable_get('proxy_server', '') != '') { |
|
97 + $proxy_server = variable_get('proxy_server', ''); |
|
98 + $proxy_port = variable_get('proxy_port', 8080); |
|
99 + $fp = @fsockopen($proxy_server, $proxy_port, $errno, $errstr, 15); |
|
100 + } |
|
101 + else { |
|
102 + $fp = @fsockopen($uri['host'], $port, $errno, $errstr, 15); |
|
103 + } |
|
104 break; |
|
105 case 'https': |
|
106 // Note: Only works for PHP 4.3 compiled with OpenSSL. |
|
107 $port = isset($uri['port']) ? $uri['port'] : 443; |
|
108 $host = $uri['host'] . ($port != 443 ? ':'. $port : ''); |
|
109 - $fp = @fsockopen('ssl://'. $uri['host'], $port, $errno, $errstr, 20); |
|
110 + if (variable_get('proxy_server', '') != '') { |
|
111 + $proxy_server = variable_get('proxy_server', ''); |
|
112 + $proxy_port = variable_get('proxy_port', 8080); |
|
113 + $fp = @fsockopen($proxy_server, $proxy_port, $errno, $errstr, 15); |
|
114 + } |
|
115 + else { |
|
116 + $fp = @fsockopen('ssl://'. $uri['host'], $port, $errno, $errstr, 20); |
|
117 + } |
|
118 break; |
|
119 default: |
|
120 $result->error = 'invalid schema '. $uri['scheme']; |
|
121 @@ -462,9 +476,14 @@ |
|
122 } |
|
123 |
|
124 // Construct the path to act on. |
|
125 - $path = isset($uri['path']) ? $uri['path'] : '/'; |
|
126 - if (isset($uri['query'])) { |
|
127 - $path .= '?'. $uri['query']; |
|
128 + if (variable_get('proxy_server', '') != '') { |
|
129 + $path = $url; |
|
130 + } |
|
131 + else { |
|
132 + $path = isset($uri['path']) ? $uri['path'] : '/'; |
|
133 + if (isset($uri['query'])) { |
|
134 + $path .= '?'. $uri['query']; |
|
135 + } |
|
136 } |
|
137 |
|
138 // Create HTTP request. |
|
139 @@ -482,6 +501,14 @@ |
|
140 $defaults['Authorization'] = 'Authorization: Basic '. base64_encode($uri['user'] . (!empty($uri['pass']) ? ":". $uri['pass'] : '')); |
|
141 } |
|
142 |
|
143 + // If the proxy server required a username then attempt to authenticate with it |
|
144 + if (variable_get('proxy_username', '') != '') { |
|
145 + $username = variable_get('proxy_username', ''); |
|
146 + $password = variable_get('proxy_password', ''); |
|
147 + $auth_string = base64_encode($username . ($password != '' ? ':'. $password : '')); |
|
148 + $defaults['Proxy-Authorization'] = 'Proxy-Authorization: Basic '. $auth_string ."\r\n"; |
|
149 + } |
|
150 + |
|
151 foreach ($headers as $header => $value) { |
|
152 $defaults[$header] = $header .': '. $value; |
|
153 } |
|
154 Index: modules/system/system.admin.inc |
|
155 --- modules/system/system.admin.inc.orig 2008-03-25 12:58:16 +0100 |
|
156 +++ modules/system/system.admin.inc 2008-04-24 11:43:07 +0200 |
|
157 @@ -1363,6 +1363,65 @@ |
|
158 } |
|
159 |
|
160 /** |
|
161 + * Form builder; Configure the site proxy settings. |
|
162 + * |
|
163 + * @ingroup forms |
|
164 + * @see system_settings_form() |
|
165 + */ |
|
166 +function system_proxy_settings() { |
|
167 + |
|
168 + $form['forward_proxy'] = array( |
|
169 + '#type' => 'fieldset', |
|
170 + '#title' => t('Forward proxy settings'), |
|
171 + '#description' => t('The proxy server used when Drupal needs to connect to other sites on the Internet.'), |
|
172 + ); |
|
173 + $form['forward_proxy']['proxy_server'] = array( |
|
174 + '#type' => 'textfield', |
|
175 + '#title' => t('Proxy host name'), |
|
176 + '#default_value' => variable_get('proxy_server', ''), |
|
177 + '#description' => t('The host name of the proxy server, eg. localhost. If this is empty Drupal will connect directly to the internet.') |
|
178 + ); |
|
179 + $form['forward_proxy']['proxy_port'] = array( |
|
180 + '#type' => 'textfield', |
|
181 + '#title' => t('Proxy port number'), |
|
182 + '#default_value' => variable_get('proxy_port', 8080), |
|
183 + '#description' => t('The port number of the proxy server, eg. 8080'), |
|
184 + ); |
|
185 + $form['forward_proxy']['proxy_username'] = array( |
|
186 + '#type' => 'textfield', |
|
187 + '#title' => t('Proxy username'), |
|
188 + '#default_value' => variable_get('proxy_username', ''), |
|
189 + '#description' => t('The username used to authenticate with the proxy server.'), |
|
190 + ); |
|
191 + $form['forward_proxy']['proxy_password'] = array( |
|
192 + '#type' => 'textfield', |
|
193 + '#title' => t('Proxy password'), |
|
194 + '#default_value' => variable_get('proxy_password', ''), |
|
195 + '#description' => t('The password used to connect to the proxy server. This is kept as plain text.', '') |
|
196 + ); |
|
197 + $form['#validate'][] = 'system_proxy_settings_validate'; |
|
198 + |
|
199 + return system_settings_form($form); |
|
200 +} |
|
201 + |
|
202 +/** |
|
203 + * Validate the submitted proxy form. |
|
204 + */ |
|
205 +function system_proxy_settings_validate($form, &$form_state) { |
|
206 + // Validate the proxy settings |
|
207 + $form_state['values']['proxy_server'] = trim($form_state['values']['proxy_server']); |
|
208 + if ($form_state['values']['proxy_server'] != '') { |
|
209 + // TCP allows the port to be between 0 and 65536 inclusive |
|
210 + if (!is_numeric($form_state['values']['proxy_port'])) { |
|
211 + form_set_error('proxy_port', t('The proxy port is invalid. It must be a number between 0 and 65535.')); |
|
212 + } |
|
213 + elseif ($form_state['values']['proxy_port'] < 0 || $form_state['values']['proxy_port'] >= 65536) { |
|
214 + form_set_error('proxy_port', t('The proxy port is invalid. It must be between 0 and 65535.')); |
|
215 + } |
|
216 + } |
|
217 +} |
|
218 + |
|
219 +/** |
|
220 * Form builder; Configure the site file handling. |
|
221 * |
|
222 * @ingroup forms |
|
223 Index: modules/system/system.module |
|
224 --- modules/system/system.module.orig 2008-04-09 23:11:49 +0200 |
|
225 +++ modules/system/system.module 2008-04-24 11:43:47 +0200 |
|
226 @@ -55,7 +55,7 @@ |
|
227 $output .= '<li>'. t('support for enabling and disabling <a href="@themes">themes</a>, which determine the design and presentation of your site. Drupal comes packaged with several core themes and additional contributed themes are available at the <a href="@drupal-themes">Drupal.org theme page</a>.', array('@themes' => url('admin/build/themes'), '@drupal-themes' => 'http://drupal.org/project/themes')) .'</li>'; |
|
228 $output .= '<li>'. t('a robust <a href="@cache-settings">caching system</a> that allows the efficient re-use of previously-constructed web pages and web page components. Drupal stores the pages requested by anonymous users in a compressed format; depending on your site configuration and the amount of your web traffic tied to anonymous visitors, Drupal\'s caching system may significantly increase the speed of your site.', array('@cache-settings' => url('admin/settings/performance'))) .'</li>'; |
|
229 $output .= '<li>'. t('a set of routine administrative operations that rely on a correctly-configured <a href="@cron">cron maintenance task</a> to run automatically. A number of other modules, including the feed aggregator, ping module and search also rely on <a href="@cron">cron maintenance tasks</a>. For more information, see the online handbook entry for <a href="@handbook">configuring cron jobs</a>.', array('@cron' => url('admin/reports/status'), '@handbook' => 'http://drupal.org/cron')) .'</li>'; |
|
230 - $output .= '<li>'. t('basic configuration options for your site, including <a href="@date-settings">date and time settings</a>, <a href="@file-system">file system settings</a>, <a href="@clean-url">clean URL support</a>, <a href="@site-info">site name and other information</a>, and a <a href="@site-maintenance">site maintenance</a> function for taking your site temporarily off-line.', array('@date-settings' => url('admin/settings/date-time'), '@file-system' => url('admin/settings/file-system'), '@clean-url' => url('admin/settings/clean-urls'), '@site-info' => url('admin/settings/site-information'), '@site-maintenance' => url('admin/settings/site-maintenance'))) .'</li></ul>'; |
|
231 + $output .= '<li>'. t('basic configuration options for your site, including <a href="@date-settings">date and time settings</a>, <a href="@file-system">file system settings</a>, <a href="@clean-url">clean URL support</a>, <a href="@proxy-server">proxy server settings</a>, a href="@site-info">site name and other information</a>, and a <a href="@site-maintenance">site maintenance</a> function for taking your site temporarily off-line.', array('@date-settings' => url('admin/settings/date-time'), '@file-system' => url('admin/settings/file-system'), '@clean-url' => url('admin/settings/clean-urls'), '@site-info' => url('admin/settings/site-information'), '@site-maintenance' => url('admin/settings/site-maintenance'))) .'</li></ul>'; |
|
232 $output .= '<p>'. t('For more information, see the online handbook entry for <a href="@system">System module</a>.', array('@system' => 'http://drupal.org/handbook/modules/system/')) .'</p>'; |
|
233 return $output; |
|
234 case 'admin': |
|
235 @@ -406,6 +406,14 @@ |
|
236 'access arguments' => array('administer site configuration'), |
|
237 'file' => 'system.admin.inc', |
|
238 ); |
|
239 + $items['admin/settings/proxy'] = array( |
|
240 + 'title' => 'Proxy server', |
|
241 + 'description' => 'Configure settings when the site is behind a proxy server.', |
|
242 + 'page callback' => 'drupal_get_form', |
|
243 + 'page arguments' => array('system_proxy_settings'), |
|
244 + 'access arguments' => array('administer site configuration'), |
|
245 + 'file' => 'system.admin.inc', |
|
246 + ); |
|
247 $items['admin/settings/file-system'] = array( |
|
248 'title' => 'File system', |
|
249 'description' => 'Tell Drupal where to store uploaded files and how they are accessed.', |
|
250 |
|
251 ----------------------------------------------------------------------------- |
|
252 |
|
253 Disable "Update notifications" check by default during installation. |
|
254 |
|
255 Index: install.php |
|
256 --- install.php.orig 2008-02-08 23:00:45 +0100 |
|
257 +++ install.php 2008-05-09 13:18:09 +0200 |
|
258 @@ -1069,7 +1069,7 @@ |
|
259 '#type' => 'checkboxes', |
|
260 '#title' => st('Update notifications'), |
|
261 '#options' => array(1 => st('Check for updates automatically')), |
|
262 - '#default_value' => array(1), |
|
263 + '#default_value' => array(), |
|
264 '#description' => st('With this option enabled, Drupal will notify you when new releases are available. This will significantly enhance your site\'s security and is <strong>highly recommended</strong>. This requires your site to periodically send anonymous information on its installed components to <a href="@drupal">drupal.org</a>. For more information please see the <a href="@update">update notification information</a>.', array('@drupal' => 'http://drupal.org', '@update' => 'http://drupal.org/handbook/modules/update')), |
|
265 '#weight' => 15, |
|
266 ); |
|
267 |
|
268 ----------------------------------------------------------------------------- |
|
269 |
|
270 No need to always expand the "Menu settings" on node edit pages. |
|
271 |
|
272 Index: modules/menu/menu.module |
|
273 --- modules/menu/menu.module.orig 2008-04-09 23:11:48 +0200 |
|
274 +++ modules/menu/menu.module 2008-05-16 20:03:48 +0200 |
|
275 @@ -366,7 +366,7 @@ |
|
276 '#title' => t('Menu settings'), |
|
277 '#access' => user_access('administer menu'), |
|
278 '#collapsible' => TRUE, |
|
279 - '#collapsed' => FALSE, |
|
280 + '#collapsed' => TRUE, |
|
281 '#tree' => TRUE, |
|
282 '#weight' => -2, |
|
283 '#attributes' => array('class' => 'menu-item-form'), |
|
284 |
|
285 ----------------------------------------------------------------------------- |
|
286 |
|
287 Use a larger text-area on node edit pages. |
|
288 |
|
289 Index: modules/node/node.pages.inc |
|
290 --- modules/node/node.pages.inc.orig 2008-02-27 20:44:44 +0100 |
|
291 +++ modules/node/node.pages.inc 2008-05-16 20:06:45 +0200 |
|
292 @@ -287,7 +287,8 @@ |
|
293 '#type' => 'textarea', |
|
294 '#title' => check_plain($label), |
|
295 '#default_value' => $include ? $node->body : ($node->teaser . $node->body), |
|
296 - '#rows' => 20, |
|
297 + '#rows' => 30, |
|
298 + '#cols' => 80, |
|
299 '#required' => ($word_count > 0), |
|
300 ); |
|
301 |
|
302 ----------------------------------------------------------------------------- |
|
303 |
|
304 Avoid incorrect ordering of BLOG entries by removing the |
|
305 db_rewrite_sql() calls which seem to introduce a wrong ordering. |
|
306 |
|
307 Index: modules/blog/blog.module |
|
308 --- modules/blog/blog.module.orig 2008-05-19 09:27:35 +0200 |
|
309 +++ modules/blog/blog.module 2008-07-29 21:20:42 +0200 |
|
310 @@ -182,13 +182,13 @@ |
|
311 * Helper function to determine if a user has blog posts already. |
|
312 */ |
|
313 function _blog_post_exists($account) { |
|
314 - return (bool)db_result(db_query_range(db_rewrite_sql("SELECT 1 FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1"), $account->uid, 0, 1)); |
|
315 + return (bool)db_result(db_query_range("SELECT 1 FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1", $account->uid, 0, 1)); |
|
316 } |
|
317 |
|
318 /** |
|
319 * Implementation of hook_block(). |
|
320 * |
|
321 - * Displays the most recent 10 blog titles. |
|
322 + * Displays the most recent 5 blog titles. |
|
323 */ |
|
324 function blog_block($op = 'list', $delta = 0) { |
|
325 global $user; |
|
326 @@ -198,7 +198,7 @@ |
|
327 } |
|
328 else if ($op == 'view') { |
|
329 if (user_access('access content')) { |
|
330 - $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10); |
|
331 + $result = db_query_range("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC", 0, 5); |
|
332 if ($node_title_list = node_title_list($result)) { |
|
333 $block['content'] = $node_title_list; |
|
334 $block['content'] .= theme('more_link', url('blog'), t('Read the latest blog entries.')); |
|
335 Index: modules/blog/blog.pages.inc |
|
336 --- modules/blog/blog.pages.inc.orig 2009-09-14 17:08:00 +0200 |
|
337 +++ modules/blog/blog.pages.inc 2009-09-19 08:53:18 +0200 |
|
338 @@ -25,7 +25,7 @@ |
|
339 |
|
340 $output = theme('item_list', $items); |
|
341 |
|
342 - $result = pager_query(db_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid); |
|
343 + $result = pager_query("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC", variable_get('default_nodes_main', 10), 0, NULL, $account->uid); |
|
344 $has_posts = FALSE; |
|
345 |
|
346 while ($node = db_fetch_object($result)) { |
|
347 @@ -64,7 +64,7 @@ |
|
348 |
|
349 $output = theme('item_list', $items); |
|
350 |
|
351 - $result = pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10)); |
|
352 + $result = pager_query("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC", variable_get('default_nodes_main', 10)); |
|
353 $has_posts = FALSE; |
|
354 |
|
355 while ($node = db_fetch_object($result)) { |
|
356 @@ -87,7 +87,7 @@ |
|
357 * Menu callback; displays an RSS feed containing recent blog entries of a given user. |
|
358 */ |
|
359 function blog_feed_user($account) { |
|
360 - $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $account->uid, 0, variable_get('feed_default_items', 10)); |
|
361 + $result = db_query_range("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.created DESC", $account->uid, 0, variable_get('feed_default_items', 10)); |
|
362 $channel['title'] = t("!name's blog", array('!name' => $account->name)); |
|
363 $channel['link'] = url('blog/'. $account->uid, array('absolute' => TRUE)); |
|
364 |
|
365 @@ -102,7 +102,7 @@ |
|
366 * Menu callback; displays an RSS feed containing recent blog entries of all users. |
|
367 */ |
|
368 function blog_feed_last() { |
|
369 - $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, variable_get('feed_default_items', 10)); |
|
370 + $result = db_query_range("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC", 0, variable_get('feed_default_items', 10)); |
|
371 $channel['title'] = t('!site_name blogs', array('!site_name' => variable_get('site_name', 'Drupal'))); |
|
372 $channel['link'] = url('blog', array('absolute' => TRUE)); |
|
373 |