public static function add($in, $id = null) { $dbo = Pommo::$_dbo; // set the registration date if not provided if (empty($in['registered'])) { $in['registered'] = time(); } if (!Pommo_Subscribers::validate($in)) { return false; } $insert = $id === null ? 'INSERT' : 'REPLACE'; $query = $insert . ' INTO ' . $dbo->table['subscribers'] . ' SET [subscriber_id=%I,] email="%s", time_registered=FROM_UNIXTIME(%i), flag=%i, ip=INET_ATON("%s"), status=%i'; $query = $dbo->prepare($query, @array($id, $in['email'], $in['registered'], $in['flag'], $in['ip'], $in['status'])); // fetch new subscriber's ID $id = $dbo->lastId($query); if (!$id) { return false; } // insert pending (if exists) if ($in['status'] == 2) { $query = "\n INSERT INTO " . $dbo->table['subscriber_pending'] . "\n SET\n [pending_array='%S',]\n subscriber_id=%i,\n pending_code='%s',\n pending_type='%s'"; $query = $dbo->prepare($query, @array($in['pending_array'], $id, $in['pending_code'], $in['pending_type'])); if (!$dbo->query($query)) { return false; } } // insert data $values = array(); foreach ($in['data'] as $fieldId => $value) { $values[] = $dbo->prepare("(%i,%i,'%s')", array($fieldId, $id, $value)); } if (!empty($values)) { $query = "\n INSERT INTO " . $dbo->table['subscriber_data'] . "\n (field_id, subscriber_id, value)\n VALUES " . implode(',', $values); if (!$dbo->query($query)) { return false; } } return $id; }