t('Profile Fields'),
'content_types' => 'panels_profile_fields_content_type',
// only provides a single content type
'single' => TRUE,
'render callback' => 'panels_profile_fields_content',
'add callback' => 'panels_profile_fields_configure',
'edit callback' => 'panels_profile_fields_configure',
'title callback' => 'panels_profile_fields_configure_title',
);
}
return $items;
}
/**
* 'Render' callback for the 'profile fields' content type.
*/
function panels_profile_fields_content($conf, $panel_args, $context) {
$account = isset($context->data) ? drupal_clone($context->data) : NULL;
$block = new stdClass();
$block->module = 'profile fields';
if ($account) {
// Get the category from the options
$category = str_replace("_", " ", $conf['category']);
// Set the subject to the name of the category
$block->subject = $category;
// Put all the fields in the category into an array
$profile = profile_view_profile($account);
if (is_array($profile[$category])) {
foreach ($profile[$category] as $field) {
$vars[$field['class']]['title'] = $field['title'];
$vars[$field['class']]['value'] = $field['value'];
}
}
if (sizeof($vars) == 0) {
// Output the given empty text
$output = $conf['empty'];
}
else {
// Call the theme function with the field vars
$output = theme('profile_fields_pane', $category, $vars);
}
$block->content = $output;
$block->delta = $account->uid;
}
else {
$block->subject = $conf['category'];
$block->content = t('Profile content goes here.');
$block->delta = 'unknown';
}
return $block;
}
/**
* Theme the profile fields retrieved in panels_profile_fields_content
*/
function theme_profile_fields_pane($category, $vars) {
if (is_array($vars)) {
foreach ($vars as $class => $field) {
$output .= '
';
$output .= '- ' . $field['title'] . '
';
$output .= '- ' . $field['value'] . '
';
$output .= '
';
}
}
return $output;
}
/**
* Return all content types available.
*/
function panels_profile_fields_content_type() {
return array(
'description' => array(
'title' => t('Profile Category'),
'icon' => 'icon_user.png',
'path' => panels_get_path('content_types/user'),
'description' => t('Profile category contents.'),
'required context' => new panels_required_context(t('User'), 'user'),
'category' => array(t('User context'), -9),
),
);
}
/**
* Helper function : build the list of categories for the 'edit' form.
*/
function _panels_profile_fields_options() {
$cat_list = array();
$categories = profile_categories();
foreach ($categories as $key => $value) {
$cat_list[str_replace(" ", "_", $value['name'])] = $value['title'];
}
return $cat_list;
}
/**
* 'Edit' callback for the 'profile fields' content type.
*/
function panels_profile_fields_configure($id, $parents, $conf = array()) {
// Apply defaults
if (empty($conf)) {
$conf = array('title' => '', 'category' => '', 'empty' => '');
}
$form['category'] = array(
'#type' => 'radios',
'#title' => t('Which category'),
'#options' => _panels_profile_fields_options(),
'#default_value' => $conf['category'],
'#prefix' => '',
'#suffix' => '
',
);
$form['empty'] = array(
'#type' => 'textarea',
'#title' => 'Empty text',
'#description' => t('Text to display if category has no data. Note that title will not display unless overridden.'),
'#rows' => 5,
'#default_value' => $conf['empty'],
'#prefix' => '',
'#suffix' => '
',
);
return $form;
}
/**
* 'Title' callback for the 'profile fields' content type.
*/
function panels_profile_fields_configure_title($conf, $context) {
return t('"@s" profile fields', array('@s' => $conf['category']));
}