Exemplo n.º 1
0
 /**
  * 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;
 }