--- job_old.module	2010-01-19 19:10:01.000000000 -0500
+++ job.module	2010-05-18 09:54:58.000000000 -0400
@@ -10,8 +10,10 @@ define('RESUME_NODE_TYPE',     'resume_n
 
 define('JOB_EMAIL',            'job_email');
 
-define('JOB_PERM_APPLY',       'apply for jobs');
-define('JOB_PERM_MANAGE',      'manage job applications');
+define('JOB_PERM_APPLY', 'apply for jobs');
+define('JOB_PERM_WITHDRAW', 'cancel own job applications');
+define('JOB_PERM_MANAGE', 'manage job applications');
+define('JOB_PERM_REMOVE', 'cancel any job applications');
 
 /**
  * Implementation of hook_help().
@@ -24,13 +26,15 @@ function job_help($path, $arg) {
 }
 
 /**
- * Implementation of hook_perm().
- */
+* Implementation of hook_perm().
+*/
 function job_perm() {
   return array(
-    JOB_PERM_APPLY,
-    JOB_PERM_MANAGE,
-  );
+	JOB_PERM_APPLY,
+	JOB_PERM_WITHDRAW,
+	JOB_PERM_MANAGE,
+	JOB_PERM_REMOVE,
+);
 }
 
 /**
@@ -39,42 +43,54 @@ function job_perm() {
 function job_menu() {
   $items = array();
   $items['admin/settings/job'] = array(
-    'title'              => t('Job'),
-    'description'        => t('Job settings'),
-    'page callback'      => 'drupal_get_form',
-    'page arguments'     => array('job_admin_settings'),
-    'access arguments'   => array('administer site configuration'),
+	'title' => t('Job'),
+	'description' => t('Job settings'),
+	'page callback' => 'drupal_get_form',
+	'page arguments' => array('job_admin_settings'),
+	'access arguments' => array('administer site configuration'),
   );
-
+  
   $items['job/apply'] = array(
-    'page callback'    => 'job_apply',
-    'type'             => MENU_CALLBACK,
-    'access arguments' => array('access content'),
+	'page callback' => 'job_apply',
+	'type' => MENU_CALLBACK,
+	'access arguments' => array('access content'),
   );
-
+  
   $items['job/clear'] = array(
-    'page callback'    => 'job_clear',
-    'type'             => MENU_CALLBACK,
-    'access arguments' => array(JOB_PERM_MANAGE),
+	'page callback' => 'job_clear',
+	'type' => MENU_CALLBACK,
+	'access callback' => "_job_perm_clear",
+	'access arguments' => array(2,3),
   );
-
-  $items['job/applications'] = array( 
-    'page callback'    => 'job_view',
-    'title'            => t('Job Applications Received'),
-    'type'             => MENU_SUGGESTED_ITEM,
-    'access arguments' => array(JOB_PERM_MANAGE),
+  
+  $items['job/applications'] = array(
+	'page callback' => 'job_view',
+	'title' => t('Job Applications Received'),
+	'type' => MENU_SUGGESTED_ITEM,
+	'access arguments' => array(JOB_PERM_MANAGE),
   );
   
   $items['job/appliedfor'] = array(
-    'page callback'    => 'job_post_view',
-    'title'            => t('Jobs Applied For'),
-    'type'             => MENU_SUGGESTED_ITEM,
-    'access arguments' => array(JOB_PERM_APPLY),
-  );  
-
+	'page callback' => 'job_post_view',
+	'title' => t('Jobs Applied For'),
+	'type' => MENU_SUGGESTED_ITEM,
+	'access arguments' => array(JOB_PERM_APPLY),
+  );
+  
   return $items;
 }
 
+function _job_perm_clear($nid, $uid) {
+  global $user;
+  
+  $node = node_load($nid);
+  if (user_access(JOB_PERM_REMOVE) || ($uid && (int) $uid == $user->uid && user_access(JOB_PERM_WITHDRAW))) {
+	return true;
+  }
+  return false;
+}
+
+
 function job_admin_settings() {
   $set = 'job';
   $form[$set] = array(
@@ -310,10 +326,21 @@ function job_user_applied($uid, $job_nid
 
 function job_clear($nid, $uid) {
   if ($nid && $uid) {
-    db_query("UPDATE {job} SET status = 0 WHERE nid = %d AND uid = %d", $nid, $uid);
-    drupal_set_message(t('Job application #@nid has been cleared.', array('@nid' => $nid)));
+    if (strcmp($uid, 'all') == 0) {
+	  db_query("UPDATE {job} SET status = 0 WHERE nid = %d", $nid, $uid);
+	  drupal_set_message(t('All job applications for #@nid have been cleared.', array('@nid' => $nid)));
+    }
+    else {
+	  db_query("UPDATE {job} SET status = 0 WHERE nid = %d AND uid = %d", $nid, $uid);
+	  drupal_set_message(t('Job application #@nid has been cleared.', array('@nid' => $nid)));
+    }
+  }
+  if (user_access(JOB_PERM_MANAGE)) {
+    drupal_goto('job/applications');
+  }
+  else {
+    drupal_goto('job/appliedfor');
   }
-  drupal_goto('job/applications');
 }
 
 function job_view() {
