|
Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/laciasmara.com/public_html/shop/application/models/ |
Upload File : |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Subscriber_m extends MY_Model
{
protected $table = 'subscribers';
function __construct()
{
parent::__construct();
}
/**
* Get All Subscribers
*/
public function get_all($filters = [], $limit = null, $offset = null, $order_by = 'id', $order_dir = 'DESC')
{
$this->db->select('*')
->from($this->table);
// Filtering
if (!empty($filters)) {
foreach ($filters as $field => $value) {
if (is_array($value)) {
$this->db->where_in($field, $value);
} else {
$this->db->where($field, $value);
}
}
}
// Order
$this->db->order_by($order_by, $order_dir);
// Limit & Offset
if ($limit !== null) {
$this->db->limit($limit, $offset ?? 0);
}
return $this->db->get()->result_array();
}
/**
* Get subscribers by group
*/
public function get_by_group($group_id, $status = 'active')
{
$this->db->select('s.*');
$this->db->from($this->table . ' s');
$this->db->join('subscriber_group_members sgm', 's.id = sgm.subscriber_id');
$this->db->where('sgm.group_id', $group_id);
$this->db->where('s.status', $status);
$query = $this->db->get();
return $query->result_array();
}
/**
* Add subscriber to group
*/
public function add_to_group($subscriber_id, $group_id)
{
$data = array(
'subscriber_id' => $subscriber_id,
'group_id' => $group_id,
'joined_at' => date('Y-m-d H:i:s')
);
return $this->db->insert('subscriber_group_members', $data);
}
/**
* Remove subscriber from group
*/
public function remove_from_group($subscriber_id, $group_id)
{
$this->db->where('subscriber_id', $subscriber_id);
$this->db->where('group_id', $group_id);
return $this->db->delete('subscriber_group_members');
}
/**
* Get subscriber groups
*/
public function get_subscriber_groups($subscriber_id)
{
$this->db->select('sg.*');
$this->db->from('subscriber_groups sg');
$this->db->join('subscriber_group_members sgm', 'sg.id = sgm.group_id');
$this->db->where('sgm.subscriber_id', $subscriber_id);
$query = $this->db->get();
return $query->result_array();
}
/**
* Check if email exists
*/
public function email_exists($email, $exclude_id = null)
{
$this->db->where('email', $email);
if ($exclude_id) {
$this->db->where('id !=', $exclude_id);
}
$query = $this->db->get($this->table);
return $query->num_rows() > 0;
}
/**
* Generate unsubscribe token
*/
public function generate_unsubscribe_token($subscriber_id)
{
$token = md5($subscriber_id . time() . rand());
$this->update($subscriber_id, array('unsubscribe_token' => $token));
return $token;
}
/**
* Unsubscribe by token
*/
public function unsubscribe_by_token($token)
{
$subscriber = $this->_get_by(array('unsubscribe_token' => $token));
if ($subscriber) {
$this->update($subscriber['id'], array(
'status' => 'unsubscribed',
'unsubscribed_at' => date('Y-m-d H:i:s')
));
return $subscriber;
}
return false;
}
/**
* Bulk import subscribers
*/
public function bulk_import($subscribers_data)
{
$success = 0;
$errors = array();
foreach ($subscribers_data as $index => $data) {
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = "Row " . ($index + 1) . ": Invalid email format";
continue;
}
if ($this->email_exists($data['email'])) {
$errors[] = "Row " . ($index + 1) . ": Email already exists";
continue;
}
if ($this->insert($data)) {
$success++;
} else {
$errors[] = "Row " . ($index + 1) . ": Failed to insert";
}
}
return array('success' => $success, 'errors' => $errors);
}
}