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; }
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;"> </div></div></td>'; }else{ $res .= '<td class="" ><div class="indicator-div"><div class="indicator-div-left" style="width: ' .$percent_width . 'px;"> </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;"> </div><div class="indicator-div-right" style="width: ' . (140 - $percent_width) . 'px;"> </div><div class="indicator-text">' . $percent . '%</div></div></td>'; } else { $res .= '<td><div class="indicator-div"><div class="indicator-div-right" style="width:140px;"> </div><div class="indicator-text">0%</div></div></td>'; } } else { $res .= '<td><div class="indicator-div"><div class="indicator-div-right" style="width:140px;"> </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; }
/** * 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('& ', '& ', $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); }