Обработка получения данных стат. за период с пустым результатом

parent b0b46f66
/* Таблица стилей к странице контактов */
.b-content__title {
padding: 85px 0 25px;
display: -webkit-flex;
display: flex;
height: 260px;
background-image: url('../img/bg-tittle-contact.jpg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.b-content__title .wrapp {
margin: auto;
height: auto;
}
.b-content__title h1 {
text-align: center;
color: #FFFFFF;
margin-bottom: 10px;
}
.b-content__title p.lead {
text-align: center;
color: #FFFFFF;
}
.b-content__form {
padding: 60px 0 90px;
}
.b-content__form .wrapp {
}
.b-content__form h2 {
color : #333333;
margin-bottom: 50px;
}
.b-content__form-our-contacts {
}
.b-content__form-our-contacts li {
position: relative;
padding-top: 0.35em;
padding-left: 50px;
margin-bottom: 35px;
}
.b-content__form-our-contacts li:last-child {
margin-bottom: 0px;
}
.b-content__form-our-contacts li:before {
position: absolute;
display: block;
content: '';
left: 0;
height: 1.5rem;
width: 1.5rem;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
border-radius: 50%;
}
.b-content__form-our-contacts li.tel:before {
background-image: url('../img/icon-telephone.svg');
}
.b-content__form-our-contacts li.email:before {
background-image: url('../img/icon-email.svg');
}
.b-content__form-our-contacts li.skype:before {
background-image: url('../img/icon-skype.svg');
}
.b-content__form-our-contacts li a {
font-family: 'AABebasNeue';
font-size: 1.7rem;
color: #333333;
}
.b-content__form-container {
position: relative;
}
.b-content__form-container form h2 {
margin-bottom: 20px;
}
.b-content__form-container .textarea,
.b-content__form-container form textarea {
font-weight: normal;
}
.message-sent .b-content__form-container form {
opacity: 0;
pointer-events: none;
}
.b-content__form-finish {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
height: 100%;
width: 100%;
display: none;
background: #FFFFFF;
}
.b-content__form-finish-inner {
margin-top: 2.5rem;
padding-top: 115px;
background-image: url('../img/bg-send-message.svg');
background-size: 100px 75px;
background-repeat: no-repeat;
background-position: center top;
}
.b-content__form-finish-inner h2 {
text-align: center;
font-size: 1.2rem;
margin-bottom: 10px;
color: #39B54A;
}
.b-content__form-finish-inner p {
text-align: center;
font-size: 1rem;
}
@media (max-width: 768px) {
.b-content__title {
height: auto;
}
.b-content__contact .input.input--akira {
width: 100%;
}
.b-content__contact input[type="submit"] {
width: 100%;
}
}
@media (max-width: 550px) {
.b-content__title {
padding: 100px 10px 50px;
}
.b-content__form {
padding: 30px 0 30px;
}
.b-content__form h2 {
text-align: center;
}
.b-content__form-container form {
margin-top: 50px;
}
span + input[type="submit"] {
margin-top: 20px;
}
}
\ No newline at end of file
$(document).ready(function () {
"use strict";
var
isLoadingStat = false,
$table = $('table.table-striped'),
$tableLoader = $('.table-data-loading'),
$pager = $('.b-pager'),
$pagerStep = $('.b-pager__step'),
$pagerInfo = $('.b-pager__info'),
$pagerItems = $('.b-pager__items'),
$tableWrap = $('.panel-body'),
$filtersItems = $('.b-filters__items'),
$filtersCurrent = $('.b-filters__current'),
$active = $('select.data-active', $tableWrap),
$period = $('select.data-period', $tableWrap),
$clicks = $('select.data-clicks', $filtersItems),
$orders = $('select.data-orders', $filtersItems),
$partner = $('select.data-partner', $filtersItems),
$cat = $('select.data-category', $filtersItems),
$subcat = $('select.data-subcategory', $filtersItems),
$geo = $('select.data-geo', $filtersItems),
$applyButton = $('button.btn.btn-primary.apply'),
$exportExcelButton = $("#btnExport"),
currentRequesData,
currentFiltersUrl,
currentSort,
currentAsc,
filtersNames = ['active', 'period', 'clicks', 'orders', 'cat', 'subcat', 'sort', 'asc', 'partner', 'geo'];
// Переключение состояния isLoadingStat
function EnableLoadingState(isLoading)
{
if (isLoading) {
$pager.addClass('state-loading');
$table.addClass('state-loading');
$exportExcelButton.hide();
$tableLoader.show();
} else {
$pager.removeClass('state-loading');
$table.removeClass('state-loading');
$exportExcelButton.show();
$tableLoader.hide();
}
}
// Устанавливаем данные фильтров:
function selectFiltersData(isLocationHash)
{
var
active = $active.val(),
period = $period.val(),
clicks = ($('select.data-clicks', $filtersCurrent).length>0) ? $('select.data-clicks', $filtersCurrent).val() : $clicks.val(),
orders = ($('select.data-orders', $filtersCurrent).length>0) ? $('select.data-orders', $filtersCurrent).val() : $orders.val(),
partner = ($('select.data-partner', $filtersCurrent).length>0) ? $('select.data-partner', $filtersCurrent).val() : $partner.val(),
cat = ($('select.data-category', $filtersCurrent).length>0) ? $('select.data-category', $filtersCurrent).val() : $cat.val(),
subcat = ($('select.data-subcategory', $filtersCurrent).length>0) ? $('select.data-subcategory', $filtersCurrent).val() : $subcat.val(),
geo = ($('select.data-geo', $filtersCurrent).length>0) ? $('select.data-geo', $filtersCurrent).val() : $geo.val(),
sort = currentSort,
asc = currentAsc,
filtersUrl = '',
getHashVars = !(isLocationHash !== undefined && !isLocationHash);
// Устанавливаем фильтры в url:
if (getHashVars) {
filtersUrl += (active) ? '&active=' + active : '';
filtersUrl += (period) ? '&period=' + period : '';
filtersUrl += (clicks) ? '&clicks=' + clicks : '';
filtersUrl += (orders) ? '&orders=' + orders : '';
filtersUrl += (partner) ? '&partner=' + partner : '';
filtersUrl += (cat) ? '&cat=' + cat : '';
filtersUrl += (subcat) ? '&subcat=' + subcat : '';
filtersUrl += (geo) ? '&geo=' + geo : '';
filtersUrl += (sort) ? '&sort=' + sort : '';
filtersUrl += (asc) ? '&asc=' + asc : '';
}
filtersUrl = (filtersUrl == '') ? '' : '#' + filtersUrl;
history.replaceState( {} , null, location.pathname + filtersUrl);
// Запрос данных в соответствии с установленнымифильтрами:
var requestData = {
list: $table.data('content'),
period: period
};
if (active) requestData['active'] = active;
if (clicks) requestData['clicks'] = clicks;
if (orders) requestData['orders'] = orders;
if (partner) requestData['partner'] = partner;
if (cat) requestData['cat'] = cat;
if (subcat) requestData['subcat'] = subcat;
if (geo) requestData['geo'] = geo;
if (sort) requestData['sort'] = sort;
if (asc) requestData['asc'] = asc;
setFiltersControls(requestData);
currentRequesData = requestData;
currentFiltersUrl = filtersUrl
requestDataFilters(requestData);
}
// Запрос данных для таблицы, в соответствии с фильтрами:
function requestDataFilters(dataRequest)
{
dataRequest['step'] = parseInt($('select', $pagerStep).val());
//console.log("AAA requestDataStatReport: ", dataRequest);
isLoadingStat = true;
EnableLoadingState(isLoadingStat);
$.ajax({
url: $applyButton.attr('data-link'),
method: 'POST',
data: dataRequest,
success: function(res) {
isLoadingStat = false;
EnableLoadingState(isLoadingStat);
if (res == null) {
console.log("AAA requestDataStatReport success res: NULL");
} else if (res.status == 'Error') {
console.log("AAA requestDataStatReport error");
} else {
//console.log("AAA requestDataStatReport success res: SUCCESS", res);
renderTable(res.data);
renderPager([res.pager, res.info]);
markSortTable(res.sort);
}
},
error: function (e) {
console.log('error: ', e);
isLoadingStat = false;
EnableLoadingState(isLoadingStat);
}
});
}
// Отрисовка таблицы:
function renderTable(data)
{
var
$tableBody = $('tbody', $table),
$tableContent = $('<tbody>');
//console.log('AAA item = ', data[1]);
for (var i = 0; i < data.length; i++) {
var
item = data[i],
$tr;
switch($table.data('content')) {
case 'offers':
$tr = createOfferTr(item);
break;
case 'teasers':
$tr = createTeaserTr(item);
break;
case 'keys':
$tr = createKeyTr(item);
break;
case 'cpasites':
$tr = createSiteTr(item);
break;
case 'cpazones':
$tr = createZoneTr(item);
break;
}
$tr.appendTo($tableContent);
}
$tableBody.html('').append($tableContent.children());
}
// Отрисовка пейджера:
function renderPager(dataPager)
{
var
data = dataPager[0],
info = dataPager[1];
if (data) {
var $pagerContent = $('<ul>');
// Отображать "<"
if (data[1] > 1) {
$('<li data-page="' + (data[1]-1) + '"> &lt; </li>').appendTo($pagerContent);
}
// Страниц не больше 7
if (data[0] < 8) {
for (var i = 0; i < data[0]; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
} else {
if (data[1]<5) {
for (var i = 0; i < 5; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
$('<li data-page="' + data[0] + '">' + data[0] + '</li>').appendTo($pagerContent);
}
if (data[1]>=5 && data[1]<=data[0]-3) {
$('<li data-page="' + 1 + '">' + 1 + '</li>').appendTo($pagerContent);
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
for (var i = data[1]-2; i < data[1]+1; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
$('<li data-page="' + data[0] + '">' + data[0] + '</li>').appendTo($pagerContent);
}
if (data[1]>data[0]-3) {
$('<li data-page="' + 1 + '">' + 1 + '</li>').appendTo($pagerContent);
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
for (var i = data[0]-5; i < data[0]; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
}
}
// Отображать ">"
if (data[1] < data[0]) {
$('<li data-page="' + (data[1]+1) + '"> &gt; </li>').appendTo($pagerContent);
}
$pagerItems.html('').append($pagerContent);
}
if (info) {
$('.from', $pagerInfo).text(info.items_interval[0]);
$('.to', $pagerInfo).text(info.items_interval[1]);
$('.total', $pagerInfo).text(info.items_count);
}
}
// Показываем сортировку в таблице:
function markSortTable(dataSort)
{
var $sortTr = $('thead th span[data-sort="' + dataSort[0] + '"]', $table);
$('thead th span', $table).removeClass('current').removeClass('asc').removeClass('desc');
$sortTr.addClass('current').addClass((dataSort[1]>0) ? 'desc' : 'asc').attr('data-sortasc', (dataSort[1]>0) ? -1 : 1);
}
// Offers
function createOfferTr(item)
{
var offerLink = $table.data('offerlink').replace("offer_id", item.id);
var $tr = $('<tr ' + ((parseInt(item.disabled)) ? 'class="disabled"' : '') + ' data-id="' + item.id + '">');
$('<td><input class="is-active" type="checkbox"><span class="item-id">' + item.id + '</span></td>').appendTo($tr);
$('<td><a href="' + offerLink + '"><span class="item-title">' + item.title + '</span></a><div class="offer-info">объявлений: <b>' + item.adds_count + '</b> лендингов: <b>' + item.landings_count + '</b></div></td>').appendTo($tr);
$('<td class="stat"><span class="item-views">' + ((item.Views) ? item.Views : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-clicks">' + ((item.Clicks) ? item.Clicks : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-ctr">' + ((item.ctr) ? item.ctr : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-orders">' + ((item.orders) ? item.orders : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cl">' + ((item.cl) ? item.cl : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-money">' + ((item.Money) ? item.Money : 0) + ' $</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpc">' + ((item.cpc) ? item.cpc : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpm">' + ((item.cpm) ? item.cpm : 0) + '</span></td>').appendTo($tr);
return $tr;
}
// Teasers
function createTeaserTr(item)
{
var offerLink = $table.data('offerlink').replace("offer_id", item.ad.offer_id);
var $tr = $('<tr ' + ((parseInt(item.ad.disabled)) ? 'class="disabled"' : '') + ' data-id="' + item.id + '">');
$('<td><input class="is-active" type="checkbox" ' + (!(parseInt(item.ad.disabled)) ? 'checked' : '') + ' disabled> <span class="item-id">' + item.ad.id + '</span></td>').appendTo($tr);
$('<td><div class="image-wrap"><img src="' + item.ad.img + '?' + new Date().getTime() + '" width="100" height="100" /></div></td>').appendTo($tr);
$('<td><div class="title">' + item.ad.title_value + '</div><div class="desc">' + item.ad.desc_value + '</div><div><a href="' + item.ad.link_value + '" target="_blank">' + item.ad.link_title + '</a></div><div class="price">' + item.ad.price_value + '</div><a class="link-offer" href="' + offerLink + '">Оффер объявления</a></td>').appendTo($tr);
$('<td class="stat"><span class="item-views">' + ((item.Views) ? item.Views : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-clicks">' + ((item.Clicks) ? item.Clicks : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-ctr">' + ((item.ctr) ? item.ctr : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-orders">' + ((item.orders) ? item.orders : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cl">' + ((item.cl) ? item.cl : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-money">' + ((item.Money) ? item.Money : 0) + ' $</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpc">' + ((item.cpc) ? item.cpc : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpm">' + ((item.cpm) ? item.cpm : 0) + '</span></td>').appendTo($tr);
return $tr;
}
// Keys
function createKeyTr(item)
{
var offerLink = $table.data('offerlink').replace("offer_id", item.ad.offer_id);
var $tr = $('<tr ' + ((parseInt(item.ad.disabled)) ? 'class="disabled"' : '') + ' data-id="' + item.ad_id + '" data-cat=\'' + item.ad.cat + '\' data-partners=\'' + item.ad.partners + '\'>');
$('<td><input class="is-active" type="checkbox" ' + (!(parseInt(item.ad.disabled)) ? 'checked' : '') + ' disabled><span class="item-id">' + item.ad_id + '</span><br /><span style="padding-left: 17px; font-weight: normal; font-size: 12px;">' + item.ad.offer_id + '</span></td>').appendTo($tr);
$('<td><div class="title">' + item.ad.title_value + '</div><div class="desc">' + item.ad.desc_value + '</div><div><a href="' + item.ad.link_value + '" target="_blank">' + item.ad.link_title + '</a></div><div class="price">' + item.ad.price_value + '</div><a class="link-offer" href="' + offerLink + '">Оффер объявления</a></td>').appendTo($tr);
$('<td class="stat"><span style="white-space: normal;">[' + item.land_id + ']&nbsp;' + item.land_title + '<br/>' + item.ad_data_id + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-views">' + ((item.Views) ? item.Views : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-clicks">' + ((item.Clicks) ? item.Clicks : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-ctr">' + ((item.ctr) ? item.ctr : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-orders">' + ((item.orders) ? item.orders : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cl">' + ((item.cl) ? item.cl : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-money">' + ((item.Money) ? item.Money : 0) + ' $</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpc">' + ((item.cpc) ? item.cpc : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpm">' + ((item.cpm) ? item.cpm : 0) + '</span></td>').appendTo($tr);
return $tr;
}
// CPA sites
function createSiteTr(item)
{
var $tr = $('<tr data-id="' + item.id + '">');
$('<td><span class="item-id">' + item.id + '</span></td>').appendTo($tr);
$('<td><span class="item-title">' + item.title + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-views">' + ((item.Views) ? item.Views : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-clicks">' + ((item.Clicks) ? item.Clicks : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-ctr">' + ((item.ctr) ? item.ctr : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-orders">' + ((item.orders) ? item.orders : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cl">' + ((item.cl) ? item.cl : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-money">' + ((item.Money) ? item.Money : 0) + ' $</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpc">' + ((item.cpc) ? item.cpc : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpm">' + ((item.cpm) ? item.cpm : 0) + '</span></td>').appendTo($tr);
return $tr;
}
// CPA zones
function createZoneTr(item)
{
var $tr = $('<tr data-id="' + item.id + '">');
$('<td style="font-size: 12px;line-height: 14px;"><span class="item-id">' + item.id + ' (' + item.size + ')<br /><b>' + item.site + '</b></span></td>').appendTo($tr);
$('<td class="stat"><span class="item-views">' + ((item.Views) ? item.Views : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-clicks">' + ((item.Clicks) ? item.Clicks : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-ctr">' + ((item.ctr) ? item.ctr : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-orders">' + ((item.orders) ? item.orders : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cl">' + ((item.cl) ? item.cl : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-money">' + ((item.Money) ? item.Money : 0) + ' $</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpc">' + ((item.cpc) ? item.cpc : 0) + '</span></td>').appendTo($tr);
$('<td class="stat"><span class="item-cpm">' + ((item.cpm) ? item.cpm : 0) + '</span></td>').appendTo($tr);
return $tr;
}
// Распарсиваем строку URL с фильтрами:
var
hashUrl = location.hash.replace('#', '').split('&'),
isLocationHash = (location.hash == "") ? false : true,
currentFilters = [];
hashUrl.forEach(function(item) {
if (item != '' && item.indexOf('=')>-1) {
var
filterItem = item.split('='),
filterName = filterItem[0],
filterValue = (filterItem[1] == '') ? null : filterItem[1].split(',');
if (filtersNames.indexOf(filterName) != -1 && filterValue) {
currentFilters[filterName] = filterValue;
}
}
});
// Устанавливаем по url фильтры в контролах:
if (Object.keys(currentFilters).length > 0) {
setFiltersControls(currentFilters);
if (currentFilters['partner']) $partner.val(currentFilters['partner']);
if (currentFilters['geo']) $geo.val(currentFilters['geo']);
if (currentFilters['clicks']) $clicks.val(currentFilters['clicks']);
if (currentFilters['orders']) $orders.val(currentFilters['orders']);
if (currentFilters['cat']) $cat.val(currentFilters['cat']).change();
if (currentFilters['subcat']) $subcat.val(currentFilters['subcat']);
if (currentFilters['active']) $active.val(currentFilters['active']);
if (currentFilters['period']) $period.val(currentFilters['period']);
if (currentFilters['sort']) currentSort = currentFilters['sort'][0];
if (currentFilters['asc']) currentAsc = currentFilters['asc'][0];
}
// Стартовая фильтрация:
selectFiltersData(isLocationHash);
function setCurrentFilters(filtersUrl)
{
var
hashUrl = filtersUrl.replace('#', '').split('&'),
currentFilters = [];
hashUrl.forEach(function(item) {
if (item != '' && item.indexOf('=')>-1) {
var
filterItem = item.split('='),
filterName = filterItem[0],
filterValue = (filterItem[1] == '') ? null : filterItem[1].split(',');
if (filtersNames.indexOf(filterName) != -1 && filterValue) {
currentFilters[filterName] = filterValue;
}
}
});
// Устанавливаем фильтры по url:
$active.val((currentFilters['active']) ? currentFilters['active'] : '');
$period.val((currentFilters['period']) ? currentFilters['period'] : 'total');
$geo.val((currentFilters['geo']) ? currentFilters['geo'] : '');
$partner.val((currentFilters['partner']) ? currentFilters['partner'] : '');
$cat.val((currentFilters['cat']) ? currentFilters['cat'] : '');
$subcat.val((currentFilters['subcat']) ? currentFilters['subcat'] : '');
$clicks.val((currentFilters['clicks']) ? currentFilters['clicks'] : '');
$orders.val((currentFilters['orders']) ? currentFilters['orders'] : '');
setFiltersControls(currentFilters);
}
// Клик на "Применить"
$applyButton.click(function(){
selectFiltersData();
});
// Клик на страницу пейджера:
$pager.on('click', 'li', function(){
var $pagerItem = $(this);
if (!$pagerItem.hasClass('current') && !$pagerItem.hasClass('not-active')) {
setCurrentFilters(currentFiltersUrl);
currentRequesData['page'] = parseInt($pagerItem.data('page'));
requestDataFilters(currentRequesData);
}
});
// Смена шага пейджера:
$('select', $pagerStep).on('change', function(){
var $stepValue = $(this).val();
$('select', $pagerStep).val($stepValue);
currentRequesData['page'] = null;
setCurrentFilters(currentFiltersUrl);
requestDataFilters(currentRequesData);
});
// Сортировка в таблице:
$('table.table-striped thead th span.sort').on('click', function(){
var
$this = $(this),
sort = $this.data('sort'),
asc = $this.attr('data-sortasc'),
filtersSortUrl = '',
currentSortUrl = '';
if (currentRequesData['sort']) {
currentSortUrl += '&sort=' + currentRequesData['sort'];
}
if (currentRequesData['asc']) {
currentSortUrl += '&asc=' + currentRequesData['asc'];
}
currentRequesData['sort'] = sort;
currentRequesData['asc'] = asc;
currentSort = sort;
currentAsc = asc;
if (currentSortUrl) {
currentFiltersUrl = currentFiltersUrl.replace(currentSortUrl, '');
}
// Добавляем фильтры в url:
filtersSortUrl += '&sort=' + sort + '&asc=' + asc;
filtersSortUrl = (currentFiltersUrl == '') ? '#' + filtersSortUrl : currentFiltersUrl + filtersSortUrl;
history.replaceState( {} , null, location.pathname + filtersSortUrl);
setCurrentFilters(currentFiltersUrl);
requestDataFilters(currentRequesData);
});
// Выгрузка таблицы в Excel
$exportExcelButton.click(function(){
$("#table2excel").table2excel({
exclude: ".noExl",
name: "Worksheet Name",
filename: $table.data('content') + '.xls'
});
});
// Управление фильтрами:
(function(){
var
$filtersShow = $('.b-filters__show');
// Показать фильтры:
$filtersShow.on('click', function(){
$filtersItems.toggle();
});
})();
// Устанавливаем набор фильтров по данным:
function setFiltersControls(filters)
{
var
filtersList = ['clicks', 'orders', 'cat', 'partner', 'geo'],
name;
$filtersCurrent.empty();
if (Object.keys(filters).length > 0) {
filtersList.forEach(function(item) {
name = item;
if (item == 'cat') {
name = 'category';
}
var $filterItemList = $('.form-group.' + name, $filtersItems).parents('.b-filters__list-item');
if (filters[item]) {
var $itemFilter = $filterItemList.clone();
if (item == 'cat') {
$('select.form-control.data-category', $itemFilter).val(filters['cat']);
$('select.form-control.data-subcategory', $itemFilter).val(filters['subcat']);
$('select.form-control.data-category', $filtersItems).val(filters['cat']);
$('select.form-control.data-subcategory', $filtersItems).val(filters['subcat']);
} else {
$('select.form-control', $itemFilter).val(filters[name]);
$('select.form-control.data-' + name, $filtersItems).val(filters[name]);
}
$filterItemList.hide();
$itemFilter.show();
$filtersCurrent.append($itemFilter);
} else {
if (item == 'cat') {
$('select.form-control.data-category', $filtersItems).val('');
$('select.form-control.data-subcategory', $filtersItems).val('');
} else {
$('select.form-control.data-' + name, $filtersItems).val('');
}
$filterItemList.show();
}
});
}
}
});
\ No newline at end of file
;(function($){
var jqPluginName = 'sortTable';
var sortPlugin = function(element, options) {
var self = this;
var config = $.extend(true, {}, $.fn[jqPluginName].defaults, options);
config.context = element;
config.$columnItems = $(config.columnItems, config.context);
this.addDataItems = function() {
config.dataItems = [];
config.$itemsRows = $(config.itemsRows, config.context);
var $itemRow;
config.$itemsRows.each(function(i, e){
$itemRow = $(e);
config.dataItems.push({
tr: $itemRow, // строка в таблице
//trHtml: $itemRow.get(0).outerHTML,
id: parseInt($.trim($('.item-id', $itemRow).text())),
timestamp: $.trim($('.item-timestamp', $itemRow).text()),
browser: $.trim($('.item-browser', $itemRow).text()),
country: $.trim($('.item-country', $itemRow).text()),
site: $.trim($('.item-site', $itemRow).text()),
offer: $.trim($('.item-offer', $itemRow).text()),
land: $.trim($('.item-land', $itemRow).text()),
status: $.trim($('.item-status', $itemRow).text()),
price: $.trim($('.item-price', $itemRow).text()),
views: parseInt($.trim($('.item-views', $itemRow).text())),
clicks: parseInt($.trim($('.item-clicks', $itemRow).text())),
ctr: parseFloat($.trim($('.item-ctr', $itemRow).text())),
orders: parseInt($.trim($('.item-orders', $itemRow).text())),
cl: parseFloat($.trim($('.item-cl', $itemRow).text())),
money: parseFloat($.trim($('.item-money', $itemRow).text())),
cpc: parseFloat($.trim($('.item-cpc', $itemRow).text())),
cpm: parseFloat($.trim($('.item-cpm', $itemRow).text())),
});
});
}
this.addDataItems();
self.InitData = function() {
this.addDataItems();
}
// Клик по названию колонки для сортировки:
config.$columnItems.click(function() {
// Сортировка в таблице
var
sortField = $(this).data('sort'),
sortAsc = $(this).attr('data-sortasc');
$(this).attr('data-sortasc', -sortAsc);
config.dataItems.sort(function(a, b) {
if (sortAsc < 0) {
return (a[sortField] > b[sortField]) ? 1 : -1;
} else {
return (a[sortField] < b[sortField]) ? 1 : -1;
}
});
// Переписываем таблицу:
var
$table = $(config.context),
$tableBody = $('tbody', $table),
//$tableBody = $table.find('tbody').first(),
$tableContent = $('<tbody>');
for (var i = 0; i < config.dataItems.length; i++) {
(config.dataItems[i].tr).appendTo($tableContent);
}
$tableBody.html('').append($tableContent.children());
});
config.context.data(jqPluginName, this);
}
$.fn[jqPluginName] = function(options) {
return this.each(function() {
var _this = $(this);
if (!_this.data(jqPluginName))
{
new sortPlugin(_this, options);
}
});
}
$.fn[jqPluginName].defaults = {
context: null,
dataItems: [],
itemsRows: 'tbody tr',
$itemsRows: null,
columnItems: '.sort[data-sort]',
$columnItems: null,
}
})(jQuery);
//table2excel.js
;(function ( $, window, document, undefined ) {
var pluginName = "table2excel",
defaults = {
exclude: ".noExl",
name: "Table2Excel"
};
// The actual plugin constructor
function Plugin ( element, options ) {
this.element = element;
// jQuery has an extend method which merges the contents of two or
// more objects, storing the result in the first object. The first object
// is generally empty as we don't want to alter the default options for
// future instances of the plugin
//
this.settings = $.extend( {}, defaults, options );
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype = {
init: function () {
var e = this;
var utf8Heading = "<meta http-equiv=\"content-type\" content=\"application/vnd.ms-excel; charset=UTF-8\">";
e.template = {
head: "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">" + utf8Heading + "<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>",
sheet: {
head: "<x:ExcelWorksheet><x:Name>",
tail: "</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>"
},
mid: "</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>",
table: {
head: "<table>",
tail: "</table>"
},
foot: "</body></html>"
};
e.tableRows = [];
// get contents of table except for exclude
$(e.element).each( function(i,o) {
var tempRows = "";
$(o).find("tr").not(e.settings.exclude).each(function (i,p) {
tempRows += "<tr>";
$(p).find("td,th").not(e.settings.exclude).each(function (i,q) { // p did not exist, I corrected
var flag = $(q).find(e.settings.exclude); // does this <td> have something with an exclude class
if(flag.length >= 1) {
tempRows += "<td> </td>"; // exclude it!!
} else {
tempRows += "<td>" + $(q).html() + "</td>";
}
});
tempRows += "</tr>";
});
// exclude img tags
if(e.settings.exclude_img) {
tempRows = exclude_img(tempRows);
}
// exclude link tags
if(e.settings.exclude_links) {
tempRows = exclude_links(tempRows);
}
// exclude input tags
if(e.settings.exclude_inputs) {
tempRows = exclude_inputs(tempRows);
}
e.tableRows.push(tempRows);
});
e.tableToExcel(e.tableRows, e.settings.name, e.settings.sheetName);
},
tableToExcel: function (table, name, sheetName) {
var e = this, fullTemplate="", i, link, a;
e.format = function (s, c) {
return s.replace(/{(\w+)}/g, function (m, p) {
return c[p];
});
};
sheetName = typeof sheetName === "undefined" ? "Sheet" : sheetName;
e.ctx = {
worksheet: name || "Worksheet",
table: table,
sheetName: sheetName
};
fullTemplate= e.template.head;
if ( $.isArray(table) ) {
for (i in table) {
//fullTemplate += e.template.sheet.head + "{worksheet" + i + "}" + e.template.sheet.tail;
fullTemplate += e.template.sheet.head + sheetName + i + e.template.sheet.tail;
}
}
fullTemplate += e.template.mid;
if ( $.isArray(table) ) {
for (i in table) {
fullTemplate += e.template.table.head + "{table" + i + "}" + e.template.table.tail;
}
}
fullTemplate += e.template.foot;
for (i in table) {
e.ctx["table" + i] = table[i];
}
delete e.ctx.table;
var isIE = /*@cc_on!@*/false || !!document.documentMode; // this works with IE10 and IE11 both :)
//if (typeof msie !== "undefined" && msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // this works ONLY with IE 11!!!
if (isIE) {
if (typeof Blob !== "undefined") {
//use blobs if we can
fullTemplate = e.format(fullTemplate, e.ctx); // with this, works with IE
fullTemplate = [fullTemplate];
//convert to array
var blob1 = new Blob(fullTemplate, { type: "text/html" });
window.navigator.msSaveBlob(blob1, getFileName(e.settings) );
} else {
//otherwise use the iframe and save
//requires a blank iframe on page called txtArea1
txtArea1.document.open("text/html", "replace");
txtArea1.document.write(e.format(fullTemplate, e.ctx));
txtArea1.document.close();
txtArea1.focus();
sa = txtArea1.document.execCommand("SaveAs", true, getFileName(e.settings) );
}
} else {
var blob = new Blob([e.format(fullTemplate, e.ctx)], {type: "application/vnd.ms-excel"});
window.URL = window.URL || window.webkitURL;
link = window.URL.createObjectURL(blob);
a = document.createElement("a");
a.download = getFileName(e.settings);
a.href = link;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
return true;
}
};
function getFileName(settings) {
return ( settings.filename ? settings.filename : "table2excel" );
}
// Removes all img tags
function exclude_img(string) {
var _patt = /(\s+alt\s*=\s*"([^"]*)"|\s+alt\s*=\s*'([^']*)')/i;
return string.replace(/<img[^>]*>/gi, function myFunction(x){
var res = _patt.exec(x);
if (res !== null && res.length >=2) {
return res[2];
} else {
return "";
}
});
}
// Removes all link tags
function exclude_links(string) {
return string.replace(/<a[^>]*>|<\/a>/gi, "");
}
// Removes input params
function exclude_inputs(string) {
var _patt = /(\s+value\s*=\s*"([^"]*)"|\s+value\s*=\s*'([^']*)')/i;
return string.replace(/<input[^>]*>|<\/input>/gi, function myFunction(x){
var res = _patt.exec(x);
if (res !== null && res.length >=2) {
return res[2];
} else {
return "";
}
});
}
$.fn[ pluginName ] = function ( options ) {
var e = this;
e.each(function() {
if ( !$.data( e, "plugin_" + pluginName ) ) {
$.data( e, "plugin_" + pluginName, new Plugin( this, options ) );
}
});
// chain jQuery functions
return e;
};
})( jQuery, window, document );
$(document).ready(function () {
"use strict";
var
$contentWrap = $('.b-content__work'),
$categoriesWrap = $('.b-categories'),
$controls = $('.b-controls'),
$addsWrap = $('.b-data-item.adds'),
$landingsWrap = $('.b-data-item.landings'),
$addsLandingsWrap = $('.b-data-item.adds, .b-data-item.landings'),
$inputImage = $('input#img', $addsWrap),
addItemSelector = '.ads-list-item',
landingItemSelector = '.landing-item',
$actions = $('.b-data-item_action select'),
$selectItems = $('.b-data-item .items-select'),
isCreatePage = $('.offer-id').data('id') == 0;
// Покидание страницы:
window.onbeforeunload = function(e) {
if (!$controls.hasClass('disabled')) {
return "Данные не сохранены. Точно перейти?";
}
};
// Обработка вкладок Лендинги/Объявления/Заказы/Связки:
(function(){
var
$switchItems = $('.b-switch_header li'),
$switchContentItems = $('.b-switch_item'),
activeClass = 'active',
$filtersShow = $('.b-filters__show'),
$applyFilters = $('.btn.btn-primary.apply'),
nowDate = new Date(),
$periodSelect = $('.order-period'),
datepicker1 = $('#date-value-1').datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(data){
$periodSelect.val('');
}
}).data('datepicker'),
datepicker2 = $('#date-value-2').datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(data){
$periodSelect.val('');
}
}).data('datepicker');
// Переключение вкладок:
$switchItems.on('click', function(){
var
$this = $(this),
itemName = $this.data('id');
if (!$this.hasClass(activeClass)) {
$switchItems.removeClass(activeClass);
$this.addClass(activeClass);
$switchContentItems.hide();
$('.b-switch_item[data-id="' + itemName + '"]').show();
}
});
// Сортировка в таблицах во вкладках:
$('.b-data-item.orders .table.orders').sortTable();
$('.b-data-item.keys .table.adds').sortTable();
// Выбор периода во вкладке заказов:
$periodSelect.on('change', function(){
var
$this = $(this),
period = $this.val(),
todayDate = new Date();
// Установка значений периода в дате:
switch(period) {
case 'today':
datepicker1.selectDate(todayDate);
datepicker2.selectDate(todayDate);
break;
case 'yesterday':
var yesterdayDate = new Date();
yesterdayDate.setDate(yesterdayDate.getDate()-1);
datepicker1.selectDate(yesterdayDate);
datepicker2.selectDate(yesterdayDate);
break;
case '7days':
var prev7day = new Date();
prev7day.setDate(prev7day.getDate()-7);
datepicker1.selectDate(prev7day);
datepicker2.selectDate(todayDate);
break;
case '30days':
var prev30day = new Date();
prev30day.setDate(prev30day.getDate()-30);
datepicker1.selectDate(prev30day);
datepicker2.selectDate(todayDate);
break;
case 'current_month':
var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(todayDate);
break;
case 'prev_month':
var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth()-1, 1);
var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 0);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(lastDay);
break;
case 'year':
var firstDay = new Date(todayDate.getFullYear(), 0, 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(todayDate);
break;
default:
datepicker1.clear();
datepicker2.clear();
break;
}
$this.val(period);
});
// Показать фильтры:
$filtersShow.on('click', function(){
$('.b-filters__items', $(this).parents('.b-switch_item')).toggle();
});
// Применить фильтры:
$applyFilters.on('click', function(){
console.log('AAA applyFilters');
var
$wrap = $(this).parents('.b-switch_item'),
filters = [],
$table = $('table.table-striped', $wrap);
// Формируем список фильтров:
$('.b-filters__list-item', $wrap).each(function(){
var $select = $('select', $(this));
if ($select.val()) {
filters[$select.attr('name')] = $select.val();
}
});
// Для заказов добавляем фильтр периода если не "все":
if ($periodSelect.length>0) {
if (filters['period']) {
if (filters['period'] == 'all') {
delete filters['period'];
} else {
var
from = new Date(datepicker1.selectedDates[0]),
to = new Date(datepicker2.selectedDates[0]);
from.setHours(0,0,0,0);
to.setHours(23,59,59,0);
filters['period'] = [from, to];
}
}
}
// Выполняем фильтрацию в таблице:
if (Object.keys(filters).length > 0) {
$('tbody tr', $table).each(function(){
var $tr = $(this),
isFiltered = false; // элемент отсеяли
$tr.show();
Object.keys(filters).forEach(function(item) {
if ($tr.data(item)) {
if (['geo', 'partner'].indexOf(item) > -1) {
if ($tr.data(item) != filters[item]) isFiltered = true;
}
if (['clicks', 'orders'].indexOf(item) > -1) {
if ($tr.data(item) < filters[item]) isFiltered = true;
}
if (item == 'status') {
if (filters[item] == 'leadOrSale') {
if (['lead', 'sale'].indexOf($tr.data(item)) < 0) isFiltered = true;
} else if (filters[item] == 'leadOrSaleOrNew') {
if (['lead', 'sale', 'new'].indexOf($tr.data(item)) < 0) isFiltered = true;
} else {
if ($tr.data(item) != filters[item]) isFiltered = true;
}
}
if (item == 'period') {
var
//todayDate = new Date(),
tdPeriod = new Date($tr.data(item)),
date0, date1;
date0 = filters[item][0];
date1 = filters[item][1];
/*
switch(filters[item]) {
case 'today':
date0 = new Date();
date0.setHours(0,0,0,0);
date1 = new Date();
break;
case 'yesterday':
date0 = new Date();
date0.setDate(date0.getDate()-1);
date0.setHours(0,0,0,0);
date1 = new Date();
date1.setHours(0,0,0,0);
break;
case '7days':
date0 = new Date();
date0.setDate(date0.getDate()-7);
date0.setHours(0,0,0,0);
date1 = new Date();
break;
case '30days':
date0 = new Date();
date0.setDate(date0.getDate()-30);
date0.setHours(0,0,0,0);
date1 = new Date();
break;
case 'current_month':
date0 = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1);
date1 = new Date();
break;
case 'prev_month':
date0 = new Date(todayDate.getFullYear(), todayDate.getMonth()-1, 1);
date1 = new Date(todayDate.getFullYear(), todayDate.getMonth(), 0);
break;
case 'year':
date0 = new Date(todayDate.getFullYear(), 0, 1);
date1 = new Date(todayDate.getFullYear(), todayDate.getMonth(), 0);
break;
}
*/
if (!(tdPeriod > date0 && tdPeriod < date1)) {
isFiltered = true;
}
}
} else {
isFiltered = true;
}
});
if (isFiltered) {
$tr.hide();
}
});
} else {
$('tbody tr', $table).show();
}
});
})();
// В данных оффера произвели изменения:
function MarkOfferAsEdited()
{
$controls.removeClass('disabled');
}
// Обработка списка категорий:
(function(){
// Добавление категории-подкатегории:
$categoriesWrap.on('click', '.add-row', function(){
var
$addButton = $(this),
$tplItem = $('.b-pattern.categories .category-item').clone();
$tplItem.insertBefore($addButton);
MarkOfferAsEdited();
return false;
});
// Удаление категории-подкатегории:
$categoriesWrap.on('click', '.delete-category-item', function(){
$(this).parent().remove();
MarkOfferAsEdited();
});
// Изменение значений:
$categoriesWrap.on('change', 'select', function(){
var $this = $(this);
if ($this.hasClass('offer-category')) {
var
catId = $this.val(),
$subcategory = $('.offer-subcategory', $this.parent()),
$options = $('option', $subcategory);
$options.addClass('hidden').prop('selected', false);
$options.filter('[data-parent="'+ catId +'"]').removeClass('hidden');
}
MarkOfferAsEdited();
});
})();
// Изменение настроек оффера:
$('.b-data-item.settings').on('change', 'input, select', function(){
MarkOfferAsEdited();
});
// Клик на редактируемый элемент:
$contentWrap.on('click', '.edited', function(){
var
$field = $(this),
fieldName = $field.data('field'),
$input = $('input.'+fieldName, $field.parent()),
oldVal = $input.val(),
oldText = $field.html();
$field.hide();
$input.off('blur').off('keyup').show().focus();
$input.on('keyup', function(e) {
if (e.keyCode == 13) {
$input.blur();
}
if (e.keyCode == 27) {
$input.off('blur');
$input.val(oldVal);
$field.html(oldText);
$input.hide();
$field.show();
}
});
$input.on('blur', function() {
var
textInput = $input.val(),
textField = textInput,
match, regex;
// подсвечиваем ${text}
regex = /\$\{([a-zA-Z0-9\-\_]*)\}/g;
while (match = regex.exec(textInput)){
textField = textField.replace(match[0], '<b>' + match[0] + '</b>');
}
// подсвечиваем $[text]
regex = /\$\[([a-zA-Z0-9\-\_]*)\]/g;
while (match = regex.exec(textInput)){
textField = textField.replace(match[0], '<span>' + match[0] + '</span>');
}
$input.hide();
$field.html(textField);
if (textInput != oldVal) {
$field.parents(addItemSelector).addClass('was-edited');
$field.parents(landingItemSelector).addClass('was-edited');
$field.addClass('was-edited');
MarkOfferAsEdited();
}
$field.show();
});
});
// Фокус на название оффера при создании нового:
if (isCreatePage) {
$('.offer-title.edited').click();
$('#offer-create-form').on('submit', function(){
return false;
});
}
// Обработка выбора и действий с выбранными элементами списков:
(function(){
// Показ списка действий при клике на галочку-выбор объявления или лендинга:
$addsLandingsWrap.on('change', 'input.is-active', function(){
var
$wrapItem = $(this).parents('.b-data-item'),
$action = $('.b-data-item_action', $wrapItem);
$action.show();
});
// Отображение элементов списков:
$selectItems.on('change', function(){
var
$this = $(this),
actionType = $(this).val(),
$wrapItems = $this.parents('.b-data-item'),
itemSelector = ($wrapItems.hasClass('adds')) ? '.ads-list-item' : '.landing-item';
$wrapItems.removeClass('all').removeClass('active').removeClass('disabled');
$wrapItems.addClass(actionType);
if ($wrapItems.hasClass('adds')) {
$.cookie("list_ads", actionType, { expires : 365 });
} else {
$.cookie("list_lands", actionType, { expires : 365 });
}
});
// Выбор действия с выделенными элементами:
$actions.on('change', function(){
var
$this = $(this),
actionType = $(this).val(),
$wrapItems,
itemSelector;
if (actionType) {
$wrapItems = $this.parents('.b-data-item');
itemSelector = ($wrapItems.hasClass('adds')) ? '.ads-list-item' : '.landing-item';
$(itemSelector, $wrapItems).each(function() {
var $item = $(this);
if ($('input.is-active', $item).is(':checked')) {
switch(actionType) {
case 'active':
$item.removeClass('disabled');
break;
case 'disable':
$item.addClass('disabled');
break;
}
$item.addClass('was-edited');
}
});
MarkOfferAsEdited();
}
});
// Выставляем списки по кукису:
var
startListAdsType = ($.cookie("list_ads")) ? $.cookie("list_ads") : 'active',
startListLandsType = ($.cookie("list_lands")) ? $.cookie("list_lands") : 'active',
$adsTypeSelect = $('.b-data-item.adds .items-select'),
$landsTypeSelect = $('.b-data-item.landings .items-select');
$adsTypeSelect.val(startListAdsType);
$adsTypeSelect.change();
$landsTypeSelect.val(startListLandsType);
$landsTypeSelect.change();
})();
// Изменения контролов device и partner внутри лендинга
$landingsWrap.on('change', '.landingdata-item.device input, .landingdata-item.partner select', function(){
// Не учитываем редактируемые:
if ($(this).parents('.b-data-item_add-list-place').length==0) {
$(this).parents(landingItemSelector).addClass('was-edited');
MarkOfferAsEdited();
}
});
// Обработка списков значений для стран у лендингов:
(function(){
// Клик на чекбокс добавления страны в выпадающем списке:
$landingsWrap.on('change', '.dropdown-menu input', function(){
var
$this = $(this),
$wrap = $this.parents('.landingdata-item.geo'),
$valuesString = $('.values-string', $wrap);
if ($this.prop('checked')) {
$valuesString.append('<span data-id="' + $this.data('code') + '">' + $this.data('title') + '&nbsp;<a href="#" class="close">×</a></span> ');
} else {
$('span[data-id="' + $this.data('code') + '"]', $valuesString).remove();
}
$this.parents(landingItemSelector).addClass('was-edited');
MarkOfferAsEdited();
});
// Клик на X удаления страны из строки:
$landingsWrap.on('click', '.values-string span .close', function(){
var
$this = $(this),
geoId = $this.parent().data('id'),
$wrap = $this.parents('.landingdata-item.geo'),
$geoSelect = $('.dropdown-menu .geo-selected[data-code="' + geoId + '"]', $wrap);
$geoSelect.prop('disabled', false).prop('checked', false);
$this.parents(landingItemSelector).addClass('was-edited');
MarkOfferAsEdited();
$this.parent().remove();
return false;
});
})();
// Обработка выбора картинки:
(function(){
var $currentTarget;
var downloadCount = 0;
// Клик на картинку:
$addsWrap.on('click', '.ads-list-item img', function(){
$currentTarget = $(this);
$inputImage.click();
});
// Выбор картинки:
$inputImage.on('change', function() {
var file = $(this)[0].files[0];
if (!file) {
return false;
}
var $imageWrap = $currentTarget.parents('.image-wrap');
$imageWrap.addClass('is-loading');
if (file.type.match('image.*')) {
var fileReader = new FileReader();
fileReader.onload = function(f) {
RequestImageResize(
function(imgPath){
var d = new Date();
$currentTarget.attr('src', imgPath + '?' + d.getTime());
$currentTarget.show();
$imageWrap.removeClass('is-loading').addClass('was-edited');
$currentTarget.parents(addItemSelector).addClass('was-edited');
MarkOfferAsEdited();
},
function(dataMsg){
$.showMessage('error', dataMsg);
$imageWrap.removeClass('is-loading');
},
);
};
fileReader.readAsDataURL(file);
} else {
$.showMessage('error', 'Выбранный файл не является изображением!');
$imageWrap.removeClass('is-loading');
}
});
// Запрос для ресайза картинки при её загрузке:
function RequestImageResize(callback, callbackError)
{
var
$form = $('form#img-resize-form'),
action = $form.attr('action'),
method = $form.attr('method'),
formData = new FormData();
// Данные картинки:
var $inputImage = $("input#img");
if ($inputImage.length>0) {
formData.append('img', $inputImage.prop('files')[0]);
}
if ($currentTarget.parents(addItemSelector).data('id')) {
formData.append('offer_id', $('.offer-id').data('id') + '_' + $currentTarget.parents(addItemSelector).data('id'));
} else {
downloadCount++;
formData.append('offer_id', $('.offer-id').data('id') + '_n' + downloadCount);
}
//console.log('AAA RequestImageResize = ', formData);
$.ajax(action, {
type: method,
data: formData,
cache:false,
contentType: false,
processData: false,
success: function(data) {
if(data) {
if(data.result === true && data.img_path) {
if (callback && $.isFunction(callback)) {
callback(data.img_path);
}
}
if(data.result === false && data.msg) {
if (callbackError && $.isFunction(callbackError)) {
callbackError(data.msg);
}
}
}
},
error: function(rew, status, err) {
console.log(status, err);
if (callbackError && $.isFunction(callbackError)) {
callbackError('Ошибка: ' + rew.responseText);
}
}
});
return false;
}
})();
// Добавление элементов в список объявлений или лендинга:
(function(){
var $WrapLandingsAdds = $('.b-data-item.landings, .b-data-item.adds');
// Клик на "+ Добавить":
$WrapLandingsAdds.on('click', '.b-data-item_list .add-row.item', function(){
var
$addButton = $(this),
$wrap = $addButton.parents('.b-data-item'),
$addBlock = $('.b-data-item_add-list', $wrap),
$addBlockPlace = $('.b-data-item_add-list-place', $wrap),
isAdds = $wrap.hasClass('adds'),
$tplItem;
if (isAdds) {
$tplItem = $('.b-pattern.add .ads-list-item').clone();
} else {
$tplItem = $('.b-pattern.landing .landing-item').clone();
// При добавлении лендинга geo и device устанавливаем по предыдущему:
if ($('.landing-item', $landingsWrap).length > 0) {
var
$lastLand = $('.landing-item', $landingsWrap).last(),
$lastGeo = $('.landingdata-item.geo', $lastLand).clone(),
$lastDevice = $('.landingdata-item.device', $lastLand).clone();
$('.landingdata-item.geo', $tplItem).empty().append($lastGeo);
$('.landingdata-item.device', $tplItem).empty().append($lastDevice);
}
}
$addBlockPlace.append($tplItem);
$addButton.hide();
$addBlock.show();
return false;
});
// Клик на "Отмена":
$WrapLandingsAdds.on('click', '.btn.cancel', function(){
var
$this = $(this),
$wrap = $this.parents('.b-data-item'),
$addButton = $('.add-row.item', $wrap),
$addBlock = $('.b-data-item_add-list', $wrap),
$addBlockPlace = $('.b-data-item_add-list-place', $wrap);
$addButton.show();
$addBlock.hide();
$addBlockPlace.empty();
return false;
});
// Клик на "Сохранить":
$WrapLandingsAdds.on('click', '.btn.save-item', function(){
var
$this = $(this),
$wrap = $this.parents('.b-data-item'),
$addBlockPlace = $('.b-data-item_add-list-place', $wrap),
$addButton = $('.add-row.item', $wrap),
$addBlock = $('.b-data-item_add-list', $wrap),
isAdds = $wrap.hasClass('adds'),
itemSelector = (isAdds) ? '.ads-list-item' : '.landing-item',
$tplItem,
isNotValid = false;
$tplItem = $(itemSelector, $addBlockPlace).clone();
if (isAdds) {
// Проверяем обязательные для загрузки картинку:
/*
$('img', $tplItem).error(function() {
console.log('AAA Картинка не загружена');
});
$('img', $tplItem).load(function() {
console.log('AAA Картинка загружена');
});
*/
if (!$('img', $tplItem).attr('src')) {
isNotValid = 'Картинка не загружена';
}
} else {
var
partnerVal = $('.form-control.landing-partner', $addBlockPlace).val(),
mobileChecked = $('input[name="MOBILE"]', $addBlockPlace).prop('checked'),
desktopChecked = $('input[name="DESKTOP"]', $addBlockPlace).prop('checked');
$('.form-control.landing-partner', $tplItem).val(partnerVal);
$('input[name="MOBILE"]', $tplItem).prop('checked', mobileChecked);
$('input[name="DESKTOP"]', $tplItem).prop('checked', desktopChecked);
}
// Проверяем обязательные для заполнения текстовые input-поля:
$('input[type="text"], select', $tplItem).each(function(){
var $this = $(this);
if ($this.data('field') != 'price') {
if ($this.parents('table.tpl-stat').length == 0) {
if ($.trim($this.val()) == '') {
isNotValid = 'Введите значение поля ' + $this.data('field');
}
}
}
});
if (isNotValid) {
alert(isNotValid);
return false;
}
$tplItem.addClass('new');
$tplItem.insertBefore($addButton);
$addButton.show();
$addBlock.hide();
$addBlockPlace.empty();
MarkOfferAsEdited();
return false;
});
// Обработка ввода значений в input-поля:
$WrapLandingsAdds.on('change', 'input', function() {
var
$input = $(this),
textInput = $input.val(),
fieldName = $input.data('field'),
$field = $('.edited.'+fieldName, $input.parent()),
textField = textInput,
match, regex;
// подсвечиваем ${text}
regex = /\$\{([a-zA-Z0-9\-\_]*)\}/g;
while (match = regex.exec(textInput)){
textField = textField.replace(match[0], '<b>' + match[0] + '</b>');
}
// подсвечиваем $[text]
regex = /\$\[([a-zA-Z0-9\-\_]*)\]/g;
while (match = regex.exec(textInput)){
textField = textField.replace(match[0], '<span>' + match[0] + '</span>');
}
$field.html(textField);
});
})();
// Переменные шаблонов
(function(){
//var templatesVariables = [];
//CheckTemplatesVariables();
MarkAllInputTplFields();
// Ввод в поля проверяемые на валидность:
$addsLandingsWrap.on('keyup', 'input.editing[type="text"]', function(){
//console.log('AAA Ввод в поля проверяемые на валидность:');
MarkInputTplField($(this));
});
// Ввод в поля таблицы:
$landingsWrap.on('keyup', 'table.tpl-stat input.form-control', function(){
//console.log('AAA Ввод в поля таблицы:');
MarkAsEdited($(this));
MarkAllInputTplFields();
});
// Выбор checked в таблице шаблонов:
$landingsWrap.on('change', 'table.tpl-stat td.check input', function(){
var
$tplWrap = $(this).parents('.b-data-item_list-tpl-stat'),
$actionControl = $('.b-data-item_list-tpl-action', $tplWrap),
showActionControl = false;
$('table.tpl-stat td.check input', $tplWrap).each(function(){
if ($(this).prop('checked')) {
showActionControl = true;
}
});
if (showActionControl) {
$actionControl.show();
} else {
$actionControl.hide();
}
});
$landingsWrap.on('click', '.btn.btn-primary.save-tpl-action', function(){
var
$landWrap = $(this).parents('.landing-item'),
$form = $('#offer-tpl-edit-form'),
action = $form.attr('action'),
method = $form.attr('method'),
formData = new FormData(),
tplData = [],
$tplWrap = $(this).parents('.b-data-item_list-tpl-stat'),
$actionControl = $('.b-data-item_list-tpl-action', $landWrap),
actionType = $('.form-control.tpls-action', $landWrap).val(),
$trTpl = $('table.tpl-stat tbody tr', $landWrap),
warningInfo;
if (!actionType) {
warningInfo = 'Выберите действие';
}
$trTpl.each(function(){
var
$tr = $(this),
ad_data_id = $('td.templ-id input', $tr).val(),
isChecked = $('td.check input', $tr).prop('checked') ? 1 : 0;
if (isChecked) {
tplData.push(ad_data_id);
}
});
formData.append('landing_id', $landWrap.data('id'));
formData.append('action', actionType);
formData.append('tpls', tplData);
if (warningInfo) {
alert(warningInfo);
return false;
}
//console.log('AAA formData = ', tplData);
//return false;
$tplWrap.addClass('state-loading');
$.ajax(action, {
type: method,
data: formData,
cache:false,
contentType: false,
processData: false,
success: function(data) {
if(data) {
if(data.result === true) {
//console.log('AAA success ', data);
$trTpl.each(function(){
var
$tr = $(this),
$checkInput = $('td.check input', $tr),
ad_data_id = $('td.templ-id input', $tr).val();
$checkInput.prop('checked', false);
if (data.tpls.indexOf(ad_data_id) > -1) {
if (data.action_type == 'disable') {
$tr.addClass('not-active');
} else {
$tr.removeClass('not-active');
}
}
});
$actionControl.hide();
}
if(data.result === false && data.msg) {
$.showMessage('error', data.msg);
}
}
$tplWrap.removeClass('state-loading');
},
error: function(rew, status, err) {
console.log(status, err);
$.showMessage('error', err);
$tplWrap.removeClass('state-loading');
}
});
return false;
});
// Удаление строки в таблице шаблонов (не последней):
$landingsWrap.on('click', 'table.tpl-stat b.del', function(){
var $table = $(this).parents('table');
if ($('tbody tr', $table).length>1) {
MarkAsEdited($(this));
var $tr = $(this).parents('tr');
if ($tr.hasClass('new')) {
$tr.remove();
} else {
$tr.addClass('not-active');
}
}
});
// Добавление строки в таблице шаблонов:
$landingsWrap.on('click', '.b-data-item_list-tpl-stat .add-row', function(){
var
$table = $('table', $(this).parent()),
varCount = $('thead:not(.layout) th', $table).length - 1,
$tr = $(document.createElement('tr'));
$tr.addClass('new');
//$tr.append('<td class="check"><input type="checkbox"></td>');
$tr.append('<td class="check"></td>');
$tr.append('<td class="del"><span class="preview"></span></td>');
// Добавление колонок id, price и статистики
$tr.append('<td class="templ-id tpl"><input type="text" class="form-control template-value" value=""></td>');
$tr.append('<td class="tpl"><input type="text" class="form-control template-value" value=""></td>');
for (var i = 1; i < 8; i++) {
$tr.append('<td class="stat"></td>');
}
$tr.append('<td class="del" style="text-align: right"><b class="del">&times;</b></td>');
/*
for (var i = 1; i < varCount; i++) {
if ($('thead:not(.layout) th', $table).eq(i).hasClass('stat')) {
$tr.append('<td class="stat"></td>');
} else {
if ($('thead:not(.layout) th', $table).eq(i).hasClass('templ-id')) {
$tr.append('<td class="templ-id tpl"><input type="text" class="form-control template-value" value=""></td>');
} else {
$tr.append('<td class="tpl"><input type="text" class="form-control template-value" value=""></td>');
}
}
}
$tr.append('<td class="del"><b class="del">&times;</b></td>');
*/
$table.append($tr);
MarkAsEdited($(this));
});
function MarkAsEdited($this)
{
$this.parents(landingItemSelector).addClass('was-edited');
MarkOfferAsEdited();
}
// Изменения в полях формы и таблицы:
/*
$addsLandingsWrap.on('change', 'input.editing[type="text"]', function(){
//console.log('AAA Изменения в полях формы и таблицы:');
CheckTemplatesVariables();
});
function CheckTemplatesVariables()
{
templatesVariables = [];
$('input.editing[type="text"]', $addsLandingsWrap).each(function(){
ChangeInputValue($(this).val());
});
TableVariablesEdit(templatesVariables);
}
function ChangeInputValue(val)
{
var
re = /\$\[\w+\]/g,
found = val.match(re);
if (found) {
found.forEach(function(item, i){
found[i]=item.replace('$[', '').replace(']', '');
});
AddToInputVariables(found);
}
}
function AddToInputVariables(values)
{
values.forEach(function(value){
if (templatesVariables.indexOf(value)<0) {
templatesVariables.push(value);
}
})
}
// Редактируем поля переменных в таблицах:
function TableVariablesEdit(variables)
{
var $tables = $('table.tpl-stat');
$tables.each(function(){
var
$table = $(this),
$tableWrap = $table.parents('.b-data-item_list-tpl-stat'),
$tableHeaderLayout = $('thead.layout', $table),
$tableHeader = $('thead:not(.layout)', $table),
$tableHeadersLayoutAll = $('thead.layout th', $table),
$tableHeadersAll = $('thead:not(.layout) th', $table),
$tableHeadersLayout = $('thead.layout th:not(.templ-id):not(.del):not(.stat)', $table),
$tableHeaders = $('thead:not(.layout) th:not(.templ-id):not(.del):not(.stat)', $table),
$tableHeaderRow = $('thead:not(.layout) tr', $table),
$tableBodyRow = $('tbody tr', $table),
$tableBodyCells = $('tbody td:not(.templ-id):not(.del):not(.stat)', $table);
if (!variables.length) {
//$tableWrap.addClass('hidden');
// Удаление оставшейся колонок, т.к. переменных нет:
$tableHeadersLayout.remove();
$tableHeaders.remove();
$tableBodyCells.remove();
//$('tbody td.templ-id input', $table).val('');
} else {
$tableWrap.removeClass('hidden');
// Удаление колонки, если её нет в данных:
$tableHeaders.each(function(){
if (variables.indexOf($(this).text())<0) {
// Колонку id не удаляем:
if ($(this).text() == 'id') {
} else {
var indexColumn = $tableHeadersAll.index($(this));
$tableHeadersLayoutAll.eq(indexColumn).remove();
$tableHeadersAll.eq(indexColumn).remove();
$tableBodyRow.each(function(){
$('td', $(this)).eq(indexColumn).remove();
});
}
}
});
// Добавление колонки, если её нет в таблице:
variables.forEach(function(variable){
var newVariable = true;
$tableHeaders.each(function(){
if ($(this).text() == variable) {
newVariable = false;
}
});
if (newVariable) {
if (variable != 'id') {
var
thPlaceSelector = ($('th.stat', $tableHeader).length>0) ? 'th.stat:first' : 'th.del',
tdPlaceSelector = ($('th.stat', $tableHeader).length>0) ? 'td.stat:first' : 'td.del';
$(thPlaceSelector, $tableHeaderLayout).before('<th></th>');
$(thPlaceSelector, $tableHeader).before('<th>' + variable + '</th>');
$tableBodyRow.each(function(){
if (!$(this).hasClass('not-active')) {
$(tdPlaceSelector, $(this)).before('<td class="tpl"><input type="text" class="form-control template-value" value=""></td>');
} else {
$(tdPlaceSelector, $(this)).before('<td class="tpl"></td>');
}
});
}
}
});
}
});
}
*/
function MarkAllInputTplFields()
{
$('input.editing[type="text"]', $addsLandingsWrap).each(function(){
MarkInputTplField($(this));
});
}
function MarkInputTplField($input)
{
var
val = $input.val(),
fieldName = $input.data('field'),
$field = $('.edited.'+fieldName, $input.parent()),
re = /\$\[\w+\]/g,
found = val.match(re),
inputText,
invalidClass = 'not-valid';
$input.removeClass(invalidClass);
$field.removeClass(invalidClass);
if ($.inArray($input.attr('data-field'), ['title','desc','price'])>=0) {
if (found)
{
var $landings = $('.landing-item', $landingsWrap);
$landings.each(function(){
var
$land = $(this),
$table = $('table.tpl-stat', $land),
$tableHeaders = $('thead:not(.layout) th:not(.del):not(.stat)', $table),
$tableBodyRows = $('tbody tr', $table);
inputText = val; // Оригинальный шаблон
found.forEach(function(item, i){
found[i]=item.replace('$[', '').replace(']', '');
});
$tableBodyRows.each(function(){
var
textVar = inputText,
$row = $(this),
$inputVars = [];
found.forEach(function(item){
var
varIndex, // индекс переменной шаблона
$inputVar, // input переменной
valueVar; // значение переменной
$tableHeaders.each(function(){
var $this = $(this);
if ($this.text() == item) {
varIndex = $tableHeaders.index($this);
}
});
$inputVar = $('input', $('td.tpl', $row).eq(varIndex)), // input переменной
valueVar = $.trim($inputVar.val()); // значение переменной
$inputVars.push($inputVar);
textVar = textVar.replace('$[' + item + ']', valueVar);
});
// Подсвечиваем невалидные шаблоны и их переменные
$.each($inputVars, function(i, $item){
$item.removeClass(invalidClass);
});
var maxValueLength = ($input.attr('data-field') == 'price') ? 8 : 48;
if (textVar.length>maxValueLength) {
$input.addClass(invalidClass);
$field.addClass(invalidClass);
$.each($inputVars, function(i, $item){
$item.addClass(invalidClass);
});
}
});
});
}
else
{
var maxValueLength = ($input.attr('data-field') == 'price') ? 8 : 50;
if (val.length>maxValueLength) {
$input.addClass(invalidClass);
$field.addClass(invalidClass);
}
}
}
}
})();
// Превьюшки:
(function(){
var
$popupBg = $('.l-popup'),
$popup = $('.b-popup__window.preview', $popupBg),
$popupClose = $('.button-close', $popup),
$popupInner = $('.b-popup-content', $popup);
// Открываем попап:
$addsWrap.on('click', '.btn.preview', function(){
ShowPopup('add', $(this));
return false;
});
$landingsWrap.on('click', 'table.tpl-stat span.preview', function(){
ShowPopup('tpl', $(this));
});
// Закрыввем попап по клику на Х:
$popupClose.on('click', function(){
ClosePopup();
});
// Закрыввем попап по клику извне:
$popup.on('click', function(event){
event.stopPropagation();
});
$popupBg.on('click', function(){
ClosePopup();
});
function ShowPopup(type, $target)
{
if (type == 'add') {
InsertPopupContentAdd($target);
} else {
InsertPopupContentTpl($target);
}
$popupBg.addClass('open-popup');
$popup.show();
}
function ClosePopup()
{
$popupBg.removeClass('open-popup');
$popup.hide();
$popupInner.empty()
}
function InsertPopupContentAdd($target)
{
var
$content = $(document.createElement('div')),
$addTpl = $target.parents('.ads-list-item').clone();
$('input, .btn.preview', $addTpl).remove();
$('.b-data-item_list-stat', $addTpl).remove();
$content.append('<h2>Превью объявлений</h2>');
$(landingItemSelector, $landingsWrap).each(function(){
var
$land = $(this),
landTitle = $('.landing-title.editing', $land).val(),
landLink = $('.landing-link.editing', $land).val(),
$landTable = $('.table.tpl-stat', $land).clone();
var $link = $(document.createElement('a'));
$link.addClass('link edited');
$link.attr('target', '_blank');
$link.attr('href', landLink);
$link.html(landLink);
$('.del', $landTable).remove();
$content.append('<h3 class="land-title">' + landTitle + '</h3>');
// Шаблонов нет:
if ($('.b-data-item_list-tpl-stat', $land).hasClass('hidden')) {
var
$addTplItem = $addTpl.clone(),
$addLink = $link.clone();
//$('.price.edited', $addTplItem).after($addLink);
$('.add-id', $addTplItem).before($addLink);
$content.append('<div style="height: 20px;"></div>');
$content.append($addTplItem);
}
$('.table.tpl-stat tbody tr', $land).each(function(){
if (!$(this).hasClass('not-active')) { // не отображаем превью для неактивных данных
var
$tableItem = $landTable.clone(),
$addTplItem = $addTpl.clone(),
$addLink = $link.clone(),
indTr = $('.table.tpl-stat tbody tr', $land).index(this),
dataTpl = [],
$adId = $('.add-id', $addTplItem);
$('thead.layout', $tableItem).remove();
$('tbody tr', $tableItem).not(':eq('+ indTr +')').remove();
$('tbody tr td', $tableItem).each(function(){
var
$td = $(this),
$inputTd = $('input', $td),
tdVal = $inputTd.val(),
indTd = $('tbody tr td', $tableItem).index(this),
tdName = $('thead tr th', $tableItem).eq(indTd).text();
// Убираем ячейки со стат. данными
if ($td.hasClass('stat')) {
$td.remove();
$('thead tr th', $tableItem).eq(indTd).remove();
}
$inputTd.remove();
$td.text(tdVal);
dataTpl.push([tdName, tdVal])
});
var priceValue = '';
dataTpl.forEach(function(val){
if (val[0] == 'price') priceValue = val[1];
});
$adId.before($('<div class="price edited">' + priceValue + '</div><br />'));
$adId.before($addLink);
$('.edited', $addTplItem).each(function(){
var textString = $(this).text();
dataTpl.forEach(function(val){
var regex = new RegExp('\\$\\['+ val[0] +'\\]', "g");
textString = textString.replace(regex, val[1]);
});
$(this).text(textString);
if ($(this).hasClass('link')) {
$(this).attr('href', textString);
}
});
$content.append($tableItem);
$content.append($addTplItem);
}
});
});
$popupInner.append($content)
}
function InsertPopupContentTpl($target)
{
var
$content = $(document.createElement('div')),
$tr = $target.parents('tr'),
$land = $target.parents('.landing-item'),
$table = $target.parents('table'),
landLink = $('.landing-link.editing', $land).val(),
dataTpl = [];
$('td', $tr).not('.del').each(function(){
var
$td = $(this),
$inputTd = $('input', $td),
tdVal = $inputTd.val(),
indTd = $('td', $tr).index(this),
tdName = $('thead:not(.layout) tr th', $table).eq(indTd).text();
dataTpl.push([tdName, tdVal]);
});
$content.append('<h2>Превью шаблонов</h2>');
var $link = $(document.createElement('a'));
$link.addClass('link edited');
$link.attr('target', '_blank');
$link.attr('href', landLink);
$link.html(landLink);
$(addItemSelector, $addsWrap).each(function(){
var
$addTplItem = $(this).clone(),
$addLink = $link.clone(),
$adId = $('.add-id', $addTplItem);
var priceValue = '';
dataTpl.forEach(function(val){
if (val[0] == 'price') priceValue = val[1];
});
$adId.before($('<div class="price edited">' + priceValue + '</div><br />'));
$adId.before($addLink);
$('input, .btn.preview', $addTplItem).remove();
$('.b-data-item_list-stat', $addTplItem).remove();
$('.edited', $addTplItem).each(function(){
var textString = $(this).text();
dataTpl.forEach(function(val){
var regex = new RegExp('\\$\\['+ val[0] +'\\]', "g");
textString = textString.replace(regex, val[1]);
});
$(this).text(textString);
if ($(this).hasClass('link')) {
$(this).attr('href', textString);
}
});
$content.append($addTplItem);
});
$popupInner.append($content)
}
})();
// Клик на "Сохранить":
$('.btn.btn-primary.submit-action').on('click', function(){
window.onbeforeunload = function() {};
if ($('input.form-control.tpl', $addsLandingsWrap).hasClass('not-valid')) {
alert('Проверьте данные в полях ввода!');
return false;
}
var
$form = $('#offer-create-form'),
action = $form.attr('action'),
method = $form.attr('method'),
formData = new FormData(),
warningInfo;
// Данные настроек:
var offerTitle = $('.offer-title.editing').val();
if (offerTitle == '') {
warningInfo = 'Введите название оффера';
}
formData.append('title', offerTitle);
formData.append('disabled', ($('.form-group.offer-enable input').prop('checked')) ? 0 : 1);
formData.append('lang', $('.form-control.offer-language').val());
formData.append('rating', $('.form-control.offer-rating').val());
// Данные категорий:
var cat = [];
$('.b-categories .category-item').each(function(){
var
$this = $(this),
id = parseInt($('.offer-category', $this).val()),
sub = parseInt($('.offer-subcategory', $this).val());
if (id != '' && sub != '') {
cat.push({'id':id, 'sub':sub})
} else {
warningInfo = 'Укажите категорию (подкатегорию)';
}
});
formData.append('cat', JSON.stringify(cat));
// Данные лендингов:
var landings = [];
$('.landing-item', $landingsWrap).each(function(){
// Не учитываем редактируемые:
if ($(this).parents('.b-data-item_add-list-place').length>0) {
return false;
}
var
$this = $(this),
geoValue = [],
deviceValue = [],
dataTemplateValues = {},
$table = $('.b-data-item_list-tpl-stat table.tpl-stat', $this),
$tableHeaders = $('thead:not(.layout) th:not(.del):not(.stat)', $table),
$tableBodyRow = $('tbody tr', $table),
landingId = $this.data('id'),
landingIsDisabled = $this.hasClass('disabled'),
isNotEmptyTable = false;
// link
var linkValue = $('.landing-link.editing', $this).val();
if (linkValue.indexOf("${imp}") < 0) {
warningInfo = 'Отсутствует индентификатор просмотра ${imp} в ссылке лендинга: ' + linkValue;
}
// geo
$('.landingdata-item.geo .values-string span', $this).each(function(){
geoValue.push($(this).data('id'));
});
// device
$('.landingdata-item.device input[type="checkbox"]', $this).each(function(){
if ($(this).prop('checked')) {
deviceValue.push($(this).attr('name'));
}
});
// tpl
if (!$('.b-data-item_list-tpl-stat', $this).hasClass('hidden')) {
$tableBodyRow.each(function(){
if (!$(this).hasClass('not-active')) {
var
valuesItem = {},
$cellId = $('td.tpl:first', $(this)),
$allCells = $('td', $(this)),
$cells = $('td:not(:last):not(:first):not(.stat):not(.del):not(.templ-id)', $(this)),
id_name, val, ind,
isNotEmptyCell = false;
id_name = $.trim($('input', $cellId).val());
if (id_name != '') {
$cells.each(function(){
val = $.trim($('input', $(this)).val());
ind = $allCells.index($(this));
valuesItem[$tableHeaders.eq(ind-1).text()] = val;
if (val != "") {
isNotEmptyCell = true;
} else {
if (!landingIsDisabled) {
warningInfo = 'Не установлено значение ' + $tableHeaders.eq(ind-1).text() + ' в шаблоне лендинга id=' + landingId;
}
}
});
if (isNotEmptyCell) {
dataTemplateValues[id_name] = valuesItem;
} else {
dataTemplateValues[id_name] = {};
}
isNotEmptyTable = true;
} else {
if (!landingIsDisabled) {
warningInfo = 'Не установлено значение id' + ' в шаблоне лендинга id=' + landingId;
}
}
}
});
}
landings.push({
'id': landingId,
'disabled': landingIsDisabled,
'title': $('.landing-title.editing', $this).val(),
'link': linkValue,
'source': parseInt($('.landing-partner', $this).val()),
'geo': geoValue,
'device': (deviceValue.length == 1) ? deviceValue[0] : null,
'tpl': (isNotEmptyTable) ? dataTemplateValues : null,
});
});
formData.append('landings', (landings.length>0) ? JSON.stringify(landings) : null);
// Данные объявлений:
var ads = [];
$('.ads-list-item', $addsWrap).each(function(){
// Не учитываем редактируемые:
if ($(this).parents('.b-data-item_add-list-place').length>0) {
return false;
}
var
$this = $(this),
imgSrc = $('img', $this).attr('src').split('?')[0];
if ($('input.editing').hasClass('not-valid')) {
warningInfo = 'В объявлениях присутствуют невалидные данные';
}
ads.push({
'id': $this.data('id'),
'disabled': $this.hasClass('disabled'),
'title': $('.title.editing', $this).val(),
'desc': $('.desc.editing', $this).val(),
'price': $('.price.editing', $this).val(),
'img': imgSrc,
});
});
formData.append('ads', (ads.length>0) ? JSON.stringify(ads) : null);
if (warningInfo) {
alert(warningInfo);
return false;
}
//console.log('AAA dataTemplateValues = ', landings);
//return false;
$.ajax(action, {
type: method,
data: formData,
cache:false,
contentType: false,
processData: false,
success: function(data) {
if(data) {
if(data.result === true && data.redirect) {
document.location.href = data.redirect;
}
if(data.result === false && data.msg) {
$.showMessage('error', data.msg);
}
}
},
error: function(rew, status, err) {
console.log(status, err);
$.showMessage('error', err);
}
});
return false;
});
// Клик на "Отмена":
$('.btn.btn-default.cancel-action').on('click', function(){
window.onbeforeunload = function() {};
window.open($(this).attr('href'), '_self');
return false;
});
});
\ No newline at end of file
$(document).ready(function () {
"use strict";
var
$categoriesWrap = $('.b-filters');
// Отображение категорий-подкатеорий:
$categoriesWrap.on('change', 'select.data-category, select.data-subcategory', function(){
var
$this = $(this);
if ($this.hasClass('data-category')) {
var
catId = $this.val(),
$subcatWrap = $('.b-offers-list_controls-subcategory', $this.parent()),
$subcategory = $('.data-subcategory', $this.parent()),
$options = $('option', $subcategory);
// Показываем выбор подкатегрий:
(catId) ? $subcatWrap.show() : $subcatWrap.hide();
// Устанавливаем набор подкатегрий:
$options.addClass('hidden').prop('selected', false).filter('[data-parent="'+ catId +'"]').removeClass('hidden');
$options.filter('[value=""]').removeClass('hidden');
}
});
// Работа со списками:
(function(){
var
$selectAllItems = $('table.offers thead tr th input.select-all'),
$markCount = $('.b-offers-list_controls .mark-count b'),
$actionsWrap = $('.b-data-item_action'),
$actions = $('table.offers thead tr th b.action'),
$applyButton = $('button.btn.btn-primary.apply');
// Обработка получения новых данных:
$applyButton.click(function(){
$selectAllItems.prop('checked', false).change();
});
// Клик на галочку "Выбрать все":
$selectAllItems.on('change', function(){
var
$this = $(this),
isSelected = $this.prop('checked'),
$tableTr = $('table.offers tbody tr'),
markCount = 0;
if (isSelected) {
$tableTr.each(function(){
var $trItem = $(this);
if (!$trItem.hasClass('hidden') && $trItem.is(':visible')) {
$('input.is-active', $trItem).prop('checked', true);
$actionsWrap.show();
$actions.removeClass('hidden');
markCount++;
}
});
} else {
$tableTr.each(function(){
$('input.is-active', $(this)).prop('checked', false);
});
$actionsWrap.hide();
$actions.addClass('hidden');
}
$markCount.text(markCount);
});
// Клик на галочку в списке:
$('table.offers').on('change', 'input.is-active', function(){
var
offersIsCheched = false,
markCount = 0;
$('table.offers input.is-active').each(function(){
if ($(this).is(':checked')) {
offersIsCheched = true;
markCount++;
}
});
if (offersIsCheched) {
$actionsWrap.show();
$actions.removeClass('hidden');
$selectAllItems.prop('checked', true);
} else {
$selectAllItems.prop('checked', false);
$actionsWrap.hide();
$actions.addClass('hidden');
}
$markCount.text(markCount);
});
// Выбор действия с выделенными элементами:
$actions.on('click', function(){
var
$this = $(this),
actionType = $this.hasClass('activate') ? 'active' : 'disable',
$wrap = $this.parents('.panel-body'),
selectedOffersId = [];
$('table tbody tr', $wrap).each(function() {
var $item = $(this);
if ($('input.is-active', $item).is(':checked')) {
selectedOffersId.push($item.data('id'));
}
});
// Запрос на изменение статуса выбранных офферов:
if (selectedOffersId.length > 0) {
var
action = $('table', $wrap).data('action'),
method = 'POST',
data = {
'toggle_active': 1,
'is_active': (actionType == 'active') ? 1 : 0,
'id_offers': selectedOffersId,
};
$.ajax(action, {
type: method,
data: data,
success: function(data) {
$applyButton.click();
/*
$('table tbody tr', $wrap).each(function() {
var $item = $(this);
if ($('input.is-active', $item).is(':checked')) {
switch(actionType) {
case 'active':
$item.removeClass('disabled');
break;
case 'disable':
$item.addClass('disabled');
break;
}
}
});
*/
},
error: function(rew, status, err) {
console.log(status, err);
}
});
}
});
})();
});
\ No newline at end of file
$(document).ready(function () {
"use strict";
// Добавление впереди 0 у однозначных значений
function pad(number) {
var r = String(number);
if ( r.length === 1 ) {
r = '0' + r;
}
return r;
}
// Форматирование даты
function formatDate(date)
{
return date.getFullYear() +'-'+ pad(date.getMonth()+1) +'-'+ pad(date.getDate());
}
// Переключение состояния isLoadingStat
function EnableLoadingState(isLoading)
{
if (isLoading) {
$pager.addClass('state-loading');
$table.addClass('state-loading');
$exportExcelButton.hide();
$tableLoader.show();
} else {
$pager.removeClass('state-loading');
$table.removeClass('state-loading');
$exportExcelButton.show();
$tableLoader.hide();
}
}
// Выбор даты http://t1m0n.name/air-datepicker/docs/index-ru.html
var
nowDate = new Date(),
isLoadingStat = false,
$table = $('table.table-striped'),
$pager = $('.b-pager'),
$pagerStep = $('.b-pager__step'),
$pagerInfo = $('.b-pager__info'),
$pagerItems = $('.b-pager__items'),
$periodSelect = $('.order-period'),
datepicker1 = $('#date-value-1').datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(data){
$periodSelect.val('');
}
}).data('datepicker'),
datepicker2 = $('#date-value-2').datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
maxDate: nowDate,
onSelect: function(data){
$periodSelect.val('');
}
}).data('datepicker'),
$totalOrdersCount = $('.total-orders-count'),
$totalOrdersMoney = $('.total-orders-money'),
$tableLoader = $('.table-data-loading'),
$applyButton = $('.b-filters button.btn'),
$exportExcelButton = $("#btnExport"),
currentRequesData,
currentFiltersUrl,
currentSort,
currentAsc,
$filtersItems = $('.b-filters__items'),
$filtersCurrent = $('.b-filters__current'),
$filtersSitesZones = $('.b-filters_sites-zones'),
$siteExclude = $('#site-exclude'),
$zoneExclude = $('#zone-exclude'),
$country = $('select.data-country', $filtersItems),
$partner = $('select.data-partner', $filtersItems),
$status = $('select.data-status', $filtersItems);
// Выбор периода:
$('.order-period').on('change', function(){
var
$this = $(this),
period = $this.val(),
todayDate = new Date();
// Установка значений периода в дате:
switch(period) {
case 'today':
datepicker1.selectDate(todayDate);
datepicker2.selectDate(todayDate);
break;
case 'yesterday':
var yesterdayDate = new Date();
yesterdayDate.setDate(yesterdayDate.getDate()-1);
datepicker1.selectDate(yesterdayDate);
datepicker2.selectDate(yesterdayDate);
break;
case '7days':
var prev7day = new Date();
prev7day.setDate(prev7day.getDate()-7);
datepicker1.selectDate(prev7day);
datepicker2.selectDate(todayDate);
break;
case '30days':
var prev30day = new Date();
prev30day.setDate(prev30day.getDate()-30);
datepicker1.selectDate(prev30day);
datepicker2.selectDate(todayDate);
break;
case 'current_month':
var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(todayDate);
break;
case 'prev_month':
var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth()-1, 1);
var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 0);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(lastDay);
break;
case 'year':
var firstDay = new Date(todayDate.getFullYear(), 0, 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(todayDate);
break;
default:
datepicker1.clear();
datepicker2.clear();
break;
}
$this.val(period);
});
function selectOrdersData(isLocationHash)
{
var
country = ($('select.data-country', $filtersCurrent).length>0) ? $('select.data-country', $filtersCurrent).val() : $country.val(),
partner = ($('select.data-partner', $filtersCurrent).length>0) ? $('select.data-partner', $filtersCurrent).val() : $partner.val(),
status = ($('select.data-status', $filtersCurrent).length>0) ? $('select.data-status', $filtersCurrent).val() : $status.val(),
sitesFilter = null,
zonesFilter = null,
listSites = [],
listZones = [],
sitesExeclude = null,
zonesExeclude = null,
dates = null,
datesValues = [],
date0, date1,
sort = currentSort,
asc = currentAsc,
filtersUrl = '',
getHashVars = !(isLocationHash !== undefined && !isLocationHash);
date0 = (datepicker1.selectedDates[0]) ? new Date(datepicker1.selectedDates[0]) : nowDate;
date1 = (datepicker2.selectedDates[0]) ? new Date(datepicker2.selectedDates[0]) : nowDate;
dates = [new Date(date0.getFullYear()+'-'+(date0.getMonth()+1)+'-'+date0.getDate()), new Date(date1.getFullYear()+'-'+(date1.getMonth()+1)+'-'+date1.getDate())];
datesValues.push(formatDate(datepicker1.selectedDates[0]));
datesValues.push(formatDate(datepicker2.selectedDates[0]));
// Дата "от" позже, чем "до":
if (dates[0] > dates[1]) {
datepicker1.selectDate(date1);
datepicker2.selectDate(date1);
return false;
}
// Устанавливаем фильтры в url:
if (getHashVars) {
filtersUrl += '&dates=' + datesValues.join(',');
filtersUrl += (country) ? '&country=' + country : '';
filtersUrl += (partner) ? '&partner=' + partner : '';
filtersUrl += (status) ? '&status=' + status : '';
filtersUrl += (sort) ? '&sort=' + sort : '';
filtersUrl += (asc) ? '&asc=' + asc : '';
}
// Фильтры по сайтам-зонам:
if ($('.b-filters_site .values-string-list li').length == 0) {
if (currentFilters['sites_in']) {
listSites = currentFilters['sites_in'];
sitesExeclude = 0;
}
if (currentFilters['sites_not']) {
listSites = currentFilters['sites_not'];
sitesExeclude = 1;
}
if (currentFilters['zones_in']) {
listZones = currentFilters['zones_in'];
zonesExeclude = 0;
}
if (currentFilters['zones_not']) {
listZones = currentFilters['zones_not'];
zonesExeclude = 1;
}
} else {
$('.b-filters_site .values-string-list li').each(function(){
listSites.push($('input', $(this)).data('id'));
});
sitesExeclude = ($siteExclude.is(':checked')) ? 1 : 0;
$('.b-filters_zone .values-string-list li').each(function(){
listZones.push($('input', $(this)).data('id'));
});
zonesExeclude = ($zoneExclude.is(':checked')) ? 1 : 0;
}
if (listSites.length > 0) {
sitesFilter = {
'exclude': sitesExeclude,
'list': listSites
};
if (sitesFilter.exclude) {
filtersUrl += '&sites_not=' + sitesFilter.list.join(',');
} else {
filtersUrl += '&sites_in=' + sitesFilter.list.join(',');
}
}
if (listZones.length > 0) {
zonesFilter = {
'exclude': zonesExeclude,
'list': listZones
};
if (zonesFilter.exclude) {
filtersUrl += '&zones_not=' + zonesFilter.list.join(',');
} else {
filtersUrl += '&zones_in=' + zonesFilter.list.join(',');
}
}
filtersUrl = (filtersUrl == '') ? '' : '#' + filtersUrl;
history.replaceState( {} , null, location.pathname + filtersUrl);
// Запрос данных в соответствии с установленнымифильтрами:
var requestData = {
action: 'list',
dates: datesValues
};
if (country) requestData['country'] = country;
if (partner) requestData['partner'] = partner;
if (status) requestData['status'] = status;
if (sort) requestData['sort'] = sort;
if (asc) requestData['asc'] = asc;
if (sitesFilter) requestData['sites'] = sitesFilter;
if (zonesFilter) requestData['zones'] = zonesFilter;
setFiltersControls(requestData);
currentRequesData = requestData;
currentFiltersUrl = filtersUrl
requestDataFilters(requestData);
}
// Запрос данных для таблицы, в соответствии с фильтрами:
function requestDataFilters(dataRequest)
{
//console.log('AAA requestDataFilters ', dataRequest);
dataRequest['step'] = parseInt($('select', $pagerStep).val());
isLoadingStat = true;
EnableLoadingState(isLoadingStat);
$.ajax({
url: $applyButton.attr('data-link'),
method: 'POST',
data: dataRequest,
success: function(res) {
isLoadingStat = false;
EnableLoadingState(isLoadingStat);
if (res == null) {
console.log("AAA requestDataStatReport success res: NULL");
} else if (res.status == 'Error') {
console.log("AAA requestDataStatReport error");
} else {
//console.log("AAA requestDataStatReport success res: SUCCESS", res);
renderOrdersTable(res.data);
renderPager([res.pager, res.info]);
renderInfo(res.total);
markSortTable(res.sort);
}
},
error: function (e) {
console.log('error: ', e);
isLoadingStat = false;
EnableLoadingState(isLoadingStat);
}
});
}
// Отрисовка таблицы:
function renderOrdersTable(data)
{
var
$tableBody = $('tbody', $table),
$tableContent = $('<tbody>');
for (var i = 0; i < data.length; i++) {
//console.log('AAA order = ', data[i]);
var
itemOrder = data[i],
date = (itemOrder.Timestamp).split(' '),
statusStyle;
switch(itemOrder.status) {
case 'new': statusStyle = 'color: #deb30b;'; break;
case 'lead': statusStyle = 'color: #337ab7;';break;
case 'sale': statusStyle = 'color: #009444;'; break;
case 'reject': statusStyle = 'color: #FF0909;'; break;
case 'decline': statusStyle = 'color: #8F0909;'; break;
}
var $orderTr = $('<tr data-order="' + itemOrder.OrderID + '" data-status="' + itemOrder.status + '" data-country="' + itemOrder.Country + '" data-partner="' + itemOrder.PartnerID + '" data-timestamp="' + itemOrder.Timestamp + '">');
$('<td class="is-br"><span class="item-id">' + itemOrder.OrderID + '</span></td>').appendTo($orderTr);
$('<td class="is-br"><span class="item-timestamp">' + date[0] + '</span><br /><b>' + date[1] + '</b></td>').appendTo($orderTr);
$('<td class="is-br"><span class="item-browser"><b>' + itemOrder.BrowserNameRaw + '</b><br />' + itemOrder.BrowserVerRaw + '</span></td>').appendTo($orderTr);
$('<td class="is-br"><span class="item-country"><b>' + itemOrder.Country + '</b><br />' + itemOrder.IP + '</span></td>').appendTo($orderTr);
$('<td class="is-br"><span class="item-site"><b>' + itemOrder.site_id + '</b><br /><span class="zone-id">' + itemOrder.zone_id + '</span></span></td>').appendTo($orderTr);
if (itemOrder.OfferID) {
var offerLink = '/ru/offers-system/offer/' + itemOrder.OfferID + '/';
$('<td class="is-br"><a href="' + offerLink + '"><span class="item-offer"><b>' + itemOrder.offer_title + '</b></span></a><br />' + itemOrder.ad_id + '</td>').appendTo($orderTr);
} else {
$('<td class="is-br"><span class="item-offer">' + itemOrder.offer_title + '</span><br />' + itemOrder.ad_id + '</td>').appendTo($orderTr);
}
$('<td class="is-br"><span class="item-land">[' + itemOrder.land_id + ']&nbsp;' + itemOrder.land_title + '<br /><b>' + itemOrder.AdDataID + '</b>, ' + itemOrder.partner_name + '</span></td>').appendTo($orderTr);
$('<td class="is-br" style="' + statusStyle + '"><span class="item-status">' + itemOrder.status + '</span></td>').appendTo($orderTr);
$('<td class="is-br"><span class="item-price"><b>' + itemOrder.sale_price + ' $</b></span></td>').appendTo($orderTr);
$orderTr.appendTo($tableContent);
}
$tableBody.html('').append($tableContent.children());
}
// Отрисовка сводной инфо:
function renderInfo(info)
{
$totalOrdersCount.text(info.count);
$totalOrdersMoney.text(Math.round(info.sum*100)/100 + ' $');
}
// Отрисовка пейджера:
function renderPager(dataPager)
{
var
data = dataPager[0],
info = dataPager[1];
if (data) {
var $pagerContent = $('<ul>');
// Отображать "<"
if (data[1] > 1) {
$('<li data-page="' + (data[1]-1) + '"> &lt; </li>').appendTo($pagerContent);
}
// Страниц не больше 7
if (data[0] < 8) {
for (var i = 0; i < data[0]; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
} else {
if (data[1]<5) {
for (var i = 0; i < 5; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
$('<li data-page="' + data[0] + '">' + data[0] + '</li>').appendTo($pagerContent);
}
if (data[1]>=5 && data[1]<=data[0]-3) {
$('<li data-page="' + 1 + '">' + 1 + '</li>').appendTo($pagerContent);
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
for (var i = data[1]-2; i < data[1]+1; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
$('<li data-page="' + data[0] + '">' + data[0] + '</li>').appendTo($pagerContent);
}
if (data[1]>data[0]-3) {
$('<li data-page="' + 1 + '">' + 1 + '</li>').appendTo($pagerContent);
$('<li class="not-active"> ... </li>').appendTo($pagerContent);
for (var i = data[0]-5; i < data[0]; i++) {
$('<li' + ((i+1 == data[1]) ? ' class="current"' : '') + ' data-page="' + (i+1) + '">' + (i+1) + '</li>').appendTo($pagerContent);
}
}
}
// Отображать ">"
if (data[1] < data[0]) {
$('<li data-page="' + (data[1]+1) + '"> &gt; </li>').appendTo($pagerContent);
}
$pagerItems.html('').append($pagerContent);
}
if (info) {
$('.from', $pagerInfo).text(info.items_interval[0]);
$('.to', $pagerInfo).text(info.items_interval[1]);
$('.total', $pagerInfo).text(info.items_count);
}
}
// Показываем сортировку в таблице:
function markSortTable(dataSort)
{
var $sortTr = $('thead th span[data-sort="' + dataSort[0] + '"]', $table);
$('thead th span', $table).removeClass('current').removeClass('asc').removeClass('desc');
$sortTr.addClass('current').addClass((dataSort[1]>0) ? 'desc' : 'asc').attr('data-sortasc', (dataSort[1]>0) ? -1 : 1);
}
// Распарсиваем строку URL с фильтрами:
var
hashUrl = location.hash.replace('#', '').split('&'),
filtersNames = ['dates', 'country', 'status', 'partner', 'sites_in', 'sites_not', 'zones_in', 'zones_not'],
currentFilters = [];
hashUrl.forEach(function(item) {
if (item != '' && item.indexOf('=')>-1) {
var
filterItem = item.split('='),
filterName = filterItem[0],
filterValue = (filterItem[1] == '') ? null : filterItem[1].split(',');
if (filtersNames.indexOf(filterName) != -1 && filterValue) {
currentFilters[filterName] = filterValue;
}
}
});
// Устанавливаем фильтры по url:
if (Object.keys(currentFilters).length > 0) {
setFiltersControls(currentFilters);
if (currentFilters['dates']) {
datepicker1.selectDate(new Date(currentFilters['dates'][0] + ' 00:00:00'));
datepicker2.selectDate(new Date(currentFilters['dates'][1] + ' 00:00:00'));
};
if (currentFilters['sort']) currentSort = currentFilters['sort'][0];
if (currentFilters['asc']) currentAsc = currentFilters['asc'][0];
} else {
// Установка стартовых значений дат:
datepicker1.selectDate(nowDate);
datepicker2.selectDate(nowDate);
$periodSelect.val('today');
$status.val('leadOrSaleOrNew');
}
// Стартовая фильтрация:
var isLocationHash = (location.hash == "") ? false : true;
selectOrdersData(isLocationHash);
function setCurrentFilters(filtersUrl)
{
var
hashUrl = filtersUrl.replace('#', '').split('&'),
currentFilters = [];
hashUrl.forEach(function(item) {
if (item != '' && item.indexOf('=')>-1) {
var
filterItem = item.split('='),
filterName = filterItem[0],
filterValue = (filterItem[1] == '') ? null : filterItem[1].split(',');
if (filtersNames.indexOf(filterName) != -1 && filterValue) {
currentFilters[filterName] = filterValue;
}
}
});
// Устанавливаем фильтры по url:
if (Object.keys(currentFilters).length > 0) {
if (currentFilters['dates']) {
datepicker1.selectDate(new Date(currentFilters['dates'][0] + ' 00:00:00'));
datepicker2.selectDate(new Date(currentFilters['dates'][1] + ' 00:00:00'));
};
} else {
datepicker1.selectDate(nowDate);
datepicker2.selectDate(nowDate);
$periodSelect.val('today');
}
setFiltersControls(currentFilters);
}
// Клик на "Применить"
$applyButton.click(function(){
selectOrdersData();
});
// Клик на страницу пейджера:
$pager.on('click', 'li', function(){
var
$pagerItem = $(this);
if (!$pagerItem.hasClass('current')) {
currentRequesData['page'] = parseInt($pagerItem.text());
setCurrentFilters(currentFiltersUrl);
requestDataFilters(currentRequesData);
}
});
// Смена шага пейджера:
$('select', $pagerStep).on('change', function(){
var $stepValue = $(this).val();
$('select', $pagerStep).val($stepValue);
currentRequesData['page'] = null;
setCurrentFilters(currentFiltersUrl);
requestDataFilters(currentRequesData);
});
// Сортировка в таблице:
$('table.table-striped thead th span.sort').on('click', function(){
var
$this = $(this),
sort = $this.data('sort'),
asc = $this.attr('data-sortasc'),
filtersSortUrl = '',
currentSortUrl = '';
if (currentRequesData['sort']) {
currentSortUrl += '&sort=' + currentRequesData['sort'];
}
if (currentRequesData['asc']) {
currentSortUrl += '&asc=' + currentRequesData['asc'];
}
currentRequesData['sort'] = sort;
currentRequesData['asc'] = asc;
currentSort = sort;
currentAsc = asc;
if (currentSortUrl) {
currentFiltersUrl = currentFiltersUrl.replace(currentSortUrl, '');
}
// Добавляем фильтры в url:
filtersSortUrl += '&sort=' + sort + '&asc=' + asc;
filtersSortUrl = (currentFiltersUrl == '') ? '#' + filtersSortUrl : currentFiltersUrl + filtersSortUrl;
history.replaceState( {} , null, location.pathname + filtersSortUrl);
setCurrentFilters(currentFiltersUrl);
requestDataFilters(currentRequesData);
});
// Выгрузка таблицы в Excel
$exportExcelButton.click(function(){
$("#table2excel").table2excel({
exclude: ".noExl",
name: "Worksheet Name",
filename: "Orders"
});
});
// Управление отображением фильтров:
(function(){
var
$filtersShow = $('.b-filters__show'),
$filtersSitesShow = $('.b-filters-sites-zones__show');
// Показать фильтры:
$filtersShow.on('click', function(){
$filtersItems.toggle();
});
// Показать фильтры по сайтам-зонам:
$filtersSitesShow.on('click', function(){
$filtersSitesZones.toggle();
});
})();
// Фильтры по странам-зонам:
(function(){
var
$filtersItems = $('.b-filters_site, .b-filters_zone'),
$sitesList = $('.b-filters_site .values-string-list');
// Запрос списка фильтров:
function RequestFilters() {
// Подгружаем список фильтров:
var
templateSiteItem = _.template('' +
'<li>' +
' <input type="checkbox" id="site-id-<%= site.site_id %>" data-id="<%= site.site_id %>" data-text="<%= site.domain %>">' +
' <label for="site-id-<%= site.id %>">[<%= site.site_id %>] <%= site.domain %></label>' +
'</li>'
),
templateZoneItem = _.template('' +
'<li data-site="<%= data[\'site_id\'] %>" data-domain="<%= data[\'domain\'] %>">' +
' <input type="checkbox" id="zone-id-<%= zoneId %>" data-id="<%= zoneId %>" data-text="<%= zoneId %>" data-size="<%= data[\'size\'] %>">' +
' <label for="zone-id-<%= zoneId %>"><%= zoneId %> [<%= data[\'size\'] %>] - <%= data[\'domain\'] %></label>' +
'</li>'
);
var
$filtersSitesZonesControls = $('.b-filters_sites-zones button, .b-filters_sites-zones input'),
$filtersSitesZonesWrap = $('.b-filters_sites-zones');
$filtersSitesZonesControls.prop('disabled', true);
$filtersSitesZonesWrap.addClass('state-loading');
// Запрашиваем списки сайтов и зон:
$.ajax({
url: $applyButton.attr('data-link'),
method: 'POST',
data: {
action: 'siteszoneslist',
},
success: function(sitesZonesList) {
if (sitesZonesList) {
var
$sitesListWrap = $('.b-filters_site .list-filter'),
$zonesListWrap = $('.b-template-zones-list');
sitesZonesList.forEach(function(item) {
$sitesListWrap.append(templateSiteItem({site: item}));
item['zones'].forEach(function(zone) {
$zonesListWrap.append(templateZoneItem({zoneId: zone[0], data: {site_id: item['site_id'], domain: item['domain'], size: zone[1]}}));
});
});
}
$filtersSitesZonesControls.prop('disabled', false);
$filtersSitesZonesWrap.removeClass('state-loading');
SetCurrentFilters(currentFilters, 'sites');
SetCurrentFilters(currentFilters, 'zones');
},
error: function (e) {
console.log('error siteslist: ', e);
}
});
}
// Устанавливаем значения для текущих фильтров:
function SetCurrentFilters(currentFilters, type)
{
var
filtersVars = ['sites_in', 'sites_not', 'zones_in', 'zones_not'],
isFiltersInCurrent = false;
filtersVars.forEach(function(item) {
isFiltersInCurrent = (currentFilters[item]) ? true : isFiltersInCurrent;
});
if (!isFiltersInCurrent) {
return false;
}
// Разворачиваем фильтры:
$filtersSitesZones.show();
switch(type) {
case 'sites':
if (currentFilters.sites_in || currentFilters.sites_not) {
if (currentFilters.sites_not) {
$siteExclude.prop("checked", true);
}
(currentFilters.sites_in || currentFilters.sites_not).forEach(function(item) {
$('.b-filters_site .list-filter input[data-id="' + item + '"]').click();
});
}
break;
case 'zones':
if (currentFilters.zones_in || currentFilters.zones_not) {
if (currentFilters.zones_not) {
$zoneExclude.prop("checked", true);
}
(currentFilters.zones_in || currentFilters.zones_not).forEach(function(item) {
$('.b-filters_zone .list-filter input[data-id="' + item + '"]').click();
});
}
break;
}
}
// Обработка изменения в списках сайтов-фильтров:
function ChangeListSites() {
var
$filtersZone = $('.b-filters_zone'),
$sitesItems = $('.b-filters_site .values-string-list li'),
noFilterSites = ($sitesItems.length == 0) ? true : false,
$selectedZones = $('.b-filters_zone .values-string-list'),
$listZones = $('.b-filters_zone .list-filter');
// Пустой список фильтров-сайтов:
if (noFilterSites) {
$filtersZone.hide();
$selectedZones.empty();
$listZones.empty();
} else {
$listZones.empty();
$sitesItems.each(function(){
var
siteId = $('input', $(this)).data('id'),
$zoneItems = $('.b-template-zones-list li[data-site="'+ siteId +'"]').clone(),
$input,
$label,
zoneId;
$zoneItems.each(function(ind, $zoneItem){
$input = $('input', $zoneItem),
$label = $('label', $zoneItem),
zoneId = $input.attr('id');
$input.attr('id', 'm_' + zoneId);
$label.attr('for', 'm_' + zoneId);
});
$listZones.append($zoneItems);
});
// Логика выставления галочек уже выбранных зон:
$('li', $selectedZones).each(function(){
var
//zoneItemId = $(this).data('id'),
zoneItemId = $('input', $(this)).data('id'),
$zoneItem = $('input[data-id="' + zoneItemId + '"]', $listZones);
// Удаления зоны из списка при удалении её сайта:
if ($zoneItem.length == 0) {
$(this).remove();
} else {
$zoneItem.attr('checked', true);
}
});
$filtersZone.show();
}
}
RequestFilters();
// Изменение списка фильтров чекбоксом:
$filtersItems.on('change', '.list-filter input',function(){
var
$listItems = $('li', $(this).parents('ul')),
$listString = $('.values-string-list', $(this).parents('.form-group')[0]),
values = [],
tplId = ($(this).parents('.b-filters_site').length) ? 'l-site-id-' : 'l-zone-id-';
$listItems.each(function(){
var
$this = $(this),
$checkbox = $('input', $this);
if ($checkbox.is(':checked')) {
values.push([$checkbox.data('id'), $checkbox.data('text')]);
}
});
$listString.empty();
if (values.length > 0) {
values.forEach(function(valuesItem) {
$listString.append('<li><input type="checkbox" checked id="' + tplId + valuesItem[0] + '" data-id="' + valuesItem[0] + '" data-text="' + valuesItem[1] + '"> <label for="' + tplId + valuesItem[0] + '">[' + valuesItem[0] + '] ' + valuesItem[1] + '</label></li>');
});
}
$listString.trigger('change');
});
// Изменение фильтрации внутри фильтра:
$filtersItems.on('keyup', 'input.filter',function(){
var
$this = $(this),
val = $this.val(),
$listItems = $('.filters-select li', $this.parents('.form-group'));
// Фильтрация списка сайтов:
if ($this.attr('name') == 'sites-filter') {
$listItems.each(function(){
var
$item = $(this),
id = $('input', $item).data('id').toString(),
domain = $('input', $item).data('text'),
reg = new RegExp("^\\d+"+val+"$", "i");
$item.hide();
if (domain.indexOf(val) == 0 || id.match(reg)) {
$item.show();
}
});
}
// Фильтрация списка зон:
if ($this.attr('name') == 'zones-filter') {
$listItems.each(function(){
var
$item = $(this),
id = $('input', $item).data('id').toString(),
size = $('input', $item).data('size'),
width = size.split('x')[0],
height = size.split('x')[1],
reg = new RegExp("^\\d+"+val+"$", "i");
$item.hide();
if (size == val || width == val || height == val || id.match(reg)) {
$item.show();
}
});
}
});
// Удаление из списка фильтров снятием галочки:
$filtersItems.on('change', '.values-string-list input',function(){
var
itemId = $(this).data('id'),
$listFilterItem = $('.list-filter input[data-id="' + itemId + '"]', $(this).parents('.form-group'));
$listFilterItem.attr('checked', false);
$listFilterItem.change();
});
// Отслеживаем изменение в списках сайтов:
$sitesList.on('change', function(){
ChangeListSites();
});
})();
// Устанавливаем набор фильтров по данным:
function setFiltersControls(filters)
{
var
filtersList = ['status', 'partner', 'country', 'sites_in', 'sites_not', 'zones_in', 'zones_not'],
name;
$filtersCurrent.empty();
if (Object.keys(filters).length > 0) {
filtersList.forEach(function(item) {
name = item;
var $filterItemList = $('.form-group.' + name).parents('.b-filters__list-item');
if (filters[item]) {
var $itemFilter = $filterItemList.clone();
$('select.form-control', $itemFilter).val(filters[name]);
$('select.form-control.data-' + name, $filtersItems).val(filters[name]);
$filterItemList.hide();
$itemFilter.show();
$filtersCurrent.append($itemFilter);
if (['sites_in', 'sites_not', 'zones_in', 'zones_not'].indexOf(name)>-1) {
$filtersSitesZones.show();
}
} else {
$('select.form-control.data-' + name, $filtersItems).val('');
$filterItemList.show();
}
});
}
}
});
\ No newline at end of file
$(document).ready(function () {
"use strict";
// Работа со списками на стр. списка партнерок:
(function(){
var
$selectAllItems = $('table.partners thead tr th input.select-all'),
$actions = $('table.partners thead tr th b.action'),
$applyButton = $('button.btn.btn-primary.apply');
// Клик на галочку "Выбрать все":
$selectAllItems.on('change', function(){
var
$this = $(this),
isSelected = $this.prop('checked'),
$tableTr = $('table.partners tbody tr');
if (isSelected) {
$tableTr.each(function(){
$('input.is-active', $(this)).prop('checked', true);
});
$actions.removeClass('hidden');
} else {
$tableTr.each(function(){
$('input.is-active', $(this)).prop('checked', false);
});
$actions.addClass('hidden');
}
});
// Клик на галочку в списке:
$('table.partners').on('change', 'input.is-active', function(){
var offersIsCheched = false;
$('table.partners input.is-active').each(function(){
if ($(this).is(':checked')) {
offersIsCheched = true;
}
});
if (offersIsCheched) {
$actions.removeClass('hidden');
$selectAllItems.prop('checked', true);
} else {
$selectAllItems.prop('checked', false);
$actions.addClass('hidden');
}
});
// Выбор действия с выделенными элементами:
$actions.on('click', function(){
var
$this = $(this),
actionType = $this.hasClass('activate') ? 'active' : 'disable',
$wrap = $this.parents('.panel-body'),
selectedItemsId = [];
$('table tbody tr', $wrap).each(function() {
var $item = $(this);
if ($('input.is-active', $item).is(':checked')) {
selectedItemsId.push($item.data('id'));
}
});
// Запрос на изменение статуса выбранных офферов:
if (selectedItemsId.length > 0) {
var
action = $('table', $wrap).data('action'),
method = 'POST',
data = {
'toggle_active': 1,
'is_active': (actionType == 'active') ? 1 : 0,
'id_items': selectedItemsId,
};
$.ajax(action, {
type: method,
data: data,
success: function(data) {
document.location.reload();
},
error: function(rew, status, err) {
console.log(status, err);
}
});
}
});
})();
// Клик на "Сохранить" партнёрку:
$('#partner-create-form').on('submit', function(e) {
var
formData = {},
action = $(this).attr('action'),
method = $(this).attr('method');
var vals = $(this).serializeArray();
if(vals.length) {
for(var i in vals) {
formData[vals[i].name] = vals[i].value;
}
}
$.ajax(action, {
type: method,
data: formData,
success: function(data) {
if(data) {
if(data.result === true && data.redirect) {
document.location.href = data.redirect;
}
if(data.result === false && data.msg) {
$.showMessage('error', data.msg);
}
}
},
error: function(rew, status, err) {
console.log(status, err);
}
});
return false;
});
});
\ No newline at end of file
......@@ -7,72 +7,10 @@ $(document).ready(function () {
action = $(this).attr('href'),
dataRequest;
// Стр. сайтов
if ($(this).hasClass('add-list-sites')) {
dataRequest = {addlist: true};
// Стр. стат. фидов
if ($(this).hasClass('feed-test-data')) {
dataRequest = {feedTestData: true};
}
if ($(this).hasClass('add-date-sites')) {
dataRequest = {addDate: true};
}
if ($(this).hasClass('create-json-sites')) {
dataRequest = {createJsonSites: true};
}
if ($(this).hasClass('create-providers-list')) {
dataRequest = {createProvidersList: true};
}
if ($(this).hasClass('test')) {
//dataRequest = {url: 'http://0day.kiev.ua'};
//dataRequest = {url: 'http://ua.sinoptik.ua'};
//dataRequest = {url: 'http://bigmir.net'};
//dataRequest = {url: 'http://playboyua.com.ua'};
//dataRequest = {url: 'http://kino-live.top'};
dataRequest = {url: 'http://sinoptik.ua'};
//dataRequest = {url: 'http://sinoptik.com.ru'};
//dataRequest = {url: 'http://censor.net.ua'};
//dataRequest = {url: 'http://korrespondent.net'};
//dataRequest = {url: 'http://soccer0010.com'};
//dataRequest = {url: 'http://soccer.ru'};
action = 'https://addcpm.app.dev.rew.to/conf/conf.php';
//action = 'https://addcpm.app.dev.rew.to/conf/conf.php?dev=1';
//action = 'https://www.addcpm.com/conf/conf.php';
//action = 'https://sconf.dev.rew.to/conf/conf.php';
//action = 'https://sconf.dev.rew.to/';
//action = 'https://sconf.dev.rew.to/conf/domain.php';
//action = 'https://sconf.dev.rew.to/conf/all.php';
}
if ($(this).hasClass('yesterday-stat')) {
dataRequest = {yesterdayStat: true};
}
// Стр. офферов
if ($(this).hasClass('add-list-teasers')) {
dataRequest = {addlistTeasers: true};
}
if ($(this).hasClass('edit-list-teasers')) {
dataRequest = {editlistTeasers: true};
}
if ($(this).hasClass('create-offersnew')) {
dataRequest = {createOffersNew: true};
}
if ($(this).hasClass('edit-json-tpl')) {
dataRequest = {editJsonTpl: true};
}
if ($(this).hasClass('vars-tpl')) {
dataRequest = {varsTpl: true};
}
if ($(this).hasClass('price-tpl')) {
dataRequest = {priceTpl: true};
}
if ($(this).hasClass('rename-teasers')) {
dataRequest = {renameTeasers: true};
}
if ($(this).hasClass('tpl-templates-table')) {
dataRequest = {tplTemplatesTable: true};
}
$.ajax(action, {
type: 'POST',
......
$(document).ready(function () {
"use strict";
Number.prototype.formatMoney = function(c, d, t){
var n = this,
c = isNaN(c = Math.abs(c)) ? 2 : c,
d = d == undefined ? "." : d,
t = t == undefined ? "," : t,
s = n < 0 ? "-" : "",
i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
j = (j = i.length) > 3 ? j % 3 : 0;
return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
// Исхдные данные в таблице сайтов:
var
sumTraffic = 0,
dataSites = [],
$sitesRows = $('table.table-striped tbody tr'),
$dataColumns;
// Запрос данных о доходе за вчера:
var action = $('.btn-toolbar .btn-primary').attr('href');
$.ajax(action, {
type: 'POST',
data: {yesterdayStat: true},
success: function(data) {
//console.log('AAA success: ', data);
if (data) {
$sitesRows.each(function(){
var $this = $(this);
if (data[$this.data('site')]) {
$('td.money', $this).html(data[$this.data('site')].formatMoney(2));
}
});
AddDataSites();
}
},
error: function(ajaxObj, textStatus, textError) {
//console.log('AAA error');
}
});
AddDataSites();
// Клик по названию колонки для сортировки:
Array.prototype.forEach.call(document.querySelectorAll(".sort[data-sort]"), function (el) {
$(el).on("click", function (e) {
// Сортировка в таблице
var sortField = $(this).data('sort');
var sortAsc = $(this).attr('data-sortasc');
$(this).attr('data-sortasc', -sortAsc);
//console.log('AAA sortAsc = ', sortAsc);
dataSites.sort(function(a, b) {
if (sortAsc < 0) {
return (a[sortField] > b[sortField]) ? 1 : -1;
} else {
return (a[sortField] < b[sortField]) ? 1 : -1;
}
});
// Переписываем таблицу:
var
$table = $('#table-site'),
$tableContent = $('<tbody>'),
$tableBody = $table.find('tbody').first();
for (var i = 0; i < dataSites.length; i++) {
var $row;
$row = $('<tr data-site="' + dataSites[i].domain + '">').html(dataSites[i].tr);
if (!dataSites[i].isVisible) {
$row.hide();
}
$row.appendTo($tableContent);
}
$tableBody.html('').append($tableContent.children());
});
});
// Клик на галочку "Сайт включен":
$('#table-site').on('change', 'input.is-enabled', function(e) {
var
$this = $(this),
siteId = $this.parents('tr').data('id'),
$siteTr = $this.parents('tr'),
isEnabled = $this.prop( "checked" ),
action = $this.parents('table').data('action') + siteId,
method = 'POST',
data = {
'toggle_enabled': 1,
'is_enabled': isEnabled ? 1 : 0,
};
$this.prop("disabled", true);
$.ajax(action, {
type: method,
data: data,
success: function(data) {
$this.prop("disabled", false);
if (data.result) {
if (isEnabled) {
$siteTr.removeClass('disabled');
} else {
$siteTr.addClass('disabled');
}
}
},
error: function(rew, status, err) {
console.log(status, err);
$this.prop("disabled", false);
}
});
return false;
});
// Клик на кнопку статистики:
/*
Array.prototype.forEach.call(document.querySelectorAll("button[data-link]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
document.location.href = this.getAttribute("data-link");
});
});
*/
// Выбор даты для BidStat http://t1m0n.name/air-datepicker/docs/index-ru.html
var nowDate = new Date();
$('#date-value').datepicker({
dateFormat: "yyyy-mm-dd",
autoClose: true,
range: true,
maxDate: nowDate,
onHide: function(dp, animationCompleted){
if (animationCompleted) {
selectSitesWithSelectedData(dp);
}
}
}).data('datepicker');
function selectSitesWithSelectedData(data)
{
var
selectInterval = (data.selectedDates.length > 1),
selectNoDate = (data.selectedDates.length == 0);
$sitesRows = $('table.table-striped tbody tr');
$sitesRows.each(function(i, e){
$dataColumns = $('td', $(e));
var
siteDateCreate = $.trim($('.site-create-date', $dataColumns[4]).text()),
dateSite = (new Date(siteDateCreate + ' 00:00')).getTime();
if (selectNoDate) {
$(this).show();
} else if (selectInterval) {
var
dateFrom = (new Date(data.selectedDates[0])).getTime(),
dateTo = (new Date(data.selectedDates[1])).getTime();
if (dateSite>=dateFrom && dateSite<=dateTo) {
$(this).show();
} else {
$(this).hide();
}
} else {
var dateSelect = (new Date(data.selectedDates[0])).getTime();
if (dateSite==dateSelect) {
$(this).show();
} else {
$(this).hide();
}
}
});
AddDataSites();
}
// Формирование данных о сайтах из таблицы
function AddDataSites()
{
var
$siteRow;
//siteTraffic;
//sumTraffic = 0;
dataSites = [];
$sitesRows.each(function(i, e){
$siteRow = $(e);
dataSites.push({
tr: $(e).html().replace(/\s{2,}/g, ' '),
id: $.trim($('.site-id', $siteRow).text()),
domain: $.trim($('.site-domain a', $siteRow).text()),
user: $.trim($('.user-name a', $siteRow).text()),
date: $.trim($('.site-create-date', $siteRow).text()),
//traffic: ($.trim($('.site-traffic', $siteRow).data('traffic')) !="") ? parseInt($.trim($('.site-traffic', $siteRow).data('traffic'))) : 0,
isVisible: $(e).is(':visible'),
money: ($.trim($('.money', $siteRow).html()) !="") ? parseFloat($.trim($('.money', $siteRow).html())) : 0,
});
/*
siteTraffic = $.trim($('.site-traffic', $siteRow).data('traffic'));
siteTraffic = (siteTraffic != '') ? siteTraffic : 0;
sumTraffic += ($siteRow.is(':visible')) ? parseInt(siteTraffic) : 0;
*/
});
// Прописываем суммарный траффик по выбранным сайтам:
/*
sumTraffic = sumTraffic.formatMoney(0);
$('.sum-traffic span').text(sumTraffic);
*/
}
});
\ No newline at end of file
$(document).ready(function () {
// Дата создания сайта
$('#site-date-create').datepicker({
format: 'yyyy-mm-dd',
language: $('#site-date-create').data('language')
});
/*
if($('#sites-categories').val()) {
var categoriesList = JSON.parse($('#sites-categories').val());
}
*/
// Переключение данных форм для отображения (sale-marker)
$('.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.'+type).addClass(classSelected);
});
// Список алиасов
$('#site-alias').tokenfield();
// Обработка списков значений:
(function(){
// Выбор пункта в select:
// Дописать логику смены состояния checked
// Клик на "Редактировать" для показа списка значений вместо строки:
$('.form-group-data').on('click', '.edit-item', function(){
var
$this = $(this),
$wrap = $this.parents('.form-group')[0],
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items', $wrap),
$tempState = $('.temp-state', $wrap);
$tempState.empty();
$tempState.html($valuesItems.html());
CheckNoValues($this);
$this.hide();
$valuesString.hide();
$valuesEdit.show();
return false;
});
// Клик на "Добавить" значение в список:
$('.form-group-data').on('click', '.add-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$valuesItems = $('.values-items', $wrap),
$tplInput;
if ($wrap.hasClass('hidezones')) {
$tplInput = $('.input-pattern .input-item').clone();
}
if ($wrap.hasClass('stophide')) {
$tplInput = $('.input-pattern .input-item').clone();
}
if ($wrap.hasClass('selectors')) {
$tplInput = $('.input-pattern .input-item').clone();
}
if ($wrap.hasClass('more_selectors')) {
$tplInput = $('.input-pattern .input-item').clone();
}
if ($wrap.hasClass('providers')) {
$tplInput = $('.providers-pattern .input-item').clone();
}
if ($wrap.hasClass('codes_id')) {
$tplInput = $('.zone-pattern .input-item').clone();
}
if ($wrap.hasClass('zones_id')) {
$tplInput = $('.slot-pattern .input-item').clone();
}
$valuesItems.append($tplInput);
CheckNoValues($(this));
return false;
});
// Клик на "Удалить" значение из списка:
$('.form-group-data').on('click', '.delete-input', function(){
var
$wrap = $(this).parents('.input-item'),
$items = $(this).parents('.values-items');
$wrap.remove();
CheckNoValues($items);
return false;
});
// Клик на "Отмена" показа списка:
$('.form-group-data').on('click', '.cancel-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$edit = $('.edit-item', $wrap),
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items', $wrap),
$tempState = $('.temp-state', $wrap);
$valuesItems.html($tempState.html());
$tempState.empty();
$edit.show();
$valuesString.show();
$valuesEdit.hide();
return false;
});
// Клик на "Сохранить" список значений:
$('.form-group-data').on('click', '.save-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$edit = $('.edit-item', $wrap),
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items .input-item', $wrap),
$tempState = $('.temp-state', $wrap),
dataItems = [];
markerDataIsChanged = true;
$valuesItems.each(function(){
var
$this = $(this),
itemValue;
if ($('select', $this).length) {
itemValue = $('select', $this).val();
if (itemValue == 'other') {
itemValue = $.trim($('input', $this).val());
$('input', $this).attr("value", itemValue);
}
} else {
itemValue = $.trim($('input', $this).val());
$('input', $this).attr("value", itemValue);
}
if (itemValue) {
dataItems.push(itemValue);
}
});
$valuesString.empty();
dataItems.forEach(function(item){
$valuesString.append('<span>' + item + '</span> ');
});
if ($wrap.hasClass('codes_id')) {
var $infoCodes = $('.zone-info .codes-titles', $wrap.parents('.zone-item'));
$infoCodes.empty();
$infoCodes.html(dataItems.join(', '));
}
$tempState.empty();
$edit.show();
$valuesString.show();
$valuesEdit.hide();
return false;
});
function CheckNoValues($this)
{
var
$wrap = $('.values-edit', $this.parents('.form-group')[0]),
$inputItems = $('.values-items .input-item', $wrap),
$noValues = $('.no-values', $wrap);
if ($inputItems.length) {
$noValues.hide();
} else {
$noValues.show();
}
}
})();
// Владелец сайта и другие пользователи, которым доступен сайт:
(function(){
var
$inputAccessUser = $('#site-access-user'),
delimiterAccessUser = ';';
$inputAccessUser.tokenfield({delimiter: delimiterAccessUser, beautify: false});
// Изменение владельца сайта
$('select.site-user').on('change', function() {
var
optionSelected = $("option:selected", this),
selectedUser = optionSelected.text().trim(),
dataAccessUsers = $inputAccessUser.tokenfield('getTokensList').split(delimiterAccessUser);
if (dataAccessUsers.indexOf(selectedUser) > -1)
{
alert('Данный пользователь в списке пользователей, которым доступен сайт!');
$(this).val(0);
}
});
// Добавление пользователя:
$('.add-access-user').click(function(){
var
addUser = $('select.access-user').val(),
listAddUsers = $inputAccessUser.tokenfield('getTokensList'),
dataAddUsers = listAddUsers.split(delimiterAccessUser),
siteUser = $('select.site-user option:selected').text().trim();
if (!addUser) {
return false;
}
if (addUser == siteUser)
{
alert('Выбранный пользователь уже указан как владелец сайта!');
}
else if (dataAddUsers.indexOf(addUser) > -1)
{
alert('Выбранный пользователь уже присутствует в списке!');
}
else
{
$inputAccessUser.tokenfield('setTokens', listAddUsers + delimiterAccessUser + addUser);
}
return false;
});
})();
// Категории
(function(){
// Добавление категории
$('.btn.add-category').on('click', function(){
var $categoryItems = $('.categories .category-item');
if ($categoryItems.length < 3)
{
// Добавляем новую категорию
var $categoryBlock = $('.category-pattern .category-item').clone();
$('.categories').append($categoryBlock);
setCategories();
}
return false;
});
// Удаление категории
$('.categories').on('click', '.delete-category', function() {
var $wrap = $(this).parents('.category-item');
$wrap.remove();
setCategories();
});
function setCategories()
{
var $categoryItems = $('.categories .category-item');
$categoryItems.each(function(i){
var
$this = $(this),
$label = $('.for-category', $this),
$select = $('.form-control', $this),
$delete = $('.delete-category', $this);
$label.text('Категория ' + (i+1));
$label.attr('for', 'category' + (i+1));
$select.attr('id', 'site-category' + (i+1));
$select.attr('name', 'category' + (i+1));
if ($categoryItems.length>1) {
$delete.show();
} else {
$delete.hide();
}
});
}
})();
// Server Data
(function(){
var
//$provConfTemplate = $('.prov-conf-pattern .prov-conf-field-item'),
//$provConfPlace = $('.b-filters_serverdata.dsp .prov-conf'),
classHidden = 'is-hidden';
// Изменение активности зоны
$('#is-server-data').on('change', function(e){
var
isActive = $(this).is(':checked'),
$wrap = $(this).parent(),
$serverdataInner = $('.serverdata-inner', $wrap);
if (!isActive) {
$serverdataInner.addClass(classHidden);
} else {
$serverdataInner.removeClass(classHidden);
}
});
// Добавить значение prov-conf
/*
$('.add-prov-conf').on('click', function(e){
$provConfPlace.append($provConfTemplate.clone());
});
*/
// Удалить значение prov-conf
/*
$provConfPlace.on('click', '.delete-prov-conf-field', function(e){
$(this).parent().remove();
});
*/
})();
// Providers
(function(){
// Выбор targets:
$('.form-group.providers').on('change', 'select', function(e){
var
targets = this.value,
$wrap = $(this).parents('.input-item'),
$valueProviders = $('input.providers', $wrap);
if (targets != 'other') {
$valueProviders.hide();
} else {
$valueProviders.show();
}
});
})();
// Zones
(function(){
// Определяем наибольший id зоны:
var lastIdZone = $('.zones').data('zones-current-id');
// Инициализация имеющихся блоков зон:
setZones();
// Разворачивание-сворачивание инфы зоны
$('.zones').on('click', '.show-zone', function(){
var $zoneItem = $(this).parents('.zone-item');
$zoneItem.toggleClass('open');
});
// Добавление зоны
$('.btn.add-zone').on('click', function(){
// Добавляем новую зону
var $zoneBlock = $('.zone-pattern .zone-item').clone();
$('.zones').append($zoneBlock);
setZones();
return false;
});
// Удаление зоны
$('.zones').on('click', '.delete-zone', function() {
var
$wrap = $(this).parents('.zone-item'),
zoneId = $('.for-zone', $wrap).data('id');
$wrap.remove();
DeleteZoneFromList(zoneId)
});
// Выбор размера зоны:
$('.zones').on('change', '.form-control.size', function(e){
var
size = this.value.split('x'),
width = size[0],
height = size[1],
$wrap = $(this).parents('.zone-item'),
$valueSizes = $('.other-size', $wrap),
$infoValueSizes = $('.zone-info .size', $wrap);
if (size != 'other') {
$valueSizes.hide();
$('.form-control.width', $valueSizes).val(width);
$('.form-control.height', $valueSizes).val(height);
$infoValueSizes.text(width + ' X ' + height);
} else {
$valueSizes.show();
$('.form-control.width', $valueSizes).val('');
$('.form-control.height', $valueSizes).val('');
}
});
// Выбор размера зоны (другой...):
$('.zones').on('change', '.form-control.width, .form-control.height', function(e){
var
$wrap = $(this).parents('.zone-item'),
width = $('.zone-content .size input.width', $wrap).val(),
height = $('.zone-content .size input.height', $wrap).val(),
$infoValueSizes = $('.zone-info .size', $wrap);
$infoValueSizes.text(width + ' X ' + height);
});
// Изменение активности зоны
$('.zones').on('change', '.is-hidden input', function(e){
var
isActive = $(this).is(':checked'),
$wrap = $(this).parents('.zone-item'),
classHidden = 'is-hidden';
if (!isActive) {
$wrap.addClass(classHidden);
} else {
$wrap.removeClass(classHidden);
}
});
// Показ-скрытие дополнительных полей addition:
$('.zones').on('change', 'input.addition', function(e){
var
$this = $(this),
isChecked = $this.is(':checked'),
$additionFields = $('.addition-fields', $this.parent());
if (isChecked) {
$additionFields.show();
} else {
$additionFields.hide();
}
});
// Добавление группы дополнительных полей:
$('.zones').on('click', '.addition-add', function(e){
var $additionBlock = $('.zone-pattern .addition-block-item').clone();
$additionBlock.insertBefore($(this));
});
// Удаление группы дополнительных полей:
$('.zones').on('click', '.delete-addition-block', function() {
var $wrap = $(this).parents('.addition-block-item');
$wrap.remove();
});
// Добавление поля данных дополнительных полей:
$('.zones').on('click', '.addition-add-field', function(e){
var $fieldBlock = $('.zone-pattern .addition-field-item').clone();
$fieldBlock.insertBefore($(this));
});
// Удаление поля данных дополнительных полей:
$('.zones').on('click', '.delete-addition-field', function() {
var $wrap = $(this).parents('.addition-field-item');
$wrap.remove();
});
// Выбор targets:
$('.zones').on('change', 'select.form-control.targets', function(e){
var
targets = this.value,
$wrap = $(this).parents('.targets'),
$valueTargets = $('input.targets', $wrap);
if (targets != 'other') {
$valueTargets.hide();
} else {
$valueTargets.show();
}
});
// Показ-скрытие полей данных min-cpm:
$('.zones').on('change', 'input.min-cpm', function(e){
var
$this = $(this),
isChecked = $this.is(':checked'),
$minCpmFields = $('.min-cpm-fields', $this.parent());
if (isChecked) {
$minCpmFields.show();
} else {
$minCpmFields.hide();
}
});
function setZones()
{
// Проставляем нумерацию зон:
$('.zones .zone-item .for-zone[data-id=""]').each(function(){
var
$this = $(this),
zoneId,
lastNumber = 0;
$('.zones .zone-item .for-zone').each(function(){
var idZone = +$(this).attr('data-id');
lastNumber = (idZone && idZone > lastNumber) ? idZone : lastNumber;
});
zoneId = (lastNumber > lastIdZone) ? lastNumber+1 : lastIdZone+1;
$this.text(zoneId);
$this.attr('data-id', zoneId);
AddZoneIntoList(zoneId);
});
}
function AddZoneIntoList(id)
{
// Добавляем название кода в списки параметров zone_id внутри слотов:
$('.slots .slot-item').each(function(){
var
$selectControl = $('.form-group.zones_id .form-control', $(this)),
$optionItem = $('<option value="' + id + '" >' + id + '</option>');
$selectControl.append($optionItem);
});
// Добавляем название кода в списки параметров внутри шаблона слота:
var
$selectControlTemplateCode = $('.slot-pattern .input-item .form-control'),
$optionItem = $('<option value="' + id + '" >' + id + '</option>');
$selectControlTemplateCode.append($optionItem);
}
function DeleteZoneFromList(id)
{
$('.slots .slot-item').each(function(){
var
$slotItem = $(this),
$selectedZones = $('.form-group.zones_id .form-control', $slotItem);
$selectedZones.each(function(){
if ($(this).val() == id) {
console.log('AAA lll = ', $('.form-group.zones_id .form-control', $slotItem).length);
$(this).parents('.input-item').remove();
}
});
$('.form-group.zones_id .form-control option[value="' + id + '"]', $(this)).remove();
});
$('.slot-pattern .input-item .form-control option[value="' + id + '"]').remove();
}
})();
// Codes
(function(){
// Разворачивание-сворачивание инфы кода
$('.codes').on('click', '.show-code', function(){
var $codeItem = $(this).parents('.code-item');
$codeItem.toggleClass('open');
});
// Добавление кода
$('.btn.add-code').on('click', function(){
// Добавляем новый код
var $codeBlock = $('.code-pattern .code-item').clone();
$('.codes').append($codeBlock);
setCodes();
markerDataIsChanged = true;
return false;
});
// Удаление кода
$('.codes').on('click', '.delete-code', function() {
var
$wrap = $(this).parents('.code-item'),
title = $('.form-control.title', $wrap).val();
// Удаляем значение кода из списков:
DeleteCodeFromList(title);
$wrap.remove();
setCodes();
markerDataIsChanged = true;
});
// Изменение названия
$('.codes').on('change', 'input.form-control.title', function(e){
var
title = $.trim(this.value),
$this = $(this),
$wrap = $this.parents('.code-item'),
$infoTitle = $('.code-info .title', $wrap),
codeName = $('label.for-code', $wrap).data('name');
// Обновляем значение поля без пробелов:
$this.val(title);
// Проверка на уже зарегистрированный title кода:
var
isAlreadyExist = false,
$itemWrap = $(this).parents('.code-item');
$('.codes .code-item').not($itemWrap).each(function(){
var itemTitle = $('.form-control.title', $(this)).val();
if (itemTitle == title) {
isAlreadyExist = true;
}
});
if (isAlreadyExist) {
alert('Код с таким названием уже присутствует в списке!');
$this.focus().val('');
} else {
$infoTitle.text(title);
// Добавление кода в списки:
AddCodeIntoList(codeName, title);
}
});
// Выбор provider:
$('.codes').on('change', 'select.form-control.provider', function(e){
var
targets = this.value,
$wrap = $(this).parent(),
$valueProvider = $('input.provider-other', $wrap);
if (targets != 'other') {
$valueProvider.hide();
} else {
$valueProvider.show();
}
});
function AddCodeIntoList(name, title)
{
/*
// Удаляем предыдущие значения кода:
$('.zones .zone-item').each(function(){
$('.form-group.codes_id .form-control option[data-name="' + name + '"]', $(this)).remove();
});
$('.zone-pattern .input-item .form-control option[data-name="' + name + '"]').remove();
*/
// Добавляем название кода в списки параметров code_id внутри зоны:
$('.zones .zone-item').each(function(){
var
$selectControl = $('.form-group.codes_id .form-control', $(this)),
$rtbOption = $('option[value="RTB"]', $selectControl),
$optionItem = $('<option data-id="' + name + '" value="' + title + '" >' + title + '</option>');
$optionItem.insertBefore($rtbOption);
});
// Добавляем название кода в списки параметров внутри шаблона кода:
var
$selectControlTemplateCode = $('.zone-pattern .input-item .form-control'),
$rtbOption = $('option[value="RTB"]', $selectControlTemplateCode),
$optionItem = $('<option data-id="' + name + '" value="' + title + '" >' + title + '</option>');
$optionItem.insertBefore($rtbOption);
}
function DeleteCodeFromList(title)
{
$('.zones .zone-item').each(function(){
$('.form-group.codes_id .form-control option[value="' + title + '"]', $(this)).remove();
});
$('.zone-pattern .input-item .form-control option[value="' + title + '"]').remove();
}
function setCodes()
{
var $codeItems = $('.codes .code-item');
$codeItems.each(function(i){
var
$this = $(this),
$label = $('.for-code', $this);
$label.text(i+1);
$label.attr('data-name', i+1);
});
}
})();
// Slots
(function(){
// Разворачивание-сворачивание инфы слота
$('.slots').on('click', '.show-slot', function(){
var $slotItem = $(this).parents('.slot-item');
$slotItem.toggleClass('open');
});
// Добавление слота
$('.btn.add-slot').on('click', function(){
// Добавляем новый код
var $slotBlock = $('.slot-pattern .slot-item').clone();
$('.slots').append($slotBlock);
setSlots();
markerDataIsChanged = true;
return false;
});
// Удаление слота
$('.slots').on('click', '.delete-slot', function() {
var
$wrap = $(this).parents('.slot-item');
// Удаляем значение кода из списков:
$wrap.remove();
setSlots();
markerDataIsChanged = true;
});
// Изменение активности слота
$('.slots').on('change', '.is-hidden input', function(e){
var
isActive = $(this).is(':checked'),
$wrap = $(this).parents('.slot-item'),
classHidden = 'is-hidden';
if (!isActive) {
$wrap.addClass(classHidden);
} else {
$wrap.removeClass(classHidden);
}
});
// Изменение списка зон для info-title
$('.slots').on('click', '.form-group.zones_id .save-item', function(e){
var
$this = $(this),
$wrap = $this.parents('.slot-item'),
$infoTitle = $('.slot-info .title', $wrap),
$zonesItems = $('.form-group.zones_id .values-items .form-control', $wrap),
zonesId = [],
title;
$zonesItems.each(function(){
zonesId.push($(this).val());
});
title = zonesId.join(', ');
$infoTitle.text(title);
});
// Добавление поля данных styles:
$('.slots').on('click', '.add-styles', function(e){
var $fieldBlock = $('.slot-pattern .styles-field-item').clone();
$fieldBlock.insertBefore($(this));
markerDataIsChanged = true;
});
// Удаление поля данных styles:
$('.slots').on('click', '.delete-styles-field', function() {
var $wrap = $(this).parents('.styles-field-item');
$wrap.remove();
markerDataIsChanged = true;
});
// Сворачивание-разворачивание fixed:
$('.slots').on('change', '.is-fixed', function() {
var
$wrap = $(this).parents('.fixed'),
$fixedContent = $('.fixed-content', $wrap);
if ($(this).is(':checked')) {
$fixedContent.show();
} else {
$fixedContent.hide();
}
});
// Показ "Синхронизировать высоту":
$('.slots').on('change', '.form-control.slot-margin', function() {
var
$this = $(this),
$syncHeight = $('.syncHeight-inner', $this.parents('.slot-item'));
if (['left','right'].indexOf($(this).val())<0) {
$syncHeight.hide();
} else {
$syncHeight.show();
}
});
// Сворачивание-разворачивание addStyles:
$('.slots').on('change', '.is-addStyles', function() {
var
$wrap = $(this).parents('.addStyles');
if ($(this).is(':checked')) {
$wrap.removeClass('disabled');
} else {
$wrap.addClass('disabled');
}
});
// Добавление поля данных addStyles:
$('.slots').on('click', '.add-addStyles', function(e){
var $addStylesBlock = $('.slot-pattern .addStyles-item').clone();
$addStylesBlock.insertBefore($(this));
markerDataIsChanged = true;
});
// Удаление поля данных addStyles:
$('.slots').on('click', '.delete-addStyles-item', function() {
var $wrap = $(this).parents('.addStyles-item');
$wrap.remove();
markerDataIsChanged = true;
});
// Добавление поля данных addStyles-rules:
$('.slots').on('click', '.add-addStyles-rules', function(e){
var
$wrap = $(this).parents('.addStyles-item'),
$addStylesRulesBlock = $('.slot-pattern .addStyles-rules-item').clone();
$wrap.append($addStylesRulesBlock);
markerDataIsChanged = true;
});
// Удаление поля данных addStyles-rules:
$('.slots').on('click', '.delete-addStyles-rules-item', function() {
var $wrap = $(this).parents('.addStyles-rules-item');
$wrap.remove();
markerDataIsChanged = true;
});
function setSlots()
{
var $slotItems = $('.slots .slot-item');
$slotItems.each(function(i){
var
$this = $(this),
$label = $('.for-slot', $this);
$label.text(i+1);
$label.attr('data-name', i+1);
});
}
})();
// Изменения в тех данных:
var
$markerGroupForm = $('.form-group-data.marker'),
markerDataIsChanged = false;
$('input, select, textarea', $markerGroupForm).change(function(){
markerDataIsChanged = true;
});
// Клик на "Сохранить Опубликовать Откат":
var busy = false;
$('.btn.btn-primary.submit-action').on('click', function(){
var
actionType = $(this).data('type'),
warningInfo;
if (actionType == 'publish') {
if (!confirm("Опубликовать данные?")) return false;
}
if (actionType == 'cancel-draft') {
if (!confirm("Очистить черновик с данными?")) return false;
}
if(busy) {
return false;
}
var
$form = $('#site-form'),
action = $form.attr('action'),
method = $form.attr('method');
// Данные для отправки в запросе:
var data = {};
if (actionType == 'cancel-draft') {
data['cancel_draft'] = 1;
} else {
// Включен ли сайт:
data['enabled'] = ($('#site-enable').is(':checked')) ? 1 : 0;
// Формируем данные о сервисных параметрах:
data['only_native'] = ($('#only_native').is(':checked')) ? 1 : 0;
data['forced_start'] = ($('#forced_start').is(':checked')) ? 1 : 0;
data['pay_block'] = ($('#pay_block').is(':checked')) ? 1 : 0;
data['only_goods'] = ($('#only_goods').is(':checked')) ? 1 : 0;
// Формируем данные serverdata:
if ($('input#is-server-data').is(':checked')) {
var
serverData = {
'ssp_conf': {},
'dsp_conf': {},
},
sspProvidersFieldName = ($('input#ssp-exclude').is(':checked')) ? 'provider_blacklist' : 'provider_whitelist',
dspProvidersFieldName = ($('input#dsp-exclude').is(':checked')) ? 'provider_blacklist' : 'provider_whitelist',
sspProvidersList = [],
dspProvidersList = [],
$groupServerdata = $('.form-group.serverdata'),
$provConfItems = $('.prov-conf-field-item', $groupServerdata);
$('.ssp-list input', $groupServerdata).each(function(){
var $this = $(this);
if ($this.is(':checked')) {
sspProvidersList.push($this.data('id'))
}
});
serverData['ssp_conf'][sspProvidersFieldName] = sspProvidersList;
$('.dsp-list input', $groupServerdata).each(function(){
var $this = $(this);
if ($this.is(':checked')) {
dspProvidersList.push($this.data('id'))
}
});
serverData['dsp_conf'][dspProvidersFieldName] = dspProvidersList;
if ($provConfItems.length>0) {
var provConf = {};
$provConfItems.each(function(){
var $this = $(this);
//provConf[$('.provider', $this).val()] = $('.config', $this).val()
provConf[$('.provider', $this).text()] = $('.config', $this).val()
});
serverData['dsp_conf']['prov_conf'] = provConf;
}
data['server_data'] = serverData;
} else {
data['server_data'] = null;
}
// Формируем данные hidezones:
var
dataHidezones = [],
$hidezoneItems = $('.form-group.hidezones .values-string span');
$hidezoneItems.each(function(){
dataHidezones.push($(this).text());
});
$('input#hidezones').val(JSON.stringify(dataHidezones));
// Формируем данные stophide:
var
dataStophide = [],
$stophideItems = $('.form-group.stophide .values-string span');
$stophideItems.each(function(){
dataStophide.push($(this).text());
});
$('input#stophide').val(JSON.stringify(dataStophide));
// Формируем данные providers:
var
dataProviders = [],
$providersItems = $('.form-group.providers .values-string span');
$providersItems.each(function(){
dataProviders.push($(this).text());
});
$('input#providers').val(JSON.stringify(dataProviders));
// Формируем данные zones:
var
dataZones = [],
$zoneItems = $('.zones .zone-item');
$zoneItems.each(function(){
var
$this = $(this),
dataSelectors = [],
dataMoreSelectors = [],
$selectorsItems = $('.form-group.selectors .values-string span', $this),
$moreSelectorsItems = $('.form-group.more_selectors .values-string span', $this),
dataAddition = [],
$additionItems = $('.addition-data .addition-block-item', $this),
dataMinCpm = null,
$minCpmCheck = $('input.min-cpm', $this);
$selectorsItems.each(function(){
dataSelectors.push($(this).text());
});
$moreSelectorsItems.each(function(){
dataMoreSelectors.push($(this).text());
});
$additionItems.each(function(){
var
$this = $(this),
dataAdditionItem = {},
$additionElems = $('.addition-block-elem', $this),
id = $this.data('id'),
dataItem = {
before: null,
el: null,
after: null,
};
$additionElems.each(function(){
var
$additionElem = $(this),
additionTitle = $additionElem.data('title'),
$additionFields = $('.addition-field-item', $additionElem);
if ($additionFields.length) {
dataItem[additionTitle] = {};
$additionFields.each(function(){
dataItem[additionTitle][$('.form-control.name', $(this)).val()] = $('.form-control.value', $(this)).val();
});
}
});
dataAdditionItem = {
i: id,
b: dataItem.before,
e: dataItem.el,
a: dataItem.after,
};
dataAddition.push(dataAdditionItem);
});
var targets = ($('select.form-control.targets', $this).val() != 'other') ? $('select.form-control.targets', $this).val() : $('input.form-control.targets', $this).val();
if ($minCpmCheck.is(':checked')) {
var
valValue = $('.min-cpm-val', $this).val(),
curValue = $('.min-cpm-cur', $this).val();
if (valValue == '') {
warningInfo = 'Укажите значение min-cpm';
}
if (curValue == '') {
warningInfo = 'Укажите валюту в значении min-cpm';
}
dataMinCpm = {
val: valValue,
cur: curValue,
};
}
dataZones.push({
id: $('.for-zone', $this).data('id'),
disabled: ($('.is_hidden', $this).is(':checked')) ? 0 : 1,
width: parseInt($('input.width', $this).val()),
height: parseInt($('input.height', $this).val()),
min_window_width: $('input.min-window-width', $this).val(),
styles: $('input.styles', $this).val(),
selectors: (dataSelectors.length) ? JSON.stringify(dataSelectors) : null,
more_selectors: (dataMoreSelectors.length) ? JSON.stringify(dataMoreSelectors) : null,
targets: (targets) ? JSON.stringify([targets]) : null,
addition: (dataAddition.length) ? JSON.stringify(dataAddition) : null,
min_cpm: (dataMinCpm) ? JSON.stringify(dataMinCpm) : null,
comment: $('.form-control.comment', $this).val(),
});
});
$('input#zones').val(JSON.stringify(dataZones));
// Формируем данные codes:
var
dataCodes = [],
$codesItems = $('.codes .code-item');
$codesItems.each(function(){
var $this = $(this);
dataCodes.push({
i: $('.for-code', $this).data('id'),
n: $('.for-code', $this).data('name'),
t: $('.form-control.title', $this).val(),
p: ($('.form-control.provider', $this).val() != 'other') ? $('.form-control.provider', $this).val() : $('.form-control.provider-other', $this).val(),
c: $('.form-control.code', $this).val(),
});
});
$('input#codes').val(JSON.stringify(dataCodes));
// Формируем данные codezones:
var
dataCodezones = [],
dataCodezonesOpt = [],
$codezonesItems = $('.zones .zone-item .form-group.codes_id');
$codezonesItems.each(function(){
var
codesId = [],
zonesId = [$('label.for-zone', $(this).parents('.zone-item')).data('id')],
$codesItems = $('.values-string span', $(this));
$codesItems.each(function(){
var
codeTitle = $(this).text(),
codeId;
if (codeTitle == 'RTB') {
codeId = '__rtb__';
} else {
dataCodes.forEach(function(i){
if (i.t == codeTitle) {
codeId = i.n;
return false;
}
});
}
codesId.push(codeId);
})
codesId = codesId.sort();
if (codesId.length) {
dataCodezones.push([codesId, zonesId]);
}
});
// Оптимизируем массив, ищем одинаковые массивы с codes_id:
dataCodezones.forEach(function(i){
var isCommon = false;
dataCodezonesOpt.forEach(function(j){
if (i[0].join(',') == j[0].join(',')) {
isCommon = true;
j[1] = j[1].concat(i[1]);
}
});
if (!isCommon) {
dataCodezonesOpt.push([i[0], i[1]]);
}
});
data['codezones'] = JSON.stringify(dataCodezonesOpt);
// Формируем данные slots:
var
dataSlots = [],
$slotsItems = $('.slots .slot-item');
$slotsItems.each(function(){
var
$this = $(this),
slotZones = [],
slotNode = {},
slotOffset = {},
slotStyles = {},
slotFixed = {};
var dataSlot = {
id: $('.for-slot', $this).data('id'),
name: $('.for-slot', $this).data('name'),
disabled: ($('.is_hidden', $this).is(':checked')) ? 0 : 1,
}
// zones
$('.form-group.zones_id .values-string span', $this).each(function(){
slotZones.push(parseInt($(this).text()));
});
if (slotZones.length > 0) {
dataSlot['z'] = slotZones;
}
// node
var
$nodeWrap = $('.form-group.node', $this),
selector = $.trim($('.form-control.node-selector', $nodeWrap).val()),
parent = $.trim($('.form-control.node-parent', $nodeWrap).val()),
next = $.trim($('.form-control.node-next', $nodeWrap).val());
if (selector != "") slotNode['selector'] = selector;
if (parent != "") slotNode['parent'] = parseInt(parent);
if (next != "") slotNode['next'] = parseInt(next);
if (Object.keys(slotNode).length > 0) {
dataSlot['n'] = slotNode;
}
// offset
var
$offsetWrap = $('.form-group.offset', $this),
top = $.trim($('.form-control.offset-top', $offsetWrap).val()),
left = $.trim($('.form-control.offset-left', $offsetWrap).val()),
bottom = $.trim($('.form-control.offset-bottom', $offsetWrap).val()),
right = $.trim($('.form-control.offset-right', $offsetWrap).val());
if (top != "") slotOffset['top'] = parseInt(top);
if (left != "") slotOffset['left'] = parseInt(left);
if (bottom != "") slotOffset['bottom'] = parseInt(bottom);
if (right != "") slotOffset['right'] = parseInt(right);
if (Object.keys(slotOffset).length > 0) {
dataSlot['o'] = slotOffset;
}
// styles
var $stylesWrap = $('.form-group.styles', $this);
$('.styles-field-item', $stylesWrap).each(function(){
var
$fieldItem = $(this),
nameField = $.trim($('.form-control.name', $fieldItem).val()),
valueField = $.trim($('.form-control.value', $fieldItem).val());
if (nameField != "") slotStyles[nameField] = valueField;
});
if (Object.keys(slotStyles).length > 0) {
dataSlot['s'] = slotStyles;
}
// addStyles
var $addStylesWrap = $('.form-group.addStyles', $this);
if ($('.is-addStyles', $addStylesWrap).is(':checked')) {
var
slotAddStyles = [],
$addStylesItems = $('.addStyles-item', $addStylesWrap);
$addStylesItems.each(function(){
var
$addStylesItem = $(this),
slotAddStylesItem = {},
$rulesItems = $('.addStyles-rules-item', $addStylesItem);
slotAddStylesItem['selector'] = $.trim($('.form-control.addStyles-selector', $addStylesItem).val());
if ($rulesItems.length>0) {
slotAddStylesItem['rules'] = {};
$rulesItems.each(function(){
var
$rulesItem = $(this),
nameFieldRules = $.trim($('.form-control.name', $rulesItem).val()),
valueFieldRules = $.trim($('.form-control.value', $rulesItem).val());
if (nameFieldRules != "") {
slotAddStylesItem['rules'][nameFieldRules] = valueFieldRules;
}
});
if (Object.keys(slotAddStylesItem['rules']).length == 0) {
delete slotAddStylesItem['rules'];
}
}
slotAddStyles.push(slotAddStylesItem);
});
if (slotAddStyles.length > 0) {
dataSlot['as'] = slotAddStyles;
}
}
// margin
var slotMargin = $('.form-group.margin .form-control.slot-margin', $this).val();
if (slotMargin) {
dataSlot['m'] = slotMargin;
}
// syncHeight
var slotSyncHeight = $('.form-group.syncHeight .is-syncHeight', $this).is(':checked');
if (['left','right'].indexOf(slotMargin)>-1) {
dataSlot['sh'] = (slotSyncHeight) ? 1 : 0;
}
// clearBefore
var slotClearBefore = $('.form-group.clearBefore .is-clearBefore', $this).is(':checked');
dataSlot['cb'] = (slotClearBefore) ? 1 : 0;
// hAlign
var slotHAlign = $('.form-group.hAlign .form-control.slot-hAlign', $this).val();
if (slotHAlign) {
dataSlot['ha'] = slotHAlign;
}
// fixed
var $fixedWrap = $('.form-group.fixed', $this);
if ($('.is-fixed', $fixedWrap).is(':checked')) {
var
nodeSelector = $.trim($('.form-control.fixed-node-selector', $fixedWrap).val()),
topOffset = $.trim($('.form-control.fixed-topOffset', $fixedWrap).val());
if (nodeSelector != "") {
slotFixed['node'] = {};
slotFixed['node']['selector'] = nodeSelector;
}
if (topOffset != "") slotFixed['topOffset'] = parseInt(topOffset);
slotFixed['bottomSync'] = $('.form-control.fixed-bottomSync', $fixedWrap).val();
}
if (Object.keys(slotFixed).length > 0) {
dataSlot['f'] = slotFixed;
}
// comment
var slotComment = $.trim($('.form-control.comment', $this).val());
if (slotComment) {
dataSlot['c'] = slotComment;
}
dataSlots.push(dataSlot);
});
if (dataSlots.length>0) {
$('input#slots').val(JSON.stringify(dataSlots));
}
// Собираем данные формы:
$form.find('.form-control').each(function(){
data[$(this).attr('name')] = $(this).val();
});
// Формируем данные alias:
data['alias'] = data['alias'].split(', ').join(',');
if (actionType == 'publish') {
data['temp_state'] = null;
} else {
data['temp_state'] = 1;
}
// Если изменений в тех.данных не было:
if (!markerDataIsChanged) {
data['temp_state'] = null;
data['only_sale'] = 1;
}
if (actionType == 'publish') {
data['only_sale'] = 0;
}
}
if (warningInfo) {
alert(warningInfo);
return false;
}
//console.log('AAA sites_form data = ', data);
//return false;
busy = true;
$.ajax(action, {
type: method,
data: data,
success: function(data) {
busy = false;
if(data) {
//console.log('AAA result = ', data.result);
//console.log('AAA msg = ', data.msg);
//console.log('AAA redirect = ', data.redirect);
if(data.result == true && data.redirect) {
window.location.href = data.redirect;
}
if(data.result == false && data.msg) {
$.showMessage('error', data.msg);
}
}
},
error: function(ajaxObj, textStatus, textError) {
busy = false;
}
});
return false;
});
});
$(document).ready(function () {
"use strict";
// Стиль скина
var editor = ace.edit("editor");
editor.setOptions({readOnly: true,});
editor.setTheme("ace/theme/chrome");
editor.session.setMode("ace/mode/less");
// Стиль базового скина
var editorBase = ace.edit("editor-base");
editorBase.setOptions({readOnly: true,});
editorBase.setTheme("ace/theme/chrome");
editorBase.session.setMode("ace/mode/less");
// Помечаем цветом поля конфига:
var
$configWrap = $('.form-group-config'),
$configFields = $('input.form-control, select.form-control', $configWrap),
$sizeWidth = $configFields.filter('.size.width'),
$sizeHeight = $configFields.filter('.size.height'),
$itemsCols = $configFields.filter('.items.cols'),
$itemsRows = $configFields.filter('.items.rows'),
$logoVert = $configFields.filter('.logo.vert'),
$logoHor = $configFields.filter('.logo.hor'),
$logoInner = $configFields.filter('.logo.inner'),
$logoWidth = $configFields.filter('.logo.width'),
$logoHeight = $configFields.filter('.logo.height'),
$animationName = $configFields.filter('.animation.name'),
$animationLoopTimeout = $configFields.filter('.animation.loopTimeout');
function markConfigControl($this)
{
//if ($this.data('base') == $this.val() && $this.val()) {$this.addClass('from-base');}
$this.attr('placeholder', $this.attr('data-base'));
}
function markAllConfigControls()
{
$configFields.each(function() {
markConfigControl($(this));
});
}
markAllConfigControls();
// Смена базового конфига:
$('.form-control.skin-base').on('change', function(){
var
action = $configWrap.data('action'),
method = 'POST',
data = {
'get_data_skin': $(this).val(),
};
$.ajax(action, {
type: method,
data: data,
success: function(data) {
console.log('AAA success ', data.data);
var
style = data.data.style,
conf = data.data.config;
// Устанавливаем стили в базовом редакторе:
editorBase.setValue(style);
editorBase.session.selection.clearSelection();
// Устанавливаем значения базового конфига:
$sizeWidth.attr('data-base', conf.size.width || '');
$sizeHeight.attr('data-base', conf.size.height || '');
$itemsCols.attr('data-base', conf.items.cols || '');
$itemsRows.attr('data-base', conf.items.rows || '');
$animationName.attr('data-base', conf.animation.name || '');
$animationLoopTimeout.attr('data-base', conf.animation.loopTimeout || '');
$logoVert.attr('data-base', conf.logo.pos.vert || '');
$logoHor.attr('data-base', conf.logo.pos.hot || '');
$logoInner.attr('data-base', conf.logo.pos.inner || '');
$logoWidth.attr('data-base', conf.logo.size.width || '');
$logoHeight.attr('data-base', conf.logo.size.height || '');
markAllConfigControls();
},
error: function(rew, status, err) {
console.log(status, err);
}
});
});
// Клик на "Редактировать", "Сохранить", "Опубликовать":
var
$editButton = $('button.btn.btn-primary.edit'),
$saveButton = $('button.btn.btn-primary.save'),
$saveControls = $('.b-save'),
$leftFade = $('.b-left-fade');
$editButton.click(function(){
$leftFade.hide();
$saveControls.show();
return false;
});
$saveButton.click(function(){
var
$form = $('#skin-create-form'),
action = $form.attr('action'),
method = $form.attr('method'),
formData = new FormData();
console.log('AAA saveButton ', action);
$.ajax(action, {
type: method,
data: formData,
cache:false,
contentType: false,
processData: false,
success: function(data) {
console.log('AAA saveButton success');
return false;
if(data) {
if(data.result === true && data.redirect) {
document.location.href = data.redirect;
}
if(data.result === false && data.msg) {
$.showMessage('error', data.msg);
}
}
},
error: function(rew, status, err) {
console.log(status, err);
$.showMessage('error', err);
}
});
return false;
});
});
\ No newline at end of file
$(document).ready(function () {
"use strict";
Array.prototype.forEach.call(document.querySelectorAll("button[data-delete]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
$.ajax(this.getAttribute("data-delete"), {
type: "POST",
item: this,
success: function (data) {
console.log(data);
if (data.result) {
document.location.reload();
}
},
error: function(req, status, err) {
console.log(status, err);
document.location.reload();
}
});
});
});
Array.prototype.forEach.call(document.querySelectorAll("button[data-link]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
document.location.href = this.getAttribute("data-link");
/*
var $this = $(this);
$.ajax({
url: $this.attr("data-link"),
type: "POST",
contentType: false,
processData: false,
data: {
manager: $this.attr("data-id")
},
successUrl: $this.attr("data-link"),
success: function(data) {
console.log('success ', data);
},
error: function (e) {
console.log('error: ', e);
}
});
*/
});
});
$('#support-create-form').on('submit', function(e) {
e.stopPropagation();
var action = $(this).attr('action');
var method = $(this).attr('method');
var formData = {};
var vals = $(this).serializeArray();
if(vals.length) {
for(var i in vals) {
formData[vals[i].name] = vals[i].value;
}
}
$.ajax(action, {
type: method,
data: formData,
success: function(data) {
if(data) {
if(data.result === true && data.redirect) {
document.location.href = data.redirect;
}
if(data.result === false && data.msg) {
$.showMessage('error', data.msg);
}
}
},
error: function(rew, status, err) {
console.log(status, err);
}
});
return false;
});
});
(function($) {
$.extend({
TeasersTemplates: {
light: _.template('' +
'<% cnt = 3; %>' +
'<% if (ads.length > cnt) ads = ads.slice(0, cnt); %>' +
'<div class="b-light m-light_160x600 m-light_active">' +
' <div class="b-light__inner">' +
' <% for (var i = 0; i < ads.length; i++) { %>' +
' <% var ad = ads[i]; %>' +
' <% if (!ad.price.trim() || ad.price == "0") {ad.price = "";} %>' +
' <div class="b-light-item">' +
' <a class="b-light-item__link" href="<%=ad.link %>" data-id="<%=ad.data_id %>">' +
' <span class="b-light-item__bg"></span>' +
' <span class="b-light-item__title"><%=ad.title %></span>' +
' <span class="b-light-item__image">' +
' <img src="<%=ad.img %>" alt="<%=ad.title %>">' +
' </span>' +
' <% if (ad.price) { %>' +
' <span class="b-light-item__price"><%=ad.price %></span>' +
' <% } %>' +
' </a>' +
' </div>' +
' <% } %>' +
' </div>' +
' </div>'
),
adaptive: _.template('' +
'<% cnt = 2; %>' +
'<% if (ads.length > cnt) ads = ads.slice(0, cnt); %>' +
'<div class="b-adaptive m-adaptive_adaptive m-adaptive_active">' +
' <div class="b-adaptive__inner" id="inner">' +
' <% for (var i = 0; i < ads.length; i++) { %>' +
' <% var ad = ads[i]; %>' +
' <div class="b-adaptive-item" style="width: 300px; height: 298px; margin: 0px 0 4px 0;">' +
' <a class="b-adaptive-item__link" href="<%=ad.link %>" data-id="<%=ad.data_id %>">' +
' <span class="b-adaptive-item__title"><%=ad.title %></span>' +
' <span class="b-adaptive-item__image" style="top: 0">'+
' <img src="<%=ad.img %>" alt="<%=ad.title %>">' +
' </span>' +
' <% if (ad.price) { %>' +
' <span class="b-adaptive-item__price"><%=ad.price %></span>' +
' <% } %>' +
' </a>' +
' </div>' +
' <% } %>' +
' </div>' +
'</div>'
),
static: _.template('' +
'<% cnt = 4; %>' +
'<% if (ads.length > cnt) ads = ads.slice(0, cnt); %>' +
'<% var skin = "common" /* "common", "select-color", "select" */ %>' +
'<div class="b-static m-static_300x600 m-static_<%=skin %>">' +
' <div class="b-static__inner">' +
' <% for (var i = 0; i < ads.length; i++) { %>' +
' <% var ad = ads[i]; %>' +
' <% if (!ad.price.trim() || ad.price == "0") { ad.price = "Купить!"; } %>' +
' <div class="b-static-item <% if (skin != \'common\' && i == 0) { %>m-static_active<% } %>">' +
' <a class="b-static-item__link" href="<%=ad.link %>" data-id="<%=ad.data_id %>">' +
' <span class="b-static-item__title"><%=ad.title %></span>' +
' <span class="b-static-item__image">' +
' <img src="<%=ad.img %>" alt="<%=ad.title %>" width="200" height="200">' +
' </span>' +
' <span class="b-static-item__description"><%=ad.text %></span>' +
' <span class="b-static-item__price"><%=ad.price %></span>' +
' </a>' +
' </div>' +
' <% } %>' +
' </div>' +
' <% if (skin != "common") { %>' +
' <div class="b-static__selectors">' +
' <% /*for (var j = 0; j < 4; j++) {*/ %>' +
' <% for (var j = 0; j < ads.length; j++) { %>' +
' <% var ad = ads[j]; %>' +
' <div class="b-static-img <% if (j == 0) { %>m-static-image_active<% } %>">' +
' <img src="<%=ad.img %>" alt="<%=ad.title %>" width="140" height="140">' +
' </div>' +
' <% } %>' +
' </div>' +
' <% } %>' +
'</div>'
),
contrast: _.template('' +
'<% var skin = "img" %>' +
'<% //var skin = "border" %>' +
' <div class="b-contrast m-contrast_300x600 m-contrast_<%=skin %>">' +
' <div class="b-contrast__inner">' +
' <% for (var i = 0; i < 4; i++) { %>' +
' <% if (!ad.price.trim() || ad.price == "0") { ad.price = "Купить!"; } %>' +
' <div class="b-contrast-item">' +
' <a class="b-contrast-item__link" href="<%=ad.link %>" data-id="<%=ad.data_id %>">' +
' <span class="b-contrast-item__title"><%=ad.title %></span>' +
' <span class="b-contrast-item__image">' +
' <img src="<%=ad.img %>" alt="<%=ad.title %>" width="140" height="140">' +
' </span>' +
' <span class="b-contrast-item__description"><%=ad.text %></span>' +
' <span class="b-contrast-item__price"><%=ad.price %></span>' +
' <% if (ad.domain) { %>' +
' <span class="b-contrast-item__domain"><%=ad.domain %></span>' +
' <% } %>' +
' </a>' +
' </div>' +
' <% } %>' +
' </div>' +
' </div>'
),
}
});
})(jQuery);
$(document).ready(function () {
"use strict";
autosize($("textarea"));
});
\ No newline at end of file
$(document).ready(function () {
"use strict";
// Array.prototype.forEach.call(document.querySelectorAll("button[data-action]"), function (el) {
// $(el).on("click", function (e) {
// location.href = this.getAttribute("data-action");
// e.stopPropagation();
// });
// });
Array.prototype.forEach.call(document.querySelectorAll("button[data-toggle]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
$.ajax(this.getAttribute(this.getAttribute("data-value")), {
type: "POST",
item: this,
success: function (data) {
if (data.result) {
var currentValue = this.item.getAttribute(this.item.getAttribute("data-value"));
if (currentValue === this.item.getAttribute("data-hide")) {
this.item.setAttribute("data-value", "data-activate");
$(this.item)
.text(this.item.getAttribute("data-activate-caption"))
.removeClass("btn-danger");
} else {
this.item.setAttribute("data-value", "data-hide");
$(this.item)
.text(this.item.getAttribute("data-hide-caption"))
.addClass("btn-danger");
}
}
console.log(data);
},
error: function(req, status, err) {
console.log(status, err);
}
});
});
});
// Клик на кнопку статистики:
/*
Array.prototype.forEach.call(document.querySelectorAll("button[data-link]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
document.location.href = this.getAttribute("data-link");
});
});
*/
$('.dropdown-toggle').dropdown();
});
\ No newline at end of file
$(document).ready(function () {
$('#user-date-create').datepicker({
format: 'yyyy-mm-dd',
language: $('#user-date-create').data('language')
});
// Добавление названия сайта в список сайтов пользователя:
/*
var siteStatusUrl = $('#user-site').data('status-url');
$('#user-site').tokenfield()
.on('tokenfield:createdtoken', function(e){
var tokenClass = '';
$.ajax(siteStatusUrl, {
method: 'POST',
async: false,
data: {
domain: e.attrs.value
},
success: function(data) {
console.log(data);
if(data && !data.isUnique) {
tokenClass = 'bg-danger';
}
}
});
if(tokenClass !== '') {
console.log(e.relatedTarget);
$(e.relatedTarget).addClass(tokenClass);
$.showMessage('info', 'Домен уже зарегистрирован');
}
return true;
})
;
*/
// Обработка списка "Провайдеры, к кодам которых у пользователя есть доступ"
(function(){
// Клик на "Редактировать" для показа списка значений вместо строки:
$('.form-group').on('click', '.edit-item', function(){
var
$this = $(this),
$wrap = $this.parents('.form-group')[0],
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items', $wrap),
$tempState = $('.temp-state', $wrap);
$tempState.empty();
$tempState.html($valuesItems.html());
CheckNoValues($this);
$this.hide();
$valuesString.hide();
$valuesEdit.show();
return false;
});
// Клик на "Добавить" значение в список:
$('.form-group').on('click', '.add-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$valuesItems = $('.values-items', $wrap),
$tplInput;
if ($wrap.hasClass('code-provider')) {
$tplInput = $('.code-provider-pattern .input-item').clone();
}
$valuesItems.append($tplInput);
CheckNoValues($(this));
return false;
});
// Клик на "Удалить" значение из списка:
$('.form-group').on('click', '.delete-input', function(){
var
$wrap = $(this).parents('.input-item'),
$items = $(this).parents('.values-items');
$wrap.remove();
CheckNoValues($items);
return false;
});
// Клик на "Отмена" показа списка:
$('.form-group').on('click', '.cancel-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$edit = $('.edit-item', $wrap),
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items', $wrap),
$tempState = $('.temp-state', $wrap);
$valuesItems.html($tempState.html());
$tempState.empty();
$edit.show();
$valuesString.show();
$valuesEdit.hide();
return false;
});
// Клик на "Сохранить" список значений:
$('.form-group').on('click', '.save-item', function(){
var
$wrap = $(this).parents('.form-group').first(),
$edit = $('.edit-item', $wrap),
$valuesString = $('.values-string', $wrap),
$valuesEdit = $('.values-edit', $wrap),
$valuesItems = $('.values-items .input-item', $wrap),
$tempState = $('.temp-state', $wrap),
dataItems = [];
$valuesItems.each(function(){
var
$this = $(this),
itemValue = $('select', $this).val(),
itemText = $("select option:selected", $this).text();
if (itemValue) {
dataItems.push(itemText);
}
});
$valuesString.empty();
dataItems.forEach(function(item){
$valuesString.append('<span>' + item + '</span> ');
});
$tempState.empty();
$edit.show();
$valuesString.show();
$valuesEdit.hide();
return false;
});
function CheckNoValues($this)
{
var
$wrap = $('.values-edit', $this.parents('.form-group')[0]),
$inputItems = $('.values-items .input-item', $wrap),
$noValues = $('.no-values', $wrap);
if ($inputItems.length) {
$noValues.hide();
} else {
$noValues.show();
}
}
})();
// Поле "Доступные сайты"
var
$inputAccessSite = $('#user-access-site'),
delimiterAccessSite = ';';
$inputAccessSite.tokenfield({delimiter: delimiterAccessSite, beautify: false});
$('.add-access-site').click(function(){
var
addSite = $('select.access-site').val(),
listAddSites = $inputAccessSite.tokenfield('getTokensList'),
dataAddSites = listAddSites.split(delimiterAccessSite);
if (dataAddSites.indexOf(addSite) == -1)
{
$inputAccessSite.tokenfield('setTokens', listAddSites + delimiterAccessSite + addSite);
}
return false;
});
var busy = false;
$('#user-form').on('submit', function(){
if(busy) {
return false;
}
var action = $(this).attr('action');
var method = $(this).attr('method');
// Формируем массив сайтов, для которых есть доступ:
var listAccessUsers = $('input#user-access-site').val();
if (!!listAccessUsers)
{
var dataAccessUsers = listAccessUsers.split(delimiterAccessSite);
$('input#user-access-site').val(JSON.stringify(dataAccessUsers));
}
// Формируем данные providers:
var
dataCodeProvider = [],
$codeProviderItems = $('.form-group.code-provider .form-control.code-provider');
$codeProviderItems.each(function(){
if ($(this).val()) {
dataCodeProvider.push(parseInt($(this).val()));
}
});
if (dataCodeProvider.length == 0) {
$('input#code-provider').val("");
} else {
$('input#code-provider').val(JSON.stringify(dataCodeProvider));
}
var data = {};
$(this).find('.form-control:not(.access-site)').each(function(){
data[$(this).attr('name')] = $(this).val();
});
$(this).find('input[type=checkbox]').filter(':checked').each(function(){
if(!data[$(this).attr('name')]) {
data[$(this).attr('name')] = [];
}
data[$(this).attr('name')].push($(this).val());
});
//console.log('AAA data = ', data);
//return false;
busy = true;
$.ajax(action, {
type: method,
data: data,
success: function(data) {
busy = false;
if(data) {
if(data.result == true && data.redirect) {
window.location.href = data.redirect;
}
if(data.result == false && data.msg) {
console.log('AAA error ', data.msg);
$.showMessage('error', data.msg);
}
}
},
error: function(ajaxObj, textStatus, textError) {
busy = false;
}
});
return false;
});
});
$(document).ready(function () {
"use strict";
function uidGenerator() {
var S4 = function () {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
return (S4() + S4());
}
$("[data-menu]").affix({
offset: {top: 60}
});
$(".b-content__knowledge").on("click", function (e, withoutScroll) {
var uid;
var cloned;
var dataAction = (e.toElement || e.target).getAttribute("data-action");
switch (dataAction) {
case "skill-remove":
e.stopPropagation();
$(e.toElement).parents(".b-content__knowledge-item").remove();
break;
case "skill-add":
cloned = $(".b-content__knowledge-item.hidden").clone(true, true).toggleClass("hidden");
uid = uidGenerator();
$("label[for='id-skill-new']", cloned).attr("for", uid);
$("textarea#id-skill-new", cloned).attr("id", uid);
$(".b-content__knowledge-inner").append(cloned);
if (!withoutScroll) {
$("html, body").animate({
scrollTop: cloned.offset().top - 30 //padding to avoid menu
}, 400);
}
break;
}
});
});
$(document).ready(function () {
"use strict";
Array.prototype.forEach.call(document.querySelectorAll("button[data-toggle]"), function (el) {
$(el).on("click", function (e) {
e.stopPropagation();
$.ajax(this.getAttribute(this.getAttribute("data-value")), {
type: "POST",
item: this,
success: function (data) {
if (data.result) {
var currentValue = this.item.getAttribute(this.item.getAttribute("data-value"));
if (currentValue === this.item.getAttribute("data-hide")) {
this.item.setAttribute("data-value", "data-activate");
$(this.item)
.text(this.item.getAttribute("data-activate-caption"))
.removeClass("btn-danger");
} else {
this.item.setAttribute("data-value", "data-hide");
$(this.item)
.text(this.item.getAttribute("data-hide-caption"))
.addClass("btn-danger");
}
}
console.log(data);
},
error: function(req, status, err) {
console.log(status, err);
}
});
});
});
});
\ No newline at end of file
......@@ -190,16 +190,13 @@ $(document).ready(function(){
EnableLoadingState(false);
if (res == null) {
console.log("AAA requestDataStat success res: NULL");
$chartStatInfo.show();
$chartStatError.hide();
ShowInfo();
} else if (res.status == 'Error') {
console.log("AAA requestDataStat error");
$chartStatError.show();
$chartStatInfo.hide();
ShowError();
} else {
//console.log("AAA requestDataStat SUCCESS res: ", res);
$chartStatInfo.hide();
$chartStatError.hide();
ShowChartData();
periodStatsData = res.period;
companyStatsData = res.company;
......@@ -236,4 +233,29 @@ $(document).ready(function(){
}
}
function ShowInfo()
{
$chartStatInfo.show();
$chartStatError.hide();
$chartStat.hide();
$chartTable.hide();
}
function ShowError()
{
$chartStatError.show();
$chartStatInfo.hide();
$chartStat.hide();
$chartTable.hide();
}
function ShowChartData()
{
$chartStatInfo.hide();
$chartStatError.hide();
$chartStat.show();
$chartTable.show();
}
});
\ No newline at end of file
......@@ -26,13 +26,8 @@
namespace App\Action\Admin;
use App\Entity\Offers\OfferNew;
use App\Entity\Offers\Landing;
use App\Entity\Offers\AddNew;
use App\Entity\Offers\Template;
use App\Entity\Teasers\Offer;
use App\Entity\Teasers\Partner;
use App\Entity\Teasers\Add;
use App\Entity\Feeds\StatsDay;
use App\Entity\Feeds\Transaction;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\Flash\Messages;
......@@ -85,16 +80,20 @@ class SystemAction extends Common
{
$data = $request->getParsedBody();
// Перевести tpl в таблицу templates:
if ($data['tplTemplatesTable']) {
return $this->removeTplTemplatesTable($request);
// Сформировать тестовые данные для статистики по фидам:
if ($data['feedTestData']) {
return $this->renderFeedTestData($request);
}
}
/* Системные операции */
private function removeTplTemplatesTable(ServerRequestInterface $request)
private function renderFeedTestData(ServerRequestInterface $request)
{
return new JsonResponse(123);
/** @var \App\Model\Offers $landingsModel */
$landingsModel = $this->container->get(\App\Model\Offers\Landings::class);
$landings = $landingsModel->findAll();
......
......@@ -258,6 +258,10 @@ class Cabinet extends Common
break;
}
if (!$periodStats) {
return new JsonResponse(null);
}
$periodStats['type'] = 'interval';
$periodStats['report'] = $report_type;
......
......@@ -80,6 +80,10 @@ class StatsDays extends Common
. ' ORDER BY EventDate desc';
$res = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
if (count($res) == 0) {
return null;
}
$stats = array(
'period' => [],
'shows' => [],
......
......@@ -35,6 +35,7 @@ $this->headScript()
->appendFile('/js/script-feeds-stat-charts.js')
->appendFile('/js/script-feeds-stat-table.js')
->appendFile('/js/script-feeds-stat.js')
->appendFile('/js/adm/service-actions.js')
;
$this->headLink()
......@@ -79,8 +80,7 @@ $colors_active_lines = array(
);
$data_request_link = $this->url('user.cabinet', ['lang' => $this->lang, 'report' => $report]);
$system_link = $this->url('adm.system.actions');
?>
......@@ -115,7 +115,9 @@ $data_request_link = $this->url('user.cabinet', ['lang' => $this->lang, 'report'
<div class="wrapp" style="position: relative;">
<div class="b-feeds-stat_data-loading"></div>
<!--
<a class="btn btn-primary service-action feed-test-data" href="<?= $system_link ?>">Сформировать тестовые данные</a>
-->
<div class="b-feeds-stat_controls form-group">
<div class="b-feeds-stat_controls-report">
......
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