summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.txt2
-rw-r--r--modules/filter/filter.module28
-rw-r--r--modules/filter/filter.test9
3 files changed, 36 insertions, 3 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index c94678dab..34441e214 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -34,6 +34,8 @@ Drupal 7.0, xxxx-xx-xx (development version)
* Highlight duplicate URL aliases.
* Renamed "input formats" to "text formats".
* Added configurable ability for users to cancel their own accounts.
+ * Added optional filter that can use [internal:node/123] to link to internal
+ pages.
- Performance:
* Improved performance on uncached page views by loading multiple core
objects in a single database query.
diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index 0fe072bd5..5198f7d74 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -281,7 +281,8 @@ function filter_filter_tips($delta, $format, $long = FALSE) {
case 4:
return t('No HTML tags allowed');
break;
-
+ case 5:
+ return t('Use [internal:foo/bar] to get a link to the internal page <em>foo/bar</em>.');
}
}
@@ -605,7 +606,14 @@ function theme_filter_guidelines($format) {
function filter_filter($op, $delta = 0, $format = -1, $text = '') {
switch ($op) {
case 'list':
- return array(0 => t('Limit allowed HTML tags'), 1 => t('Convert line breaks'), 2 => t('Convert URLs into links'), 3 => t('Correct broken HTML'), 4 => t('Escape all HTML'));
+ return array(
+ 0 => t('Limit allowed HTML tags'),
+ 1 => t('Convert line breaks'),
+ 2 => t('Convert URLs into links'),
+ 3 => t('Correct broken HTML'),
+ 4 => t('Escape all HTML'),
+ 5 => t('Create internal URLs'),
+ );
case 'description':
switch ($delta) {
@@ -619,6 +627,8 @@ function filter_filter($op, $delta = 0, $format = -1, $text = '') {
return t('Corrects faulty and chopped off HTML in postings.');
case 4:
return t('Escapes all HTML tags, so they will be visible instead of being effective.');
+ case 5:
+ return t('Formats [internal:node/1234] as a URL.');
default:
return;
}
@@ -635,6 +645,8 @@ function filter_filter($op, $delta = 0, $format = -1, $text = '') {
return _filter_htmlcorrector($text);
case 4:
return trim(check_plain($text));
+ case 5:
+ return _filter_internal($text);
default:
return $text;
}
@@ -854,6 +866,18 @@ function _filter_url_trim($text, $length = NULL) {
}
/**
+ * Turn [internal:foo] into url(foo).
+ *
+ * @param $text
+ * The text to apply the filter on.
+ * @return
+ * The filtered text.
+ */
+function _filter_internal($text) {
+ return preg_replace('/\[internal:([^\]]+)\]/e', "url('\\1')", $text);
+}
+
+/**
* Convert line breaks into <p> and <br> in an intelligent fashion.
* Based on: http://photomatt.net/scripts/autop
*/
diff --git a/modules/filter/filter.test b/modules/filter/filter.test
index 344737732..10c8f24f2 100644
--- a/modules/filter/filter.test
+++ b/modules/filter/filter.test
@@ -184,7 +184,7 @@ class FilterTestCase extends DrupalWebTestCase {
function getInfo() {
return array(
'name' => t('Core filters'),
- 'description' => t('Filter each filter individually: Convert URLs into links, Convert line breaks, Correct broken HTML, Escape all HTML, Limit allowed HTML tags.'),
+ 'description' => t('Filter each filter individually: Convert URLs into links, Convert line breaks, Correct broken HTML, Escape all HTML, Limit allowed HTML tags, check the internal filter.'),
'group' => t('Filter'),
);
}
@@ -233,4 +233,11 @@ class FilterTestCase extends DrupalWebTestCase {
$this->drupalPost('admin/settings/filter/delete/' . $format->format, array(), t('Delete'));
}
}
+
+ /**
+ * Unit test for the internal link filter.
+ */
+ function testInternalFilter() {
+ $this->assertEqual(_filter_internal('[internal:foo/bar] [internal:foo2/bar2]'), url('foo/bar') . ' ' . url('foo2/bar2'), t('The internal filter works'));
+ }
}