function protected_node_is_locked in Protected Node 6
Same name and namespace in other branches
- 7 protected_node.module \protected_node_is_locked()
- 1.0.x protected_node.module \protected_node_is_locked()
Check whether a node is protected and a password is required.
\param[in] $nid The node identifier. \param[in] $op Operation: 'access', 'view', 'edit', or 'delete'
\return FALSE if the node is not protected for the current user. Return TRUE if it is protected and cannot be viewed by the current user. Return $nid if the user has a chance to unlock this protected node by entering the password.
3 calls to protected_node_is_locked()
- protected_node_init in ./
protected_node.module - Implementation of hook_init(). @link http://api.drupal.org/api/function/hook_init/6
- protected_node_rules_condition_content_is_locked in ./
protected_node_rules.rules.inc - Condition: check whether the current user has access to the node.
- protected_node_webfm_file_access_alter in ./
protected_node.module - @brief WebFM support.
File
- ./
protected_node.module, line 207
Code
function protected_node_is_locked($nid, $op = 'access') {
// get the node
$node = node_load($nid);
// is the node protected?
if (!$node->protected_node_is_protected) {
return FALSE;
}
// anonymous user?
if (!$user->uid) {
// do not cache anything for anonymous users as that could make
// the content of the page available to people who never enter
// the password (especially with aggressive caching.)
if (variable_get('cache', CACHE_DISABLED)) {
// prevent caching (do NOT use variable_set() since this is temporary for this session.)
$GLOBALS['conf']['cache'] = CACHE_DISABLED;
}
}
else {
// author looking at his work? (if not anonymous)
if ($node->uid === $user->uid) {
return FALSE;
}
}
// user cannot access any protected node
// (this check avoids the rather useless drupal_goto() and thus does not
// change the URL on the user.)
if (!user_access('access protected content')) {
return TRUE;
}
// if the user is only trying to view this node, accept
if ($op == 'view') {
if (user_access('view protected content') && node_access('view', $node)) {
// user's got view permission without password
// (password for edit/delete rights.)
return -1;
}
}
elseif ($op == 'edit') {
if (!node_access('update', $node)) {
// no rights to edit
return TRUE;
}
// rights to edit, but password is still required in this case!
}
elseif ($op == 'delete') {
if (!node_access('delete', $node)) {
// no rights to delete
return TRUE;
}
// rights to delete, but password is still required in this case!
}
else {
return TRUE;
}
// user already entered the password?
if (isset($_SESSION['_protected_node']['passwords'][$nid])) {
$when = $_SESSION['_protected_node']['passwords'][$nid];
if ($when > variable_get('protected_node_session_timelimit', 0) && $when > $node->protected_node_passwd_changed) {
// this page reset time
return FALSE;
}
// the session is out of date, we can as well get rid of it now
unset($_SESSION['_protected_node']['passwords'][$nid]);
}
return $nid;
}