Index: modules/usercomment/usercomment.css
===================================================================
RCS file: modules/usercomment/usercomment.css
diff -N modules/usercomment/usercomment.css
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/usercomment/usercomment.css	2 Nov 2008 06:57:45 -0000
@@ -0,0 +1,8 @@
+/* $Id$ */
+
+.usercomment {
+}
+
+.usercomment_empty {
+  display: none;
+}
Index: modules/usercomment/usercomment.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/usercomment/usercomment.info,v
retrieving revision 1.6
diff -u -p -r1.6 usercomment.info
--- modules/usercomment/usercomment.info	16 Sep 2008 17:56:21 -0000	1.6
+++ modules/usercomment/usercomment.info	2 Nov 2008 06:57:45 -0000
@@ -2,5 +2,12 @@
 name = "User Comment"
 description = "This module gives users some additional comment administration rights on content they create."
 dependencies[] = comment
-version = "$Name:  $"
+version = "$Name: DRUPAL-6--1 $"
 core = 6.x
+
+; Information added by drupal.org packaging script on 2008-09-17
+version = "6.x-1.x-dev"
+core = "6.x"
+project = "usercomment"
+datestamp = "1221610405"
+
Index: modules/usercomment/usercomment.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/usercomment/usercomment.module,v
retrieving revision 1.5
diff -u -p -r1.5 usercomment.module
--- modules/usercomment/usercomment.module	16 Sep 2008 17:56:21 -0000	1.5
+++ modules/usercomment/usercomment.module	2 Nov 2008 06:57:47 -0000
@@ -7,6 +7,16 @@
  */
 
 /**
+ * Require the approval process for the node type.
+ */
+define('USERCOMMENT_REQUIRE_APPROVAL', 0);
+
+/**
+ * Skip the approval process for the node type.
+ */
+define('USERCOMMENT_SKIP_APPROVAL', 1);
+
+/**
  * Implementation of hook_comment()
  */
 function usercomment_comment(&$comment, $op) {
@@ -35,32 +45,21 @@ function usercomment_comment(&$comment, 
 
         db_query("UPDATE {comments} SET status = %d WHERE cid = %d", COMMENT_NOT_PUBLISHED, $comment['cid']);
         if (! isset($node->user->usercomment_get_notifications) || $node->user->usercomment_get_notifications == 1) {
-          $subject = variable_get('usercomment_mail_subject', t('Someone posted a new comment!'));
-          $message = variable_get('usercomment_mail_message', usercomment_mail_message_default());
           $replacements = array(
-            '@approver' => $node->name,
-            '@subject' => $comment['subject'],
-            '@comment' => $comment['comment'],
-            '@commenter' => $comment['name'],
-            '@link' => url('node/'. $node->nid, NULL, NULL, TRUE),
-            '@site' => variable_get("site_name", "Drupal"),
-            '@siteurl' => $GLOBALS["base_url"],
+            '!approver' => $node->name,
+            '!subject' => $comment['subject'],
+            '!comment' => $comment['comment'],
+            '!commenter' => $comment['name'],
+            '!link' => url('node/' . $node->nid, array('absolute' => TRUE)),
           );
-          $subject = t($subject, $replacements);
-          $message = t($message, $replacements);
-          $site_mail = variable_get('site_mail', ""); 
-          if (!strlen($site_mail)) {
-            if (user_access('administer nodes')) {
-              drupal_set_message(t('You should create an administrator mail address for your site! <a href="%url">Do it here</a>.', array('%url' => url('admin/settings/site-information'))), 'error');
-            }    
-            $site_mail = 'nobody@localhost';
-          }
-          drupal_mail('usercomment_mail', $node->user->mail, $subject, $message, $site_mail);
+          $account = $node->user;
+          $params = array('account' => $account, 'object' => $replacements);
+          drupal_mail('usercomment', 'notice', $node->user->mail, user_preferred_language($account), $params);
         }
       }
       break;
   }
-} 
+}
 
 /**
  * Implementation of hook_help()
@@ -84,21 +83,34 @@ function usercomment_link($type, $commen
 
   // we're only adding links to comments, so return if not comment
   if ($type != "comment") return $links;
-  if (usercomment_access_check($comment->cid)) {
+
+  // delete link
+  if (usercomment_access_check($comment->cid, 'delete', 'link')) {
     $links['usercomment_delete'] = array(
       'title' => t('delete'),
-      'href' => 'usercomment/delete/'. $comment->cid,
+      'href' => 'usercomment/delete/' . $comment->cid,
+    );
+  }
+
+  // edit link
+  if (usercomment_access_check($comment->cid, 'edit', 'link')) {
+    $links['usercomment_edit'] = array(
+      'title' => t('edit'),
+      'href' => 'usercomment/edit/' . $comment->cid,
     );
   }
+
+  // approve link
   if (usercomment_access_check($comment->cid, 'approve', 'link')) {
     $node = node_load($comment->nid);
     if ($comment->status == COMMENT_NOT_PUBLISHED) {
       $links['usercomment_approve'] = array(
         'title' => t('approve'),
-        'href' => 'usercomment/approve/'. $comment->cid,
+        'href' => 'usercomment/approve/' . $comment->cid,
       );
     }
   }
+
   return $links;
 }
 
@@ -108,6 +120,7 @@ function usercomment_link($type, $commen
 function usercomment_menu() {
   global $user;
   $items = array();
+
   $items['admin/content/comment/usercomment'] = array(
     'title' => 'Approval email',
     'page callback' => 'drupal_get_form',
@@ -116,21 +129,32 @@ function usercomment_menu() {
     'access arguments' => array('administer comments'),
     'weight' => 20,
   );
-  $items['usercomment/delete'] = array(
+  $items['usercomment/delete/%'] = array(
     'type' => MENU_CALLBACK,
     'page callback' => 'comment_delete',
+    'page arguments' => array(2),
     'access callback' => usercomment_menu_access,
     'access arguments' => array('delete', $user),
     'file path' => drupal_get_path('module', 'comment'),
     'file' => 'comment.admin.inc',
   );
-  $items['usercomment/approve'] = array(
+  $items['usercomment/approve/%'] = array(
     'type' => MENU_CALLBACK,
     'page callback' => 'usercomment_approve',
-    'page arguments' => array($comment, $node),
+    'page arguments' => array(2),
     'access callback' => usercomment_menu_access,
     'access arguments' => array('approve', $user),
   );
+  $items['usercomment/edit/%'] = array(
+    'title' => 'Edit comment',
+    'page callback' => 'usercomment_edit',
+    'page arguments' => array(2),
+    'access callback' => usercomment_menu_access,
+    'access arguments' => array('edit', $user),
+    'type' => MENU_CALLBACK,
+    'file' => 'usercomment.pages.inc',
+  );
+
   return $items;
 }
 
@@ -140,14 +164,16 @@ function usercomment_menu() {
 function usercomment_menu_access($op, $user) {
   $cid = arg(2);
   if(!empty($cid)) {
-   $comment = _comment_load($cid);
-   $node = node_load($comment->nid);
- }
+    $comment = _comment_load($cid);
+    $node = node_load($comment->nid);
+  }
   switch ($op) {
     case 'approve':
-      return ($user->uid == $node->uid || user_access('administer comments'));
+      return ($user->uid == $node->uid || usercomment_access_check($comment->cid, 'approve'));
     case 'delete':
-      return ($user->uid == $node->uid || usercomment_access_check($comment->cid));
+      return ($user->uid == $node->uid || usercomment_access_check($comment->cid, 'delete'));
+    case 'edit':
+      return ($user->uid == $node->uid || usercomment_access_check($comment->cid, 'edit'));
   }
 }
 
@@ -157,7 +183,12 @@ function usercomment_menu_access($op, $u
 function usercomment_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
   switch ($op) {
     case 'view':
-      return usercomment_approval_form($node);
+      if (!$a3) {
+        $node->content['usercomment'] = array(
+          '#value' => usercomment_approval_form($node),
+          '#weight' => 1,
+        );
+      }
       break;
   }
 }
@@ -169,8 +200,10 @@ function usercomment_perm() {
   $perms = array();
   $perms[] = 'post comments with no usercomment checking';
   foreach  (node_get_types() as $node) {
-    $perms[] = 'delete comments on own '. check_plain($node->type) .' content';
-    $perms[] = 'approve comments on own '. check_plain($node->type) .' content';
+    $perms[] = 'delete comments on own ' . check_plain($node->type) . ' content';
+    $perms[] = 'approve comments on own ' . check_plain($node->type) . ' content';
+    $perms[] = 'edit comments on own ' . check_plain($node->type) . ' content';
+    $perms[] = 'option to avoid approving comments on own ' . check_plain($node->type) . ' content';
   }
   return $perms;
 }
@@ -188,16 +221,28 @@ function usercomment_user($op, &$edit, &
           '#weight' => 5,
           '#collapsible' => 1,
         );
-        foreach (node_get_types() as $node) {
-          if (user_access('approve comments on own '. $node->type .' content', $account )) {
-            $form['usercomment_settings']['usercomment_approve_'. $node->type] = array(
+
+        $canApprove = FALSE;
+        foreach  (node_get_types() as $node) {
+          if (user_access('option to avoid approving comments on own ' . $node->type . ' content', $account )) {
+            if (user_access('approve comments on own ' . $node->type . ' content', $account )) {
+              $canApprove = TRUE;
+              $form['usercomment_settings']['usercomment_approve_' . $node->type] = array(
               '#type' => 'checkbox',
-              '#title' => t('Skip '. $node->type .' approvals'),
-              '#default_value' => isset($edit['usercomment_approve_'. $node->type]) ? $edit['usercomment_approve_'. $node->type] : 1,
+              '#title' => t('Skip ' . $node->type . ' approvals'),
+              '#default_value' => isset($edit['usercomment_approve_' . $node->type]) ? $edit['usercomment_approve_' . $node->type] : USERCOMMENT_SKIP_APPROVAL,
               '#description' => t('If you check this, other non admin users will be able to post comments on your content without prior approval. Admin users, however, will be able to post comments without approval.'),
+              );
+            }
+          }
+          else {
+            $form['usercomment_settings']['usercomment_approve_' . $node->type] = array(
+              '#type' => 'value',
+              '#value' => variable_get('usercomment_approve_' . $node->type, USERCOMMENT_SKIP_APPROVAL),
             );
           }
         }
+
         $form['usercomment_settings']['usercomment_get_notifications'] = array(
           '#type' => 'checkbox',
           '#title' => t('Receive notification emails'),
@@ -205,7 +250,7 @@ function usercomment_user($op, &$edit, &
           '#description' => t('Check here if you want to receive notification emails about new comments awaiting your approval.'),
         );
       }
-      return $form;
+      return $canApprove ? $form : array();
       break;
   }
 }
@@ -245,17 +290,13 @@ function usercomment_requires_approval($
     }
   }
 
+  $skip_approval_field = "usercomment_approve_{$nodetype}";
   if (is_object($user_object)) { // check the user's settings
-    $skip_approval_field = "usercomment_approve_{$nodetype}";
-    if (! isset($user_object->$skip_approval_field) || $user_object->$skip_approval_field == 1) {
-      return FALSE; // user either hasn't specified approvals or has said to skip approvals for this node type
-    }
-    else {
-      return TRUE;
-    }
+    $value = isset($user_object->$skip_approval_field) ? $user_object->$skip_approval_field : variable_get($skip_approval_field, USERCOMMENT_SKIP_APPROVAL);
+    return $value == USERCOMMENT_REQUIRE_APPROVAL;
   }
   else { // didn't get a valid user object
-    return FALSE;
+    return variable_get($skip_approval_field, USERCOMMENT_SKIP_APPROVAL) == USERCOMMENT_REQUIRE_APPROVAL;
   }
 }
 
@@ -291,23 +332,25 @@ function usercomment_access_check($cid, 
               }
               return $access;
             }
-            $check = (user_access('approve comments on own'. $thisnode->type .' content') && $thisnode->uid != $user->uid);
+            $check = (user_access('approve comments on own ' . $thisnode->type . ' content') && $thisnode->uid != $user->uid);
             break;
           case 'link':
           default:
-            $check = user_access('approve comments on own '. $thisnode->type .' content');
+            $check = user_access('approve comments on own ' . $thisnode->type . ' content') && $thisnode->uid == $user->uid;
             break;
         }
         break;
+      case 'edit':
+        $check = !comment_access('edit', $comment) && (user_access('edit comments on own ' . $thisnode->type . ' content') && $thisnode->uid == $user->uid);
+        break;
       case 'delete':
       default:
-          $check = (user_access('delete comments on own '. $thisnode->type .' content') && $thisnode->uid == $user->uid);
+        $check = (user_access('delete comments on own ' . $thisnode->type . ' content') && $thisnode->uid == $user->uid);
         break;
     }
     if ($check) {
       return TRUE;
-    }
-    else {
+    } else {
       return FALSE;
     }
   }
@@ -316,7 +359,12 @@ function usercomment_access_check($cid, 
 /**
  * This function generates the approval page
  */
-function usercomment_approve($comment, $node) {
+function usercomment_approve($cid) {
+  if(!empty($cid)) {
+    $comment = _comment_load($cid);
+    $node = node_load($comment->nid);
+  }
+
   $comment->status = COMMENT_PUBLISHED;
   comment_save((array)$comment);
 
@@ -334,7 +382,7 @@ function usercomment_approve($comment, $
   }
 
   drupal_set_message($status_msg);
-  drupal_goto('node/'. $node->nid);
+  drupal_goto ('node/' . $node->nid);
 }
 
 /**
@@ -351,6 +399,8 @@ function usercomment_comment_render($nod
   $query_args[] = $node->nid;
   $query_args[] = COMMENT_NOT_PUBLISHED;
   $result = db_query($query, $query_args);
+
+  drupal_add_css(drupal_get_path('module', 'usercomment') . '/usercomment.css');
   while ($comment = db_fetch_object($result)) {
     $comment = drupal_unpack($comment);
     if (usercomment_access_check($comment->cid)) {
@@ -362,8 +412,8 @@ function usercomment_comment_render($nod
     foreach (module_implements('link_alter') as $module) {
       $function = $module .'_link_alter';
       $function($node, $links);
-    } 
-    $content .= theme('comment_view', $comment, $links);
+    }
+    $content .= theme('comment_view', $comment, $node, $links);
   }
   return $content;
 }
@@ -412,7 +462,7 @@ function usercomment_admin_settings() {
     '#default_value' => $msg_php,
     '#cols' => 60,
     '#rows' => 6,
-    '#description' => '<p>'. t('Advanced Usage Only: PHP code that returns the text of the status message. Should not include &lt;?php ?&gt; delimiters.') .'</p><p>'. t('Note: if set, this will override any Approval queue message text set above.') .'</p>',
+    '#description' => '<p>'. t('Advanced Usage Only: PHP code that returns the text of the status message. Should not include &lt;?php ?&gt; delimiters.') .'</p><p>' . t('Note: if set, this will override any Approval queue message text set above.') . '</p>',
   );
 
   $form['usercomment_text']['usercomment_msg_approved'] = array(
@@ -435,7 +485,7 @@ function usercomment_admin_settings() {
     '#default_value' => $msg_php,
     '#cols' => 60,
     '#rows' => 6,
-    '#description' => '<p>'. t('Advanced Usage Only: PHP code that returns the text of the status message. Should not include &lt;?php ?&gt; delimiters.') .'</p><p>'. t('Note: if set, this will override any Approval queue message text set above.') .'</p>',
+    '#description' => '<p>'. t('Advanced Usage Only: PHP code that returns the text of the status message. Should not include &lt;?php ?&gt; delimiters.') .'</p><p>' . t('Note: if set, this will override any Approval queue message text set above.') . '</p>',
   );
   return system_settings_form($form);
 }
@@ -445,18 +495,18 @@ function usercomment_admin_settings() {
  */
 function usercomment_mail_message_default() {
   return <<<END
-Hey @approver,
+Hey !approver,
 
-@commenter posted a new comment that needs to be approved.
+!commenter posted a new comment that needs to be approved.
 
-@subject
-@comment
+!subject
+!comment
 
 You can approve or remove the comment here:
-  @link
+  !link
 
 Regards,
-The @site team
+The !site team
 END;
 }
 
@@ -465,10 +515,10 @@ END;
  */
 function usercomment_approval_form($node) {
   global $user;
-  if ($user->uid == $node->uid && user_access('approve comments on own '. $node->type .' content')) {
+  if ($user->uid == $node->uid && user_access('approve comments on own ' . $node->type . ' content')) {
     $content = usercomment_comment_render($node);
     if (! empty($content)) {
-      return theme('usercomment', $content);
+      return theme('usercomment', $content, $node);
     }
     else {
       return theme('usercomment_empty');
@@ -477,22 +527,40 @@ function usercomment_approval_form($node
 }
 
 /**
+ * The hook_mail() impl
+ */
+function usercomment_mail($key, &$message, $params) {
+  $language = $message['language'];
+  $variables = user_mail_tokens($params['account'], $language);
+  switch($key) {
+    case 'notice':
+      $variables = array_merge($variables, $params['object']);
+      $message['subject'] = t(variable_get('usercomment_mail_subject', 'Someone posted a new comment!'), $variables, $language->language);
+      $message['body'] = t(variable_get('usercomment_mail_message', usercomment_mail_message_default()), $variables, $language->language);
+      break;
+  }
+}
+
+/**
  * Implementation of hook_theme().
  */
-function usercomment_theme() {
+function usercomment_theme($existing, $type, $theme, $path) {
   return array(
-    'usercomment' => array(
-      'arguments' => array($content),
-    ),
+    'usercomment' =>
+  array('arguments' => array('content' => NULL, 'node' => NULL)
+  ),
+    'usercomment_empty' =>
+  array('arguments' => array()
+  ),
   );
 }
 
 /**
  * Theme out the usercomment form
  */
-function theme_usercomment($content) {
-  $output = '<div class="usercomment">';
-  $output .= theme('box', 'Approve comments', theme('comment_wrapper', $content));
+function theme_usercomment($content, $node) {
+  $output = '<div class="comment usercomment">';
+  $output .= theme('box', 'Approve comments', $content);
   $output .= "</div>";
   return $output;
 }
Index: modules/usercomment/usercomment.pages.inc
===================================================================
RCS file: modules/usercomment/usercomment.pages.inc
diff -N modules/usercomment/usercomment.pages.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/usercomment/usercomment.pages.inc	2 Nov 2008 06:57:47 -0000
@@ -0,0 +1,180 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * User page callbacks for the usercomment module.
+ */
+
+/**
+ * Form builder; generate a comment editing form.
+ *
+ * @param $cid
+ *   ID of the comment to be edited.
+ * @ingroup forms
+ */
+function usercomment_edit($cid) {
+  global $user;
+
+  $comment = db_fetch_object(db_query('SELECT c.*, u.uid, u.name AS registered_name, u.data FROM {comments} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = %d', $cid));
+  $comment = drupal_unpack($comment);
+  $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
+  if (usercomment_access_check($comment-cid, 'edit')) {
+    $title = NULL;
+    return theme('box', $title, drupal_get_form('usercomment_form', (array)$comment, $title));
+  }
+  else {
+    drupal_access_denied();
+  }
+}
+
+/**
+ * Generate the basic commenting form, for appending to a node or display on a separate page.
+ *
+ * @param $title
+ *   Not used.
+ * @ingroup forms
+ * @see usercomment_form_validate()
+ * @see usercomment_form_submit()
+ */
+function usercomment_form(&$form_state, $edit, $title = NULL) {
+  global $user;
+
+  $op = isset($_POST['op']) ? $_POST['op'] : '';
+  $node = node_load($edit['nid']);
+
+  $edit += array('name' => '', 'mail' => '', 'homepage' => '');
+  if (!empty($edit['author'])) {
+    $author = $edit['author'];
+  }
+  elseif (!empty($edit['name'])) {
+    $author = $edit['name'];
+  }
+  else {
+    $author = $edit['registered_name'];
+  }
+
+  if (!empty($edit['status'])) {
+    $status = $edit['status'];
+  }
+  else {
+    $status = 0;
+  }
+
+  if (!empty($edit['date'])) {
+    $date = $edit['date'];
+  }
+  else {
+    $date = format_date($edit['timestamp'], 'custom', 'Y-m-d H:i O');
+  }
+
+  $form['admin'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Administration'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#weight' => -2,
+  );
+
+  if ($edit['registered_name'] != '') {
+    // The comment is by a registered user
+    $form['admin']['author'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Authored by'),
+      '#size' => 30,
+      '#maxlength' => 60,
+      '#autocomplete_path' => 'user/autocomplete',
+      '#default_value' => $author,
+      '#weight' => -1,
+    );
+  }
+  else {
+    // The comment is by an anonymous user
+    $form['is_anonymous'] = array(
+      '#type' => 'value',
+      '#value' => TRUE,
+    );
+    $form['admin']['name'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Authored by'),
+      '#size' => 30,
+      '#maxlength' => 60,
+      '#default_value' => $author,
+      '#weight' => -1,
+    );
+    $form['admin']['mail'] = array(
+      '#type' => 'textfield',
+      '#title' => t('E-mail'),
+      '#maxlength' => 64,
+      '#size' => 30,
+      '#default_value' => $edit['mail'],
+      '#description' => t('The content of this field is kept private and will not be shown publicly.'),
+    );
+
+    $form['admin']['homepage'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Homepage'),
+      '#maxlength' => 255,
+      '#size' => 30,
+      '#default_value' => $edit['homepage'],
+    );
+  }
+
+  $form['admin']['date'] = array('#type' => 'textfield', '#parents' => array('date'), '#title' => t('Authored on'), '#size' => 20, '#maxlength' => 25, '#default_value' => $date, '#weight' => -1);
+
+  $form['admin']['status'] = array('#type' => 'radios', '#parents' => array('status'), '#title' => t('Status'), '#default_value' =>  $status, '#options' => array(t('Published'), t('Not published')), '#weight' => -1);
+
+  if (variable_get('comment_subject_field_'. $node->type, 1) == 1) {
+    $form['subject'] = array('#type' => 'textfield', '#title' => t('Subject'), '#maxlength' => 64, '#default_value' => !empty($edit['subject']) ? $edit['subject'] : '');
+  }
+
+  if (!empty($edit['comment'])) {
+    $default = $edit['comment'];
+  }
+  else {
+    $default = '';
+  }
+
+  $form['comment_filter']['comment'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Comment'),
+    '#rows' => 15,
+    '#default_value' => $default,
+    '#required' => TRUE,
+  );
+  if (!isset($edit['format'])) {
+    $edit['format'] = FILTER_FORMAT_DEFAULT;
+  }
+  $form['comment_filter']['format'] = filter_form($edit['format']);
+
+  $form['cid'] = array('#type' => 'value', '#value' => !empty($edit['cid']) ? $edit['cid'] : NULL);
+  $form['pid'] = array('#type' => 'value', '#value' => !empty($edit['pid']) ? $edit['pid'] : NULL);
+  $form['nid'] = array('#type' => 'value', '#value' => $edit['nid']);
+  $form['uid'] = array('#type' => 'value', '#value' => !empty($edit['uid']) ? $edit['uid'] : NULL);
+
+  if (!form_get_errors()) {
+    $form['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#weight' => 19);
+  }
+
+  $form['#token'] = 'comment'. $edit['nid'] . (isset($edit['pid']) ? $edit['pid'] : '');
+
+  if (empty($edit['cid']) && empty($edit['pid'])) {
+    $form['#action'] = url('comment/reply/'. $edit['nid']);
+  }
+
+  return $form;
+}
+
+/**
+ * Validate comment form submissions.
+ */
+function usercomment_form_validate($form, &$form_state) {
+  comment_form_validate($form, $form_state);
+}
+
+/**
+ * Process comment form submissions; prepare the comment, store it, and set a redirection target.
+ */
+function usercomment_form_submit($form, &$form_state) {
+  comment_form_submit($form, $form_state);
+}
