Exemplo n.º 1
0
function fn_em_confirm_subscription($email)
{
    $subscriber_data = fn_em_get_subscriber_data($email);
    $subscribed = EmailSync::instance()->subscribe(array('email' => $email, 'timestamp' => $subscriber_data['timestamp'], 'lang_code' => $subscriber_data['lang_code'], 'ip_address' => fn_ip_from_db($subscriber_data['ip_address']), 'name' => $subscriber_data['name']));
    if ($subscribed) {
        $unsubscribe_key = md5(uniqid());
        db_query("UPDATE ?:em_subscribers SET ?u WHERE email = ?s", array('status' => 'A', 'unsubscribe_key' => $unsubscribe_key), $email);
        if (Registry::get('addons.email_marketing.em_welcome_letter') == 'Y') {
            Mailer::sendMail(array('to' => $email, 'from' => 'default_company_newsletter_email', 'data' => array('url' => fn_url('em_subscribers.unsubscribe?unsubscribe_key=' . $unsubscribe_key)), 'tpl' => Registry::get('addons.email_marketing.em_double_opt_in') == 'Y' ? 'addons/email_marketing/welcome_2optin.tpl' : 'addons/email_marketing/welcome.tpl'));
        }
    }
    return $subscribed;
}
Exemplo n.º 2
0
function fn_get_discussions($params, $items_per_page)
{
    // Init filter
    $params = LastView::instance()->update('discussion', $params);
    // Set default values to input params
    $default_params = array('page' => 1, 'items_per_page' => $items_per_page);
    $params = array_merge($default_params, $params);
    // Define fields that should be retrieved
    $fields = array('?:discussion_posts.*', '?:discussion_messages.message', '?:discussion_rating.rating_value', '?:discussion.*');
    // Define sort fields
    $sortings = array('object' => "?:discussion.object_type", 'name' => "?:discussion_posts.name", 'ip_address' => "?:discussion_posts.ip_address", 'timestamp' => "?:discussion_posts.timestamp", 'status' => "?:discussion_posts.status", 'date' => "?:orders.timestamp", 'total' => "?:orders.total");
    $sorting = db_sort($params, $sortings, 'timestamp', 'desc');
    $condition = $join = '';
    if (isset($params['name']) && fn_string_not_empty($params['name'])) {
        $condition .= db_quote(" AND ?:discussion_posts.name LIKE ?l", "%" . trim($params['name']) . "%");
    }
    if (isset($params['message']) && fn_string_not_empty($params['message'])) {
        $condition .= db_quote(" AND ?:discussion_messages.message LIKE ?l", "%" . trim($params['message']) . "%");
    }
    if (!empty($params['type'])) {
        $condition .= db_quote(" AND ?:discussion.type = ?s", $params['type']);
    }
    if (!empty($params['status'])) {
        $condition .= db_quote(" AND ?:discussion_posts.status = ?s", $params['status']);
    }
    if (!empty($params['post_id'])) {
        $condition .= db_quote(" AND ?:discussion_posts.post_id = ?i", $params['post_id']);
    }
    if (isset($params['ip_address']) && fn_string_not_empty($params['ip_address'])) {
        $condition .= db_quote(" AND ?:discussion_posts.ip_address = ?s", fn_ip_to_db(trim($params['ip_address'])));
    }
    if (!empty($params['rating_value'])) {
        $condition .= db_quote(" AND ?:discussion_rating.rating_value = ?i", $params['rating_value']);
    }
    if (!empty($params['object_type'])) {
        $condition .= db_quote(" AND ?:discussion.object_type = ?s", $params['object_type']);
    }
    $condition .= fn_get_discussion_company_condition('?:discussion.company_id');
    if (!empty($params['period']) && $params['period'] != 'A') {
        list($params['time_from'], $params['time_to']) = fn_create_periods($params);
        $condition .= db_quote(" AND (?:discussion_posts.timestamp >= ?i AND ?:discussion_posts.timestamp <= ?i)", $params['time_from'], $params['time_to']);
    }
    $join .= " INNER JOIN ?:discussion ON ?:discussion.thread_id = ?:discussion_posts.thread_id";
    $join .= " INNER JOIN ?:discussion_messages ON ?:discussion_messages.post_id = ?:discussion_posts.post_id";
    $join .= " INNER JOIN ?:discussion_rating ON ?:discussion_rating.post_id = ?:discussion_posts.post_id";
    $limit = '';
    if (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:discussion_posts {$join} WHERE 1 {$condition}");
        $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']);
    }
    $posts = db_get_array("SELECT " . implode(',', $fields) . " FROM ?:discussion_posts {$join} WHERE 1 {$condition} {$sorting} {$limit}");
    foreach ($posts as $k => $post) {
        if (isset($post['ip_address'])) {
            $posts[$k]['ip_address'] = fn_ip_from_db($post['ip_address']);
        }
    }
    return array($posts, $params);
}
Exemplo n.º 3
0
            exit;
        }
        return array(CONTROLLER_STATUS_OK, fn_url());
    }
    if ($mode == 'delete_post' && defined('AJAX_REQUEST')) {
        db_query("DELETE FROM ?:discussion_messages WHERE post_id = ?i", $_REQUEST['post_id']);
        db_query("DELETE FROM ?:discussion_rating WHERE post_id = ?i", $_REQUEST['post_id']);
        db_query("DELETE FROM ?:discussion_posts WHERE post_id = ?i", $_REQUEST['post_id']);
        return array(CONTROLLER_STATUS_OK, fn_url());
    }
    return;
}
// No action for vendor at the index
if (Registry::get('runtime.company_id') && fn_allowed_for('MULTIVENDOR')) {
    return;
}
$latest_posts = db_get_array("SELECT a.post_id, a.ip_address, a.status, a.timestamp, b.object_id, b.object_type as object_type, b.type as type, a.name, c.message, d.rating_value " . "FROM ?:discussion_posts as a INNER JOIN ?:discussion as b ON a.thread_id = b.thread_id ?p " . "LEFT JOIN ?:discussion_messages as c ON a.post_id = c.post_id LEFT JOIN ?:discussion_rating as d ON a.post_id = d.post_id " . "ORDER BY a.timestamp DESC LIMIT 5", fn_get_discussion_company_condition('b.company_id'));
if (!empty($latest_posts)) {
    foreach ($latest_posts as $k => $v) {
        $latest_posts[$k]['ip_address'] = fn_ip_from_db($v['ip_address']);
        $latest_posts[$k]['object_data'] = fn_get_discussion_object_data($v['object_id'], $v['object_type'], DESCR_SL);
        $latest_posts[$k]['rating'] = fn_get_discussion_rating($v['rating_value']);
    }
}
Registry::get('view')->assign('discussion_objects', fn_get_discussion_objects());
Registry::get('view')->assign('latest_posts', $latest_posts);
if ($mode == 'delete_post' && defined('AJAX_REQUEST')) {
    // FIXME - bad style
    Registry::get('view')->display('addons/discussion/views/index/components/dashboard.tpl');
    exit;
}
Exemplo n.º 4
0
function fn_get_discussion_posts($params, $items_per_page = 0)
{
    // Set default values to input params
    $default_params = array('page' => 1, 'thread_id' => 0, 'avail_only' => false, 'random' => false, 'items_per_page' => $items_per_page);
    $params = array_merge($default_params, $params);
    $thread_data = db_get_row("SELECT thread_id, type, object_type, object_id FROM ?:discussion WHERE thread_id = ?i ?p", $params['thread_id'], fn_get_discussion_company_condition('?:discussion.company_id'));
    if ($thread_data['type'] == 'D') {
        return array(array(), $params);
    }
    $thread_condition = fn_generate_thread_condition($thread_data);
    $join = $fields = '';
    if ($thread_data['type'] == 'C' || $thread_data['type'] == 'B') {
        $join .= " LEFT JOIN ?:discussion_messages ON ?:discussion_messages.post_id = ?:discussion_posts.post_id ";
        $fields .= ", ?:discussion_messages.message";
        if ($thread_data['type'] == 'C') {
            $thread_condition .= " AND ?:discussion_messages.message <> ''";
        }
    }
    if ($thread_data['type'] == 'R' || $thread_data['type'] == 'B') {
        $join .= " LEFT JOIN ?:discussion_rating ON ?:discussion_rating.post_id = ?:discussion_posts.post_id ";
        $fields .= ", ?:discussion_rating.rating_value";
        if ($thread_data['type'] == 'R') {
            $thread_condition .= " AND ?:discussion_rating.rating_value > 0";
        }
    }
    if ($params['avail_only'] == true) {
        $thread_condition .= " AND ?:discussion_posts.status = 'A'";
    }
    $limit = '';
    if (!empty($params['limit'])) {
        $limit = db_quote("LIMIT ?i", $params['limit']);
    } elseif (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:discussion_posts {$join} WHERE {$thread_condition}");
        $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']);
    }
    $order_by = isset($params['random']) && $params['random'] == 'Y' ? 'RAND()' : '?:discussion_posts.timestamp DESC';
    $posts = db_get_array("SELECT ?:discussion_posts.* {$fields} FROM ?:discussion_posts {$join} " . "WHERE {$thread_condition} ORDER BY ?p {$limit}", $order_by);
    foreach ($posts as $k => $post) {
        if (isset($post['ip_address'])) {
            $posts[$k]['ip_address'] = fn_ip_from_db($post['ip_address']);
        }
    }
    return array($posts, $params);
}
Exemplo n.º 5
0
/**
 * Returns orders
 *
 * @param array $params array with search params
 * @param int $items_per_page
 * @param bool $get_totals
 * @param string $lang_code
 * @return array
 */
function fn_get_orders($params, $items_per_page = 0, $get_totals = false, $lang_code = CART_LANGUAGE)
{
    // Init filter
    $params = LastView::instance()->update('orders', $params);
    // Set default values to input params
    $default_params = array('page' => 1, 'items_per_page' => $items_per_page);
    $params = array_merge($default_params, $params);
    if (AREA != 'C') {
        $params['include_incompleted'] = empty($params['include_incompleted']) ? false : $params['include_incompleted'];
        // default incomplited orders should not be displayed
        if (!empty($params['status']) && (is_array($params['status']) && in_array(STATUS_INCOMPLETED_ORDER, $params['status']) || !is_array($params['status']) && $params['status'] == STATUS_INCOMPLETED_ORDER)) {
            $params['include_incompleted'] = true;
        }
    } else {
        $params['include_incompleted'] = false;
    }
    // Define fields that should be retrieved
    $fields = array("distinct ?:orders.order_id", "?:orders.issuer_id", "?:orders.user_id", "?:orders.is_parent_order", "?:orders.parent_order_id", "?:orders.company_id", "?:orders.timestamp", "?:orders.firstname", "?:orders.lastname", "?:orders.email", "?:orders.phone", "?:orders.status", "?:orders.total", "invoice_docs.doc_id as invoice_id", "memo_docs.doc_id as credit_memo_id");
    // Define sort fields
    $sortings = array('order_id' => "?:orders.order_id", 'status' => "?:orders.status", 'customer' => array("?:orders.lastname", "?:orders.firstname"), 'email' => "?:orders.email", 'date' => array("?:orders.timestamp", "?:orders.order_id"), 'total' => "?:orders.total");
    fn_set_hook('pre_get_orders', $params, $fields, $sortings, $get_totals, $lang_code);
    if (isset($params['compact']) && $params['compact'] == 'Y') {
        $union_condition = ' OR ';
    } else {
        $union_condition = ' AND ';
    }
    $condition = $_condition = $join = $group = '';
    $condition .= " AND ?:orders.is_parent_order != 'Y' ";
    $condition .= fn_get_company_condition('?:orders.company_id');
    if (isset($params['cname']) && fn_string_not_empty($params['cname'])) {
        $customer_name = fn_explode(' ', $params['cname']);
        $customer_name = array_filter($customer_name, "fn_string_not_empty");
        if (sizeof($customer_name) == 2) {
            $_condition .= db_quote(" {$union_condition} ?:orders.firstname LIKE ?l AND ?:orders.lastname LIKE ?l", "%" . array_shift($customer_name) . "%", "%" . array_shift($customer_name) . "%");
        } else {
            $_condition .= db_quote(" {$union_condition} (?:orders.firstname LIKE ?l OR ?:orders.lastname LIKE ?l)", "%" . trim($params['cname']) . "%", "%" . trim($params['cname']) . "%");
        }
    }
    if (isset($params['issuer']) && fn_string_not_empty($params['issuer'])) {
        $issuer_name = fn_explode(' ', $params['issuer']);
        $issuer_name = array_filter($issuer_name, "fn_string_not_empty");
        if (sizeof($issuer_name) == 2) {
            $issuer_ids = db_get_field("SELECT user_id FROM ?:users WHERE user_type IN ('A', 'V') AND  firstname LIKE ?l AND lastname LIKE ?l", "%" . array_shift($issuer_name) . "%", "%" . array_shift($issuer_name) . "%");
        } else {
            $issuer_ids = db_get_field("SELECT user_id FROM ?:users WHERE user_type IN ('A', 'V') AND (firstname LIKE ?l OR lastname LIKE ?l)", "%" . trim($params['issuer']) . "%", "%" . trim($params['issuer']) . "%");
        }
        $_condition .= db_quote(" {$union_condition} ?:orders.issuer_id IN (?a)", $issuer_ids);
    }
    if (isset($params['company_id']) && $params['company_id'] != '') {
        $condition .= db_quote(' AND ?:orders.company_id = ?i ', $params['company_id']);
    }
    if (!empty($params['tax_exempt'])) {
        $condition .= db_quote(" AND ?:orders.tax_exempt = ?s", $params['tax_exempt']);
    }
    if (isset($params['email']) && fn_string_not_empty($params['email'])) {
        $_condition .= db_quote(" {$union_condition} ?:orders.email LIKE ?l", "%" . trim($params['email']) . "%");
    }
    if (!empty($params['user_id'])) {
        $condition .= db_quote(' AND ?:orders.user_id IN (?n)', $params['user_id']);
    }
    if (isset($params['total_from']) && fn_is_numeric($params['total_from'])) {
        $condition .= db_quote(" AND ?:orders.total >= ?d", fn_convert_price($params['total_from']));
    }
    if (!empty($params['total_to']) && fn_is_numeric($params['total_to'])) {
        $condition .= db_quote(" AND ?:orders.total <= ?d", fn_convert_price($params['total_to']));
    }
    if (!empty($params['status'])) {
        $condition .= db_quote(' AND ?:orders.status IN (?a)', $params['status']);
    }
    if (empty($params['include_incompleted'])) {
        $condition .= db_quote(' AND ?:orders.status != ?s', STATUS_INCOMPLETED_ORDER);
    }
    if (!empty($params['order_id'])) {
        $_condition .= db_quote($union_condition . ' ?:orders.order_id IN (?n)', !is_array($params['order_id']) && strpos($params['order_id'], ',') !== false ? explode(',', $params['order_id']) : $params['order_id']);
    }
    if (!empty($params['p_ids']) || !empty($params['product_view_id'])) {
        $arr = strpos($params['p_ids'], ',') !== false || !is_array($params['p_ids']) ? explode(',', $params['p_ids']) : $params['p_ids'];
        if (empty($params['product_view_id'])) {
            $condition .= db_quote(" AND ?:order_details.product_id IN (?n)", $arr);
        } else {
            $condition .= db_quote(" AND ?:order_details.product_id IN (?n)", db_get_fields(fn_get_products(array('view_id' => $params['product_view_id'], 'get_query' => true))));
        }
        $join .= " LEFT JOIN ?:order_details ON ?:order_details.order_id = ?:orders.order_id";
        $group .= " GROUP BY ?:orders.order_id ";
    }
    if (!empty($params['admin_user_id'])) {
        $condition .= db_quote(" AND ?:new_orders.user_id = ?i", $params['admin_user_id']);
        $join .= " LEFT JOIN ?:new_orders ON ?:new_orders.order_id = ?:orders.order_id";
    }
    $docs_conditions = array();
    if (!empty($params['invoice_id']) || !empty($params['has_invoice'])) {
        if (!empty($params['has_invoice'])) {
            $docs_conditions[] = "invoice_docs.doc_id IS NOT NULL";
        } elseif (!empty($params['invoice_id'])) {
            $docs_conditions[] = db_quote("invoice_docs.doc_id = ?i", $params['invoice_id']);
        }
    }
    $join .= " LEFT JOIN ?:order_docs as invoice_docs ON invoice_docs.order_id = ?:orders.order_id AND invoice_docs.type = 'I'";
    if (!empty($params['credit_memo_id']) || !empty($params['has_credit_memo'])) {
        if (!empty($params['has_credit_memo'])) {
            $docs_conditions[] = "memo_docs.doc_id IS NOT NULL";
        } elseif (!empty($params['credit_memo_id'])) {
            $docs_conditions[] = db_quote("memo_docs.doc_id = ?i", $params['credit_memo_id']);
        }
    }
    $join .= " LEFT JOIN ?:order_docs as memo_docs ON memo_docs.order_id = ?:orders.order_id AND memo_docs.type = 'C'";
    if (!empty($docs_conditions)) {
        $condition .= ' AND (' . implode(' OR ', $docs_conditions) . ')';
    }
    if (!empty($params['shippings'])) {
        $set_conditions = array();
        foreach ($params['shippings'] as $v) {
            $set_conditions[] = db_quote("FIND_IN_SET(?s, ?:orders.shipping_ids)", $v);
        }
        $condition .= ' AND (' . implode(' OR ', $set_conditions) . ')';
    }
    if (!empty($params['payments'])) {
        $condition .= db_quote(" AND ?:orders.payment_id IN (?a)", $params['payments']);
    }
    if (!empty($params['period']) && $params['period'] != 'A') {
        list($params['time_from'], $params['time_to']) = fn_create_periods($params);
        $condition .= db_quote(" AND (?:orders.timestamp >= ?i AND ?:orders.timestamp <= ?i)", $params['time_from'], $params['time_to']);
    }
    if (!empty($params['custom_files']) && $params['custom_files'] == 'Y') {
        $condition .= db_quote(" AND ?:order_details.extra LIKE ?l", '%custom_files%');
        if (empty($params['p_ids']) && empty($params['product_view_id'])) {
            $join .= " LEFT JOIN ?:order_details ON ?:order_details.order_id = ?:orders.order_id";
        }
    }
    if (!empty($params['company_name'])) {
        $fields[] = '?:companies.company as company_name';
        $join .= " LEFT JOIN ?:companies ON ?:companies.company_id = ?:orders.company_id";
    }
    if (!empty($_condition)) {
        $condition .= ' AND (' . ($union_condition == ' OR ' ? '0 ' : '1 ') . $_condition . ')';
    }
    fn_set_hook('get_orders', $params, $fields, $sortings, $condition, $join, $group);
    $sorting = db_sort($params, $sortings, 'date', 'desc');
    // Used for Extended search
    if (!empty($params['get_conditions'])) {
        return array($fields, $join, $condition);
    }
    $limit = '';
    if (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_field("SELECT COUNT(DISTINCT (?:orders.order_id)) FROM ?:orders {$join} WHERE 1 {$condition}");
        $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']);
    }
    $orders = db_get_array('SELECT ' . implode(', ', $fields) . " FROM ?:orders {$join} WHERE 1 {$condition} {$group} {$sorting} {$limit}");
    fn_set_hook('get_orders_post', $params, $orders);
    foreach ($orders as $k => $order) {
        if (isset($order['ip_address'])) {
            $order['ip_address'] = fn_ip_from_db($order['ip_address']);
        }
    }
    if ($get_totals == true) {
        $paid_statuses = array('P', 'C');
        fn_set_hook('get_orders_totals', $paid_statuses, $join, $condition, $group);
        $totals = array('gross_total' => db_get_field("SELECT sum(t.total) FROM ( SELECT total FROM ?:orders {$join} WHERE 1 {$condition} {$group}) as t"), 'totally_paid' => db_get_field("SELECT sum(t.total) FROM ( SELECT total FROM ?:orders {$join} WHERE ?:orders.status IN (?a) {$condition} {$group}) as t", $paid_statuses));
        $params['paid_statuses'] = $paid_statuses;
    }
    LastView::instance()->processResults('orders', $orders, $params);
    return array($orders, $params, $get_totals == true ? $totals : array());
}
Exemplo n.º 6
0
                    $carts_list[$key]['cart_all_products'] = $all_cart_products[$key]['sum'];
                    $carts_list[$key]['total'] = $all_cart_products[$key]['total'];
                    $carts_list[$key]['user_data'] = fn_get_user_info($cart_data['user_id'], true);
                    $carts_list[$key]['ip_address'] = fn_ip_from_db($all_cart_products[$key]['ip_address']);
                }
                $_SESSION['abandoned_carts'][$cart_data['company_id']][] = $cart_data['user_id'];
            }
        } else {
            foreach ($carts_list as $key => $cart_data) {
                $all_cart_products[$key] = db_get_row("SELECT SUM(amount) as count, SUM(amount) as sum, SUM(amount * price) as total, ip_address" . " FROM ?:user_session_products" . " WHERE user_id = ?i AND item_type IN (?a) AND type = 'C'" . " GROUP BY ?:user_session_products.user_id", $cart_data['user_id'], $item_types);
                if (!empty($all_cart_products[$key])) {
                    $carts_list[$key]['cart_products'] = $all_cart_products[$key]['count'];
                    $carts_list[$key]['cart_all_products'] = $all_cart_products[$key]['sum'];
                    $carts_list[$key]['total'] = $all_cart_products[$key]['total'];
                    $carts_list[$key]['user_data'] = fn_get_user_info($cart_data['user_id'], true);
                    $carts_list[$key]['ip_address'] = fn_ip_from_db($all_cart_products[$key]['ip_address']);
                }
                $_SESSION['abandoned_carts'][] = $cart_data['user_id'];
            }
        }
    }
    Tygh::$app['view']->assign('carts_list', $carts_list);
    Tygh::$app['view']->assign('search', $search);
}
function fn_delete_user_cart($user_ids, $data = '')
{
    $condition = db_quote(' AND user_id IN (?a)', $user_ids);
    fn_set_hook('delete_user_cart', $user_ids, $condition, $data);
    db_query("DELETE FROM ?:user_session_products WHERE 1 {$condition}");
    return true;
}
Exemplo n.º 7
0
/**
 * Get poll votes
 *
 * @param array $params array of search parameters
 * @param int $items_per_page votes per page
 * @return boolean true if results exists, false otherwise
 */
function fn_polls_get_votes($params, $items_per_page = 0)
{
    $votes = array();
    $default_values = array('item_id' => 0, 'page' => 1, 'completed' => 'N', 'items_per_page' => $items_per_page);
    $fields = array('?:polls_votes.vote_id', '?:polls_votes.type', '?:polls_votes.time', '?:polls_votes.ip_address', '?:polls_votes.user_id', '?:users.firstname', '?:users.lastname');
    $params = array_merge($default_values, $params);
    if (empty($params['poll_page_id'])) {
        return array($votes, $params);
    }
    $condition = '1';
    $join = '';
    if ($params['completed'] == 'Y') {
        $condition .= db_quote(" AND ?:polls_votes.type = ?s", 'C');
    }
    if (!empty($params['anwer_id']) || !empty($params['item_id'])) {
        $join = db_quote(" LEFT JOIN ?:polls_answers ON ?:polls_answers.vote_id = ?:polls_votes.vote_id");
    }
    if (!empty($params['answer_id'])) {
        $condition .= db_quote(" AND ?:polls_answers.answer_id = ?i", $params['answer_id']);
    }
    if (!empty($params['item_id'])) {
        $condition .= db_quote(" AND ?:polls_answers.item_id = ?i", $params['item_id']);
    }
    if (!empty($params['poll_page_id'])) {
        $condition .= db_quote(" AND ?:polls_votes.page_id = ?i", $params['poll_page_id']);
    }
    $limit = '';
    if (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_field("SELECT COUNT(DISTINCT(?:polls_votes.vote_id)) FROM ?:polls_votes ?p WHERE ?p", $join, $condition);
        $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']);
    }
    $join .= " LEFT JOIN ?:users ON ?:users.user_id = ?:polls_votes.user_id";
    $votes = db_get_hash_array("SELECT " . implode(', ', $fields) . " FROM ?:polls_votes ?p WHERE ?p ORDER BY time DESC {$limit}", 'vote_id', $join, $condition);
    foreach ($votes as $k => $vote) {
        if (isset($vote['ip_address'])) {
            $votes[$k]['ip_address'] = fn_ip_from_db($vote['ip_address']);
        }
    }
    return array($votes, $params);
}
Exemplo n.º 8
0
/**
 * Gets discussion posts
 *
 * @param array $params Request parameters
 * @param int $items_per_page Amount of posts per page
 * @return array Array with posts and query parameters
 */
function fn_get_discussion_posts($params, $items_per_page = 0)
{
    /**
     * Modifies request parameters for fetching discussion posts
     * @param array $params Query parameters
     * @param int $items_per_page Amount of posts per page
     */
    fn_set_hook('get_discussion_posts_pre', $params, $items_per_page);
    // Set default values to input params
    $default_params = array('page' => 1, 'thread_id' => 0, 'avail_only' => false, 'random' => false, 'items_per_page' => $items_per_page);
    $params = array_merge($default_params, $params);
    $thread_data = db_get_row("SELECT thread_id, type, object_type, object_id FROM ?:discussion WHERE thread_id = ?i ?p", $params['thread_id'], fn_get_discussion_company_condition('?:discussion.company_id'));
    if ($thread_data['type'] == 'D') {
        return array(array(), $params);
    }
    $condition = fn_generate_thread_condition($thread_data);
    $join = $fields = '';
    if ($thread_data['type'] == 'C' || $thread_data['type'] == 'B') {
        $join .= " LEFT JOIN ?:discussion_messages ON ?:discussion_messages.post_id = ?:discussion_posts.post_id ";
        $fields .= ", ?:discussion_messages.message";
        if ($thread_data['type'] == 'C') {
            $condition .= " AND ?:discussion_messages.message <> ''";
        }
    }
    if ($thread_data['type'] == 'R' || $thread_data['type'] == 'B') {
        $join .= " LEFT JOIN ?:discussion_rating ON ?:discussion_rating.post_id = ?:discussion_posts.post_id ";
        $fields .= ", ?:discussion_rating.rating_value";
        if ($thread_data['type'] == 'R') {
            $condition .= " AND ?:discussion_rating.rating_value > 0";
        }
    }
    if ($params['avail_only'] == true) {
        $condition .= " AND ?:discussion_posts.status = 'A'";
    }
    $limit = '';
    if (!empty($params['limit'])) {
        $limit = db_quote("LIMIT ?i", $params['limit']);
    } elseif (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:discussion_posts {$join} WHERE {$condition}");
        $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']);
    }
    $order_by = isset($params['random']) && $params['random'] == 'Y' ? 'RAND()' : '?:discussion_posts.timestamp DESC';
    /**
     * Modifies discuission posts query
     *
     * @param array $params Query parameters
     * @param int $items_per_page Amount of posts per page
     * @param string $fields String of comma-separated SQL fields to be selected in an SQL-query
     * @param string $join String with the complete JOIN information (JOIN type, tables and fields) for an SQL-query
     * @param string $condition String containing SQL-query condition possibly prepended with a logical operator (AND or OR)
     * @param string $order_by String containing SQL-query ordering conditions
     * @param string $limit String containing SQL-query limit conditions
     */
    fn_set_hook('get_discussion_posts', $params, $items_per_page, $fields, $join, $condition, $order_by, $limit);
    $posts = db_get_array("SELECT ?:discussion_posts.* {$fields} FROM ?:discussion_posts {$join} " . "WHERE {$condition} ORDER BY ?p {$limit}", $order_by);
    foreach ($posts as $k => $post) {
        if (isset($post['ip_address'])) {
            $posts[$k]['ip_address'] = fn_ip_from_db($post['ip_address']);
        }
    }
    /**
     * Modifies discussion posts and request parameters
     *
     * @param array $params Query parameters
     * @param int $items_per_page Amount of posts per page
     * @param array $posts Discussion posts
     */
    fn_set_hook('get_discussion_posts_post', $params, $items_per_page, $posts);
    return array($posts, $params);
}
Exemplo n.º 9
0
/**
 * Gets abandoned/live carts
 *
 * @param array $params Query parameters
 * @param int $items_per_page Number of carts per page
 * @return array Abandoned/live carts
 *      array(
 *          0: array List of carts
 *          1: array Query parameters
 *          2: array User IDs (grouped by companies for ultimate)
 *      )
 */
function fn_get_carts($params, $items_per_page = 0)
{
    // Init filter
    $params = LastView::instance()->update('carts', $params);
    // Set default values to input params
    $default_params = array('page' => 1, 'items_per_page' => $items_per_page);
    $params = array_merge($default_params, $params);
    // Define fields that should be retrieved
    $fields = array('?:user_session_products.user_id', '?:users.firstname', '?:users.lastname', '?:user_session_products.timestamp AS date', '?:user_session_products.ip_address');
    // Define sort fields
    $sortings = array('customer' => "CONCAT(?:users.lastname, ?:users.firstname)", 'date' => "?:user_session_products.timestamp");
    if (fn_allowed_for('ULTIMATE')) {
        $sortings['company_id'] = "?:user_session_products.company_id";
    }
    $sorting = db_sort($params, $sortings, 'customer', 'asc');
    $condition = $join = '';
    $group = " GROUP BY ?:user_session_products.user_id";
    $group_post = '';
    if (isset($params['cname']) && fn_string_not_empty($params['cname'])) {
        $arr = fn_explode(' ', $params['cname']);
        foreach ($arr as $k => $v) {
            if (!fn_string_not_empty($v)) {
                unset($arr[$k]);
            }
        }
        if (sizeof($arr) == 2) {
            $condition .= db_quote(" AND ?:users.firstname LIKE ?l AND ?:users.lastname LIKE ?l", "%" . array_shift($arr) . "%", "%" . array_shift($arr) . "%");
        } else {
            $condition .= db_quote(" AND (?:users.firstname LIKE ?l OR ?:users.lastname LIKE ?l)", "%" . trim($params['cname']) . "%", "%" . trim($params['cname']) . "%");
        }
    }
    if (isset($params['email']) && fn_string_not_empty($params['email'])) {
        $condition .= db_quote(" AND ?:users.email LIKE ?l", "%" . trim($params['email']) . "%");
    }
    if (!empty($params['user_id'])) {
        $condition .= db_quote(" AND ?:user_session_products.user_id = ?i", $params['user_id']);
    }
    if (!empty($params['online_only'])) {
        $sessions = Tygh::$app['session']->getStorageDriver()->getOnline('C');
        if (!empty($sessions)) {
            $condition .= db_quote(" AND ?:user_session_products.session_id IN (?a)", $sessions);
        } else {
            $condition .= db_quote(" AND 0");
        }
    }
    if (!empty($params['with_info_only'])) {
        $condition .= db_quote(" AND ?:users.email != ''");
    }
    if (!empty($params['users_type'])) {
        if ($params['users_type'] == 'R') {
            $condition .= db_quote(" AND !ISNULL(?:users.user_id)");
        } elseif ($params['users_type'] == 'G') {
            $condition .= db_quote(" AND ISNULL(?:users.user_id)");
        }
    }
    if (!empty($params['total_from']) || !empty($params['total_to'])) {
        $having = '';
        if (!empty($params['total_from']) && fn_is_numeric($params['total_from'])) {
            $having .= db_quote(" AND SUM(price * amount) >= ?d", $params['total_from']);
        }
        if (!empty($params['total_to']) && fn_is_numeric($params['total_to'])) {
            $having .= db_quote(" AND SUM(price * amount) <= ?d", $params['total_to']);
        }
        if (!empty($having)) {
            $users4total = db_get_fields("SELECT user_id FROM ?:user_session_products GROUP BY user_id HAVING 1 {$having}");
            if (!empty($users4total)) {
                $condition .= db_quote(" AND (?:user_session_products.user_id IN (?n))", $users4total);
            } else {
                $condition .= " AND (?:user_session_products.user_id = 'no')";
            }
        }
    }
    if (!empty($params['period']) && $params['period'] != 'A') {
        list($params['time_from'], $params['time_to']) = fn_create_periods($params);
        $condition .= db_quote(" AND (?:user_session_products.timestamp >= ?i AND ?:user_session_products.timestamp <= ?i)", $params['time_from'], $params['time_to']);
    }
    $_condition = array();
    if (!empty($params['product_type_c'])) {
        $_condition[] = "?:user_session_products.type = 'C'";
    }
    if (!empty($params['product_type_w'])) {
        $_condition[] = "?:user_session_products.type = 'W'";
    }
    if (!empty($_condition)) {
        $condition .= " AND (" . implode(" OR ", $_condition) . ")";
    }
    if (!empty($params['p_ids']) || !empty($params['product_view_id'])) {
        $arr = strpos($params['p_ids'], ',') !== false || !is_array($params['p_ids']) ? explode(',', $params['p_ids']) : $params['p_ids'];
        if (empty($params['product_view_id'])) {
            $condition .= db_quote(" AND ?:user_session_products.product_id IN (?n)", $arr);
        } else {
            $condition .= db_quote(" AND ?:user_session_products.product_id IN (?n)", db_get_fields(fn_get_products(array('view_id' => $params['product_view_id'], 'get_query' => true))));
        }
        $group_post .= " HAVING COUNT(?:user_session_products.user_id) >= " . count($arr);
    }
    $join .= " LEFT JOIN ?:users ON ?:user_session_products.user_id = ?:users.user_id";
    // checking types for retrieving from the database
    $type_restrictions = array('C');
    /**
     * Sets getting abandoned/live carts parameters
     *
     * @param array $type_restrictions Product types
     * @param array $params            Query params
     * @param string $condition        String containing SQL-query condition possibly prepended with a logical operator (AND or OR)
     * @param string $join             String with the complete JOIN information (JOIN type, tables and fields) for an SQL-query
     * @param array  $fields           SQL fields to be selected in an SQL-query
     * @param string $group            String containing the SQL-query GROUP BY field
     * @param $array_index_field       Deprecated unused parameter
     */
    fn_set_hook('get_carts', $type_restrictions, $params, $condition, $join, $fields, $group, $array_index_field);
    if (!empty($type_restrictions) && is_array($type_restrictions)) {
        $condition .= " AND ?:user_session_products.type IN ('" . implode("', '", $type_restrictions) . "')";
    }
    $carts_list = array();
    $group .= $group_post;
    $limit = '';
    if (!empty($params['items_per_page'])) {
        $limit = db_paginate($params['page'], $params['items_per_page']);
    }
    if (fn_allowed_for('ULTIMATE')) {
        $group = " GROUP BY ?:user_session_products.user_id, ?:user_session_products.company_id";
    }
    /**
     * Gets abandoned/live carts
     *
     * @param array  $params         Query params
     * @param int    $items_per_page Amount of carts per page
     * @param array  $fields         SQL fields to be selected in an SQL-query
     * @param string $join           String with the complete JOIN information (JOIN type, tables and fields) for an SQL-query
     * @param string $condition      String containing SQL-query condition possibly prepended with a logical operator (AND or OR)
     * @param string $group          String containing the SQL-query GROUP BY field
     * @param string $sorting        String containing the SQL-query ORDER BY field
     * @param string $limit          String containing the SQL-query LIMIT field
     */
    fn_set_hook('get_carts_before_select', $params, $items_per_page, $fields, $join, $condition, $group, $sorting, $limit);
    $carts_list = db_get_hash_array("SELECT SQL_CALC_FOUND_ROWS " . implode(', ', $fields) . " FROM ?:user_session_products {$join}" . " WHERE 1 {$condition} {$group} {$sorting} {$limit}", 'user_id');
    if (!empty($params['items_per_page'])) {
        $params['total_items'] = db_get_found_rows();
    }
    $extra_data = db_get_hash_array("SELECT user_id, SUM(amount) as cart_products, SUM(amount * price) as total, order_id" . " FROM ?:user_session_products" . " WHERE user_id IN(?n) AND type = 'C'" . " GROUP BY user_id", 'user_id', array_keys($carts_list));
    if ($extra_data) {
        $carts_list = fn_array_merge($carts_list, $extra_data);
    }
    $user_ids = array();
    foreach ($carts_list as &$item) {
        $item['ip_address'] = fn_ip_from_db($item['ip_address']);
        $item['user_data'] = fn_get_user_info($item['user_id'], true);
        unset($item['user_data']['password'], $item['user_data']['salt'], $item['user_data']['last_passwords'], $item['user_data']['password_change_timestamp'], $item['user_data']['api_key']);
        if (fn_allowed_for('ULTIMATE')) {
            $user_ids[$item['company_id']][] = $item['user_id'];
        } else {
            $user_ids[] = $item['user_id'];
        }
    }
    /**
     * Actions after getting abandoned/live carts
     *
     * @param array  $carts_list     List of abandoned/live carts
     * @param array  $params         Query params
     * @param array  $user_ids       Cart User IDs. Grouped by companies for ultimate
     * @param int    $items_per_page Amount of carts per page
     * @param array  $fields         SQL fields to be selected in an SQL-query
     * @param string $join           String with the complete JOIN information (JOIN type, tables and fields) for an SQL-query
     * @param string $condition      String containing SQL-query condition possibly prepended with a logical operator (AND or OR)
     * @param string $group          String containing the SQL-query GROUP BY field
     * @param string $sorting        String containing the SQL-query ORDER BY field
     * @param string $limit          String containing the SQL-query LIMIT field
     */
    fn_set_hook('get_carts_post', $carts_list, $params, $user_ids, $items_per_page, $fields, $join, $condition, $group, $sorting, $limit);
    LastView::instance()->processResults('carts', $carts_list, $params);
    return array($carts_list, $params, $user_ids);
}