Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* The orderby functions.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin\Database
|
||||
* @author RankMath <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin\Database;
|
||||
|
||||
use RankMath\Helpers\Arr;
|
||||
|
||||
/**
|
||||
* OrderBy class.
|
||||
*/
|
||||
trait OrderBy {
|
||||
|
||||
/**
|
||||
* Add an order by statement to the current query
|
||||
*
|
||||
* ->orderBy('created_at')
|
||||
* ->orderBy('modified_at', 'desc')
|
||||
*
|
||||
* // multiple order clauses
|
||||
* ->orderBy(['firstname', 'lastname'], 'desc')
|
||||
*
|
||||
* // muliple order clauses with diffrent directions
|
||||
* ->orderBy(['firstname' => 'asc', 'lastname' => 'desc'])
|
||||
*
|
||||
* @param array|string $columns Columns.
|
||||
* @param string $direction Direction.
|
||||
*
|
||||
* @return self The current query builder.
|
||||
*/
|
||||
public function orderBy( $columns, $direction = 'ASC' ) { // @codingStandardsIgnoreLine
|
||||
if ( is_string( $columns ) ) {
|
||||
$columns = $this->argument_to_array( $columns );
|
||||
}
|
||||
|
||||
$direction = $this->sanitize_direction( $direction );
|
||||
|
||||
foreach ( $columns as $key => $column ) {
|
||||
if ( is_numeric( $key ) ) {
|
||||
$this->add_sql_clause( 'order_by', "{$column}{$direction}" );
|
||||
continue;
|
||||
}
|
||||
|
||||
$column = $this->sanitize_direction( $column );
|
||||
$this->add_sql_clause( 'order_by', "{$key}{$column}" );
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitize direction
|
||||
*
|
||||
* @param string $direction Value to sanitize.
|
||||
*
|
||||
* @return string Sanitized value
|
||||
*/
|
||||
protected function sanitize_direction( $direction ) {
|
||||
if ( empty( $direction ) || 'ASC' === $direction || 'asc' === $direction ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return ' ' . \strtoupper( $direction );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an string argument as parsed array if possible
|
||||
*
|
||||
* @param string $argument Argument to validate.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function argument_to_array( $argument ) {
|
||||
if ( false !== strpos( $argument, ',' ) ) {
|
||||
return Arr::from_string( $argument );
|
||||
}
|
||||
|
||||
return [ $argument ];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user