/**
  * 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;
 }
示例#2
0
 /**
  * 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;
             }
         }
     }
 }