diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php index ce5cd41d8..a3e79598d 100755 --- a/workflow/engine/classes/model/AdditionalTables.php +++ b/workflow/engine/classes/model/AdditionalTables.php @@ -371,9 +371,21 @@ class AdditionalTables extends BaseAdditionalTables $oCriteria = new Criteria($aData['DBS_UID']); //eval('$oCriteria->addSelectColumn("\'1\' AS DUMMY");'); + + /* + * data type: + * 'INTEGER' 'BIGINT' 'SMALLINT' 'TINYINT' 'DECIMAL' 'DOUBLE' 'FLOAT' 'REAL' + * 'CHAR' 'VARCHAR' 'LONGVARCHAR' 'BOOLEAN' 'DATE' 'DATETIME' 'TIME' + */ + $types = array('DECIMAL', 'DOUBLE', 'FLOAT', 'REAL'); + if ($keyOrderUppercase == true) { foreach ($aData['FIELDS'] as $aField) { - eval('$oCriteria->addSelectColumn(' . $sClassPeerName . '::' . $aField['FLD_NAME'] . ');'); + $field = '$oCriteria->addSelectColumn(' . $sClassPeerName . '::' . $aField['FLD_NAME'] . ');'; + if (in_array($aField['FLD_TYPE'], $types)) { + $field = '$oCriteria->addAsColumn("' . $aField['FLD_NAME'] . '", "round(" . ' . $sClassPeerName . '::' . $aField['FLD_NAME'] . ' . ", 2)" );'; + } + eval($field); /*if ($aField['FLD_KEY'] == '1') { eval('$oCriteria->addAscendingOrderByColumn('. $sClassPeerName . '::' . $aField['FLD_NAME'] . ');'); }*/ @@ -384,37 +396,27 @@ class AdditionalTables extends BaseAdditionalTables eval('$count = ' . $sClassPeerName . '::doCount($oCriteria);'); if ($filter != '' && is_string($filter)) { - eval('$fieldsTable = ' . $sClassPeerName . '::getFieldNames(BasePeer::TYPE_FIELDNAME);'); - $countField = count($fieldsTable); $stringOr = '$oCriteria->add('; - $cont = 0; - $fieldAppUid = ''; - foreach ($fieldsTable as $value) { - if ($value != 'APP_UID') { - if (($cont+1) == $countField) { - if ($aData['FIELDS'][$cont]['FLD_TYPE'] == 'VARCHAR') { - $stringOr .= '$oCriteria->getNewCriterion(' . $sClassPeerName . '::' . strtoupper($value) . ', "%' . $filter . '%", Criteria::LIKE)'; - } else { - $stringOr .= '$oCriteria->getNewCriterion(' . $sClassPeerName . '::' . strtoupper($value) . ', "' . $filter . '", Criteria::LIKE)'; - } - } else { - if ($aData['FIELDS'][$cont]['FLD_TYPE'] == 'VARCHAR') { - $stringOr .= '$oCriteria->getNewCriterion(' . $sClassPeerName . '::' . strtoupper($value) . ', "%' . $filter . '%", Criteria::LIKE)->addOr('; - } else { - $stringOr .= '$oCriteria->getNewCriterion(' . $sClassPeerName . '::' . strtoupper($value) . ', "' . $filter . '", Criteria::LIKE)->addOr('; - } - } - } else { - $fieldAppUid = $cont; - } - $cont++; - } - for ($c = 0; $c < $countField-1; $c++) { - if ($fieldAppUid !== $c) { - $stringOr .= ')'; + $closure = ''; + $compare = ''; + $types = array('INTEGER', 'BIGINT', 'SMALLINT', 'TINYINT', 'DECIMAL', 'DOUBLE', 'FLOAT', 'REAL'); + foreach ($aData['FIELDS'] as $aField) { + if ($aField['FLD_NAME'] != 'APP_UID') { + $compare = '"%' . $filter . '%", Criteria::LIKE'; + + if (in_array($aField['FLD_TYPE'], $types)) { + if (is_numeric($filter)) { + $compare = '"' . $filter . '", Criteria::EQUAL'; + } else { + $compare = 'null, Criteria::ISNULL'; + } + } + + $stringOr = $stringOr . '$oCriteria->getNewCriterion(' . $sClassPeerName . '::' . $aField['FLD_NAME'] . ', ' . $compare . ')->addOr('; + $closure = $closure . ")"; } } - $stringOr .= ');'; + $stringOr = rtrim($stringOr, '->addOr(') . $closure . ';'; eval($stringOr); $oCriteriaCount = clone $oCriteria;