Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
A
addcpm-json
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Александр Чаплыгин
addcpm-json
Commits
cc66f538
Commit
cc66f538
authored
Nov 16, 2018
by
Александр Чаплыгин
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Обработка получения данных стат. за период с пустым результатом
parent
b0b46f66
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
199 additions
and
6102 deletions
+199
-6102
styles-contacts.css
src/public/css/styles-contacts.css
+144
-0
cpatables.js
src/public/js/adm/cpatables.js
+0
-548
jquery.sortTable.js
src/public/js/adm/jquery.sortTable.js
+0
-107
jquery.table2excel.js
src/public/js/adm/jquery.table2excel.js
+0
-208
offer-page.js
src/public/js/adm/offer-page.js
+0
-1614
offers.js
src/public/js/adm/offers.js
+0
-160
orders.js
src/public/js/adm/orders.js
+0
-892
partners.js
src/public/js/adm/partners.js
+0
-136
service-actions.js
src/public/js/adm/service-actions.js
+3
-65
sites.js
src/public/js/adm/sites.js
+0
-227
sites_form.js
src/public/js/adm/sites_form.js
+0
-1379
skin-page.js
src/public/js/adm/skin-page.js
+0
-146
supports.js
src/public/js/adm/supports.js
+0
-88
teasers-templates.js
src/public/js/adm/teasers-templates.js
+0
-120
translations.js
src/public/js/adm/translations.js
+0
-5
users.js
src/public/js/adm/users.js
+0
-54
users_form.js
src/public/js/adm/users_form.js
+0
-258
vacancies-edit.js
src/public/js/adm/vacancies-edit.js
+0
-40
vacancies.js
src/public/js/adm/vacancies.js
+0
-35
script-feeds-stat.js
src/public/js/script-feeds-stat.js
+29
-6
SystemAction.php
src/src/App/Action/Admin/SystemAction.php
+10
-11
Cabinet.php
src/src/App/Action/User/Cabinet.php
+4
-0
StatsDays.php
src/src/App/Model/Feeds/StatsDays.php
+4
-0
cabinet-feed.phtml
src/templates/app/user/cabinet-feed.phtml
+5
-3
No files found.
src/public/css/styles-contacts.css
0 → 100644
View file @
cc66f538
/* Таблица стилей к странице контактов */
.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
src/public/js/adm/cpatables.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
)
+
'"> < </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
)
+
'"> > </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
+
'] '
+
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
src/public/js/adm/jquery.sortTable.js
deleted
100644 → 0
View file @
b0b46f66
;(
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
);
src/public/js/adm/jquery.table2excel.js
deleted
100644 → 0
View file @
b0b46f66
//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
);
src/public/js/adm/offer-page.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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'
)
+
' <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">×</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">×</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
src/public/js/adm/offers.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/adm/orders.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
+
'] '
+
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
)
+
'"> < </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
)
+
'"> > </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
src/public/js/adm/partners.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/adm/service-actions.js
View file @
cc66f538
...
...
@@ -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'
,
...
...
src/public/js/adm/sites.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/adm/sites_form.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
;
});
});
src/public/js/adm/skin-page.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/adm/supports.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
;
});
});
src/public/js/adm/teasers-templates.js
deleted
100644 → 0
View file @
b0b46f66
(
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
);
src/public/js/adm/translations.js
deleted
100644 → 0
View file @
b0b46f66
$
(
document
).
ready
(
function
()
{
"use strict"
;
autosize
(
$
(
"textarea"
));
});
\ No newline at end of file
src/public/js/adm/users.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/adm/users_form.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
;
});
});
src/public/js/adm/vacancies-edit.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
;
}
});
});
src/public/js/adm/vacancies.js
deleted
100644 → 0
View file @
b0b46f66
$
(
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
src/public/js/script-feeds-stat.js
View file @
cc66f538
...
...
@@ -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
src/src/App/Action/Admin/SystemAction.php
View file @
cc66f538
...
...
@@ -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
->
re
moveTplTemplatesTable
(
$request
);
//
Сформировать тестовые данные для статистики по фидам
:
if
(
$data
[
'
feedTestData
'
])
{
return
$this
->
re
nderFeedTestData
(
$request
);
}
}
/* Системные операции */
private
function
re
moveTplTemplatesTable
(
ServerRequestInterface
$request
)
private
function
re
nderFeedTestData
(
ServerRequestInterface
$request
)
{
return
new
JsonResponse
(
123
);
/** @var \App\Model\Offers $landingsModel */
$landingsModel
=
$this
->
container
->
get
(
\App\Model\Offers\Landings
::
class
);
$landings
=
$landingsModel
->
findAll
();
...
...
src/src/App/Action/User/Cabinet.php
View file @
cc66f538
...
...
@@ -258,6 +258,10 @@ class Cabinet extends Common
break
;
}
if
(
!
$periodStats
)
{
return
new
JsonResponse
(
null
);
}
$periodStats
[
'type'
]
=
'interval'
;
$periodStats
[
'report'
]
=
$report_type
;
...
...
src/src/App/Model/Feeds/StatsDays.php
View file @
cc66f538
...
...
@@ -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'
=>
[],
...
...
src/templates/app/user/cabinet-feed.phtml
View file @
cc66f538
...
...
@@ -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"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment