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;
}