<?php 

/**
 * acf_get_users
 *
 * Similar to the get_users() function but with extra functionality.
 *
 * @date	9/1/19
 * @since	5.7.10
 *
 * @param	array $args The query args.
 * @return	array
 */
function acf_get_users( $args = array() ) {
	
	// Get users.
	$users = get_users( $args );
	
	// Maintain order.
	if( $users && $args['include'] ) {
		
		// Generate order array.
		$order = array();
		foreach( $users as $i => $user ) {
			$order[ $i ] = array_search($user->ID, $args['include']);
		}
		
		// Sort results.
		array_multisort($order, $users);	
	}
	
	// Return
	return $users;
}

/**
 * acf_get_user_result
 *
 * Returns a result containing "id" and "text" for the given user.
 *
 * @date	21/5/19
 * @since	5.8.1
 *
 * @param	WP_User $user The user object.
 * @return	array
 */
function acf_get_user_result( $user ) {
	
	// Vars.
	$id = $user->ID;
	$text = $user->user_login;
	
	// Add name.
	if( $user->first_name && $user->last_name ) {
		$text .= " ({$user->first_name} {$user->last_name})";
	} elseif( $user->first_name ) {
		$text .= " ({$user->first_name})";
	}
	return compact('id', 'text');
}


/**
 * acf_get_user_role_labels
 *
 * Returns an array of user roles in the format "name => label".
 *
 * @date	20/5/19
 * @since	5.8.1
 *
 * @param	array $roles A specific array of roles.
 * @return	array
 */
function acf_get_user_role_labels( $roles = array() ) {
	$all_roles = wp_roles()->get_names();
	
	// Load all roles if none provided.
	if( empty($roles) ) {
		$roles = array_keys( $all_roles );
	}
	
	// Loop over roles and populare labels.
	$lables = array();
	foreach( $roles as $role ) {
		if( isset($all_roles[ $role ]) ) {
			$lables[ $role ] = translate_user_role( $all_roles[ $role ] );
		}
	}
	
	// Return labels.
	return $lables;
}

/**
 * acf_allow_unfiltered_html
 *
 * Returns true if the current user is allowed to save unfiltered HTML.
 *
 * @date	9/1/19
 * @since	5.7.10
 *
 * @param	void
 * @return	bool
 */
function acf_allow_unfiltered_html() {
	
	// Check capability.
	$allow_unfiltered_html = current_user_can('unfiltered_html');
	
	/**
	 * Filters whether the current user is allowed to save unfiltered HTML.
	 *
	 * @date	9/1/19
	 * @since	5.7.10
	 *
	 * @param	bool allow_unfiltered_html The result.
	 */
	return apply_filters( 'acf/allow_unfiltered_html', $allow_unfiltered_html );
}