You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
2.8 KiB
PHP

<?php
/**
* The clauses functions.
*
* @since 1.0.0
* @package RankMath
* @subpackage RankMath\Admin\Database
* @author RankMath <support@rankmath.com>
*/
namespace RankMath\Admin\Database;
/**
* Clauses class.
*/
trait Clauses {
/**
* List of SQL clauses.
*
* @var array
*/
private $sql_clauses = [];
/**
* SQL clause merge filters.
*
* @var array
*/
private $sql_filters = [
'where' => [
'where',
'where_time',
],
'join' => [
'right_join',
'join',
'left_join',
],
];
/**
* Check has SQL clause.
*
* @param string $type Clause type.
*
* @return boolean True if set and not empty.
*/
public function has_sql_clause( $type ) {
return isset( $this->sql_clauses[ $type ] ) && ! empty( $this->sql_clauses[ $type ] );
}
/**
* Add a SQL clause to be included when get_data is called.
*
* @param string $type Clause type.
* @param string $clause SQL clause.
*/
public function add_sql_clause( $type, $clause ) {
if ( isset( $this->sql_clauses[ $type ] ) && ! empty( $clause ) ) {
$this->sql_clauses[ $type ][] = $clause;
}
}
/**
* Clear SQL clauses by type.
*
* @param string|array $types Clause type.
*/
protected function clear_sql_clause( $types ) {
foreach ( (array) $types as $type ) {
if ( isset( $this->sql_clauses[ $type ] ) ) {
$this->sql_clauses[ $type ] = [];
}
}
}
/**
* Get SQL clause by type.
*
* @param string $type Clause type.
* @param string $filtered Whether to filter the return value. Default unfiltered.
*
* @return string SQL clause.
*/
protected function get_sql_clause( $type, $filtered = false ) {
if ( ! isset( $this->sql_clauses[ $type ] ) ) {
return '';
}
$separator = ' ';
if ( in_array( $type, [ 'select', 'order_by', 'group_by' ], true ) ) {
$separator = ', ';
}
/**
* Default to bypassing filters for clause retrieval internal to data stores.
* The filters are applied when the full SQL statement is retrieved.
*/
if ( false === $filtered ) {
return implode( $separator, $this->sql_clauses[ $type ] );
}
if ( isset( $this->sql_filters[ $type ] ) ) {
$clauses = [];
foreach ( $this->sql_filters[ $type ] as $subset ) {
$clauses = array_merge( $clauses, $this->sql_clauses[ $subset ] );
}
} else {
$clauses = $this->sql_clauses[ $type ];
}
/**
* Filter SQL clauses by type and context.
*
* @param array $clauses The original arguments for the request.
* @param string $context The data store context.
*/
$clauses = apply_filters( "rank_math_clauses_{$type}", $clauses, $this->context );
/**
* Filter SQL clauses by type and context.
*
* @param array $clauses The original arguments for the request.
*/
$clauses = apply_filters( "rank_math_clauses_{$type}_{$this->context}", $clauses );
return implode( $separator, $clauses );
}
}