/** * Creates, saves, and returns a duplicate static list containing the same items. * * @return X2List|null The active record model for the static clone is returned * if the operation was successful; otherwise Null is returned. */ public function staticDuplicate() { $dup = new X2List(); $dup->attributes = $this->attributes; $dup->id = null; $dup->nameId = null; $dup->type = 'static'; $dup->createDate = $dup->lastUpdated = time(); $dup->isNewRecord = true; if (!$dup->save()) { return; } $count = 0; $listItemRecords = array(); $params = array(); if ($this->type == 'dynamic') { $itemIds = $this->queryCommand(true)->select('id')->queryColumn(); foreach ($itemIds as $id) { $listItemRecords[] = '(NULL,:contactId' . $count . ',:listId' . $count . ',0)'; $params[':contactId' . $count] = $id; $params[':listId' . $count] = $dup->id; $count++; } } else { //static type lists //generate sql to replicate list items foreach ($this->listItems as $listItem) { if (!empty($listItem->emailAddress)) { $itemSql = '(:email' . $count; $params[':email' . $count] = $listItem->emailAddress; } else { $itemSql = '(NULL'; } if (!empty($listItem->contactId)) { $itemSql .= ',:contactId' . $count; $params[':contactId' . $count] = $listItem->contactId; } else { $itemSql .= ',NULL'; } $itemSql .= ',:listId' . $count . ',:unsubd' . $count . ')'; $params[':listId' . $count] = $dup->id; $params[':unsubd' . $count] = $listItem->unsubscribed; $listItemRecords[] = $itemSql; $count++; } } if (count($listItemRecords) == 0) { return; } $sql = 'INSERT into x2_list_items (emailAddress, contactId, listId, unsubscribed) VALUES ' . implode(',', $listItemRecords) . ';'; $dup->count = $count; $transaction = Yii::app()->db->beginTransaction(); try { Yii::app()->db->createCommand($sql)->execute($params); $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); $dup->delete(); Yii::log($e->getMessage(), 'error', 'application'); $dup = null; } return $dup; }