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
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 );
|
|
}
|
|
}
|