*/
static $_factory = NULL;
+ static $_checkedSqlFunctionsExist = FALSE;
+
/**
* Class constructor
*
*
* @return boolean true if CONSTRAINT keyword exists, false otherwise
*/
- function schemaRequiresRebuilding($tables = array("civicrm_contact")) {
+ static function schemaRequiresRebuilding($tables = array("civicrm_contact")) {
$show = array();
foreach($tables as $tableName){
if (!array_key_exists($tableName, $show)) {
$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',
//skip the FK if it is not required
// if it's contact id we should create even if not required
// we'll have a go @ fetching first though
+ // we WILL create campaigns though for so tests with a campaign pseudoconstant will complete
+ if($FKClassName === 'CRM_Campaign_DAO_Campaign' && $daoName != $FKClassName) {
+ $required = TRUE;
+ }
if (!$required && $dbName != 'contact_id') {
$fkDAO = new $FKClassName;
if($fkDAO->find(TRUE)){
case CRM_Utils_Type::T_DATE:
case CRM_Utils_Type::T_TIMESTAMP:
+ case CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME:
$object->$dbName = '19700101';
+ if($dbName == 'end_date') {
+ // put this in the future
+ $object->$dbName = '20200101';
+ }
break;
case CRM_Utils_Type::T_TIME:
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))
* @param $tableName string the specific table requiring a rebuild; or NULL to rebuild all tables
* @see CRM-9716
*/
- static function triggerRebuild($tableName = NULL) {
+ static function triggerRebuild($tableName = NULL, $force = FALSE) {
$info = array();
$logging = new CRM_Logging_Schema;
- $logging->triggerInfo($info, $tableName);
+ $logging->triggerInfo($info, $tableName, $force);
CRM_Core_I18n_Schema::triggerInfo($info, $tableName);
CRM_Contact_BAO_Contact::triggerInfo($info, $tableName);
self::createTriggers($info);
}
+ /**
+ * Because sql functions are sometimes lost, esp during db migration, we check here to avoid numerous support requests
+ * @see http://issues.civicrm.org/jira/browse/CRM-13822
+ * TODO: Alternative solutions might be
+ * * Stop using functions and find another way to strip numeric characters from phones
+ * * Give better error messages (currently a missing fn fatals with "unknown error")
+ */
+ static function checkSqlFunctionsExist() {
+ if (!self::$_checkedSqlFunctionsExist) {
+ self::$_checkedSqlFunctionsExist = TRUE;
+ $dao = CRM_Core_DAO::executeQuery("SHOW function status WHERE db = database() AND name = 'civicrm_strip_non_numeric'");
+ if (!$dao->fetch()) {
+ self::triggerRebuild();
+ }
+ }
+ }
+
/**
* Wrapper function to drop triggers
*
public function getOptionLabels() {
$fields = $this->fields();
if ($fields === NULL) {
- throw new exception ('Cannot call getOptionLabels on CRM_Core_DAO');
+ throw new Exception ('Cannot call getOptionLabels on CRM_Core_DAO');
}
foreach ($fields as $field) {
$name = CRM_Utils_Array::value('name', $field);
);
// Validation: enforce uniformity of this param
if ($context !== NULL && !isset($contexts[$context])) {
- throw new exception("'$context' is not a valid context for buildOptions.");
+ throw new Exception("'$context' is not a valid context for buildOptions.");
}
return $contexts;
}
case 'BETWEEN':
case 'NOT BETWEEN':
if (empty($criteria[0]) || empty($criteria[1])) {
- throw new exception("invalid criteria for $operator");
+ throw new Exception("invalid criteria for $operator");
}
if(!$returnSanitisedArray) {
return (sprintf('%s ' . $operator . ' "%s" AND "%s"', $fieldName, CRM_Core_DAO::escapeString($criteria[0]), CRM_Core_DAO::escapeString($criteria[1])));
case 'IN':
case 'NOT IN':
if (empty($criteria)) {
- throw new exception("invalid criteria for $operator");
+ throw new Exception("invalid criteria for $operator");
}
$escapedCriteria = array_map(array(
'CRM_Core_DAO',
// the string is longer than the length and we need a uniq string
// for the same tablename we need the same uniq string everytime
// hence we use md5 on the string, which is not random
- // we'll append 16 characters to the end of the tableName
- $md5string = substr(md5($string), 0, 16);
- return substr($string, 0, $length - 17) . "_{$md5string}";
+ // we'll append 8 characters to the end of the tableName
+ $md5string = substr(md5($string), 0, 8);
+ return substr($string, 0, $length - 8) . "_{$md5string}";
}
+ function setApiFilter(&$params) {}
+
}