phpdoc params is always an array in api
[civicrm-core.git] / CRM / Core / DAO.php
index 685fe8a69535e4522f164220d7f1a35930e7eda1..aa29909f07f3beabde8edf2e7d90a136ac69a2b1 100644 (file)
@@ -52,20 +52,21 @@ class CRM_Core_DAO extends DB_DataObject {
 
   static $_dbColumnValueCache = NULL;
   const NOT_NULL = 1, IS_NULL = 2,
-  DB_DAO_NOTNULL = 128,
-  VALUE_SEPARATOR = "\ 1",
-  BULK_INSERT_COUNT = 200,
-  BULK_INSERT_HIGH_COUNT = 200,
-  // special value for mail bulk inserts to avoid
-  // potential duplication, assuming a smaller number reduces number of queries
-  // by some factor, so some tradeoff. CRM-8678
-  BULK_MAIL_INSERT_COUNT = 10,
-  QUERY_FORMAT_WILDCARD = 1,
-  QUERY_FORMAT_NO_QUOTES = 2;
-
-  /*
+    DB_DAO_NOTNULL = 128,
+    VALUE_SEPARATOR = "\ 1",
+    BULK_INSERT_COUNT = 200,
+    BULK_INSERT_HIGH_COUNT = 200,
+    // special value for mail bulk inserts to avoid
+    // potential duplication, assuming a smaller number reduces number of queries
+    // by some factor, so some tradeoff. CRM-8678
+    BULK_MAIL_INSERT_COUNT = 10,
+    QUERY_FORMAT_WILDCARD = 1,
+    QUERY_FORMAT_NO_QUOTES = 2;
+
+  /**
    * Define entities that shouldn't be created or deleted when creating/ deleting
-   *  test objects - this prevents world regions, countries etc from being added / deleted
+   * test objects - this prevents world regions, countries etc from being added / deleted
+   * @var array
    */
   static $_testEntitiesToSkip = array();
   /**
@@ -80,7 +81,7 @@ class CRM_Core_DAO extends DB_DataObject {
    * Class constructor
    *
    * @return \CRM_Core_DAO
-  @access public
+   * @access public
    */
   public function __construct() {
     $this->initialize();
@@ -97,7 +98,8 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Initialize the DAO object
    *
-   * @param string $dsn   the database connection string
+   * @param string $dsn
+   *   The database connection string.
    *
    * @return void
    * @static
@@ -114,13 +116,12 @@ class CRM_Core_DAO extends DB_DataObject {
    * @param string $fieldName
    * @param $fieldDef
    * @param array $params
-   *
    */
   protected function assignTestFK($fieldName, $fieldDef, $params) {
     $required = CRM_Utils_Array::value('required', $fieldDef);
     $FKClassName = CRM_Utils_Array::value('FKClassName', $fieldDef);
     $dbName = $fieldDef['name'];
-    $daoName = get_class($this);
+    $daoName = str_replace('_BAO_', '_DAO_', get_class($this));
 
     // skip the FK if it is not required
     // if it's contact id we should create even if not required
@@ -162,7 +163,8 @@ class CRM_Core_DAO extends DB_DataObject {
    *
    * @param string $fieldName
    * @param array $fieldDef
-   * @param int $counter the globally-unique ID of the test object
+   * @param int $counter
+   *   The globally-unique ID of the test object.
    */
   protected function assignTestValue($fieldName, &$fieldDef, $counter) {
     $dbName = $fieldDef['name'];
@@ -272,7 +274,6 @@ class CRM_Core_DAO extends DB_DataObject {
    * by resetting some of DAO's internal fields. Use this with caution
    *
    * @return void
-   *
    */
   public function reset() {
 
@@ -308,10 +309,13 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Execute a query by the current DAO, localizing it along the way (if needed).
    *
-   * @param string $query        the SQL query for execution
-   * @param bool   $i18nRewrite  whether to rewrite the query
+   * @param string $query
+   *   The SQL query for execution.
+   * @param bool $i18nRewrite
+   *   Whether to rewrite the query.
    *
-   * @return object              the current DAO object after the query execution
+   * @return object
+   *   the current DAO object after the query execution
    */
   public function query($query, $i18nRewrite = TRUE) {
     // rewrite queries that should use $dbLocale-based views for multi-language installs
@@ -326,7 +330,8 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Static function to set the factory instance for this class.
    *
-   * @param object $factory  the factory application object
+   * @param object $factory
+   *   The factory application object.
    *
    * @return void
    * @static
@@ -395,7 +400,8 @@ class CRM_Core_DAO extends DB_DataObject {
    *
    * @static
    *
-   * @return array of CRM_Core_Reference_Interface
+   * @return array
+   *   Array of CRM_Core_Reference_Interface
    */
   public static function getReferenceColumns() {
     return array();
@@ -407,7 +413,7 @@ class CRM_Core_DAO extends DB_DataObject {
    *
    * @return array
    */
-   static function &fields() {
+  static function &fields() {
     $result = NULL;
     return $result;
   }
@@ -415,8 +421,9 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Get/set an associative array of table columns
    *
-   * @param  array key=>type array
-   * @return array (associative)
+   * @param array key=>type array
+   * @return array
+   *   (associative)
    */
   public function table() {
     $fields = &$this->fields();
@@ -486,10 +493,10 @@ class CRM_Core_DAO extends DB_DataObject {
       return;
     }
 
-    $dao                = new CRM_Core_DAO_Log();
-    $dao->entity_table  = $this->getTableName();
-    $dao->entity_id     = $this->id;
-    $dao->modified_id   = $cid;
+    $dao = new CRM_Core_DAO_Log();
+    $dao->entity_table = $this->getTableName();
+    $dao->entity_id = $this->id;
+    $dao->modified_id = $cid;
     $dao->modified_date = date("YmdHis");
     $dao->insert();
   }
@@ -498,9 +505,11 @@ class CRM_Core_DAO extends DB_DataObject {
    * Given an associative array of name/value pairs, extract all the values
    * that belong to this object and initialize the object with said values
    *
-   * @param array $params (reference ) associative array of name/value pairs
+   * @param array $params
+   *   (reference ) associative array of name/value pairs.
    *
-   * @return boolean      did we copy all null values into the object
+   * @return boolean
+   *   did we copy all null values into the object
    */
   public function copyValues(&$params) {
     $fields = &$this->fields();
@@ -538,8 +547,10 @@ class CRM_Core_DAO extends DB_DataObject {
    * this is a destructive store, calling function is responsible
    * for keeping sanity of id's.
    *
-   * @param object $object the object that we are extracting data from
-   * @param array  $values (reference ) associative array of name/value pairs
+   * @param object $object
+   *   The object that we are extracting data from.
+   * @param array $values
+   *   (reference ) associative array of name/value pairs.
    *
    * @return void
    * @static
@@ -560,9 +571,11 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Create an attribute for this specific field. We only do this for strings and text
    *
-   * @param array $field the field under task
+   * @param array $field
+   *   The field under task.
    *
-   * @return array|null the attributes for the object
+   * @return array|null
+   *   the attributes for the object
    * @static
    */
   public static function makeAttribute($field) {
@@ -591,7 +604,7 @@ class CRM_Core_DAO extends DB_DataObject {
           $cols = 80;
         }
 
-        $attributes         = array();
+        $attributes = array();
         $attributes['rows'] = $rows;
         $attributes['cols'] = $cols;
         return $attributes;
@@ -609,15 +622,18 @@ class CRM_Core_DAO extends DB_DataObject {
    * Get the size and maxLength attributes for this text field
    * (or for all text fields) in the DAO object.
    *
-   * @param string $class     name of DAO class
-   * @param string $fieldName field that i'm interested in or null if
+   * @param string $class
+   *   Name of DAO class.
+   * @param string $fieldName
+   *   Field that i'm interested in or null if.
    *                          you want the attributes for all DAO text fields
    *
-   * @return array assoc array of name => attribute pairs
+   * @return array
+   *   assoc array of name => attribute pairs
    * @static
    */
   public static function getAttribute($class, $fieldName = NULL) {
-    $object = new $class( );
+    $object = new $class();
     $fields = &$object->fields();
     if ($fieldName != NULL) {
       $field = CRM_Utils_Array::value($fieldName, $fields);
@@ -651,17 +667,22 @@ class CRM_Core_DAO extends DB_DataObject {
   /**
    * Check if there is a record with the same name in the db
    *
-   * @param string $value     the value of the field we are checking
-   * @param string $daoName   the dao object name
-   * @param string $daoID     the id of the object being updated. u can change your name
+   * @param string $value
+   *   The value of the field we are checking.
+   * @param string $daoName
+   *   The dao object name.
+   * @param string $daoID
+   *   The id of the object being updated. u can change your name.
    *                          as long as there is no conflict
-   * @param string $fieldName the name of the field in the DAO
+   * @param string $fieldName
+   *   The name of the field in the DAO.
    *
-   * @return boolean     true if object exists
+   * @return boolean
+   *   true if object exists
    * @static
    */
   public static function objectExists($value, $daoName, $daoID, $fieldName = 'name') {
-    $object = new $daoName( );
+    $object = new $daoName();
     $object->$fieldName = $value;
 
     $config = CRM_Core_Config::singleton();
@@ -679,9 +700,11 @@ class CRM_Core_DAO extends DB_DataObject {
    *
    * @param string $tableName
    * @param string $columnName
-   * @param bool   $i18nRewrite  whether to rewrite the query on multilingual setups
+   * @param bool $i18nRewrite
+   *   Whether to rewrite the query on multilingual setups.
    *
-   * @return boolean true if exists, else false
+   * @return boolean
+   *   true if exists, else false
    * @static
    */
   public static function checkFieldExists($tableName, $columnName, $i18nRewrite = TRUE) {
@@ -691,7 +714,7 @@ FROM $tableName
 LIKE %1
 ";
     $params = array(1 => array($columnName, 'String'));
-    $dao    = CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, $i18nRewrite);
+    $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, $i18nRewrite);
     $result = $dao->fetch() ? TRUE : FALSE;
     $dao->free();
     return $result;
@@ -766,7 +789,8 @@ LIKE %1
    * @param string $tableName
    * @param string $constraint
    *
-   * @return boolean true if constraint exists, false otherwise
+   * @return boolean
+   *   true if constraint exists, false otherwise
    * @static
    */
   public static function checkConstraintExists($tableName, $constraint) {
@@ -794,11 +818,12 @@ LIKE %1
    *
    * @throws Exception
    *
-   * @return boolean true if CONSTRAINT keyword exists, false otherwise
+   * @return boolean
+   *   true if CONSTRAINT keyword exists, false otherwise
    */
   public static function schemaRequiresRebuilding($tables = array("civicrm_contact")) {
     $show = array();
-    foreach($tables as $tableName){
+    foreach ($tables as $tableName) {
       if (!array_key_exists($tableName, $show)) {
         $query = "SHOW CREATE TABLE $tableName";
         $dao = CRM_Core_DAO::executeQuery($query);
@@ -812,7 +837,7 @@ LIKE %1
       }
 
       $result = preg_match("/\bCONSTRAINT\b\s/i", $show[$tableName]) ? TRUE : FALSE;
-      if ($result == TRUE){
+      if ($result == TRUE) {
         continue;
       }
       else {
@@ -829,7 +854,8 @@ LIKE %1
    * @param string $tableName
    * @param string $columnName
    *
-   * @return boolean true if in format, false otherwise
+   * @return boolean
+   *   true if in format, false otherwise
    * @static
    */
   public static function checkFKConstraintInFormat($tableName, $columnName) {
@@ -848,7 +874,7 @@ LIKE %1
     }
     $constraint = "`FK_{$tableName}_{$columnName}`";
     $pattern = "/\bCONSTRAINT\b\s+%s\s+\bFOREIGN\s+KEY\b\s/i";
-    return preg_match(sprintf($pattern, $constraint),$show[$tableName]) ? TRUE : FALSE;
+    return preg_match(sprintf($pattern, $constraint), $show[$tableName]) ? TRUE : FALSE;
   }
 
   /**
@@ -858,12 +884,13 @@ LIKE %1
    * @param string $columnName
    * @param string $columnValue
    *
-   * @return boolean true if the value is always $columnValue, false otherwise
+   * @return boolean
+   *   true if the value is always $columnValue, false otherwise
    * @static
    */
   public static function checkFieldHasAlwaysValue($tableName, $columnName, $columnValue) {
-    $query  = "SELECT * FROM $tableName WHERE $columnName != '$columnValue'";
-    $dao    = CRM_Core_DAO::executeQuery($query);
+    $query = "SELECT * FROM $tableName WHERE $columnName != '$columnValue'";
+    $dao = CRM_Core_DAO::executeQuery($query);
     $result = $dao->fetch() ? FALSE : TRUE;
     $dao->free();
     return $result;
@@ -875,12 +902,13 @@ LIKE %1
    * @param string $tableName
    * @param string $columnName
    *
-   * @return boolean true if if the value is always NULL, false otherwise
+   * @return boolean
+   *   true if if the value is always NULL, false otherwise
    * @static
    */
   public static function checkFieldIsAlwaysNull($tableName, $columnName) {
-    $query  = "SELECT * FROM $tableName WHERE $columnName IS NOT NULL";
-    $dao    = CRM_Core_DAO::executeQuery($query);
+    $query = "SELECT * FROM $tableName WHERE $columnName IS NOT NULL";
+    $dao = CRM_Core_DAO::executeQuery($query);
     $result = $dao->fetch() ? FALSE : TRUE;
     $dao->free();
     return $result;
@@ -891,7 +919,8 @@ LIKE %1
    *
    * @param string $tableName
    *
-   * @return boolean true if exists, else false
+   * @return boolean
+   *   true if exists, else false
    * @static
    */
   public static function checkTableExists($tableName) {
@@ -924,9 +953,11 @@ FROM   civicrm_domain
   /**
    * Find a DAO object for the given ID and return it.
    *
-   * @param int $id Id of the DAO object being searched for.
+   * @param int $id
+   *   Id of the DAO object being searched for.
    *
-   * @return object Object of the type of the class that called this function.
+   * @return object
+   *   Object of the type of the class that called this function.
    */
   public static function findById($id) {
     $object = new static();
@@ -940,13 +971,19 @@ FROM   civicrm_domain
   /**
    * Given a DAO name, a column name and a column value, find the record and GET the value of another column in that record
    *
-   * @param string  $daoName       Name of the DAO (Example: CRM_Contact_DAO_Contact to retrieve value from a contact)
-   * @param int     $searchValue   Value of the column you want to search by
-   * @param string  $returnColumn  Name of the column you want to GET the value of
-   * @param string  $searchColumn  Name of the column you want to search by
-   * @param boolean $force         Skip use of the cache
+   * @param string $daoName
+   *   Name of the DAO (Example: CRM_Contact_DAO_Contact to retrieve value from a contact).
+   * @param int $searchValue
+   *   Value of the column you want to search by.
+   * @param string $returnColumn
+   *   Name of the column you want to GET the value of.
+   * @param string $searchColumn
+   *   Name of the column you want to search by.
+   * @param bool $force
+   *   Skip use of the cache.
    *
-   * @return string|null          Value of $returnColumn in the retrieved record
+   * @return string|null
+   *   Value of $returnColumn in the retrieved record
    * @static
    */
   public static function getFieldValue($daoName, $searchValue, $returnColumn = 'name', $searchColumn = 'id', $force = FALSE) {
@@ -966,7 +1003,7 @@ FROM   civicrm_domain
     }
 
     if (!array_key_exists($cacheKey, self::$_dbColumnValueCache) || $force) {
-      $object   = new $daoName( );
+      $object = new $daoName();
       $object->$searchColumn = $searchValue;
       $object->selectAdd();
       $object->selectAdd($returnColumn);
@@ -985,17 +1022,23 @@ FROM   civicrm_domain
   /**
    * Given a DAO name, a column name and a column value, find the record and SET the value of another column in that record
    *
-   * @param string $daoName       Name of the DAO (Example: CRM_Contact_DAO_Contact to retrieve value from a contact)
-   * @param int    $searchValue   Value of the column you want to search by
-   * @param string $setColumn     Name of the column you want to SET the value of
-   * @param string $setValue      SET the setColumn to this value
-   * @param string $searchColumn  Name of the column you want to search by
-   *
-   * @return boolean          true if we found and updated the object, else false
+   * @param string $daoName
+   *   Name of the DAO (Example: CRM_Contact_DAO_Contact to retrieve value from a contact).
+   * @param int $searchValue
+   *   Value of the column you want to search by.
+   * @param string $setColumn
+   *   Name of the column you want to SET the value of.
+   * @param string $setValue
+   *   SET the setColumn to this value.
+   * @param string $searchColumn
+   *   Name of the column you want to search by.
+   *
+   * @return boolean
+   *   true if we found and updated the object, else false
    * @static
    */
   public static function setFieldValue($daoName, $searchValue, $setColumn, $setValue, $searchColumn = 'id') {
-    $object = new $daoName( );
+    $object = new $daoName();
     $object->selectAdd();
     $object->selectAdd("$searchColumn, $setColumn");
     $object->$searchColumn = $searchValue;
@@ -1014,9 +1057,11 @@ FROM   civicrm_domain
    * Get sort string
    *
    * @param array|object $sort either array or CRM_Utils_Sort
-   * @param string $default - default sort value
+   * @param string $default
+   *   Default sort value.
    *
-   * @return string - sortString
+   * @return string
+   *   sortString
    * @static
    */
   public static function getSortString($sort, $default = NULL) {
@@ -1038,16 +1083,21 @@ FROM   civicrm_domain
   /**
    * Fetch object based on array of properties
    *
-   * @param string $daoName  name of the dao object
-   * @param array  $params   (reference ) an assoc array of name/value pairs
-   * @param array  $defaults (reference ) an assoc array to hold the flattened values
-   * @param array  $returnProperities     an assoc array of fields that need to be returned, eg array( 'first_name', 'last_name')
-   *
-   * @return object an object of type referenced by daoName
+   * @param string $daoName
+   *   Name of the dao object.
+   * @param array $params
+   *   (reference ) an assoc array of name/value pairs.
+   * @param array $defaults
+   *   (reference ) an assoc array to hold the flattened values.
+   * @param array $returnProperities
+   *   An assoc array of fields that need to be returned, eg array( 'first_name', 'last_name').
+   *
+   * @return object
+   *   an object of type referenced by daoName
    * @static
    */
   public static function commonRetrieve($daoName, &$params, &$defaults, $returnProperities = NULL) {
-    $object = new $daoName( );
+    $object = new $daoName();
     $object->copyValues($params);
 
     // return only specific fields if returnproperties are sent
@@ -1066,14 +1116,16 @@ FROM   civicrm_domain
   /**
    * Delete the object records that are associated with this contact
    *
-   * @param string $daoName  name of the dao object
-   * @param  int  $contactId id of the contact to delete
+   * @param string $daoName
+   *   Name of the dao object.
+   * @param int $contactId
+   *   Id of the contact to delete.
    *
    * @return void
    * @static
    */
   public static function deleteEntityContact($daoName, $contactId) {
-    $object = new $daoName( );
+    $object = new $daoName();
 
     $object->entity_table = 'civicrm_contact';
     $object->entity_id = $contactId;
@@ -1083,7 +1135,8 @@ FROM   civicrm_domain
   /**
    * Execute a query
    *
-   * @param string $query query to be executed
+   * @param string $query
+   *   Query to be executed.
    *
    * @param array $params
    * @param bool $abort
@@ -1092,16 +1145,17 @@ FROM   civicrm_domain
    * @param bool $i18nRewrite
    * @param bool $trapException
    *
-   * @return CRM_Core_DAO object that holds the results of the query
+   * @return CRM_Core_DAO
+   *   object that holds the results of the query
    * @static
    */
   static function &executeQuery(
     $query,
-    $params        = array(),
-    $abort         = TRUE,
-    $daoName       = NULL,
-    $freeDAO       = FALSE,
-    $i18nRewrite   = TRUE,
+    $params = array(),
+    $abort = TRUE,
+    $daoName = NULL,
+    $freeDAO = FALSE,
+    $i18nRewrite = TRUE,
     $trapException = FALSE
   ) {
     $queryStr = self::composeQuery($query, $params, $abort);
@@ -1110,7 +1164,7 @@ FROM   civicrm_domain
       $dao = new CRM_Core_DAO();
     }
     else {
-      $dao = new $daoName( );
+      $dao = new $daoName();
     }
 
     if ($trapException) {
@@ -1136,17 +1190,20 @@ FROM   civicrm_domain
   /**
    * Execute a query and get the single result
    *
-   * @param string $query query to be executed
+   * @param string $query
+   *   Query to be executed.
    * @param array $params
    * @param bool $abort
    * @param bool $i18nRewrite
-   * @return string|null the result of the query if any
+   * @return string|null
+   *   the result of the query if any
    *
    * @static
    */
-  static function &singleValueQuery($query,
-    $params      = array(),
-    $abort       = TRUE,
+  static function &singleValueQuery(
+    $query,
+    $params = array(),
+    $abort = TRUE,
     $i18nRewrite = TRUE
   ) {
     $queryStr = self::composeQuery($query, $params, $abort);
@@ -1253,23 +1310,29 @@ FROM   civicrm_domain
   }
 
   /**
-   * This function is to make a shallow copy of an object
+   * make a shallow copy of an object
    * and all the fields in the object
    *
-   * @param string $daoName                 name of the dao
-   * @param array  $criteria                array of all the fields & values
+   * @param string $daoName
+   *   Name of the dao.
+   * @param array $criteria
+   *   Array of all the fields & values.
    *                                        on which basis to copy
-   * @param array  $newData                 array of all the fields & values
+   * @param array $newData
+   *   Array of all the fields & values.
    *                                        to be copied besides the other fields
-   * @param string $fieldsFix               array of fields that you want to prefix/suffix/replace
-   * @param string $blockCopyOfDependencies fields that you want to block from
+   * @param string $fieldsFix
+   *   Array of fields that you want to prefix/suffix/replace.
+   * @param string $blockCopyOfDependencies
+   *   Fields that you want to block from.
    *                                        getting copied
    *
    *
-   * @return (reference )                   the newly created copy of the object
+   * @return CRM_Core_DAO
+   *   the newly created copy of the object
    */
   static function &copyGeneric($daoName, $criteria, $newData = NULL, $fieldsFix = NULL, $blockCopyOfDependencies = NULL) {
-    $object = new $daoName( );
+    $object = new $daoName();
     if (!$newData) {
       $object->id = $criteria['id'];
     }
@@ -1289,12 +1352,12 @@ FROM   civicrm_domain
         break;
       }
 
-      $newObject   = new $daoName( );
+      $newObject = new $daoName();
 
       $fields = &$object->fields();
       if (!is_array($fieldsFix)) {
-        $fieldsToPrefix  = array();
-        $fieldsToSuffix  = array();
+        $fieldsToPrefix = array();
+        $fieldsToSuffix = array();
         $fieldsToReplace = array();
       }
       if (!empty($fieldsFix['prefix'])) {
@@ -1342,11 +1405,11 @@ FROM   civicrm_domain
   }
 
   public static function cascadeUpdate($daoName, $fromId, $toId, $newData = array()) {
-    $object = new $daoName( );
+    $object = new $daoName();
     $object->id = $fromId;
 
     if ($object->find(TRUE)) {
-      $newObject = new $daoName( );
+      $newObject = new $daoName();
       $newObject->id = $toId;
 
       if ($newObject->find(TRUE)) {
@@ -1409,18 +1472,21 @@ SELECT contact_id
   /**
    * Fetch object based on array of properties
    *
-   * @param string $daoName name of the dao object
+   * @param string $daoName
+   *   Name of the dao object.
    * @param string $fieldIdName
    * @param int $fieldId
    * @param $details
-   * @param array $returnProperities an assoc array of fields that need to be returned, eg array( 'first_name', 'last_name')
+   * @param array $returnProperities
+   *   An assoc array of fields that need to be returned, eg array( 'first_name', 'last_name').
    *
-   * @return object an object of type referenced by daoName
+   * @return object
+   *   an object of type referenced by daoName
    * @static
    */
   public static function commonRetrieveAll($daoName, $fieldIdName = 'id', $fieldId, &$details, $returnProperities = NULL) {
-    require_once (str_replace('_', DIRECTORY_SEPARATOR, $daoName) . ".php");
-    $object = new $daoName( );
+    require_once(str_replace('_', DIRECTORY_SEPARATOR, $daoName) . ".php");
+    $object = new $daoName();
     $object->$fieldIdName = $fieldId;
 
     // return only specific fields if returnproperties are sent
@@ -1475,7 +1541,8 @@ SELECT contact_id
       if (!defined('CIVICRM_DSN')) {
         if (function_exists('mysql_real_escape_string')) {
           return mysql_real_escape_string($string);
-        } else {
+        }
+        else {
           throw new CRM_Core_Exception("Cannot generate SQL. \"mysql_real_escape_string\" is missing. Have you installed PHP \"mysql\" extension?");
         }
       }
@@ -1489,9 +1556,11 @@ SELECT contact_id
   /**
    * Escape a list of strings for use with "WHERE X IN (...)" queries.
    *
-   * @param $strings array
-   * @param $default string the value to use if $strings has no elements
-   * @return string eg "abc","def","ghi"
+   * @param array $strings
+   * @param string $default
+   *   the value to use if $strings has no elements.
+   * @return string
+   *   eg "abc","def","ghi"
    */
   public static function escapeStrings($strings, $default = NULL) {
     static $_dao = NULL;
@@ -1519,7 +1588,8 @@ SELECT contact_id
     // note that mysql does not escape these characters
     if ($string && in_array($string,
         array('%', '_', '%%', '_%')
-      )) {
+      )
+    ) {
       return '\\' . $string;
     }
 
@@ -1555,16 +1625,24 @@ SELECT contact_id
       'CRM_Core_DAO_StateProvince',
       'CRM_Core_DAO_Country',
       'CRM_Core_DAO_Domain',
-      'CRM_Financial_DAO_FinancialType'//because valid ones exist & we use pick them due to pseudoconstant can't reliably create & delete these
+      'CRM_Financial_DAO_FinancialType'
+      //because valid ones exist & we use pick them due to pseudoconstant can't reliably create & delete these
     );
 
+    // Prefer to instantiate BAO's instead of DAO's (when possible)
+    // so that assignTestValue()/assignTestFK() can be overloaded.
+    $baoName = str_replace('_DAO_', '_BAO_', $daoName);
+    if (class_exists($baoName)) {
+      $daoName = $baoName;
+    }
+
     for ($i = 0; $i < $numObjects; ++$i) {
 
       ++$counter;
       /** @var CRM_Core_DAO $object */
       $object = new $daoName();
 
-      $fields = & $object->fields();
+      $fields = &$object->fields();
       foreach ($fields as $fieldName => $fieldDef) {
         $dbName = $fieldDef['name'];
         $FKClassName = CRM_Utils_Array::value('FKClassName', $fieldDef);
@@ -1578,7 +1656,8 @@ SELECT contact_id
           if ($FKClassName != NULL) {
             $object->assignTestFK($fieldName, $fieldDef, $params);
             continue;
-          } else {
+          }
+          else {
             $object->assignTestValue($fieldName, $fieldDef, $counter);
           }
         }
@@ -1637,7 +1716,8 @@ SELECT contact_id
           && ($required || $dbName == 'contact_id')
           //I'm a bit stuck on this one - we might need to change the singleValueAlter so that the entities don't share a contact
           // to make this test process pass - line below makes pass for now
-          && $dbName != 'member_of_contact_id') {
+          && $dbName != 'member_of_contact_id'
+        ) {
           $deletions[] = array($FKClassName, array('id' => $object->$dbName)); // x
         }
       }
@@ -1647,7 +1727,7 @@ SELECT contact_id
 
     foreach ($deletions as $deletion) {
       CRM_Core_DAO::deleteTestObjects($deletion[0], $deletion[1]);
-  }
+    }
   }
 
   /**
@@ -1757,7 +1837,8 @@ SELECT contact_id
    * Build a list of triggers via hook and add them to (err, reconcile them
    * with) the database.
    *
-   * @param $tableName string the specific table requiring a rebuild; or NULL to rebuild all tables
+   * @param string $tableName
+   *   the specific table requiring a rebuild; or NULL to rebuild all tables.
    * @param bool $force
    *
    * @see CRM-9716
@@ -1800,7 +1881,8 @@ SELECT contact_id
   /**
    * Wrapper function to drop triggers
    *
-   * @param $tableName string the specific table requiring a rebuild; or NULL to rebuild all tables
+   * @param string $tableName
+   *   the specific table requiring a rebuild; or NULL to rebuild all tables.
    */
   public static function dropTriggers($tableName = NULL) {
     $info = array();
@@ -1813,8 +1895,10 @@ SELECT contact_id
   }
 
   /**
-   * @param $info array per hook_civicrm_triggerInfo
-   * @param $onlyTableName string the specific table requiring a rebuild; or NULL to rebuild all tables
+   * @param array $info
+   *   per hook_civicrm_triggerInfo.
+   * @param string $onlyTableName
+   *   the specific table requiring a rebuild; or NULL to rebuild all tables.
    */
   public static function createTriggers(&$info, $onlyTableName = NULL) {
     // Validate info array, should probably raise errors?
@@ -1901,11 +1985,11 @@ SELECT contact_id
       }
       foreach ($tables as $eventName => $events) {
         foreach ($events as $whenName => $parts) {
-          $varString   = implode("\n", $parts['variables']);
-          $sqlString   = implode("\n", $parts['sql']);
-          $validName   = CRM_Core_DAO::shortenSQLName($tableName, 48, TRUE);
+          $varString = implode("\n", $parts['variables']);
+          $sqlString = implode("\n", $parts['sql']);
+          $validName = CRM_Core_DAO::shortenSQLName($tableName, 48, TRUE);
           $triggerName = "{$validName}_{$whenName}_{$eventName}";
-          $triggerSQL  = "CREATE TRIGGER $triggerName $whenName $eventName ON $tableName FOR EACH ROW BEGIN $varString $sqlString END";
+          $triggerSQL = "CREATE TRIGGER $triggerName $whenName $eventName ON $tableName FOR EACH ROW BEGIN $varString $sqlString END";
 
           CRM_Core_DAO::executeQuery("DROP TRIGGER IF EXISTS $triggerName");
           CRM_Core_DAO::executeQuery(
@@ -1924,7 +2008,8 @@ SELECT contact_id
   /**
    * Given a list of fields, create a list of references.
    *
-   * @param string $className BAO/DAO class name
+   * @param string $className
+   *   BAO/DAO class name.
    * @return array<CRM_Core_Reference_Interface>
    */
   public static function createReferenceColumns($className) {
@@ -1947,7 +2032,8 @@ SELECT contact_id
   /**
    * Find all records which refer to this entity.
    *
-   * @return array of objects referencing this
+   * @return array
+   *   Array of objects referencing this
    */
   public function findReferences() {
     $links = self::getReferencesToTable(static::getTableName());
@@ -1970,12 +2056,13 @@ SELECT contact_id
   }
 
   /**
-   * @return array each item has keys:
-   *  - name: string
-   *  - type: string
-   *  - count: int
-   *  - table: string|null SQL table name
-   *  - key: string|null SQL column name
+   * @return array
+   *   each item has keys:
+   *   - name: string
+   *   - type: string
+   *   - count: int
+   *   - table: string|null SQL table name
+   *   - key: string|null SQL column name
    */
   public function getReferenceCounts() {
     $links = self::getReferencesToTable(static::getTableName());
@@ -2007,10 +2094,12 @@ SELECT contact_id
    * schema metadata in dynamicForeignKey which enumerates a restricted
    * set of possible entity_table's.
    *
-   * @param string $tableName table referred to
+   * @param string $tableName
+   *   Table referred to.
    *
-   * @return array structure of table and column, listing every table with a
-   * foreign key reference to $tableName, and the column where the key appears.
+   * @return array
+   *   structure of table and column, listing every table with a
+   *   foreign key reference to $tableName, and the column where the key appears.
    */
   public static function getReferencesToTable($tableName) {
     $refsFound = array();
@@ -2031,7 +2120,8 @@ SELECT contact_id
   /**
    * Lookup the value of a MySQL global configuration variable.
    *
-   * @param string $name e.g. "thread_stack"
+   * @param string $name
+   *   E.g. "thread_stack".
    * @param mixed $default
    * @return mixed
    */
@@ -2054,8 +2144,10 @@ SELECT contact_id
    * The overriding function will generally call the lower-level CRM_Core_PseudoConstant::get
    *
    * @param string $fieldName
-   * @param string $context : @see CRM_Core_DAO::buildOptionsContext
-   * @param array $props : whatever is known about this bao object
+   * @param string $context
+   *   @see CRM_Core_DAO::buildOptionsContext.
+   * @param array $props
+   *   whatever is known about this bao object.
    *
    * @return Array|bool
    */
@@ -2091,7 +2183,7 @@ SELECT contact_id
   /**
    * Provides documentation and validation for the buildOptions $context param
    *
-   * @param String $context
+   * @param string $context
    *
    * @throws Exception
    * @return array
@@ -2137,12 +2229,17 @@ SELECT contact_id
    * $field => array('LIKE' => array('%me%))
    * etc
    *
-   * @param string $fieldName name of fields
-   * @param $filter array filter to be applied indexed by operator
-   * @param $type String type of field (not actually used - nor in api @todo )
-   * @param $alias String alternative field name ('as') @todo- not actually used
-   * @param bool $returnSanitisedArray return a sanitised array instead of a clause
-   *  this is primarily so we can add filters @ the api level to the Query object based fields
+   * @param string $fieldName
+   *   Name of fields.
+   * @param array $filter
+   *   filter to be applied indexed by operator.
+   * @param string $type
+   *   type of field (not actually used - nor in api @todo ).
+   * @param string $alias
+   *   alternative field name ('as') @todo- not actually used.
+   * @param bool $returnSanitisedArray
+   *   Return a sanitised array instead of a clause.
+   *   this is primarily so we can add filters @ the api level to the Query object based fields
    *
    * @throws Exception
    *
@@ -2153,7 +2250,8 @@ SELECT contact_id
    *  preferable to not double-banger the return context next refactor of this - but keeping the attention
    *  in one place has some advantages as we try to extend this format
    *
-   * @return NULL|string|array a string is returned if $returnSanitisedArray is not set, otherwise and Array or NULL
+   * @return NULL|string|array
+   *   a string is returned if $returnSanitisedArray is not set, otherwise and Array or NULL
    *   depending on whether it is supported as yet
    */
   public static function createSQLFilter($fieldName, $filter, $type, $alias = NULL, $returnSanitisedArray = FALSE) {
@@ -2207,7 +2305,7 @@ SELECT contact_id
 
           default:
             if (!$returnSanitisedArray) {
-              return(sprintf('%s %s "%s"', $fieldName, $operator, CRM_Core_DAO::escapeString($criteria)));
+              return (sprintf('%s %s "%s"', $fieldName, $operator, CRM_Core_DAO::escapeString($criteria)));
             }
             else {
               return NULL; // not yet implemented (tests required to implement)
@@ -2223,7 +2321,23 @@ SELECT contact_id
    * @return array
    */
   public static function acceptedSQLOperators() {
-    return array('=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=", "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'IS NOT NULL', 'IS NULL');
+    return array(
+      '=',
+      '<=',
+      '>=',
+      '>',
+      '<',
+      'LIKE',
+      "<>",
+      "!=",
+      "NOT LIKE",
+      'IN',
+      'NOT IN',
+      'BETWEEN',
+      'NOT BETWEEN',
+      'IS NOT NULL',
+      'IS NULL'
+    );
   }
 
   /**
@@ -2234,8 +2348,10 @@ SELECT contact_id
    * which can be longer than this length, this function helps with creating
    * strings that meet various criteria.
    *
-   * @param string $string - the string to be shortened
-   * @param int $length - the max length of the string
+   * @param string $string
+   *   The string to be shortened.
+   * @param int $length
+   *   The max length of the string.
    *
    * @param bool $makeRandom
    *
@@ -2263,6 +2379,7 @@ SELECT contact_id
   /**
    * @param array $params
    */
-  public function setApiFilter(&$params) {}
+  public function setApiFilter(&$params) {
+  }
 
 }