/** * Returns itself when evaluating. */ function evaluate() { try { $val = $this->getParameters()->evaluate(); //Dates should be formated before being cast to a string if ($val instanceof SugarDateTime && !empty($val->def)) { global $timedate; require_once "include/Expressions/Expression/Date/DateExpression.php"; $date = DateExpression::roundTime($val); if ($val->def['type'] == "date") { //Date $date->setTimezone(new DateTimeZone("UTC")); $retstr = $timedate->asUserDate($date); } else { //Datetime $retstr = $timedate->asUser($date); } } else { $retstr = $val . ""; } } catch (Exception $e) { $GLOBALS['log']->warn('DefineStringExpression::evaluate() returned empty string due to received exception: ' . $e->getMessage()); $retstr = ""; } return $retstr; }
/** * Applies the Action to the target. * * @param SugarBean $target */ function fire(&$target) { set_error_handler('handleExpressionError', E_ERROR); try { $result = Parser::evaluate($this->expression, $target)->evaluate(); } catch (Exception $e) { $GLOBALS['log']->fatal("Exception evaluating expression in SetValueAction, {$this->expression} : {$e->getMessage()}\n{$e->getTraceAsString()}"); $result = ""; } restore_error_handler(); $field = $this->targetField; $def = array(); if (!empty($target->field_defs[$field])) { $def = $target->field_defs[$field]; } if ($result instanceof DateTime) { global $timedate; if (isset($def['type']) && ($def['type'] == "datetime" || $def['type'] == "datetimecombo")) { $result = DateExpression::roundTime($result); $target->{$field} = $timedate->asDb($result); } else { if (isset($def['type']) && $def['type'] == "date") { $result = DateExpression::roundTime($result); $target->{$field} = $timedate->asDbDate($result); } else { //If the target field isn't a date, convert it to a user formated string if (isset($result->isDate) && $result->isDate) { $target->{$field} = $timedate->asUserDate($result); } else { $target->{$field} = $timedate->asUser($result); } } } } else { if (isset($def['type']) && $def['type'] == "bool") { $target->{$field} = $result === true || $result === AbstractExpression::$TRUE; } else { if (is_array($result) && $def['type'] != 'multienum') { $target->{$field} = implode(', ', $result); } else { $target->{$field} = $result; } } } }