224 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Notes Functions
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Admin/Discounts
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       3.0
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * Get the HTML used to output all of the notes for a single object
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param array $notes
 | |
|  * @return string
 | |
|  */
 | |
| function edd_admin_get_notes_html( $notes = array() ) {
 | |
| 
 | |
| 	// Whether to show or hide the "No notes" default text
 | |
| 	$no_notes_display = ! empty( $notes )
 | |
| 		? ' style="display:none;"'
 | |
| 		: '';
 | |
| 
 | |
| 	// Start a buffer
 | |
| 	ob_start(); ?>
 | |
| 
 | |
| 	<div id="edd-notes" class="edd-notes">
 | |
| 		<?php
 | |
| 
 | |
| 		// Output notes
 | |
| 		foreach ( $notes as $note ) {
 | |
| 			echo edd_admin_get_note_html( $note );
 | |
| 		}
 | |
| 
 | |
| 		?>
 | |
| 
 | |
| 		<p class="edd-no-notes"<?php echo $no_notes_display; ?>>
 | |
| 			<?php _e( 'No notes.', 'easy-digital-downloads' ); ?>
 | |
| 		</p>
 | |
| 	</div>
 | |
| 
 | |
| 	<?php
 | |
| 
 | |
| 	// Return the current buffer
 | |
| 	return ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the HTML used to output a single note, from an array of notes
 | |
|  *
 | |
|  * @since 3.0
 | |
|  * @param int $note_id
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function edd_admin_get_note_html( $note_id = 0 ) {
 | |
| 
 | |
| 	/** @var $note EDD\Notes\Note For IDE type-hinting purposes. */
 | |
| 
 | |
| 	// Get the note
 | |
| 	$note = is_numeric( $note_id )
 | |
| 		? edd_get_note( $note_id )
 | |
| 		: $note_id;
 | |
| 
 | |
| 	// No note, so bail
 | |
| 	if ( empty( $note ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// User
 | |
| 	$user_id = $note->user_id;
 | |
| 	$author  = edd_get_bot_name();
 | |
| 	if ( ! empty( $user_id ) ) {
 | |
| 		/* translators: user ID */
 | |
| 		$author      = sprintf( __( 'User ID #%s', 'easy-digital-downloads' ), $user_id );
 | |
| 		$user_object = get_userdata( $user_id );
 | |
| 		if ( $user_object ) {
 | |
| 			$author = ! empty( $user_object->display_name ) ? $user_object->display_name : $user_object->user_login;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// URL to delete note
 | |
| 	$delete_note_url = wp_nonce_url( add_query_arg( array(
 | |
| 		'edd-action' => 'delete_note',
 | |
| 		'note_id'    => absint( $note->id ),
 | |
| 	) ), 'edd_delete_note_' . absint( $note->id ) );
 | |
| 
 | |
| 	// Start a buffer
 | |
| 	ob_start();
 | |
| 	?>
 | |
| 
 | |
| 	<div class="edd-note" id="edd-note-<?php echo esc_attr( $note->id ); ?>">
 | |
| 		<div class="edd-note__header">
 | |
| 			<strong class="edd-note-author"><?php echo esc_html( $author ); ?></strong>
 | |
| 			<time datetime="<?php echo esc_attr( EDD()->utils->date( $note->date_created, null, true )->toDateTimeString() ); ?>"><?php echo edd_date_i18n( $note->date_created, 'datetime' ); ?></time>
 | |
| 			<a href="<?php echo esc_url( $delete_note_url ); ?>#edd-notes" class="edd-delete-note" data-note-id="<?php echo esc_attr( $note->id ); ?>" data-object-id="<?php echo esc_attr( $note->object_id ); ?>" data-object-type="<?php echo esc_attr( $note->object_type ); ?>">
 | |
| 				<?php echo esc_html_x( '×', 'Delete note', 'easy-digital-downloads' ); ?>
 | |
| 			</a>
 | |
| 		</div>
 | |
| 
 | |
| 		<?php echo wpautop( make_clickable( $note->content ) ); ?>
 | |
| 	</div>
 | |
| 
 | |
| 	<?php
 | |
| 
 | |
| 	// Return the current buffer
 | |
| 	return ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the HTML used to add a note to an object ID and type
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param int    $object_id
 | |
|  * @param string $object_type
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function edd_admin_get_new_note_form( $object_id = 0, $object_type = '' ) {
 | |
| 
 | |
| 	if ( ! current_user_can( 'edit_shop_payments' ) ) {
 | |
| 		return '';
 | |
| 	}
 | |
| 
 | |
| 	// Start a buffer
 | |
| 	ob_start();?>
 | |
| 
 | |
| 	<div class="edd-add-note">
 | |
| 		<div class="edd-form-group">
 | |
| 			<label class="edd-form-group__label screen-reader-text" for="edd-note">
 | |
| 				<?php esc_html_e( 'Note', 'easy-digital-downloads' ); ?>
 | |
| 			</label>
 | |
| 
 | |
| 			<div id="edd-form-group__control">
 | |
| 				<textarea name="edd-note" id="edd-note" class="edd-form-group__input"></textarea>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 
 | |
| 		<div class="edd-form-group">
 | |
| 			<button type="button" id="edd-add-note" class="edd-note-submit button button-secondary left" data-object-id="<?php echo esc_attr( $object_id ); ?>" data-object-type="<?php echo esc_attr( $object_type ); ?>">
 | |
| 				<?php _e( 'Add Note', 'easy-digital-downloads' ); ?>
 | |
| 			</button>
 | |
| 			<span class="spinner"></span>
 | |
| 		</div>
 | |
| 
 | |
| 		<?php wp_nonce_field( 'edd_note', 'edd_note_nonce' ); ?>
 | |
| 	</div>
 | |
| 
 | |
| 	<?php
 | |
| 
 | |
| 	// Return the current buffer
 | |
| 	return ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Return the URL to redirect to after deleting a note
 | |
|  *
 | |
|  * For now, this is always the current URL, because we aren't ever sure where
 | |
|  * notes are being used. Maybe this will need a filter or something, someday.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function edd_get_note_delete_redirect_url() {
 | |
| 
 | |
| 	// HTTP or HTTPS
 | |
| 	$scheme = is_ssl()
 | |
| 		? 'https'
 | |
| 		: 'http';
 | |
| 
 | |
| 	// Return the concatenated URL
 | |
| 	return "{$scheme}://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}";
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Return the HTML used to paginate through notes.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  * @param array $args
 | |
|  */
 | |
| function edd_admin_get_notes_pagination( $args = array() ) {
 | |
| 
 | |
| 	// Parse args
 | |
| 	$r = wp_parse_args( $args, array(
 | |
| 		'total'        => 0,
 | |
| 		'pag_arg'      => 'paged',
 | |
| 		'base'         => '%_%',
 | |
| 		'show_all'     => true,
 | |
| 		'prev_text'    => is_rtl() ? '→' : '←',
 | |
| 		'next_text'    => is_rtl() ? '←' : '→',
 | |
| 		'add_fragment' => ''
 | |
| 	) );
 | |
| 
 | |
| 	// Maximum notes per page
 | |
| 	$per_page    = apply_filters( 'edd_notes_per_page', 20 );
 | |
| 	$r['total']  = ceil( $r['total'] / $per_page );
 | |
| 	$r['format'] = "?{$r['pag_arg']}=%#%";
 | |
| 
 | |
| 	// Don't allow pagination beyond the boundaries
 | |
| 	$r['current'] = ! empty( $_GET[ $r['pag_arg'] ] ) && is_numeric( $_GET[ $r['pag_arg'] ] )
 | |
| 		? absint( $_GET[ $r['pag_arg'] ] )
 | |
| 		: 1;
 | |
| 
 | |
| 	// Start a buffer
 | |
| 	ob_start(); ?>
 | |
| 
 | |
| 	<div class="edd-note-pagination">
 | |
| 		<?php echo paginate_links( $r ); ?>
 | |
| 	</div>
 | |
| 
 | |
| 	<?php
 | |
| 
 | |
| 	// Return the current buffer
 | |
| 	return ob_get_clean();
 | |
| }
 |