https://t.me/RX1948
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/laciasmara.com/public_html/shop/application/models/Campaign_m.php
<?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
}

https://t.me/RX1948 - 2025