Index: composite.module
===================================================================
--- composite.module (revision 275)
+++ composite.module (working copy)
@@ -42,12 +42,12 @@
}
// Helper function: Filter out properties, fill in 'info' field
-function _composite_references_preprocess($original, $zones) {
+function _composite_references_preprocess($original, $zones, $node) {
// Build a list of references, also generating labels in the process
$references = array();
foreach (element_children($original) as $id) {
$reference = $original[$id];
- composite_invoke_referenceapi($reference, 'info');
+ composite_invoke_referenceapi($reference, 'info', $node);
$references[$id] = $reference;
}
Index: composite.pages.inc
===================================================================
--- composite.pages.inc (revision 275)
+++ composite.pages.inc (working copy)
@@ -166,7 +166,7 @@
$form['vid'] = array('#type' => 'value', '#value' => $node->vid);
// Composite references
- $references = _composite_references_preprocess($node->composite_references, $layout_zones);
+ $references = _composite_references_preprocess($node->composite_references, $layout_zones, $node);
_composite_compare('reset-zones', $layout_zones);
usort($references, '_composite_compare');
Index: modules/content/composite_cck.module
===================================================================
--- modules/content/composite_cck.module (revision 275)
+++ modules/content/composite_cck.module (working copy)
@@ -71,21 +71,39 @@
// Special: If this content type has a body, add it as a field
$node_content_type = node_get_types('type', $node);
if ($node_content_type->has_body) {
- $options['body'] = t('Node: Body'); // array('@label' => check_plain($node_content_type->body_label)));
+ $element['value'] = $node->body;
+ $preview = _composite_cck_preview_element($element);
+ if (!empty($preview)) {
+ $options ['body'] = t('!preview
Node: Body', array('!preview' => $preview)); // array('@label' => check_plain($node_content_type->body_label)));
+ }
+ else {
+ $options['body'] = t('Node: Body'); // array('@label' => check_plain($node_content_type->body_label)));
+ }
}
- // Get a list of available fields
+ // Get a list of individual field values for multi valued fields or single fields
foreach ($fields as $field => $field_info) {
- $options[$field] = t('Field: @label', array('@label' => $field_info['widget']['label']));
- }
-
- // Get a list of individual field values for multi valued fields
- foreach ($fields as $field => $field_info) {
+ $item = $node->$field;
if ($field_info['multiple']) {
foreach ($node->$field as $delta => $field_value) {
- $options[$field . '-' . $delta] = t('Field value: @label @delta', array('@label' => $field_info['widget']['label'], '@delta' => "[$delta]"));
+ $preview = _composite_cck_preview_element($item[$delta]);
+ if (!empty($preview)) {
+ $options[$field . '-' . $delta] = t('!preview
Field value: @label @delta', array('@label' => $field_info['widget']['label'], '@delta' => "[$delta]", '!preview' => $preview));
+ }
+ else {
+ $options[$field . '-' . $delta] = t('Field value: @label @delta', array('@label' => $field_info['widget']['label'], '@delta' => "[$delta]"));
+ }
}
}
+ else {
+ $preview = _composite_cck_preview_element($item[0]);
+ if (!empty($preview)) {
+ $options[$field] = t('!preview
Field: @label', array('@label' => $field_info['widget']['label'], '!preview' => $preview));
+ }
+ else {
+ $options[$field] = t('Field: @label', array('@label' => $field_info['widget']['label']));
+ }
+ }
}
return $options;
@@ -99,7 +117,14 @@
switch ($op) {
// Generate and insert an informative human-readable string into ['info']
case 'info':
- $reference['info'] = t('Node: Body'); // array('@label' => check_plain($node_content_type->body_label)));
+ $element['value'] = $node->body;
+ $preview = _composite_cck_preview_element($element);
+ if (!empty($preview)) {
+ $reference['info'] = t('!preview
Node: Body', array('!preview' => $preview)); // array('@label' => check_plain($node_content_type->body_label)));
+ }
+ else {
+ $reference['info'] = t('Node: Body'); // array('@label' => check_plain($node_content_type->body_label)));
+ }
break;
// Return a rendering of the reference item
@@ -127,7 +152,14 @@
// Generate and insert an informative human-readable string into ['info']
case 'info':
$field = content_fields($reference['parent_field']);
- $reference['info'] = t('Field value: @label @delta', array('@label' => $field['widget']['label'], '@delta' => '['. $reference['delta'] .']'));
+ $item = $node->$reference['parent_field'];
+ $preview = _composite_cck_preview_element($item[$reference['delta']]);
+ if (empty($preview)) {
+ $reference['info'] = t('Field value: @label @delta', array('@label' => $field['widget']['label'], '@delta' => '['. $reference['delta'] .']'));
+ }
+ else {
+ $reference['info'] = t('!preview
Field value: @label @delta', array('@label' => $field['widget']['label'], '@delta' => '['. $reference['delta'] .']', '!preview' => $preview));
+ }
break;
// Return a rendering of the reference item
@@ -179,3 +211,34 @@
return $formatter_options;
}
+
+/**
+ * Take a cck element and return a preview string for use when sorting.
+ *
+ * @param $element
+ * The raw cck element, taken from node_load().
+ * @return
+ * A human-readable and sanitized preview string.
+ */
+function _composite_cck_preview_element($element) {
+ if (isset($element['value'])) {
+ if (strlen($element['value']) < 40 || is_int($element['value'])) {
+ return check_plain($element['value']);
+ }
+ else {
+ return check_plain(substr($element['value'], 0, 40)) .'...';
+ }
+ }
+ else if (isset($element['nid'])) {
+ $data = db_fetch_object(db_query("SELECT nid, title FROM {node} WHERE nid = %d", $element['nid']));
+ if (!empty($data->nid)) {
+ return l($data->title, "node/$data->nid");
+ }
+ }
+ else if (isset($element['uid'])) {
+ $data = db_fetch_object(db_query("SELECT uid, name FROM {users} WHERE uid = %d", $element['uid']));
+ if (!empty($data->uid)) {
+ return l($data->name, "user/$data->uid");
+ }
+ }
+}