<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.7 |
+ | CiviCRM version 5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2017 |
+ | Copyright CiviCRM LLC (c) 2004-2018 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
* All DAO classes should inherit from this class.
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2017
+ * @copyright CiviCRM LLC (c) 2004-2018
*/
if (!defined('DB_DSN_MODE')) {
*
* @param array $params
* (reference ) associative array of name/value pairs.
+ * @param bool $serializeArrays
+ * Should arrays that are passed in be serialised according to the metadata.
+ * Eventually this should be always true / gone, but in the interests of caution
+ * it is being grandfathered in. In general an array is not valid on the DAO
+ * but there may be instances where this function is called & then some handling
+ * takes place on the would-be array.
*
* @return bool
* Did we copy all null values into the object
*/
- public function copyValues(&$params) {
+ public function copyValues(&$params, $serializeArrays = FALSE) {
$fields = $this->fields();
$allNull = TRUE;
foreach ($fields as $name => $value) {
if ($pValue === '') {
$this->$dbName = 'null';
}
+ elseif ($serializeArrays && is_array($pValue) && !empty($value['serialize'])) {
+ $this->$dbName = CRM_Core_DAO::serializeField($pValue, $value['serialize']);
+ $allNull = FALSE;
+ }
else {
+ if (!$serializeArrays && is_array($pValue) && !empty($value['serialize'])) {
+ Civi::log()->warning(ts('use copyParams to serialize arrays (' . __CLASS__ . '.' . $name . ')'), ['civi.tag' => 'deprecated']);
+ }
$this->$dbName = $pValue;
$allNull = FALSE;
}
*
* @param $componentIDs
* @param string $tableName
- *
+ * @param string $idField
* @return array
*/
- public static function &getContactIDsFromComponent(&$componentIDs, $tableName) {
+ public static function getContactIDsFromComponent($componentIDs, $tableName, $idField = 'id') {
$contactIDs = array();
if (empty($componentIDs)) {
$query = "
SELECT contact_id
FROM $tableName
- WHERE id IN ( $IDs )
+ WHERE $idField IN ( $IDs )
";
$dao = CRM_Core_DAO::executeQuery($query);