View source
<?php
define('CCK_LIST_DEFAULT_ROWS', 5);
function cck_list_field_info() {
return array(
'list' => array(
'label' => t('List'),
'description' => t('Defines a textarea field that outputs data in an list'),
'settings' => array(
'rows' => CCK_LIST_DEFAULT_ROWS,
),
'default_widget' => 'text_textarea',
'default_formatter' => 'list_unordered',
),
);
}
function cck_list_field_widget_info() {
return array(
'cck_list_textarea' => array(
'label' => t('Text area'),
'field types' => array(
'list',
),
'behaviors' => array(
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
'default value' => FIELD_BEHAVIOR_NONE,
),
'settings' => array(
'rows' => CCK_LIST_DEFAULT_ROWS,
),
),
);
}
function cck_list_field_formatter_info() {
return array(
'list_ordered' => array(
'label' => t('Ordered List'),
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
'field types' => array(
'list',
),
),
'list_unordered' => array(
'label' => t('Unordered List'),
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
'field types' => array(
'list',
),
),
);
}
function cck_list_field_is_empty($item, $field) {
if (empty($item['list'])) {
return TRUE;
}
return FALSE;
}
function cck_list_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
$formatter = $display['type'];
switch ($formatter) {
case 'list_unordered':
$type = 'ul';
break;
case 'list_ordered':
$type = 'ol';
break;
}
foreach ($items as $delta => $item) {
if (!empty($item['list'])) {
$flatArray = explode("\n", $item['list']);
$flatArray = array_map('trim', $flatArray);
$flatArray = check_plain($flatArray);
$nestedArray = array();
foreach ($flatArray as $key => $value) {
$current =& $nestedArray;
if (preg_match('/^[-]+/', $value, $matches)) {
$level = drupal_strlen($matches[0]);
while ($level > 0) {
$value = drupal_substr($value, 1);
$last =& $current[count($current) - 1];
$current =& $last['children'];
--$level;
}
}
$current[] = array(
$value,
);
}
if (count($nestedArray) > 0) {
$attributes = array();
if (!empty($instance['widget']['settings']['css_id'])) {
$attributes['id'] = $instance['widget']['settings']['css_id'] . '-' . $instance['id'];
}
if (!empty($instance['widget']['settings']['css_class'])) {
$attributes['class'] = $instance['widget']['settings']['css_class'];
}
$element[$delta] = array(
'#markup' => theme('item_list', array(
'items' => $nestedArray,
'type' => $type,
'attributes' => $attributes,
)),
);
}
}
}
return $element;
}
function cck_list_field_widget_settings_form($field, $instance) {
$form = array();
$form['rows'] = array(
'#type' => 'textfield',
'#title' => t('Number of Rows'),
'#default_value' => isset($instance['widget']['settings']['rows']) ? $instance['widget']['settings']['rows'] : CCK_LIST_DEFAULT_ROWS,
'#required' => TRUE,
'#element_validate' => array(
'_element_validate_integer_positive',
),
);
$form['css_id'] = array(
'#type' => 'textfield',
'#title' => t('CSS ID'),
'#description' => t('Specify an ID to be assigned to the table element.') . '<br />' . t('The node ID will be appended to keep the ID unique.'),
'#default_value' => isset($instance['widget']['settings']['css_id']) ? $instance['widget']['settings']['css_id'] : '',
'#field_suffix' => '-##',
);
$form['css_class'] = array(
'#type' => 'textfield',
'#title' => t('CSS Class'),
'#description' => t('Specify a class to be added to the table element.'),
'#default_value' => isset($instance['widget']['settings']['css_class']) ? $instance['widget']['settings']['css_class'] : '',
);
return $form;
}
function cck_list_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $base) {
if (!empty($instance['description'])) {
$description = t($instance['description']);
}
else {
$description = t('Enter list data, one row per line. ' . 'To nest a list item add a hypen to the beginning. ' . 'To nest list item N times, add N hypens to the beginning of the line.');
}
$element = $base;
$element['list'] = array(
'#type' => 'textarea',
'#default_value' => isset($items[$delta]['list']) ? $items[$delta]['list'] : NULL,
'#rows' => $instance['widget']['settings']['rows'],
'#description' => $description,
);
return $element;
}
function cck_list_field_widget_error($element, $error, $form, &$form_state) {
form_error($element['value'], $error['message']);
}
function cck_list_content_migrate_instance_alter(&$instance_value, &$field_value) {
if ($field_value['module'] == 'cck_list') {
foreach ($instance_value['display'] as $context => $settings) {
if (in_array($instance_value['display'][$context]['type'], array(
'list_unordered',
'list_ordered',
))) {
$instance_value['display'][$context]['type'] = 'cck_list_' . $instance_value['display'][$context]['type'];
}
}
}
}