476 lines
16 KiB
PHP
476 lines
16 KiB
PHP
|
|
<?php
|
||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
|
||
|
|
|
||
|
|
if (!$_SESSION['id']) {
|
||
|
|
header("location:index.php");
|
||
|
|
die("Доступ запрещён!");
|
||
|
|
}
|
||
|
|
|
||
|
|
require($_SERVER['DOCUMENT_ROOT'] . "/templates/new-header.php");
|
||
|
|
|
||
|
|
$currentUserId = $_SESSION['id'];
|
||
|
|
|
||
|
|
$user_view = new User;
|
||
|
|
$user_view->get($currentUserId);
|
||
|
|
|
||
|
|
if (!isset($user_view->agencyId)) {
|
||
|
|
$user_view->agencyId = $currentUserId;
|
||
|
|
$user_view->agencyName = $user_view->fio;
|
||
|
|
}
|
||
|
|
|
||
|
|
$agency_id = (int) $user_view->agencyId;
|
||
|
|
$funnelsDBO = mysql_query("select * from funnel WHERE agency_id = {$agency_id}");
|
||
|
|
|
||
|
|
$funnels = array();
|
||
|
|
while ($row = mysql_fetch_assoc($funnelsDBO)) {
|
||
|
|
$funnel = array();
|
||
|
|
$funnel['id'] = $row['id'];
|
||
|
|
$funnel['name'] = $row['name'];
|
||
|
|
$funnel['steps'] = array();
|
||
|
|
|
||
|
|
$funnelSteps = mysql_query("select * from funnel_steps WHERE funnel_id = " . $funnel['id']);
|
||
|
|
while ($row2 = mysql_fetch_assoc($funnelSteps)) {
|
||
|
|
$a = array();
|
||
|
|
$a['id'] = $row2['id'];
|
||
|
|
$a['name'] = $row2['name'];
|
||
|
|
$a['fields'] = htmlspecialchars_decode($row2['pole_end_list']);
|
||
|
|
array_push($funnel['steps'], $a);
|
||
|
|
}
|
||
|
|
|
||
|
|
array_push($funnels, $funnel);
|
||
|
|
}
|
||
|
|
$__funnelsText = json_encode($funnels);
|
||
|
|
?>
|
||
|
|
|
||
|
|
<style>
|
||
|
|
.__main {
|
||
|
|
background: #fff;
|
||
|
|
margin: 23px 35px 0;
|
||
|
|
border: 2px solid rgb(67,160,71);
|
||
|
|
-webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
|
||
|
|
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
|
||
|
|
border-radius: 2px;
|
||
|
|
}
|
||
|
|
.__main .__div {
|
||
|
|
padding: 17px 35px 23px;
|
||
|
|
}
|
||
|
|
.__main h2 {
|
||
|
|
width: 100%;
|
||
|
|
color: #757575;
|
||
|
|
margin: 0 0 16px 0;
|
||
|
|
font-weight: normal;
|
||
|
|
}
|
||
|
|
|
||
|
|
.__main .__div input {
|
||
|
|
width: 350px;
|
||
|
|
padding: 8px 10px 9px;
|
||
|
|
font-size: 15px;
|
||
|
|
border: 1px solid #e0e0e0;
|
||
|
|
font-family: "Lato";
|
||
|
|
border-radius: 3px;
|
||
|
|
}
|
||
|
|
.__main .__div .__item {
|
||
|
|
padding: 6px 57px;
|
||
|
|
cursor: pointer;
|
||
|
|
background: -webkit-linear-gradient(top, #fff, #f5f5f5);
|
||
|
|
border: 1px solid #d0d0d0;
|
||
|
|
border-radius: 4px;
|
||
|
|
text-align: center;
|
||
|
|
margin: 13px 0;
|
||
|
|
width: fit-content;
|
||
|
|
}
|
||
|
|
.__main .__div .__item p {
|
||
|
|
display: inline;
|
||
|
|
}
|
||
|
|
.__main .__div .__item[data-active="1"] {
|
||
|
|
background: #fff !important;
|
||
|
|
border-color: rgba(56, 142, 60, .6) !important;
|
||
|
|
}
|
||
|
|
.__main .__field_selection, #__FUNNELS, #__TYPE, #__ADD_DATA {
|
||
|
|
border-top: 1px solid #d0d0d0;
|
||
|
|
}
|
||
|
|
.__main .__field_selection p {
|
||
|
|
position: relative;
|
||
|
|
padding: 0 0 5px;
|
||
|
|
cursor: pointer;
|
||
|
|
width: fit-content;
|
||
|
|
}
|
||
|
|
.__main .__field_selection p:before {
|
||
|
|
position: absolute;
|
||
|
|
top: 1px;
|
||
|
|
left: -36px;
|
||
|
|
box-shadow: inset 0 2px 3px rgba(0,0,0,.2);
|
||
|
|
border: 1px solid #000;
|
||
|
|
border-radius: 9px;
|
||
|
|
width: 30px;
|
||
|
|
height: 17px;
|
||
|
|
background: #dddddd;
|
||
|
|
content: '';
|
||
|
|
transition: all .2s ease-out;
|
||
|
|
}
|
||
|
|
.__main .__field_selection p:after {
|
||
|
|
position: absolute;
|
||
|
|
top: 3px;
|
||
|
|
left: -34px;
|
||
|
|
box-shadow: 0 2px 3px rgba(0,0,0,.2);
|
||
|
|
border: 1px solid #000;
|
||
|
|
border-radius: 50%;
|
||
|
|
width: 13px;
|
||
|
|
height: 13px;
|
||
|
|
background: #fff;
|
||
|
|
content: '';
|
||
|
|
transition: all .2s ease-out;
|
||
|
|
}
|
||
|
|
.__main .__field_selection div[data-active="1"] p:before {
|
||
|
|
background: #4caf50;
|
||
|
|
content: '';
|
||
|
|
}
|
||
|
|
.__main .__field_selection div[data-active="1"] p:after {
|
||
|
|
left: -21px;
|
||
|
|
content: '';
|
||
|
|
}
|
||
|
|
.__main .__div .__step {
|
||
|
|
padding: 15px 36px 0;
|
||
|
|
}
|
||
|
|
.__main .__div .__step p {
|
||
|
|
font-size: 18px;
|
||
|
|
}
|
||
|
|
.__main .__div .__field {
|
||
|
|
padding: 0 46px;
|
||
|
|
}
|
||
|
|
.__main > div .__field p {
|
||
|
|
font-size: 16px;
|
||
|
|
}
|
||
|
|
.__main .__button {
|
||
|
|
background: linear-gradient(to bottom, rgba(67,160,71,1) 0%,rgba(56,142,60,1) 100%);
|
||
|
|
cursor: pointer;
|
||
|
|
}
|
||
|
|
.__main .__button p {
|
||
|
|
text-align: center;
|
||
|
|
font-family: "Lato";
|
||
|
|
color: #ffffff;
|
||
|
|
font-size: 20px;
|
||
|
|
font-weight: bold;
|
||
|
|
}
|
||
|
|
|
||
|
|
#__TYPE {
|
||
|
|
display: flex;
|
||
|
|
flex-wrap: wrap;
|
||
|
|
}
|
||
|
|
#__TYPE p {
|
||
|
|
padding: 9px 20px 11px;
|
||
|
|
}
|
||
|
|
#__TYPE p[data-active="0"] {
|
||
|
|
cursor: pointer;
|
||
|
|
color: #757575;
|
||
|
|
border: 1px solid #d0d0d0;
|
||
|
|
background: linear-gradient(180deg, #fff, #f5f5f5);
|
||
|
|
}
|
||
|
|
#__TYPE p[data-active="1"] {
|
||
|
|
color: rgb(255, 255, 255);
|
||
|
|
border: 1px solid #424242;
|
||
|
|
cursor: default;
|
||
|
|
background: #424242;
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
<div class="content-right">
|
||
|
|
<div class="inner">
|
||
|
|
<div class="main-title">
|
||
|
|
<h1>Новая таблица</h1>
|
||
|
|
</div>
|
||
|
|
<div class="__main">
|
||
|
|
<div class="__div">
|
||
|
|
<h2>Название таблицы</h2>
|
||
|
|
<input id="__TABLE_NAME" type="text">
|
||
|
|
</div>
|
||
|
|
<div id="__TYPE" class="__div" style="display:none;">
|
||
|
|
<h2>Тип таблицы</h2>
|
||
|
|
<p data-active="0" data-type="1">Менеджеры</p>
|
||
|
|
<p data-active="1" data-type="2">Клиенты</p>
|
||
|
|
</div>
|
||
|
|
<div id="__FUNNELS" class="__div"></div>
|
||
|
|
<div id="__ADD_DATA" class="__field_selection __div">
|
||
|
|
<h2>Дополнительные данные по клиенту</h2>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Эл. почта</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Телефон</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Тип клиента</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Роль клиента</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Тип недвижимости</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Объекты</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Бюджет</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Описание</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Ответственный</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step sources" data-active="0">
|
||
|
|
<p>Источник</p>
|
||
|
|
</div>
|
||
|
|
<div class="__step" data-active="0">
|
||
|
|
<p>Текущий этап</p>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div id="__STEPS"></div>
|
||
|
|
<div id="__SAVE" class="__button __div">
|
||
|
|
<p>Добавить</p>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div id="__funnelsText" style="display:none;"><?php echo($__funnelsText) ?></div>
|
||
|
|
<script>
|
||
|
|
|
||
|
|
|
||
|
|
let __funnels = JSON.parse($('#__funnelsText').html());
|
||
|
|
|
||
|
|
$('#__TYPE p').click(function (e) {
|
||
|
|
let t = $(e.target);
|
||
|
|
if (t.attr('data-active') == 1) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
let type = t.attr('data-type');
|
||
|
|
|
||
|
|
$('#__TYPE p').attr('data-active', 0);
|
||
|
|
$('#__TYPE p[data-type="' + type + '"]').attr('data-active', 1);
|
||
|
|
if (type == 2) {
|
||
|
|
$('#__ADD_DATA').css('display', 'block');
|
||
|
|
} else {
|
||
|
|
$('#__ADD_DATA').css('display', 'none');
|
||
|
|
}
|
||
|
|
});
|
||
|
|
$('#__ADD_DATA p').click(function (e) {
|
||
|
|
let t = $(e.target);
|
||
|
|
if (!t.attr('class')) {
|
||
|
|
t = $(e.target).parent();
|
||
|
|
}
|
||
|
|
if (t.attr('data-active') == 0) {
|
||
|
|
t.attr('data-active', 1);
|
||
|
|
if($(this).parent().hasClass('sources')){
|
||
|
|
getSources();
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
t.attr('data-active', 0);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
let __FUNNELS_HTML = '<h2>Воронки</h2>';
|
||
|
|
for (let i = 0; i < __funnels.length; i++) {
|
||
|
|
__FUNNELS_HTML += '<div class="__item" data-active="0" data-i="' + i + '"><p>' + __funnels[i].name + '</p></div>';
|
||
|
|
}
|
||
|
|
$('#__FUNNELS').html(__FUNNELS_HTML);
|
||
|
|
|
||
|
|
$('#__FUNNELS .__item').click(function (e) {
|
||
|
|
let t = $(e.target);
|
||
|
|
if (!t.attr('class')) {
|
||
|
|
t = $(e.target).parent();
|
||
|
|
}
|
||
|
|
if (t.attr('data-active') == 0) {
|
||
|
|
t.attr('data-active', 1);
|
||
|
|
} else {
|
||
|
|
t.attr('data-active', 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
__printSteps();
|
||
|
|
});
|
||
|
|
|
||
|
|
function __printSteps() {
|
||
|
|
let html = '';
|
||
|
|
|
||
|
|
for (let i = 0; i < $('#__FUNNELS .__item').length; i++) {
|
||
|
|
if ($($('#__FUNNELS .__item')[i]).attr('data-active') == 1) {
|
||
|
|
let j = $($('#__FUNNELS .__item')[i]).attr('data-i');
|
||
|
|
html += __getStepsHtml(__funnels[j]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$('#__STEPS').html(html);
|
||
|
|
$('#__STEPS p').click(function (e) {
|
||
|
|
let t = $(e.target);
|
||
|
|
if (!t.attr('class')) {
|
||
|
|
t = $(e.target).parent();
|
||
|
|
}
|
||
|
|
if (t.attr('data-active') == 0) {
|
||
|
|
t.attr('data-active', 1);
|
||
|
|
} else {
|
||
|
|
t.attr('data-active', 0);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function __getStepsHtml(funnel) {
|
||
|
|
let html = '';
|
||
|
|
if ($('#__STEPS .__field_selection[data-id="' + funnel.id + '"]').length > 0) {
|
||
|
|
html = '<div class="__field_selection __div" data-id="' + funnel.id + '">';
|
||
|
|
html += $('#__STEPS .__field_selection[data-id="' + funnel.id + '"]').html();
|
||
|
|
html += '</div>';
|
||
|
|
} else {
|
||
|
|
html = '<div class="__field_selection __div" data-id="' + funnel.id + '"><h2 style="margin:0;">Этапы и поля из "' + funnel.name + '"</h2>';
|
||
|
|
|
||
|
|
for (let i = 0; i < funnel.steps.length; i++) {
|
||
|
|
html += '<div data-id="' + funnel.steps[i].id + '"><div class="__step" data-active="0"><p>' + funnel.steps[i].name + '</p></div>';
|
||
|
|
let fields = JSON.parse(funnel.steps[i].fields);
|
||
|
|
for (let j = 0; j < fields.length; j++) {
|
||
|
|
if (fields[j].type === 'Текст') {
|
||
|
|
html += '<div class="__field" data-active="0"><p>' + fields[j].name + '</p></div>';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
html += '</div>';
|
||
|
|
}
|
||
|
|
|
||
|
|
html += '</div>';
|
||
|
|
}
|
||
|
|
return html;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getSources(){
|
||
|
|
$.post("/ajax/getSources.php", function(data){
|
||
|
|
|
||
|
|
var res = JSON.parse(data);
|
||
|
|
var shtml = '<div id="soursesDiv">';
|
||
|
|
for(var i=0; i<res.length; i++){
|
||
|
|
var active = 0;
|
||
|
|
shtml += '<div class="__field" data-id="'+res[i].id+'" data-active="'+active+'"><p>'+res[i].name+'</p></div>';
|
||
|
|
}
|
||
|
|
shtml += '</div>';
|
||
|
|
|
||
|
|
$("#__ADD_DATA .sources").after(shtml);
|
||
|
|
$('#soursesDiv .__field p').click(function (e) {
|
||
|
|
let t = $(e.target);
|
||
|
|
if (!t.attr('class')) {
|
||
|
|
t = $(e.target).parent();
|
||
|
|
}
|
||
|
|
if (t.attr('data-active') == 0) {
|
||
|
|
t.attr('data-active', 1);
|
||
|
|
|
||
|
|
} else {
|
||
|
|
t.attr('data-active', 0);
|
||
|
|
|
||
|
|
}
|
||
|
|
});
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
$('#__SAVE').click(function () {
|
||
|
|
let name = $('#__TABLE_NAME').val();
|
||
|
|
let type = Number($('#__TYPE p[data-active="1"').attr('data-type'));
|
||
|
|
let funnels = [];
|
||
|
|
|
||
|
|
let funnelSelected = $('#__STEPS .__field_selection').length;
|
||
|
|
for (let i = 0; i < funnelSelected; i++) {
|
||
|
|
let el = $($('#__STEPS .__field_selection')[i]);
|
||
|
|
let funnel = {};
|
||
|
|
funnel.id = Number(el.attr('data-id'));
|
||
|
|
funnel.steps = [];
|
||
|
|
|
||
|
|
for (let j = 0; j < el.children('div[data-id]').length; j++) {
|
||
|
|
let stepEl = $(el.children('div[data-id]')[j]);
|
||
|
|
let step = {};
|
||
|
|
step.id = Number(stepEl.attr('data-id'));
|
||
|
|
step.self = Number($(stepEl.children('div[data-active]')[0]).attr('data-active'));
|
||
|
|
step.fields = [];
|
||
|
|
for (let k = 1; k < $(stepEl.children('div[data-active]')).length; k++) {
|
||
|
|
let fieldEl = $(stepEl.children('div[data-active]')[k]);
|
||
|
|
if (fieldEl.attr('data-active') == 1) {
|
||
|
|
step.fields.push(fieldEl.children('p').html());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (step.self === 1 || step.fields.length > 0) {
|
||
|
|
funnel.steps.push(step);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
funnels.push(funnel);
|
||
|
|
}
|
||
|
|
|
||
|
|
let addFields = {};
|
||
|
|
if (type === 2) {
|
||
|
|
if (Number($($('#__ADD_DATA > div')[0]).attr('data-active'))) {
|
||
|
|
addFields.email = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[1]).attr('data-active'))) {
|
||
|
|
addFields.phone = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[2]).attr('data-active'))) {
|
||
|
|
addFields.client_type = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[3]).attr('data-active'))) {
|
||
|
|
addFields.client_role = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[4]).attr('data-active'))) {
|
||
|
|
addFields.property_type = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[5]).attr('data-active'))) {
|
||
|
|
addFields.objects = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[6]).attr('data-active'))) {
|
||
|
|
addFields.budget = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[7]).attr('data-active'))) {
|
||
|
|
addFields.description = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[8]).attr('data-active'))) {
|
||
|
|
addFields.responsible = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[9]).attr('data-active'))) {
|
||
|
|
addFields.source = 1;
|
||
|
|
}
|
||
|
|
if (Number($($('#__ADD_DATA > div')[10]).attr('data-active'))) {
|
||
|
|
addFields.curr = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var sources = [];
|
||
|
|
if($('#__ADD_DATA .sources').attr('data-active') > 0){
|
||
|
|
$('#soursesDiv .__field').each(function(){
|
||
|
|
if($(this).attr('data-active') > 0){
|
||
|
|
if($(this).attr('data-id')){
|
||
|
|
sources.push(parseInt($(this).attr('data-id')));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
addFields.sources = sources;
|
||
|
|
}
|
||
|
|
|
||
|
|
let tableData = {
|
||
|
|
name: name,
|
||
|
|
type: type,
|
||
|
|
funnels: JSON.stringify(funnels),
|
||
|
|
addFields: JSON.stringify(addFields)
|
||
|
|
};
|
||
|
|
|
||
|
|
var fo = new FormData();
|
||
|
|
for (var k in tableData) {
|
||
|
|
fo.append(k, tableData[k]);
|
||
|
|
}
|
||
|
|
var xhr = new XMLHttpRequest();
|
||
|
|
xhr.open('POST', '/ajax/createNewStatTable.php', true);
|
||
|
|
xhr.onreadystatechange = function () {
|
||
|
|
if (this.readyState != 4) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (this.status == 200) {
|
||
|
|
window.location = 'https://joywork.ru/charts.php';
|
||
|
|
}
|
||
|
|
};
|
||
|
|
xhr.send(fo);
|
||
|
|
});
|
||
|
|
</script>
|
||
|
|
</div>
|
||
|
|
<?php require($_SERVER['DOCUMENT_ROOT'] . "/templates/footer.php"); ?>
|