예제 #1
0
 private function getLocalCampaigns($campaign_state = null)
 {
     $req = new DbQuery();
     $req->select('campaign_id, campaign_state, campaign_date_update, campaign_date_send, campaign_name');
     $req->from($this->table);
     if ($campaign_state) {
         $req->where('campaign_state = ' . (string) $campaign_state);
     }
     $req->orderby('campaign_date_update DESC');
     $req->limit(5);
     $user_list = Db::getInstance()->executeS($req, true, false);
     return $user_list;
 }
예제 #2
0
 public function connectFromCredentials($media = 'all')
 {
     $req = new DbQuery();
     $req->select('*');
     $req->from('expressmailing');
     $req->orderby('api_media DESC');
     switch ($media) {
         case 'email':
             $req->where('api_media IN (\'all\', \'email\')');
             break;
         case 'fax':
             $req->where('api_media IN (\'all\', \'fax\')');
             break;
         case 'sms':
             $req->where('api_media IN (\'all\', \'sms\')');
             break;
         default:
             $req->where('api_media = \'all\'');
             break;
     }
     $api_credentials = Db::getInstance()->executeS($req, true, false);
     if (count($api_credentials) > 0) {
         // On indique que la base locale contient des credentials
         // ------------------------------------------------------
         $this->credentials = count($api_credentials);
         // Si on trouve un couple login/password en local, on initie la connexion à l'api
         // ------------------------------------------------------------------------------
         if ($this->openSession()) {
             // Puis on regarde si ce compte est toujours actif
             // -----------------------------------------------
             foreach ($api_credentials as $account) {
                 $this->error = null;
                 $response_array = array();
                 $parameters = array('login' => $account['api_login'], 'password' => $account['api_password']);
                 if ($this->connectUser($parameters, $response_array)) {
                     if (isset($response_array['account_id']) && (int) $response_array['account_id'] > 0) {
                         // Le compte est toujours actif !
                         // ------------------------------
                         Configuration::updateValue('adminmarketing_session_api', $this->session_id);
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }
예제 #3
0
    public static function getCustomersSmsRequest($campaign_id, $checked_langs, $checked_groups, $checked_campaign_active, $checked_products, $checked_categories, $limit = 0, &$list_total = null)
    {
        $sql_calc_found = is_null($list_total) ? '' : 'SQL_CALC_FOUND_ROWS ';
        $req = new DbQuery();
        $req->select($sql_calc_found . (int) $campaign_id . ' as campaign_id, address.phone_mobile as target,
				address.phone_mobile as col_0, customer.lastname as col_1, customer.firstname as col_2,address.postcode as col_3,
				address.city as col_4, \'prestashop\' as source');
        $req->from('customer', 'customer');
        $req->leftJoin('customer_group', 'customer_group', 'customer_group.id_customer = customer.id_customer');
        $req->leftJoin('guest', 'guest', 'guest.id_customer = customer.id_customer');
        $req->leftJoin('connections', 'connections', 'connections.id_guest = guest.id_guest');
        $req->innerJoin('address', 'address', 'address.id_customer = customer.id_customer AND address.phone_mobile <> \'\'');
        $req->leftJoin('country', 'country', 'address.id_country = country.id_country');
        $where = array();
        $where[] = 'address.phone_mobile IS NOT NULL AND address.phone_mobile <> \'\'';
        if (!empty($checked_langs)) {
            $where[] = 'customer.id_lang IN(' . implode(', ', array_map('intval', $checked_langs)) . ')';
        }
        if (!empty($checked_groups)) {
            $where[] = 'customer_group.id_group IN(' . implode(', ', array_map('intval', $checked_groups)) . ')';
        }
        if ($checked_campaign_active) {
            $where[] = 'customer.active = 1';
        }
        if (!empty($checked_products) || !empty($checked_categories)) {
            $where_products_categories = array();
            $req->leftJoin('cart', 'cart', 'cart.id_customer = customer.id_customer');
            $req->leftJoin('cart_product', 'cart_product', 'cart_product.id_cart = cart.id_cart');
            if (!empty($checked_products)) {
                $where_products_categories[] = 'cart_product.id_product IN(' . implode(', ', array_map('intval', $checked_products)) . ')';
            }
            if (!empty($checked_categories)) {
                $req->leftJoin('category_product', 'category_product', 'category_product.id_product = cart_product.id_product');
                $where_products_categories[] = 'category_product.id_category IN(' . implode(', ', array_map('intval', $checked_categories)) . ')';
            }
            $where[] = implode(' OR ', $where_products_categories);
        }
        $req->where(implode(' AND ', $where));
        $req->orderby('customer.id_customer');
        $req->groupby('customer.id_customer');
        $limit = (int) $limit;
        if ($limit) {
            $req->limit($limit);
        }
        return $req;
    }