本文整理汇总了PHP中FabrikWorker::specialStrToMySQL方法的典型用法代码示例。如果您正苦于以下问题:PHP FabrikWorker::specialStrToMySQL方法的具体用法?PHP FabrikWorker::specialStrToMySQL怎么用?PHP FabrikWorker::specialStrToMySQL使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FabrikWorker
的用法示例。
在下文中一共展示了FabrikWorker::specialStrToMySQL方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getRangedFilterValue
/**
* This builds an array containing the filters value and condition
* when using a ranged search
*
* @param array $value Initial value
* @param string $condition Filter condition e.g BETWEEN
*
* @return array (value condition)
*/
protected function getRangedFilterValue($value, $condition = '')
{
$db = FabrikWorker::getDbo();
$params = $this->getParams();
/* $$$ hugh - need to convert dates to MySQL format for the query
* $$$ hugh - not any more, since we changed to always submit in MySQL format
* $$$ hugh - removing the MySQL conversion has broken 'special' range handling,
* which used to happen in the MySQL conversion function. So ...
* Created new helper function specialStrToMySQL() which turns things
* like 'midnight yesterday' etc. into MySQL dates, defaulting to GMT.
* This lets us do ranged query string and content plugin filters like ...
* table___date[value][]=midnight%20yesterday&table___date[value][]=midnight%20today&table___date[condition]=BETWEEN
*/
$value[0] = FabrikWorker::specialStrToMySQL(FArrayHelper::getValue($value, 0));
$value[1] = FabrikWorker::specialStrToMySQL(FArrayHelper::getValue($value, 1));
// $$$ hugh - if the first date is later than the second, swap 'em round to keep 'BETWEEN' in the query happy
if (strtotime($value[0]) > strtotime($value[1])) {
$tmp_value = $value[0];
$value[0] = $value[1];
$value[1] = $tmp_value;
}
$exactTime = $this->formatContainsTime($params->get('date_table_format'));
if (!$params->get('date_showtime', 0) || $exactTime == false) {
// Range values could already have been set in getFilterValue
if (!$this->rangeFilterSet) {
/* $$$ due to some changes in how we handle ranges, the following was no longer getting
* applied in getFilterValue, needed because on first submit of a filter an arbitrary time
* is being set (i.e. time "now").
*/
$value[0] = $this->setMySQLTimeToZero($value[0]);
$value[1] = $this->setMySQLTimeToZero($value[1]);
/* $$$ hugh - need to back this out by one second, otherwise we're including next day.
* So ... say we are searching from '2009-07-17' to '2009-07-21', the
* addDays(1) changes '2009-07-21 00:00:00' to '2009-07-22 00:00:00',
* but what we really want is '2009-07-21 23:59:59'
*/
$value[1] = date("Y-m-d H:i:s", strtotime($this->addDays($value[1], 1)) - 1);
}
}
// $$$ rob 20/07/2012 Date is posted as local time, need to set it back to GMT. Seems needed even if dates are saved without timeselector
// $$$ hugh - think we may need to take 'store as local' in to account here?
$localTimeZone = new DateTimeZone($this->config->get('offset'));
$params = $this->getParams();
$storeAsLocal = $params->get('date_store_as_local', '0') == '1';
$date = JFactory::getDate($value[0], $localTimeZone);
$value[0] = $date->toSql($storeAsLocal);
$date = JFactory::getDate($value[1], $localTimeZone);
/* $$$ hugh - why are we setting the 'local' arg on toSql() for end date but not the start date of the range?
* This ends up with queries like "BETWEEN '2012-01-26 06:00:00' AND '2012-01-26 23:59:59'"
* with CST (GMT -6), which chops out 6 hours of the day range.
* Also, see comment above about maybe needing to take "save as local" in to account on this.
*/
// $value[1] = $date->toSql(true);
$value[1] = $date->toSql($storeAsLocal);
$value = $db->quote($value[0]) . ' AND ' . $db->quote($value[1]);
$condition = 'BETWEEN';
return array($value, $condition);
}