--- ../flexinode/flexinode.module	2005-12-09 20:05:28.000000000 -0500
+++ flexinode.module	2005-12-27 16:16:13.000000000 -0500
@@ -1,5 +1,5 @@
 <?php
-// $Id: flexinode.module,v 1.62 2005-12-09 14:03:34 drumm Exp $
+// $Id: flexinode.module,v 1.64 2005/12/20 14:40:33 morbus Exp $
 
 // Copyright 2003-2004 Jonathan Chaffer. See LICENSE for redistribution allowances.
 
@@ -579,7 +579,13 @@
       $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");
+
+  $uat = db_fetch_object($result);
+
+  if ($uat->use_as_title != 1) {
   $form['title'] = array(
     '#type' => 'textfield',
     '#title' => t('Title'),
@@ -588,7 +594,7 @@
     '#maxlength' => 128,
     '#required' => TRUE,
     );
-
+  }
   $form['ctype_id'] = array(
     '#type' => 'hidden',
     '#value' => $node->ctype_id,
@@ -601,8 +607,18 @@
  * Implementation of hook_validate().
  */
 function flexinode_validate($node) {
-  node_validate_title($node);
-
+// validate title, unless it is set by flexinode.
+  if (isset($node->title)) {
+    node_validate_title($node);
+  }
+  elseif (isset($node->ctype_id)) {
+  $ctype = flexinode_load_content_type($node->ctype_id);
+    foreach ($ctype->fields as $field) {
+      if ($field->use_as_title != 1) {
+      node_validate_title($node);
+      }
+    }
+  }
   if (isset($node->ctype_id)) {
     $ctype = flexinode_load_content_type($node->ctype_id);
     foreach ($ctype->fields as $field) {
@@ -614,6 +630,23 @@
     }
   }
 }
+/**
+ * Implementation of hook_execute().
+ */
+
+// set custom title as node title.
+
+function flexinode_execute(&$node) {
+  if (isset($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) {
+      $node->title = $node->$fieldname;
+      }
+    }
+  }
+}
 
 /**
  * Implementation of hook_submit().
@@ -975,6 +1008,15 @@
     '#default_value' => $field->required,
     '#description' => t('Whether the user must fill in the field when creating content.'),
     );
+  // add checkbox for custom titles for text fields 
+  if ($field->field_type == 'textfield') {
+  $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.'),
+    );
+  }
   $form['show_teaser'] = array(
     '#type' => 'checkbox',
     '#title' => t('Show in teaser'),
@@ -1035,6 +1077,13 @@
   if (!$edit['label']) {
     form_set_error('label', t('You must give this field type a label.'));
   }
+// Ensure  that only one field has 'Use as Title' per ctype 
+  $ctype = $edit['ctype_id'];
+  $resulta = db_query("SELECT field_id, use_as_title FROM flexinode_field WHERE use_as_title=1 AND ctype_id = '$ctype'");
+  $resultb = db_fetch_object($resulta);
+  if ($edit['use_as_title'] == 1 && db_num_rows($resulta) != 0 && $edit['field_id'] != $resultb->field_id) {
+     form_set_error('use_as_title',  t('Only one field can be used as a Title.'));
+  }
 }
 
 /**
@@ -1068,7 +1117,7 @@
   foreach (flexinode_field_types() as $field) {
     $options[$field] = t('add %fieldtype', array('%fieldtype' => flexinode_invoke('name', $field)));
   }
-  $form['#action'] = 'admin/node/field/';
+  $form['#action'] = url('admin/node/field/');
   $form['field_type'] = array(
     '#type' => 'select',
     '#options' => $options,
@@ -1100,14 +1149,18 @@
   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);
+// updated to include use_as_title 
+    db_query("UPDATE {flexinode_field} SET label = '%s', default_value = '%s', rows = %d, required = %d, use_as_title = %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['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);
+// added in use_as_title
+    db_query("INSERT INTO {flexinode_field} (label, default_value, rows, required, use_as_title, show_teaser, show_table, weight, ctype_id, field_type, options, description, field_id) VALUES ('%s', '%s', %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['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'])));
   }
@@ -1147,7 +1200,7 @@
 **/
 
 function theme_flexinode_type($type, $first) {
-  $output = "<div><fieldset class=\" collapsible". ($first ? '' : ' collapsed') ."\"><legend>". $type->name ."</legend>\n";
+  $output = "<div><fieldset class=\"collapsible\"><legend>". $type->name ."</legend>\n";
   $output .= "  <p class=\"description\">". $type->description ." (". theme('links', $type->links) .")</p>\n";
   $output .= "  <p class=\"fields\">\n";
   $output .= theme('item_list', $type->fieldlist, t('Field list'));
