Exemple #1
0
 protected function getRankingBySiteResultsTable($alert)
 {
     $site_id = !empty($this->options['rank_site']) ? $this->options['rank_site'] : array();
     $brand_id = !empty($this->options['rank_brand']) ? $this->options['rank_brand'] : array();
     $term_id = !empty($this->options['rank_term']) ? $this->options['rank_term'] : array();
     $productList = !empty($alert->options_array['product_list']) ? $alert->options_array['product_list'] : false;
     $date_of_upload = array($this->getDateNew());
     $data = array();
     if (!empty($site_id) && !empty($brand_id) && !empty($date_of_upload)) {
         $cur_date = $date_of_upload[0];
         $last_week_date = date('Y-m-d', strtotime($cur_date) - 7 * 24 * 3600);
         $yesterday_date = date('Y-m-d', strtotime($cur_date) - 1 * 24 * 3600);
         $date_of_upload = array($last_week_date, $yesterday_date, $cur_date);
         foreach ($site_id as $site) {
             $site_obj = $this->getSitesModel()->get($site);
             $data_summary = array();
             if (!empty($site_obj[0])) {
                 $site_name = @ucfirst(strtolower($site_obj[0]->name));
                 foreach ($date_of_upload as $date) {
                     $products = $this->getRankingModel()->getProductsByTerm($site, $date, $term_id, 'rsri.ranking', 'asc', $brand_id, 0, false, $productList);
                     foreach ($products as $prod) {
                         if (!array_key_exists($prod->title, $data_summary) && count($data_summary) < 5) {
                             $data_summary[$prod->title] = array();
                             $data_summary[$prod->title]['title'] = $prod->title;
                             $data_summary[$prod->title]['url'] = $prod->url;
                             $data_summary[$prod->title]['keyword'] = $prod->keyword;
                             $data_summary[$prod->title]['image_url'] = $prod->image_url;
                         }
                         if (array_key_exists($prod->title, $data_summary) && !array_key_exists($date, $data_summary[$prod->title])) {
                             $data_summary[$prod->title][$date] = $prod;
                         }
                     }
                 }
                 $this->getCI()->load->library('RankingTable');
                 $columns = array('Product' => 'true', 'Search Term' => 'false', 'Last Week' => 'true', 'Yesterday' => 'false', 'Today' => 'true');
                 $products = array_slice($data_summary, 0, 5);
                 if (!empty($products)) {
                     $data[$site_name] = array();
                     $data[$site_name]['table_body'] = $this->getCI()->rankingtable->getBody($columns, '1srvbs', $products, null, null, $date_of_upload, '', '', 0, array(), '', '', array(), '', array(), 0, true);
                     $data[$site_name]['table_header'] = $this->getCI()->rankingtable->getHeader($columns, '1srvbs', $date_of_upload, '', '', '', array(), array(), true);
                     $data[$site_name]['site-logo'] = '';
                     $site_logo = \Ranking_model::getSiteLogoByName($site_name);
                     if (!empty($site_logo)) {
                         $data[$site_name]['site-logo'] = $site_logo;
                     }
                 }
             }
         }
     }
     return $data;
 }
Exemple #2
0
 public function getPricingReportChartData()
 {
     $this->load->model('ranking_model');
     $this->load->model('product_model');
     $data = array();
     $sites = $this->input->get('sites');
     $terms = $this->input->get('searchTerms');
     $brands = $this->input->get('brands');
     $dates = $this->input->get('dates');
     $productList = $this->input->get('productList');
     $graphItUrlIds = $this->input->get('graphItUrlIds');
     $sitesCount = count($sites);
     foreach (array_reverse($dates) as $date) {
         $dateObj = new \DateTime($date);
         $data['daysRange'][] = $dateObj->format('F d');
     }
     $filters = ['product_lists' => $productList, 'urlIds' => $graphItUrlIds, 'site_id' => $sites, 'brand_id' => $brands, 'term_id' => $terms, 'date_of_upload' => $dates];
     $dataResult = $this->ranking_model->getPricingReport($filters);
     $total = count($dataResult);
     $products = [];
     //  Update Selected Variants, run each time because variants selection could be changed during the day.
     $this->product_model->updateVariantsForSelectedProducts($filters);
     //  Get Available variants by filter, later this variants are attached to products.
     $variants = $this->product_model->getVariantsByParams($filters);
     foreach ($dataResult as $items) {
         $product = (object) $items;
         if (!empty($variants[$product->product_id])) {
             foreach ($variants[$product->product_id] as $variant) {
                 if (!empty($variant['variant_price']) && $variant['variant_selected'] == 't') {
                     $product->price = $variant['variant_price'];
                 }
             }
         }
         $associatedProducts = $this->ranking_model->getAssociatedProducts($product);
         foreach ($associatedProducts as $product) {
             $product = (array) $product;
             $site = ucfirst($product['site']);
             $logo = ($logo = Ranking_model::getSiteLogoByName($product['site'])) ? '/img/site_logos/' . $logo : null;
             foreach ($variants[$product['product_id']] as $variant) {
                 if (!empty($variant['variant_price']) && $variant['variant_selected'] == 't') {
                     $product['price'] = $variant['variant_price'];
                 }
             }
             if (false === in_array($product['site_id'], $sites)) {
                 continue;
             }
             $products[$site][$product['title']] = ['image' => $product['image_url'], 'currency' => '$'];
             if (false === isset($pData[$site]['products'][$product['url_id']][$product['date_of_upload']])) {
                 $pData[$site]['products'][$product['url_id']][$product['date_of_upload']] = true;
                 $data['output'][$site]['products'][$product['url_id']]['productName'] = $product['title'];
                 $data['output'][$site]['products'][$product['url_id']]['image_url'] = $product['image_url'];
                 $data['output'][$site]['products'][$product['url_id']]['logo'] = $logo;
                 $data['output'][$site]['products'][$product['url_id']]['pricing'][$product['date_of_upload']] = empty($product['price']) ? null : (double) $product['price'];
             }
             $sites[$site] = ['name' => $site, 'logo' => $logo];
         }
     }
     foreach ($data['output'] as $retailerName => $retailer) {
         $data['retailers'][] = $retailerName;
         foreach ($retailer['products'] as $productDetails) {
             foreach ($dates as $date) {
                 if (empty($productDetails['pricing'][$date])) {
                     $productDetails['pricing'][$date] = null;
                 }
             }
             ksort($productDetails['pricing']);
             $productDetails['pricing'] = array_values($productDetails['pricing']);
             $name = count($graphItUrlIds) == 1 && $sitesCount > 1 ? $retailerName : $productDetails['productName'];
             $data['series'][$retailerName][] = ['name' => $name, 'data' => $productDetails['pricing'], 'product_name' => $productDetails['productName'], 'image_url' => $productDetails['image_url'], 'logo' => !empty($productDetails['logo']) ? base_url() . $productDetails['logo'] : null];
         }
     }
     $data['sites'] = $sites;
     $data['products'] = $products;
     $data['sitesCount'] = $sitesCount;
     $data['graphItUrlIds'] = $graphItUrlIds;
     return $this->jsonResponse(array('data' => $data, 'date_of_upload' => $dates, 'total' => $total));
 }
    /**
     * Return header column string
     * @param string $view
     * @param string $column
     * @param array $dates_of_upload
     * @param string $sort_dir
     * @param string $sort_by
     * @param string $site
     * @param int $columns_count
     * @param array $brand_arr
     * @param array $data
     * @param int $sort_by_num
     * @return string
     * @author Ruslan Ushakov
     */
    protected function get_column_header($view, $column, $dates_of_upload = array(), $sort_dir = '', $sort_by = '', $site = '', $columns_count = 0, $brand_arr = array(), $data = array(), $sort_by_num = -1)
    {
        $res = '';
        $dateformat = 1;
        if (isset($this->CI->session->userdata['dateformat'])) {
            $dateformat = $this->CI->session->userdata['dateformat'];
        }
        if ($view == '1s1b') {
            switch ($column) {
                case 'Brand':
                    $res = '<th style="width: 16%; min-width:160px" class="brand-image" ><strong>Brand</strong></th>';
                    break;
                case 'Search Terms':
                    $res = '<th class="sort-table-by" data-sort="title"><strong>Search Terms</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'stq.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Total Results':
                    $res = '<th style="width: 13%" class="sort-table-by" data-sort="total_results"><strong>Total Results</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.total_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Brand Results':
                    $res = '<th class="sort-table-by" data-sort="brand_results"><strong>Brand Results</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.brand_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case '#SKUs on First Page':
                    $res = '<th class="sort-table-by" data-sort="on_first_page"><strong>#SKUs on First Page</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.on_first_page' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Rankings':
                    $res = '<th class="sort-table-by" data-sort="number_in_results"><strong>Rankings</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'r.number_in_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '2s1b') {
            switch ($column) {
                case 'Brand':
                    $res = '<th class="brand-image columns_2s1b"><strong>Brand</strong></th>';
                    break;
                case 'Search Terms':
                    $res = '<th class="sort-table-by text-left" data-sort="title" style="width: 20%"><nobr><strong>Search Terms</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'stq.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></nobr></th>';
                    break;
                case 'Total Results':
                    $res = '<th colspan="2" class="columns_2s1b sort-table-by" data-sort="total_results"><strong>Total Results</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.total_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Brand Results':
                    $res = '<th colspan="2" class="columns_2s1b sort-table-by" data-sort="brand_results"><strong>Brand Results</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.brand_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case '#SKUs on First Page':
                    $res = '<th colspan="2" class="columns_2s1b sort-table-by" data-sort="on_first_page"><strong>#SKUs on First Page</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.on_first_page' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Rankings':
                    $res = '<th colspan="2" class="columns_2s1b sort-table-by" data-sort="number_in_results"><strong>Rankings</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'r.number_in_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1ssv') {
            switch ($column) {
                case 'Search Terms':
                    $res = '<th style="' . (count($brand_arr) > 3 ? 'width:60%;' : '') . '">Search Terms</th>';
                    break;
                case 'Total Page 1 Results':
                    $res = '<th style="width: 16%; min-width: 100px;">Total Page 1 Results</th>';
                    break;
                case 'Other':
                    if (true == $this->CI->reportsettings->getSetting($view . '_sort', 'isEnabledOther')) {
                        $res = '<th style="width: 16%; min-width: 100px;">Other</th>';
                    }
                    break;
                case 'Brand Name':
                    if (count($brand_arr) < 4) {
                        foreach ($brand_arr as $key => $value) {
                            $res .= '<th style="text-align: center !important; min-width:100px;"><nobr>' . $value->name . '</nobr></th>';
                        }
                    } else {
                        $rowspan = !empty($data['search_terms_list']) ? count($data['search_terms_list']) + 3 : 1;
                        $res = '<th rowspan="' . $rowspan . '" style="padding: 0;border-top:0;border-left:0;">
                        <div style="position: relative">
                            <div class="scroll-pane" id="scroll-summary">
                                <table class="inner-table" style="border-top:0;">
                                    <tr style="height:38px;border-top:0;" class="dark-row" >';
                        foreach ($brand_arr as $key => $value) {
                            $res .= '<th style="text-align: center !important;border-top:0; min-width:160px;"><nobr>' . $value->name . '</nobr></th>';
                        }
                        $res .= '</tr>';
                        $possible_spot = !empty($data['serch_terms_ofp']['summary_ofp_count']) ? $data['serch_terms_ofp']['summary_ofp_count'] : 0;
                        $res .= '<tr class="blue-row" style="height: 60px">';
                        foreach ($brand_arr as $key => $value) {
                            if (!empty($data['brands'])) {
                                if (array_key_exists($value->name, $data['brands'])) {
                                    $percent = round($data['brands'][$value->name] / $possible_spot * 100, 0);
                                    $percent_width = 140 * $percent / 100;
                                    /*if($percent>40){
                                          $res .= '<td class=""  ><div class="indicator-div"><div class="indicator-div-left" style="width: ' .$percent_width . 'px;"> <span>'.$percent .' %</span></div><div class="indicator-div-right" style="width: ' .(140 - $percent_width ). 'px;">&nbsp;</div></div></td>';
                                      }else{
                                          $res .= '<td class=""  ><div class="indicator-div"><div class="indicator-div-left" style="width: ' .$percent_width . 'px;">&nbsp;</div><div class="indicator-div-right" style="width: ' .(140 - $percent_width ). 'px;"> <span>'.$percent .' %</span></div></div></td>';
                                      }*/
                                    $res .= '<td class=""  ><div class="indicator-div"><div class="indicator-div-left" style="width: ' . $percent_width . 'px;">&nbsp;</div><div class="indicator-div-right" style="width: ' . (140 - $percent_width) . 'px;">&nbsp;</div><div class="indicator-text">' . $percent . '%</div></div></td>';
                                } else {
                                    $res .= '<td><div class="indicator-div"><div class="indicator-div-right" style="width:140px;">&nbsp;</div><div class="indicator-text">0%</div></div></td>';
                                }
                            } else {
                                $res .= '<td><div class="indicator-div"><div class="indicator-div-right" style="width:140px;">&nbsp;</div><div class="indicator-text">0%</div></div></td>';
                            }
                        }
                        $res .= '</tr>';
                        $rowcount_for_1ssv = 0;
                        foreach ($data['search_terms_list'] as $search_term) {
                            $group_name = !empty($search_term->title) ? $search_term->title : '';
                            $ofp_count = !empty($data['serch_terms_ofp'][$group_name]) ? $data['serch_terms_ofp'][$group_name] : 0;
                            $tr_class = '';
                            if ($rowcount_for_1ssv % 2 == 1) {
                                $tr_class = 'trhover';
                            }
                            ++$rowcount_for_1ssv;
                            $res .= '<tr style="height: 40px;" class="' . $tr_class . '">';
                            foreach ($brand_arr as $key => $value) {
                                if (!empty($data['brand_terms'])) {
                                    if (array_key_exists($group_name . '_' . $value->name, $data['brand_terms'])) {
                                        $res .= '<td class="summary-brand-term-results"  data-term="' . $search_term->id . '" data-brand="' . $value->id . '">' . $data['brand_terms'][$group_name . '_' . $value->name] . '</td>';
                                    } else {
                                        $res .= '<td>0</td>';
                                    }
                                } else {
                                    $res .= '<td>0</td>';
                                }
                            }
                            $res .= '</tr>';
                        }
                        $res .= '<tr height="30" style="height: 30px;background-color: #fff;">';
                        foreach ($brand_arr as $key => $value) {
                            $res .= '<td style="border: 0;border-top: 1px solid #ddd;height:30px;border-left:0;" ></td>';
                        }
                        $res .= '</tr>';
                        $res .= '</table>
                                        <script>
                                            setTimeout(function(){
                                                var border_height = $(".compr-border-shadow").css("height", "100%").height();
                                                $(".compr-border-shadow").height(border_height - 47);
                                                var jspElement = $("#scroll-summary").bind(
                                                    "jsp-scroll-x",
                                                    function(event, scrollPositionX, isAtLeft, isAtRight)
                                                    {
                                                        if(isAtLeft){
                                                            $(".compr-border-shadow").addClass("hidden");
                                                        }else{
                                                            $(".compr-border-shadow").removeClass("hidden");
                                                        }
                                                    }
                                                    ).jScrollPane()
                                                }, 1000);
                                        </script>
                                </div>
                                <div class="compr-border-shadow hidden"></div>
                                <div class="border-right-hidden"></div>
                                </div>
                                </th>';
                    }
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == 'ComPr') {
            switch ($column) {
                case 'Product Name':
                    $res = '<th class="text-left rating-table-title" style="width: 50%;min-width:200px;height: 50px;"><strong>Product Name</strong></th>';
                    break;
                case 'Sites':
                    if (!empty($site)) {
                        $col_count = count($dates_of_upload) * count($site);
                        if ($col_count < 5) {
                            $sites_list = $this->sites_model->getSitesByIds($site);
                            $res = '';
                            $date_count = 0;
                            foreach ($dates_of_upload as $date) {
                                $site_count = 0;
                                foreach ($sites_list as $s_obj) {
                                    $site_logo = Ranking_model::getSiteLogoByName($s_obj->name);
                                    if (!empty($site_logo)) {
                                        $res .= '<th style="width:115px;" class="' . (!empty($this->sites_products_count[$s_obj->id]) ? 'sort-table-by' : '') . ' ' . ($sort_by == 'price' && isset($sort_by_num['site']) && $sort_by_num['site'] == $site_count && isset($sort_by_num['date']) && $sort_by_num['date'] == $date_count ? 'sorting-column' : '') . '" data-sort="price ' . $site_count . ' ' . $date_count . '"><img style="min-width:90px;max-height: 30px;max-width: 90px;" src="' . base_url('/img/site_logos/' . $site_logo) . '" />' . (!empty($this->sites_products_count[$s_obj->id]) ? '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'price' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>' : '') . '</th>';
                                    } else {
                                        $site_name = $s_obj->name;
                                        if (strlen($site_name) > 10) {
                                            $site_name = substr($site_name, 0, 7) . '...';
                                        }
                                        $res .= '<th style="width:115px;max-width:115px;" class="inline-text ' . (!empty($this->sites_products_count[$s_obj->id]) ? 'sort-table-by' : '') . ' ' . ($sort_by == 'price' && isset($sort_by_num['site']) && $sort_by_num['site'] == $site_count && isset($sort_by_num['date']) && $sort_by_num['date'] == $date_count ? 'sorting-column' : '') . '" data-sort="price ' . $site_count . ' ' . $date_count . '"><strong title="' . ucfirst($s_obj->name) . '">' . ucfirst($site_name) . '</strong>' . (!empty($this->sites_products_count[$s_obj->id]) ? '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'price' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>' : '') . '</th>';
                                    }
                                    ++$site_count;
                                }
                                ++$date_count;
                            }
                        } else {
                            $i = 0;
                            $res = '<th rowspan="18" style="padding: 0;border-left: 0;border-bottom: 0;">
                        <div style="position: relative">
                            <div class="scroll-pane" style="max-width: 549px;overflow: hidden;height: 100%;">
                                <table>
                                    <tr style="height: 48px;">';
                            $sites_list = $this->sites_model->getSitesByIds($site);
                            $date_count = 0;
                            foreach ($dates_of_upload as $date) {
                                $site_count = 0;
                                foreach ($sites_list as $s_obj) {
                                    $site_logo = Ranking_model::getSiteLogoByName($s_obj->name);
                                    if (!empty($site_logo)) {
                                        $res .= '<th style="width:115px;" class="' . (!empty($this->sites_products_count[$s_obj->id]) ? 'sort-table-by' : '') . ' ' . ($sort_by == 'price' && isset($sort_by_num['site']) && $sort_by_num['site'] == $site_count && isset($sort_by_num['date']) && $sort_by_num['date'] == $date_count ? 'sorting-column' : '') . '" data-sort="price ' . $site_count . ' ' . $date_count . '"><img style="min-width:90px;max-height: 30px;max-width: 90px;" src="' . base_url('/img/site_logos/' . $site_logo) . '" />' . (!empty($this->sites_products_count[$s_obj->id]) ? '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'price' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>' : '') . '</th>';
                                    } else {
                                        $site_name = $s_obj->name;
                                        if (strlen($site_name) > 10) {
                                            $site_name = substr($site_name, 0, 7) . '...';
                                        }
                                        $res .= '<th style="width:115px;max-width:115px;" class="inline-text ' . (!empty($this->sites_products_count[$s_obj->id]) ? 'sort-table-by' : '') . ' ' . ($sort_by == 'price' && isset($sort_by_num['site']) && $sort_by_num['site'] == $site_count && isset($sort_by_num['date']) && $sort_by_num['date'] == $date_count ? 'sorting-column' : '') . '" data-sort="price ' . $site_count . ' ' . $date_count . '"><strong title="' . ucfirst($s_obj->name) . '">' . ucfirst($site_name) . '</strong>' . (!empty($this->sites_products_count[$s_obj->id]) ? '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'price' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>' : '') . '</th>';
                                    }
                                    ++$site_count;
                                }
                                ++$date_count;
                            }
                            $res .= '</tr>';
                            //add row
                            $res .= '<tr class="blue-row">';
                            foreach ($dates_of_upload as $date) {
                                //$date_formated = date($dateformat == 2 ? "d/m/Y" : "m/d/Y", strtotime($date));
                                $date_formated = date('M d, Y', strtotime($date));
                                $colspan = !empty($site) && count($site) > 1 ? 'colspan="' . count($site) . '"' : '';
                                $res .= '<td ' . $colspan . ' class="text-center" style="height: 60px;">' . $date_formated . '</td>';
                            }
                            $res .= '</tr>';
                            $row_count = 0;
                            foreach ($data as $item) {
                                $tr_class = '';
                                if ($row_count % 2 == 1) {
                                    $tr_class = 'trhover';
                                }
                                $res .= '<tr class="' . $tr_class . '" height="60" style="height: 60px;background-color: #fff;">';
                                foreach ($dates_of_upload as $date) {
                                    if (!empty($item['prices'][$date])) {
                                        foreach ($sites_list as $s_obj) {
                                            if (!empty($item['prices'][$date][$s_obj->name])) {
                                                $out_of_stock_class = '';
                                                if (!empty($item['prices'][$date][$s_obj->name]->out_of_stock) && $item['prices'][$date][$s_obj->name]->out_of_stock == 't') {
                                                    $out_of_stock_class = 'com-pr-out-of-stock-td ranking-tooltip-compr';
                                                }
                                                if (!empty($item['prices'][$date][$s_obj->name]->price)) {
                                                    $price = $item['prices'][$date][$s_obj->name]->price;
                                                    if (!empty($item['prices'][$date][$s_obj->name]->price_formatted)) {
                                                        $price = $item['prices'][$date][$s_obj->name]->price_formatted;
                                                    } elseif ($item['prices'][$date][$s_obj->name]->currency) {
                                                        $price .= ' ' . $item['prices'][$date][$s_obj->name]->currency;
                                                    }
                                                    $res .= '<td style="width:135px;min-width:135px;" class="' . $out_of_stock_class . '" ' . (!empty($out_of_stock_class) ? 'data-tooltip="Out of Stock"' : '') . '><div style="position:relative;"><a href="' . $item['prices'][$date][$s_obj->name]->url . '" target="_blank">' . $price . '</a>' . (!empty($out_of_stock_class) ? '<span class="out-of-stock-td-ico"></span><br>out of stock' : '') . '</div></td>';
                                                } else {
                                                    $res .= '<td style="width:135px;min-width:135px;" class="' . $out_of_stock_class . '" ' . (!empty($out_of_stock_class) ? 'data-tooltip="Out of Stock"' : '') . '><div style="position:relative;"><a href="' . $item['prices'][$date][$s_obj->name]->url . '" target="_blank">' . (!empty($out_of_stock_class) ? 'out of stock<span class="out-of-stock-td-ico"></span><br>' : '') . 'Not Sold Online</a></div></td>';
                                                }
                                            } else {
                                                $res .= '<td style="width:135px;min-width:135px;" ></td>';
                                            }
                                        }
                                    } else {
                                        foreach ($sites_list as $s_obj) {
                                            $res .= '<td style="width:135px;min-width:135px;" ></td>';
                                        }
                                    }
                                }
                                $res .= '</tr>';
                                ++$row_count;
                            }
                            $res .= '<tr height="30" style="height: 30px;background-color: #fff;">';
                            foreach ($dates_of_upload as $date) {
                                foreach ($sites_list as $s_obj) {
                                    $res .= '<td style="width:135px;min-width:135px;border: 0;" ></td>';
                                }
                            }
                            $res .= '</tr>';
                            $percent = 1;
                            $col_position = $sort_by_num['site'] + count($site) * $sort_by_num['date'];
                            if ($col_position) {
                                $col_position++;
                            }
                            if ($col_position / (count($site) * count($dates_of_upload)) < 1 && $sort_by == 'price') {
                                $percent = round($col_position / (count($site) * count($dates_of_upload)), 2);
                            }
                            $res .= '</table>
                                        <script>
                                            setTimeout(function(){
                                            var border_height = $(".compr-border-shadow").height();
                                            $(".compr-border-shadow").height(border_height - 30);
                                                var jspElement = $(".scroll-pane").bind(
                                                    "jsp-scroll-x",
                                                    function(event, scrollPositionX, isAtLeft, isAtRight)
                                                    {
                                                        if(isAtLeft){
                                                            $(".compr-border-shadow").addClass("hidden");
                                                        }else{
                                                            $(".compr-border-shadow").removeClass("hidden");
                                                        }
                                                    }
                                                    ).jScrollPane()
var jspApi = jspElement.data("jsp");
jspApi.scrollToPercentX(' . $percent . ', false );
$(".jspHorizontalBar .jspDrag").addClass("ranking-tooltip-compr").attr("data-tooltip", "Scroll to the right to view all dates and retailers included in your report.");
setComPrTooltips();
$(".jspHorizontalBar .jspDrag").qtip("show");
setTimeout(function(){
$(".jspHorizontalBar .jspDrag").qtip("hide");
},3000);
}, 1000);
</script>
</div>
<div class="compr-border-shadow"></div>
</div>
</th>';
                        }
                    } else {
                        $res = '<th class="no-width"><strong>Sites</strong></th>';
                    }
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1s1t') {
            switch ($column) {
                case 'Brand':
                    $res = '<th class="sort-table-by text-left" data-sort="name"><strong>Brand</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'b.name' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Brand Results':
                    $res = '<th style="width:120px" class="sort-table-by" data-sort="brand_results"><strong>Brand Results</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.brand_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case '#SKUs on First Page':
                    $res = ' <th style="width:155px" class="sort-table-by" data-sort="on_first_page"><strong>#SKUs on First Page</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsris.on_first_page' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Best Match Rankings':
                    $res = '<th style="width:25%" class="sort-table-by" data-sort="number_in_results"><strong>Best Match Rankings</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'r.number_in_results' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1srv' || $view == 'p2hp') {
            switch ($column) {
                case 'Best Match Rank':
                    $res = '<th class="sort-table-by ' . ($sort_by == 'rsri.ranking' ? 'sorting-column' : '') . '" data-sort="ranking" style="width: 10%;"><div><strong>Best Match Rank</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.ranking' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Search Terms':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'st.title' ? 'sorting-column' : '') . '" data-sort="keyword" style="width: 20%;"><div><strong>Search Terms</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'st.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Product Name':
                    $res = '<th class="sort-table-by no-width text-left ' . ($sort_by == 'rsri.title' ? 'sorting-column' : '') . '" data-sort="title"><div><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Best Seller Rank':
                    $res = '<th class="sort-table-by ' . ($sort_by == 'rsri.best_seller_ranking' ? 'sorting-column' : '') . '" style="width: 10%;" data-sort="best_seller_ranking"><div><strong>Best Seller Rank</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.best_seller_ranking' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Site':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'site' ? 'sorting-column' : '') . '" data-sort="site" style="width: 10%;"><div><strong>Site</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'site' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'In Stock':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'out_of_stock' ? 'sorting-column' : '') . '" data-sort="out_of_stock" style="width: 10%;"><div><strong>In Stock</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'out_of_stock' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'In Store Only':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'in_store_only' ? 'sorting-column' : '') . '" data-sort="in_store_only" style="width: 10%;"><div><strong>In Store Only</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'in_store_only' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Price':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'price' ? 'sorting-column' : '') . '" data-sort="price" style="width: 10%;"><div><strong>Price</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'price' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Brand':
                    $res = '<th class="sort-table-by no-width ' . ($sort_by == 'brand_name' ? 'sorting-column' : '') . '" data-sort="brand_name" style="width: 10%;"><div><strong>Brand</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'brand_name' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Visits':
                    $res = '<th class="sort-table-by no-width" data-sort="page_visits" style="width: 10%;"><div><strong>Visits</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'page_visits' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></div></th>';
                    break;
                case 'Sales (One Day Avg)':
                    $res = '<th><div><strong>Sales (One Day Avg)</strong></div></th>';
                    break;
                case 'Sales (30 Day Avg)':
                    $res = '<th><div><strong>Sales (30 Day Avg)</strong></div></th>';
                    break;
                case 'Amazon Type':
                    $res = '<th class="sort-table-by ' . ($sort_by == 'prime' ? 'sorting-column' : '') . '" data-sort="prime"><div><strong>Amazon Type</strong></div><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'prime' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'UPC':
                    $res = '<th><div><strong>UPC</strong></div></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1sro') {
            switch ($column) {
                case 'Product':
                    $res = '<th class="sort-table-by no-width" data-sort="title"><strong>Product</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Brand':
                    $res = '<th class="sort-table-by width80" data-sort="brand_name"><strong>Brand</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'brand_name' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Site':
                    $res = '<th class="sort-table-by width80" data-sort="site_name"><strong>Site</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'site_name' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case '5 stars':
                    $avg = !empty($data[5]) ? "({$data['5']})" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="five_star">
                        <span class="star-ico five-star-ico"></span>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'five_star' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                case '4 stars':
                    $avg = !empty($data[4]) ? "({$data['4']})" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="four_star">
                        <span class="star-ico four-star-ico"></span>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'four_star' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                case '3 stars':
                    $avg = !empty($data[3]) ? "({$data['3']})" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="three_star">
                        <span class="star-ico three-star-ico"></span>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'three_star' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                case '2 stars':
                    $avg = !empty($data[2]) ? "({$data['2']})" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="two_star">
                        <span class="star-ico two-star-ico"></span>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'two_star' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                case '1 star':
                    $avg = !empty($data[1]) ? "({$data['1']})" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="one_star">
                        <span class="star-ico one-star-ico"></span>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'one_star' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                case 'Average':
                    $avg = !empty($data['average']) ? "(" . $data['average'] . ")" : "";
                    $res = '<th class="sort-table-by no-width" data-sort="average_num">
                        <strong>Average</strong>
                        <span style="white-space: nowrap">' . $avg . '</span>
                        <span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'average_num' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span>
                    </th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1srobp') {
            switch ($column) {
                case 'Rating':
                    $res = '<th class="no-width">Rating</th>';
                    break;
                case 'Dates':
                    foreach ($dates_of_upload as $date) {
                        $res .= '<th class="date-title width71">' . $date . '</th>';
                    }
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1srvbs') {
            switch ($column) {
                case 'Product':
                    $res = '<th style="width:245px;" >Product</th>';
                    break;
                case 'Search Term':
                    $res = '<th style="min-width:86px;">Search Term</th>';
                    break;
                case 'Last Week':
                    $res = '<th class="width71">Last Wk</th>';
                    break;
                case 'Yesterday':
                    $res .= '<th class="width71">Yest</th>';
                    break;
                case 'Today':
                    $res .= '<th class="width71">Today</th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1s1b1r') {
            switch ($column) {
                case 'Brand':
                    $res = '<th class="brand-image text-left" style="width: 16%"><strong>Brand</strong></th>';
                    break;
                case 'Rank':
                    $res = '<th class="sort-table-by no-width text-left" data-sort="ranking" style="width: 7%;"><strong>Rank</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.ranking' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Product Name':
                    $res = '<th class="sort-table-by no-width text-left" data-sort="title" style="width:24%"><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Best Seller Rank':
                    $res = '<th class="sort-table-by" data-sort="best_seller_ranking" style="width: 15%"><nobr><strong>Best Seller Rank</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.best_seller_ranking' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></nobr></th>';
                    break;
                case 'Search Term In Title':
                    //<span data-content="<div style="font-weight: 400" id="popover_span_class">Exact: The exact search query appears in the name of the product.<br><br> Interleaved: All of the words from the search query appear in the product name.<br><br> Partial: Some words from the search query appear in the product name.</div>" data-html="true"  data-original-title="<span id="popover_span_class">Explanation</span><a class="popover_close_btn" href="#" onclick="close_popover(this); return false;">X</a>"  title=""  data-placement="left" class="question_mark_brand_report_ranking"></span>
                    //$res = '<th class="sort-table-by" data-sort="search_term_in_title"><strong>Search Term In Title</strong><span class="pull-right ' . ( $sort_dir == 'desc' && $sort_by == 'rsri.search_term_in_title' ? 'sorting-ico-down' : 'sorting-ico-up' ) . '"></span></th>';
                    $res = '<th class="sort-table-by min_width_last_tds" data-sort="search_term_in_title"><strong>Search Term In Title</strong><span data-content="<div style=\'font-weight: 400; text-align:left;\' id=\'popover_span_class\' >Exact Match: The exact search query appears in the product name.<br><br> Broad Match: Some of the search query words appear in the product name.<br><br> No Match: The search query words do not appear in the product name.</div>" data-html="true"  data-original-title="<span id=\'popover_span_class\'>Explanation</span><a class=\'popover_close_btn\' href=\'#\' onclick=\'close_popover(this); return false;\'></a>"  title=""  data-placement="left" class="question_mark_brand_report_ranking"></span><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.search_term_in_title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Promo Opportunities':
                    $res = '<th class="sort-table-by"><strong>Promo Opportunities</strong></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1s1b1r_md') {
            $col_width = $columns_count ? 98 / (int) $columns_count : 0;
            $col_px_width = $columns_count ? 990 / (int) $columns_count : 0;
            switch ($column) {
                case 'Brand':
                    $res = '<th class="brand-image text-left" style="width: ' . $col_width . '%;"><strong>Brand</strong></th>';
                    break;
                case 'Product Name':
                    $res = '<th class="sort-table-by no-width text-left" data-sort="title" style="width:' . $col_width . '%"><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == "desc" && $sort_by == "rsri.title" ? "sorting-ico-down" : "sorting-ico-up") . '"></span></th>';
                    break;
                case 'Product Details':
                    $res = '<th class="text-left" style="width: ' . $col_width . '%;"><strong>Product Details</strong></th>';
                    break;
                case 'Product Data':
                    $res = '';
                    foreach ($dates_of_upload as $date) {
                        if ($dateformat == 1) {
                            $date = date('m/d/Y', strtotime($date));
                        } elseif ($dateformat == 2) {
                            $date = date('d/m/Y', strtotime($date));
                        }
                        $res .= '<th style="width: ' . $col_width . '%;"><strong>' . $date . '</strong></th>';
                    }
                    break;
                default:
                    $res = '<th></th>';
            }
            if (!$this->rowcountrow) {
                $res .= '<style type="text/css">
                    #ranking-table .promo-opportunities p{
    width: ' . ($col_px_width - 40) . 'px;
}
</style>';
            }
            ++$this->rowcountrow;
        } elseif ($view == '1s1bpn') {
            switch ($column) {
                case 'Product Name':
                    $res = '<th class="sort-table-by no-width text-left" data-sort="title"><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Site':
                    $res = '<th class="no-width text-left" style="width:20%"><strong>Site</strong></th>';
                    break;
                case 'Search Terms':
                    $res = '<th class="no-width text-left" style="width:20%"><strong>Search Term</strong></th>';
                    break;
                case 'Search Term In Title':
                    $res = '<th class="sort-table-by min_width_last_tds" data-sort="search_term_in_title"><strong>Search Term In Title</strong><span data-content="<div style=\'font-weight: 400; text-align:left; color:black;\' id=\'popover_span_class\' >Exact Match: The exact search query appears in the product name.<br><br> Broad Match: Some of the search query words appear in the product name.<br><br> No Match: The search query words do not appear in the product name.</div>" data-html="true"  data-original-title="<span id=\'popover_span_class\'>Explanation</span><a class=\'popover_close_btn\' href=\'#\' onclick=\'close_popover(this); return false;\'></a>"  title=""  data-placement="left" class="question_mark_brand_report_ranking"></span><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.search_term_in_title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1s1bpn_md') {
            switch ($column) {
                case 'Product Name':
                    $res = '<th class="sort-table-by no-width text-left" data-sort="title" style="width:20%"><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == "desc" && $sort_by == "rsri.title" ? "sorting-ico-down" : "sorting-ico-up") . '"></span></th>';
                    break;
                case 'Site':
                    $res = '<th class="no-width text-left" style="width:20%"><strong>Site</strong></th>';
                    break;
                case 'Search Terms':
                    $res = '<th class="no-width text-left" style="width:20%"><strong>Search Term</strong></th>';
                    break;
                case 'Product Details':
                    $res = '<th class="text-left"><strong>Product Details</strong></th>';
                    break;
                case 'Product Data':
                    $res = '';
                    foreach ($dates_of_upload as $date) {
                        if ($dateformat == 1) {
                            $date = date('m/d/Y', strtotime($date));
                        } elseif ($dateformat == 2) {
                            $date = date('d/m/Y', strtotime($date));
                        }
                        $res .= '<th><strong>' . $date . '</strong></th>';
                    }
                    break;
                default:
                    $res = '<th></th>';
            }
        } elseif ($view == '1srv_md' || $view == 'p2hp_md') {
            switch ($column) {
                case 'Product Name':
                    $res = '<th class="sort-table-by text-left ' . ($sort_by == 'rsri.title' ? 'sorting-column' : '') . '" data-sort="title" style="width:48%"><strong>Product Name</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Best Match Rank':
                    $columns_count = 7 - $this->visible_columns_count;
                    if (count($dates_of_upload) <= $columns_count) {
                        $i = 0;
                        $res = '';
                        foreach ($dates_of_upload as $date) {
                            $timestamp = strtotime($date);
                            $res .= '<th class="text-center width100 sort-table-by ' . ($sort_by_num == $i && $sort_by == 'rsri.ranking' ? 'sorting-column' : '') . '" data-sort="ranking ' . (int) $i . '" >' . date('M d/y', $timestamp) . '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.ranking' && $sort_by_num == $i ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                            ++$i;
                        }
                    } else {
                        $width = 115 * $columns_count;
                        $i = 0;
                        $res = '<th rowspan="' . (count($data) + 1) . '" style="padding: 0;">
                    <div class="scroll-pane" style="max-width: ' . $width . 'px;overflow: hidden;height: 100%;">
                        <table class="inner-table">
                            <tr>';
                        foreach ($dates_of_upload as $date) {
                            $timestamp = strtotime($date);
                            $res .= '<th class="text-center width100 sort-table-by ' . ($sort_by_num == $i && $sort_by == 'rsri.ranking' ? 'sorting-column' : '') . '" data-sort="ranking ' . (int) $i . '" >' . date('M d/y', $timestamp) . '<span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'rsri.ranking' && $sort_by_num == $i ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                            ++$i;
                        }
                        $res .= '</tr>';
                        foreach ($data as $item) {
                            $first_page_class = '';
                            $tr_class = '';
                            if (!empty($dates_of_upload[$sort_by_num]) && !empty($item[$dates_of_upload[$sort_by_num]]) && !empty($item[$dates_of_upload[$sort_by_num]]->ofp_by_ranking) && $item[$dates_of_upload[$sort_by_num]]->ofp_by_ranking == 't') {
                                $tr_class = 'first-page-item-row';
                                $first_page_class = ' class="first-page-item"';
                            }
                            $res .= '<tr class="' . $tr_class . '">';
                            $prev_value = 0;
                            foreach ($dates_of_upload as $date) {
                                $res .= '<td  style="height:40px; " ' . $first_page_class . '>';
                                $res .= '<div class="text-center" style="margin: 0 auto; width: 100px;display: inline-block;position: relative;">';
                                if (!empty($item[$date]) && !empty($item[$date]->ranking)) {
                                    if ($prev_value != '') {
                                        if ($prev_value > $item[$date]->ranking) {
                                            $dif = abs($item[$date]->ranking - $prev_value);
                                            $res .= '<div style="float: right;right: -33px;background-color: #e6f3d9;border-radius: 5px;padding-right: 5px;color:#4fb724;"><img src="' . base_url('img/percent-arrow-increase.png') . '" style="position: relative;left: -5px;bottom:2px;">' . $dif . '</div>';
                                        } elseif ($prev_value < $item[$date]->ranking) {
                                            $dif = abs($item[$date]->ranking - $prev_value);
                                            $res .= '<div style="float: right;right: -33px;background-color: #f6d7d2;border-radius: 5px;padding-right: 5px;color:#f40000;"><img src="' . base_url('img/percent-arrow-decrease.png') . '" style="position: relative;left: -5px;bottom:2px;">' . $dif . '</div>';
                                        }
                                    }
                                    $res .= '<span style="width: 40px; text-align: center;">' . $item[$date]->ranking . '</span>';
                                    $prev_value = $item[$date]->ranking;
                                }
                                $res .= '</td>';
                            }
                            $res .= '</tr>';
                        }
                        $res .= '</table>
                                <script>
                                    setTimeout(function(){
                                        var jspElement = $(".scroll-pane").bind(
                                            "jsp-scroll-x",
                                            function(event, scrollPositionX, isAtLeft, isAtRight)
                                            {
                                                var sumAllDAy = 0;
                                                $(".date-tags").each(function(index) {
                                                    var daynum = $(\'tbody tr.dark-row td[data-id="\' + $(this).text() + \'"]\').length;
                                                    var scrollWidth = daynum*87;
                                                    if(scrollPositionX >= sumAllDAy && scrollPositionX <= sumAllDAy + scrollWidth - 50) {
                                                        $(this).css("left",scrollPositionX-sumAllDAy);
                                                    }
                                                    sumAllDAy += scrollWidth;
                                                });
                                            //var dateTags = $(".date-tags");
                                            //$(dateTags[0]).css("left",scrollPositionX);

                                            //$(".date-tags").css("left",scrollPositionX);
}
).jScrollPane();
var jspApi = jspElement.data("jsp"); ';
                        //scroll table to the right
                        if ($sort_by_num >= count($dates_of_upload) - 2) {
                            $res .= 'jspApi.scrollToPercentX(100, false );';
                        }
                        $res .= '}, 1000);
</script>
</div>
</th>';
                    }
                    break;
                case 'Search Terms':
                    $res = '<th class="sort-table-by text-left no-width ' . ($sort_by == 'st.title' ? 'sorting-column' : '') . '" data-sort="keyword" style="width: 16%;min-width:130px;"><strong>Search Terms</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'st.title' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Site':
                    $res = '<th class="sort-table-by text-left no-width ' . ($sort_by == 'site' ? 'sorting-column' : '') . '" data-sort="site" style="width: 16%;min-width:100px;"><strong>Site</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'site' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                case 'Average Ranking':
                    $res = '<th class="sort-table-by text-left no-width ' . ($sort_by == 'avg_ranking' ? 'sorting-column' : '') . '" data-sort="avg_ranking" style="width: 20%;min-width:100px;"><strong>Avg Ranking</strong><span class="pull-right sorting ' . ($sort_dir == 'desc' && $sort_by == 'avg_ranking' ? 'sorting-ico-down' : 'sorting-ico-up') . '"></span></th>';
                    break;
                default:
                    $res = '<th></th>';
            }
        }
        return $res;
    }
Exemple #4
0
 /**
  * Return data for ranking charts
  * @return json
  * @author Ruslan Ushakov
  */
 public function get_raking_chart_data()
 {
     $this->load->model('ranking_model');
     $this->load->model('product_model');
     $this->load->model('sites_model');
     $site_id = $this->input->post('site_id');
     $group_id = (int) $this->input->post('group_id');
     $term_id = $this->input->post('term_id');
     $brand_id = $this->input->post('brand_id');
     $brand_id = array_filter($brand_id);
     if (empty($brand_id)) {
         $this->load->model('scorecard_model');
         $selected_brands = $this->scorecard_model->get_brands_by_search_terms($term_id, $site_id);
         foreach ($selected_brands as $val) {
             $brand_id[] = $val->id;
         }
     }
     $all_checked_brand_checkboxes = $this->input->post('all_checked_brand_checkboxes');
     $brand_id = Ranking_model::getBrandIdsFromSelectedGroups($brand_id, $all_checked_brand_checkboxes);
     //if(!empty($brand_id) && is_array($brand_id)) $brand_id = $brand_id[0];
     $view = $this->input->post('view');
     $date_of_upload = $this->input->post('date_of_upload');
     $chart_type = $this->input->post('chart_type');
     $selected_products = $this->input->post('selected_products');
     $compare_site_id = $this->input->post('compare_site_id');
     $compare_date_of_upload = $this->input->post('compare_date_of_upload');
     /*get sorting params*/
     $sort_by = $this->input->post('sort_by');
     $sort_dir = $this->input->post('sort_dir');
     $all_checked_checkboxes = $this->input->post('all_checked_checkboxes');
     $product_lists = $this->input->post('product_lists');
     $term_arr = array();
     if ($view == '1s1b' && !$term_id && $chart_type == 'on_first_page_chart') {
         $term_arr = $this->ranking_model->getSearchTerms($brand_id);
     }
     /*check sorting params*/
     if ($sort_dir != 'asc') {
         //$sort_dir = 'desc';
     }
     if ($chart_type == 'on_first_page_chart') {
         $view = '1s1t';
     }
     $sort_by = $this->getSortingField($sort_by, $view);
     if (empty($sort_by)) {
         $sort_by = 'rsri.ranking';
     }
     /*Chart pagination vars*/
     $total = 0;
     $limit = 5;
     $page = (int) $this->input->post('page');
     /*End chart pagination vars*/
     $main_search_result = 'ok';
     $count = 0;
     $data = array();
     if ($chart_type == 'on_first_page_chart') {
         if (!$term_id && !empty($term_arr)) {
             $data['multiple_terms'] = array();
             foreach ($term_arr as $term) {
                 $result = $this->ranking_model->getRankingByTerm($site_id, $date_of_upload, $term->search_term_id, $sort_by, $sort_dir, true);
                 $data_prepared = $this->ranking_model->prepareOnFirstPageRanking($result);
                 $data['multiple_terms'][$term->title] = $data_prepared;
                 if (empty($data_prepared)) {
                     $count++;
                 }
             }
             if ($count == count($term_arr)) {
                 $main_search_result = '0';
             }
         } elseif ($term_id) {
             if (is_array($date_of_upload)) {
                 $date_of_upload = $date_of_upload[0];
             }
             if (!empty($group_id)) {
                 $result = $this->ranking_model->getRankingByTerm($site_id, $date_of_upload, $term_id, $sort_by, $sort_dir, false, $group_id);
             } else {
                 $result = $this->ranking_model->getRankingByTerm($site_id, $date_of_upload, $term_id, $sort_by, $sort_dir, true);
             }
             $data = $this->ranking_model->prepareOnFirstPageRanking($result);
         } else {
             $data = $this->ranking_model->getOnFirstPageRanking($site_id, $date_of_upload, $term_id, $sort_by, $sort_dir, true);
         }
     } elseif ($chart_type == 'product_rankings_chart' && is_array($date_of_upload) && count($date_of_upload) > 1) {
         foreach ($selected_products as &$prod) {
             $prod = str_replace('& ', '&amp; ', $prod);
         }
         if (empty($selected_products)) {
             $offset = $page * $limit;
             $offset_product_names = $this->ranking_model->getChartLimitProductNames($site_id, $date_of_upload, $brand_id, $term_id, $limit, $offset);
             foreach ($offset_product_names as $name) {
                 $selected_products[] = $name->title;
             }
             $total = $this->ranking_model->getChartProductNamesTotal($site_id, $date_of_upload, $brand_id, $term_id);
         }
         $res = $this->ranking_model->getRankingInfoForCharts($selected_products, $date_of_upload, $brand_id, $term_id, $site_id);
         /*sorting received data*/
         foreach ($res as $val) {
             if (!array_key_exists($val->title, $data)) {
                 $data[$val->title] = array();
             }
             $data[$val->title][$val->date_of_upload] = $val->ranking;
         }
         /*checking for all dates data was selected*/
         /*foreach($data as &$dval){
         		foreach($date_of_upload as $date){
         		if(!isset($dval[$date])){
         		$dval[$date] = 0;
         		}
         		}
         		ksort($dval);
         		}*/
     } elseif ($chart_type == 'product_name_view_chart') {
         $pnv_chart_view = $this->input->post('pnv_chart_view');
         if (!empty($date_of_upload) && is_array($date_of_upload)) {
             $data = array();
             if (count($date_of_upload) > 1) {
                 foreach ($date_of_upload as $date) {
                     $res = $this->ranking_model->getQueryProductMatch($site_id, $date, $term_id, $brand_id, $pnv_chart_view);
                     if ($res == '0') {
                         $main_search_result = '0';
                     } else {
                         $data[$date] = $res;
                     }
                 }
             } else {
                 $res = $this->ranking_model->getQueryProductMatch($site_id, $date_of_upload, $term_id, $brand_id, $pnv_chart_view);
                 if ($res == '0') {
                     $main_search_result = '0';
                 } else {
                     $data = $res;
                 }
             }
         } else {
             $res = $this->ranking_model->getQueryProductMatch($site_id, $date_of_upload, $term_id, $brand_id, $pnv_chart_view);
             if ($res == '0') {
                 $main_search_result = '0';
             } else {
                 $data = $res;
             }
         }
     } elseif ($chart_type == 'summary_view_chart') {
         $brand_res = array();
         $brand_res_by_site = array();
         $categories = array();
         foreach ($all_checked_checkboxes as $key => $value) {
             if (!array_key_exists('id', $value)) {
                 unset($all_checked_checkboxes[$key]);
             }
         }
         $all_results_for_body = array('brands' => array(), 'terms' => array());
         foreach ($all_checked_checkboxes as $key => $value) {
             $curr_group_terms = $this->ranking_model->getTermsIdsByGroupId($key);
             $current_group_ids = array();
             foreach ($curr_group_terms as $term) {
                 if (in_array($term->id, $term_id)) {
                     $current_group_ids[] = $term->id;
                 }
             }
             $gr_id = $key;
             if (!empty($value['id'])) {
                 $curr_group_terms_count = 0;
                 if (!is_array($site_id)) {
                     $site_id = array($site_id);
                 }
                 foreach ($site_id as $site) {
                     $site_obj = $this->sites_model->getSite($site);
                     if (!empty($site_obj[0])) {
                         $site_obj = $site_obj[0];
                     }
                     $tmp_all_results_for_body = array();
                     $data_prepared = $this->ranking_model->getProductsByTerm($site, $date_of_upload, $current_group_ids, 'rsri.ranking', 'asc', $brand_id);
                     $curr_group_terms_count = Ranking_model::get_ofp_total_count($data_prepared, $tmp_all_results_for_body);
                     if (!empty($site_obj['name']) && !array_key_exists($site_obj['name'], $brand_res_by_site)) {
                         $brand_res_by_site[$site_obj['name']] = array();
                     }
                     if (!empty($tmp_all_results_for_body['brands'])) {
                         foreach ($tmp_all_results_for_body['brands'] as $key => $arfb) {
                             if (!array_key_exists($key, $all_results_for_body['brands'])) {
                                 $all_results_for_body['brands'][$key] = 0;
                             }
                             $all_results_for_body['brands'][$key] += $arfb;
                             if (!array_key_exists($key, $brand_res_by_site[$site_obj['name']])) {
                                 $brand_res_by_site[$site_obj['name']][$key] = 0;
                             }
                             $brand_res_by_site[$site_obj['name']][$key] += $arfb;
                         }
                     }
                 }
             }
         }
         $column_data = array();
         $brands_count_by_site = array();
         $brand_res = array();
         if (!empty($brand_id)) {
             foreach ($brand_id as $bid) {
                 $brand = $this->ranking_model->getBrandNameByBrandId($bid);
                 if (!empty($brand->name)) {
                     if (array_key_exists($brand->name, $all_results_for_body['brands'])) {
                         $brand_res[] = array($brand->name, $all_results_for_body['brands'][$brand->name]);
                         unset($all_results_for_body['brands'][$brand->name]);
                     } else {
                         $brand_res[] = array($brand->name, 0);
                     }
                     foreach ($site_id as $site) {
                         $site_obj = $this->sites_model->getSite($site);
                         if (!empty($site_obj[0])) {
                             $site_obj = $site_obj[0];
                         }
                         if (!empty($site_obj['name']) && !in_array($site_obj['name'], $categories)) {
                             $categories[] = $site_obj['name'];
                         }
                         if (!array_key_exists($brand->name, $column_data)) {
                             $column_data[$brand->name] = array();
                         }
                         if (!empty($brand_res_by_site[$site_obj['name']][$brand->name])) {
                             $column_data[$brand->name][] = $brand_res_by_site[$site_obj['name']][$brand->name];
                         } else {
                             $column_data[$brand->name][] = 0;
                         }
                         //count all products on first page by site
                         if (!array_key_exists($site_obj['name'], $brands_count_by_site)) {
                             $brands_count_by_site[$site_obj['name']] = 0;
                         }
                         if (!empty($brand_res_by_site[$site_obj['name']][$brand->name])) {
                             $brands_count_by_site[$site_obj['name']] += $brand_res_by_site[$site_obj['name']][$brand->name];
                         }
                     }
                 }
             }
             if ($this->reportsettings->getSetting('1ssv_sort', 'isEnabledOther')) {
                 //Count other values
                 $sum_other_count = 0;
                 $column_data['Other'] = array();
                 if (!empty($site_id)) {
                     foreach ($site_id as $siteId) {
                         /**
                          * For now this is the fastest solution to fix swap bug.
                          * In future there should be site validation and common function that will return sites
                          * in normal order.
                          */
                         $site = $this->sites_model->getSite($siteId);
                         //No comments... Why people use result_array() instead of row_array() ?!!!!
                         $site = array_shift($site);
                         $possible_spot = 0;
                         foreach ($term_id as $cur_term) {
                             $possible_spot += $this->ranking_model->getOfpCountByTerm($site['id'], $date_of_upload, $cur_term);
                         }
                         $brands_count = !empty($brands_count_by_site[$site['name']]) ? $brands_count_by_site[$site['name']] : 0;
                         $other_count = $possible_spot - $brands_count;
                         $column_data['Other'][] = $other_count;
                         $sum_other_count += $other_count;
                     }
                 }
                 $brand_res[] = array('Other', $sum_other_count);
             }
         }
         $data['brand_res'] = $brand_res;
         $data['categories'] = $categories;
         $data['column_data'] = $column_data;
         if (empty($brand_res)) {
             $main_search_result = '0';
         } else {
             $total = 1;
         }
     } elseif ($chart_type == 'pricing_view_chart') {
         $data = array();
         $total = 1;
         foreach ($date_of_upload as $date) {
             $data[$date] = array();
             $data[$date]['date_str'] = date('F j, Y', strtotime($date));
             $categories = array();
             $series = array();
             $data_prepared = array();
             $userData = array('sites' => array());
             $currencies = array();
             if (!empty($site_id) && count($site_id) > 1) {
                 foreach ($site_id as $site) {
                     $titles_list = $this->ranking_model->getAssociatedProductsByParams($site, $date, $term_id, $brand_id, $product_lists, $sort_by, $sort_dir, $selected_products);
                     $site_obj = $this->sites_model->getSite($site);
                     if (!empty($site_obj[0])) {
                         $site_obj = $site_obj[0];
                     }
                     if (!empty($site_obj['name']) && !in_array($site_obj['name'], $categories)) {
                         $categories[] = $site_obj['name'];
                         $img = Ranking_model::getSiteLogoByName($site_obj['name']);
                         $site_logo = '';
                         if (!empty($img)) {
                             $site_logo = base_url('/img/site_logos/' . $img);
                         }
                         $userData['sites'][$site_obj['name']] = $site_logo;
                         foreach ($titles_list as $product) {
                             if (!empty($product->title) && !array_key_exists($product->title, $data_prepared)) {
                                 $data_prepared[$product->title] = array();
                                 $data_prepared[$product->title]['name'] = $product->title;
                                 $data_prepared[$product->title]['data'] = array();
                             }
                             if (!array_key_exists($site_obj['name'], $data_prepared[$product->title]['data'][$site_obj['name']])) {
                                 $data_prepared[$product->title]['data'][$site_obj['name']] = $product;
                             }
                             $associatedProducts = $this->ranking_model->getAssociatedProducts($product);
                             if (!empty($associatedProducts)) {
                                 $data_prepared[$product->title]['data'] = array_merge($data_prepared[$product->title]['data'], $associatedProducts);
                             }
                         }
                     }
                 }
             }
             $series_count = 0;
             foreach ($data_prepared as $dp) {
                 $series[$series_count] = array('name' => $dp['name'], 'data' => array());
                 foreach ($categories as $key => $category) {
                     if (!empty($dp['data'][$category])) {
                         $series[$series_count]['data'][$key]['y'] = (double) $dp['data'][$category]->price;
                         $series[$series_count]['data'][$key]['image_url'] = $dp['data'][$category]->image_url;
                         $currency_symbol = Ranking_model::getCurrencySymbol($dp['data'][$category]->currency);
                         if (empty($currency_symbol)) {
                             $currency_symbol = '$';
                         }
                         if (!in_array($currency_symbol, $currencies)) {
                             $currencies[] = $currency_symbol;
                         }
                         $series[$series_count]['data'][$key]['currency_symbol'] = $currency_symbol;
                     } else {
                         $series[$series_count]['data'][$key] = array('y' => 0, 'image_url' => '');
                     }
                 }
                 ++$series_count;
             }
             $userData['currency_str'] = !empty($currencies) ? implode('/', $currencies) : '$';
             $userData['counts'] = $series_count * count($site_id);
             $data[$date]['categories'] = $categories;
             $data[$date]['series'] = $series;
             $data[$date]['userData'] = $userData;
         }
     }
     if (empty($data) || $total == 0) {
         $main_search_result = '0';
     }
     $this->output->set_content_type('application/json')->set_output(json_encode(array('result' => $main_search_result, 'data' => $data, 'date_of_upload' => $date_of_upload, 'total' => $total, 'page' => $page)));
 }
 /**
  * Return data for table view Comparative Pricing
  * @return json
  * @author Ruslan Ushakov
  */
 public function getComparativePricing()
 {
     $this->load->model('ranking_model');
     $this->load->model('sites_model');
     $this->load->model('ranking_summary_model');
     $this->load->model('product_model');
     $userId = $this->ion_auth->get_user_id();
     $hasAssociations = $this->product_model->hasAssociations($userId);
     $site_id = $this->input->post('site_id');
     $term_id = $this->input->post('term_id');
     $brand_id = $this->input->post('brand_id');
     $date_of_upload = $this->input->post('date_of_upload');
     $view = $this->input->post('view');
     $includeUnmached = $this->input->post('include_unmached');
     $product_lists = $this->input->post('product_lists');
     $all_checked_checkboxes = $this->input->post('all_checked_checkboxes');
     $all_checked_brand_checkboxes = $this->input->post('all_checked_brand_checkboxes');
     $sort_by = $this->input->post('sort_by');
     $sort_dir = $this->input->post('sort_dir') == 'desc' ? 'desc' : 'asc';
     $sort_by_num = array('date' => -1, 'site' => -1);
     if (preg_match("/([\\w]+) ([\\d]+) ([\\d]+)/ui", $sort_by, $matches)) {
         $sort_by = $matches[1];
         $sort_by_num['site'] = (int) $matches[2];
         $sort_by_num['date'] = (int) $matches[3];
     }
     $sort_by = $this->getSortingField($sort_by, $view);
     $multiple_array = null;
     // multiple data array (sites or dates of upload)
     $multiple_array_data = null;
     /*if ((is_array($site_id) && count($site_id) > 1) || (is_array($date_of_upload) && count($date_of_upload) > 1)) {
       $multiple_array = count($site_id) > 1 ? $site_id : $date_of_upload;
       $multiple_array_data = count($site_id) > 1 ? 'site_id' : 'date_of_upload';
       }*/
     if (is_array($site_id) && ($sort_by_num['site'] < 0 || $sort_by_num['site'] >= count($site_id))) {
         $sort_by_num['site'] = 0;
     }
     if (is_array($date_of_upload) && ($sort_by_num['date'] < 0 || $sort_by_num['date'] >= count($date_of_upload))) {
         $sort_by_num['date'] = 0;
     }
     $data = array();
     $uniqueListOfProducts = [];
     $brand_id = Ranking_model::getBrandIdsFromSelectedGroups($brand_id, $all_checked_brand_checkboxes);
     //Issue #3042 Associate keywords/groups with selected brand
     if (!empty($brand_id)) {
         $this->setAssociatedBrands($brand_id);
         $this->ranking_model->setAssociatedKeywords($brand_id, $all_checked_checkboxes);
     }
     $date_of_upload = array_reverse($date_of_upload);
     // sort date_of_upload by sort_by_num if needed
     $sorted_date_of_upload = array();
     $tmp_date_of_upload = $date_of_upload;
     if ($sort_by_num['date'] > 0 && !empty($tmp_date_of_upload[$sort_by_num['date']])) {
         $sorted_date_of_upload[] = $tmp_date_of_upload[$sort_by_num['date']];
         array_splice($tmp_date_of_upload, $sort_by_num['date'], 1);
     }
     $sorted_date_of_upload = array_merge($sorted_date_of_upload, $tmp_date_of_upload);
     $sorted_site_id = array();
     $tmp_site_id = $site_id;
     if ($sort_by_num['site'] > 0 && !empty($tmp_site_id[$sort_by_num['site']])) {
         $sorted_site_id[] = $tmp_site_id[$sort_by_num['site']];
         array_splice($tmp_site_id, $sort_by_num['site'], 1);
     }
     $sorted_site_id = array_merge($sorted_site_id, $tmp_site_id);
     $filter = array('site_id' => $site_id, 'date_of_upload' => $sorted_date_of_upload, 'term_id' => $term_id, 'brand_id' => $brand_id, 'product_list' => $product_lists, 'price_required' => true);
     //  Update Selected Variants, run each time because variants selection could be changed during the day.
     $this->product_model->updateVariantsForSelectedProducts($filter);
     //  Get Available variants by filter, later this variants are attached to products.
     $variants = $this->product_model->getVariantsByParams($filter);
     if (!empty($sorted_site_id) && !empty($date_of_upload) && (!empty($term_id) || !empty($product_lists))) {
         $data_prepared = array();
         //Issue 5542
         $sites_count = array();
         foreach ($sorted_site_id as $s_id) {
             if ($includeUnmached == 'true') {
                 $titles_list = $this->ranking_model->getProductsByTerm($s_id, $sorted_date_of_upload, $term_id, $sort_by, $sort_dir, $brand_id, 0, false, $product_lists);
             } else {
                 $titles_list = $this->ranking_model->getAssociatedProductsByParams($s_id, $sorted_date_of_upload, $term_id, $brand_id, $product_lists, $sort_by, $sort_dir);
             }
             if ($sort_by == 'price' && $sort_dir == 'desc') {
                 uasort($titles_list, array($this, 'userSortByPriceDesc'));
             }
             foreach ($sorted_date_of_upload as $date) {
                 foreach ($titles_list as $product) {
                     if ($product->date_of_upload == $date) {
                         $uniqueListOfProducts[$product->url_id] = $product->title;
                         if (!array_key_exists($s_id, $sites_count)) {
                             $sites_count[$s_id] = 0;
                         }
                         ++$sites_count[$s_id];
                         $group = $includeUnmached == 'false' ? $product->group_hash : htmlspecialchars($product->title);
                         if (!array_key_exists($group, $data_prepared)) {
                             $data_prepared[$group] = array();
                             $data_prepared[$group]['image_url'] = $product->image_url;
                             $data_prepared[$group]['title'] = !empty($product->title) ? $product->title : $product->product_title;
                             $data_prepared[$group]['url_id'] = $product->url_id;
                         }
                         if (empty($data_prepared[$group]['prices'])) {
                             $data_prepared[$group]['prices'] = array();
                         }
                         if (!array_key_exists($date, $data_prepared[$group]['prices'])) {
                             $data_prepared[$group]['prices'][$date] = array();
                         }
                         $currency_symbol = Ranking_model::getCurrencySymbol($product->currency);
                         $product->currency_symbol = $currency_symbol;
                         if (!empty($currency_symbol)) {
                             $product->price_formatted = $currency_symbol . $product->price;
                         } else {
                             $product->price_formatted = '';
                         }
                         if (!array_key_exists($product->site, $data_prepared[$group]['prices'][$date])) {
                             if (!empty($variants[$product->product_id])) {
                                 $product->variants = $variants[$product->product_id];
                             }
                             $data_prepared[$group]['prices'][$date][$product->site] = $product;
                         }
                         $associatedProducts = $this->ranking_model->getAssociatedProducts($product);
                         if (!empty($associatedProducts)) {
                             foreach ($associatedProducts as &$assProduct) {
                                 if (!empty($variants[$assProduct->product_id])) {
                                     $assProduct->variants = $variants[$assProduct->product_id];
                                 }
                             }
                             $data_prepared[$group]['prices'][$date] = array_merge($data_prepared[$group]['prices'][$date], $associatedProducts);
                         }
                     }
                 }
             }
         }
         $pager = $this->getPager(count($data_prepared), 15);
         $products = array_slice($data_prepared, $pager['offset'], $pager['length']);
         if ($includeUnmached == 'true') {
             $sites_list = $this->sites_model->getSitesByIds($site_id);
             foreach ($sites_list as &$s_obj) {
                 $s_obj->site_logo = Ranking_model::getSiteLogoByName($s_obj->name);
             }
             $responseTemplate = $this->load->view('assess/scorecard/content/report-templates/ComPr.php', array('sites_list' => $sites_list, 'dates_of_upload' => $date_of_upload, 'sort_dir' => $sort_dir, 'sort_by' => $sort_by, 'sort_by_num' => $sort_by_num, 'data' => $products, 'sites_products_count' => $sites_count, 'site' => $site_id), true);
             $data['table'] = utf8_encode($responseTemplate);
         } else {
             if ($products) {
                 $sites_list = $this->sites_model->getSitesByIds($site_id);
                 foreach ($sites_list as &$s_obj) {
                     $s_obj->site_logo = Ranking_model::getSiteLogoByName($s_obj->name);
                 }
                 $responseTemplate = $this->load->view('assess/scorecard/content/report-templates/ComparPr.php', array('sites_list' => $sites_list, 'dates_of_upload' => $date_of_upload, 'sort_dir' => $sort_dir, 'sort_by' => $sort_by, 'sort_by_num' => $sort_by_num, 'data' => $products, 'sites_products_count' => $sites_count, 'site' => $site_id), true);
                 $data['table'] = utf8_encode($responseTemplate);
             } else {
                 $data['table'] = $this->load->view('assess/scorecard/content/report-templates/prod_association_req', array(), true);
             }
         }
         $data['pager'] = $this->load->view('elements/pager', array('pager' => $pager), true);
         $data['total_results'] = count($products);
         $data['uniqueListOfProducts'] = $uniqueListOfProducts;
     }
     $this->jsonResponse($data);
 }