summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-02-11 15:52:13 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-02-11 15:52:13 +0000
commit52195a6b1dd478875a93935df27d7bcacb14f289 (patch)
tree052233b34e4c6a9a0d6268426e650500817265f6
parent30ae1fb5596cc59e27717262a04e6447d27cebb4 (diff)
downloadbrdo-52195a6b1dd478875a93935df27d7bcacb14f289.tar.gz
brdo-52195a6b1dd478875a93935df27d7bcacb14f289.tar.bz2
#525622 by scor, catch, and yched: Allow Entity path callback to deal with options.
-rw-r--r--includes/common.inc12
-rw-r--r--modules/comment/comment.module11
-rw-r--r--modules/image/image.field.inc17
-rw-r--r--modules/node/node.module10
-rw-r--r--modules/system/system.api.php5
-rw-r--r--modules/taxonomy/taxonomy.module10
-rw-r--r--modules/user/user.module10
7 files changed, 47 insertions, 28 deletions
diff --git a/includes/common.inc b/includes/common.inc
index 5285e7311..cea7b037b 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -6567,19 +6567,21 @@ function entity_prepare_view($entity_type, $entities) {
}
/**
- * Returns the path to an entity.
+ * Returns the uri elements of an entity.
*
* @param $entity_type
* The entity type; e.g. 'node' or 'user'.
* @param $entity
* The entity for which to generate a path.
* @return
- * The path for the entity, or NULL if the entity has no page of its own.
+ * An array containing the 'path' and 'options' keys used to build the uri of
+ * the entity, and matching the signature of url(). NULL if the entity has no
+ * uri of its own.
*/
-function entity_path($entity_type, $entity) {
+function entity_uri($entity_type, $entity) {
$info = entity_get_info($entity_type);
- if (isset($info['path callback']) && function_exists($info['path callback'])) {
- return $info['path callback']($entity);
+ if (isset($info['uri callback']) && function_exists($info['uri callback'])) {
+ return $info['uri callback']($entity) + array('options' => array());
}
}
/**
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 66dec2e7c..ee0f0764f 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -97,7 +97,7 @@ function comment_entity_info() {
'comment' => array(
'label' => t('Comment'),
'base table' => 'comment',
- 'path callback' => 'comment_path',
+ 'uri callback' => 'comment_uri',
'fieldable' => TRUE,
'controller class' => 'CommentController',
'object keys' => array(
@@ -148,10 +148,13 @@ function comment_node_type_load($name) {
}
/**
- * Entity path callback.
+ * Entity uri callback.
*/
-function comment_path($comment) {
- return 'comment/' . $comment->cid;
+function comment_uri($comment) {
+ return array(
+ 'path' => 'comment/' . $comment->cid,
+ 'options' => array('fragment' => 'comment-' . $comment->cid),
+ );
}
/**
diff --git a/modules/image/image.field.inc b/modules/image/image.field.inc
index 1a9e5b1da..f1fc8993f 100644
--- a/modules/image/image.field.inc
+++ b/modules/image/image.field.inc
@@ -461,7 +461,7 @@ function image_field_formatter_view($obj_type, $object, $field, $instance, $lang
// Check if the formatter involves a link.
if (strpos($display['type'], 'image_link_content') === 0) {
- $path = entity_path($obj_type, $object);
+ $uri = entity_uri($obj_type, $object);
}
elseif (strpos($display['type'], 'image_link_file') === 0) {
$link_file = TRUE;
@@ -469,17 +469,20 @@ function image_field_formatter_view($obj_type, $object, $field, $instance, $lang
foreach ($items as $delta => $item) {
if (isset($link_file)) {
- $path = file_create_url($item['uri']);
+ $uri = array(
+ 'path' => file_create_url($item['uri']),
+ 'options' => array(),
+ );
}
$element[$delta] = array(
'#theme' => 'image_formatter',
'#item' => $item,
'#image_style' => isset($image_style) ? $image_style : '',
- '#path' => isset($path) ? $path : '',
+ '#path' => isset($uri) ? $uri : '',
);
}
- return $element;
+ return $element;
}
/**
@@ -502,7 +505,11 @@ function theme_image_formatter($variables) {
}
if ($variables['path']) {
- $output = l($output, $variables['path'], array('html' => TRUE));
+ $path = $variables['path']['path'];
+ $options = $variables['path']['options'];
+ // When displaying an image inside a link, the html option must be TRUE.
+ $options['html'] = TRUE;
+ $output = l($output, $path, $options);
}
return $output;
diff --git a/modules/node/node.module b/modules/node/node.module
index 536b303fb..6b5265b25 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -185,7 +185,7 @@ function node_entity_info() {
'controller class' => 'NodeController',
'base table' => 'node',
'revision table' => 'node_revision',
- 'path callback' => 'node_path',
+ 'uri callback' => 'node_uri',
'fieldable' => TRUE,
'object keys' => array(
'id' => 'nid',
@@ -243,10 +243,12 @@ function node_entity_info() {
}
/**
- * Entity path callback.
+ * Entity uri callback.
*/
-function node_path($node) {
- return 'node/' . $node->nid;
+function node_uri($node) {
+ return array(
+ 'path' => 'node/' . $node->nid,
+ );
}
/**
diff --git a/modules/system/system.api.php b/modules/system/system.api.php
index 8ebf9d6c0..2245f4c6b 100644
--- a/modules/system/system.api.php
+++ b/modules/system/system.api.php
@@ -66,8 +66,9 @@ function hook_hook_info() {
* static caching of entities during a page request. Defaults to TRUE.
* - load hook: The name of the hook which should be invoked by
* DrupalDefaultEntityController:attachLoad(), for example 'node_load'.
- * - path callback: A function taking an entity as argument and returning the
- * path to the entity.
+ * - uri callback: A function taking an entity as argument and returning the
+ * uri elements of the entity, e.g. 'path' and 'options'. The actual entity
+ * uri can be constructed by passing these elements to url().
* - fieldable: Set to TRUE if you want your entity type to be fieldable.
* - object keys: An array describing how the Field API can extract the
* information it needs from the objects of the type. Elements:
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 478a3fffe..d976c4982 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -87,7 +87,7 @@ function taxonomy_entity_info() {
'label' => t('Taxonomy term'),
'controller class' => 'TaxonomyTermController',
'base table' => 'taxonomy_term_data',
- 'path callback' => 'taxonomy_term_path',
+ 'uri callback' => 'taxonomy_term_uri',
'fieldable' => TRUE,
'object keys' => array(
'id' => 'tid',
@@ -130,10 +130,12 @@ function taxonomy_entity_info() {
}
/**
- * Entity path callback.
+ * Entity uri callback.
*/
-function taxonomy_term_path($term) {
- return 'taxonomy/term/' . $term->tid;
+function taxonomy_term_uri($term) {
+ return array(
+ 'path' => 'taxonomy/term/' . $term->tid,
+ );
}
/**
diff --git a/modules/user/user.module b/modules/user/user.module
index 97de9a029..87ffe3a77 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -125,7 +125,7 @@ function user_entity_info() {
'label' => t('User'),
'controller class' => 'UserController',
'base table' => 'users',
- 'path callback' => 'user_path',
+ 'uri callback' => 'user_uri',
'fieldable' => TRUE,
'object keys' => array(
'id' => 'uid',
@@ -150,10 +150,12 @@ function user_entity_info() {
}
/**
- * Entity path callback.
+ * Entity uri callback.
*/
-function user_path($user) {
- return 'user/' . $user->uid;
+function user_uri($user) {
+ return array(
+ 'path' => 'user/' . $user->uid,
+ );
}
/**