You are here

private function PHPExcel_Worksheet_AutoFilter::_dynamicFilterDateRange in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/AutoFilter.php \PHPExcel_Worksheet_AutoFilter::_dynamicFilterDateRange()

* Convert a dynamic rule daterange to a custom filter range expression for ease of calculation * *

Parameters

string $dynamicRuleType: * @param PHPExcel_Worksheet_AutoFilter_Column &$filterColumn * @return mixed[]

1 call to PHPExcel_Worksheet_AutoFilter::_dynamicFilterDateRange()
PHPExcel_Worksheet_AutoFilter::showHideRows in vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/AutoFilter.php
* Apply the AutoFilter rules to the AutoFilter Range * *

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/AutoFilter.php, line 466

Class

PHPExcel_Worksheet_AutoFilter
PHPExcel_Worksheet_AutoFilter

Code

private function _dynamicFilterDateRange($dynamicRuleType, &$filterColumn) {
  $rDateType = PHPExcel_Calculation_Functions::getReturnDateType();
  PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  $val = $maxVal = NULL;
  $ruleValues = array();
  $baseDate = PHPExcel_Calculation_DateTime::DATENOW();

  //	Calculate start/end dates for the required date range based on current date
  switch ($dynamicRuleType) {
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK:
      $baseDate = strtotime('-7 days', $baseDate);
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK:
      $baseDate = strtotime('-7 days', $baseDate);
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH:
      $baseDate = strtotime('-1 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH:
      $baseDate = strtotime('+1 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER:
      $baseDate = strtotime('-3 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER:
      $baseDate = strtotime('+3 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR:
      $baseDate = strtotime('-1 year', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR:
      $baseDate = strtotime('+1 year', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
  }
  switch ($dynamicRuleType) {
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TODAY:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW:
      $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(strtotime('+1 day', $baseDate));
      $val = (int) PHPExcel_Shared_Date::PHPToExcel($baseDate);
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE:
      $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(strtotime('+1 day', $baseDate));
      $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1, date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR:
      $maxVal = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0, 0, 0, 31, 12, date('Y', $baseDate)));
      ++$maxVal;
      $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1, date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER:
      $thisMonth = date('m', $baseDate);
      $thisQuarter = floor(--$thisMonth / 3);
      $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(gmmktime(0, 0, 0, date('t', $baseDate), (1 + $thisQuarter) * 3, date('Y', $baseDate)));
      ++$maxVal;
      $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1 + $thisQuarter * 3, date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH:
      $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(gmmktime(0, 0, 0, date('t', $baseDate), date('m', $baseDate), date('Y', $baseDate)));
      ++$maxVal;
      $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK:
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK:
      $dayOfWeek = date('w', $baseDate);
      $val = (int) PHPExcel_Shared_Date::PHPToExcel($baseDate) - $dayOfWeek;
      $maxVal = $val + 7;
      break;
  }
  switch ($dynamicRuleType) {

    //	Adjust Today dates for Yesterday and Tomorrow
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY:
      --$maxVal;
      --$val;
      break;
    case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW:
      ++$maxVal;
      ++$val;
      break;
  }

  //	Set the filter column rule attributes ready for writing
  $filterColumn
    ->setAttributes(array(
    'val' => $val,
    'maxVal' => $maxVal,
  ));

  //	Set the rules for identifying rows for hide/show
  $ruleValues[] = array(
    'operator' => PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
    'value' => $val,
  );
  $ruleValues[] = array(
    'operator' => PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN,
    'value' => $maxVal,
  );
  PHPExcel_Calculation_Functions::setReturnDateType($rDateType);
  return array(
    'method' => '_filterTestInCustomDataSet',
    'arguments' => array(
      'filterRules' => $ruleValues,
      'join' => PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND,
    ),
  );
}