Index: better-formats-defaults-admin-form.tpl.php =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/better_formats/better-formats-defaults-admin-form.tpl.php,v retrieving revision 1.3.2.1 diff -u -p -r1.3.2.1 better-formats-defaults-admin-form.tpl.php --- better-formats-defaults-admin-form.tpl.php 21 Feb 2009 03:40:33 -0000 1.3.2.1 +++ better-formats-defaults-admin-form.tpl.php 22 Mar 2009 15:12:58 -0000 @@ -20,8 +20,10 @@ // Add table javascript drupal_add_tabledrag('node-format-defaults', 'order', 'sibling', 'better-formats-role-node-weight'); drupal_add_tabledrag('comment-format-defaults', 'order', 'sibling', 'better-formats-role-comment-weight'); + drupal_add_tabledrag('cck-format-defaults', 'order', 'sibling', 'better-formats-role-cck-weight'); ?>
+
Node Defaults @@ -45,7 +47,8 @@
- + +
Comment Defaults @@ -69,5 +72,31 @@
+ + +
+ CCK Defaults + + + + + + + + + + + $data): ?> + + + + + + + + +
role; ?>format_select; ?>weight_select; ?>
+
+ Index: better_formats_cck.info =================================================================== RCS file: better_formats_cck.info diff -N better_formats_cck.info --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ better_formats_cck.info 22 Mar 2009 15:12:58 -0000 @@ -0,0 +1,7 @@ +; $Id: better_formats_cck.info + +name = Better Formats CCK +description = "Adds better format functionality to individual CCK textfields" +core = 6.x +dependencies[] = text +dependencies[] = better_formats \ No newline at end of file Index: better_formats_cck.module =================================================================== RCS file: better_formats_cck.module diff -N better_formats_cck.module --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ better_formats_cck.module 22 Mar 2009 15:12:58 -0000 @@ -0,0 +1,368 @@ +format] = $format->name; + } + + $key = 'better_formats'; + $form['widget'][$key] = array( + '#type' => 'fieldset', + '#title' => t('Input format settings'), + '#access' => user_access('administer filters'), + '#collapsible' => TRUE, + // Setting collapsed to false because the wieght will not be hidden otherwise + // the fieldset will be collapsed via JS if enabled. + '#collapsed' => FALSE, + '#attributes' => array('class' => 'input-format-settings'), + ); + $allowed_key = $key . '_allowed'; + $form['widget'][$key][$allowed_key] = array( + '#type' => 'checkboxes', + '#title' => t('Allowed formats'), + '#default_value' => variable_get($allowed_key . '_cck_' . $field_name, array()), + '#options' => $format_boxes, + '#description' => t('Limit the formats users have to choose from even if they have permission to use that format. This will NOT allow a user to use a format they do not have access rights to use. It will only hide additional formats they do have access rights to. If no boxes are checked, all formats that the user has permission to use will be allowed.'), + '#attributes' => array('class' => 'bf-allowed-formats'), + ); + + $dform = array( + '#tree' => TRUE, + '#theme' => 'better_formats_defaults_admin_form', + ); + + module_load_include('admin.inc', 'better_formats', 'better_formats_defaults'); + $nform = better_formats_get_role_default_fields('cck', $field_name); + if (count($nform) == 0) { + // get default values for node if not set already + $nform = better_formats_get_role_default_fields_cck(); + } + $form['widget'][$key]['better_formats_defaults'] = array_merge($dform, $nform); + + // Attach our validate and submit handlers. + $form['#validate'][] = 'better_formats_cck_text_widget_form_validate'; + $form['#submit'][] = 'better_formats_cck_text_widget_form_submit'; +} + +/** + * Handles validation of the addition to the content field edit form. + */ +function better_formats_cck_text_widget_form_validate($form, &$form_state) { + module_load_include('admin.inc', 'better_formats', 'better_formats_defaults'); + better_formats_defaults_admin_form_validate($form, $form_state); +} + +/** + * Handles submission of the addition to the content field edit form. + */ +function better_formats_cck_text_widget_form_submit($form, &$form_state) { + $field_name = $form['#field']['field_name']; + // Remove current db entries. + $sql = "DELETE FROM {better_formats_defaults} + WHERE type='cck/%s'"; + db_query($sql, $field_name); + + // Insert defualt values into DB. + $sql = "INSERT INTO {better_formats_defaults} + VALUES (%d, '%s', %d, %d, %d)"; + foreach ($form_state['values']['better_formats_defaults'] as $key => $values) { + list($type, $rid) = explode('-', $key); + db_query($sql, $rid, 'cck/' . $field_name, $values['format'], 2, $values['weight']); + } + + //save allowed values + variable_set('better_formats_allowed_cck_' .$field_name, $form_state['values']['better_formats_allowed']); +} + +/* + * Function to convert default node formats to cck formats + */ +function better_formats_get_role_default_fields_cck() { + $nform = better_formats_get_role_default_fields('node'); + $cckform = array(); + foreach ($nform as $key => $value) { + list($type, $fieldno) = explode('-', $key); + $cckform['cck-'. $fieldno] = $value; + } + return $cckform; +} + + +/* CCK hooks */ +/** + * Implementation of hook_widget_info(). + */ +function better_formats_cck_widget_info() { + return array( + 'text_textfield_better_formats' => array( + 'label' => t('Text field using Better Formats module'), + 'field types' => array('text'), + 'multiple values' => CONTENT_HANDLE_CORE, + 'callbacks' => array( + 'default value' => CONTENT_CALLBACK_DEFAULT, + ), + 'module' => 'better_formats_cck' + ), + 'text_textarea_better_formats' => array( + 'label' => t('Text area using Better Formats module'), + 'field types' => array('text'), + 'multiple values' => CONTENT_HANDLE_CORE, + 'callbacks' => array( + 'default value' => CONTENT_CALLBACK_DEFAULT, + ), + 'module' => 'better_formats_cck' + ), + ); +} + +/** + * Implementation of FAPI hook_elements(). + * + * Any FAPI callbacks needed for individual widgets can be declared here, + * and the element will be passed to those callbacks for processing. + * + * Drupal will automatically theme the element using a theme with + * the same name as the hook_elements key. + */ +function better_formats_cck_elements() { + return array( + 'text_textfield_better_formats' => array( + '#input' => TRUE, + '#columns' => array('value'), '#delta' => 0, + '#process' => array('better_formats_cck_textfield_process'), + '#autocomplete_path' => FALSE, + ), + 'text_textarea_better_formats' => array( + '#input' => TRUE, + '#columns' => array('value', 'format'), '#delta' => 0, + '#process' => array('better_formats_cck_textarea_process'), + '#filter_value' => FILTER_FORMAT_DEFAULT, + ), + ); +} + +/** + * Implementation of hook_widget_settings(). + */ +function better_formats_cck_widget_settings($op, $widget) { + + switch ($op) { + case 'form': + $form = array(); + $rows = (isset($widget['rows']) && is_numeric($widget['rows'])) ? $widget['rows'] : 5; + $size = (isset($widget['size']) && is_numeric($widget['size'])) ? $widget['size'] : 60; + if ($widget['type'] == 'text_textfield_better_formats') { + $form['rows'] = array('#type' => 'hidden', '#value' => $rows); + $form['size'] = array( + '#type' => 'textfield', + '#title' => t('Size of textfield'), + '#default_value' => $size, + '#element_validate' => array('_text_widget_settings_size_validate'), + '#required' => TRUE, + ); + } + else { + $form['rows'] = array( + '#type' => 'textfield', + '#title' => t('Rows'), + '#default_value' => $rows, + '#element_validate' => array('_text_widget_settings_row_validate'), + '#required' => TRUE, + ); + $form['size'] = array('#type' => 'hidden', '#value' => $size); + } + return $form; + + case 'save': + return array('rows', 'size'); + } +} + +/** + * Implementation of hook_widget(). + */ +function better_formats_cck_widget(&$form, &$form_state, $field, $items, $delta = 0) { + $element = array( + '#type' => $field['widget']['type'], + '#default_value' => isset($items[$delta]) ? $items[$delta] : '', + ); + return $element; +} + +/** + * Process an individual element. + * + * Build the form element. When creating a form using FAPI #process, + * note that $element['#value'] is already set. + * + * The $fields array is in $form['#field_info'][$element['#field_name']]. + */ +function better_formats_cck_textfield_process($element, $edit, $form_state, $form) { + $field = $form['#field_info'][$element['#field_name']]; + $field_key = $element['#columns'][0]; + $delta = $element['#delta']; + $element[$field_key] = array( + '#type' => 'textfield', + '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL, + '#autocomplete_path' => $element['#autocomplete_path'], + '#size' => !empty($field['widget']['size']) ? $field['widget']['size'] : 60, + '#attributes' => array('class' => 'text'), + // The following values were set by the content module and need + // to be passed down to the nested element. + '#title' => $element['#title'], + '#description' => $element['#description'], + '#required' => $element['#required'], + '#field_name' => $element['#field_name'], + '#type_name' => $element['#type_name'], + '#delta' => $element['#delta'], + '#columns' => $element['#columns'], + ); + + $element[$field_key]['#maxlength'] = !empty($field['max_length']) ? $field['max_length'] : NULL; + + if (!empty($field['text_processing'])) { + $filter_key = $element['#columns'][1]; + $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : FILTER_FORMAT_DEFAULT; + $parents = array_merge($element['#parents'] , array($filter_key)); + $element[$filter_key] = filter_form($format, 1, $parents); + } + + // Used so that hook_field('validate') knows where to flag an error. + $element['_error_element'] = array( + '#type' => 'value', + '#value' => implode('][', array_merge($element['#parents'], array($field_key))), + ); + better_formats_set_cck_format($element, $form_state); + return $element; +} + + +/** + * Process an individual element. + * + * Build the form element. When creating a form using FAPI #process, + * note that $element['#value'] is already set. + * + * The $fields array is in $form['#field_info'][$element['#field_name']]. + */ +function better_formats_cck_textarea_process($element, $edit, $form_state, $form) { + $field = $form['#field_info'][$element['#field_name']]; + $field_key = $element['#columns'][0]; + $element[$field_key] = array( + '#type' => 'textarea', + '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL, + '#rows' => !empty($field['widget']['rows']) ? $field['widget']['rows'] : 10, + '#weight' => 0, + // The following values were set by the content module and need + // to be passed down to the nested element. + '#title' => $element['#title'], + '#description' => $element['#description'], + '#required' => $element['#required'], + '#field_name' => $element['#field_name'], + '#type_name' => $element['#type_name'], + '#delta' => $element['#delta'], + '#columns' => $element['#columns'], + ); + + if (!empty($field['text_processing'])) { + $filter_key = (count($element['#columns']) == 2) ? $element['#columns'][1] : 'format'; + $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : FILTER_FORMAT_DEFAULT; + $parents = array_merge($element['#parents'] , array($filter_key)); + $element[$filter_key] = filter_form($format, 1, $parents); + } + + // Used so that hook_field('validate') knows where to flag an error. + $element['_error_element'] = array( + '#type' => 'value', + '#value' => implode('][', array_merge($element['#parents'], array($field_key))), + ); + better_formats_set_cck_format($element, $form_state); + return $element; +} + +/** + * FAPI theme for an individual text elements. + * + * The textfield or textarea is already rendered by the + * textfield or textarea themes and the html output + * lives in $element['#children']. Override this theme to + * make custom changes to the output. + * + * $element['#field_name'] contains the field name + * $element['#delta] is the position of this element in the group + */ +function better_formats_cck_theme() { + return array( + 'text_textarea_better_formats' => array( + 'arguments' => array('element' => NULL), + ), + 'text_textfield_better_formats' => array( + 'arguments' => array('element' => NULL), + ), + ); +} + +function theme_text_textarea_better_formats($element) { + return $element['#children']; +} + +function theme_text_textfield_better_formats($element) { + return $element['#children']; +} + +function better_formats_set_cck_format(&$element, $form_state) { + if (isset($element['format'])) { + $filter_key = (count($element['#columns']) == 2) ? $element['#columns'][1] : 'format'; + $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : $element['#default_value'][$filter_key]; + $parents = array_merge($element['#parents'] , array($filter_key)); + $default = better_formats_get_default_format('cck', $element['#field_name']); + + // Overwrite format default if new node. + if (!isset($form_state['values']['nid']) || !isset($format)) { + $format = $default; + } + $format = filter_resolve_format($format); + // Set default format for cck textarea. + $element['#value'][$filter_key] = $format; + // Set filter selection form. + $element[$filter_key] = better_formats_filter_form($format, $default, 'cck_' .$element['#field_name'], 1, $parents); + } +} \ No newline at end of file Index: better_formats_defaults.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/better_formats/better_formats_defaults.admin.inc,v retrieving revision 1.3.2.4 diff -u -p -r1.3.2.4 better_formats_defaults.admin.inc --- better_formats_defaults.admin.inc 25 Feb 2009 06:44:17 -0000 1.3.2.4 +++ better_formats_defaults.admin.inc 22 Mar 2009 15:12:58 -0000 @@ -213,7 +213,8 @@ function template_preprocess_better_form foreach (element_children($variables['form']) as $key) { $form_row = &$variables['form'][$key]; - $type = strpos($key, 'node-') === 0 ? 'node' : 'comment'; + //$type = strpos($key, 'node-') === 0 ? 'node' : 'comment'; + list($type, $other) = explode('-', $key); if (isset($form_row['role'])) { // Set special classes needed for table drag and drop.