Index: checkout.module
===================================================================
--- checkout.module (revision 1569)
+++ checkout.module (working copy)
@@ -47,11 +47,6 @@
'access' => $admin_access,
'weight' => 5,
'type' => MENU_LOCAL_TASK);
- $items[] = array('path' => 'admin/content/node/checkout/release',
- 'title' => t('Check-in content'),
- 'callback' => 'checkout_admin_release',
- 'access' => $admin_access,
- 'type' => MENU_CALLBACK);
}
else {
if (arg(0) == 'user' && is_numeric(arg(1)) && $user->uid == arg(1)) {
@@ -69,6 +64,14 @@
'callback arguments' => array(arg(1)),
'access' => $user_access,
'type' => MENU_CALLBACK);
+ }
+ if (stristr($_GET['q'], "admin/content/node/checkout/release")) {
+ $items[] = array('path' => 'admin/content/node/checkout/release/'.arg(5),
+ 'title' => t('Check-in content'),
+ 'callback' => 'checkout_admin_release',
+ 'callback arguments' => array(arg(5)),
+ 'access' => checkout_release_access(arg(5)),
+ 'type' => MENU_CALLBACK);
}
}
@@ -235,7 +238,7 @@
$date = format_date($info->timestamp, 'medium');
$message = t('This document is locked for editing by !name since @date.', array('!name' => $username, '@date' => $date));
- if (user_access('administer checked out documents')) {
+ if (checkout_release_access($info->nid)) {
$uri = url("admin/content/node/checkout/release/$info->nid", 'destination='. substr(request_uri(),1)); // p.lindstrom - remove leading / from request_uri
$message .= '
'. t('Click here to check back in now. WARNING: Any unsaved changes in another window will be overwritten.', array('!uri' => $uri));
}
@@ -358,3 +361,16 @@
drupal_goto("user/$uid/checkout");
}
+function checkout_release_access($nid) {
+ global $user;
+
+ // if they have admin access let them release
+ if (user_access('administer checked out documents')) return 1;
+
+ // but if they are the user who checked out the document, let them release regardless of "checkout admin" rights
+ $checkout_uid = db_result(db_query("SELECT uid FROM {checkout} WHERE nid = %d", $nid));
+ if ($user->uid == $checkout_uid) return 1;
+
+ return 0;
+}
+