|
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 Campaign_m extends MY_Model
{
protected $table = 'campaigns';
protected $fillable = array('name', 'subject', 'from_name', 'from_email', 'reply_to', 'template_id', 'html_content', 'campaign_type', 'status', 'send_type', 'scheduled_at', 'created_by');
/**
* Get campaigns with template info
*/
public function get_campaigns_with_template()
{
$this->db->select('c.*, et.name as template_name');
$this->db->from($this->table . ' c');
$this->db->join('campaign_email_templates et', 'c.template_id = et.id', 'left');
$this->db->order_by('c.created_at', 'desc');
$query = $this->db->get();
return $query->result_array();
}
/**
* Add recipients to campaign
*/
public function add_recipients($campaign_id, $recipient_data)
{
// recipient_data bisa berupa:
// - array subscriber_ids
// - array group_ids
// - mixed
$recipients = array();
if (isset($recipient_data['subscribers'])) {
foreach ($recipient_data['subscribers'] as $subscriber_id) {
$recipients[] = array(
'campaign_id' => $campaign_id,
'subscriber_id' => $subscriber_id
);
}
}
if (isset($recipient_data['groups'])) {
foreach ($recipient_data['groups'] as $group_id) {
// Get all subscribers in this group
$this->load->model('Subscriber_model');
$subscribers = $this->Subscriber_model->get_by_group($group_id);
foreach ($subscribers as $subscriber) {
$recipients[] = array(
'campaign_id' => $campaign_id,
'subscriber_id' => $subscriber['id'],
'group_id' => $group_id
);
}
}
}
if (!empty($recipients)) {
$this->db->insert_batch('campaign_recipients', $recipients);
// Update total recipients count
$total = count($recipients);
$this->update($campaign_id, array('total_recipients' => $total));
return $total;
}
return 0;
}
/**
* Get campaign recipients
*/
public function get_recipients($campaign_id)
{
$this->db->select('cr.*, s.email, s.first_name, s.last_name');
$this->db->from('campaign_recipients cr');
$this->db->join('subscribers s', 'cr.subscriber_id = s.id');
$this->db->where('cr.campaign_id', $campaign_id);
$query = $this->db->get();
return $query->result_array();
}
/**
* Update campaign stats
*/
public function update_stats($campaign_id)
{
// Count dari email_logs
$this->db->select('
COUNT(*) as total_sent,
SUM(CASE WHEN status = "delivered" THEN 1 ELSE 0 END) as total_delivered,
SUM(CASE WHEN status = "opened" OR opened_at IS NOT NULL THEN 1 ELSE 0 END) as total_opened,
SUM(CASE WHEN status = "clicked" OR clicked_at IS NOT NULL THEN 1 ELSE 0 END) as total_clicked,
SUM(CASE WHEN status = "bounced" THEN 1 ELSE 0 END) as total_bounced,
SUM(CASE WHEN status = "unsubscribed" THEN 1 ELSE 0 END) as total_unsubscribed
');
$this->db->from('campaign_email_logs');
$this->db->where('campaign_id', $campaign_id);
$query = $this->db->get();
$stats = $query->row_array();
if ($stats) {
$this->update($campaign_id, $stats);
}
return $stats;
}
// Website Campaign
function get_all_website_campaigns()
{
$this->db->select('pc.*');
$this->db->from('promotional_campaigns pc');
$this->db->order_by('pc.created_at', 'desc');
$query = $this->db->get();
return $query->result();
}
function count_website_campaigns($is_active = null)
{
$this->db->from('promotional_campaigns');
if (!is_null($is_active)) {
$this->db->where('is_active', $is_active);
}
return $this->db->count_all_results();
}
// End of website campaign
}