199 lines
5.0 KiB
PHP
199 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* @package FrameworkOnFramework
|
|
* @subpackage model
|
|
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
// Protect from unauthorized access
|
|
defined('F0F_INCLUDED') or die;
|
|
|
|
/**
|
|
* FrameworkOnFramework model behavior class
|
|
*
|
|
* @package FrameworkOnFramework
|
|
* @since 2.1
|
|
*/
|
|
class F0FModelFieldNumber extends F0FModelField
|
|
{
|
|
/**
|
|
* The partial match is mapped to an exact match
|
|
*
|
|
* @param mixed $value The value to compare to
|
|
*
|
|
* @return string The SQL where clause for this search
|
|
*/
|
|
public function partial($value)
|
|
{
|
|
return $this->exact($value);
|
|
}
|
|
|
|
/**
|
|
* Perform a between limits match. When $include is true
|
|
* the condition tested is:
|
|
* $from <= VALUE <= $to
|
|
* When $include is false the condition tested is:
|
|
* $from < VALUE < $to
|
|
*
|
|
* @param mixed $from The lowest value to compare to
|
|
* @param mixed $to The higherst value to compare to
|
|
* @param boolean $include Should we include the boundaries in the search?
|
|
*
|
|
* @return string The SQL where clause for this search
|
|
*/
|
|
public function between($from, $to, $include = true)
|
|
{
|
|
if ($this->isEmpty($from) || $this->isEmpty($to))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$extra = '';
|
|
|
|
if ($include)
|
|
{
|
|
$extra = '=';
|
|
}
|
|
|
|
$sql = '((' . $this->getFieldName() . ' >' . $extra . ' ' . $from . ') AND ';
|
|
$sql .= '(' . $this->getFieldName() . ' <' . $extra . ' ' . $to . '))';
|
|
|
|
return $sql;
|
|
}
|
|
|
|
/**
|
|
* Perform an outside limits match. When $include is true
|
|
* the condition tested is:
|
|
* (VALUE <= $from) || (VALUE >= $to)
|
|
* When $include is false the condition tested is:
|
|
* (VALUE < $from) || (VALUE > $to)
|
|
*
|
|
* @param mixed $from The lowest value of the excluded range
|
|
* @param mixed $to The higherst value of the excluded range
|
|
* @param boolean $include Should we include the boundaries in the search?
|
|
*
|
|
* @return string The SQL where clause for this search
|
|
*/
|
|
public function outside($from, $to, $include = false)
|
|
{
|
|
if ($this->isEmpty($from) || $this->isEmpty($to))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$extra = '';
|
|
|
|
if ($include)
|
|
{
|
|
$extra = '=';
|
|
}
|
|
|
|
$sql = '((' . $this->getFieldName() . ' <' . $extra . ' ' . $from . ') OR ';
|
|
$sql .= '(' . $this->getFieldName() . ' >' . $extra . ' ' . $to . '))';
|
|
|
|
return $sql;
|
|
}
|
|
|
|
/**
|
|
* Perform an interval match. It's similar to a 'between' match, but the
|
|
* from and to values are calculated based on $value and $interval:
|
|
* $value - $interval < VALUE < $value + $interval
|
|
*
|
|
* @param integer|float $value The center value of the search space
|
|
* @param integer|float $interval The width of the search space
|
|
* @param boolean $include Should I include the boundaries in the search?
|
|
*
|
|
* @return string The SQL where clause
|
|
*/
|
|
public function interval($value, $interval, $include = true)
|
|
{
|
|
if ($this->isEmpty($value))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$from = $value - $interval;
|
|
$to = $value + $interval;
|
|
|
|
$extra = '';
|
|
|
|
if ($include)
|
|
{
|
|
$extra = '=';
|
|
}
|
|
|
|
$sql = '((' . $this->getFieldName() . ' >' . $extra . ' ' . $from . ') AND ';
|
|
$sql .= '(' . $this->getFieldName() . ' <' . $extra . ' ' . $to . '))';
|
|
|
|
return $sql;
|
|
}
|
|
|
|
/**
|
|
* Perform a range limits match. When $include is true
|
|
* the condition tested is:
|
|
* $from <= VALUE <= $to
|
|
* When $include is false the condition tested is:
|
|
* $from < VALUE < $to
|
|
*
|
|
* @param mixed $from The lowest value to compare to
|
|
* @param mixed $to The higherst value to compare to
|
|
* @param boolean $include Should we include the boundaries in the search?
|
|
*
|
|
* @return string The SQL where clause for this search
|
|
*/
|
|
public function range($from, $to, $include = true)
|
|
{
|
|
if ($this->isEmpty($from) && $this->isEmpty($to))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$extra = '';
|
|
|
|
if ($include)
|
|
{
|
|
$extra = '=';
|
|
}
|
|
|
|
if ($from)
|
|
$sql[] = '(' . $this->getFieldName() . ' >' . $extra . ' ' . $from . ')';
|
|
if ($to)
|
|
$sql[] = '(' . $this->getFieldName() . ' <' . $extra . ' ' . $to . ')';
|
|
|
|
$sql = '(' . implode(' AND ', $sql) . ')';
|
|
|
|
return $sql;
|
|
}
|
|
|
|
/**
|
|
* Perform an interval match. It's similar to a 'between' match, but the
|
|
* from and to values are calculated based on $value and $interval:
|
|
* $value - $interval < VALUE < $value + $interval
|
|
*
|
|
* @param integer|float $value The starting value of the search space
|
|
* @param integer|float $interval The interval period of the search space
|
|
* @param boolean $include Should I include the boundaries in the search?
|
|
*
|
|
* @return string The SQL where clause
|
|
*/
|
|
public function modulo($value, $interval, $include = true)
|
|
{
|
|
if ($this->isEmpty($value) || $this->isEmpty($interval))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$extra = '';
|
|
|
|
if ($include)
|
|
{
|
|
$extra = '=';
|
|
}
|
|
|
|
$sql = '(' . $this->getFieldName() . ' >' . $extra . ' ' . $value . ' AND ';
|
|
$sql .= '(' . $this->getFieldName() . ' - ' . $value . ') % ' . $interval . ' = 0)';
|
|
|
|
return $sql;
|
|
}
|
|
}
|