/** * Fix a value(s) for a Filter statement * @param $value - the value that needs fixing * @param $fieldName - the field we are fixing * @param SugarBean $bean - the Bean * @param SugarQuery $q - the Query * @param SugarQuery_Builder_Where $where - the Where statement * @param $op - the filter operand * @return bool - true if everything can pass as normal, false if new filters needed to be added to override the existing $op */ public function fixForFilter(&$value, $fieldName, SugarBean $bean, SugarQuery $q, SugarQuery_Builder_Where $where, $op) { if ($op === '$daterange') { return true; } $dateLengthCheck = is_array($value) ? reset($value) : $value; if (strlen(trim($dateLengthCheck)) < 11) { if (!is_array($value)) { $dateParsed = date_parse($value); } else { $dateParsed[0] = date_parse($value[0]); $dateParsed[1] = date_parse($value[1]); } switch ($op) { case '$gt': $value = date("Y-m-d", strtotime($value . "+1 day")); $dateParsed = date_parse($value); $value = gmdate('Y-m-d\\TH:i:s', gmmktime(0, 0, 0, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); break; case '$gte': $value = gmdate('Y-m-d\\TH:i:s', gmmktime(0, 0, 0, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); break; case '$lt': $value = date("Y-m-d", strtotime($value . "-1 day")); $dateParsed = date_parse($value); $value = gmdate('Y-m-d\\TH:i:s', gmmktime(23, 59, 59, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); break; case '$lte': $value = gmdate('Y-m-d\\TH:i:s', gmmktime(23, 59, 59, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); break; case '$between': case '$dateBetween': $value[0] = gmdate('Y-m-d\\TH:i:s', gmmktime(0, 0, 0, $dateParsed[0]['month'], $dateParsed[0]['day'], $dateParsed[0]['year'])); $value[1] = gmdate('Y-m-d\\TH:i:s', gmmktime(23, 59, 59, $dateParsed[1]['month'], $dateParsed[1]['day'], $dateParsed[1]['year'])); break; case '$starts': case '$equals': $value = array(); $value[0] = gmdate('Y-m-d\\TH:i:s', gmmktime(0, 0, 0, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); $value[1] = gmdate('Y-m-d\\TH:i:s', gmmktime(23, 59, 59, $dateParsed['month'], $dateParsed['day'], $dateParsed['year'])); $where->between($fieldName, $this->apiUnformatField($value[0]), $this->apiUnformatField($value[1]), $bean); return false; } } return true; }