diff -u flexinode/field_textfield.inc flexinode-patch/field_textfield.inc --- flexinode/field_textfield.inc 2006-03-24 13:04:21.410646024 -0500 +++ flexinode-patch/field_textfield.inc 2006-03-24 13:12:10.481336440 -0500 @@ -44,6 +44,9 @@ )); } +function flexinode_field_textfield_can_be_title() { + return 'TRUE'; +} /** * @addtogroup themeable diff -u flexinode/field_timestamp.inc flexinode-patch/field_timestamp.inc --- flexinode/field_timestamp.inc 2006-03-24 13:04:54.562606160 -0500 +++ flexinode-patch/field_timestamp.inc 2006-03-24 13:12:42.169519104 -0500 @@ -5,6 +5,10 @@ return t('date/time'); } +function flexinode_field_timestamp_can_be_title() { + return 'TRUE'; +} + function flexinode_field_timestamp_form($field, $node) { $fieldname = 'flexinode_'. $field->field_id; return flexinode_form_date($node->$fieldname, $field); diff -u flexinode.module?rev=1.67 flexinode.module.7patch --- flexinode.module?rev=1.67 2006-04-03 17:20:47.186674432 -0400 +++ flexinode.module.7patch 2006-04-03 17:42:29.875635608 -0400 @@ -577,16 +577,21 @@ $form[$key] = $item; } } + // check if field is set as title and remove title if it is. + $result = db_query("SELECT field_id, label, use_as_title FROM flexinode_field WHERE ctype_id = '$node->ctype_id' AND use_as_title=1"); - $form['title'] = array( - '#type' => 'textfield', - '#title' => t('Title'), - '#default_value' => $node->title, - '#size' => 60, - '#maxlength' => 128, - '#required' => TRUE, - ); + $uat = db_fetch_object($result); + if ($uat->use_as_title != 1) { + $form['title'] = array( + '#type' => 'textfield', + '#title' => t('Title'), + '#default_value' => $node->title, + '#size' => 60, + '#maxlength' => 128, + '#required' => TRUE, + ); + } $form['ctype_id'] = array( '#type' => 'hidden', '#value' => $node->ctype_id, @@ -616,11 +621,28 @@ */ function flexinode_submit(&$node) { if (isset($node->ctype_id)) { - $ctype = flexinode_load_content_type($node->ctype_id); + $ctype = flexinode_load_content_type($node->ctype_id); foreach ($ctype->fields as $field) { + $fieldname = 'flexinode_'. $field->field_id; + if ($field->use_as_title == 1) { + $titlep = flexinode_check_title_usage($node->ctype_id, $field->field_id); + if ($titlep == 'primary') { + $title1 = $node->$fieldname; + } + if ($titlep == 'secondary') { + $title2 = $node->$fieldname; + } + if (isset($title2)) { + $title = $title1 .' - ' .$title2; + } + else { + $title = $title1; + } + $title_strp = truncate_utf8(check_plain($title), 128); + $node->title = $title_strp; + } if ($result = flexinode_invoke('execute', $field, $node)) { - $fieldname = 'flexinode_'. $field->field_id; - $node->$fieldname = $result; + $node->$fieldname = $result; } } // Pre-render the body and teaser fields, so the Drupal search works. @@ -949,7 +971,6 @@ else { $field->field_type = $field_id; } - $form['label'] = array( '#type' => 'textfield', '#title' => t('Field label'), @@ -971,6 +992,25 @@ '#default_value' => $field->required, '#description' => t('Whether the user must fill in the field when creating content.'), ); + // add checkbox for custom titles. + if (flexinode_can_be_title($field) == 'TRUE') { + if (flexinode_check_title_usage($field->ctype_id, $field_id) == 'primary') { + $form['use_as_title'] = array( + '#type' => 'checkbox', + '#title' => t('Use as Title'), + '#default_value' => $field->use_as_title, + '#description' => t('Should this field be used as the Title for the Node. This will also set the field to required'), + ); + } + if (flexinode_check_title_usage($field->ctype_id, $field_id) == 'secondary') { + $form['use_as_title_2'] = array( + '#type' => 'checkbox', + '#title' => t('Use Second Part of Title'), + '#default_value' => $field->use_as_title_2, + '#description' => t('Use this field to form the second part of the title. This will also set the field to required'), + ); + } + } $form['show_teaser'] = array( '#type' => 'checkbox', '#title' => t('Show in teaser'), @@ -1096,21 +1136,91 @@ if ($edit['field_id']) { $field_id = $edit['field_id']; - - db_query("UPDATE {flexinode_field} SET label = '%s', default_value = '%s', rows = %d, required = %d, show_teaser = %d, show_table = %d, weight = %d, ctype_id = %d, field_type = '%s', options = '%s', description = '%s' WHERE field_id = %d", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id); + // set field as required if it is being used as a title + if ($edit['use_as_title'] == 1) { + $edit['required'] = 1; + } + if ($edit['use_as_title_2'] == 1 ) { + $edit['required'] = 1; + $edit['use_as_title'] = 1; + } + db_query("UPDATE {flexinode_field} SET label = '%s', default_value = '%s', rows = %d, required = %d, use_as_title = %d, use_as_title_2 = %d, show_teaser = %d, show_table = %d, weight = %d, ctype_id = %d, field_type = '%s', options = '%s', description = '%s' WHERE field_id = %d", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['use_as_title'], $edit['use_as_title_2'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id); drupal_set_message(t('updated field "%name".', array('%name' => $edit['label']))); } else { $field_id = db_next_id('{flexinode_field}'); - db_query("INSERT INTO {flexinode_field} (label, default_value, rows, required, show_teaser, show_table, weight, ctype_id, field_type, options, description, field_id) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, '%s', '%s', '%s', %d)", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id); + // set field as required if it is being used as a title + if ($edit['use_as_title'] == 1 OR $edit['use_as_title_2']) { + $edit['required'] = 1; + } + if ($edit['use_as_title_2'] == 1 ) { + $edit['required'] = 1; + $edit['use_as_title'] = 1; + } + db_query("INSERT INTO {flexinode_field} (label, default_value, rows, required, use_as_title, use_as_title_2, show_teaser, show_table, weight, ctype_id, field_type, options, description, field_id) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, '%s', '%s', '%s', %d)", $edit['label'], $edit['default_value'], $edit['rows'], $edit['required'], $edit['use_as_title'], $edit['use_as_title_2'], $edit['show_teaser'], $edit['show_table'], $edit['weight'], $edit['ctype_id'], $edit['field_type'], serialize($options), $edit['description'], $field_id); drupal_set_message(t('created new field "%name".', array('%name' => $edit['label']))); } return $field_id; } +/** + * Functions for Custom Titles + */ +function flexinode_can_be_title($field) { + if (flexinode_invoke('can_be_title', $field) == 'TRUE') { + $field_can_be_title = 'TRUE'; + } + else { + $field_can_be_title = 'FALSE'; + } + return $field_can_be_title; +} + +function flexinode_check_title_usage($ctype_id, $field_id) { + $query = db_query("SELECT field_id FROM flexinode_field WHERE use_as_title=1 AND ctype_id = '$ctype_id'"); + $result = db_fetch_object($query); + + $query2 = db_query("SELECT use_as_title, use_as_title_2 FROM flexinode_field WHERE use_as_title=1 AND ctype_id = '$ctype_id' AND field_id = '$field_id'"); + $result2 = db_fetch_object($query2); + + $query3 = db_query("SELECT use_as_title_2 FROM flexinode_field WHERE use_as_title=1 AND ctype_id = '$ctype_id' AND use_as_title_2=1"); + + if (db_num_rows($query) > 2) { + $title_usage = 'error'; + } + if (db_num_rows($query) == 0) { + $title_usage = 'primary'; + } + if (db_num_rows($query) == 1) { + if ($result->field_id == $field_id) { + $title_usage = 'primary'; + } + if ($result->field_id != $field_id && $result2->use_as_title_2 == 0) { + $title_usage = 'primary'; + } + if (db_num_rows($query3) == 0 && $result->field_id != $field_id) { + $title_usage = 'secondary'; + } + if ($result->field_id == $field_id && $result2->use_as_title_2 == 1) { + $title_usage = 'secondary'; + } + } + if (db_num_rows($query) == 2) { + if ($result2->use_as_title_2 == 0 && $result2->use_as_title == 1) { + $title_usage = 'primary'; + } + if ($result2->use_as_title_2 == 1 && $result2->use_as_title == 1) { + $title_usage = 'secondary'; + } + if ($result2->use_as_title_2 == 0 && $result2->use_as_title != 1) { + $title_usage = 'error'; + } + } + return $title_usage; +} /** * Return a field object.