Таблицы статистики по сайтам и регионам, формат данных, логика рендера

parent e846e1a5
......@@ -13,6 +13,45 @@
min-height: 300px;
text-align: center;
}
.switch-data
{
margin-bottom: 20px;
padding-bottom: 10px;
line-height: 30px;
border-bottom: 1px solid #BCE8F1;
}
.switch-item
{
padding: 5px;
border: 1px solid #2E6DA4;
color: #2E6DA4;
border-radius: 4px;
cursor: pointer;
}
.switch-item:hover
{
color: #FFFFFF;
background-color: #2E6DA4;
}
.switch-item.selected
{
color: #FFFFFF;
background-color: #2E6DA4;
}
.form-group-data
{
display: none;
}
.form-group-data.selected
{
display: block;
}
.form-group .form-control
{
......@@ -236,13 +275,19 @@ table.campaign-banners tbody tr td {
textarea#campaign-stat,
textarea#campaign-stat-total,
textarea#campaign-stat-cats
textarea#campaign-stat-cats,
textarea#campaign-sites-stat,
textarea#campaign-regions-stat,
textarea#regions-codes,
textarea#cities-codes
{
display: none;
}
.chart-graph-stat-info,
.chart-graph-stat-error
.chart-graph-stat-error,
.sites-stats-error,
.regions-stats-error
{
display: none;
padding-top: 160px;
......@@ -259,7 +304,7 @@ textarea#campaign-stat-cats
/*
#table-stat
*/
.b-table_wrapp.report
.b-table_wrapp
{
display: none;
margin-top: 30px;
......@@ -313,4 +358,63 @@ textarea#campaign-stat-cats
font-weight: bold;
}
\ No newline at end of file
.table.table-by-cats span.group
{
display: inline-block;
min-width: 12px;
color: #697075;
cursor: pointer;
}
.table.table-by-cats span.group b.open
{
display: none;
}
.table.table-by-cats span.group.open b.closed
{
display: none;
}
.table.table-by-cats span.group.open b.open
{
display: inline;
}
.table.table-by-cats tr.subcat
{
display: none;
}
.table.table-by-cats tr.subcat.open
{
display: table-row;
}
.table.table-by-cats td.subcat-title
{
padding-left: 30px;
}
.table.table-by-cats
{
white-space: nowrap;
}
.table.table-by-cats th:not(.period)
{
width: 1px;
}
.table.table-by-cats th.zone-size
{
width: 90px;
}
.table.table-by-cats td.stat
{
font-family: monospace;
text-align: right;
}
\ No newline at end of file
......@@ -3,6 +3,20 @@ $(document).ready(function () {
/* Стр. кампании пользователя */
// Переключение данных вкладок для отображения
$('.switch-item').on('click', function(){
var
$this = $(this),
type = $this.data('type'),
classSelected = 'selected';
$('.switch-item').removeClass(classSelected);
$this.addClass(classSelected);
$('.form-group-data').removeClass(classSelected);
$('.form-group-data[data-type="' + type + '"]').addClass(classSelected);
});
// Превьюшки:
(function(){
......@@ -74,9 +88,8 @@ $(document).ready(function () {
$statError = $('.chart-graph-stat-error', $statWrap),
selectorStatChart = '#chart-graph-stat',
$statChart = $(selectorStatChart, $statWrap),
$statTableWrap = $('.b-table_wrapp.report', $statWrap),
$tableStat = $('#table-line', $statTableWrap),
targetActionValue = $('input[name=target_action]:checked').val(),
$statTableWrap = $('.b-table_wrapp', $statWrap),
$tableCommonStat = $('#table-line-common', $statTableWrap),
chart,
activeLine,
activeLines,
......@@ -84,11 +97,46 @@ $(document).ready(function () {
currencyFields = ['money'],
dateTimeFields = ['period'],
$table = $('#table-line'),
$tableContent = $('<tbody>'),
$tableBody = $table.find('tbody').first();
$tableCommonBody = $tableCommonStat.find('tbody').first(),
nowDate = new Date(),
$dateFrom = $('.campaign-date-begin'),
$dateTo = $('.campaign-date-end'),
datepicker1 = $dateFrom.datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(fd, d, picker) {
},
}).data('datepicker'),
datepicker2 = $dateTo.datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(fd, d, picker) {
},
}).data('datepicker'),
dataSitesStat,
$statSitesWrap = $('.form-group-data.stat-sites'),
$statSitesError = $('.sites-stats-error', $statSitesWrap),
$statSitesTableWrap = $('.b-table_wrapp', $statSitesWrap),
$tableSites = $('#table-line-sites'),
$tableSitesBody = $tableSites.find('tbody').first(),
dataRegionsStat,
$statRegionsWrap = $('.form-group-data.stat-regions'),
$statRegionsError = $('.regions-stats-error', $statRegionsWrap),
$statRegionsTableWrap = $('.b-table_wrapp', $statRegionsWrap),
$tableRegions = $('#table-line-regions'),
$tableRegionsBody = $tableRegions.find('tbody').first(),
codeRegions, codeCities,
regionName, cityName;
// Добавление впереди 0 у однозначных значений
function pad(number) {
var r = String(number);
......@@ -131,7 +179,6 @@ $(document).ready(function () {
return format(value);
}
function valueFormatTable(value, currentActiveLine)
{
......@@ -157,8 +204,34 @@ $(document).ready(function () {
ShowError();
}
console.log('AAA dataStat = ', dataStat);
console.log('AAA dataStatTotal = ', dataStatTotal);
// Получение данных для статистики по сайтам:
if ($('#campaign-sites-stat').val()) {
dataSitesStat = JSON.parse($('#campaign-sites-stat').val());
} else {
ShowSitesStatError();
}
// Получение данных для статистики по регионам:
if ($('#campaign-regions-stat').val()) {
dataRegionsStat = JSON.parse($('#campaign-regions-stat').val());
} else {
ShowRegionsStatError();
}
// Получение конфигов-кодов регионов и городов:
if ($('#regions-codes').val()) {
codeRegions = JSON.parse($('#regions-codes').val());
}
if ($('#cities-codes').val()) {
codeCities = JSON.parse($('#cities-codes').val());
}
//console.log('AAA dataStat = ', dataStat);
//console.log('AAA dataStatTotal = ', dataStatTotal);
//console.log('AAA dataSitesStat = ', dataSitesStat);
//console.log('AAA dataRegionsStat = ', dataRegionsStat);
//console.log('AAA codeRegions = ', codeRegions);
//console.log('AAA codeCities = ', codeCities);
function ShowInfo()
{
......@@ -176,9 +249,21 @@ $(document).ready(function () {
$statTableWrap.hide();
}
function ShowSitesStatError()
{
$statSitesError.show();
$statSitesTableWrap.hide();
}
function ShowRegionsStatError()
{
$statRegionsError.show();
$statRegionsTableWrap.hide();
}
function getCheckedCategories() {
var listCats = [];
$('thead th input[type="checkbox"]', $tableStat).each(function(){
$('thead th input[type="checkbox"]', $tableCommonStat).each(function(){
if ($(this).is(":checked")) {
listCats.push($(this).data('field'));
}
......@@ -186,7 +271,7 @@ $(document).ready(function () {
return listCats;
}
function renderChart() {
function renderCommonChart() {
var
dataPeriod = dataStat['period'],
......@@ -284,13 +369,13 @@ $(document).ready(function () {
};
function renderTable() {
function renderCommonTable() {
var
dataTable = dataStat,
dataPeriod = dataStat['period'],
dataTableForSort = [],
$selectedField = $('thead th b.selected', $table),
$selectedField = $('thead th b.selected', $tableCommonStat),
$row,
sortField = false,
isDesc = true;
......@@ -348,36 +433,178 @@ $(document).ready(function () {
});
$row.appendTo($tableContent);
$tableBody.html('').append($tableContent.children());
$tableCommonBody.html('').append($tableContent.children());
$statTableWrap.show();
};
function renderSitesTable() {
var
dataTable = dataSitesStat,
dataTableForSort = [],
$selectedField = $('thead th b.selected', $tableSites),
$tableContent = $('<tbody>'),
$row,
sortField = false,
isDesc = true;
// Определение поля для сортировки строк в таблице:
if ($selectedField.length > 0) {
sortField = $selectedField.attr('id');
isDesc = $selectedField.hasClass('desc');
}
if (!sortField) {
sortField = 'money';
isDesc = true;
}
//console.log('AAA sortField = ', sortField, ' isDesc = ', isDesc);
// Подготовка данных для сортировки:
for (var site in dataTable) {
var dataTableSortItem = dataTable[site];
dataTableSortItem['site'] = site;
dataTableForSort.push(dataTableSortItem);
}
// Сортировка данных для таблицы:
dataTableForSort.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
}
});
//console.log('AAA dataTableForSort = ', dataTableForSort);
// Отрисовка таблицы:
dataTableForSort.forEach(function(item){
$row = $('<tr data-id="' + item['site'] + '">');
if (item['sub']) {
$row.append($('<td>').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + item['site']));
} else {
$row.append($('<td>').html(item['site']));
}
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item[line], line)));
});
$row.append($('<td>'));
$row.appendTo($tableContent);
if (item['sub']) {
for (var zone in item['sub']) {
$row = $('<tr class="subcat" data-parent="' + item['site'] + '">');
$row.append($('<td class="subcat-title">').html(item['site'] + '[' + zone % 100 + ']'));
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item['sub'][zone][line], line)));
});
$row.append($('<td class="stat">').html('300x600'));
$row.appendTo($tableContent);
}
}
});
$tableSitesBody.html('').append($tableContent.children());
$statSitesTableWrap.show();
}
/*
switch(targetActionValue) {
case 'load':
activeLine = 'views';
break;
case 'view':
activeLine = 'views';
break;
case 'click':
activeLine = 'clicks';
break;
function renderRegionsTable() {
var
dataTable = dataRegionsStat,
dataTableForSort = [],
$selectedField = $('thead th b.selected', $tableRegions),
$tableContent = $('<tbody>'),
$row,
sortField = false,
isDesc = true;
// Определение поля для сортировки строк в таблице:
if ($selectedField.length > 0) {
sortField = $selectedField.attr('id');
isDesc = $selectedField.hasClass('desc');
}
if (!sortField) {
sortField = 'money';
isDesc = true;
}
//console.log('AAA sortField = ', sortField, ' isDesc = ', isDesc);
// Подготовка данных для сортировки:
for (var region in dataTable) {
var dataTableSortItem = dataTable[region];
dataTableSortItem['region'] = region;
dataTableForSort.push(dataTableSortItem);
}
// Сортировка данных для таблицы:
dataTableForSort.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
}
});
//console.log('AAA dataTableForSort = ', dataTableForSort);
// Отрисовка таблицы:
dataTableForSort.forEach(function(item){
regionName = (codeRegions[item['region']]) ? codeRegions[item['region']] : item['region'];
$row = $('<tr data-id="' + item['region'] + '">');
if (item['sub']) {
$row.append($('<td>').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + regionName));
} else {
$row.append($('<td>').html(regionName));
}
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item[line], line)));
});
$row.appendTo($tableContent);
if (item['sub']) {
for (var city in item['sub']) {
cityName = (codeCities[city]) ? codeCities[city] : city;
$row = $('<tr class="subcat" data-parent="' + item['region'] + '">');
$row.append($('<td class="subcat-title">').html(cityName));
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item['sub'][city][line], line)));
});
$row.appendTo($tableContent);
}
}
});
$tableRegionsBody.html('').append($tableContent.children());
$statRegionsTableWrap.show();
}
*/
activeLine = 'views';
activeLines = JSON.parse($('#campaign-stat-cats').val());
activeLinesId = Object.keys(activeLines);
// Общая статистика
if (dataStat) {
// Отрисовка графика и таблицы по стартовым данным:
if (dataStat.status == 'Error') {
ShowError();
} else {
renderChart();
renderTable();
renderCommonChart();
renderCommonTable();
}
} else {
ShowInfo();
......@@ -385,10 +612,56 @@ $(document).ready(function () {
$statTableWrap.hide();
}
// Статистика по сайтам
if (dataSitesStat) {
// Отрисовка таблицы по стартовым данным:
if (dataSitesStat.status == 'Error') {
ShowSitesStatError();
} else {
renderSitesTable();
}
} else {
ShowSitesStatError();
}
// Статистика по регионам
if (dataRegionsStat) {
// Отрисовка таблицы по стартовым данным:
if (dataRegionsStat.status == 'Error') {
ShowRegionsStatError();
} else {
renderRegionsTable();
}
} else {
ShowRegionsStatError();
}
// Клик на checkbox в названии поля таблицы:
var $tableHeadColsChecks = $('thead th input[type="checkbox"]', $tableStat);
var $tableHeadColsChecks = $('thead th input[type="checkbox"]', $tableCommonStat);
$tableHeadColsChecks.on('change', function(){
renderChart();
renderCommonChart();
});
// Свернуть-развернуть дочерние ячейки в таблице:
$('table.table-striped').on('click', 'span.group', function(e) {
var
$this = $(this),
$tableBody = $('tbody', $this.parents('table')),
$wrap = $this.parents('tr').eq(0),
id = $wrap.data('id'),
isOpen,
$subcats = $('tr.subcat[data-parent="'+ id + '"]', $tableBody);
$this.toggleClass('open');
isOpen = $this.hasClass('open');
if (isOpen) {
$subcats.addClass('open');
} else {
$subcats.removeClass('open');
}
});
......
......@@ -154,6 +154,7 @@ class CabinetAmSystem extends Common
$stats = $this->container->get(\App\Model\Statistics::class);
$date_begin = $campaign->getDateBegin();
$date_end = $campaign->getDateEnd() ? : date("Y-m-d");
// последние 90 дней, если кампания долго идет
$dates = [$date_begin, $date_end];
$campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates);
$campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null);
......@@ -194,12 +195,18 @@ class CabinetAmSystem extends Common
}
$sites_stats = $stats->getCampaignsSitesStat((int)$campaign_id, $campaign->getTargetAction(), $dates);
$regions_stats = $stats->getCampaignsRegionsStat((int)$campaign_id, $campaign->getTargetAction(), $dates);
$data['campaign'] = $campaign;
$data['countries'] = $countries;
$data['regions'] = $regions;
$data['cities'] = $cities;
$data['banners'] = $banners;
$data['banners_stats'] = $banners_stats;
$data['sites_stats'] = $sites_stats;
$data['regions_stats'] = $regions_stats;
$data['campaign_stat'] = $campaign_stat;
$data['campaign_stat_total'] = $campaign_stat_total;
$data['campaign_stat_cats'] = self::CAMPAIGN_STAT_CATS;
......
......@@ -345,7 +345,7 @@ class Statistics
return $stats;
}
// Данные по статистике для кампании (баннеры)
// Данные для статистики по кампании (баннеры)
public function getCampaignsStat($id_list, $taget_action, $dates)
{
$dataRequest = array(
......@@ -462,9 +462,8 @@ class Statistics
return $dataStats;
}
// Данные по статистике для баннеров
// Данные для статистики по баннерам
public function getBannersStat($banners_id_list, $dates)
{
$dataRequest = array(
......@@ -488,6 +487,131 @@ class Statistics
return $stats;
}
// Данные для статистики кампании по сайтам
public function getCampaignsSitesStat($id, $taget_action, $dates)
{
$dataRequest = array(
'method' => 'camp_zone',
'data' => array(
'id' => $id,
'start_date' => $dates[0],
'end_date' => $dates[1]
)
);
//return $dataRequest;
try {
$stats = $this->apiRequest($dataRequest);
} catch (\Exception $e) {
$stats['status'] = 'Error';
return $stats;
}
//return $stats;
if ($stats) {
// Добавляем спец. поля
$AddSpecialFields = function(&$stats)
{
if ($taget_action == 'load') {
$stats['views'] = $stats['loads'];
$stats['reach'] = $stats['reach_load'];
} else {
$stats['reach'] = $stats['reach_view'];
}
unset($stats['loads']);
unset($stats['reach_load']);
unset($stats['reach_view']);
$views = $stats['views'];
$money = $stats['money'];
$clicks = $stats['clicks'];
$stats['ctr'] = ($views != 0) ? round(($clicks/$views)*100, 2) : 0;
$stats['cpm'] = ($views != 0) ? round(($money/$views)*1000, 3) : 0;
$stats['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$stats['money'] = round($stats['money'], 2);
};
foreach ($stats as $site => $stat) {
$AddSpecialFields($stats[$site]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$site]['sub'][$sub]);
}
}
}
$dataStats = $stats;
}
return $dataStats;
}
// Данные для статистики кампании по регионам
public function getCampaignsRegionsStat($id, $taget_action, $dates)
{
$dataRequest = array(
'method' => 'camp_geo',
'data' => array(
'id' => $id,
'start_date' => $dates[0],
'end_date' => $dates[1]
)
);
//return $dataRequest;
try {
$stats = $this->apiRequest($dataRequest);
} catch (\Exception $e) {
$stats['status'] = 'Error';
return $stats;
}
//return $stats;
if ($stats) {
// Добавляем спец. поля
$AddSpecialFields = function(&$stats)
{
if ($taget_action == 'load') {
$stats['views'] = $stats['loads'];
$stats['reach'] = $stats['reach_load'];
} else {
$stats['reach'] = $stats['reach_view'];
}
unset($stats['loads']);
unset($stats['reach_load']);
unset($stats['reach_view']);
$views = $stats['views'];
$money = $stats['money'];
$clicks = $stats['clicks'];
$stats['ctr'] = ($views != 0) ? round(($clicks/$views)*100, 2) : 0;
$stats['cpm'] = ($views != 0) ? round(($money/$views)*1000, 3) : 0;
$stats['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$stats['money'] = round($stats['money'], 2);
};
foreach ($stats as $region => $stat) {
$AddSpecialFields($stats[$region]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$region]['sub'][$sub]);
}
}
}
$dataStats = $stats;
}
return $dataStats;
}
// Запрос к API:
......
......@@ -29,15 +29,13 @@
$this->headScript()
->appendFile('/js/c3.min.js')
->appendFile('/js/d3.min.js')
//->appendFile('/js/script-feeds-stat-charts.js')
//->appendFile('/js/script-feeds-stat-table.js')
//->appendFile('/js/script-feeds-stat.js')
->appendFile('/js/datepicker.min.js')
->appendFile('/js/adm/amsystem-campaign.js')
;
$this->headLink()
->appendStylesheet('/css/c3.css')
->appendStylesheet('/css/datepicker.min.css')
->appendStylesheet('/css/styles-amsystem.css')
;
......@@ -72,10 +70,28 @@ if (!$error) {
$banners_stats = $this->banners_stats;
$img_domain = $this->img_domain;
$sites_stats = $this->sites_stats;
$regions_stats = $this->regions_stats;
$campaign_stat = $this->campaign_stat;
$campaign_stat_total = $this->campaign_stat_total;
$campaign_stat_cats = $this->campaign_stat_cats;
$code_regions = [];
foreach ($regions as $region_item) {
foreach ($region_item['codes'] as $code) {
$code_regions[$code] = str_replace(' область', '', $region_item['name']);
}
}
$code_cities = [];
foreach ($cities as $city_item) {
foreach ($city_item['codes'] as $code) {
$code_cities[$code] = str_replace(' область', '', $city_item['name']);
}
}
$target_class = ($campaign_target_action == 'load') ? 'load-target' : '';
$link_campaigns_list = $this->url('user.cabinet.amsystem', ['lang' => $lang]);
......@@ -108,179 +124,187 @@ if (!$error) {
<div class="panel-body">
<fieldset disabled="disabled">
<!-- Активность и Название -->
<div class="form-group title">
<input type="checkbox" id="campaign-active" name="campaign-active" <?php if ($campaign_active): ?>checked<?php endif; ?>>
<label class="campaign-title"><?= $campaign_title ?></label>
</div>
<!-- Даты проведения -->
<div class="form-group">
<label for="campaign-date-begin"><?= _t('Даты проведения')?></label>
c:
<input type='text' id="campaign-date-begin" class="form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<!-- Ссылка -->
<div class="form-group url">
<label for="campaign-url"><?= _t('Ссылка')?></label>
<div class="value-show">
<?= $campaign_url ?>
</div>
</div>
<div class="switch-data">
<span class="switch-item selected" data-type="settings">Настройки кампании</span>
<span class="switch-item" data-type="stat-common">Общая статистика</span>
<span class="switch-item" data-type="stat-sites">По сайтам</span>
<span class="switch-item" data-type="stat-regions">По регионам</span>
</div>
<div class="b-left">
<!-- Настройки кампании -->
<div class="form-group-data selected" data-type="settings">
<fieldset disabled="disabled">
<!-- Тип кампании -->
<div class="form-group">
<label><?= _t('Тип кампании')?></label>
<input type="radio" id="campaign-buy-type-auction" name="buy_type" value="auction" <?php if ($campaign_buy_type == 'auction'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-buy-type-auction">Аукцион</label>
<input type="radio" id="campaign-buy-type-garantee" name="buy_type" value="garantee" <?php if ($campaign_buy_type == 'garantee'): ?>checked<?php endif; ?> disabled>
<label class="select-item disabled" for="campaign-buy-type-garantee">Гарантия</label>
<!-- Активность и Название -->
<div class="form-group title">
<input type="checkbox" id="campaign-active" name="campaign-active" <?php if ($campaign_active): ?>checked<?php endif; ?>>
<label class="campaign-title"><?= $campaign_title ?></label>
</div>
<!-- Целевое действие -->
<!-- Даты проведения -->
<div class="form-group">
<label><?= _t('Целевое действие')?></label>
<input type="radio" id="campaign-view-load" name="target_action" value="load" <?php if ($campaign_target_action == 'load'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-load">Показ</label>
<input type="radio" id="campaign-view-view" name="target_action" value="view" <?php if ($campaign_target_action == 'view'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-view">Реальный показ</label>
<input type="radio" id="campaign-view-click" name="target_action" value="click" <?php if ($campaign_target_action == 'click'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-click">Клик</label>
<label for="campaign-date-begin"><?= _t('Даты проведения')?></label>
c:
<input type='text' id="campaign-date-begin" class="form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<!-- Стоимость -->
<div class="form-group">
<?php
switch ($campaign_target_action) {
case 'load': $title_mark = '1000 показов'; break;
case 'view': $title_mark = '1000 реальных показов'; break;
case 'click': $title_mark = 'клик'; break;
}
?>
<label for="campaign-price"><?= _t('Стоимость')?></label>
<input type="number" min="0" step="0.1" id="campaign-price" class="form-control price" name="price" value="<?= $campaign_price ?>" />
грн. за <span class="price-title-mark"><?= $title_mark ?></span>
<!-- Ссылка -->
<div class="form-group url">
<label for="campaign-url"><?= _t('Ссылка')?></label>
<div class="value-show">
<?= $campaign_url ?>
</div>
</div>
<!-- Ограничения на посетителя -->
<div class="form-group campaign-visitor-limit__wrap">
<label><?= _t('Ограничения на посетителя')?></label><br />
<div class="value-show">
<?php
<div class="b-left">
function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
$format = $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
return sprintf($format, $number);
}
<!-- Тип кампании -->
<div class="form-group">
<label><?= _t('Тип кампании')?></label>
<input type="radio" id="campaign-buy-type-auction" name="buy_type" value="auction" <?php if ($campaign_buy_type == 'auction'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-buy-type-auction">Аукцион</label>
<input type="radio" id="campaign-buy-type-garantee" name="buy_type" value="garantee" <?php if ($campaign_buy_type == 'garantee'): ?>checked<?php endif; ?> disabled>
<label class="select-item disabled" for="campaign-buy-type-garantee">Гарантия</label>
</div>
foreach ($campaign_visitor_limit as $action => $data) {
if ($action == 'view') $titles = ['показ', 'показа', 'показов'];
if ($action == 'click') $titles = ['клик', 'клика', 'кликов'];
<!-- Целевое действие -->
<div class="form-group">
<label><?= _t('Целевое действие')?></label>
<input type="radio" id="campaign-view-load" name="target_action" value="load" <?php if ($campaign_target_action == 'load'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-load">Показ</label>
<input type="radio" id="campaign-view-view" name="target_action" value="view" <?php if ($campaign_target_action == 'view'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-view">Реальный показ</label>
<input type="radio" id="campaign-view-click" name="target_action" value="click" <?php if ($campaign_target_action == 'click'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-click">Клик</label>
</div>
foreach ($data as $period => $value) {
switch ($period) {
case 'page': $title_mark = 'на странице'; break;
case 'hour': $title_mark = 'в час'; break;
case 'day': $title_mark = 'в сутки'; break;
case 'week': $title_mark = 'в неделю'; break;
case 'month': $title_mark = 'в месяц'; break;
}
if ($value) {
?>
<span><b><?= $value ?></b> <i><?= declOfNum($value, $titles) ?></i> <?= $title_mark ?></span><br />
<!-- Стоимость -->
<div class="form-group">
<?php
} } }
switch ($campaign_target_action) {
case 'load': $title_mark = '1000 показов'; break;
case 'view': $title_mark = '1000 реальных показов'; break;
case 'click': $title_mark = 'клик'; break;
}
?>
<label for="campaign-price"><?= _t('Стоимость')?></label>
<input type="number" min="0" step="0.1" id="campaign-price" class="form-control price" name="price" value="<?= $campaign_price ?>" />
грн. за <span class="price-title-mark"><?= $title_mark ?></span>
</div>
</div>
<!-- Бюджет -->
<div class="form-group campaign-money-limit">
<label><?= _t('Бюджет')?></label><br />
<div class="value-show">
<?php
foreach ($campaign_money_limit as $period => $value) {
switch ($period) {
case 'total': $title_mark = 'грн. всего'; break;
case 'day': $title_mark = 'грн. в сутки'; break;
case 'week': $title_mark = 'грн. в неделю'; break;
case 'month': $title_mark = 'грн. в месяц'; break;
<!-- Ограничения на посетителя -->
<div class="form-group campaign-visitor-limit__wrap">
<label><?= _t('Ограничения на посетителя')?></label><br />
<div class="value-show">
<?php
function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
$format = $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
return sprintf($format, $number);
}
if ($value) {
?>
<span><b><?= $value ?></b> <?= $title_mark ?></span><br />
<?php
} }
?>
foreach ($campaign_visitor_limit as $action => $data) {
if ($action == 'view') $titles = ['показ', 'показа', 'показов'];
if ($action == 'click') $titles = ['клик', 'клика', 'кликов'];
foreach ($data as $period => $value) {
switch ($period) {
case 'page': $title_mark = 'на странице'; break;
case 'hour': $title_mark = 'в час'; break;
case 'day': $title_mark = 'в сутки'; break;
case 'week': $title_mark = 'в неделю'; break;
case 'month': $title_mark = 'в месяц'; break;
}
if ($value) {
?>
<span><b><?= $value ?></b> <i><?= declOfNum($value, $titles) ?></i> <?= $title_mark ?></span><br />
<?php
} } }
?>
</div>
</div>
</div>
<!-- Скорость открута -->
<div class="form-group">
<label><?= _t('Скорость открута')?></label>
<input type="radio" id="campaign-max-speed-true" name="max_speed" value="1" <?php if ($campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-true">Максимальная</label>
<input type="radio" id="campaign-max-speed-false" name="max_speed" value="0" <?php if (!$campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-false">Равномерная</label>
</div>
<!-- Бюджет -->
<div class="form-group campaign-money-limit">
<label><?= _t('Бюджет')?></label><br />
<div class="value-show">
<?php
<!-- Гео -->
<div class="form-group geo">
<label><?= _t('Гео (таргетинг)')?></label>
<div class="value-show">
<?php if ($campaign_geo): ?>
<?php if ($campaign_geo['country']): ?>
<?php
$title_values = $countries[$campaign_geo['country']['values'][0]];
if ($campaign_geo['special']) {
$title_special = '<b>(исключить неподконтрольные территории)</b>';
}
?>
<span><?= 'Страна' ?>: <b><?= $title_values ?></b> <?= $title_special ?></span><br />
<?php endif; ?>
<?php if ($campaign_geo['region']['values']): ?>
<?php
$title_mark = ($campaign_geo['region']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['region']['values'] as $code) {
$title_values[] = str_replace(' область', '', $regions[$code]['name']);
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Области' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php if ($campaign_geo['city']['values']): ?>
<?php
$title_mark = ($campaign_geo['city']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['city']['values'] as $code) {
$title_values[] = $cities[$code]['name'];
foreach ($campaign_money_limit as $period => $value) {
switch ($period) {
case 'total': $title_mark = 'грн. всего'; break;
case 'day': $title_mark = 'грн. в сутки'; break;
case 'week': $title_mark = 'грн. в неделю'; break;
case 'month': $title_mark = 'грн. в месяц'; break;
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Города' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
if ($value) {
?>
<span><b><?= $value ?></b> <?= $title_mark ?></span><br />
<?php
} }
?>
</div>
</div>
<!-- Скорость открута -->
<div class="form-group">
<label><?= _t('Скорость открута')?></label>
<input type="radio" id="campaign-max-speed-true" name="max_speed" value="1" <?php if ($campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-true">Максимальная</label>
<input type="radio" id="campaign-max-speed-false" name="max_speed" value="0" <?php if (!$campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-false">Равномерная</label>
</div>
<!-- Гео -->
<div class="form-group geo">
<?php if ($campaign_geo): ?>
<label><?= _t('Гео (таргетинг)')?></label>
<div class="value-show">
<?php if ($campaign_geo['country']): ?>
<?php
$title_values = $countries[$campaign_geo['country']['values'][0]];
if ($campaign_geo['special']) {
$title_special = '<b>(исключить неподконтрольные территории)</b>';
}
?>
<span><?= 'Страна' ?>: <b><?= $title_values ?></b> <?= $title_special ?></span><br />
<?php endif; ?>
<?php if ($campaign_geo['region']['values']): ?>
<?php
$title_mark = ($campaign_geo['region']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['region']['values'] as $code) {
$title_values[] = str_replace(' область', '', $regions[$code]['name']);
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Области' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php if ($campaign_geo['city']['values']): ?>
<?php
$title_mark = ($campaign_geo['city']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['city']['values'] as $code) {
$title_values[] = $cities[$code]['name'];
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Города' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
</div>
<?php endif; ?>
</div>
</div>
<!-- Трекинг -->
<div class="form-group tracking_pixels">
<label><?= _t('Трекинг')?></label>
<div class="value-show">
<?php
if ($campaign_tracking_pixels) {
<!-- Трекинг -->
<div class="form-group tracking_pixels">
<?php if ($campaign_tracking_pixels): ?>
<label><?= _t('Трекинг')?></label>
<div class="value-show">
<?php
foreach ($campaign_tracking_pixels as $item => $values) {
switch ($item) {
case 'load': $title_mark = 'Показ'; break;
......@@ -288,111 +312,210 @@ if (!$error) {
case 'click': $title_mark = 'Клик'; break;
}
if ($values) {
?>
?>
<div><?= $title_mark ?></div>
<?php
<?php
foreach ($values as $value_item) {
?>
?>
<div class="url"><?= $value_item ?></div>
<?php
} } } }
?>
<?php
} } }
?>
</div>
<?php endif; ?>
</div>
</div>
</div>
<div class="b-right">
<!-- Баннеры -->
<div class="form-group banners">
<label><?= _t('Баннеры')?></label>
<div>
<table class="table table-striped campaign-banners">
<thead>
<tr>
<th></th>
<th><span class="sort">Размер</span></th>
<th><span class="sort">Превью</span></th>
<th><span class="sort">Показы</span></th>
<th><span class="sort">Клики</span></th>
<th><span class="sort">CTR</span></th>
<th><span class="sort">Расход, грн.</span></th>
<th><span class="sort">eCPM</span></th>
<th><span class="sort">eCPC</span></th>
</tr>
</thead>
<tbody>
<?php if($banners): ?>
<?php foreach($banners as $banner): ?>
<?php $stat = $banners_stats[$banner['id']]; ?>
<tr data-id="<?= $banner['id'] ?>">
<td class="check"><input type="checkbox" <?php if ((bool)$banner['active']): ?>checked<?php endif; ?>></td>
<td class="stat"><span class="banner-size"><?= $banner['width'] ?>x<?= $banner['height'] ?></span></td>
<td class="stat"><span class="banner-preview" src="<?= $img_domain ?><?= $banner['img'] ?>" style="background-image: url(<?= $img_domain ?><?= $banner['img'] ?>)"></span></td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['money'] ?></td>
<td class="stat"><?= $stat['cpm'] ?></td>
<td class="stat"><?= $stat['cpc'] ?></td>
</tr>
<?php endforeach ?>
<?php endif ?>
</tbody>
</table>
</div>
</div>
<div class="b-right">
<!-- Баннеры -->
<div class="form-group banners">
<label><?= _t('Баннеры')?></label>
<div>
<table class="table table-striped campaign-banners">
<thead>
<tr>
<th></th>
<th><span class="sort">Размер</span></th>
<th><span class="sort">Превью</span></th>
<th><span class="sort">Показы</span></th>
<th><span class="sort">Клики</span></th>
<th><span class="sort">CTR</span></th>
<th><span class="sort">Расход, грн.</span></th>
<th><span class="sort">eCPM</span></th>
<th><span class="sort">eCPC</span></th>
</tr>
</thead>
<tbody>
<?php if($banners): ?>
<?php foreach($banners as $banner): ?>
<?php $stat = $banners_stats[$banner['id']]; ?>
<tr data-id="<?= $banner['id'] ?>">
<td class="check"><input type="checkbox" <?php if ((bool)$banner['active']): ?>checked<?php endif; ?>></td>
<td class="stat"><span class="banner-size"><?= $banner['width'] ?>x<?= $banner['height'] ?></span></td>
<td class="stat"><span class="banner-preview" src="<?= $img_domain ?><?= $banner['img'] ?>" style="background-image: url(<?= $img_domain ?><?= $banner['img'] ?>)"></span></td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['money'] ?></td>
<td class="stat"><?= $stat['cpm'] ?></td>
<td class="stat"><?= $stat['cpc'] ?></td>
</tr>
<?php endforeach ?>
<?php endif ?>
</tbody>
</table>
</div>
</div>
</div>
</fieldset>
</fieldset>
</div>
<div class="campaign-stat">
<textarea id="campaign-stat"><?= ($campaign_stat ? json_encode($campaign_stat) : '')?></textarea>
<textarea id="campaign-stat-total"><?= ($campaign_stat_total ? json_encode($campaign_stat_total) : '')?></textarea>
<textarea id="campaign-stat-cats"><?= ($campaign_stat_cats ? json_encode($campaign_stat_cats) : '')?></textarea>
<!-- Общая статистика -->
<div class="form-group-data stat-common" data-type="stat-common">
<div class="campaign-stat">
<textarea id="campaign-stat"><?= ($campaign_stat ? json_encode($campaign_stat) : '')?></textarea>
<textarea id="campaign-stat-total"><?= ($campaign_stat_total ? json_encode($campaign_stat_total) : '')?></textarea>
<textarea id="campaign-stat-cats"><?= ($campaign_stat_cats ? json_encode($campaign_stat_cats) : '')?></textarea>
<!-- Дата -->
<div class="form-group">
<label for="campaign-date-begin"><?= _t('Дата')?></label>
c:
<input type='text' id="campaign-date-begin" class="campaign-date-begin form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="campaign-date-end form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<div class="chart-graph-stat-info">
<h2>По заданным параметрам статистика отсутствует</h2>
</div>
<div class="chart-graph-stat-error">
<h2>Ошибка в статистике</h2>
<div class="message"></div>
</div>
<!-- График -->
<div id="chart-graph-stat" data-colors=<?= ($colors_active_lines ? json_encode($colors_active_lines) : '')?>></div>
<!-- Таблица -->
<div id="table-stat" class="b-table_wrapp">
<table id="table-line-common" class="table table-striped">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
<b class="main-cat selected" data-cat="date">Дата</b>
</th>
<?php foreach($campaign_stat_cats as $name => $cat): ?>
<th class="<?= $name ?>" data-id="<?= $name ?>">
<span style="border-color: <?= $cat['color'] ?>;">
<input type="checkbox" data-field="<?= $name ?>" checked />
</span>
<b class="cat" id="<?= $name ?>"><?= $cat['title'] ?></b>
</th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="chart-graph-stat-info">
<h2>По заданным параметрам статистика отсутствует</h2>
</div>
<div class="chart-graph-stat-error">
<h2>Ошибка в статистике</h2>
<div class="message"></div>
</div>
<!-- По сайтам -->
<div class="form-group-data stat-sites" data-type="stat-sites">
<!-- Дата -->
<div class="form-group">
<label for="campaign-date-begin"><?= _t('Дата')?></label>
c:
<input type='text' id="campaign-date-begin" class="campaign-date-begin form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="campaign-date-end form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<!-- График -->
<div id="chart-graph-stat" data-colors=<?= ($colors_active_lines ? json_encode($colors_active_lines) : '')?>></div>
<!-- Таблица -->
<div id="table-stat" class="b-table_wrapp report">
<table id="table-line" class="table table-striped">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
<b class="main-cat selected" data-cat="date">Дата</b>
</th>
<?php foreach($campaign_stat_cats as $name => $cat): ?>
<th class="<?= $name ?>" data-id="<?= $name ?>">
<span style="border-color: <?= $cat['color'] ?>;">
<input type="checkbox" data-field="<?= $name ?>" checked />
</span>
<b class="cat" id="<?= $name ?>"><?= $cat['title'] ?></b>
</th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
</tbody>
</table>
<div class="sites-stats">
<textarea id="campaign-sites-stat"><?= ($sites_stats ? json_encode($sites_stats) : '')?></textarea>
<div class="sites-stats-error">
<h2>Ошибка в статистике</h2>
<div class="message"></div>
</div>
<div class="b-table_wrapp">
<table id="table-line-sites" class="table table-striped table-by-cats">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
<b class="main-cat selected" data-cat="date">Сайт</b>
</th>
<?php foreach($campaign_stat_cats as $name => $cat): ?>
<th class="<?= $name ?>" data-id="<?= $name ?>">
<b class="cat" id="<?= $name ?>"><?= $cat['title'] ?></b>
</th>
<?php endforeach; ?>
<th class="zone-size"></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<!-- По регионам -->
<div class="form-group-data stat-regions" data-type="stat-regions">
<!-- Дата -->
<div class="form-group">
<label for="campaign-date-begin"><?= _t('Дата')?></label>
c:
<input type='text' id="campaign-date-begin" class="campaign-date-begin form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="campaign-date-end form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<div class="regions-stats">
<textarea id="campaign-regions-stat"><?= ($regions_stats ? json_encode($regions_stats) : '')?></textarea>
<textarea id="regions-codes"><?= ($code_regions ? json_encode($code_regions) : '')?></textarea>
<textarea id="cities-codes"><?= ($code_cities ? json_encode($code_cities) : '')?></textarea>
<div class="regions-stats-error">
<h2>Ошибка в статистике</h2>
<div class="message"></div>
</div>
<div class="b-table_wrapp">
<table id="table-line-regions" class="table table-striped table-by-cats">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
<b class="main-cat selected" data-cat="date">Регион</b>
</th>
<?php foreach($campaign_stat_cats as $name => $cat): ?>
<th class="<?= $name ?>" data-id="<?= $name ?>">
<b class="cat" id="<?= $name ?>"><?= $cat['title'] ?></b>
</th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment