X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FDAO.php;h=7596dee47d8580680c1d53f07e0b53f480caa519;hb=61ac5f959d775677c6eadffed193fde1d815eac4;hp=87f38e888565ab999dd828fe24bfe8d37b5b2fed;hpb=95b0090202aa538612981aa3cda2c71154397fec;p=civicrm-core.git diff --git a/CRM/Core/DAO.php b/CRM/Core/DAO.php index 87f38e8885..7596dee47d 100644 --- a/CRM/Core/DAO.php +++ b/CRM/Core/DAO.php @@ -1,9 +1,9 @@ query($queryStr, $i18nRewrite); - if ($trapException) { - CRM_Core_Error::setCallback(); - } - if (is_a($result, 'DB_Error')) { return $result; } @@ -1259,15 +1255,22 @@ SELECT contact_id return self::escapeString($string); } - //Creates a test object, including any required objects it needs via recursion - //createOnly: only create in database, do not store or return the objects (useful for perf testing) - //ONLY USE FOR TESTING + /** + * Creates a test object, including any required objects it needs via recursion + *createOnly: only create in database, do not store or return the objects (useful for perf testing) + *ONLY USE FOR TESTING + */ static function createTestObject( $daoName, $params = array(), $numObjects = 1, $createOnly = FALSE ) { + //this is a test function also backtrace is set for the test suite it sometimes unsets itself + // so we re-set here in case + $config = CRM_Core_Config::singleton(); + $config->backtrace = TRUE; + static $counter = 0; CRM_Core_DAO::$_testEntitiesToSkip = array( 'CRM_Core_DAO_Worldregion', @@ -1339,7 +1342,12 @@ SELECT contact_id case CRM_Utils_Type::T_INT: case CRM_Utils_Type::T_FLOAT: case CRM_Utils_Type::T_MONEY: - $object->$dbName = $counter; + if (isset($value['precision'])) { + // $object->$dbName = CRM_Utils_Number::createRandomDecimal($value['precision']); + $object->$dbName = CRM_Utils_Number::createTruncatedDecimal($counter, $value['precision']); + } else { + $object->$dbName = $counter; + } break; case CRM_Utils_Type::T_BOOLEAN: @@ -1383,10 +1391,29 @@ SELECT contact_id case CRM_Utils_Type::T_LONGTEXT: case CRM_Utils_Type::T_EMAIL: default: - $object->$dbName = $dbName . '_' . $counter; - $maxlength = CRM_Utils_Array::value('maxlength', $value); - if ($maxlength > 0 && strlen($object->$dbName) > $maxlength) { - $object->$dbName = substr($object->$dbName, 0, $value['maxlength']); + // WAS: if (isset($value['enumValues'])) { + // TODO: see if this works with all pseudoconstants + if (isset($value['pseudoconstant'], $value['pseudoconstant']['callback'])) { + if (isset($value['default'])) { + $object->$dbName = $value['default']; + } + else { + $options = CRM_Core_PseudoConstant::get($daoName, $name); + if (is_array($options)) { + $object->$dbName = $options[0]; + } + else { + $defaultValues = explode(',', $options); + $object->$dbName = $defaultValues[0]; + } + } + } + else { + $object->$dbName = $dbName . '_' . $counter; + $maxlength = CRM_Utils_Array::value('maxlength', $value); + if ($maxlength > 0 && strlen($object->$dbName) > $maxlength) { + $object->$dbName = substr($object->$dbName, 0, $value['maxlength']); + } } } } @@ -1410,13 +1437,18 @@ SELECT contact_id else return $objects; } - //deletes the this object plus any dependent objects that are associated with it - //ONLY USE FOR TESTING - + /** + * deletes the this object plus any dependent objects that are associated with it + * ONLY USE FOR TESTING + */ static function deleteTestObjects($daoName, $params = array( )) { + //this is a test function also backtrace is set for the test suite it sometimes unsets itself + // so we re-set here in case + $config = CRM_Core_Config::singleton(); + $config->backtrace = TRUE; - $object = new $daoName ( ); + $object = new $daoName(); $object->id = CRM_Utils_Array::value('id', $params); $deletions = array(); // array(array(0 => $daoName, 1 => $daoParams)) @@ -1463,12 +1495,11 @@ SELECT contact_id // test for create view and trigger permissions and if allowed, add the option to go multilingual // and logging // I'm not sure why we use the getStaticProperty for an error, rather than checking for DB_Error - CRM_Core_Error::ignoreException(); + $errorScope = CRM_Core_TemporaryErrorScope::ignoreException(); $dao = new CRM_Core_DAO(); if ($view) { $dao->query('CREATE OR REPLACE VIEW civicrm_domain_view AS SELECT * FROM civicrm_domain'); if (PEAR::getStaticProperty('DB_DataObject', 'lastError')) { - CRM_Core_Error::setCallback(); return FALSE; } } @@ -1476,7 +1507,6 @@ SELECT contact_id if ($trigger) { $result = $dao->query('CREATE TRIGGER civicrm_domain_trigger BEFORE INSERT ON civicrm_domain FOR EACH ROW BEGIN END'); if (PEAR::getStaticProperty('DB_DataObject', 'lastError') || is_a($result, 'DB_Error')) { - CRM_Core_Error::setCallback(); if ($view) { $dao->query('DROP VIEW IF EXISTS civicrm_domain_view'); } @@ -1485,7 +1515,6 @@ SELECT contact_id $dao->query('DROP TRIGGER IF EXISTS civicrm_domain_trigger'); if (PEAR::getStaticProperty('DB_DataObject', 'lastError')) { - CRM_Core_Error::setCallback(); if ($view) { $dao->query('DROP VIEW IF EXISTS civicrm_domain_view'); } @@ -1496,11 +1525,9 @@ SELECT contact_id if ($view) { $dao->query('DROP VIEW IF EXISTS civicrm_domain_view'); if (PEAR::getStaticProperty('DB_DataObject', 'lastError')) { - CRM_Core_Error::setCallback(); return FALSE; } } - CRM_Core_Error::setCallback(); return TRUE; } @@ -1874,9 +1901,8 @@ EOS; public static function createSQLFilter($fieldName, $filter, $type, $alias = NULL, $returnSanitisedArray = FALSE) { // http://issues.civicrm.org/jira/browse/CRM-9150 - stick with 'simple' operators for now // support for other syntaxes is discussed in ticket but being put off for now - $acceptedSQLOperators = array('=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=", "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'); foreach ($filter as $operator => $criteria) { - if (in_array($operator, $acceptedSQLOperators)) { + if (in_array($operator, self::acceptedSQLOperators())) { switch ($operator) { // unary operators case 'IS NULL': @@ -1933,6 +1959,15 @@ EOS; } } + /** + * @see http://issues.civicrm.org/jira/browse/CRM-9150 + * support for other syntaxes is discussed in ticket but being put off for now + * @return array + */ + public static function acceptedSQLOperators() { + return array('=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=", "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'); + } + /** * SQL has a limit of 64 characters on various names: * table name, trigger name, column name ...