83 lines
1.8 KiB
PHP
83 lines
1.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* bbPress Locking
|
|
*
|
|
* @package bbPress
|
|
* @subpackage Common
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Check to see if the post is currently being edited by another user.
|
|
*
|
|
* @see wp_check_post_lock()
|
|
*
|
|
* @since 2.6.0 bbPress (r6340)
|
|
*
|
|
* @param int $post_id ID of the post to check for editing
|
|
* @return integer False: not locked or locked by current user. Int: user ID of user with lock.
|
|
*/
|
|
function bbp_check_post_lock( $post_id = 0 ) {
|
|
|
|
// Bail if no post
|
|
if ( !$post = get_post( $post_id ) ) {
|
|
return false;
|
|
}
|
|
|
|
// Bail if no lock
|
|
if ( !$lock = get_post_meta( $post->ID, '_edit_lock', true ) ) {
|
|
return false;
|
|
}
|
|
|
|
// Get lock
|
|
$lock = explode( ':', $lock );
|
|
$time = $lock[0];
|
|
$user = (int) isset( $lock[1] )
|
|
? $lock[1]
|
|
: get_post_meta( $post->ID, '_edit_last', true );
|
|
|
|
// Filter editing window duration
|
|
$time_window = apply_filters( 'bbp_check_post_lock_window', 3 * MINUTE_IN_SECONDS );
|
|
|
|
// Return user who is or last edited
|
|
if ( ! empty( $time ) && ( $time > ( time() - $time_window ) ) && ( $user !== bbp_get_current_user_id() ) ) {
|
|
return (int) $user;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Mark the post as currently being edited by the current user
|
|
*
|
|
* @since 2.6.0 bbPress (r6340)
|
|
*
|
|
* @param int $post_id ID of the post to being edited
|
|
* @return bool|array Returns false if the post doesn't exist of there is no current user, or
|
|
* an array of the lock time and the user ID.
|
|
*/
|
|
function bbp_set_post_lock( $post_id = 0 ) {
|
|
|
|
// Bail if no post
|
|
if ( !$post = get_post( $post_id ) ) {
|
|
return false;
|
|
}
|
|
|
|
// Bail if no user
|
|
if ( 0 == ( $user_id = get_current_user_id() ) ) {
|
|
return false;
|
|
}
|
|
|
|
// Get time & lock value
|
|
$now = time();
|
|
$lock = "{$now}:{$user_id}";
|
|
|
|
// Set lock value
|
|
update_post_meta( $post->ID, '_edit_lock', $lock );
|
|
|
|
return array( $now, $user_id );
|
|
}
|