This commit is contained in:
Vladimir 2026-05-22 21:21:54 +03:00
commit 158f310683
4613 changed files with 1178599 additions and 0 deletions

29
.htaccess Normal file
View File

@ -0,0 +1,29 @@
php_flag register_globals off
AddDefaultCharset UTF-8
Options -Indexes
ErrorDocument 404 /404.html
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://joywork.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]
# Slug-роутинг для статей: если физического файла нет — отдаём article.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-]+)\.php$ /article.php?slug=$1 [L,QSA]
</IfModule>
Redirect 301 /15-best-crm-real-estate.php https://joywork.ru/

1592
15-best-crm-real-estate.php Normal file

File diff suppressed because it is too large Load Diff

1253
2018_price.csv Normal file

File diff suppressed because it is too large Load Diff

1253
2018_price_.csv Normal file

File diff suppressed because it is too large Load Diff

4479
2018_quantity.csv Normal file

File diff suppressed because it is too large Load Diff

1253
2019_price.csv Normal file

File diff suppressed because it is too large Load Diff

3486
2019_quantity.csv Normal file

File diff suppressed because it is too large Load Diff

32
404.html Normal file
View File

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404</title>
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="./assets/normalize.css">
<link rel="stylesheet" href="./assets/style.css">
</head>
<body>
<header class="main-header">
<div class="lw-container">
<a href="/index.php">
<img src="./assets/img/logo.svg" alt="Логотип" width="182" height="42">
</a>
</div>
</header>
<section class="section-404">
<div class="lw-container section-404__container">
<img src="./assets/img/404.svg" alt="404" width="600" height="360">
<h1 class="section-404__title">404</h1>
<p>Вы ищете страницу, которая была удалена.</p>
<p>Пожалуйста, перейдите на главную страницу сайта.</p>
<a href="/index.php">Перейти на главную страницу</a>
</div>
</section>
</body>
</html>

BIN
Favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

288
README.md Normal file
View File

@ -0,0 +1,288 @@
# Руководство по настройке проекта
Этот документ описывает процесс настройки и развертывания окружения проекта с использованием Docker.
В нем содержатся инструкции по установке, запуску контейнеров, настройке базы данных и устранению возможных ошибок.
## Предварительные требования
Убедитесь, что на вашем локальном компьютере установлены следующие компоненты:
- **Docker** (для контейнеризации)
- **Docker Compose** (для управления многоконтейнерными приложениями Docker)
- **Git** (для контроля версий и управления репозиториями)
## Шаги
### 1. Клонирование репозитория
Если репозиторий проекта размещен на Git, клонируйте его с помощью следующей команды:
```sh
git clone https://gt.joywork.ru/JW/joywork.dev.git
cd joywork.dev
```
---
### 2. Переход в каталог Docker
Перейдите в каталог, где находятся файлы конфигурации Docker (`docker-compose.yml` и другие):
```sh
cd ./docker
```
---
### 3. Сборка и запуск контейнеров Docker
Выполните следующие команды для сборки и запуска контейнеров с помощью Docker Compose:
```sh
docker-compose build
docker-compose up -d
```
- Первая команда собирает образы Docker в соответствии с конфигурацией.
- Вторая команда запускает контейнеры в фоновом режиме (`-d`).
---
### 4. Установите права доступа для файла `my.cnf`
Чтобы установить права доступа `chmod 644` для файла `my.cnf`, выполните следующую команду:
**Linux**
```sh
sudo chmod 644 ./mysql/my.cnf
```
**Windows**
Команды надо запускать в терминале Powershell
```powershell
icacls "./mysql/my.cnf" /grant "Everyone:(R)"
```
Эта команда задаст права на файл следующим образом:
- Владелец может читать и изменять файл.
- Все остальные пользователи могут только читать файл.
---
### 5. Ожидание завершения импорта базы данных
Перед открытием проекта убедитесь, что импорт базы данных завершен.
Используйте следующую команду, чтобы отслеживать статус импорта:
**Linux**
```sh
watch -n 2 "docker exec -i DataBase mysql -u root -p'root' -e 'SHOW PROCESSLIST;'"
```
**Windows**
Команды надо запускать в терминале Powershell
```powershell
while ($true) {
docker exec -i DataBase mysql -u root -p'root' -e "SHOW PROCESSLIST;"
Start-Sleep -Seconds 2
}
```
Когда процесс импорта завершится, можно продолжить настройку.
---
### 6. Важное изменение в файле `templates/new-header.php`
Для корректной работы проекта **необходимо закомментировать строки 587-591** в файле `templates/new-header.php`.
Найдите и измените код:
```php
<?php
$chat = new ChatsCianAvito();
$can_chat_cian = $chat->can_chat($user, 2);
$can_chat_avito = $chat->can_chat($user, 1);
?>
```
**Закомментируйте эти строки, добавив `//` перед каждой строкой:**
```php
<?php
// $chat = new ChatsCianAvito();
// $can_chat_cian = $chat->can_chat($user, 2);
// $can_chat_avito = $chat->can_chat($user, 1);
?>
```
Без этого изменения проект может не запуститься или работать некорректно.
---
### 7. Открытие проекта в браузере
После завершения настройки вы можете открыть проект в браузере по следующему адресу:
```
http://localhost
```
- **Логин:** `+79650964640`
- **Пароль:** `12345`
Этот URL будет служить для доступа к проекту, работающему внутри контейнера Docker.
---
## 8. Полная очистка данных перед запуском (MySQL и Sphinx) (Если прежне уже был устоновлен JW)
Если требуется сбросить все данные MySQL и Sphinx перед запуском контейнеров, выполните следующие шаги:
### **8.1. Остановите все контейнеры Docker**
```sh
docker-compose down
```
### **8.2. Полностью очистите данные MySQL**
Удалите данные MySQL, чтобы сбросить базу:
**Linux**
```sh
sudo rm -rf ./mysql/data
mkdir -p ./mysql/data
sudo chown -R 999:999 ./mysql/data
```
**Windows**
Команды надо запускать в терминале Powershell
```powershell
Remove-Item -Recurse -Force .\mysql\data
New-Item -Path .\mysql\data -ItemType Directory
icacls .\mysql\data /grant "Users:(OI)(CI)F"
```
### **8.3. Полностью очистите данные Sphinx**
Удалите старые индексы и логи:
**Linux**
```sh
sudo rm -rf sphinx/index/
sudo rm -rf sphinx/binlog/
sudo mkdir -p sphinx/index/
sudo mkdir -p sphinx/binlog/
sudo rm -rf sphinx2/index/
sudo rm -rf sphinx2/binlog/
sudo mkdir -p sphinx2/index/
sudo mkdir -p sphinx2/binlog/
```
**Windows**
Команды надо запускать в терминале Powershell
```powershell
Remove-Item -Recurse -Force .\sphinx\index\
Remove-Item -Recurse -Force .\sphinx\binlog\
New-Item -Path .\sphinx\index -ItemType Directory
New-Item -Path .\sphinx\binlog -ItemType Directory
Remove-Item -Recurse -Force .\sphinx2\index\
Remove-Item -Recurse -Force .\sphinx2\binlog\
New-Item -Path .\sphinx2\index -ItemType Directory
New-Item -Path .\sphinx2\binlog -ItemType Directory
```
### **8.4. Установите правильные права доступа**
Чтобы контейнеры могли записывать в папки, установите соответствующие права:
**Linux**
```sh
sudo chown -R 999:999 ./sphinx/index
sudo chown -R 999:999 ./sphinx/binlog
sudo chown -R 999:999 ./sphinx2/index
sudo chown -R 999:999 ./sphinx2/binlog
sudo chmod -R 777 ./sphinx/index
sudo chmod -R 777 ./sphinx/binlog
sudo chmod -R 777 ./sphinx2/index
sudo chmod -R 777 ./sphinx2/binlog
```
**Windows**
Команды надо запускать в терминале Powershell
```powershell
icacls .\sphinx\index /grant "Users:(OI)(CI)F" /T
icacls .\sphinx\binlog /grant "Users:(OI)(CI)F" /T
icacls .\sphinx2\index /grant "Users:(OI)(CI)F" /T
icacls .\sphinx2\binlog /grant "Users:(OI)(CI)F" /T
```
### **8.5. Перезапустите контейнеры**
После очистки данных снова запустите контейнеры:
```sh
docker-compose up -d
```
### **8.6. Проверьте состояние контейнеров**
Убедитесь, что все контейнеры успешно запущены:
```sh
docker ps
```
Если возникли ошибки, проверьте логи:
```sh
docker-compose logs
```
---
## Заключение
После выполнения этих шагов:
- Контейнеры Docker будут запущены и работать.
- База данных MySQL будет восстановлена из файла `/docker/dump/schema.sql`.
- Вы сможете проверить структуру и данные базы данных.
- Проект будет доступен по адресу `http://localhost`.
- MySQL будет доступен через phpMyAdmin по адресу `http://localhost:8085`.
---
## Устранение неполадок
Если во время настройки возникли ошибки:
- Проверьте логи с помощью команды:
```sh
docker-compose logs
```
- Перезапустите контейнеры при необходимости:
```sh
docker-compose down && docker-compose up -d
```
- Проверьте логи ошибок MySQL для диагностики проблем.
За дополнительной информацией обратитесь к документации проекта или свяжитесь с командой поддержки.

7290
add-object-test.php Normal file

File diff suppressed because it is too large Load Diff

7931
add-object.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,42 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "INSERT INTO block_benefits (block_id, benefit_icon, benefit_name, benefit_description) VALUES (" . $post['block_id'] . ", '" . $post['benefit_icon'] ."', '" . $post['benefit_name'] ."', '" . $post['benefit_description'] ."')";
try {
mysql_query($sql);
$sql = "SELECT * FROM block_benefits WHERE block_id='" . $post['block_id'] . "'";
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,28 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "INSERT INTO block_plus_minus (block_id, `text`, plus_minus) VALUES ('" . $post['block_id'] . "', '" . $post['text'] ."', '" .$post['plus_minus']. "')";
try {
mysql_query($sql);
$id = mysql_insert_id();
// $sql = "SELECT * FROM block_reviews WHERE block_id=".$post['block_id'];
$sql = "SELECT * FROM block_plus_minus WHERE id=".$id;
try {
$result = mysql_query($sql);
while ($obj = mysql_fetch_assoc($result)) {
$obj['date_create'] = date("d.m.Y H:i");
echo json_encode($obj); exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,15 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "UPDATE block_images SET (img_date='".$post['date']."') WHERE id=".$post['id'];
try {
mysql_query($sql);
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,27 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "INSERT INTO block_reviews (block_id, review, name) VALUES ('" . $post['block_id'] . "', '" . $post['review'] ."', '" .$post['name']. "')";
try {
mysql_query($sql);
$id = mysql_insert_id();
// $sql = "SELECT * FROM block_reviews WHERE block_id=".$post['block_id'];
$sql = "SELECT * FROM block_reviews WHERE id=".$id;
try {
$result = mysql_query($sql);
while ($obj = mysql_fetch_assoc($result)) {
echo json_encode($obj); exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,51 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "INSERT INTO block_videos (block_id, url) VALUES (" . $post['block_id'] . ", '" . $post['url'] ."')";
try {
mysql_query($sql);
$sql = "SELECT * FROM block_videos WHERE block_id='" . $post['block_id'] . "'";
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="block_video_wrap">'.
'<span class="block_video_url">'.$obj["url"].'</span>'.
'<span class="block_video_del" block_id="'.$obj["block_id"].'" video_id="'.$obj["id"].'">Удалить</span>'.
'<div class="clear"></div>'.
'</div>
<div>
<div class="add_month_img">Добавить изображение:</div>
<div class="clear"></div>
<form method="post" enctype="multipart/form-data" id="block-video-images-form_'.$obj["id"].'" style="display: inline;">
<div class="block-video-images-container" id="block-video-images-container_'.$obj["id"].'" class="">
<input type="hidden" name="video_id" value="'.$obj["id"].'">
<input data-id="'.$obj["id"].'" type="file" name="blockVideoPhoto[]" accept="image/jpg,image/jpeg" multiple="">
</div>
</form>
<div id="image-block-video-result_'.$obj["id"].'">
</div>
<div class="clear"></div>
</div>'
;
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,35 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$obj = [];
$sql = "SELECT * FROM block_features WHERE block_id='" . $post['block_id'] . "'";
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$obj = mysql_fetch_assoc($result);
if (isset($post['set_data'])) {
$sql = "UPDATE block_features
SET facade='".$post['facade']."', storerooms=".$post['storerooms'].", prams=".$post['prams'].", apartments_count=".$post['apartments_count'].", living_space=".$post['living_space'].", planned_residents_count=".$post['planned_residents_count'].", furniture=".$post['furniture'].", smart_house=".$post['smart_house'].", glass='".$post['glass']."', parking_count=".$post['parking_count'].", paid_parking_count=".$post['paid_parking_count'].", parking_cost=".$post['parking_cost'].", paid_parking_type_on=".$post['paid_parking_type_on'].", paid_parking_type_under=".$post['paid_parking_type_under'].", yard_traffic=".$post['yard_traffic'].", yard_kindergarten=".$post['yard_kindergarten'].", yard_school=".$post['yard_school'].", children_objects=".$post['children_objects'].", playground=".$post['playground'].", trade_service=".$post['trade_service'].", medical=".$post['medical'].", walk_place=".$post['walk_place'].", yard_close=".$post['yard_close'].", security=".$post['security'].", without_cars=".$post['without_cars'].", video=".$post['video'].", dispatcher=".$post['dispatcher'].", school=".$post['school'].", kindergarten=".$post['kindergarten'].", clinic=".$post['clinic'].", drugstore=".$post['drugstore'].", supermarket=".$post['supermarket'].", fitness=".$post['fitness'].", analysis_children=".$post['analysis_children'].", analysis_infrastructure=".$post['analysis_infrastructure'].", analysis_area=".$post['analysis_area'].", analysis_security=".$post['analysis_security'].", analysis_transport=".$post['analysis_transport'].", analysis_apartment=".$post['analysis_apartment']."
WHERE block_id=".$post['block_id'];
}
} else {
$sql = "INSERT INTO block_features (block_id) VALUES ('" . $post['block_id'] . "')";
}
try {
$result = mysql_query($sql);
if (mysql_errno() == 0) {
echo json_encode($obj);exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,28 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "INSERT INTO builder_reviews (builder_id, review, name) VALUES ('" . $post['builder_id'] . "', '" . $post['review'] ."', '" .$post['name']. "')";
try {
mysql_query($sql);
$id = mysql_insert_id();
// $sql = "SELECT * FROM block_reviews WHERE block_id=".$post['block_id'];
$sql = "SELECT * FROM builder_reviews WHERE id=".$id;
try {
$result = mysql_query($sql);
while ($obj = mysql_fetch_assoc($result)) {
$obj['date'] = date("d.m.Y H:i");
echo json_encode($obj); exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,25 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_POST['schedule_date'] && $_POST['client_id'] && is_numeric($_POST['client_id'])) {
$post = clearInputData($_POST);
$scheduleDate = DateTime::createFromFormat('d.m.Y H:i', $post['schedule_date']);
$scheduleDate = "'".date("Y-m-d H:i:s", $scheduleDate->getTimestamp())."'";
$sql="SELECT * FROM clients_jw WHERE id=$post[client_id]";
$rez=mysql_query($sql);
$client = mysql_fetch_assoc($rez);
$idUser = $_SESSION['id'];
if ($client['who_work'] > 0) {
// тому событие, чей клиент
$idUser = $client['who_work'];
}
$from_id = $_SESSION['id'];
$sql = "INSERT INTO user_client_jw_events(user_id, client_id, type, comment, schedule_date, from_id) ";
$sql .= " VALUES($idUser, $post[client_id], 'call', '$post[comment]',$scheduleDate, $from_id)";
mysql_query($sql);
}

View File

@ -0,0 +1,22 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
if($_SESSION['id'] && $_POST['comment'] && $_POST['client_id'] && is_numeric($_POST['client_id'])) {
$post = clearInputData($_POST);
$sql="SELECT * FROM clients_jw WHERE id=$post[client_id]";
$rez=mysql_query($sql);
$client = mysql_fetch_assoc($rez);
$idUser = $_SESSION['id'];
if ($client['who_work'] > 0) {
// тому событие, чей клиент
$idUser = $client['who_work'];
}
$from_id = $_SESSION['id'];
$sql = "INSERT INTO user_client_jw_events(user_id, client_id, type, comment, from_id) ";
$sql .= " VALUES($idUser, $post[client_id], 'comment', '$post[comment]', $from_id)";
mysql_query($sql);
}

View File

@ -0,0 +1,24 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_POST['schedule_date'] && $_POST['client_id'] && is_numeric($_POST['client_id'])) {
$post = clearInputData($_POST);
$scheduleDate = DateTime::createFromFormat('d.m.Y H:i', $post['schedule_date']);
$scheduleDate = "'".date("Y-m-d H:i:s", $scheduleDate->getTimestamp())."'";
$sql="SELECT * FROM clients_jw WHERE id=$post[client_id]";
$rez=mysql_query($sql);
$client = mysql_fetch_assoc($rez);
$idUser = $_SESSION['id'];
if ($client['who_work'] > 0) {
// тому событие, чей клиент
$idUser = $client['who_work'];
}
$from_id = $_SESSION['id'];
$sql = "INSERT INTO user_client_jw_events(user_id, client_id, type, comment, sum, schedule_date, from_id) ";
$sql .= " VALUES($idUser, $post[client_id], 'deal', '$post[comment]', '$post[sum]', $scheduleDate, $from_id)";
mysql_query($sql);
}

View File

@ -0,0 +1,25 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_POST['schedule_date'] && $_POST['client_id'] && is_numeric($_POST['client_id'])) {
$post = clearInputData($_POST);
$scheduleDate = DateTime::createFromFormat('d.m.Y H:i', $post['schedule_date']);
$scheduleDate = "'".date("Y-m-d H:i:s", $scheduleDate->getTimestamp())."'";
$sql="SELECT * FROM clients_jw WHERE id=$post[client_id]";
$rez=mysql_query($sql);
$client = mysql_fetch_assoc($rez);
$idUser = $_SESSION['id'];
if ($client['who_work'] > 0) {
// тому событие, чей клиент
$idUser = $client['who_work'];
}
$from_id = $_SESSION['id'];
$sql = "INSERT INTO user_client_jw_events(user_id, client_id, type, comment, address, schedule_date, from_id) ";
$sql .= " VALUES($idUser, $post[client_id], 'meet', '$post[comment]', '$post[address]', $scheduleDate, $from_id)";
mysql_query($sql);
}

View File

@ -0,0 +1,25 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_POST['schedule_date'] && $_POST['client_id'] && is_numeric($_POST['client_id'])) {
$post = clearInputData($_POST);
$scheduleDate = DateTime::createFromFormat('d.m.Y H:i', $post['schedule_date']);
$scheduleDate = "'".date("Y-m-d H:i:s", $scheduleDate->getTimestamp())."'";
$sql="SELECT * FROM clients_jw WHERE id=$post[client_id]";
$rez=mysql_query($sql);
$client = mysql_fetch_assoc($rez);
$idUser = $_SESSION['id'];
if ($client['who_work'] > 0) {
// тому событие, чей клиент
$idUser = $client['who_work'];
}
$from_id = $_SESSION['id'];
$sql = "INSERT INTO user_client_jw_events(user_id, client_id, type, comment, address, schedule_date, from_id) ";
$sql .= " VALUES($idUser, $post[client_id], 'show', '$post[comment]', '$post[address]', $scheduleDate, $from_id)";
mysql_query($sql);
}

View File

@ -0,0 +1,37 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
if(isset($_POST['add_edit_client'])){
$post = clearInputData($_POST);
$error_add = Clients_jw::addEdit($post);
if(!$error_add){
echo 1;
} else {
echo $error_add;
}
}
if(isset($_POST['stage_edit'])){
$stage = (int)$_POST['stage_edit'];
$id = (int)$_POST['id'];
$sql = "UPDATE `clients_jw` SET `stage` = '{$stage}', `deleted` = 0 WHERE `id` = {$id}";
//echo $sql;
mysql_query($sql);
if(isset($_POST['turn'])){
$set_turns = json_decode(html_entity_decode($_POST['turn']), ENT_QUOTES);
$time = time();
foreach($set_turns as $key => $turn){
$sql = "UPDATE `clients_jw` SET `turntime` = ".$time.", `turn` = ".$turn." WHERE `id` = {$key}";
// echo $sql;
mysql_query($sql);
}
}
echo 1;
}
if(isset($_POST['done_event'])){
$event_id = (int)$_POST['done_event'];
$done = (int)$_POST['done'];
$sql = "UPDATE `user_client_jw_events` SET `calendar_view` = {$done} WHERE `id` = {$event_id}";
mysql_query($sql);
}

View File

@ -0,0 +1,936 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/ajax/vue_php_function.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
$data = json_decode(file_get_contents("php://input"));
$pdo = new MysqlPdo(hst, ndb, user, pass);
$sql = "SET NAMES 'utf8'";
$pdo->query($sql);
$request = $data->request;
if($request == 'get_type'){
foreach ($WORK_TYPES as $key => $val){
if($key > 0){
$clientstype = array('code'=>$key, 'name'=>$val);
$response[] = $clientstype;
}
}
echo json_encode($response);
exit;
}
if($request == 'get_role'){
foreach($ROLES_CLIENTS as $key => $val){
if($key > 0){
$clientsrole = array('code'=>$key, 'name'=>$val);
$response[] = $clientsrole;
}
}
echo json_encode($response);
exit;
}
// Add record
if($request == 'addFunnel'){
$response = [];
$name = clearInputElement($data->name);
$client_type = clearInputElement($data->client_type);
$role = clearInputElement($data->role);
$user_id = clearInputElement($data->user_id);
$agency_id = clearInputElement($data->agency_id);
$is_req = (int)$data->is_req;
$is_client = (int)$data->is_client;
$order_number = (int)$data->order_number;
$is_agent = (int)$data->is_agent;
$is_agency = (int)$data->is_agency;
$is_dev = (int)$data->is_dev;
$users_no_see = $data->users_no_see;
if(empty($users_no_see)){
$users_no_see = '';
} else {
$users_no_see = json_encode($users_no_see);
}
$funnelData = $pdo->query("SELECT id FROM funnel_admin WHERE deleted=0 and name='".$name."' and agency_id='".$agency_id."'");
if($pdo->num_rows($funnelData) == 0){
if($pdo->query("INSERT INTO funnel_admin (name,client_type,role,user_id,agency_id,is_req,is_client, order_number, users_no_see, is_agent, is_agency, is_dev)
VALUES ('".$name."','".$client_type."','".$role."', '".$user_id."', '".$agency_id."', {$is_req}, {$is_client}, {$order_number}, '{$users_no_see}', '{$is_agent}', '{$is_agency}', '{$is_dev}')"))
$response['done'] = 'done';
else
$response['error'] = $pdo->errorInfo();
}else{
$response['error'] = "Воронка с таким наименованием уже есть в вашем агенстве";
}
echo json_encode($response);
exit;
}
//All funnels agency
if($request == 'get_all_funnel'){
$agency_id = $data->agency_id;
$funnelsData = mysql_query("select * from funnel_admin WHERE agency_id = {$agency_id} and deleted = 0 order by id");
$response = array();
//Нулевая воронка
/* $sql_d = "SELECT * FROM funnel_default WHERE agency_id = {$agency_id}";
$q_d = $pdo->query($sql_d);
if($pdo->num_rows($q_d) == 0){
$response[] = array('id' => 0, 'name' => 'Обычные', 'is_client' => 1, 'is_req' => 1, 'is_stage' => 1, 'is_show_funnels' => 1, 'order_number' => 0);
} else {
$r_d = $pdo->fetch_assoc($q_d);
$name = 'Обычные';
if(!empty($r_d['name'])) $name = $r_d['name'];
$response[] = array('id' => 0, 'name' => $name, 'is_client' => $r_d['is_client'], 'is_req' => $r_d['is_req'], 'is_stage' => $r_d['is_stage'], 'is_show_funnels' => $r_d['is_show_funnels'], 'order_number' => $r_d['order_number']);
}*/
while($row = mysql_fetch_assoc($funnelsData)){
$row['date'] = date('d.m.Y H:i:s', strtotime($row['date_create']));
$row['role'] = htmlspecialchars_decode($row['role']);
$row['client_type'] = htmlspecialchars_decode($row['client_type']);
$row['mainstep'] = '';
$tempUserNo = null;
if(!empty($row['users_no_see'])){
$tempUserNo = json_decode($row['users_no_see'], true);
}
$row['user_no_see'] = $tempUserNo;
//Этапы
$steps = mysql_query("SELECT * FROM funnel_steps WHERE funnel_id = ".$row['id']." and deleted=0 order by main desc");
while($step = mysql_fetch_assoc($steps)){
$step['name_number'] = $step['name'];
if($step['main'] == 1){
$step['name_number'] = '1. '.$step['name'];
} else if($step['order_number'] > 0){
$step['name_number'] = $step['order_number'].'. '.$step['name'];
}
$row['branchs'][$step['branch']][$step['id']] = deClearInputElements($step);
$row['steps'][$step['id']] = deClearInputElements($step);
if(!empty($row['steps'][$step['id']]['users_mes'])){
//var_dump($step['users_mes']);
$row['steps'][$step['id']]['users_mes'] = json_decode($row['steps'][$step['id']]['users_mes'], true);
}
if(!empty($row['steps'][$step['id']]['tasks_move'])){
$row['steps'][$step['id']]['tasks_move'] = json_decode($row['steps'][$step['id']]['tasks_move'], true);
}
$sql_file = "SELECT * FROM funnel_files WHERE etap_id = '".$step['id']."' AND funnel_id = ".$row['id'];
$q_file = mysql_query($sql_file);
$files = array();
while($file_r = mysql_fetch_assoc($q_file)){
$path = "https://uf.joywork.ru/upload/funnels/".$row['id']."/".$file_r['guid'].".".$file_r['type'];
$files[] = array('guid' => $file_r['guid'],'isUpload' => true, 'uploads' => false, 'name' => $file_r['name']);
}
$row['steps'][$step['id']]['files'] = $files;
$prev_files = array();
if(!empty($step['pole_prev'])){
$pole_prev = json_decode($row['steps'][$step['id']]['pole_prev'], true);
if(!empty($pole_prev['files_attach'])){
foreach($pole_prev['files_attach'] as $file){
$sql_file_prev = "SELECT * FROM files_steps_funnel_prev WHERE id = {$file['id']}";
$q_file_prev = mysql_query($sql_file_prev);
while($file_r = mysql_fetch_assoc($q_file_prev)){
$path = "https://uf.joywork.ru/upload/funnels/prev_steps/".$row['id']."/".$file_r['guid'].".".$file_r['type'];
$prev_files[] = array('guid' => $file_r['guid'],'isUpload' => true, 'uploads' => false, 'name' => $file_r['name']);
}
}
}
}
$row['steps'][$step['id']]['prev_files'] = $prev_files;
/* if(!empty($step['pole_dop'])){
}*/
$row['mainsteps'][] = array('id'=>$step['id'], 'name'=>$step['name']);
if($step['main'] == 1){
$row['mainstep'] = array('id'=>$step['id'], 'name'=>$step['name']);
}
}
$response[] = $row;
}
echo json_encode($response);
exit;
}
if($request == 'get_users_see'){
$result = array();
$user_id = (int)$data->user_id;
$agency_id = (int)$data->agency_id;
if($user_id > 0 && $agency_id > 0){
$name_file_emp = $_SERVER['DOCUMENT_ROOT'] . '/server/emp/'.$agency_id .'/'.$user_id.'/emp.json';
//echo $name_file_emp."\n";
if(!file_exists($name_file_emp)){
require_once($_SERVER['DOCUMENT_ROOT']."/templates/filter_emp.php");
}
$users = [];
$usersIds = [];
$usersIds[] = $agency_id;
$sql_users = "SELECT id FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in
(select id from users where id_manager=$agency_id or id_manager in
(select id from users where id_manager=$agency_id)))";
$q_users = mysql_query($sql_users);
while($r_users = mysql_fetch_assoc($q_users)){
$usersIds[] = (int)$r_users['id'];
}
$sql_d = "SELECT d.name as dep_name, r.name as role_name, r.role, r.department_id, r.id FROM departments as d left join roles as r on d.id = r.department_id WHERE d.agency_id = ".$agency_id;
$q_d = mysql_query($sql_d);
$departments = array();
while($r_d = mysql_fetch_assoc($q_d)){
$departments[$r_d['id']] = $r_d;
}
$sql_u = "SELECT * FROM users WHERE id in (".implode(',',$usersIds).")";
$q_u = mysql_query($sql_u);
while($row = mysql_fetch_assoc($q_u)){
$users[$row['id']] = $row;
}
$json_str = file_get_contents($name_file_emp);
$json = json_decode($json_str, true);
//var_dump($json);
$ids = array();
if(isset($json['agency']['id'])){
$result[] = array('code'=>(int)$json['agency']['id'], 'type'=>'agency', 'name'=>'Руководитель агентства');
}
if(isset($json['agency']['managers']['ids'])){
foreach($json['agency']['managers']['ids'] as $id_menager){
if(isset($users[$id_menager])){
$name = '';
if($users[$id_menager]['role_id'] > 0){
$name .= $departments[$users[$id_menager]['role_id']]['dep_name'];
} else {
$name .= "Группа менеджера ";
}
$result[] = array('code'=>'all_'.(int)$id_menager, 'type'=>'otdel', 'name'=>$name);
$name='';
$name .= '-'.trim($users[$id_menager]['last_name'] . ' ' . $users[$id_menager]['first_name'] . ' ' . $users[$id_menager]['middle_name']);
if($users[$id_menager]['role_id'] > 0){
$name .= " (".$departments[$users[$id_menager]['role_id']]['role_name'].")";
} else {
$name .= " (Менеджер)";
}
$result[] = array('code'=>(int)$id_menager, 'type'=>'manager', 'name'=>$name);
}
if(isset($json['agency']['managers'][$id_menager]['agents'])){
foreach($json['agency']['managers'][$id_menager]['agents'] as $id_agent){
if(isset($users[$id_agent])){
$name = '-';
$name .= trim($users[$id_agent]['last_name'] . ' ' . $users[$id_agent]['first_name'] . ' ' . $users[$id_agent]['middle_name']);
if($users[$id_agent]['role_id'] > 0){
$name .= " (".$departments[$users[$id_agent]['role_id']]['role_name'].")";
} else {
$name .= " (Агент)";
}
$result[] = array('code'=>(int)$id_agent, 'type'=>'agent', 'name'=>$name);
}
}
}
}
}
if(isset($json['agency']['agents'])){
foreach($json['agency']['agents'] as $id_agent){
if(isset($users[$id_agent])){
$name = '';
$name .= trim($users[$id_agent]['last_name'] . ' ' . $users[$id_agent]['first_name'] . ' ' . $users[$id_agent]['middle_name']);
if($users[$id_agent]['role_id'] > 0){
$name .= " (".$departments[$users[$id_agent]['role_id']]['role_name'].")";
} else {
$name .= " (Агент)";
}
$result[] = array('code'=>(int)$id_agent, 'type'=>'agent', 'name'=>$name);
}
}
}
}
echo json_encode($result, JSON_UNESCAPED_UNICODE);
exit;
}
//get list steps
if($request == 'get_steps'){
$funnelId = (int)$data->funnel_id;
$row = array();
if($steps = mysql_query("SELECT * FROM funnel_steps WHERE funnel_id = ".$funnelId." and deleted=0")){
while($step = mysql_fetch_assoc($steps)){
$row[$step['id']] = deClearInputElements($step);
}
} else {
echo mysql_error();
}
echo json_encode($row, JSON_UNESCAPED_UNICODE);
exit;
}
//get list steps
if($request == 'get_steps_order'){
$funnelId = (int)$data->funnel_id;
$row = array();
if($steps = mysql_query("SELECT * FROM funnel_steps WHERE funnel_id = ".$funnelId." and deleted=0 order by branch")){
while($step = mysql_fetch_assoc($steps)){
$step['isHide'] = true;
$row['step_'.$step['id']] = deClearInputElements($step);
}
} else {
echo mysql_error();
}
echo json_encode($row, JSON_UNESCAPED_UNICODE);
exit;
}
//Update funnel_admin on id
if($request == 'updateFunnel'){
//error_reporting(E_ALL | E_STRICT);
//ini_set('display_errors', 1);
$id = $data->id;
$agency_id = $data->agency_id;
$name = clearInputElement($data->name);
if(isset($data->client_type)){
$client_type = clearInputElement($data->client_type);
}
if(isset($data->role)){
$role = clearInputElement($data->role);
}
$is_req = (int)$data->is_req;
$is_client = (int)$data->is_client;
$is_stage = (int)$data->is_stage;
$is_show_funnels = (int)$data->is_show_funnels;
$order_number = (int)$data->order_number;
$is_no_see = (int)$data->is_no_see;
$users_no_see = $data->users_no_see;
$is_agent = (int)$data->is_agent;
$is_agency = (int)$data->is_agency;
$is_dev = (int)$data->is_dev;
if(empty($users_no_see)){
$users_no_see = '';
} else {
$users_no_see = json_encode($users_no_see);
}
if($id == 0){
$cl = new Clients();
$usersIds = $cl -> getUsersFilter([], $_SESSION['id'], true);
}
if($is_client != 1){
$sql_cl = "SELECT COUNT(*) as total FROM clients WHERE funnel_id = {$id}";
if($id == 0){
$sql_cl .= " AND (who_work in (".implode(',',$usersIds).") OR id_agent in (".implode(',',$usersIds)."))";
}
$q_cl = $pdo->query($sql_cl);
$res = $pdo->result($q_cl);
if($res > 0){
echo json_encode(array('result'=>'error',
'mes'=>'<p>В воронке есть клиенты ('.$res.' шт.).</p><p>Необходимо перенести их в другую воронку.</p>',
'error_close'=>$res, 'type_error'=>'client'),
JSON_UNESCAPED_UNICODE);
exit;
}
}
if($is_req != 1) {
$sql_r = "SELECT COUNT(*) as total FROM requisitions WHERE funnel_id = {$id} AND cancel = 0";
if($id == 0){
$sql_r .= " AND (who_work in (".implode(',',$usersIds).") OR user_id in (".implode(',',$usersIds)."))";
}
//echo $sql_r;
$q_r = $pdo->query($sql_r);
$res = $pdo->result($q_r);
if($res > 0){
echo json_encode(array('result'=>'error',
'mes'=>'<p>В воронке заявки ('.$res.' шт.).</p><p>Необходимо перенести их в другую воронку</p>',
'error_close'=>$res, 'type_error'=>'req'),
JSON_UNESCAPED_UNICODE);
exit;
}
}
$sql_up ="UPDATE funnel_admin SET name = '{$name}', role='{$role}', client_type='{$client_type}', is_req={$is_req}, is_client={$is_client}, order_number={$order_number}, users_no_see = '{$users_no_see}', is_no_see={$is_no_see},
is_agent = {$is_agent}, is_agency = {$is_agency}, is_dev = {$is_dev} WHERE id = {$id}";
if($id == 0){
$sql_d = "SELECT id FROM funnel_default WHERE agency_id = {$agency_id}";
$q_d = $pdo->query($sql_d);
if($pdo->num_rows($q_d) == 0){
$sql_up = "INSERT INTO funnel_default SET agency_id = {$agency_id}, name='{$name}', is_req={$is_req}, is_client={$is_client}, is_stage={$is_stage}, is_show_funnels={$is_show_funnels}, order_number={$order_number}";
} else {
$sql_up = "UPDATE funnel_default SET is_req={$is_req}, is_client={$is_client}, name='{$name}', is_stage={$is_stage}, is_show_funnels={$is_show_funnels}, order_number={$order_number} WHERE agency_id = {$agency_id}";
}
}
if(!$pdo->query($sql_up)){
echo json_encode(array('result'=>'error', 'mes'=>$pdo->errorInfo()), JSON_UNESCAPED_UNICODE);
exit;
}
echo json_encode(array('result'=>'done'), JSON_UNESCAPED_UNICODE);
}
//Delete funnel_admin
if($request == 'delete_funnel'){
$res['result'] = 'done';
$id = $data->id;
//Есть ли не закрытые клиенты
$sql = "SELECT id FROM clients WHERE funnel_id=".$id;
$q = mysql_query($sql);
$rows = mysql_num_rows($q);
if($rows > 0){
$res['result'] = 'error';
//$res['mes'] = "Воронку нельзя удалить. Не закрытых клиентов: ".$rows;
$res['error_close'] = $rows;
$res['type_error'] = 'client';
echo json_encode($res, JSON_UNESCAPED_UNICODE);
exit;
}
//Есть ли не закрытые клиенты
$sql = "SELECT id FROM requisitions WHERE funnel_id=".$id;
$q = mysql_query($sql);
$rows = mysql_num_rows($q);
if($rows > 0){
$res['result'] = 'error';
//$res['mes'] = "Воронку нельзя удалить. Не закрытых клиентов: ".$rows;
$res['error_close'] = $rows;
$res['type_error'] = 'req';
echo json_encode($res, JSON_UNESCAPED_UNICODE);
exit;
}
if(!mysql_query("UPDATE funnel_admin set deleted = 1 WHERE id = {$id}")){
$res['result'] = 'error';
$res['mes'] = mysql_error();
}
echo json_encode($res, JSON_UNESCAPED_UNICODE);
exit;
}
//Delete file
if($request == 'deleteFile'){
$funnel_id = $data->funnelId;
$guid = $data->guid;
$type = $data->type_file;
$path = $_SERVER['DOCUMENT_ROOT']."/upload/funnels/".$funnel_id."/".$guid.".".$type;
unlink($path);
mysql_query("DELETE FROM funnel_files WHERE guid = '".$guid."' and funnel_id = '{$funnel_id}'");
exit;
}
//Delete file
if($request == 'deleteFilePrev'){
$funnel_id = $data->funnelId;
$guid = $data->guid;
$type = $data->type_file;
$path = $_SERVER['DOCUMENT_ROOT']."/upload/funnels/prev_steps/".$funnel_id."/".$guid.".".$type;
unlink($path);
mysql_query("DELETE FROM files_steps_funnel_prev WHERE guid = '".$guid."' and funnel_id = '{$funnel_id}'");
exit;
}
if($request == 'get_doers'){
$agency_id = clearInputElement($data->agency_id);
//Определение отделов
$sql_d = "SELECT d.name as dep_name, r.name as role_name, r.role, r.department_id, r.id FROM departments as d left join roles as r on d.id = r.department_id WHERE d.agency_id = ".$agency_id;
$q_d = mysql_query($sql_d);
$departments = array();
while($r_d = mysql_fetch_assoc($q_d)){
$departments[$r_d['id']] = $r_d;
}
$sql = "SELECT id, id_manager, agency, manager, first_name, last_name, middle_name, role_id, department_id FROM users WHERE id={$agency_id} or id_manager = {$agency_id}";
$q = mysql_query($sql);
$res = array();
$res_a = array();
$res_ag = array();
while($r = mysql_fetch_assoc($q)){
$res_ag[$r['id']] = array();
if($r['agency'] > 0){
// if(!isset($res_a)) $res_a = array();
$res_a[$r['id']]['manager'] = array('id' => $r['id'], 'fio' => htmlspecialchars_decode(trim($r['last_name'] . ' ' . $r['first_name'] . ' ' . $r['middle_name'])), 'department' => 'Агенство', 'role' => 'Руководитель');
$res_a[$r['id']]['isSee'] = false;
} else if ($r['manager'] > 0){
//if(!isset($res_m)) $res_m = array();
$department = 'Агенство';
$role = 'Менеджер';
if($r['role_id'] > 0){
$department = $departments[$r['role_id']]['dep_name'];
$role = $departments[$r['role_id']]['role_name'];
}
$res_a[$r['id']]['manager']= array('id' => $r['id'], 'fio' => htmlspecialchars_decode(trim($r['last_name'] . ' ' . $r['first_name'] . ' ' . $r['middle_name'])), 'department' =>$department, 'role' => $role);
$res_a[$r['id']]['isSee'] = false;
$sql_m = "SELECT id, id_manager, agency, manager, first_name, last_name, middle_name, role_id, department_id FROM users WHERE id_manager = ".$r['id']. " order by department_id";
$q_m = mysql_query($sql_m);
while($r_m = mysql_fetch_assoc($q_m)){
$department = 'Агенство';
$role = 'Агент';
if($r_m['role_id'] > 0){
$department = $departments[$r_m['role_id']]['dep_name'];
$role = $departments[$r_m['role_id']]['role_name'];
}
//if(!isset($res_ag)) $res_ag = array();
$res_a[$r['id']]['agents'][] = array('id' => $r_m['id'], 'fio' => htmlspecialchars_decode(trim($r_m['last_name'] . ' ' . $r_m['first_name'] . ' ' . $r_m['middle_name'])), 'department' =>$department, 'role' =>$role);
}
} else {
$department = 'Агенство';
$role = 'Агент';
if($r['role_id'] > 0){
$department = $departments[$r['role_id']]['dep_name'];
$role = $departments[$r['role_id']]['role_name'];
}
$res_a[$agency_id]['agents'][] = array('id' => $r['id'], 'fio' => htmlspecialchars_decode(trim($r['last_name'] . ' ' . $r['first_name'] . ' ' . $r['middle_name'])), 'department' => $department, 'role' => $role);
}
//$res_a[[$r['id']]['agents']] = $res_ag[$r['id']];
}
echo json_encode($res_a, JSON_UNESCAPED_UNICODE);
exit;
}
if($request == 'get_users'){
//Список сотрудников
$data = json_decode(file_get_contents("php://input"));
$agency_id = (int)$data->agency_id;
/*error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);*/
$depClass = new Department();
$departments = $depClass->getDepartments();
$result = array();
$usersArr = array();
$user = new User;
$user->get($agency_id);
$usersArr[] = $agency_id;
$result['emp'][] = array('code'=>0, 'date_employe'=>'Ответственный');
$result['emp'][] = array('code'=>'manager', 'date_employe'=>'Менеджер ответственного');
$sql = "SELECT * FROM users WHERE id=$agency_id AND blocked=0";
$rez = mysql_query($sql);
$agency = mysql_fetch_assoc($rez);
$result['emp'][] = array('code' => $agency_id, 'date_employe' => htmlspecialchars_decode(trim($agency['last_name'] . ' ' . $agency['first_name'] . ' ' . $agency['middle_name']).' (руководитель)'));
if($user->agency){
$agentsOfAgency = User::getAllAgents($user->agencyId);
$agentsOfManager = User::getAllManagers($user->agencyId);
} else if ($user->manager){
$agentsOfAgency = User::getAllAgents($userId);
} else if ($user->id_manager) {
$agentsOfAgency = User::getAllAgents($user->id_manager);
$sql = "SELECT * FROM users WHERE manager=1 AND id=$user->id_manager AND blocked=0";
$agentsOfManager = array();
$rez = mysql_query($sql);
while($manager = mysql_fetch_assoc($rez)) $agentsOfManager[] = $manager;
//$agentsOfManager = User::getMyManagers();
}
if($agentsOfManager) {
foreach($agentsOfManager as $mngr)
{
if(!in_array($mngr['id'], $usersArr)){
$usersArr[] = $mngr['id'];
if($mngr['role_id'] > 0){
$result['emp'][] = array('code' => (int)$mngr['id'], 'date_employe' => htmlspecialchars_decode(trim($mngr['last_name'] . ' ' . $mngr['first_name'] . ' ' . $mngr['middle_name']).' ('.$departments[$mngr['role_id']]['role_name'].' '.$departments[$mngr['role_id']]['dep_name'].')'));
} else {
$result['emp'][] = array('code' => (int)$mngr['id'], 'date_employe' => htmlspecialchars_decode(trim($mngr['last_name'] . ' ' . $mngr['first_name'] . ' ' . $mngr['middle_name']).' (менеджер)'));
}
}
if((int)$mngr['role_id'] > 0 && (int)$mngr['department_id'] > 0){
$role_user = $depClass->getRole((int)$mngr['role_id']);
if($role_user['role'] == 'admin_department'){
$menagerDep = User::getDepManagers($role_user['department_id']);
foreach($menagerDep as $md){
if(!in_array($md['id'], $usersArr)){
$usersArr[] = $md['id'];
$result['emp'][] = array('code' => (int)$md['id'], 'date_employe' => htmlspecialchars_decode(trim($md['last_name'] . ' ' . $md['first_name'] . ' ' . $md['middle_name']).' ('.$departments[$md['role_id']]['role_name'].' '.$departments[$md['role_id']]['dep_name'].')'));
}
$thisAgents = User::getAgentsOfAgency($md['id'], true);
foreach($thisAgents as $da){
if (!in_array($da['id'], $usersArr)) {
$usersArr[] = $da['id'];
$result['emp'][] = array('code' => (int)$da['id'], 'date_employe' => htmlspecialchars_decode(trim($da['last_name'] . ' ' . $da['first_name'] . ' ' . $da['middle_name']).' ('.$departments[$da['role_id']]['role_name'].' '.$departments[$da['role_id']]['dep_name'].')'));
}
}
}
}
}
}
}
if($agentsOfAgency) {
foreach($agentsOfAgency as $agent)
{
if (!in_array($agent['id'], $usersArr)){
$usersArr[] = $agent['id'];
if($agent['role_id'] > 0){
$result['emp'][] = array('code' => (int)$agent['id'], 'date_employe' => htmlspecialchars_decode(trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']).' ('.$departments[$agent['role_id']]['role_name'].' '.$departments[$agent['role_id']]['dep_name'].')'));
} else {
$result['emp'][] = array('code' => (int)$agent['id'], 'date_employe' => htmlspecialchars_decode(trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']).' (агент)'));
}
}
}
}
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);
}
//save etap
if($request == 'save_step'){
$stepId = (int)$data->step_id;
$funnel_id = (int)$data->funnel_id;
$name = clearInputElement($data->name_step);
if(!empty($data->order_number)){
$order_number = (int)$data->order_number;
}
$days_step = clearInputElement($data->days_step);
$is_move_end_srok = (int)$data->is_move_end_srok;
$tasks_move = json_encode($data->tasks_move);
$color_step = clearInputElement($data->color_step);
$start_parallel = clearInputElement($data->start_parallel);
$stage = clearInputElement($data->stage);
$files = $data->files;
$doers = clearInputElement($data->doers);
$pole_end_list = clearInputElement($data->poleEndlist);
$tasks_list = clearInputElement($data->tasksList);
$name_step_task = clearInputElement($data->name_step_task);
$docs_step_task = clearInputElement($data->docs_step_task);
$next_step_change = clearInputElement($data->nextStepChange);
$next_step = clearInputElement($data->nextStep);
$is_mes = (int)$data->is_mes;
$users_mes = json_encode($data->users_mes);
$pole_prev = clearInputElement($data->pole_prev);
$temp_pole_prev = json_decode($data->pole_prev, true);
$pole_dop = clearInputElement($data->pole_dop);
$is_select_room = (int)$data->is_select_room;
$complex_status_id = (int)$data->complex_status_id > 0 ? (int)$data->complex_status_id : 'NULL';
//Определение первого этапа
$main = 1;
$sql_m = "SELECT id FROM `funnel_steps` WHERE `funnel_id` = {$funnel_id} and main = 1";
$q_m = mysql_query($sql_m);
if(mysql_num_rows($q_m) > 0){
$main = 0;
}
$set = "SET `funnel_id` = {$funnel_id}, "
. "`name` = '{$name}', "
. "`days_step` = '{$days_step}', "
. "`is_move_end_srok` = '{$is_move_end_srok}', "
. "`tasks_move` = '{$tasks_move}', "
. "`color_step` = '{$color_step}', "
. "`start_parallel` = '{$start_parallel}', "
. "`stage` = '{$stage}', "
. "`doers` = '{$doers}', "
. "`pole_end_list` = '{$pole_end_list}', "
. "`tasks_list` = '{$tasks_list}', "
. "`name_step_task` = '{$name_step_task}', "
. "`next_step_change` = '{$next_step_change}', "
. "`next_step` = '{$next_step}', "
. "`is_mes` = {$is_mes}, "
. "`users_mes` = '{$users_mes}', "
. "`pole_prev` = '{$pole_prev}', "
. "`pole_dop` = '{$pole_dop}', "
. "`is_select_room` = $is_select_room, "
. "`complex_status_id` = $complex_status_id"
;
if($main == 1) {
$set .= ", `main` = 1";
$order_number = 1;
}
if(isset($order_number)){
$set .= ", order_number=$order_number";
}
if($data->arr_next_steps){
$arr_next_steps = clearInputElement($data->arr_next_steps);
$set .= ", arr_next_steps = '".$arr_next_steps."'";
}
if($stepId <= 0){
$sql = "INSERT INTO `funnel_steps` ".$set;
$stepId = mysql_insert_id();
} else {
$sql = "UPDATE `funnel_steps` ".$set." WHERE `id` = ".$stepId;
}
if(!mysql_query($sql)){
echo mysql_error();
} else {
foreach($files as $file){
mysql_query("UPDATE funnel_files SET etap_id = {$stepId} WHERE guid = '".$file->guid."' and funnel_id = {$funnel_id}");
}
mysql_query("DELETE FROM funnel_files WHERE etap_id = 'temp' AND funnel_id = {$funnel_id}");
if(!empty($temp_pole_prev['files_attach'])){
foreach($temp_pole_prev['files_attach'] as $files_temp){
mysql_query("UPDATE files_steps_funnel_prev SET step_id = {$stepId} WHERE id={$files_temp['id']}");
}
}
mysql_query("DELETE FROM files_steps_funnel_prev WHERE step_id is null AND funnel_id = {$funnel_id}");
}
getBranch($funnel_id);
exit;
}
if($request == 'delete_step'){
$stepId = (int)$data->step_id;
$res['result'] = 'done';
/*if(!mysql_query("DELETE FROM funnel_steps WHERE id=".$stepId)){
echo mysql_error();
}*/
$sql = "SELECT id FROM clients WHERE step_id = ".$stepId." and deleted = 0";
$q = mysql_query($sql);
$rows = mysql_num_rows($q);
if($rows > 0){
$res['result'] = 'isClients';
$res['mes'] = $rows;
echo json_encode($res, JSON_UNESCAPED_UNICODE);
exit;
}
if(!mysql_query("UPDATE funnel_steps SET deleted=1 WHERE id=".$stepId)){
$res['result'] = 'error';
$res['mes'] = mysql_error();
}
echo json_encode($res, JSON_UNESCAPED_UNICODE);
exit;
}
if($request == 'update_clients_step'){
$stepId = (int)$data->step_id;
$userId = (int)$data->user_id;
$sql = "SELECT id FROM clients WHERE step_id = ".$stepId." and deleted = 0";
$q = mysql_query($sql);
while($r = mysql_fetch_assoc($q)){
$sql_s = "SELECT cfs.*, fs.name, fs.stage, fs.funnel_id FROM `clients_funnel_step` as `cfs` LEFT JOIN `funnel_steps` as `fs` on cfs.step_id = fs.id WHERE cfs.client_id = ".$r['id'];
$q_s = mysql_query($sql_s);
if(mysql_num_rows($q_s) > 0){
$r_s = mysql_fetch_assoc($q_s);
$idCfs = $r_s['id'];
$nameCfs = $r_s['name'];
$funnelId = $r_s['funnel_id'];
$prev_id = 0;
$prev_next_id = 0;
$clientId = $r['id'];
if(!empty($r_s['values'])){
$valarr = json_decode($r_s['values'],true);
$arr = deClearInputElements($valarr);
$stepArr = json_decode($arr[$r_s['step_id']], true);
if(isset($stepArr['prev_id'])){
$prev_id = (int)$stepArr['prev_id'];
$prev_next_id = (int)$stepArr['prev_next_id'];
}
}
}
if($prev_id > 0){
$isStep = mysql_num_rows(mysql_query("SELECT `id` FROM funnel_steps WHERE id = ".$prev_id));
if($isStep == 0){
$prev_id = 0;
}
}
if($prev_id == 0){
$main_prev = mysql_fetch_assoc(mysql_query("SELECT `id`, `next_step` FROM funnel_steps WHERE funnel_id = ".$funnelId." and main=1"));
$prev_id = (int)$main_prev['id'];
$prev_next_id = (int)json_decode(htmlspecialchars_decode($main_prev['next_step']))[0];
}
$sql_s = "UPDATE clients_funnel_step SET step_id = ".$prev_id.", next_id = '".$prev_next_id."' WHERE id = ".$idCfs;
mysql_query($sql_s);
// echo "SELECT `name`, `id`, `funnel_id`,`stage` FROM funnel_steps WHERE id = ".$prev_id;
$sqlname = mysql_query("SELECT `name`, `id`, `funnel_id`,`stage` FROM funnel_steps WHERE id = ".$prev_id);
$prev = mysql_fetch_assoc($sqlname);
$prev_etap = $stepId;
$sqlname = mysql_query("SELECT `name`, `id`, `funnel_id`,`stage` FROM funnel_steps WHERE id = {$prev_etap}");
$prevName = mysql_fetch_assoc($sqlname);
$dop_text = 'c &laquo;'.$prevName['name'].'&raquo; на &laquo;'.$nameCfs.'&raquo; (Перенесен при удалении этапа &laquo;'.$prevName['name'].'&raquo;)';
//echo "INSERT INTO `events_clients` SET user_id = {$userId}, client_id = {$clientId}, event='stageedit', read=1, dop_text='{$dop_text}'";
mysql_query("INSERT INTO `events_clients` SET user_id = {$userId}, client_id = {$clientId}, event='stageedit', `read`=1, from_id = 0, dop_text='{$dop_text}'");
//$res = get_class_etap($clientId, $funnelId);
// echo json_encode($res);
$res = get_class_etap($clientId, $funnelId);
if(!mysql_query("UPDATE funnel_steps SET deleted=1 WHERE id=".$stepId)){
echo mysql_error();
}
//echo json_encode($res);
exit();
}
}
if($request == 'save_first_step'){
$stepId = (int)$data->step_id;
$sql = "SELECT funnel_id FROM funnel_steps WHERE id=".$stepId;
$q = mysql_query($sql);
$r=mysql_fetch_assoc($q);
$funnel_id = $r['funnel_id'];
if(!mysql_query("UPDATE funnel_steps set main = 0 WHERE funnel_id=".$funnel_id)){
echo mysql_error();
}
if(!mysql_query("UPDATE funnel_steps set main = 1, order_number = 1 WHERE id=".$stepId)){
echo mysql_error();
}
getBranch($funnel_id);
exit;
}
if($request == 'transmite_funnel'){
//error_reporting(E_ALL | E_STRICT);
//ini_set('display_errors', 1);
$type = $data->type;
$funnel_old = (int)$data->funnel_old;
$funnel_old_name = $data->funnel_old_name;
$funnel_new = (int)$data->funnel_new;
if($type == 'client'){
$cl = new Clients();
if($funnel_old == 0){
$usersIds = $cl -> getUsersFilter([], $_SESSION['id'], true);
}
$sql_cl = "SELECT id FROM clients WHERE funnel_id = {$funnel_old}";
if($funnel_old == 0){
$sql_cl .= " AND (who_work in (".implode(',',$usersIds).") OR id_agent in (".implode(',',$usersIds)."))";
}
$q_cl = $pdo->query($sql_cl);
$sql = "UPDATE clients SET funnel_id = '$funnel_new' WHERE funnel_id = {$funnel_old}";
if($funnel_old == 0){
$sql .= " AND (who_work in (".implode(',',$usersIds).") OR id_agent in (".implode(',',$usersIds)."))";
}
$pdo->query($sql);
while ($r_cl = $pdo->fetch_assoc($q_cl)){
$funnelName = "Обычные";
if ($funnel_new > 0) {
$sqlFunnel = "SELECT name FROM funnel_admin WHERE id = $funnel_new";
$resFunnel = $pdo->query($sqlFunnel);
$phRow = $pdo->fetch_assoc($resFunnel);
$funnelName = $phRow['name'];
}
$sqlDeleteOldFunnel = "delete from clients_funnel_step where client_id = {$r_cl['id']}";
$pdo->query($sqlDeleteOldFunnel);
$cl->get_class_etap($r_cl['id'], $funnel_new);
$sql_conf = "INSERT INTO `events_clients` (`user_id`, `client_id`, `from_id`, `event`, `dop_text`, `read`)
VALUES (".$_SESSION['id'].", ".$r_cl['id'].", '0', 'update', 'Передан в воронку &laquo;".$funnelName."&raquo; при закрытии воронки &laquo;".$funnel_old_name."&raquo;', '1')";
$pdo->query($sql_conf);
}
} else if ($type == 'req'){
$req = new Requisitions($pdo);
if($funnel_old == 0){
$cl = new Clients();
$usersIds = $cl -> getUsersFilter([], $_SESSION['id'], true);
}
$sql_cl = "SELECT id FROM requisitions WHERE funnel_id = {$funnel_old}";
if($funnel_old == 0){
$sql_cl .= " AND (who_work in (".implode(',',$usersIds).") OR user_id in (".implode(',',$usersIds)."))";
}
$q_cl = $pdo->query($sql_cl);
$sql = "UPDATE requisitions SET funnel_id = '$funnel_new' WHERE funnel_id = {$funnel_old}";
if($funnel_old == 0){
$sql .= " AND (who_work in (".implode(',',$usersIds).") OR user_id in (".implode(',',$usersIds)."))";
}
$pdo->query($sql);
while ($r_cl = $pdo->fetch_assoc($q_cl)){
$funnelName = "Обычные";
if ($funnel_new > 0) {
$sqlFunnel = "SELECT name FROM funnel_admin WHERE id = $funnel_new";
$resFunnel = $pdo->query($sqlFunnel);
$phRow = $pdo->fetch_assoc($resFunnel);
$funnelName = $phRow['name'];
}
$sqlDeleteOldFunnel = "delete from clients_funnel_step where req_id = {$r_cl['id']}";
$pdo->query($sqlDeleteOldFunnel);
$req->get_class_etap($r_cl['id'], $funnel_new);
$sql_conf = "INSERT INTO `events_clients` (`user_id`, `req_id`, `from_id`, `event`, `dop_text`, `read`)
VALUES (".$_SESSION['id'].", ".$r_cl['id'].", '0', 'update', 'Передана в воронку &laquo;".$funnelName."&raquo; при закрытии воронки &laquo;".$funnel_old_name."&raquo;', '1')";
$pdo->query($sql_conf);
}
}
}

View File

@ -0,0 +1,27 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "SELECT id FROM block_meta WHERE block_id = " . $post['block_meta_id'];
$q = mysql_query($sql);
if(mysql_num_rows($q) == 0){
$sql_up = "INSERT INTO block_meta SET block_id = " . $post['block_meta_id'] . ", title = '" . $post['title'] ."', description = '" . $post['description'] ."', keywords = '" . $post['keywords'] ."'";
} else {
$sql_up = "UPDATE block_meta SET title = '" . $post['title'] ."', description = '" . $post['description'] ."', keywords = '" . $post['keywords'] ."' WHERE block_id = " . $post['block_meta_id'];
}
try {
mysql_query($sql_up);
}
catch (Exception $e) {
echo $e->getMessage();
}
echo 1;
?>

View File

@ -0,0 +1,74 @@
<?php
header('Content-Type: application/json; charset=utf-8');
session_start();
$response = [
'success' => false,
'message' => '',
'timestamp' => date('Y-m-d H:i:s')
];
// Проверка: только для админа или валидного секрета
$validSecret = 'Afrqtf';
$providedSecret = isset($_GET['secret']) ? $_GET['secret'] : '';
if (
(!isset($_SESSION['id']) || !in_array($_SESSION['id'], [4, 6635, 12253])) &&
$providedSecret !== $validSecret
) {
die('Доступ запрещён');
}
$files = [
// CSS
'/css/base.css',
'/css/crm.css',
'/css/style.css',
'/css/viewer.css',
'/css/fastselect.css',
'/css/funnel.css',
'/css/all.min.css',
'/css/chat/style.min.css',
'/css/analytics/local.css',
'/css/analytics/styles.min.css',
// JS
'/js/main.js',
'/js/charts.js',
'/js/f_main.js',
'/js/jquery.overscroll.js',
'/js/crm.js',
'/js/fastselect.standalone.js',
'/js/viewer.min.js',
'js/core.js',
'js/crm_jw.js',
'js/callevents.js',
];
$cacheDir = $_SERVER['DOCUMENT_ROOT'] . '/engine/cache';
$cacheFile = $cacheDir . '/assets.php';
if (!is_dir($cacheDir)) {
if (!mkdir($cacheDir, 0755, true)) {
$response['message'] = 'Не удалось создать папку: ' . $cacheDir;
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
$manifest = [];
foreach ($files as $file) {
$fullPath = $_SERVER['DOCUMENT_ROOT'] . $file;
$manifest[$file] = file_exists($fullPath) ? filemtime($fullPath) : time();
}
$content = '<?php return ' . var_export($manifest, true) . ';';
if (file_put_contents($cacheFile, $content) === false) {
$response['message'] = 'Не удалось записать файл: ' . $cacheFile;
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
$response['success'] = true;
$response['message'] = 'Кэш обновлён. Файлов: ' . count($manifest);
echo json_encode($response, JSON_UNESCAPED_UNICODE);

View File

@ -0,0 +1,35 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin'])) {
$get = clearInputData($_GET);
$sqlRequest = "SELECT * from discharge_user_request where id = $get[id]";
$rezRequest = mysql_query($sqlRequest);
$request = mysql_fetch_assoc($rezRequest);
if ($request) {
$sqlUser = new User();
$sqlUser->get($request['user_id']);
$sql = "UPDATE discharge_user_request SET paid = 1 where id = $request[id]";
mysql_query($sql);
$newRequestsCount = 0;
if ($sqlUser->egrn_request_count) {
$newRequestsCount = $sqlUser->egrn_request_count;
}
$newRequestsCount = $newRequestsCount + $request['count'];
$sql = "UPDATE users SET egrn_request_count = $newRequestsCount where id = $request[user_id]";
mysql_query($sql);
} else {
echo "Не найден запрос на оплату в БД.";
}
}

View File

@ -0,0 +1,80 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
$post = clearInputData($_POST);
if (isset($post['blockId'])) {
if (!$flatShopDb = mysql_connect("185.76.145.152", "pubcrm", "pubcrmmysqlpass")) {
echo mysql_error();
die("No connect database FlatShop 185.76.145.152...");
}
if (!mysql_select_db("pub_crm", $flatShopDb)) {
die("No selected database pub_crm...");
}
$sql = "SET NAMES 'utf8'";
mysql_query($sql, $flatShopDb);
$block = Block::findOne($post['blockId']);
$sql = "SELECT additional FROM blocks where id = '" . $block->id . "'";
$rez = mysql_query($sql, $flatShopDb);
if (mysql_num_rows($rez) > 0) {
$dbObject = mysql_fetch_assoc($rez);
$sql = "UPDATE blocks SET additional = '" . $dbObject['additional'] . "' WHERE id = '" . $block->id . "'";
mysql_query($sql, $mdb);
}
$sql = "SELECT * FROM documents where target_type = '" . Document::TYPE_BLOCK . "' AND target_id = '" . $block->id . "' ORDER BY created_at";
$rez = mysql_query($sql, $flatShopDb);
$ids_array = array();
if (mysql_num_rows($rez) > 0) {
$sql = "DELETE FROM documents where target_type = '" . Document::TYPE_BLOCK . "' AND target_id = '" . $block->id . "'";
mysql_query($sql, $mdb);
while ($dbObject = mysql_fetch_assoc($rez)) {
$parent = 0;
if ($dbObject['parent'] > 0) {
$parent = $ids_array[$dbObject['parent']];
}
$sql = "INSERT INTO documents (name, created_at, target_id, target_type, parent, file) VALUES ('" . $dbObject['name'] .
"', NOW(), '" . $block->id . "', '" . $dbObject['target_type'] . "', '" . $parent . "', '" . $dbObject['file'] . "')";
mysql_query($sql, $mdb);
$err = mysql_errno($mdb);
if ($err > 0) {
echo mysql_error($mdb);
continue;
}
$ids_array[$dbObject['id']] = mysql_insert_id($mdb);
}
}
}
}

View File

@ -0,0 +1,38 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockPlusFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/TargetFactory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
$targetId = $_POST['target_id'];
$targetType = $_POST['target_type'];
$dirId = $_POST['dir_id'];
$name = $_POST['name'];
$manager = new DocumentManager((new TargetFactory())->getTarget($targetId, $targetType));
$manager->createDir((int)$dirId, $name);
$dirObject = $manager->getDir($dirId);
$path = $manager->getParents($dirObject->getId());
$collection = $manager->getChildren($dirObject->getId());
include($_SERVER['DOCUMENT_ROOT']."/admin/documentsWidget.php");
}

29
admin/ajax/delClient.php Normal file
View File

@ -0,0 +1,29 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
$get = clearInputData($_GET);
if(is_numeric($get['id']))
{
$client = new Clients_jw;
$client->del($get['id']);
}
if(is_numeric($get['restore']))
{
$client = new Clients_jw;
$client->restore($get['restore']);
}
/*if(is_numeric($get['reason']))
{
$client = new Clients();
$get['id_del_client'] = $get['reason'];
$client->delReason($get);
}*/
if($_POST['id_del_client'])
{
$post = clearInputData($_POST);
$client = new Clients_jw;
$client->delReason($post);
}
?>

View File

@ -0,0 +1,20 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
header('Content-Type: application/json');
if (!$_SESSION['superadmin']) {
echo json_encode(['success' => false, 'error' => 'Доступ запрещён']);
exit();
}
$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
if (!$id) {
echo json_encode(['success' => false, 'error' => 'Не указан ID']);
exit();
}
Article::delete($id);
Article::regenerateSitemap();
echo json_encode(['success' => true]);

View File

@ -0,0 +1,42 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "DELETE FROM block_benefits WHERE id=".$post['benefit_id'];
try {
mysql_query($sql);
$sql = "SELECT * FROM block_benefits WHERE block_id=" . $post['block_id'];
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,17 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$id = $_POST['id'];
$blockImage = BlockImage::findOne($id);
if ($blockImage) {
$blockImage->delete();
}
}

View File

@ -0,0 +1,42 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "DELETE FROM block_plus_minus WHERE id=".$post['plus_minus_id'];
try {
mysql_query($sql);
$sql = "SELECT * FROM block_benefits WHERE block_id=" . $post['block_id'];
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,42 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "DELETE FROM block_reviews WHERE id=".$post['review_id'];
try {
mysql_query($sql);
$sql = "SELECT * FROM block_benefits WHERE block_id=" . $post['block_id'];
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,50 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "DELETE FROM block_videos WHERE id=".$post['video_id'];
try {
mysql_query($sql);
$sql = "SELECT * FROM block_videos WHERE block_id=" . $post['block_id'];
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="block_video_wrap">'.
'<span class="block_video_url">'.$obj["url"].'</span>'.
'<span class="block_video_del" block_id="'.$obj["block_id"].'" video_id="'.$obj["id"].'">Удалить</span>'.
'<div class="clear"></div>'.
'</div>
<div>
<div class="add_month_img">Добавить изображение:</div>
<div class="clear"></div>
<form method="post" enctype="multipart/form-data" id="block-video-images-form_'.$obj["id"].'" style="display: inline;">
<div class="block-video-images-container" id="block-video-images-container_'.$obj["id"].'" class="">
<input type="hidden" name="video_id" value="'.$obj["id"].'">
<input data-id="'.$obj["id"].'" type="file" name="blockVideoPhoto[]" accept="image/jpg,image/jpeg" multiple="">
</div>
</form>
<div id="image-block-video-result_'.$obj["id"].'">
</div>
<div class="clear"></div>
</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,41 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "DELETE FROM builder_reviews WHERE id=".$post['review_id'];
try {
mysql_query($sql);
/* $sql = "SELECT * FROM builder_reviews WHERE builder_id=" . $post['block_id'];
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}*/
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,40 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockPlusFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/TargetFactory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
$targetId = $_POST['target_id'];
$targetType = $_POST['target_type'];
$docId = $_POST['doc_id'];
$manager = new DocumentManager((new TargetFactory())->getTarget($targetId, $targetType));
$doc = Document::findById($targetId, $targetType, $docId);
$manager->delete($docId);
$dirObject = $manager->getDir($doc->parent);
$path = $manager->getParents($dirObject->getId());
$collection = $manager->getChildren($dirObject->getId());
include($_SERVER['DOCUMENT_ROOT'] . "/admin/documentsWidget.php");
}

View File

@ -0,0 +1,177 @@
<style>
#domclick-parser {
display: flex;
flex-direction: column;
gap: 16px;
padding: 20px 35px;
background: white;
border: 1px solid #dedede;
margin-top: 20px;
}
#domclick-parser td, #domclick-parser th {
border: 1px solid #ddd;
padding: 8px;
}
#domclick-parser tr:nth-child(even){background-color: #f2f2f2;}
#domclick-parser tr:hover {background-color: #ddd;}
#domclick-parser th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #04AA6D;
color: white;
font-weight: bold;
}
</style>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
function getParsers($parser_name = [])
{
$items = array();
foreach ($parser_name as $name)
{
$sql = "SELECT
dps.*
FROM
domclick_parser_stats dps
JOIN
(
SELECT
id
FROM domclick_parser_stats
WHERE
`state` = 'Старт'
AND `parser_name` = '{$name}'
ORDER BY `id`
DESC LIMIT 1
) sub
WHERE
dps.id >= sub.id
AND dps.parser_name = '{$name}'
";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
while ($dbObject = mysql_fetch_assoc($rez)) {
$items[$dbObject['parser_name']][] = $dbObject;
}
}
}
return $items;
}
$items = getParsers(['moscow', 'spb', 'others']);
?>
<?php foreach ($items as $key => $item) {
$last_record = $item[count($item) - 1];
$status = 'Завершено';
if ($last_record && !in_array($last_record['state'], ['Завершено с ошибкой', 'Завершено успешно'])) {
$status = 'В процессе';
}
if ($last_record['state'] == 'Завершено с ошибкой') {
$status = 'Завершено с ошибкой';
}
if (!$last_record) {
$status = 'Парсер не был запущен';
}
$name = 'Другие';
if ($key == 'moscow') {
$name = 'Москва';
}
else if ($key == 'spb') {
$name = 'Санкт-Петербург';
}
?>
<div id="parser-<?= $key ?>" class="parser" data-type="<?= $key ?>" style="position: relative;">
<button
style="
position: absolute;
right: 36px;
top: 15px;
border: none;
background: #04AA6D;
font-weight: bold;
cursor: pointer;
color: white;
padding: 10px 20px;
border-radius: 4px;"
id="update-page"
>
Обновить Таблицу
</button>
<div>
<div id="domclick-parser">
<h2><?= $name ?> - <?= $status ?></h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>Количество Комплексов</th>
<th>Количество Объектов</th>
<th>Дата</th>
</tr>
</thead>
<tbody>
<?php
$colors = [
'Старт' => '#247d00',
'Создано' => '#2226f0',
'Обновлено' => '#2226f0',
'Удалено' => '#f02222',
'Завершено с ошибкой' => '#f02222',
'Завершено успешно' => '#247d00'
];
foreach ($item as $record) { ?>
<tr>
<td style="color: <?= $colors[$record['state']] ?>"><?= $record['state']?></td>
<td ><?= $record['complex_count'] > 0 ? $record['complex_count'] : '-' ?></td>
<td ><?= $record['object_count'] > 0 ? $record['object_count'] : '-' ?></td>
<td ><?= $record['updated_at']?></td>
</tr>
<?php } ?>
<!-- <tr>
<td>Старт</td>
<td>-</td>
<td>-</td>
<td>31.03.2024 16:25</td>
</tr>
<tr>
<td>Обновлено</td>
<td>10</td>
<td>20</td>
<td>31.03.2024 16:25</td>
</tr>
<tr>
<td>Удалено</td>
<td>2</td>
<td>0</td>
<td>30.03.2024 16:25</td>
</tr> -->
</tbody>
</table>
</div>
</div>
</div>
<?php } ?>

View File

@ -0,0 +1,25 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "SELECT * FROM block_benefits WHERE id='" . $post['benefit_id'] . "'";
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
while ($obj = mysql_fetch_assoc($result)) {
$res['id'] = $obj['id'];
$res['benefit_icon'] = $obj['benefit_icon'];
$res['benefit_name'] = $obj['benefit_name'];
$res['benefit_description'] = $obj['benefit_description'];
}
echo json_encode($res); exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}

16
admin/ajax/getClient.php Normal file
View File

@ -0,0 +1,16 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
$get = clearInputData($_GET);
if(is_numeric($get['id']))
{
$client = new Clients_jw;
$client->get($get['id']);
// hide_client_contacts: маскируем phone/email/fio перед отдачей в JSON.
$clientArr = (array) $client;
if (function_exists('mask_client_contacts_inplace')) {
mask_client_contacts_inplace($clientArr);
}
echo json_encode($clientArr);
}
?>

View File

@ -0,0 +1,320 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && $_GET['id'] && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
// обновляем метку у меню календаря
// считаем события объектов
$sql = "SELECT count(id) FROM user_object_events WHERE user_id = $_SESSION[id] and calendar_view = 0
and schedule_date is not null AND DATE_FORMAT(e.schedule_date, '%Y-%m-%d %H:%i:%s') <= '".date("Y-m-d H:i:s")."'";
$rez = mysql_query($sql);
$objectEventCount = mysql_result($rez,0);
// считаем события клиентов
$sql = "SELECT count(id) FROM user_client_events WHERE user_id = $_SESSION[id] and calendar_view = 0 AND cancel = 0
and schedule_date is not null AND DATE_FORMAT(e.schedule_date, '%Y-%m-%d %H:%i:%s') <= '".date("Y-m-d H:i:s")."'";
$rez = mysql_query($sql);
$clientEventCount = mysql_result($rez,0);
// суммарное количество событий по объектам и пользователям
$sumCount = intval($objectEventCount) + intval($clientEventCount);
echo "<script>$('#calendarCounter').html('".$sumCount."');</script>";
$client = new Clients_jw;
$client->get($get['id']);
$dateAdd = date("d.m.Y", strtotime($client->date_add));
list($d, $m, $y) = explode(".", $dateAdd);
if ($y == date("Y")) {
$y = "";
}
$date_add = $d." ".getRusMonth($m)." ".$y;
echo '<div class="chat-date"><span>'.$date_add.'</span></div>';
echo '<div class="chat-status added"><span>Клиент добавлен</span></div>';
$user = new User;
$user->get($_SESSION['id']);
// если смотрит руководитель - показываем все
if ($_SESSION['agency'] || $_SESSION['manager']) {
$sql = "SELECT e.id, e.comment, e.create_date, e.type, e.user_id, e.schedule_date, e.address, e.sum, e.from_id, e.calendar_view, If(e.from_id <> 0, (SELECT u.user_logo FROM users as u WHERE u.id = e.from_id), (SELECT u.user_logo FROM users as u WHERE u.id = e.user_id)) as user_logo FROM user_client_jw_events as e WHERE e.client_id = $get[id] ORDER BY e.create_date ASC";
} else {
$sql = "SELECT e.id, e.comment, e.create_date, e.type, e.user_id, e.schedule_date, e.address, e.sum, e.from_id, e.calendar_view, If(e.from_id <> 0, (SELECT u.user_logo FROM users as u WHERE u.id = e.from_id), (SELECT u.user_logo FROM users as u WHERE u.id = e.user_id)) as user_logo FROM user_client_jw_events as e WHERE e.user_id = $_SESSION[id] and e.client_id = $get[id] ORDER BY e.create_date ASC";
}
$rez = mysql_query($sql);
$date = null;
$createDate = null;
while ($event = mysql_fetch_assoc($rez)) {
if ($createDate == null || $createDate != date("d.m.Y", strtotime($event['create_date']))) {
$createDate = date("d.m.Y", strtotime($event['create_date']));
list($d, $m, $y) = explode(".", $createDate);
if ($y == date("Y")) {
$y = "";
}
echo '<div class="chat-date"><span>' . $d . " " . getRusMonth($m) . " " . $y . '</span></div>';
}
$class_ev = " is__right";
$from_id = $event['user_id'];
if(!empty($event['from_id'])) $from_id = $event['from_id'];
if($_SESSION['id'] == $from_id){
$class_ev = " is__left";
}
if ($event['type'] == 'comment') {
?>
<div class="chat-block<?=$class_ev?>">
<div class="chat-author">
<div class="pic">
<?php
if(empty($event['user_logo'])){
?>
<img src="/images/user-pic.svg"/>
<?php
} else {
?>
<img src="/photos/agency/<?=$event['user_logo']?>">
<?php
}
?>
</div>
</div>
<div class="chat-message">
<div class="chat-content">
<div class="head"><span>Примечание</span></div>
<div class="message"><?=$event['comment']?></div>
<span class="time"><?=date("H:i", strtotime($event['create_date']))?></span>
</div>
</div>
<div class="clear"></div>
</div>
<?php
}
if ($event['type'] == 'call') {
$date = date("d.m.Y", strtotime($event['schedule_date']));
list($d, $m, $y) = explode(".", $date);
?>
<div class="chat-block<?=$class_ev?>">
<div class="chat-author">
<div class="pic">
<?php
if(empty($event['user_logo'])){
?>
<img src="/images/user-pic.svg"/>
<?php
} else {
?>
<img src="/photos/agency/<?=$event['user_logo']?>">
<?php
}
?>
</div>
</div>
<div class="chat-message call">
<div class="chat-complete">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" class=""/>
<div class="complete-action-button<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
<g>
<path d="M505.943,79.594c-8.077-8.077-21.172-8.077-29.249,0L167.755,388.532L35.306,256.083c-8.076-8.077-21.172-8.077-29.248,0 c-8.077,8.077-8.077,21.172,0,29.249l147.074,147.074c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.625-6.059 l323.562-323.562C514.019,100.767,514.019,87.672,505.943,79.594z" fill="#388e3c"/>
</g>
</g>
</svg>
</div>
</div>
</div>
<div class="chat-content">
<div class="head"><span>Звонок</span></div>
<div class="message">Позвонить <?=$d?> <?=getRusMonth($m)?> <?=$y?> в <?=date("H:i", strtotime($event['schedule_date']))?></div>
<?php if($event['comment']){ ?>
<div class="message">Комментарий: <?=$event['comment']?></div>
<?php } ?>
<span class="time"><?=date("H:i", strtotime($event['create_date']))?></span>
</div>
</div>
<div class="clear"></div>
</div>
<?php
}
if ($event['type'] == 'meet') {
$date = date("d.m.Y", strtotime($event['schedule_date']));
list($d, $m, $y) = explode(".", $date);
?>
<div class="chat-block<?=$class_ev?>">
<div class="chat-author">
<div class="pic">
<?php
if(empty($event['user_logo'])){
?>
<img src="/images/user-pic.svg"/>
<?php
} else {
?>
<img src="/photos/agency/<?=$event['user_logo']?>">
<?php
}
?>
</div>
</div>
<div class="chat-message meeting">
<div class="chat-complete">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" class=""/>
<div class="complete-action-button<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
<g>
<path d="M505.943,79.594c-8.077-8.077-21.172-8.077-29.249,0L167.755,388.532L35.306,256.083c-8.076-8.077-21.172-8.077-29.248,0 c-8.077,8.077-8.077,21.172,0,29.249l147.074,147.074c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.625-6.059 l323.562-323.562C514.019,100.767,514.019,87.672,505.943,79.594z" fill="#388e3c"/>
</g>
</g>
</svg>
</div>
</div>
</div>
<div class="chat-content">
<div class="head"><span>Встреча</span></div>
<div class="message">Встреча будет <?=$d?> <?=getRusMonth($m)?> <?=$y?> в <?=date("H:i", strtotime($event['schedule_date']))?></div>
<?php if ($event['address']) { ?>
<div class="message">Адрес: <?=$event['address']?></div>
<?php } if ($event['comment']) { ?>
<div class="message">Комментарий: <?=$event['comment']?></div>
<?php } ?>
<span class="time"><?=date("H:i", strtotime($event['create_date']))?></span>
</div>
</div>
<div class="clear"></div>
</div>
<?php
}
if ($event['type'] == 'show') {
$date = date("d.m.Y", strtotime($event['schedule_date']));
list($d, $m, $y) = explode(".", $date);
?>
<div class="chat-block<?=$class_ev?>">
<div class="chat-author">
<div class="pic">
<?php
if(empty($event['user_logo'])){
?>
<img src="/images/user-pic.svg"/>
<?php
} else {
?>
<img src="/photos/agency/<?=$event['user_logo']?>">
<?php
}
?>
</div>
</div>
<div class="chat-message showing">
<div class="chat-complete">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" class=""/>
<div class="complete-action-button<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
<g>
<path d="M505.943,79.594c-8.077-8.077-21.172-8.077-29.249,0L167.755,388.532L35.306,256.083c-8.076-8.077-21.172-8.077-29.248,0 c-8.077,8.077-8.077,21.172,0,29.249l147.074,147.074c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.625-6.059 l323.562-323.562C514.019,100.767,514.019,87.672,505.943,79.594z" fill="#388e3c"/>
</g>
</g>
</svg>
</div>
</div>
</div>
<div class="chat-content">
<div class="head"><span>Показ</span></div>
<div class="message">Показ будет <?=$d?> <?=getRusMonth($m)?> <?=$y?> в <?=date("H:i", strtotime($event['schedule_date']))?></div>
<?php if ($event['address']) { ?>
<div class="message">Адрес: <?=$event['address']?></div>
<?php } if ($event['comment']) { ?>
<div class="message">Комментарий: <?=$event['comment']?></div>
<?php } ?>
<span class="time"><?=date("H:i", strtotime($event['create_date']))?></span>
</div>
</div>
<div class="clear"></div>
</div>
<?php
}
if ($event['type'] == 'deal') {
$date = date("d.m.Y", strtotime($event['schedule_date']));
list($d, $m, $y) = explode(".", $date);
?>
<div class="chat-block<?=$class_ev?>">
<div class="chat-author">
<div class="pic">
<?php
if(empty($event['user_logo'])){
?>
<img src="/images/user-pic.svg"/>
<?php
} else {
?>
<img src="/photos/agency/<?=$event['user_logo']?>">
<?php
}
?>
</div>
</div>
<div class="chat-message deal">
<div class="chat-complete">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" class=""/>
<div class="complete-action-button<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
<g>
<path d="M505.943,79.594c-8.077-8.077-21.172-8.077-29.249,0L167.755,388.532L35.306,256.083c-8.076-8.077-21.172-8.077-29.248,0 c-8.077,8.077-8.077,21.172,0,29.249l147.074,147.074c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.625-6.059 l323.562-323.562C514.019,100.767,514.019,87.672,505.943,79.594z" fill="#388e3c"/>
</g>
</g>
</svg>
</div>
</div>
</div>
<div class="chat-content">
<div class="head"><span>Сделка</span></div>
<div class="message">Сделка будет <?=$d?> <?=getRusMonth($m)?> <?=$y?> в <?=date("H:i", strtotime($event['schedule_date']))?></div>
<?php if ($event['sum']) { ?>
<div class="message">Сумма сделки: <?=$event['sum']?><span class="rub">p</span></div>
<?php } if ($event['comment']) { ?>
<div class="message">Комментарий: <?=$event['comment']?></div>
<?php } ?>
<span class="time"><?=date("H:i", strtotime($event['create_date']))?></span>
</div>
</div>
<div class="clear"></div>
</div>
<?php
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$agency_id = $_GET['id'];
$sql = "SELECT cf.token, cf.end_date FROM complexes_frame as cf WHERE cf.agency_id = $agency_id";
$query = mysql_query($sql);
$res = mysql_fetch_assoc($query);
if (isset($res['token'])) {
$token = $res['token'];
$url = $site_url . "/complexes-frame/#/" . $token . "/view";
$end_date = $res['end_date'];
echo json_encode([
'status' => true,
'url' => $url,
'end_date' => $end_date
]);
exit;
} else {
echo json_encode([
'status' => false,
'message' => 'Frame not found',
]);
}

View File

@ -0,0 +1,99 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Mortgage.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Bank.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BankProgram.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BankProgramRate.php';
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin']) && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
$reservationId = $get['id'];
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservationId);
$bankPrograms = unserialize($storedData['banks']);
echo '<div class="flat__banks">';
if ($bankPrograms && count($bankPrograms) > 0) {
$bankList = array();
$bankIdsList = array();
foreach ($bankPrograms as $bankProgram) {
$bank = Bank::findOne($bankProgram->bank_id);
if (!in_array($bank->id, $bankIdsList)) {
$bankIdsList[] = $bank->id;
$bankList[] = $bank;
}
}
foreach ($bankList as $bank) {
?>
<div class="bank">
<a href="#" class="program-activate" data-bank-id="<?php echo $bank->id;?>">
<div class="bank__inner">
<div class="bank__logo">
<img src="<?php echo "/photos/bank/" . $bank->logo; ?>"
alt="<?php echo $bank->name; ?>" class=""><br/>
<span style="float: right">Подробнее...<span>
</div>
</div>
</a>
</div>
<div class="full_modal-bg" id="bank_programs__bg_<?php echo $bank->id;?>" style="display: none; overflow: visible; z-index: 100002;">
<span class="pseudo-link programs-closer" style="z-index: 999999999" onclick="$('#bank_programs_<?php echo $bank->id;?>').hide(10); $('#bank_programs__bg_<?php echo $bank->id;?>').hide(10); $('#flat__bg .closer-flat').show(); return false;">
<i class="ti-close"></i>
</span>
<div class="full_modal flat__modal" id="bank_programs_<?php echo $bank->id;?>" style="display: none;">
<div class="flat__inner">
<?php
foreach ($bankPrograms as $bankProgram) {
if ($bankProgram->bank->id == $bank->id) {
$bankProgramRates = $bankProgram->bankProgramRates;
foreach ($bankProgramRates as $bankProgramRate) {
?>
<div class="bank">
<div class="bank__inner">
<div class="bank__logo">
<img src="<?php echo "/photos/bank/" . $bank->logo; ?>"
alt="<?php echo $bank->name; ?>" class="">
</div>
<div class="bank__text">
<p>Первый взнос <?php echo $bankProgramRate->first_pay_percent; ?>%</p>
<p>Ставка <?php echo number_format($bankProgramRate->rate_percent, 2, ',', ' '); ?>%</p>
<p>Срок ипотеки от <?php echo $bankProgramRate->period_min . " до " . $bankProgramRate->period_max; ?> лет</p>
</div>
</div>
</div>
<?php
}
}
}
?>
<div class="clear"></div>
</div>
</div>
</div>
<?php
}
} else {
echo "<p>Нет ипотеки</p>";
}
echo '<div class="clear"></div>';
echo '</div>';
}
?>

View File

@ -0,0 +1,77 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Prefetcher.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/presentation/DocumentPrefetcher.php';
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin']) && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
$reservationId = $get['id'];
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservationId);
$docs = unserialize($storedData['docs']);
function print_dirs($dirs)
{
if ($dirs && count($dirs) > 0) {
print('<ul class="docs docsdirs">');
foreach ($dirs as $dir) {
print_dir($dir);
}
print('</ul>');
}
}
function print_files($files)
{
if ($files && count($files) > 0) {
print('<ul class="docs docsfiles">');
foreach ($files as $file) {
print_file($file);
}
print('</ul>');
}
}
function print_dir($dir)
{
echo '<li class="dir opened">';
echo '<span class="dir-link"><span class="dir-span ti-folder"></span><span class="dir-name">';
echo $dir['name'];
echo "</span></span>";
print_dirs($dir['dirs']);
print_files($dir['files']);
print ('</li>');
}
function print_file($file)
{
$fileUrl = $file['url'];
echo '<li class="file">';
echo '<a title="Скачать файл" target="_blank" href="' . $fileUrl . '"><span class="file-span ti-file"></span><span class="file-name">' . $file['name'] . '</span></a>';
echo '</li>';
}
print_dirs($docs['dirs']);
print_files($docs['files']);
}
?>

View File

@ -0,0 +1,145 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin']) && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
$reservationId = $get['id'];
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservationId);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$builder = unserialize($storedData['builder']);
$subways = unserialize($storedData['subways']);
$images = unserialize($storedData['images']);
$price = round($block->getCalculatedFee() * $apartment->discount_price / 100);
?>
<div class="left">
<div class="row">
<div class="NB__label">Адрес</div>
<div
class="NB__value address"><?php echo Region::findOne($block->region_id)->name . " " . $block->address; ?></div>
</div>
<div class="row">
<div class="NB__label">Метро</div>
<div class="NB__value"><?php
if ($subways && count($subways)) {
foreach ($subways as $subway) {
echo $subway . "; ";
}
}
?></div>
</div>
<div class="row">
<div class="NB__label"> дома</div>
<div class="NB__value"><?php echo $building->number; ?></div>
</div>
<div class="row">
<div class="NB__label">Корпус</div>
<div class="NB__value"><?php echo $building->corp; ?></div>
</div>
<div class="row">
<div class="NB__label">Этажей</div>
<div class="NB__value"><?php echo $building->floors; ?></div>
</div>
<div class="row">
<div class="NB__label">Тип дома</div>
<div class="NB__value"><?php echo $building->type; ?></div>
</div>
<div class="row">
<div class="NB__label">Очередь</div>
<div class="NB__value"><?php echo $building->floors; ?></div>
</div>
<div class="row">
<div class="NB__label">Срок сдачи</div>
<div class="NB__value"><?php echo Date::getFormatedEndingPeriod($building->deadline); ?></div>
</div>
<div class="row">
<div class="NB__label">Застройщик</div>
<div class="NB__value"><?php echo $builder->name ?></div>
</div>
<div class="row">
<div class="NB__label">Тип договора</div>
<div class="NB__value"><?php echo Block::$types[$block->type]; ?></div>
</div>
</div>
<div class="right">
<?php
if ($images || $block->image) {
?>
<div class="NB__images">
<div class="fotorama" data-allowfullscreen="true" data-height="350px" data-width="100%" data-fit="cover" data-nav="false">
<?php if ($block->image) { ?>
<img src="<?php echo $block->image; ?>">
<?php }
if ($images) {
foreach ($images as $image) {
?>
<img src="<?php echo $image; ?>">
<?php }
}
?>
</div>
</div>
<?php
}
?>
<div class="NB__description">
<?php echo $block->note; ?>
</div>
<div class="NB__map">
<div id="map_canvas" style="width: 100%; height: 350px;"></div>
</div>
<script type="text/javascript">
function onYandexMapInit() {
var data = [
<?php echo $block->latitude; ?>,
<?php echo $block->longitude; ?>
];
var myMap = new ymaps.Map('map_canvas', {
// При инициализации карты обязательно нужно указать
// её центр и коэффициент масштабирования.
center: data,
zoom:15
});
// Открываем балун на карте (без привязки к геообъекту).
myMap.balloon.open(data, '<?php echo $block->name; ?>', {
closeButton: false
});
}
</script>
</div>
<div class="clear"></div>
<?php
}
?>

View File

@ -0,0 +1,35 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin']) && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
$reservationId = $get['id'];
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservationId);
$block = unserialize($storedData['block']);
?>
<div class="flat__text">
<div class="0">
<?php
if ($block->additional) {
echo $block->additional;
} else {
echo "<p>Не указаны</p>";
}
?>
</div>
</div>
<?php
}
?>

View File

@ -0,0 +1,131 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
if ($_SESSION['id'] && $_GET['id'] && isset($_SESSION['superadmin']) && is_numeric($_GET['id'])) {
$get = clearInputData($_GET);
$reservationId = $get['id'];
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservationId);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$roomType = unserialize($storedData['roomType']);
$decorationType = unserialize($storedData['decorationType']);
$flatType = unserialize($storedData['flatType']);
$price = round($block->getCalculatedFee() * $apartment->discount_price / 100);
?>
<div class="left flat__info">
<div class="row comission">
<div class="row-head">Ваши комиссионные</div>
<div class="row-min">
<div class="proc"><?php echo number_format($block->getCalculatedFee(), 2, ',', ' '); ?>%</div>
<div class="sum"><?php echo number_format($price, 0, ',', ' ')?> <span class="rub">p</span></div>
</div>
</div>
<div class="row">
<div class="NB__label">Корпус</div>
<div class="NB__value"><? echo $building->corp; ?></div>
</div>
<div class="row">
<div class="NB__label"> кв</div>
<div class="NB__value"><? echo $apartment->number; ?></div>
</div>
<div class="row">
<div class="NB__label">Тип кв</div>
<div class="NB__value"><? echo $roomType->name; ?></div>
</div>
<div class="row">
<div class="NB__label">Этаж</div>
<div class="NB__value"><? echo $apartment->flat_floor; ?></div>
</div>
<div class="row">
<div class="NB__label"> подъезда</div>
<div class="NB__value"><? echo $apartment->section; ?></div>
</div>
<div class="row">
<div class="NB__label">Отделка</div>
<div class="NB__value"><? echo $decorationType->name; ?></div>
</div>
<div class="row">
<div class="NB__label">Высота потолков</div>
<div class="NB__value"><? echo $apartment->height; ?></div>
</div>
<div class="row">
<div class="row-head">Площадь</div>
<div class="row-min">
<div class="NB__label">общая</div>
<div class="NB__value"><? echo $apartment->space_total; ?></div>
</div>
<div class="row-min">
<div class="NB__label">комнат</div>
<div class="NB__value"><? if ($apartment->space_room) { echo str_replace("+", " + ", $apartment->space_room); } else { echo $apartment->space_room; } ?></div>
</div>
<div class="row-min">
<div class="NB__label">кухни</div>
<div class="NB__value"><? echo $apartment->space_kitchen; ?></div>
</div>
</div>
<div class="row">
<div class="row-head">Оплата</div>
<div class="row-min">
<div class="NB__label">базовая, м<sup>2</sup></div>
<div class="NB__value"><? echo number_format($apartment->meter_price, 0, ',', ' '); ?> <span class="rub">p</span></div>
</div>
<div class="row-min">
<div class="NB__label">при 100% опл., м<sup>2</sup></div>
<div class="NB__value"><? echo number_format($apartment->discount_meter_price, 0, ',', ' '); ?> <span class="rub">p</span></div>
</div>
<div class="row-min">
<div class="NB__label">базовая</div>
<div class="NB__value"><? echo number_format($apartment->base_price, 0, ',', ' '); ?> <span class="rub">p</span></div>
</div>
<div class="row-min">
<div class="NB__label">при 100% опл.</div>
<div class="NB__value"><? echo number_format($apartment->discount_price, 0, ',', ' '); ?> <span class="rub">p</span></div>
</div>
</div>
<div class="row">
<div><b><? echo $flatType->name; ?></b></div>
</div>
</div>
<div class="right flat__images">
<div class="flat__image">
<?php if ($apartment->image) {?>
<div class="flat__image flat-flat-plan">
<div class="plan__label">Планировка квартиры</div>
<img src="<?php echo $apartment->image; ?>"
alt="Планировка квартиры - для изменения масштаба используйте колесо мышки">
</div>
<?php } ?>
<?php if ($apartment->image2) {?>
<div class="flat-plan flat-etag-plan">
<div class="plan__label">Планировка этажа</div>
<img src="<?php echo $apartment->image2; ?>"
alt="Планировка этажа - для изменения масштаба используйте колесо мышки">
</div>
<?php } ?>
</div>
</div>
<div class="clear"></div>
<?php
}
?>

View File

@ -0,0 +1,208 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ReservationImage.php';
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
$reservationImages = ReservationImage::findForReservation($reservation->id);
?>
<div class="flat__inner">
<div class="flat__top">
<h2 id="flat_booking_modal_title">Бронирование квартиры <?php echo $reservation->apartment_number; ?></h2>
</div>
<div class="flat__top"
style="border-top: 1px solid #dedede;padding-top: 25px;">
<?php echo $reservation->object_desc; ?>
</div>
<div class="flat__top" style="padding-top: 25px;">
<button class="booking JWbutton button" data-id="<?php echo $reservation->id; ?>" data-flatnum="<?php echo $reservation->apartment_number; ?>" id="viewAdminApartmentsButton">Информация о квартире</button>
</div>
<div class="flat-booking__form">
<form action="" class="JW-form">
<div class="form-block" style="padding-top: 14px; color: red;" id="errorBlock">
</div>
<h3>Клиент</h3>
<div class="form-block">
<div class="label">Фамилия</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->secondname; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Имя</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->firstname; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Отчество</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->surname; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Дата рождения</div>
<div class="inputs">
<input type="text" disabled="disabled" required class=" text required" value="<?php echo Date::getDateForApi($reservation->birth_date); ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Номер телефона</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->phone; ?>">
</div>
<div class="clear"></div>
</div>
<h3>Оплата</h3>
<div class="form-block">
<div class="label">Вид</div>
<div class="inputs">
<div class="button-row">
<input type="radio" class="hidden--radio" id="pay_1" name="payment"
value="<?php echo Reservation::PAYMENT_FULL_PRICE; ?>" checked>
<input type="radio" class="hidden--radio" id="pay_2" name="payment"
value="<?php echo Reservation::PAYMENT_FULL_SUBSIDY; ?>">
<input type="radio" class="hidden--radio" id="pay_3" name="payment"
value="<?php echo Reservation::PAYMENT_MORTGAGE; ?>">
<input type="radio" class="hidden--radio" id="pay_4" name="payment"
value="<?php echo Reservation::PAYMENT_MILITARY_MORTGAGE; ?>">
<div class="selector-button button-left pay <?php if ($reservation->payment == Reservation::PAYMENT_FULL_PRICE) { echo "selected"; }?>">
<span>100% стоимости</span>
<label for="pay_1" class="label-overlay">&nbsp;</label>
</div>
<div class="selector-button button-center pay <?php if ($reservation->payment == Reservation::PAYMENT_FULL_SUBSIDY) { echo "selected"; }?>">
<span>Рассрочка</span>
<label for="pay_2" class="label-overlay">&nbsp;</label>
</div>
<div class="selector-button button-center pay <?php if ($reservation->payment == Reservation::PAYMENT_MORTGAGE) { echo "selected"; }?>">
<span>Ипотека</span>
<label for="pay_3" class="label-overlay">&nbsp;</label>
</div>
<div class="selector-button button-right pay <?php if ($reservation->payment == Reservation::PAYMENT_MILITARY_MORTGAGE) { echo "selected"; }?>">
<span>Военная ипотека</span>
<label for="pay_4" class="label-overlay">&nbsp;</label>
</div>
<div class="clear"></div>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Банк</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text" value="<?php echo $reservation->bank; ?>">
</div>
<div class="clear"></div>
</div>
<h3>Паспорт</h3>
<div class="form-block">
<div class="label">Серия</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->passport_series; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Номер</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->passport_num; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Дата выдачи</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo Date::getDateForApi($reservation->passport_date); ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Кем выдан</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->passport_place; ?>">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Адрес регистрации</div>
<div class="inputs">
<input type="text" disabled="disabled" class="text required" value="<?php echo $reservation->passport_address; ?>">
</div>
<div class="clear"></div>
</div>
<h3>Изображения паспорта</h3>
<div class="form-desc">Изображения паспорта можно приложить позже. Начать бронирование можно без
них.
</div>
<div class="form-block">
<div class="label">Главный разворот</div>
<div>
<?php
foreach ($reservationImages as $image) {
if ($image->image_type == "passport_main") {
?>
<a target="_blank" title="Просмотр вложения" href="<?php echo $image->fullpath; ?>">Просмотр</a>
<?php
}
}
?>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Страница прописки</div>
<div>
<?php
foreach ($reservationImages as $image) {
if ($image->image_type == "passport_prop") {
?>
<a target="_blank" title="Просмотр вложения" href="<?php echo $image->fullpath; ?>">Просмотр</a>
<?php
}
}
?>
</div>
<div class="clear"></div>
</div>
<h3>Дополнительно</h3>
<div class="form-block">
<div class="label">Комментарий</div>
<div class="inputs">
<textarea disabled="disabled" class="text"><?php echo $reservation->info; ?></textarea>
</div>
<div class="clear"></div>
</div>
</form>
</div>
</div>
<?php
}
}

View File

@ -0,0 +1,34 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ReservationImage.php';
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
if ($reservation->note) {
echo str_replace("<br>", "\n", $reservation->note);
} else {
echo "";
}
}
}

View File

@ -0,0 +1,22 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$post = clearInputData($_POST);
$user = new User;
$user->get($post['id']);
if ($user) {
?>
<div>E-mail: <?php echo $user->email; ?></div>
<div>Тел.: <?php echo $user->phone; ?></div>
<?php
}
}

View File

@ -0,0 +1,11 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_SESSION['superadmin'] == 1 && $_GET['id']) {
$post = clearInputData($_GET);
$sql = "SELECT zipal_login, zipal_password, zipal_balance FROM users WHERE id = '" . $post['id'] . "'";
$rez = mysql_query($sql);
echo json_encode(mysql_fetch_assoc($rez));
}

View File

@ -0,0 +1,83 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$file = $_SERVER['DOCUMENT_ROOT']."/server/Kontakty_AN_SPb__Len_obl.csv";
var_dump(file_exists($file));
$CsvString = file_get_contents($file);
//echo $CsvString;
$Data = str_getcsv($CsvString, "\n"); //parse the rows
foreach($Data as &$Row) $Row = str_getcsv($Row, ";"); //parse the items in rows
$keys = array();
//$res_array =
foreach($Data as $key => $row){
if($key == 0){
var_dump($row);
} else {
$name = trim($row[1]);
$phones_temp = explode(',',trim($row[7]));
$phone2 = '';
foreach ($phones_temp as $k => $p) {
if(!empty($p)){
if($k == 0){
$phone = '+'.str_replace(['(',')','-',' ','+'], '', $p);
} else {
if($phone2 != '') $phone2 .= '; ';
$phone2 .= '+'.str_replace(['(',')','-',' ','+'], '', $p);
}
}
}
$phones2_temp = explode(',',trim($row[8]));
foreach ($phones2_temp as $k => $p) {
if(!empty($p)){
if($phone2 != '') $phone2 .= '; ';
$phone2 .= '+'.str_replace(['(',')','-',' ','+'], '', $p);
}
}
$email = trim($row[9]);
$id_agent = 4;
$funnel_id = 2;
if(empty($email)){
$email = trim($row[10]);
}
$site = trim($row[11]);
// if(!empty($phone) && !empty($name)){
$sql = "SELECT id, date_add FROM clients_jw WHERE phone = '{$phone}'";
/* if(!empty($email)){
$sql .= " or email = '{$email}'";
}
if(!empty($site)){
$sql .= " or site = '{$site}'";
}*/
// }
$q = mysql_query($sql);
$rows = mysql_num_rows($q);
$r = mysql_fetch_assoc($q);
if($rows == 0){
$in = "INSERT INTO clients_jw SET fio='{$name}', phone='{$phone}', phone2='{$phone2}',
email = '{$email}', site = '{$site}', id_agent = 4, funnel_id = 1, date_add = NOW(),
stage = 1
";
} else {
$in = "INSERT INTO clients_jw SET fio='{$name}', phone='{$phone}', phone2='{$phone2}',
email = '{$email}', site = '{$site}', id_agent = 4, funnel_id = 1, date_add = '".$r['date_add']."',
stage = 1
";
}
echo $in.'<br>';
// mysql_query($in);
// }
//echo $key.' - '.$name.' | '.$phone.' | '.$phone2.' | '.$email.' | '.$site.' = '.$rows.'<br>';
}
}
?>

View File

@ -0,0 +1,41 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockPlusFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/TargetFactory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
$targetId = $_POST['target_id'];
$targetType = $_POST['target_type'];
$docId = $_POST['doc_id'];
$name = $_POST['name'];
$manager = new DocumentManager((new TargetFactory())->getTarget($targetId, $targetType));
$doc = Document::findById($targetId, $targetType, $docId);
$manager->rename($docId, $name);
$dirObject = $manager->getDir($doc->parent);
$path = $manager->getParents($dirObject->getId());
$collection = $manager->getChildren($dirObject->getId());
include($_SERVER['DOCUMENT_ROOT'] . "/admin/documentsWidget.php");
}

View File

@ -0,0 +1,96 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
$reservation->cancel();
$user = new User;
$user->get($reservation->user_id);
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservation->id);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$roomType = unserialize($storedData['roomType']);
$builder = unserialize($storedData['builder']);
$f1 = file("https://joywork.ru/template_mail/reservation_status.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $reservation->apartment_number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%reservation_status%>", $reservation->getStateName(), $text);
$text = str_replace("<%room_type%>", $roomType->name, $text);
$text = str_replace("<%space_total%>", $apartment->space_total, $text);
$text = str_replace("<%flat_floor%>", $apartment->flat_floor, $text);
$text = str_replace("<%discount_price%>", number_format($reservation->full_price, 0, ',', ' '), $text);
$text = str_replace("<%base_price%>", number_format($reservation->base_price, 0, ',', ' '), $text);
$text = str_replace("<%block_name%>", $block->name, $text);
$text = str_replace("<%building_line%>", $building->line, $text);
$text = str_replace("<%building_corp%>", $building->corp, $text);
$text = str_replace("<%building_deadline%>", Date::getFormatedEndingPeriod($building->deadline), $text);
$text = str_replace("<%building_floors%>", $building->floors, $text);
$text = str_replace("<%block_address%>", $block->address, $text);
$text = str_replace("<%builder_name%>", $builder->name, $text);
$text = str_replace("<%reservation_client_name%>", $reservation->getFullname(), $text);
$text = str_replace("<%reservation_client_phone%>", $reservation->phone, $text);
$style = "";
switch( $reservation->status ) {
case 1:
$style = "background: #d0d0d0; color: #757575;";
break;
case 2:
$style = "background: #ffc107; color: #ffffff;";
break;
case 3:
$style = "background: #d0d0d0; color: #757575;";
break;
case 4:
$style = "background: #4caf50;color: #ffffff;";
break;
case 5:
$style = "background: #d0d0d0; color: #757575;";
break;
}
$text = str_replace("<%reservation_status_style%>", $style, $text);
mailClientFromJoywork($user->email, "Изменен статус брони", $text);
}
}

View File

@ -0,0 +1,96 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
$reservation->remove();
$user = new User;
$user->get($reservation->user_id);
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservation->id);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$roomType = unserialize($storedData['roomType']);
$builder = unserialize($storedData['builder']);
$f1 = file("https://joywork.ru/template_mail/reservation_status.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $reservation->apartment_number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%reservation_status%>", $reservation->getStateName(), $text);
$text = str_replace("<%room_type%>", $roomType->name, $text);
$text = str_replace("<%space_total%>", $apartment->space_total, $text);
$text = str_replace("<%flat_floor%>", $apartment->flat_floor, $text);
$text = str_replace("<%discount_price%>", number_format($reservation->full_price, 0, ',', ' '), $text);
$text = str_replace("<%base_price%>", number_format($reservation->base_price, 0, ',', ' '), $text);
$text = str_replace("<%block_name%>", $block->name, $text);
$text = str_replace("<%building_line%>", $building->line, $text);
$text = str_replace("<%building_corp%>", $building->corp, $text);
$text = str_replace("<%building_deadline%>", Date::getFormatedEndingPeriod($building->deadline), $text);
$text = str_replace("<%building_floors%>", $building->floors, $text);
$text = str_replace("<%block_address%>", $block->address, $text);
$text = str_replace("<%builder_name%>", $builder->name, $text);
$text = str_replace("<%reservation_client_name%>", $reservation->getFullname(), $text);
$text = str_replace("<%reservation_client_phone%>", $reservation->phone, $text);
$style = "";
switch( $reservation->status ) {
case 1:
$style = "background: #d0d0d0; color: #757575;";
break;
case 2:
$style = "background: #ffc107; color: #ffffff;";
break;
case 3:
$style = "background: #d0d0d0; color: #757575;";
break;
case 4:
$style = "background: #4caf50;color: #ffffff;";
break;
case 5:
$style = "background: #d0d0d0; color: #757575;";
break;
}
$text = str_replace("<%reservation_status_style%>", $style, $text);
mailClientFromJoywork($user->email, "Изменен статус брони", $text);
}
}

View File

@ -0,0 +1,96 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
$reservation->sell();
$user = new User;
$user->get($reservation->user_id);
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservation->id);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$roomType = unserialize($storedData['roomType']);
$builder = unserialize($storedData['builder']);
$f1 = file("https://joywork.ru/template_mail/reservation_status.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $reservation->apartment_number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%reservation_status%>", $reservation->getStateName(), $text);
$text = str_replace("<%room_type%>", $roomType->name, $text);
$text = str_replace("<%space_total%>", $apartment->space_total, $text);
$text = str_replace("<%flat_floor%>", $apartment->flat_floor, $text);
$text = str_replace("<%discount_price%>", number_format($reservation->full_price, 0, ',', ' '), $text);
$text = str_replace("<%base_price%>", number_format($reservation->base_price, 0, ',', ' '), $text);
$text = str_replace("<%block_name%>", $block->name, $text);
$text = str_replace("<%building_line%>", $building->line, $text);
$text = str_replace("<%building_corp%>", $building->corp, $text);
$text = str_replace("<%building_deadline%>", Date::getFormatedEndingPeriod($building->deadline), $text);
$text = str_replace("<%building_floors%>", $building->floors, $text);
$text = str_replace("<%block_address%>", $block->address, $text);
$text = str_replace("<%builder_name%>", $builder->name, $text);
$text = str_replace("<%reservation_client_name%>", $reservation->getFullname(), $text);
$text = str_replace("<%reservation_client_phone%>", $reservation->phone, $text);
$style = "";
switch( $reservation->status ) {
case 1:
$style = "background: #d0d0d0; color: #757575;";
break;
case 2:
$style = "background: #ffc107; color: #ffffff;";
break;
case 3:
$style = "background: #d0d0d0; color: #757575;";
break;
case 4:
$style = "background: #4caf50;color: #ffffff;";
break;
case 5:
$style = "background: #d0d0d0; color: #757575;";
break;
}
$text = str_replace("<%reservation_status_style%>", $style, $text);
mailClientFromJoywork($user->email, "Изменен статус брони", $text);
}
}

View File

@ -0,0 +1,96 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
$reservation = Reservation::findOne($_POST['id']);
if ($reservation) {
$reservation->startWork();
$user = new User;
$user->get($reservation->user_id);
$apartmentHistory = new ApartmentHistory();
$storedData = $apartmentHistory->getData($reservation->id);
$apartment = unserialize($storedData['apartment']);
$block = unserialize($storedData['block']);
$building = unserialize($storedData['building']);
$roomType = unserialize($storedData['roomType']);
$builder = unserialize($storedData['builder']);
$f1 = file("https://joywork.ru/template_mail/reservation_status.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $reservation->apartment_number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%reservation_status%>", $reservation->getStateName(), $text);
$text = str_replace("<%room_type%>", $roomType->name, $text);
$text = str_replace("<%space_total%>", $apartment->space_total, $text);
$text = str_replace("<%flat_floor%>", $apartment->flat_floor, $text);
$text = str_replace("<%discount_price%>", number_format($reservation->full_price, 0, ',', ' '), $text);
$text = str_replace("<%base_price%>", number_format($reservation->base_price, 0, ',', ' '), $text);
$text = str_replace("<%block_name%>", $block->name, $text);
$text = str_replace("<%building_line%>", $building->line, $text);
$text = str_replace("<%building_corp%>", $building->corp, $text);
$text = str_replace("<%building_deadline%>", Date::getFormatedEndingPeriod($building->deadline), $text);
$text = str_replace("<%building_floors%>", $building->floors, $text);
$text = str_replace("<%block_address%>", $block->address, $text);
$text = str_replace("<%builder_name%>", $builder->name, $text);
$text = str_replace("<%reservation_client_name%>", $reservation->getFullname(), $text);
$text = str_replace("<%reservation_client_phone%>", $reservation->phone, $text);
$style = "";
switch( $reservation->status ) {
case 1:
$style = "background: #d0d0d0; color: #757575;";
break;
case 2:
$style = "background: #ffc107; color: #ffffff;";
break;
case 3:
$style = "background: #d0d0d0; color: #757575;";
break;
case 4:
$style = "background: #4caf50;color: #ffffff;";
break;
case 5:
$style = "background: #d0d0d0; color: #757575;";
break;
}
$text = str_replace("<%reservation_status_style%>", $style, $text);
mailClientFromJoywork($user->email, "Изменен статус брони", $text);
}
}

103
admin/ajax/saveArticle.php Normal file
View File

@ -0,0 +1,103 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!$_SESSION['superadmin']) { http_response_code(403); die('Доступ запрещён'); }
$post = clearInputData($_POST);
$id = isset($post['id']) ? (int)$post['id'] : 0;
// Сохраняем все введённые данные в сессии,
// чтобы при ошибке вернуть их в форму (иначе пользователь теряет введённый текст)
function saveFormDataAndRedirect($id, $errCode, $rawPost) {
$_SESSION['article_form_draft'] = array(
'title' => isset($rawPost['title']) ? $rawPost['title'] : '',
'page_title' => isset($rawPost['page_title']) ? $rawPost['page_title'] : '',
'description' => isset($rawPost['description']) ? $rawPost['description'] : '',
'slug' => isset($rawPost['slug']) ? $rawPost['slug'] : '',
'date_created' => isset($rawPost['date_created']) ? $rawPost['date_created'] : '',
'date_updated' => isset($rawPost['date_updated']) ? $rawPost['date_updated'] : '',
'reading_time' => isset($rawPost['reading_time']) ? $rawPost['reading_time'] : 5,
'sort_order' => isset($rawPost['sort_order']) ? $rawPost['sort_order'] : 0,
'published' => isset($rawPost['published']) ? 1 : 0,
'author_name' => isset($rawPost['author_name']) ? $rawPost['author_name'] : '',
'author_job' => isset($rawPost['author_job']) ? $rawPost['author_job'] : '',
'author_img' => isset($rawPost['author_img']) ? $rawPost['author_img'] : '',
'image' => isset($rawPost['image']) ? $rawPost['image'] : '',
'content' => isset($_POST['content']) ? $_POST['content'] : '',
);
$url = "/admin/article-edit.php" . ($id ? "?id=$id&" : "?") . "err=" . urlencode($errCode);
header("location:$url");
exit();
}
$slug = trim(Article::val($post, 'slug', ''));
$title = trim(Article::val($post, 'title', ''));
if (!$slug || !$title) {
saveFormDataAndRedirect($id, 'empty', $post);
}
$slug = preg_replace('/[^a-z0-9-]/', '', strtolower($slug));
$slug = trim($slug, '-');
if ($slug === '') {
saveFormDataAndRedirect($id, 'empty_slug', $post);
}
if (Article::slugExists($slug, $id)) {
saveFormDataAndRedirect($id, 'slug_exists', $post);
}
if (Article::isSlugConflictingWithFile($slug)) {
saveFormDataAndRedirect($id, 'slug_file_conflict', $post);
}
$imagePath = trim(Article::val($post, 'image', ''));
$maxImageSize = 5 * 1024 * 1024; // 5 MB
if (!empty($_FILES['image_file']['name']) && $_FILES['image_file']['error'] === UPLOAD_ERR_OK) {
if ($_FILES['image_file']['size'] > $maxImageSize) {
saveFormDataAndRedirect($id, 'image_too_large', $post);
}
$ext = strtolower(pathinfo($_FILES['image_file']['name'], PATHINFO_EXTENSION));
$imageInfo = @getimagesize($_FILES['image_file']['tmp_name']);
if (in_array($ext, array('jpg', 'jpeg', 'png', 'webp')) && $imageInfo !== false) {
$dir = $_SERVER['DOCUMENT_ROOT'] . '/images/articles/';
if (!is_dir($dir)) mkdir($dir, 0755, true);
$filename = 'art-' . ($id ? $id : 'new') . '-' . time() . '-' . mt_rand(1000, 9999) . '.' . $ext;
if (move_uploaded_file($_FILES['image_file']['tmp_name'], $dir . $filename)) {
$imagePath = '/images/articles/' . $filename;
}
}
}
$dateCreated = Article::val($post, 'date_created', '');
$dateUpdated = Article::val($post, 'date_updated', '');
$data = array(
'slug' => $slug,
'title' => $title,
'page_title' => trim(Article::val($post, 'page_title', '')),
'description' => trim(Article::val($post, 'description', '')),
'content' => isset($_POST['content']) ? $_POST['content'] : '',
'date_created' => $dateCreated ? $dateCreated : date('Y-m-d'),
'date_updated' => $dateUpdated ? $dateUpdated : date('Y-m-d'),
'reading_time' => max(1, (int)Article::val($post, 'reading_time', 5)),
'image' => $imagePath,
'author_name' => trim(Article::val($post, 'author_name', 'Станислав Дмитриев')),
'author_img' => trim(Article::val($post, 'author_img', '/images/articles/rukofodJW.png')),
'author_job' => trim(Article::val($post, 'author_job', 'руководитель JoyWork')),
'published' => isset($post['published']) ? 1 : 0,
'sort_order' => (int)Article::val($post, 'sort_order', 0),
);
if ($id > 0) {
Article::update($id, $data);
Article::regenerateSitemap();
header("location:/admin/article-edit.php?id=$id&saved=1");
} else {
$newId = Article::create($data);
Article::regenerateSitemap();
header("location:/admin/article-edit.php?id=$newId&saved=1");
}
exit();

View File

@ -0,0 +1,20 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_SESSION['superadmin'] == 1 && $_POST['id']) {
$post = clearInputData($_POST);
$number = $post['number'];
$date = $post['date'];
$id = $post['id'];
$dateObj = DateTime::createFromFormat('d.m.Y H:i', $date);
$dateObjForm = "'".date("Y-m-d H:i:s", $dateObj->getTimestamp())."'";
$sql = "UPDATE discharge_object_request SET request_number = '" . $number ."', request_date = $dateObjForm, state = 'sended' WHERE id = '" . $id . "'";
mysql_query($sql);
}

View File

@ -0,0 +1,32 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateCancel.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateWork.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateDelete.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateBought.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ReservationImage.php';
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$post = clearInputData($_POST);
$reservation = Reservation::findOne($post['id']);
if ($reservation) {
echo $reservation->saveNote($post['note']);
}
}

View File

@ -0,0 +1,19 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_SESSION['superadmin'] == 1 && $_POST['id']) {
$post = clearInputData($_POST);
$login = $post['login'];
$password = $post['password'];
$id = $post['id'];
$price = $post['price'];
$sql = "UPDATE users SET zipal_login = '" . $login ."', zipal_password = '" . $password ."', zipal_balance = '" . $price . "' WHERE id = '" . $id . "'";
echo $sql;
mysql_query($sql);
}

View File

@ -0,0 +1,152 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($type = $_POST['type'])
{
function getParsers($parser_name = [])
{
$items = array();
foreach ($parser_name as $name)
{
$sql = "SELECT
dps.*
FROM
domclick_parser_stats dps
JOIN
(
SELECT
id
FROM domclick_parser_stats
WHERE
`state` = 'Старт'
AND `parser_name` = '{$name}'
ORDER BY `id`
DESC LIMIT 1
) sub
WHERE
dps.id >= sub.id
AND dps.parser_name = '{$name}'
";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
while ($dbObject = mysql_fetch_assoc($rez)) {
$items[$dbObject['parser_name']][] = $dbObject;
}
}
}
return $items;
}
$items = getParsers([$_POST['type']]);
?>
<?php foreach ($items as $key => $item) {
$last_record = $item[count($item) - 1];
$status = 'Завершено';
if ($last_record && !in_array($last_record['state'], ['Завершено с ошибкой', 'Завершено успешно'])) {
$status = 'В процессе';
}
if ($last_record['state'] == 'Завершено с ошибкой') {
$status = 'Завершено с ошибкой';
}
if (!$last_record) {
$status = 'Парсер не был запущен';
}
$name = 'Другие';
if ($key == 'moscow') {
$name = 'Москва';
}
else if ($key == 'spb') {
$name = 'Санкт-Петербург';
}
?>
<div style="position: relative;">
<button
style="
position: absolute;
right: 36px;
top: 15px;
border: none;
background: #04AA6D;
font-weight: bold;
cursor: pointer;
color: white;
padding: 10px 20px;
border-radius: 4px;"
id="parser-<?= $key ?>" class="parser" data-type="<?= $key ?>"
>
Обновить Таблицу
</button>
<div>
<div id="domclick-parser">
<h2><?= $name ?> - <?= $status ?></h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>Количество Комплексов</th>
<th>Количество Объектов</th>
<th>Дата</th>
</tr>
</thead>
<tbody>
<?php
$colors = [
'Старт' => '#247d00',
'Создано' => '#2226f0',
'Обновлено' => '#2226f0',
'Удалено' => '#f02222',
'Завершено с ошибкой' => '#f02222',
'Завершено успешно' => '#247d00'
];
foreach ($item as $record) { ?>
<tr>
<td style="color: <?= $colors[$record['state']] ?>"><?= $record['state']?></td>
<td ><?= $record['complex_count'] > 0 ? $record['complex_count'] : '-' ?></td>
<td ><?= $record['object_count'] > 0 ? $record['object_count'] : '-' ?></td>
<td ><?= $record['updated_at']?></td>
</tr>
<?php } ?>
<!-- <tr>
<td>Старт</td>
<td>-</td>
<td>-</td>
<td>31.03.2024 16:25</td>
</tr>
<tr>
<td>Обновлено</td>
<td>10</td>
<td>20</td>
<td>31.03.2024 16:25</td>
</tr>
<tr>
<td>Удалено</td>
<td>2</td>
<td>0</td>
<td>30.03.2024 16:25</td>
</tr> -->
</tbody>
</table>
</div>
</div>
</div>
<?php
}
}
?>

View File

@ -0,0 +1,22 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$post = clearInputData($_POST);
$user = new User;
$user->get($post['id']);
$access = 0;
if ($user->newbuildings_access) {
$access = 0;
} else {
$access = 1;
}
$sql = "UPDATE users SET newbuildings_access = '$access' WHERE id = '" . $post['id'] . "'";
mysql_query($sql);
}

View File

@ -0,0 +1,22 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if ($_SESSION['id'] && isset($_SESSION['superadmin']) && $_POST['id']) {
$post = clearInputData($_POST);
$user = new User;
$user->get($post['id']);
$access = 0;
if ($user->enable_wazzap) {
$access = 0;
} else {
$access = 1;
}
$sql = "UPDATE users SET enable_wazzap = '$access' WHERE id = '" . $post['id'] . "'";
mysql_query($sql);
}

View File

@ -0,0 +1,90 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$agent_id = null;
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
$agent_id = $_GET['id'];
if ($_SESSION['id'] && $agent_id && (int)$agent_id > 0) {
$q = mysql_query("SELECT * FROM complexes_frame WHERE agency_id = $agent_id");
if ($frame = mysql_fetch_assoc($q)) {
// http://localhost:8080
$frame['url'] = "$site_url/complexes-frame/#/" . $frame['token'] . "/view";
echo json_encode([
'status' => true,
'data' => $frame,
]);
exit;
}
echo json_encode([
'status' => false,
'message' => 'Frame not found',
]);
exit;
}
break;
case 'POST':
if(!isset($_POST['id'])) {
$agent_id = $_SESSION['agency_id'];
} else {
$agent_id = $_POST['id'];
}
if ($_SESSION['id'] && $agent_id && (int)$agent_id > 0) {
$end_date = isset($_POST['endDate']) ? $_POST['endDate'] : null;
$frame_color = isset($_POST['main_color']) ? $_POST['main_color'] : null;
$client_funnel_id = isset($_POST['client_funnel_id']) ? $_POST['client_funnel_id'] : null;
$req_funnel_id = isset($_POST['req_funnel_id']) ? $_POST['req_funnel_id'] : null;
$color_reserved = isset($_POST['color_reserved']) ? $_POST['color_reserved'] : null;
$color_free = isset($_POST['color_free']) ? $_POST['color_free'] : null;
$q = mysql_query("SELECT * FROM complexes_frame WHERE agency_id = $agent_id");
$update_fields = [];
if ($end_date !== null) {
$update_fields[] = "end_date = '$end_date'";
}
if ($frame_color !== null) {
$update_fields[] = "frame_color = '$frame_color'";
}
if ($client_funnel_id !== null) {
$update_fields[] = "client_funnel_id = '$client_funnel_id'";
}
if ($req_funnel_id !== null) {
$update_fields[] = "req_funnel_id = '$req_funnel_id'";
}
if ($color_reserved !== null) {
$update_fields[] = "color_reserved = '$color_reserved'";
}
if ($color_free !== null) {
$update_fields[] = "color_free = '$color_free'";
}
if ($frame = mysql_fetch_assoc($q)) {
if (!empty($update_fields)) {
$update_query = "UPDATE complexes_frame SET " . implode(', ', $update_fields) . " WHERE agency_id = $agent_id";
// var_dump($update_query);die;
$query = mysql_query($update_query);
// var_dump($query);die;
}
} else {
$token = md5($agent_id . time());
$query = mysql_query("INSERT INTO complexes_frame SET token = '$token', agency_id = $agent_id," . implode(', ', $update_fields));
die(mysql_error());
}
echo ($query);
}
break;
default:
break;
}

View File

@ -0,0 +1,69 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$agent_id = null;
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
$agent_id = $_GET['id'];
if ($_SESSION['id'] && $agent_id && (int)$agent_id > 0) {
$q = mysql_query("SELECT * FROM presentation_frame WHERE agency_id = $agent_id");
if ($frame = mysql_fetch_assoc($q)) {
// http://localhost:8080
$frame['url'] = "$site_url/new-buildings-frame/#/catalogs/" . $frame['token'];
echo json_encode([
'status' => true,
'data' => $frame,
]);
exit;
}
echo json_encode([
'status' => false,
'message' => 'Frame not found',
]);
exit;
}
break;
case 'POST':
if(!isset($_POST['id'])) {
$agent_id = $_SESSION['agency_id'];
} else {
$agent_id = $_POST['id'];
}
if ($_SESSION['id'] && $agent_id && (int)$agent_id > 0) {
$region_id = isset($_POST['region']) ? (int)$_POST['region'] : null;
$end_date = isset($_POST['endDate']) ? $_POST['endDate'] : null;
$color = isset($_POST['color']) ? $_POST['color'] : null;
$q = mysql_query("SELECT * FROM presentation_frame WHERE agency_id = $agent_id");
$update_fields = [];
if ($region_id !== null) {
$update_fields[] = "rf_region_id = $region_id";
}
if ($end_date !== null) {
$update_fields[] = "end_date = '$end_date'";
}
if ($color !== null) {
$update_fields[] = "color = '$color'";
}
if ($frame = mysql_fetch_assoc($q)) {
if (!empty($update_fields)) {
$update_query = "UPDATE presentation_frame SET " . implode(', ', $update_fields) . " WHERE agency_id = $agent_id";
$query = mysql_query($update_query);
}
} else {
$token = md5($agent_id . time());
$query = mysql_query("INSERT INTO presentation_frame SET token = '$token', agency_id = $agent_id," . implode(', ', $update_fields));
die(mysql_error());
}
echo ($query);
}
break;
default:
break;
}

View File

@ -0,0 +1,43 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "UPDATE block_benefits
SET block_id=2, benefit_name='" . $post['benefit_name'] . "', benefit_description='" . $post['benefit_description'] . "', benefit_icon='" . $post['benefit_icon'] . "'
WHERE id=" . $post['benefit_id'];
try {
mysql_query($sql);
$sql = "SELECT * FROM block_benefits WHERE block_id='" . $post['block_id'] . "'";
try {
$result = mysql_query($sql);
if (mysql_num_rows($result)!=0) {
$result_html = '';
while ($obj = mysql_fetch_assoc($result)) {
$result_html .=
'<div class="benefit_item" benefit_id="'.$obj["id"].'">'.
'<div class="benefit_item_prop benefit_item_ico">'.
'<img src="../images/benefits/'.$obj["benefit_icon"].'">'.
'</div>'.
'<div class="benefit_item_prop benefit_item_name">'.$obj["benefit_name"].'</div>'.
'<div class="benefit_item_prop benefit_item_description">'.$obj['benefit_description'].'</div>'.
'<div class="benefit_item_prop benefit_item_edit">'.
'<div class="benefit_edit benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Редактировать</div>'.
'<div class="benefit_del benefit_act" block_id="'.$obj['block_id'].'" benefit_id="'.$obj['id'].'">Удалить</div>'.
'</div>'.
'<div class="clear"></div>'.
'</div>';
}
echo $result_html; exit;
}
} catch (Exception $e) {
echo $e->getMessage();
}
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,82 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$targetId = $_POST['target_id'];
$targetType = $_POST['target_type'];
if (isset($_POST['dir_id'])) {
$dirId = $_POST['dir_id'];
} else {
$dirId = 0;
}
if ($_SESSION['id'] && isset($_SESSION['superadmin'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockPlusFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/TargetFactory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
$manager = new DocumentManager((new TargetFactory())->getTarget($targetId, $targetType));
$dirObject = $manager->getDir($dirId);
$path = $manager->getParents($dirObject->getId());
$collection = $manager->getChildren($dirObject->getId());
include($_SERVER['DOCUMENT_ROOT'] . "/admin/documentsWidget.php");
}
if ($targetType == DocTarget::TYPE_BLOCK) {
?>
<script type="text/javascript">
$('#createFolderButton').attr('data-targetid', <?php echo $targetId; ?>);
$('#createFolderButton').attr('data-targettype', <?php echo $targetType; ?>);
$('#createFolderButton').attr('data-id', <?php echo $dirId; ?>);
$('#load_doc_target_id').val(<?php echo $targetId; ?>);
$('#load_doc_target_type').val(<?php echo $targetType; ?>);
$('#load_doc_fold_id').val(<?php echo $dirId; ?>);
</script>
<?php
}
if ($targetType == DocTarget::TYPE_BLOCK_PROGRESS) {
?>
<script type="text/javascript">
$('#createProgressFolderButton').attr('data-targetid', <?php echo $targetId; ?>);
$('#createProgressFolderButton').attr('data-targettype', <?php echo $targetType; ?>);
$('#createProgressFolderButton').attr('data-id', <?php echo $dirId; ?>);
$('#load_progress_target_id').val(<?php echo $targetId; ?>);
$('#load_progress_fold_id').val(<?php echo $dirId; ?>);
$('#load_progress_target_type').val(<?php echo $targetType; ?>);
</script>
<?php } ?>
<?php
if ($targetType == DocTarget::TYPE_BLOCK_PLUS) {
?>
<script type="text/javascript">
$('#createPlusFolderButton').attr('data-targetid', <?php echo $targetId; ?>);
$('#createPlusFolderButton').attr('data-targettype', <?php echo $targetType; ?>);
$('#createPlusFolderButton').attr('data-id', <?php echo $dirId; ?>);
$('#load_plus_target_id').val(<?php echo $targetId; ?>);
$('#load_plus_fold_id').val(<?php echo $dirId; ?>);
$('#load_plus_target_type').val(<?php echo $targetType; ?>);
</script>
<?php } ?>

View File

@ -0,0 +1,15 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!isset($_SESSION['superadmin'])) {
echo json_encode(['No data', 403]); exit;
}
$post = clearInputData($_POST);
$sql = "UPDATE block_videos SET recommended=".$post['recommended']." WHERE id=".$post['video_id'];
try {
mysql_query($sql);
} catch (Exception $e) {
echo $e->getMessage();
}

View File

@ -0,0 +1,64 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$isCkeditor = !empty($_GET['ckeditor']) || !empty($_GET['CKEditor']);
$ckFuncNum = isset($_GET['CKEditorFuncNum']) ? (int)$_GET['CKEditorFuncNum'] : 0;
function respond($success, $message, $url = '') {
global $isCkeditor, $ckFuncNum;
if ($isCkeditor) {
// CKEditor 4 ожидает HTML с window.parent.CKEDITOR.tools.callFunction(...)
header('Content-Type: text/html; charset=utf-8');
$url = addslashes($url);
$message = addslashes($message);
echo "<script>window.parent.CKEDITOR.tools.callFunction($ckFuncNum, '$url', '$message');</script>";
} else {
// TinyMCE / стандартный JSON-ответ
header('Content-Type: application/json');
if ($success) {
echo json_encode(array('location' => $url));
} else {
echo json_encode(array('error' => $message));
}
}
exit();
}
if (!$_SESSION['superadmin']) {
respond(false, 'Доступ запрещён');
}
// CKEditor отправляет файл в поле "upload", TinyMCE — в "file"
$file = null;
if (isset($_FILES['upload'])) $file = $_FILES['upload'];
elseif (isset($_FILES['file'])) $file = $_FILES['file'];
if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
respond(false, 'Ошибка загрузки файла');
}
$maxSize = 5 * 1024 * 1024; // 5 MB
if ($file['size'] > $maxSize) {
respond(false, 'Файл слишком большой (макс. 5 MB)');
}
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (!in_array($ext, array('jpg', 'jpeg', 'png', 'webp', 'gif'))) {
respond(false, 'Недопустимый тип файла');
}
if (@getimagesize($file['tmp_name']) === false) {
respond(false, 'Файл не является изображением');
}
$dir = $_SERVER['DOCUMENT_ROOT'] . '/images/articles/';
if (!is_dir($dir)) mkdir($dir, 0755, true);
$filename = 'art-upload-' . time() . '-' . mt_rand(1000, 9999) . '.' . $ext;
$dest = $dir . $filename;
if (!move_uploaded_file($file['tmp_name'], $dest)) {
respond(false, 'Не удалось сохранить файл');
}
respond(true, '', '/images/articles/' . $filename);

View File

@ -0,0 +1,50 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$result = ""; $result_photos = "";
for($i=0;$i<count($_FILES['blockPhoto']['name']);$i++)
{
if($_FILES['blockPhoto']['error'][$i] == 0) {
$ext = strtolower(pathinfo($_FILES['blockPhoto']['name'][$i], PATHINFO_EXTENSION));
$name = md5($_FILES['blockPhoto']['tmp_name'][$i].time()).".".$ext;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images");
}
$one = mb_substr($name,0,1);
if(! is_dir($_SERVER['DOCUMENT_ROOT']."/block_images/$one")) {
mkdir($_SERVER['DOCUMENT_ROOT']."/block_images/$one");
}
$two = mb_substr($name,1,1);
if(! is_dir($_SERVER['DOCUMENT_ROOT']."/block_images/$one/$two")) {
mkdir($_SERVER['DOCUMENT_ROOT']."/block_images/$one/$two");
}
$three = mb_substr($name,3,1);
if(! is_dir($_SERVER['DOCUMENT_ROOT']."/block_images/$one/$two/$three")) {
mkdir($_SERVER['DOCUMENT_ROOT']."/block_images/$one/$two/$three");
}
$new_path = "$one/$two/$three/$name";
$photo="/block_images/".$new_path;
move_uploaded_file($_FILES['blockPhoto']['tmp_name'][$i],$_SERVER['DOCUMENT_ROOT'].$photo);
$image = BlockImage::createImage($_POST['blockId'], $photo);
$result_photos .= "<div class=\'col-md-1 del_photo\' style=\'margin-bottom: 7px;background:url(http://" . $_SERVER['SERVER_NAME'] . "$photo) no-repeat;background-size:cover;background-position:center;\'><div class=\'deleteBlockImage\' data-id=\'" .$image->id . "\' style=\'background-image: url(/images/del_Icon.png); width: 37px; height: 48px\'></div></div>";
} else {
$result .= "Превышен размер файла ".$_FILES['blockPhoto']['name'][$i];
}
}
?>
<script>
if(parent.document.getElementById('block-images-container'))
parent.document.getElementById('block-images-container').style.backgroundImage='';
parent.document.getElementById('image-block-result').innerHTML+='<?php echo $result_photos.$result; ?>';
parent.document.getElementById('block-images-form').target = '';
parent.document.getElementById('block-images-form').action = '';
</script>

View File

@ -0,0 +1,77 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$result = ""; $result_photos = ""; $mdate = "";
for ($i=0; $i<count($_FILES['blockProgressPhoto']['name']); $i++) {
if ($_FILES['blockProgressPhoto']['error'][$i] == 0) {
$ext = strtolower(pathinfo($_FILES['blockProgressPhoto']['name'][$i], PATHINFO_EXTENSION));
$name = md5($_FILES['blockProgressPhoto']['tmp_name'][$i].time()).".".$ext;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images");
}
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images/progress")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images/progress");
}
$mdate_mon = substr($_POST['mdate'], 0, 2);
$mdate_year = substr($_POST['mdate'], 3, 4);
$new_date = $mdate_year."-".$mdate_mon."-01";
$mondate = "date-".$_POST['mdate'];
$photo="/block_images/progress/".$name;
move_uploaded_file($_FILES['blockProgressPhoto']['tmp_name'][$i],$_SERVER['DOCUMENT_ROOT'].$photo);
$image = BlockImage::createImage($_POST['blockId'], $photo, 2, $new_date );
$result_photos .= "<div class=\'col-md-1 del_photo\' style=\'margin-bottom: 7px;background:url(http://" . $_SERVER['SERVER_NAME'] . "$photo) no-repeat;background-size:cover;background-position:center;\'><div class=\'deleteBlockImage\' data-id=\'" .$image->id . "\' style=\'background-image: url(/images/del_Icon.png); width: 37px; height: 48px\'></div></div>";
} else {
$result .= "Превышен размер файла ".$_FILES['blockProgressPhoto']['name'][$i];
}
}
?>
<script>
w = "<?php echo $new_date ?>";
console.log(w);
Months = {
"01": "январь",
"02": "февраль",
"03": "март",
"04": "апрель",
"05": "май",
"06": "июнь",
"07": "июль",
"08": "август",
"09": "сентябрь",
"10": "октябрь",
"11": "ноябрь",
"12": "декабрь"
};
mdate = "<?php echo $_POST['mdate'] ?>";
mondate_mon = mdate.substr(0, 2);
mondate_year = mdate.substr(3, 4);
mondate = "<?php echo $mondate ?>";
month_wrap = parent.document.getElementById("<?php echo $mondate ?>");
if (month_wrap) {
month_images = month_wrap.getElementsByClassName('month_images')[0];
month_images.innerHTML+='<?php echo $result_photos.$result; ?>';
} else {
months_wrapper = parent.document.getElementById("months_wrapper");
months_wrapper.innerHTML+="<div class=\'month_wrap\' id=\'date-"+mdate+"\'><div class=\'month_ttl\'>"+Months[mondate_mon]+" "+mondate_year+"</div><div class=\'month_images\'>"+"<?php echo $result_photos.$result; ?>"+"</div><div class=\'clear\'></div>";
}
if(parent.document.getElementById('block-progress-images-container'))
parent.document.getElementById('block-progress-images-container').style.backgroundImage='';
//parent.document.getElementById('image-block-progress-result').innerHTML+='<?php //echo $result_photos.$result; ?>//';
parent.document.getElementById('block-progress-images-form').target = '';
parent.document.getElementById('block-progress-images-form').action = '';
</script>

View File

@ -0,0 +1,40 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$result = ""; $result_photos = "";
for ($i=0; $i<count($_FILES['blockRealPhoto']['name']); $i++) {
if ($_FILES['blockRealPhoto']['error'][$i] == 0) {
$ext = strtolower(pathinfo($_FILES['blockRealPhoto']['name'][$i], PATHINFO_EXTENSION));
$name = md5($_FILES['blockRealPhoto']['tmp_name'][$i].time()).".".$ext;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images");
}
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images/real")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images/real");
}
// $photo="/block_images/".$new_path;
$photo="/block_images/real/".$name;
move_uploaded_file($_FILES['blockRealPhoto']['tmp_name'][$i],$_SERVER['DOCUMENT_ROOT'].$photo);
$image = BlockImage::createImage($_POST['blockId'], $photo, 1);
$result_photos .= "<div class=\'col-md-1 del_photo\' style=\'margin-bottom: 7px;background:url(http://" . $_SERVER['SERVER_NAME'] . "$photo) no-repeat;background-size:cover;background-position:center;\'><div class=\'deleteBlockImage\' data-id=\'" .$image->id . "\' style=\'background-image: url(/images/del_Icon.png); width: 37px; height: 48px\'></div></div>";
} else {
$result .= "Превышен размер файла ".$_FILES['blockRealPhoto']['name'][$i];
}
}
?>
<script>
if(parent.document.getElementById('block-real-images-container'))
parent.document.getElementById('block-real-images-container').style.backgroundImage='';
parent.document.getElementById('image-block-real-result').innerHTML+='<?php echo $result_photos.$result; ?>';
parent.document.getElementById('block-real-images-form').target = '';
parent.document.getElementById('block-real-images-form').action = '';
</script>

View File

@ -0,0 +1,47 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$result = ""; $result_photos = ""; $video_id = 0;
if(isset($_POST['video_id'])) $video_id = (int)$_POST['video_id'];
for ($i=0; $i<count($_FILES['blockVideoPhoto']['name']); $i++) {
if ($_FILES['blockVideoPhoto']['error'][$i] == 0) {
$ext = strtolower(pathinfo($_FILES['blockVideoPhoto']['name'][$i], PATHINFO_EXTENSION));
$name = md5($_FILES['blockVideoPhoto']['tmp_name'][$i].time()).".".$ext;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images");
}
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images/video/")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images/video");
}
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/block_images/video/".$video_id)) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/block_images/video/".$video_id);
}
$photo="/block_images/video/".$video_id."/".$name;
move_uploaded_file($_FILES['blockVideoPhoto']['tmp_name'][$i],$_SERVER['DOCUMENT_ROOT'].$photo);
$image = BlockImage::createImage($_POST['blockId'], $photo, 10, NULL, $video_id);
$result_photos .= "<div class=\'col-md-1 del_photo\' style=\'margin-bottom: 7px;margin-left: 7px;background:url(http://" . $_SERVER['SERVER_NAME'] . "$photo) no-repeat;background-size:cover;background-position:center;\'><div class=\'deleteBlockImage\' data-id=\'" .$image->id . "\' style=\'background-image: url(/images/del_Icon.png); width: 37px; height: 48px\'></div></div>";
} else {
$result .= "Превышен размер файла ".$_FILES['blockVideoPhoto']['name'][$i];
}
}
?>
<script>
var id = parseInt("<?=$video_id?>");
if(parent.document.getElementById('block-video-images-container_'+id))
parent.document.getElementById('block-video-images-container_'+id).style.backgroundImage='';
parent.document.getElementById('image-block-video-result_'+id).innerHTML+='<?php echo $result_photos.$result; ?>';
parent.document.getElementById('block-video-images-form_'+id).target = '';
parent.document.getElementById('block-video-images-form_'+id).action = '';
</script>

122
admin/antiznakAdmin.php Normal file
View File

@ -0,0 +1,122 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<link rel="stylesheet" href="/css/vue-select.css?v=21">
<style>
.tr__color {
background-color: #f9f9f9;
}
</style>
<div id="antiznakTariffs">
<template v-if="is_show_tariffs">
<div class="main-title">
<h1>Тарифы для апи АнтиЗнак</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="jw__NB">
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>ID</th>
<th>Количество объектов</th>
<th>Цена</th>
<th></th>
</tr>
</thead>
<template v-if="!isEmpty(tariffs)">
<tbody>
<tr v-for="(tariff, index) in tariffs" :class="{'tr__color': index%2 == 0}">
<td>{{ tariff.id }}</td>
<td>{{ tariff.count }}</td>
<td>{{ tariff.price }}</td>
<td width="50"><a @click="edit_tariff(tariff.id)" title="Редактировать"><i class="ti-pencil"></i></a></td>
</tr>
</tbody>
</template>
</table>
</div>
</div>
<div class="clear"></div>
</div>
</template>
<template v-if="is_show_edit_tariff">
<div class="main-title">
<h1>Редактирование тарифа апи АнтиЗнак</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="new-object">
<div>
<div class="new-object__form">
<div v-if="error_edit" class="block" style="border-bottom: none; color: red;"></div>
<div class="block">
<div class="line">
<div class="label">
<span>Количество:</span>
</div>
<div class="inputs">
<input type="number" class="text" name="count" style="width: 75%;" v-model="edit_count">
</div>
</div>
<div class="line">
<div class="label">
<span>Цена:</span>
</div>
<div class="inputs">
<input type="number" class="text" name="price" style="width: 75%;" v-model="edit_price">
</div>
</div>
<div class="line" style="text-align: right">
<button type="submit" @click="save_edit(edit_id)" class="medium-button">Сохранить</button>
<a href="javascript:{}" @click="close_edit" class="cancel-button medium-button">Закрыть</a>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</template>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="/js/vue.min.js"></script>
<!--<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>-->
<script src="/js/vue-select.js"></script>
<script src="/js/admin/antiznak-tariffs.js?<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/js/admin/antiznak-tariffs.js')?>"></script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

153
admin/antiznakPay.php Normal file
View File

@ -0,0 +1,153 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<link rel="stylesheet" href="/css/vue-select.css?v=21">
<style>
.tr__color {
background-color: #f9f9f9;
}
</style>
<div id="antiznak_pay">
<div class="main-title">
<h1>Оплата АнтиЗнак</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<?php
$sqlCount = "SELECT count(id) FROM antiznak_user_request";
$rezCount = mysql_query($sqlCount);
$count = mysql_result($rezCount, 0);
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$all_pages = ceil($count / $num_on_page);
if ($count > 0) {
$sql = "select * from antiznak_user_request order by created_at DESC LIMIT $from, $num_on_page";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
?>
<div class="jw__NB">
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>Дата запроса</th>
<th>ФИО пользователя</th>
<th>Телефон пользователя</th>
<th>Email пользователя</th>
<th>Количество выписок</th>
<th>Цена</th>
<th>Оплачено</th>
<th></th>
<th>Остаток</th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
while($request = mysql_fetch_array($rez)) {
$sqlUser = new User();
$sqlUser->get($request['user_id']);
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . date_format(date_create($request['created_at']), 'd.m.Y H:i:s') . '</td>';
echo '<td>' . ($sqlUser->agency ? ($sqlUser->agency_name . "<br/> (" . trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name) .")") : trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name)) . '</td>';
echo '<td>' . $sqlUser->phone . '</td>';
echo '<td>' . $sqlUser->email . '</td>';
echo '<td>' . $request['count'] . '</td>';
echo '<td>' . $request['price'] . '</td>';
echo '<td>' . ($request['paid'] == 0 ? "Нет" : "Да") . '</td>';
if ($request['paid'] == 0) {
echo '<td width="50"><a href="javascript:{}" onclick="confirmPay(' . $request['id'] . ');">Подтвердить оплату</a></td>';
} else {
echo '<td width="50">&nbsp;</td>';
}
echo '<td>'.$sqlUser->antiznak_request_count.'</td>';
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul></div>';
?>
</div>
<? } ?>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Заказов не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="/js/vue.min.js"></script>
<!--<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>-->
<script src="/js/vue-select.js"></script>
<script src="/js/admin/antiznak-tariffs.js?<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/js/admin/antiznak-tariffs.js')?>"></script>
<script type="text/javascript">
function confirmPay(requestId) {
axios.post('/ajax/vue_ajax/antiznak_axios.php', {
request: 'confirm_request_pay',
id: requestId,
}, )
.then((response) => {
window.location.reload(true);
})
.catch(function(error) {
console.log(error);
});
}
</script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

336
admin/article-edit.php Normal file
View File

@ -0,0 +1,336 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!$_SESSION['superadmin']) { header("location:/index.php"); die("Доступ запрещён!"); }
$get = clearInputData($_GET);
$id = isset($get['id']) ? (int)$get['id'] : 0;
$article = null;
$err = '';
$success = '';
$errorMessages = array(
'empty' => 'Заполните заголовок и слаг',
'empty_slug' => 'Слаг не может быть пустым',
'slug_exists' => 'Статья с таким слагом уже существует',
'slug_file_conflict' => 'Слаг конфликтует с существующим файлом в корне сайта. Выберите другой.',
'image_too_large' => 'Изображение слишком большое (макс. 5 MB)',
);
if (!empty($_GET['err']) && isset($errorMessages[$_GET['err']])) {
$err = $errorMessages[$_GET['err']];
}
if (!empty($_GET['saved'])) {
$success = 'Статья сохранена';
}
if ($id > 0) {
$article = Article::getById($id);
if (!$article) {
header("location:/admin/articles.php");
exit();
}
}
// Если есть черновик в сессии (после ошибки сохранения) — используем его как источник
$draft = null;
if (!empty($err) && !empty($_SESSION['article_form_draft'])) {
$draft = $_SESSION['article_form_draft'];
unset($_SESSION['article_form_draft']); // одноразово
}
// Значения для формы: приоритет — черновик из сессии, потом БД, потом дефолты
$src = $draft ? $draft : $article;
$f_title = Article::val($src, 'title', '');
$f_page_title = Article::val($src, 'page_title', '');
$f_description = Article::val($src, 'description', '');
$f_slug = Article::val($src, 'slug', '');
$f_date_c = Article::val($src, 'date_created', date('Y-m-d'));
$f_date_u = Article::val($src, 'date_updated', date('Y-m-d'));
$f_time = Article::val($src, 'reading_time', 5);
$f_sort = Article::val($src, 'sort_order', 0);
$f_author_n = Article::val($src, 'author_name', 'Станислав Дмитриев');
$f_author_j = Article::val($src, 'author_job', 'руководитель JoyWork');
$f_author_i = Article::val($src, 'author_img', '/images/articles/rukofodJW.png');
$f_image = Article::val($src, 'image', '');
$f_content = Article::val($src, 'content', '');
if ($draft) {
$f_published = !empty($draft['published']);
} else {
$f_published = (!$article || !empty($article['published']));
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title" style="display:flex; align-items:center; justify-content:space-between;">
<div style="display:flex; align-items:center; gap:15px;">
<a href="/admin/articles.php" style="color:#666; text-decoration:none; font-size:14px;"> Назад к списку</a>
<h1 style="margin:0;"><?= $id ? 'Редактирование статьи' : 'Новая статья' ?></h1>
</div>
<div style="display:flex; gap:10px;">
<?php if ($id): ?>
<a href="/article.php?id=<?= $id ?>" target="_blank" class="medium-button" style="background:#fff; border:1px solid #ccc; color:#333;">Предпросмотр </a>
<?php endif; ?>
<button type="submit" form="article-form" class="medium-button">Сохранить</button>
</div>
</div>
<?php if ($err): ?>
<div style="margin:10px 20px; padding:12px; background:#ffebee; color:#c62828; border-radius:4px;"><?= htmlspecialchars($err) ?></div>
<?php endif; ?>
<?php if ($success): ?>
<div style="margin:10px 20px; padding:12px; background:#e8f5e9; color:#2e7d32; border-radius:4px;"><?= htmlspecialchars($success) ?></div>
<?php endif; ?>
<div class="users fr__users" style="margin-right:20px;">
<form method="post" enctype="multipart/form-data" id="article-form" action="/admin/ajax/saveArticle.php">
<?php if ($id): ?>
<input type="hidden" name="id" value="<?= $id ?>">
<?php endif; ?>
<div class="new-object">
<div class="new-object__form">
<div class="block">
<div class="line">
<div class="label"><span>Заголовок H1:</span></div>
<div class="inputs">
<input type="text" class="text" name="title" id="field-title" style="width:100%;"
value="<?= htmlspecialchars($f_title) ?>"
placeholder="Заголовок статьи (H1)" required>
</div>
</div>
<div class="line">
<div class="label"><span>Мета-заголовок:</span></div>
<div class="inputs">
<input type="text" class="text" name="page_title" style="width:100%;"
value="<?= htmlspecialchars($f_page_title) ?>"
placeholder="Заголовок для SEO (title тег)">
</div>
</div>
<div class="line" style="align-items:flex-start;">
<div class="label"><span>Описание:</span></div>
<div class="inputs">
<textarea name="description" class="text" style="width:100%; min-height:70px;"
placeholder="Краткое описание для SEO (meta description) и для карточек на /blog.php"><?= htmlspecialchars($f_description) ?></textarea>
</div>
</div>
<div class="line">
<div class="label"><span>Слаг (URL):</span></div>
<div class="inputs" style="display:flex; gap:8px; align-items:center;">
<input type="text" class="text" name="slug" id="field-slug" style="flex:1;"
value="<?= htmlspecialchars($f_slug) ?>"
placeholder="url-stranicy-bez-rasshireniya" required>
<span style="color:#999; font-size:12px;">joywork.ru/<span id="slug-preview"><?= htmlspecialchars($f_slug) ?></span>.php</span>
</div>
</div>
</div>
<div class="block">
<div class="line">
<div class="label"><span>Дата создания:</span></div>
<div class="inputs">
<input type="date" class="text" name="date_created" style="width:160px;"
value="<?= htmlspecialchars($f_date_c) ?>">
</div>
</div>
<div class="line">
<div class="label"><span>Дата обновления:</span></div>
<div class="inputs">
<input type="date" class="text" name="date_updated" style="width:160px;"
value="<?= htmlspecialchars($f_date_u) ?>">
</div>
</div>
<div class="line">
<div class="label"><span>Время чтения (мин.):</span></div>
<div class="inputs">
<input type="number" class="text" name="reading_time" style="width:80px;" min="1" max="60"
value="<?= htmlspecialchars($f_time) ?>">
</div>
</div>
<div class="line">
<div class="label"><span>Опубликована:</span></div>
<div class="inputs">
<label style="display:flex; align-items:center; gap:8px; cursor:pointer;">
<input type="checkbox" name="published" value="1" <?= $f_published ? 'checked' : '' ?>>
<span>Показывать на сайте</span>
</label>
</div>
</div>
<div class="line">
<div class="label"><span>Порядок сортировки:</span></div>
<div class="inputs">
<input type="number" class="text" name="sort_order" style="width:80px;"
value="<?= htmlspecialchars($f_sort) ?>"
title="Больше = выше в списке">
</div>
</div>
</div>
<div class="block">
<div class="line">
<div class="label"><span>Имя автора:</span></div>
<div class="inputs">
<input type="text" class="text" name="author_name" style="width:280px;"
value="<?= htmlspecialchars($f_author_n) ?>">
</div>
</div>
<div class="line">
<div class="label"><span>Должность автора:</span></div>
<div class="inputs">
<input type="text" class="text" name="author_job" style="width:280px;"
value="<?= htmlspecialchars($f_author_j) ?>">
</div>
</div>
<div class="line">
<div class="label"><span>Фото автора (путь):</span></div>
<div class="inputs" style="display:flex; gap:10px; align-items:center;">
<input type="text" class="text" name="author_img" id="field-author-img" style="width:350px;"
value="<?= htmlspecialchars($f_author_i) ?>">
<?php if (!empty($f_author_i)): ?>
<img src="<?= htmlspecialchars($f_author_i) ?>" style="width:36px;height:36px;border-radius:50%;object-fit:cover;" alt="">
<?php endif; ?>
</div>
</div>
</div>
<div class="block">
<div class="line">
<div class="label"><span>Обложка статьи:</span></div>
<div class="inputs" style="display:flex; gap:15px; align-items:flex-start;">
<div>
<input type="file" name="image_file" id="image-file" accept="image/jpeg,image/png,image/webp" style="margin-bottom:6px;">
<br>
<span style="color:#999; font-size:12px;">или укажите путь вручную:</span><br>
<input type="text" class="text" name="image" id="field-image" style="width:350px; margin-top:4px;"
value="<?= htmlspecialchars($f_image) ?>"
placeholder="/images/articles/art-69.jpg">
</div>
<?php if (!empty($f_image)): ?>
<img id="image-preview" src="<?= htmlspecialchars($f_image) ?>"
style="max-width:160px; max-height:100px; border-radius:4px; object-fit:cover;" alt="">
<?php else: ?>
<img id="image-preview" src="" style="max-width:160px; max-height:100px; border-radius:4px; object-fit:cover; display:none;" alt="">
<?php endif; ?>
</div>
</div>
</div>
<div class="block" style="border-bottom:none; padding:15px 20px;">
<div style="font-weight:500; margin-bottom:10px;">Контент статьи:</div>
<textarea name="content" id="article-content" style="width:100%; min-height:400px;"><?= htmlspecialchars($f_content) ?></textarea>
</div>
</div>
</div>
<div style="padding:15px 20px; text-align:right; border-top:1px solid #eee;">
<button type="submit" class="medium-button">Сохранить статью</button>
</div>
</form>
</div>
<script src="/js/ckeditor/ckeditor.js"></script>
<script>
CKEDITOR.stylesSet.add('article_styles', [
{ name: 'Чек-лист (зелёные галочки)', element: 'ul', attributes: { 'class': 'check-list' } },
{ name: 'Подзаголовок H2', element: 'h2' },
{ name: 'Подзаголовок H3', element: 'h3' },
{ name: 'Выделенный блок', element: 'div', attributes: { 'class': 'highlight-block' }, styles: { 'background': '#f5f5f5', 'padding': '15px', 'border-left': '4px solid #29b13a' } }
]);
CKEDITOR.replace('article-content', {
height: 600,
language: 'ru',
allowedContent: true,
extraAllowedContent: 'script[*]; iframe[*]',
stylesSet: 'article_styles',
contentsCss: ['/css/article-editor.css?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"] . "/css/article-editor.css") ?>'],
bodyClass: 'c',
protectedSource: [
/<script[\s\S]*?<\/script>/gi
],
toolbarGroups: [
{ name: 'clipboard', groups: ['clipboard', 'undo'] },
{ name: 'editing', groups: ['find', 'selection'] },
{ name: 'basicstyles', groups: ['basicstyles', 'cleanup'] },
{ name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align'] },
{ name: 'links' },
{ name: 'insert' },
'/',
{ name: 'styles' },
{ name: 'colors' },
{ name: 'tools' },
{ name: 'document', groups: ['mode'] }
],
removeButtons: 'Save,NewPage,Form,Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,Language,Flash,Smiley,About,ShowBlocks',
filebrowserUploadUrl: '/admin/ajax/uploadArticleImage.php?ckeditor=1',
filebrowserUploadMethod: 'form',
// При вставке из Word/Google Docs — автоматически снимать inline-стили
// чтобы заголовки были чистыми <h2>текст</h2> без вложенных span/b
forcePasteAsPlainText: true
});
// CKEditor хранит данные в своём поле — синхронизируем textarea перед submit
document.getElementById('article-form').addEventListener('submit', function() {
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].updateElement();
}
});
document.getElementById('field-title').addEventListener('input', function() {
var slug = document.getElementById('field-slug').value;
if (!slug) {
var generated = makeSlug(this.value);
document.getElementById('field-slug').value = generated;
document.getElementById('slug-preview').textContent = generated;
}
});
document.getElementById('field-slug').addEventListener('input', function() {
document.getElementById('slug-preview').textContent = this.value;
});
document.getElementById('field-image').addEventListener('input', function() {
var preview = document.getElementById('image-preview');
if (this.value) {
preview.src = this.value;
preview.style.display = 'block';
} else {
preview.style.display = 'none';
}
});
document.getElementById('image-file').addEventListener('change', function() {
if (!this.files[0]) return;
var formData = new FormData();
formData.append('file', this.files[0]);
fetch('/admin/ajax/uploadArticleImage.php', { method: 'POST', body: formData })
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.location) {
document.getElementById('field-image').value = data.location;
var preview = document.getElementById('image-preview');
preview.src = data.location;
preview.style.display = 'block';
}
});
});
function makeSlug(str) {
var cyr = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
var lat = ['a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','cz','ch','sh','shh','','y','','e','yu','ya'];
str = str.toLowerCase();
var result = '';
for (var i = 0; i < str.length; i++) {
var idx = cyr.indexOf(str[i]);
if (idx >= 0) result += lat[idx];
else result += str[i];
}
return result.replace(/[^a-z0-9\s-]/g, '').replace(/[\s-]+/g, '-').replace(/^-+|-+$/g, '');
}
</script>
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php"); ?>

92
admin/articles.php Normal file
View File

@ -0,0 +1,92 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!$_SESSION['superadmin']) { header("location:/index.php"); die("Доступ запрещён!"); }
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
$articles = Article::getAll();
?>
<div class="main-title">
<a href="/admin/article-edit.php" class="medium-button" style="float: right;">+ Новая статья</a>
<h1>Статьи</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<table class="table" style="width:100%; border-collapse:collapse;">
<thead>
<tr style="background:#f5f5f5; border-bottom:2px solid #ddd;">
<th style="padding:10px 8px; text-align:left; width:60px;">Фото</th>
<th style="padding:10px 8px; text-align:left;">Заголовок</th>
<th style="padding:10px 8px; text-align:left; width:120px;">Дата</th>
<th style="padding:10px 8px; text-align:left; width:220px;">Слаг</th>
<th style="padding:10px 8px; text-align:center; width:90px;">Статус</th>
<th style="padding:10px 8px; text-align:right; width:240px;">Действия</th>
</tr>
</thead>
<tbody>
<?php if (empty($articles)): ?>
<tr>
<td colspan="6" style="padding:30px; text-align:center; color:#999;">Статей пока нет</td>
</tr>
<?php else: ?>
<?php foreach ($articles as $a): ?>
<tr style="border-bottom:1px solid #eee;" class="article-row" data-id="<?= $a['id'] ?>">
<td style="padding:8px;">
<?php if ($a['image']): ?>
<img src="<?= htmlspecialchars($a['image']) ?>" style="width:50px;height:35px;object-fit:cover;border-radius:3px;" alt="">
<?php else: ?>
<div style="width:50px;height:35px;background:#eee;border-radius:3px;"></div>
<?php endif; ?>
</td>
<td style="padding:8px;">
<a href="/admin/article-edit.php?id=<?= $a['id'] ?>" style="color:#333; font-weight:500;">
<?= htmlspecialchars($a['title']) ?>
</a>
</td>
<td style="padding:8px; color:#666; font-size:13px;"><?= htmlspecialchars($a['date_created']) ?></td>
<td style="padding:8px; color:#999; font-size:12px; font-family:monospace;"><?= htmlspecialchars($a['slug']) ?></td>
<td style="padding:8px; text-align:center;">
<?php if ($a['published']): ?>
<span style="background:#e8f5e9;color:#2e7d32;padding:2px 8px;border-radius:10px;font-size:12px;">Опубл.</span>
<?php else: ?>
<span style="background:#fff3e0;color:#e65100;padding:2px 8px;border-radius:10px;font-size:12px;">Черновик</span>
<?php endif; ?>
</td>
<td style="padding:8px; text-align:right; white-space:nowrap;">
<a href="/admin/article-edit.php?id=<?= $a['id'] ?>"
style="display:inline-block; padding:6px 14px; background:#fff; border:1px solid #ccc; color:#333; border-radius:4px; text-decoration:none; font-size:13px; margin-right:8px;">Редактировать</a>
<button class="btn-delete-article" data-id="<?= $a['id'] ?>"
style="display:inline-block; padding:6px 14px; background:#f44336; color:#fff; border:none; border-radius:4px; cursor:pointer; font-size:13px;">Удалить</button>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
<script>
document.querySelectorAll('.btn-delete-article').forEach(function(btn) {
btn.addEventListener('click', function() {
if (!confirm('Удалить статью? Это действие нельзя отменить.')) return;
var id = this.getAttribute('data-id');
fetch('/admin/ajax/deleteArticle.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'id=' + id
})
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.success) {
document.querySelector('.article-row[data-id="' + id + '"]').remove();
} else {
alert('Ошибка: ' + data.error);
}
});
});
});
</script>
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php"); ?>

178
admin/bankEdit.php Normal file
View File

@ -0,0 +1,178 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Bank.php';
if (isset($_POST['add_bank'])) {
$err = "";
$post = clearInputData($_POST);
if ($_FILES['logo']['name']) {
if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) {
list($a, $ext) = explode("/", $_FILES['logo']['type']);
if ($ext == "pjpeg") {
$ext = "jpeg";
}
$ext = mb_strtolower($ext);
if ($ext == "jpeg" or $ext == "jpg" or $ext == "png") {
$name = md5($_FILES['logo']['tmp_name'] . time()) . "." . $ext;
$photo = $_SERVER['DOCUMENT_ROOT'] . "/photos/bank/" . $name;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/bank")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/bank");
}
if (move_uploaded_file($_FILES['logo']['tmp_name'], $photo)) {
$size = getimagesize($photo);
if ($size[0] > 272) {
resize_img(272, $photo, $photo);
}
$post['hidden_logo'] = $name;
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Неверный тип файла. Допустимые типы - jpg или png.";
}
} else {
if ($_FILES['logo']['error'] == UPLOAD_ERR_FORM_SIZE) {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Превышен размер файла. Допустимый размер 1-2 Mb.";
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Ошибка при загрузке: ".$_FILES['logo']['error'];
}
}
}
if (isset($post['id'])) {
if (strlen($err) == 0) {
$bankToSave = new Bank();
$bankToSave->newRecord = false;
$bankToSave->name = $post['hidden_name'];
$bankToSave->id = $post['id'];
$bankToSave->logo = $post['hidden_logo'];
$bankToSave->save();
header("location:/admin/banks.php");
exit();
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Не найден идентификатор застройщика в запросе.";
}
}
$get = clearInputData($_GET);
if (!isset($get['id'])) {
header("location:/admin/banks.php");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
if (!isset($post) && $get['id'] > 0) {
$bank = Bank::findOne($get['id']);
}
?>
<div class="main-title">
<h1>Редактирование банка</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="new-object">
<form method="post" enctype="multipart/form-data" id="upload-form">
<div class="new-object__form">
<?php if (isset($err) && strlen($err) > 0) { ?>
<div class="block" style="border-bottom: none; color: red;"><?php echo $err; ?></div>
<?php } ?>
<div class="block">
<div class="line">
<div class="label">
<span>Название:</span>
</div>
<div class="inputs">
<input type="text" class="text" name="name" disabled="disabled" style="width: 75%;"
value="<? if (isset($post)) echo $post['hidden_name'];
if (isset($bank)) echo $bank->name; ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Логотип:</span>
</div>
<div class="inputs">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000"/>
<input style="border: 1px solid white;" type="file" accept="image/jpeg,image/png"
class="text" name="logo"/>
<div class="text_comment" style="margin-left: 123px; font-size: 12px;">
<p>JPG, PNG (квадрат 272х272 пиксела)</p>
<div id="upload-result"></div>
</div>
<div <?php if(isset($bank) && $bank->logo) echo "style='margin-left: 123px;margin-top: 10px;height: 272px; width: 272px; background:url(/photos/bank/".$bank->logo.") no-repeat'"; ?>>
</div>
</div>
</div>
<div class="line" style="text-align: right">
<button type="submit" class="medium-button">Сохранить</button>
<a href="/admin/banks.php" class="cancel-button medium-button">Закрыть</a>
</div>
<input type="hidden" name="add_bank" value="1">
<input type="hidden" name="hidden_logo" value="<?php if (isset($bank)) {
echo $bank->logo;
} else {
if (isset($post)) {
echo $post['hidden_logo'];
}
} ?>">
<input type="hidden" name="hidden_name" value="<?php if (isset($bank)) {
echo $bank->name;
} else {
if (isset($post)) {
echo $post['hidden_name'];
}
} ?>">
<input type="hidden" name="id" value="<?php if (isset($bank)) {
echo $bank->id;
} else {
if (isset($post)) {
echo $post['id'];
}
} ?>">
<div class="clear"></div>
</div>
</div>
</form>
</div>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

156
admin/banks.php Normal file
View File

@ -0,0 +1,156 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Bank.php';
?>
<div class="main-title">
<h1>Банки</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="head-filter__top">
<div class="top-line">
<div class="head-filter-search">
<div class="form-search">
<form>
<input type="search" name="search" class="text" placeholder="Название"
value="<?php if (isset($_GET['search'])) {
echo $_GET['search'];
} ?>">
<span class="search-icon">
<i class="ti-search"></i>
</span>
</form>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<?php
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$searchName = null;
$url_params = '';
if (isset($_GET['search'])) {
$searchName = $_GET['search'];
if (strlen($url_params) > 0) {
$url_params = $url_params . "&";
}
$url_params = $url_params . "search=" . $_GET['search'];
}
$banksCount = Bank::count($searchName);
$all_pages = ceil($banksCount / $num_on_page);
if ($banksCount > 0) {
$banksList = Bank::search($searchName, $from, $num_on_page);
?>
<div class="jw__NB">
<?php
$numFrom = $from + 1;
$numTo = (($from + $num_on_page) >= $banksCount) ? $banksCount : ($from + $num_on_page);
echo '<div style="margin: 13px 35px; font-weight: bold;">Показаны записи ' . $numFrom . '-' . $numTo . ' из ' . $banksCount . '</div>'
?>
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>ID</th>
<th>Название банка</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
foreach ($banksList as $bank) {
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . $bank->id . '</td>';
echo '<td>' . $bank->name . '</td>';
echo '<td width="50"><a href="/admin/bankEdit.php?id=' . $bank->id . '" title="Редактировать"><i class="ti-pencil"></i></a></td>';
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul></div>';
?>
</div>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Банков не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

3075
admin/blockEdit.php Normal file

File diff suppressed because it is too large Load Diff

194
admin/blocks.php Normal file
View File

@ -0,0 +1,194 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockImage.php';
$importerService = new ImporterService();
$willBeRun = $importerService->isForceFlatshopImportStart();
$isImporterActive = $importerService->isFlatshopActive();
if (isset($_GET['run']) && $_GET['run'] == 1) {
$importerService->setForceFlatshopImport(1);
header("location:/admin/blocks.php");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title">
<h1>Комплексы</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="head-filter__top">
<div class="top-line">
<div class="head-filter-search">
<div class="form-search">
<form>
<input type="search" name="search" class="text" placeholder="Название"
value="<?php if (isset($_GET['search'])) {
echo $_GET['search'];
} ?>">
<span class="search-icon">
<i class="ti-search"></i>
</span>
</form>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<?php
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$searchName = null;
$url_params = '';
if (isset($_GET['search'])) {
$searchName = $_GET['search'];
if (strlen($url_params) > 0) {
$url_params = $url_params . "&";
}
$url_params = $url_params . "search=" . $_GET['search'];
}
$blocksCount = Block::count($searchName);
$all_pages = ceil($blocksCount / $num_on_page);
if ($blocksCount > 0) {
$blocksList = Block::search($searchName, $from, $num_on_page);
?>
<div class="jw__NB">
<?php
$numFrom = $from + 1;
$numTo = (($from + $num_on_page) >= $blocksCount) ? $blocksCount : ($from + $num_on_page);
echo '<div style="margin: 13px 35px; font-weight: bold;"><span style="float: left; line-height: 2;">Показаны записи ' . $numFrom . '-' . $numTo . ' из ' . $blocksCount . '</span>';
if ($willBeRun && !$isImporterActive) {
echo '<span style = "color: red;float: right;" >Обновление с Flatshop будет запущено в ближайшие 5 минут.</span>';
}
if ($isImporterActive) {
echo '<span style="color: red;float: right;">В данный момент работает обновление с Flatshop.</span>';
}
if (!$willBeRun && !$isImporterActive) {
echo '<a style="float: right;" href="/admin/blocks.php?run=1" class="medium-button allFromFlatShop">Обновить все с FlatShop</a>';
}
echo '</div>';
?>
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>ID</th>
<th>Название</th>
<th>Комиссия (значение у блока)</th>
<th>Комиссия (используемая в расчетах)</th>
<th>Количество апартаментов</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
foreach ($blocksList as $block) {
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . $block->id . '</td>';
echo '<td><a href="/admin/blockEdit.php?id=' . $block->id . '" title="Редактировать">' . $block->name . '</a></td>';
echo '<td>' . number_format($block->fee, 2, ',', ' ') . '</td>';
echo '<td>' . number_format($block->getCalculatedFee(), 2, ',', ' ') . '</td>';
echo '<td>' . $block->apartmentsCount . '</td>';
echo '<td>';
echo '<a href="javascript:void(0);" data-id="'. $block->id . '" class="update-block-from-fs">Обновить с FlatShop</a>';
echo '</td>';
echo '<td style="width: 26px; height: 26px;"><div id="action_loader_' . $block->id . '" style="width: 26px; height:26px; background:url(/images/ajax_preloader.gif) no-repeat center center; background-size: 26px 26px; display: none;"></div></td>';
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul></div>';
?>
</div>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Комплексов не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<script src="/js/admin-edit.js?t=<?php echo ceil(microtime(true)); ?>"></script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

408
admin/builderEdit.php Normal file
View File

@ -0,0 +1,408 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
if (isset($_POST['add_builder'])) {
$err = "";
$post = clearInputData($_POST);
if ($_FILES['logo']['name']) {
if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) {
list($a, $ext) = explode("/", $_FILES['logo']['type']);
if ($ext == "pjpeg") {
$ext = "jpeg";
}
$ext = mb_strtolower($ext);
if ($ext == "jpeg" or $ext == "jpg" or $ext == "png") {
$name = md5($_FILES['logo']['tmp_name'] . time()) . "." . $ext;
$photo = $_SERVER['DOCUMENT_ROOT'] . "/photos/builder/" . $name;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/builder")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/builder");
}
if (move_uploaded_file($_FILES['logo']['tmp_name'], $photo)) {
$size = getimagesize($photo);
if ($size[0] > 272) {
resize_img(272, $photo, $photo);
}
$post['hidden_logo'] = $name;
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Неверный тип файла. Допустимые типы - jpg или png.";
}
} else {
if ($_FILES['logo']['error'] == UPLOAD_ERR_FORM_SIZE) {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Превышен размер файла. Допустимый размер 1-2 Mb.";
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Ошибка при загрузке: ".$_FILES['logo']['error'];
}
}
}
if (isset($post['id'])) {
if (strlen($err) == 0) {
$builderToSave = new Builder();
$builderToSave->newRecord = false;
$builderToSave->name = $post['hidden_name'];
$builderToSave->id = $post['id'];
$builderToSave->fee = $post['fee'];
$builderToSave->note = $post['note'];
$builderToSave->discount_fee = $post['discount_fee'];
$builderToSave->pay_period = $post['pay_period'];
$builderToSave->adv = $post['adv'];
$builderToSave->logo = $post['hidden_logo'];
$builderToSave->save();
header("location:/admin/builders.php");
exit();
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Не найден идентификатор застройщика в запросе.";
}
}
$get = clearInputData($_GET);
if (!isset($get['id'])) {
header("location:/admin/builders.php");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
if (!isset($post) && $get['id'] > 0) {
$builder = Builder::findOne($get['id']);
}
?>
<div class="main-title">
<h1>Редактирование застройщика</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="new-object">
<form method="post" enctype="multipart/form-data" id="upload-form">
<div class="new-object__form">
<?php if (isset($err) && strlen($err) > 0) { ?>
<div class="block" style="border-bottom: none; color: red;"><?php echo $err; ?></div>
<?php } ?>
<div class="block">
<div class="line">
<div class="label">
<span>Название:</span>
</div>
<div class="inputs">
<input type="text" class="text" name="name" disabled="disabled" style="width: 75%;"
value="<? if (isset($post)) echo $post['hidden_name'];
if (isset($builder)) echo $builder->name; ?>">
</div>
</div>
<div class="line">
<div class="label" style="width: 230px;">
<span>Комиссия:</span>
</div>
<div class="inputs">
<input type="number" step="0.1" min="0" max="100" class="text" name="fee"
value="<? if (isset($post)) echo $post['fee'];
if (isset($builder)) echo $builder->fee; ?>">
</div>
</div>
<div class="line">
<div class="label" style="width: 230px;">
<span>Комиссия переуступок:</span>
</div>
<div class="inputs">
<input type="number" step="0.1" min="0" max="100" class="text" name="discount_fee"
value="<? if (isset($post)) echo $post['discount_fee'];
if (isset($builder)) echo $builder->discount_fee; ?>">
</div>
</div>
<div class="line">
<div class="label" style="width: 230px;">
<span>Срок выплаты комиссионных застройщиком:</span>
</div>
<div class="inputs">
<input type="text" class="text" name="pay_period"
value="<? if (isset($post)) echo $post['pay_period'];
if (isset($builder)) echo $builder->pay_period; ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Заметка:</span>
</div>
<div class="inputs">
<textarea name="note" style="width: 75%;"><? if (isset($post)) echo $post['note'];
if (isset($builder) && $builder->note) { echo str_replace("<br>", "\n", $builder->note); } ?></textarea>
</div>
</div>
<div class="line">
<div class="label">
<span>Реклама:</span>
</div>
<div class="inputs">
<textarea name="adv" style="width: 75%;"><? if (isset($post)) echo $post['adv'];
if (isset($builder)) echo $builder->adv; ?></textarea>
</div>
</div>
<div class="line">
<div class="label">
<span>Логотип:</span>
</div>
<div class="inputs">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000"/>
<input style="border: 1px solid white;" type="file" accept="image/jpeg,image/png"
class="text" name="logo"/>
<div class="text_comment" style="margin-left: 123px; font-size: 12px;">
<p>JPG, PNG (квадрат 272х272 пиксела)</p>
<div id="upload-result"></div>
</div>
<div <?php if(isset($builder) && $builder->logo) echo "style='margin-left: 123px;margin-top: 10px;height: 272px; width: 272px; background:url(/photos/builder/".$builder->logo.") no-repeat'"; ?>>
</div>
</div>
</div>
<div class="line" style="text-align: right">
<button type="submit" class="medium-button">Сохранить</button>
<a href="/admin/builders.php" class="cancel-button medium-button">Закрыть</a>
</div>
<input type="hidden" name="add_builder" value="1">
<input type="hidden" name="hidden_logo" value="<?php if (isset($builder)) {
echo $builder->logo;
} else {
if (isset($post)) {
echo $post['hidden_logo'];
}
} ?>">
<input type="hidden" name="hidden_name" value="<?php if (isset($builder)) {
echo $builder->name;
} else {
if (isset($post)) {
echo $post['hidden_name'];
}
} ?>">
<input type="hidden" name="id" value="<?php if (isset($builder)) {
echo $builder->id;
} else {
if (isset($post)) {
echo $post['id'];
}
} ?>">
<div class="clear"></div>
</div>
</div>
</form>
<!-- Отзовы застройщиков -->
<div class="tabs__content">
<div style="padding: 15px">
<style>
.review_builder_del_btn {
color: #e77;
cursor: pointer;
}
</style>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<h2 style="margin-bottom: 15px">Отзывы</h2>
<div id="reviews_builder_wrap">
<?php
$sql = "SELECT * FROM builder_reviews WHERE builder_id=".$builder->id;
$reviews = [];
try {
$result = mysql_query($sql);
while ($obj = mysql_fetch_assoc($result)) {
$reviews[$obj['id']] = $obj;
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
<table id="reviews_builder_table_id" class="display reviews_table_id">
<thead>
<tr>
<th>id</th>
<th>Имя</th>
<th>Отзыв</th>
<th>Дата</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
foreach ($reviews as $id => $review) {
?>
<tr>
<td><?php echo $id ?></td>
<td><?php echo $review['name'] ?></td>
<td><?php echo $review['review'] ?></td>
<td><?php echo date('d.m.Y H:i', strtotime($review['date'])) ?></td>
<td><span class="review_builder_del_btn" id="<?php echo $id ?>">Удалить</span></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<div>
<button builder_id="<?php echo $builder->id ?>" class="medium-button action-button actionJW show_add_review_btn block_features_btn">Добавить</button>
</div>
<div class="clear"></div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function () {
reviews_builder = $('#reviews_builder_table_id').DataTable({
"oLanguage": {
"sLengthMenu": "Отобразить _MENU_ записей на странице",
"sZeroRecords": "Ничего не найдено",
"sInfo": "Показано с _START_ по _END_ из _TOTAL_ записей",
"sInfoEmpty": "Показано с 0 по 0 из 0 записей",
"sInfoFiltered": "(Отфильтровано из _MAX_ записей)",
"sSearch": "Найти",
"oPaginate": {
"sFirst": "Первая",
"sLast": "Последняя",
"sNext": "Следующая",
"sPrevious": "Предыдущая"
},
}
});
$('.show_add_review_btn').on('click', function () {
$('#show_add_review_bg').show();
$('#show_add_review').show();
});
$('#show_add_review_bg .closer').on('click', function(){
$("#show_add_review_bg").toggle(10);
});
$('#block_review_save').on('click', function(){
builder_id = $(this).attr('builder_id');
review = $('#block_review_text').val();
name = $('#block_review_name').val();
param = {
"builder_id": builder_id,
"review": review,
"name": name,
};
$.post('/admin/ajax/addBuilderReview.php', param, function (data) {
data = JSON.parse(data);
id = data.id;
review = data.review;
name = data.name;
date = data.date;
del_btn = "<span id='"+id+"' class='review_builder_del_btn'>Удалить</span>";
reviews_builder.row.add([
id,
name,
review,
date,
del_btn
]).draw();
$('#show_add_review_bg').hide();
$('#block_review_text').val('');
});
});
$('body').on('click','.review_builder_del_btn', function(){
review_id = $(this).attr('id');
console.log(review_id);
param = {
"review_id": review_id
};
$.post('/admin/ajax/deleteBuilderReview.php', param, function (data) { });
reviews_builder.row( $(this).parents('tr') ).remove().draw();
});
})
</script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>
<!--Review-->
<div class="full_modal-bg" id="show_add_review_bg" style="display: none">
<div class="full_modal" id="show_add_review" style="display: none">
<span class="pseudo-link closer" onclick="hidechangeTarif(); return false;"><i class="ti-close"></i></span>
<form id="add_review_form" action="">
<div class="modal-form">
<div class="modal-inner">
<h2>Добавить отзыв</h2>
<!-- <div class="form-block">-->
<!-- <div class="label">Порядок:</div>-->
<!-- <div class="inputs">-->
<!-- <input type="number" min="0" class="text" name="num" value="1" style="width:70px;">-->
<!-- </div>-->
<!-- <div class="clear"></div>-->
<!-- </div>-->
<div class="form-block">
<div class="label">Имя:</div>
<div class="inputs">
<input type="text" class="text" id="block_review_name" name="block_review_name" value="" style="width:100%">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Описание:</div>
<div class="inputs">
<textarea class="text" id="block_review_text" name="block_review_text" style="width:100%; height:200px;"></textarea>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</form>
<div class="modal-submit">
<button id="block_review_save" class="fr-btn1" builder_id="<?php echo $builder->id ?>">Сохранить&nbsp;<i class="ti-angle-right"></i></button>
</div>
</div>
</div>

170
admin/builders.php Normal file
View File

@ -0,0 +1,170 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
?>
<div class="main-title">
<h1>Застройщики</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="head-filter__top">
<div class="top-line">
<div class="head-filter-search">
<div class="form-search">
<form>
<input type="search" name="search" class="text" placeholder="Название"
value="<?php if (isset($_GET['search'])) {
echo $_GET['search'];
} ?>">
<span class="search-icon">
<i class="ti-search"></i>
</span>
</form>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<?php
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$searchName = null;
$url_params = '';
if (isset($_GET['search'])) {
$searchName = $_GET['search'];
if (strlen($url_params) > 0) {
$url_params = $url_params . "&";
}
$url_params = $url_params . "search=" . $_GET['search'];
}
$buildersCount = Builder::countActive($searchName);
$all_pages = ceil($buildersCount / $num_on_page);
if ($buildersCount > 0) {
$buildersList = Builder::searchActive($searchName, $from, $num_on_page);
?>
<div class="jw__NB">
<?php
$numFrom = $from + 1;
$numTo = (($from + $num_on_page) >= $buildersCount) ? $buildersCount : ($from + $num_on_page);
echo '<div style="margin: 13px 35px; font-weight: bold;">Показаны записи ' . $numFrom . '-' . $numTo . ' из ' . $buildersCount . '</div>'
?>
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th></th>
<th>ID</th>
<th>Название застройщика</th>
<th>Комиссия</th>
<th>Комиссия переуступок</th>
<th>Срок выплаты комиссионных застройщиком</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
foreach ($buildersList as $builder) {
$note = "";
if ($builder->note) {
$note = $builder->note;
}
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td><i class="ti-info-alt" title="' . str_replace("<br>", "\n", $note) . '"></i></td>';
echo '<td>' . $builder->id . '</td>';
echo '<td>' . $builder->name . '</td>';
echo '<td>' . number_format($builder->fee, 2, ',', ' ') . '</td>';
echo '<td>' . number_format($builder->discount_fee, 2, ',', ' ') . '</td>';
echo '<td>' . $builder->pay_period . '</td>';
echo '<td><a href="/admin/builderEdit.php?id=' . $builder->id . '" title="Редактировать"><i class="ti-pencil"></i></a></td>';
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul></div>';
?>
</div>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Застройщиков не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

654
admin/clients_jw.php Normal file
View File

@ -0,0 +1,654 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
// закрываем доступ на выполнение запросов
if(!$_SESSION['superadmin']) {header("location:/index.php"); die("Доступ запрещён!");}
$get = clearInputData($_GET);
require_once($_SERVER['DOCUMENT_ROOT']."/templates/header-admin.php");
$cl = new Clients_jw;
$user_view = null;
$idAgentForView = null;
$idManagerForView = null;
?>
<div class="content-right" style="min-height: 100%;">
<div class="inner">
<div class="main-title">
<h1 style="float: left;">Клиенты</h1>
<?php
if(!$_SESSION['funnel_jw_id']) $_SESSION['funnel_jw_id'] = 1;
$funnel_id = $_SESSION['funnel_jw_id'];
$f_q = mysql_query("SELECT * FROM funnels_jw");
while($f_r = mysql_fetch_assoc($f_q)){
?>
<div data-id="<?=$f_r['id']?>" style="margin: 17px 10px;" class="search-funnel-item<?=($f_r['id'] == $funnel_id) ? ' active': ''?>">
<span><?=$f_r['name']?></span>
</div>
<?php
}
?>
</div>
<div class="crm new">
<div class="crm__filters">
<div class="crm__filters-inner">
<div class="search-query">
<div class="search-query-item">
<span>0 опций</span>
<i class="ti-close"></i>
</div>
</div>
<div class="search-filter">
<?php
if(isset($_GET['id_agent'])) unset($_SESSION['client_search']);
$search = ""; if(isset($_SESSION['client_search']) && !empty($_SESSION['client_search'])) $search = $_SESSION['client_search']; ?>
<input type="text" tabindex="1" value="<?=$search?>" name="search" placeholder="Фильтр и поиск" class="search-filter__filter" id="search_filter_input" autocomplete="off">
<div class="search-filter__icons">
<i class="ti-search" title="Искать"></i>
<i class="ti-close" title="Очистить"></i>
</div>
</div>
<div class="crm__new-client">
<button class="jw__g-button add_client_new">Добавить</button>
</div>
<div class="view-changer">
<div class="view-list <?=(!isset($_SESSION['kanban'])) ? 'active' : ''?>">
<a href="javascript:{}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" xml:space="preserve"><g><g><path d="M0,74.672V224h512V74.672H0z M496,208H16V90.672h480V208z" fill="#757575"/></g></g><g><g><path d="M0,288v149.328h512V288H0z M496,421.328H16V304h480V421.328z" fill="#757575"/></g></g></svg>
<span>Список</span>
</a>
</div>
<div class="view-kanban <?=(isset($_SESSION['kanban'])) ? 'active' : ''?>">
<a href="javascript:{}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" xml:space="preserve"><g><g><path d="M0,96v128h128V96H0z M112,208H16v-96h96V208z" fill="#757575"/></g></g><g><g><path d="M192,96v128h128V96H192z M304,208h-96v-96h96V208z" fill="#757575"/></g></g><g><g><path d="M384,96v128h128V96H384z M496,208h-96v-96h96V208z" fill="#757575"/></g></g><g><g><path d="M0,288v128h128V288H0z M112,400H16v-96h96V400z" fill="#757575"/></g></g><g><g><path d="M192,288v128h128V288H192z M304,400h-96v-96h96V400z" fill="#757575"/></g></g><g><g><path d="M384,288v128h128V288H384z M496,400h-96v-96h96V400z" fill="#757575"/></g></g></svg>
<span>Таблица</span>
</a>
</div>
</div>
</div>
<div class="crm__filter-popup">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="filter-popup-items">
<div class="filter-popup__left">
<?php
// if(!isset($_GET['page'])){
if(isset($_GET['id_agent'])){
$_SESSION['filter_stage_work'] = 1;
unset ($_SESSION['filter_stage_hot']);
unset ($_SESSION['filter_stage_close']);
unset ($_SESSION['filter_stage_hit']);
unset ($_SESSION['filter_confirm']);
unset ($_SESSION['filter_work_ahency']);
}
if(!isset($_SESSION['filter_stage_work']) &&
!isset ($_SESSION['filter_stage_hot']) &&
!isset ($_SESSION['filter_stage_close'])&&
!isset ($_SESSION['filter_stage_hit'])&&
!isset ($_SESSION['filter_confirm'])&&
!isset ($_SESSION['filter_work_ahency'])){
$_SESSION['filter_stage_work'] = 1;
}
// }
?>
<div class="filter-popup-type <?=isset($_SESSION['filter_stage_work']) ? 'active' : ''?>" id="filter_stage_work">
<a href="javascript:{}"><span>В работе</span></a>
</div>
<div class="filter-popup-type hot <?=isset($_SESSION['filter_stage_hot']) ? 'active' : ''?>" id="filter_stage_hot">
<a href="javascript:{}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="19px" height="19px" class=""><g><g transform="matrix(1.25 0 0 -1.25 0 45)">
<path style="fill:#F4511E" d="M398.448-179.952c0,23.5-4.18,46.008-11.847,66.843c-5.24-61.375-37.967-92.917-72.162-78.234 c-32.043,13.761-10.445,67.401-8.851,92.996C308.277-54.958,305.451-5.293,226.637,36c32.749-62.651,3.793-101.563-26.586-103.943 c-33.683-2.62-64.542,28.956-53.151,80.216c-36.884-27.179-37.967-72.925-26.586-102.52c11.869-30.847-0.467-56.477-29.423-59.325 c-32.339-3.189-50.314,34.641-33.74,94.922c-28.683-33.775-45.997-77.516-45.997-125.302C11.152-286.902,97.85-373.6,204.8-373.6 S398.448-286.902,398.448-179.952z" data-original="#F4900C" class="active-path" data-old_color="#FF7043"/>
<path style="fill:#FFB74D" d="M277.418-279.146c-23.978,9.603-17.554,26.097-23.728,60.27 c-6.174,34.173-29.902,57.912-65.031,68.346c25.63-72.14-14.204-98.726-35.084-103.476c-21.324-4.853-42.751,0.012-45.2,45.644 c-24.867-24.764-40.267-59.028-40.267-96.893c0-4.186,0.199-8.325,0.567-12.415C103.652-352.245,151.729-373.6,204.8-373.6 s101.148,21.355,136.126,55.932c0.369,4.09,0.567,8.229,0.567,12.415c0,24.901-6.652,48.253-18.283,68.358 C324.885-272.026,294.026-285.798,277.418-279.146z" data-original="#FFCC4D" class="" data-old_color="#FFCC4D"/>
</g></g></svg>
<span>Горячие</span>
</a>
</div>
<div class="filter-popup-type <?=isset($_SESSION['filter_stage_close']) ? 'active' : ''?>" id="filter_stage_close">
<a href="javascript:{}"><span>Закрытые</span></a>
</div>
<div class="filter-popup-type <?=isset($_SESSION['filter_stage_hit']) ? 'active' : ''?>" id="filter_stage_hit">
<a href="javascript:{}"><span>Успешные</span></a>
</div>
<?php
$sqlt = "SELECT count(*) as total from clients WHERE 1 AND (who_work = ".$_SESSION['id'].") AND `date_add` > '1970-01-01' AND `confirm` = 0";
$qt = mysql_query($sqlt);
$totalt = (int)mysql_fetch_assoc($qt)['total'];
?>
<div class="filter-popup-type <?=isset($_SESSION['filter_confirm']) ? 'active' : ''?>" id="filter_confirm">
<a href="javascript:{}"><span>Назначенные</span></a><?php if($totalt > 0){?> <span class="counter"><?=$totalt?></span> <?php } ?>
</div>
<div class="filter-popup-type <?=isset($_SESSION['filter_work_ahency']) ? 'active' : ''?>" id="filter_work_ahency">
<a href="javascript:{}"><span>Общие</span></a>
</div>
</div>
<div class="filter-popup__right">
<div class="filter-popup-header-inputs">
<h3>Параметры</h3>
</div>
<?php
//var_dump($user->agencyId);
if($_SESSION['agency'] || $_SESSION['manager']){
if($_SESSION['agency']){
$agentsOfManager = User::getAllManagers($_SESSION['id']);
};
$agentsOfAgency = User::getAgentsOfManager($_SESSION['id'], true);
$emp_arr = array();
if(isset($_GET['id_agent'])) {
unset($_SESSION['filter_emp']);
$emp_arr[] = $_GET['id_agent'];
}
if(isset($_SESSION['filter_emp'])){
$emp_arr = json_decode(html_entity_decode($_SESSION['filter_emp']), ENT_QUOTES);
}
?>
<!--<div class="filter-popup-input">
<div class="crm__filter-input" id="crm_filter_emp">
<select id="filter_emp" multiple="">
<option value="<?=$_SESSION[id]?>" <?=in_array($_SESSION[id], $emp_arr) ? 'selected' : ''?>>Я</option>
<?php
if($agentsOfManager) {
foreach($agentsOfManager as $mngr)
{
?>
<option class="bolt" value="<?=$mngr[id]?>" <?=in_array($mngr[id], $emp_arr) ? 'selected' : ''?>><?= trim($mngr['last_name'] . ' ' . $mngr['first_name'] . ' ' . $mngr['middle_name']); ?></option>
<?php
$agenThisManager = User::getAgentsOfManager($mngr[id], true);
foreach($agenThisManager as $mAgent){
?>
<option value="<?=$mAgent[id]?>" <?=in_array($mAgent[id], $emp_arr) ? 'selected' : ''?>>- <?= trim($mAgent['last_name'] . ' ' . $mAgent['first_name'] . ' ' . $mAgent['middle_name']); ?></option>
<?php
}
}
}
if($agentsOfAgency) {
foreach($agentsOfAgency as $agent)
{ ?>
<option value="<?=$agent[id]?>" <?=in_array($agent[id], $emp_arr) ? 'selected' : ''?>><?= trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']); ?></option>
<?php
}
} ?>
</select>
</div>
</div>
<?php } ?>
<div class="filter-popup-input">
<div class="crm__filter-input">
<?php
if(isset($_GET['id_agent'])) unset($_SESSION['filter_client_type']);
$arr_client_type = array();
if(isset($_SESSION['filter_client_type'])){
$arr_client_type = json_decode(html_entity_decode($_SESSION['filter_client_type']), ENT_QUOTES);
}
?>
<select id="filter-client-type" multiple>
<option data-op="1" value="Аренда" <?=in_array('Аренда', $arr_client_type) ? 'selected' : ''?>>Аренда</option>
<option data-op="2" value="Вторичка" <?=in_array('Вторичка', $arr_client_type) ? 'selected' : ''?>>Вторичка</option>
<option data-op="3" value="Новостройки" <?=in_array('Новостройки', $arr_client_type) ? 'selected' : ''?>>Новостройки</option>
</select>
</div>
</div>
<div class="filter-popup-input">
<div class="crm__filter-input">
<?php
$arr_type = array();
if(isset($_GET['id_agent'])) unset($_SESSION['filter_client_objects_type']);
if(isset($_SESSION['filter_client_objects_type'])){
$arr_type = json_decode(html_entity_decode($_SESSION['filter_client_objects_type']), ENT_QUOTES);
}
?>
<select id="filter-client-objects-type" multiple>
<option data-op="1" value="1к_кв" <?=in_array('1к_кв', $arr_type) ? 'selected' : ''?>>1к.кв.</option>
<option data-op="2" value="2к_кв" <?=in_array('2к_кв', $arr_type) ? 'selected' : ''?>>2к.кв.</option>
<option data-op="3" value="3к_кв" <?=in_array('3к_кв', $arr_type) ? 'selected' : ''?>>3к.кв.</option>
<option data-op="4" value="4к_кв" <?=in_array('4к_кв', $arr_type) ? 'selected' : ''?>>4к.кв.</option>
<option data-op="5" value="5к_кв" <?=in_array('5к_кв', $arr_type) ? 'selected' : ''?>>5к.кв.</option>
<option data-op="6" value="6к_кв" <?=in_array('6к_кв', $arr_type) ? 'selected' : ''?>>6к.кв.</option>
<option data-op="7" value="7к_кв" <?=in_array('7к_кв', $arr_type) ? 'selected' : ''?>>7к.кв.</option>
<option data-op="8" value="8к_кв" <?=in_array('8к_кв', $arr_type) ? 'selected' : ''?>>8к.кв.</option>
<option data-op="9" value="9к_кв" <?=in_array('9к_кв', $arr_type) ? 'selected' : ''?>>9к.кв.</option>
<option data-op="10" value="Более_9_комнат" <?=in_array(олее_9_комнат', $arr_type) ? 'selected' : ''?>>Более 9 комнат</option>
<option data-op="11" value="Комната" <?=in_array('Комната', $arr_type) ? 'selected' : ''?>>Комната</option>
<option data-op="12" value="Дом" <?=in_array('Дом', $arr_type) ? 'selected' : ''?>>Дом</option>
<option data-op="13" value="Помещение" <?=in_array('Помещение', $arr_type) ? 'selected' : ''?>>Помещение</option>
<option data-op="14" value="Часть дома" <?=in_array('Часть дома', $arr_type) ? 'selected' : ''?>>Часть дома</option>
<option data-op="15" value="Комплекс домов" <?=in_array('Комплекс домов', $arr_type) ? 'selected' : ''?>>Комплекс домов</option>
</select>
</div>
</div>
<div class="filter-popup-input">
<div class="crm__filter-input">
<?php
$arr_role = array();
if(isset($_GET['id_agent'])) unset($_SESSION['filter_client_rol']);
if(isset($_SESSION['filter_client_rol'])){
$arr_role = json_decode(html_entity_decode($_SESSION['filter_client_rol']), ENT_QUOTES);
}
?>
<select id="filter_client_rol" multiple="multiple">
<option data-op="1" value="Арендатор" <?=in_array('Арендатор', $arr_role) ? 'selected' : ''?>>Арендатор</option>
<option data-op="2" value="Арендодатель" <?=in_array('Арендодатель', $arr_role) ? 'selected' : ''?>>Арендодатель</option>
<option data-op="3" value="Покупатель" <?=in_array('Покупатель', $arr_role) ? 'selected' : ''?>>Покупатель</option>
<option data-op="4" value="Продавец" <?=in_array('Продавец', $arr_role) ? 'selected' : ''?>>Продавец</option>
</select>
</div>
</div>
<div class="filter-popup-input">
<div class="crm__filter-input">
<select id="filter_source" multiple="">
<?php
$arr_source = array();
if(isset($_GET['id_agent'])) unset($_SESSION['filter_source']);
if(isset($_SESSION['filter_source'])){
$arr_source = json_decode(html_entity_decode($_SESSION['filter_source']), ENT_QUOTES);
}
$sql_adv = "SELECT * FROM `advertising_sources` WHERE `user_id` = '".$user->id."' or `manager_id` = '".$user->id."'";
if($user->id_manager){
$sql_adv .= " or `manager_id` = '".$user->id_manager."' or `user_id` = '".$user->id_manager."'";
}
if($user -> agencyId){
$sql_adv .= " or `manager_id` = '".$user -> agencyId."' or `user_id` = '".$user -> agencyId."'";
}
$q_adv = mysql_query($sql_adv);
$rows_adv = mysql_num_rows($q_adv);
if($rows_adv > 0){
while($r_adv = mysql_fetch_assoc($q_adv)){
?>
<option value="<?=$r_adv['id']?>"<?=in_array($r_adv['id'], $arr_source) ? 'selected' : ''?>><?=$r_adv['source']?></option>
<?php
}
}
?>
</select>
</div>
</div>-->
<div class="filter-popup-input">
<div class="crm__filter-input">
<?php
$arr_etap = array();
if(isset($_GET['id_agent'])) unset($_SESSION['filter_etap']);
if(isset($_SESSION['filter_etap'])){
$arr_etap = json_decode(html_entity_decode($_SESSION['filter_etap']), ENT_QUOTES);
}
?>
<select id="filter_etap" multiple="">
<option value="1" <?=in_array('1', $arr_etap) ? 'selected' : ''?>>Новый</option>
<option value="2" <?=in_array('2', $arr_etap) ? 'selected' : ''?>>В работе</option>
<option value="3" <?=in_array('3', $arr_etap) ? 'selected' : ''?>>Коммерческое предложение</option>
<option value="4" <?=in_array('4', $arr_etap) ? 'selected' : ''?>>Встреча в офисе</option>
<option value="5" <?=in_array('5', $arr_etap) ? 'selected' : ''?>>Зарегистрировались</option>
<option value="6" <?=in_array('6', $arr_etap) ? 'selected' : ''?>>Оплатили</option>
<option value="7" <?=in_array('7', $arr_etap) ? 'selected' : ''?>>Отвалились</option>
</select>
</div>
</div>
<div class="filter-popup-input">
<div class="crm__filter-input">
<?php
$period = 'all';
if(isset($_GET['id_agent'])) unset($_SESSION['client_period']);
if(isset($_SESSION['client_period']))
$period = $_SESSION['client_period'];
?>
<select class="ms-crm-client-period" >
<option value="today" <?=($period == 'today') ? 'selected' : ''?>>Сегодня</option>
<option value="week" <?=($period == 'week') ? 'selected' : ''?>>Неделя</option>
<option value="month" <?=($period == 'month') ? 'selected' : ''?>>Месяц</option>
<option value="quarter" <?=($period == 'quarter') ? 'selected' : ''?>>Квартал</option>
<option value="year" <?=($period == 'year') ? 'selected' : ''?>>Год</option>
<option value="all" <?=($period == 'all') ? 'selected' : ''?>>Все время</option>
</select>
</div>
</div>
<div class="filter-popup-input">
<?php if(isset($_GET['id_agent'])) unset($_SESSION['order']); ?>
<div class="checkbox">
<input name="order" id="order" type="checkbox" <?=(isset($_SESSION['order'])) ? 'checked' : ''?> value="cena">
<label for="order">С задачами</label>
</div>
</div>
<!--<div class="filter-popup-submit">
<button class="medium-button">Закрыть</button>
</div>-->
</div>
</div>
</div>
</div>
<div id="clients_list">
</div>
</div>
</div>
</div>
<style>
.tab{
position: relative;
display: inline-block;
padding: 5px 0 10px;
cursor: pointer;
border: 0;
font-size: 17px;
}
</style>
<div class="full_modal-bg" id="send_bg_new" style="display: none;">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="full_modal edit-modal new-client__modal" id="send_new" style="display: none;">
<form class="form-validate" method="post" id="addEditNew">
<div class="modal-inner">
<div class="error_msg"></div>
<h2 class="modal-title">Новый клиент</h2>
<!-- <h2>Редактирование клиента</h2> -->
<div class="jw-tabs">
<ul class="tabs__caption">
<li id="liGlobal" class="active" data-page="0">
<i class="tabs-li__icon">1</i>
<span>Общие</span>
</li>
</ul>
<div>
<div class="tabs__content">
<div class="form-block">
<div class="label">Этап</div>
<div class="inputs">
<div class="stagebar">
<div class="crm__small-stagebar">
<table>
<tbody>
<tr>
<td class="stage stage-new active" title="Новый клиент">
<div data-stage="1" class="crm__small-stage"></div>
<span class="next-stage">Новый</span>
</td>
<td class="stage stage-work active" title="В работе">
<div data-stage="2" class="crm__small-stage"></div>
<span class="next-stage">В работе</span>
</td>
<td class="stage stage-offer" title="Коммерческое предложение">
<div data-stage="3" class="crm__small-stage"></div>
<span class="next-stage">Коммерческое предложение</span>
</td>
<td class="stage stage-showing" title="Встреча в офисе">
<div data-stage="4" class="crm__small-stage"></div>
<span class="next-stage">Встреча в офисе</span>
</td>
<td class="stage stage-reservation" title="Зарегистрировались">
<div data-stage="5" class="crm__small-stage"></div>
<span class="next-stage">Зарегистрировались</span>
</td>
<td class="stage stage-meet" title="Оплатили">
<div data-stage="6" class="crm__small-stage"></div>
<span class="next-stage">Оплатили</span>
</td>
<td class="stage stage-deal" title="Отвалились">
<div data-stage="7" class="crm__small-stage"></div>
<span class="next-stage">Отвалились</span>
</td>
<!--
<td class="stage stage-end" title="Клиент закрыт">
<div data-stage="8" class="crm__small-stage"></div>
<span class="next-stage">Закрыт</span>
</td>-->
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label l-space">Название</div>
<div class="inputs">
<input type="text" class="text" name="fio" required="" style="width:400px;" value="">
</div>
<div class="form-block__hot-client" title="Горячий клиент">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="24px" height="24px" class=""><g><g transform="matrix(1.25 0 0 -1.25 0 45)"><path style="fill:#F4511E" d="M398.448-179.952c0,23.5-4.18,46.008-11.847,66.843c-5.24-61.375-37.967-92.917-72.162-78.234 c-32.043,13.761-10.445,67.401-8.851,92.996C308.277-54.958,305.451-5.293,226.637,36c32.749-62.651,3.793-101.563-26.586-103.943 c-33.683-2.62-64.542,28.956-53.151,80.216c-36.884-27.179-37.967-72.925-26.586-102.52c11.869-30.847-0.467-56.477-29.423-59.325 c-32.339-3.189-50.314,34.641-33.74,94.922c-28.683-33.775-45.997-77.516-45.997-125.302C11.152-286.902,97.85-373.6,204.8-373.6 S398.448-286.902,398.448-179.952z" data-original="#F4900C" class="active-path" data-old_color="#FF7043"></path>
<path style="fill:#FFB74D" d="M277.418-279.146c-23.978,9.603-17.554,26.097-23.728,60.27 c-6.174,34.173-29.902,57.912-65.031,68.346c25.63-72.14-14.204-98.726-35.084-103.476c-21.324-4.853-42.751,0.012-45.2,45.644 c-24.867-24.764-40.267-59.028-40.267-96.893c0-4.186,0.199-8.325,0.567-12.415C103.652-352.245,151.729-373.6,204.8-373.6 s101.148,21.355,136.126,55.932c0.369,4.09,0.567,8.229,0.567,12.415c0,24.901-6.652,48.253-18.283,68.358 C324.885-272.026,294.026-285.798,277.418-279.146z" data-original="#FFCC4D" class="" data-old_color="#FFCC4D"></path></g></g></svg>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Эл. почта</div>
<div class="inputs">
<input type="text" class="text" name="email" style="width:400px;" value="">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Телефон</div>
<div class="inputs">
<input type="text" class="text phoneMask" name="phone" required="" style="width:400px;" value="">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Описание</div>
<div class="inputs">
<textarea name="opis" class="text" style="width:400px;" rows="7"></textarea>
</div>
<div class="clear"></div>
</div>
</div>
<div class="tabs__content">
<div class="jw__objects">
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<span class="hidden" id="sid" data-id="<?=$_SESSION['id']?>" data-agency-id="<?= $_SESSION['agency_id']; ?>"></span>
<input type="hidden" name="id" value="">
<input type="hidden" name="confirm" id="confirm" value="1">
<button type="submit" id="newClient">Сохранить&nbsp;<i class="ti-angle-right"></i></button>
</div>
</div>
</form>
</div>
<div class="full_modal-bg clients" id="client-history__bg" style="display: none;">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="full_modal history__modal" id="client_history" style="display: none;">
</div>
</div>
<div class="chat-modal__bg hidden" id="chat-modal__bg__call">
<div class="chat-modal call hidden" id="chat-modal__call">
<span class="pseudo-link closer-obj-events"><i class="ti-close"></i></span>
<div class="chat-modal__inner">
<h2>Новый звонок</h2>
<form>
<div class="form-block">
<div class="label">
Выберите<br> дату и время
</div>
<div class="date-timepicker">
<div class="datepicker-here" id="callDatetime" data-timepicker="true"></div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Комментарий
</div>
<div class="inputs">
<textarea id="callComment"></textarea>
</div>
<div class="clear"></div>
</div>
</form>
</div>
<div class="modal-submit">
<button type="button" class="addCallButtonNew">Добавить</button>
</div>
</div>
</div>
<div class="chat-modal__bg hidden" id="chat-modal__bg__showing">
<div class="chat-modal hidden" id="chat-modal__showing">
<span class="pseudo-link closer-obj-events"><i class="ti-close"></i></span>
<div class="chat-modal__inner">
<h2>Новый показ</h2>
<form>
<div class="form-block">
<div class="label">
Выберите<br> дату и время
</div>
<div class="date-timepicker">
<div class="datepicker-here" id="showDatetime" data-timepicker="true"></div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Адрес
</div>
<div class="inputs">
<input id="showAddress" type="text">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Комментарий
</div>
<div class="inputs">
<textarea id="showComment"></textarea>
</div>
<div class="clear"></div>
</div>
</form>
</div>
<div class="modal-submit">
<button type="button" class="addShowButtonNew">Добавить</button>
</div>
</div>
</div>
<div class="chat-modal__bg hidden" id="chat-modal__bg__meeting">
<div class="chat-modal hidden" id="chat-modal__meeting">
<span class="pseudo-link closer-obj-events"><i class="ti-close"></i></span>
<div class="chat-modal__inner">
<h2>Новая встреча</h2>
<form>
<div class="form-block">
<div class="label">
Выберите<br> дату и время
</div>
<div class="date-timepicker">
<div class="datepicker-here" id="meetDatetime" data-timepicker="true"></div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Адрес
</div>
<div class="inputs">
<input id="meetAddress" type="text">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Комментарий
</div>
<div class="inputs">
<textarea id="meetComment"></textarea>
</div>
<div class="clear"></div>
</div>
</form>
</div>
<div class="modal-submit">
<button type="button" class="addMeetButtonNew">Добавить</button>
</div>
</div>
</div>
<div class="chat-modal__bg hidden" id="chat-modal__bg__deal">
<div class="chat-modal hidden" id="chat-modal__deal">
<span class="pseudo-link closer-obj-events"><i class="ti-close"></i></span>
<div class="chat-modal__inner">
<h2>Новая сделка</h2>
<form>
<div class="form-block">
<div class="label">
Выберите<br> дату и время
</div>
<div class="date-timepicker">
<div class="datepicker-here" id="dealDatetime" data-timepicker="true"></div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Сумма
</div>
<div class="inputs">
<input id="dealSum" type="text">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Комментарий
</div>
<div class="inputs">
<textarea id="dealComment"></textarea>
</div>
<div class="clear"></div>
</div>
</form>
</div>
<div class="modal-submit">
<button type="button" class="addDealButtonNew">Добавить</button>
</div>
</div>
</div>
<script>
$(document).ready(function () {
show_options_search();
get_list();
});
</script>
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/templates/footer-admin.php");
?>

111
admin/complaints.php Normal file
View File

@ -0,0 +1,111 @@
<?php
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
// закрываем доступ на выполнение запросов
if(!$_SESSION['superadmin']) {header("location:/index.php"); die("Доступ запрещён!");}
if($_GET['st'])
{
$sql="UPDATE complaints SET status=1 WHERE id=$_GET[st]";
mysql_query($sql);
}
if($_GET['to_black'])
{
$sql="UPDATE objects SET black = '1', is_main = 0 WHERE id=$_GET[to_black]";
mysql_query($sql);
$sql="UPDATE complaints SET status=1 WHERE id_obj=$_GET[to_black]";
mysql_query($sql);
}
if($_GET['to_arch'])
{
$r = to_archive($_GET['to_arch'],1);
$sql="UPDATE complaints SET status=1 WHERE id_obj=$_GET[to_arch]";
mysql_query($sql);
if($r!==true) echo "<script>location.replace('complaints.php');</script>";
}
// if($_GET['del'])
// {
// del_object($_GET['del']);
// echo "<script>location.replace('complaints.php');</script>";
// }
require_once($_SERVER['DOCUMENT_ROOT']."/templates/header-admin.php");
?>
<div class="main-title">
<h1>Жалобы</h1>
</div>
<div class="switch__filter button-row" style="margin: 20px 0;">
<a href="?status=0" class="selector-button button-left <?php if($_GET['status']==0) echo 'selected'; ?>">
<span>Новые</span>
<i class="filter_counter" style="display: block;" id="favorite"><?php echo mysql_result(mysql_query("SELECT COUNT(*) FROM complaints WHERE status=0"),0); ?></i>
</a>
<a href="?status=1" class="selector-button button-right <?php if($_GET['status']==1) echo 'selected'; ?>">
<span>Просмотренные</span>
<i class="filter_counter" style="display: block;" id="favorite"><?php echo mysql_result(mysql_query("SELECT COUNT(*) FROM complaints WHERE status=1"),0); ?></i>
</a>
<div class="clear"></div>
</div>
<div class="users">
<?php
if($_GET['status'])
{
$status = $_GET['status'];
} else
{
$status = 0;
}
$sql="SELECT * FROM complaints WHERE status = $status ORDER BY ID DESC";
$rez=mysql_query($sql);
if(mysql_num_rows($rez))
{
$comps = array();
while($comp = mysql_fetch_array($rez))
{
$comps[] = $comp;
}
foreach ($comps as $comp)
{
if($comp['id_user'])
{
$sql1 = "SELECT * FROM users WHERE id=$comp[id_user]";
$rez1 = mysql_query($sql1);
$user1 = mysql_fetch_assoc($rez1);
}
echo "<div class='user'>
<div class='top'>
<div class='date-status'>
<span>$comp[date_add]</span>
<span>Добавил $user1[fio]</span>
</div>
<h2>Жалоба $comp[id] на объект <a href='/object.php?id=$comp[id_obj]' target='_blank'>$comp[id_obj]</a></h2>
</div>
<div class='center'>
<div class='user_row row_line'>
<div class='col'>
<p class='small'>Причина</p>
<p><b class='big'>".$COMPLAINT_REASONS["$comp[reason]"]."</b></p>
</div>
<div class='col'>
<p class='small'>Описание</p>
<p><b class='big'>$comp[txt]</b></p>
</div>
<div class='clear'></div>
</div>
</div>
<div class='bottom'>
<span><a class='fr-btn edit-btn steel i-btn very-small' href='?to_arch=$comp[id_obj]'>В архив</a></span>
<span><a class='fr-btn edit-btn steel i-btn very-small' href='?to_black=$comp[id_obj]'>В бан</a></span>
<span><a class='fr-btn edit-btn steel i-btn very-small' href='?st=$comp[id]'>Увидел</a></span>
</div>
</div>";
}
} else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Жалоб на объекты нет</h2></div>";
?>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/templates/footer-admin.php");
?>

View File

@ -0,0 +1,247 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
if (isset($_POST['add_file'])) {
$err = "";
$post = clearInputData($_POST);
if ($_FILES['request_file']['name']) {
if ($_FILES['request_file']['error'] == UPLOAD_ERR_OK) {
$ext = end(explode(".", $_FILES['request_file']['name']));
$ext = mb_strtolower($ext);
$name = md5($_FILES['request_file']['tmp_name'] . time()) . "." . $ext;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/upload/requests")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/upload/requests");
}
$one = mb_substr($name, 0, 1);
$file = $_SERVER['DOCUMENT_ROOT'] . "/upload/requests/$one/$name";
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/upload/requests/$one")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/upload/requests/$one");
}
if (move_uploaded_file($_FILES['request_file']['tmp_name'], $file)) {
$post['hidden_request_file'] = "/upload/requests/$one/$name";
}
} else {
if ($_FILES['request_file']['error'] == UPLOAD_ERR_FORM_SIZE) {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Превышен размер файла. Допустимый размер 1-2 Mb.";
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Ошибка при загрузке: ".$_FILES['request_file']['error'];
}
}
if (isset($post['id'])) {
if (strlen($err) == 0) {
$sql = "select * from discharge_object_request where id= $post[id]";
$rez = mysql_query($sql);
$request = mysql_fetch_array($rez);
$sql = "UPDATE discharge_object_request SET request_file = '" . $post['hidden_request_file'] ."', state = 'done' WHERE id = '" . $post['id'] . "'";
mysql_query($sql);
$message = 'Получена выписка из ЕГРН';
if ($request['request_type'] == 'move') {
$message = $message . " о переходе прав на объект недвижимости.";
}
$message = $message . ' <a href="' . $post['hidden_request_file'] . '" target="_blank">Скачать</a>';
$sqlObj = "SELECT o.id, o.nazv, o.adres, o.cadastral_number, o.dom, o.korpus, o.litera, o.id_rf_region, rayon.rayon FROM objects o LEFT JOIN rayon rayon on o.rayon = rayon.id WHERE o.id=$request[object_id]";
$rezObj = mysql_query($sqlObj);
$obj = mysql_fetch_assoc($rezObj);
$sqlUser = new User();
$sqlUser->get($request['user_id']);
//событие в задачи
$sqlEvent = "INSERT INTO user_object_events(user_id, object_id, type, comment) VALUES($request[user_id], $request[object_id], 'comment', '$message')";
mysql_query($sqlEvent);
$noticeText = "Получена выписка из ЕГРН по объекту $obj[nazv]";
mailClientFromJoywork($sqlUser->email, "Получена выписка из ЕГРН", $noticeText);
//уведомление в телеграм
$sql = "INSERT INTO discharge_user_notice(user_id, text, sended, created_at) VALUES($request[user_id], '$noticeText', 0, NOW())";
mysql_query($sql);
header("location:/admin/dischargeOrders.php");
exit();
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Не найден идентификатор Запроса в запросе.";
}
}
}
$get = clearInputData($_GET);
if (!isset($get['id'])) {
header("location:/admin/dischargeOrders.php");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
if (!isset($post) && $get['id'] > 0) {
$sql = "select * from discharge_object_request where id= $get[id]";
$rez = mysql_query($sql);
$request = mysql_fetch_array($rez);
$sqlUser = new User();
$sqlUser->get($request['user_id']);
$sqlObj = "SELECT o.id, o.nazv, o.adres, o.cadastral_number, o.dom, o.korpus, o.litera, o.id_rf_region, rayon.rayon FROM objects o LEFT JOIN rayon rayon on o.rayon = rayon.id WHERE o.id=$request[object_id]";
$rezObj = mysql_query($sqlObj);
$obj = mysql_fetch_assoc($rezObj);
}
?>
<div class="main-title">
<h1>Добавление файла выписки</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="new-object">
<form method="post" enctype="multipart/form-data" id="upload-form">
<div class="new-object__form">
<?php if (isset($err) && strlen($err) > 0) { ?>
<div class="block" style="border-bottom: none; color: red;"><?php echo $err; ?></div>
<?php } ?>
<div class="block">
<div class="line">
<div class="label">
<span>Дата выписки:</span>
</div>
<div class="inputs">
<input type="text" class="text" name="name" disabled="disabled" style="width: 75%;"
value="<? if (isset($request)) echo date_format(date_create($request['created_at']), 'd.m.Y H:i:s'); ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Тип выписки:</span>
</div>
<div class="inputs">
<input type="text" class="text" disabled="disabled" style="width: 75%;"
value="<? if (isset($request)) echo ($request['request_type'] == 'simple' ? 'Выписка из ЕГРН о характеристиках и правах' : 'Выписка из ЕГРН о переходе прав на объект недвижимости') ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Пользователь:</span>
</div>
<div class="inputs">
<input type="text" class="text" disabled="disabled" style="width: 75%;"
value="<? if (isset($sqlUser)) echo (($sqlUser->agency ? ($sqlUser->agency_name . " (" . trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name) .")") : trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name)) .
' ' . $sqlUser->phone . ' ' . $sqlUser->email) ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Объект:</span>
</div>
<div class="inputs" style="padding-top: 9px;">
<a style="margin-left: 4px;" href="/object.php?id=' . $obj['id'] . '" target="_blank"><?php if (isset($obj)) echo $obj['nazv'] ?></a>
</div>
</div>
<div class="line">
<div class="label">
<span>Номер из Росреестра:</span>
</div>
<div class="inputs">
<input type="text" class="text" disabled="disabled" style="width: 75%;" value="<? if (isset($request)) echo $request['request_number'] ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Дата из Росреестра:</span>
</div>
<div class="inputs">
<input type="text" class="text" disabled="disabled" style="width: 75%;" value="<? if (isset($request)) echo date_format(date_create($request['request_date']), 'd.m.Y H:i:s'); ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Прикрепить выписку:</span>
</div>
<div class="inputs">
<input type="hidden" name="MAX_FILE_SIZE" value="6000000"/>
<input style="border: 1px solid white;" type="file"
class="text" name="request_file"/>
<div class="text_comment" style="margin-left: 123px; font-size: 12px;">
<div id="upload-result"></div>
</div>
</div>
</div>
<div class="line" style="text-align: right">
<button type="submit" class="medium-button">Сохранить</button>
<a href="/admin/dischargeOrders.php" class="cancel-button medium-button">Закрыть</a>
</div>
<input type="hidden" name="add_file" value="1">
<input type="hidden" name="hidden_request_file" value="<?php if (isset($request)) {
echo $request['request_file'];
} else {
if (isset($post)) {
echo $post['hidden_request_file'];
}
} ?>">
<input type="hidden" name="id" value="<?php if (isset($request)) {
echo $request['id'];
} else {
if (isset($post)) {
echo $post['id'];
}
} ?>">
<div class="clear"></div>
</div>
</div>
</form>
</div>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

205
admin/dischargeOrders.php Normal file
View File

@ -0,0 +1,205 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
//ini_set('display_errors', 1);
//error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title">
<h1>Заказы выписок ЕГРН</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<?php
$sqlCount = "SELECT count(id) FROM discharge_object_request";
$rezCount = mysql_query($sqlCount);
$count = mysql_result($rezCount, 0);
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$all_pages = ceil($count / $num_on_page);
if ($count > 0) {
$sql = "select * from discharge_object_request order by created_at DESC LIMIT $from, $num_on_page";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
?>
<div class="jw__NB">
<div class="jw__NB__flat-list" style="overflow-x: auto;">
<table>
<thead>
<tr>
<th>Дата запроса</th>
<th>Тип выписки</th>
<th>Пользователь</th>
<th>Объект</th>
<th>Адрес<br/> Кадастровый </th>
<th>Статус</th>
<th>Номер из Росреестра</th>
<th>Дата из Росреестра</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
while($request = mysql_fetch_array($rez)) {
$sqlUser = new User();
$sqlUser->get($request['user_id']);
$sqlObj = "SELECT o.id, o.nazv, o.adres, o.cadastral_number, o.dom, o.korpus, o.litera, o.id_rf_region, rayon.rayon FROM objects o LEFT JOIN rayon rayon on o.rayon = rayon.id WHERE o.id=$request[object_id]";
$rezObj = mysql_query($sqlObj);
$obj = mysql_fetch_assoc($rezObj);
$sqlObjAdditional = "SELECT flat_number FROM objects_additional_information WHERE object_id=$request[object_id]";
$rezObjAdditional = mysql_query($sqlObjAdditional);
$objAdditional = mysql_fetch_assoc($rezObjAdditional);
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . date_format(date_create($request['created_at']), 'd.m.Y H:i:s') . '</td>';
echo '<td>' . ($request['request_type'] == 'simple' ? 'Выписка из ЕГРН' : 'Выписка из ЕГРН о переходе прав на объект недвижимости') . '</td>';
echo '<td>' . ($sqlUser->agency ? ($sqlUser->agency_name . " (" . trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name) .")") : ($sqlUser->agencyName ? trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name) . " (агентство " . $sqlUser->agencyName .")" : trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name)));
echo '<br/>' . $sqlUser->phone;
echo '<br/>' . $sqlUser->email . '</td>';
echo '<td><a href="/object.php?id=' . $obj['id'] . '" target="_blank">' . $obj['nazv'] . '</a></td>';
echo '<td>';
if ($obj['id_rf_region'] == 50) {
echo "Ленинградская область";
}else if($obj['id_rf_region'] == 81){
echo "Санкт Петербург";
} else if($obj['id_rf_region'] == 77) {
$sqlRegion = "SELECT parent.name as parent,rf_regions.name FROM rf_regions as parent
LEFT JOIN rf_regions on rf_regions.parent = parent.id
LEFT JOIN rf_region_rayons ON rf_region_rayons.rf_region_id = rf_regions.id
WHERE rayon_id in (select rayon from objects where id = $obj[id])";
$rezRegion = mysql_query($sqlRegion);
if($rezRegion){
$region = mysql_fetch_assoc($rezRegion);
echo $region['parent'].','.$region['name'].' округ';
}
}else{
$sqlRegion = "SELECT rf_regions.name FROM rf_regions
LEFT JOIN rf_region_rayons ON rf_region_rayons.rf_region_id = rf_regions.id
WHERE rayon_id in (select rayon from objects where id = $obj[id])";
$rezRegion = mysql_query($sqlRegion);
if($rezRegion){
$region = mysql_fetch_assoc($rezRegion);
echo $region['name'];
}
}
echo ', ';
if (strpos($obj['rayon'], "район")) {
echo $obj['rayon'];
} else {
echo $obj['rayon'] . " район";
}
echo ', ';
echo $obj['adres'];
if ($obj['dom']) {
echo ", " . $obj['dom'];
}
if ($obj['korpus']) {
echo ", к. " . $obj['korpus'];
}
if ($obj['litera']) {
echo ", лит. " . $obj['litera'];
}
if ($objAdditional['flat_number']) {
echo ", кв. " . $objAdditional['flat_number'];
}
echo ' <br/> № ' . $obj['cadastral_number'] . '</td>';
echo '<td>';
if ($request['state'] == 'created') {
echo "Запрос создан";
}
if ($request['state'] == 'sended') {
echo "Выписка заказана";
}
if ($request['state'] == 'done') {
echo "Выписка получена";
}
echo '</td>';
echo '<td>' . $request['request_number'] . '</td>';
echo '<td>' . $request['request_date'] . '</td>';
if ($request['state'] == 'created') {
echo '<td width="50"><a href="javascript:{}" data-id="' . $request['id'] . '" onclick="openChangeDischargeObjectRequest(this);">Выписка заказана</a></td>';
} else {
if ($request['state'] == 'sended') {
echo '<td width="50"><a href="/admin/dischargeOrderFile.php?id=' . $request['id'] . '" onclick="">Выписка получена</a></td>';
} else {
echo '<td width="50"><a target="_blank" href="' . $request['request_file'] . '" onclick="">Скачать выписку</a></td>';
}
}
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, '');
}
echo '</ul></div>';
?>
</div>
<? } ?>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Заказов не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<script type="text/javascript">
function confirmPay(requestId) {
$.ajax({
url: '/admin/ajax/confirmRequestPay.php?id=' + requestId,
success:function(data){
window.location.reload(true);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
</script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

131
admin/dischargePay.php Normal file
View File

@ -0,0 +1,131 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
/*ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);*/
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title">
<h1>Оплата выписок ЕГРН</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<?php
$sqlCount = "SELECT count(id) FROM discharge_user_request";
$rezCount = mysql_query($sqlCount);
$count = mysql_result($rezCount, 0);
$num_on_page = 20;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
$all_pages = ceil($count / $num_on_page);
if ($count > 0) {
$sql = "select * from discharge_user_request order by created_at DESC LIMIT $from, $num_on_page";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
?>
<div class="jw__NB">
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>Дата запроса</th>
<th>ФИО пользователя</th>
<th>Телефон пользователя</th>
<th>Email пользователя</th>
<th>Количество выписок</th>
<th>Цена</th>
<th>Оплачено</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
while($request = mysql_fetch_array($rez)) {
$sqlUser = new User();
$sqlUser->get($request['user_id']);
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . date_format(date_create($request['created_at']), 'd.m.Y H:i:s') . '</td>';
echo '<td>' . ($sqlUser->agency ? ($sqlUser->agency_name . "<br/> (" . trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name) .")") : trim($sqlUser->last_name . ' ' . $sqlUser->first_name . ' ' . $sqlUser->middle_name)) . '</td>';
echo '<td>' . $sqlUser->phone . '</td>';
echo '<td>' . $sqlUser->email . '</td>';
echo '<td>' . $request['count'] . '</td>';
echo '<td>' . $request['price'] . '</td>';
echo '<td>' . ($request['paid'] == 0 ? "Нет" : "Да") . '</td>';
if ($request['paid'] == 0) {
echo '<td width="50"><a href="javascript:{}" onclick="confirmPay(' . $request['id'] . ');">Подтвердить оплату</a></td>';
} else {
echo '<td width="50">&nbsp;</td>';
}
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
<?php
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if ($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul></div>';
?>
</div>
<? } ?>
<? } else echo "<div class='empty-block'><h1><i class='ti-na'></i></h1><h2>Заказов не найдено</h2></div>" ?>
<div class="clear"></div>
</div>
<script type="text/javascript">
function confirmPay(requestId) {
$.ajax({
url: '/admin/ajax/confirmRequestPay.php?id=' + requestId,
success:function(data){
window.location.reload(true);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
</script>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

View File

@ -0,0 +1,73 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title">
<h1>Тарифы для выписок ЕГРН</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<?php
$sql = "select * from discharge_tariff";
$rez = mysql_query($sql);
?>
<div class="jw__NB">
<div class="jw__NB__flat-list">
<table>
<thead>
<tr>
<th>ID</th>
<th>Количество выписок</th>
<th>Цена</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
while($dischargeTariff = mysql_fetch_array($rez)) {
echo '<tr ';
if ($num % 2 > 0) {
echo 'style="background-color: #f9f9f9;"';
}
echo '>';
echo '<td>' . $dischargeTariff['id'] . '</td>';
echo '<td>' . $dischargeTariff['count'] . '</td>';
echo '<td>' . $dischargeTariff['price'] . '</td>';
echo '<td width="50"><a href="/admin/dischargeTariffsEdit.php?id=' . $dischargeTariff['id'] . '" title="Редактировать"><i class="ti-pencil"></i></a></td>';
echo '</tr>';
$num++;
}
?>
</tbody>
</table>
</div>
</div>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

View File

@ -0,0 +1,110 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
if (isset($_POST['add_tariff'])) {
$err = "";
$post = clearInputData($_POST);
if (isset($post['id'])) {
if (strlen($err) == 0) {
$sqlUpdate = "UPDATE discharge_tariff SET count = '$post[count]', price = '$post[price]' WHERE id = $post[id]";
mysql_query($sqlUpdate);
header("location:/admin/dischargeTariffs.php");
exit();
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Не найден идентификатор тарифа в запросе.";
}
}
$get = clearInputData($_GET);
if (!isset($get['id'])) {
header("location:/admin/dischargeTariffs.php");
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
if (!isset($post) && $get['id'] > 0) {
$sql = "select * from discharge_tariff where id= $get[id]";
$rez = mysql_query($sql);
$tariff = mysql_fetch_array($rez);
}
?>
<div class="main-title">
<h1>Редактирование тарифа выписок ЕГРН</h1>
</div>
<div class="users fr__users" style="margin-right: 20px;">
<div class="new-object">
<form method="post">
<div class="new-object__form">
<?php if (isset($err) && strlen($err) > 0) { ?>
<div class="block" style="border-bottom: none; color: red;"><?php echo $err; ?></div>
<?php } ?>
<div class="block">
<div class="line">
<div class="label">
<span>Количество:</span>
</div>
<div class="inputs">
<input type="number" class="text" name="count" style="width: 75%;"
value="<? if (isset($post)) echo $post['count'];
if (isset($tariff)) echo $tariff['count']; ?>">
</div>
</div>
<div class="line">
<div class="label">
<span>Цена:</span>
</div>
<div class="inputs">
<input type="number" class="text" name="price" style="width: 75%;"
value="<? if (isset($post)) echo $post['price'];
if (isset($tariff)) echo $tariff['price']; ?>">
</div>
</div>
<div class="line" style="text-align: right">
<button type="submit" class="medium-button">Сохранить</button>
<a href="/admin/dischargeTariffs.php" class="cancel-button medium-button">Закрыть</a>
</div>
<input type="hidden" name="add_tariff" value="1">
<input type="hidden" name="id" value="<?php if (isset($tariff)) {
echo $tariff['id'];
} else {
if (isset($post)) {
echo $post['id'];
}
} ?>">
<div class="clear"></div>
</div>
</div>
</form>
</div>
<div class="clear"></div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

54
admin/documentsWidget.php Normal file
View File

@ -0,0 +1,54 @@
<?php
echo '<div class="row">';
echo '<a href="#" class="goToRootDocsFolder" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" title="Перейти в корневую папку">&nbsp;/&nbsp;</a>';
if (!$dirObject->isRoot()) {
echo "<span>" . $dirObject->getName() . "</span>";
}
echo '</div>';
if (!$dirObject->isRoot()) {
echo '<div class="row">';
echo '<a style="display: inline-block;width: 100%;" class="goToDocsFolder" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-dirid="'. $dirObject->getParent() .'" title="Перейти на уровень выше" href = "#"><i class="ti-back-right"></i>&nbsp;..&nbsp;</a >';
echo '</div>';
}
foreach ($collection->getDirs() as $dir) {
echo '<div class="row">';
echo '<div style="float: left; width: 90%;">';
echo '<div style="margin-left: 10px;">';
echo '<a style="display: inline-block;width: 100%;" title="Перейти в папку" class="goToDocsFolder" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-dirid="'. $dir->getId() .'" href="#"><i class="ti-folder"></i>&nbsp;';
echo $dir->getName();
echo '</a>';
echo '</div>';
echo '</div>';
echo '<div style="float: right; width: 10%;text-align: right;">';
echo '<a title="Переименовать папку" href="#" class="renameDocsFolder" data-name="' . $dir->getName(). '" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-id="' . $dir->getId() . '"><i class="ti-pencil"></i></a>&nbsp;&nbsp;<a href="#" class="deleteDocsFolder" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-id="' . $dir->getId() . '" title="Удалить папку"><i class="ti-trash"></i></a>';
echo '</div>';
echo '</div>';
}
foreach ($collection->getFiles() as $file) {
$fileUrl = $file->getUrl();
echo '<div class="row">';
echo '<div style="float: left; width: 90%;">';
echo '<div style="margin-left: 10px;">';
echo '<a style="display: inline-block;width: 100%;" title="Скачать" target="_blank" href="' . $fileUrl . '"><i class="ti-file"></i>&nbsp;';
echo $file->getName();
echo '</a>';
echo '</div>';
echo '</div>';
echo '<div style="float: right; width: 10%;text-align: right;">';
echo '<a title="Переименовать файл" href="#" class="renameDocsFile" data-name="' . $file->getName(). '" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-id="' . $file->getId() . '"><i class="ti-pencil"></i></a>&nbsp;&nbsp;<a href="#" class="deleteDocsFile" data-targetid="' . $manager->getTarget()->getDocTargetId() .
'" data-targettype="' . $manager->getTarget()->getDocTargetType() . '" data-id="' . $file->getId() . '" title="Удалить файл"><i class="ti-trash"></i></a>';
echo '</div>';
echo '</div>';
}

63
admin/import.php Normal file
View File

@ -0,0 +1,63 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
// закрываем доступ на выполнение запросов
if (!isset($_SESSION['superadmin'])) {
header("location:/index.php");
die("Доступ запрещён!");
}
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImportReport.php';
if (isset($_GET['run']) && $_GET['run'] == 1) {
(new ImporterService())->setForceImport(1);
header("location:/admin/import.php");
}
$importerService = new ImporterService();
$willBeRun = $importerService->isForceStart();
$isImporterActive = $importerService->isActive();
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/header-admin.php");
?>
<div class="main-title">
<h1>Выгрузка</h1>
</div>
<br/>
<div class="users">
<?php if ($willBeRun && !$isImporterActive):?>
<div style="color: red;">Выгрузка будет запущена в ближайшие 5 минут.</div>
<?php endif; ?>
<?php if ($isImporterActive):?>
<div style="color: red;">В данный момент работает выгрузка.</div>
<?php endif; ?>
<?php if (!$willBeRun && !$isImporterActive) { ?>
<div>
<a href="/admin/import.php?run=1" class="medium-button runImport" >Запустить выгрузку</a>
</div>
<?php } ?>
<br/>
<br/>
<div>Логи за последние 2 недели:</div>
<br/>
<ul style="list-style: inside; line-height: 2;">
<?php foreach(ImportReport::getList() as $ts => $file): ?>
<li><a target="_blank" href="https://joywork.ru/import/reports/<?php echo $file; ?>"><?php echo date('H:i d-m-y', $ts); ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/templates/footer-admin.php");
?>

903
admin/index.php Normal file
View File

@ -0,0 +1,903 @@
<?php
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
// закрываем доступ на выполнение запросов
if(!$_SESSION['superadmin']) {header("location:/index.php"); die("Доступ запрещён!");}
$starttime = microtime(true);
$url_params = '';
$url_params_with_page = '';
if (isset($_GET['agent'])) {
$url_params = $url_params."agent=".$_GET['agent'];
}
if (isset($_GET['block'])) {
if (strlen($url_params) > 0) {
$url_params = $url_params."&";
}
$url_params = $url_params."block=1";
}
if (isset($_GET['active'])) {
if (strlen($url_params) > 0) {
$url_params = $url_params."&";
}
$url_params = $url_params."active=1";
}
if (isset($_GET['search'])) {
if (strlen($url_params) > 0) {
$url_params = $url_params."&";
}
$url_params = $url_params."search=".$_GET['search'];
}
$url_params_with_page = $url_params;
if (isset($_GET['page'])) {
if (strlen($url_params) > 0) {
$url_params_with_page = $url_params_with_page."&";
}
$url_params_with_page = $url_params_with_page."page=".$_GET['page'];
}
if($_GET['ok_tarif']) {
User::changeTarif();
header("location:index.php?".$url_params_with_page);
}
if(isset($_GET['blocked'])) {
User::set_blocked($_GET['blocked'],$_GET['id_user']);
header("location:index.php?".$url_params_with_page);
}
require_once($_SERVER['DOCUMENT_ROOT']."/templates/header-admin.php");
?>
<div class="main-title">
<h1>Пользователи</h1>
</div>
<div class="users fr__users">
<div class="head-filter__top">
<div class="top-line">
<div class="head-filter-search">
<div class="form-search">
<form>
<input type="search" name="search" class="text" placeholder="Имя, эл. почта или номер телефона" value="<?php echo $_GET['search']; ?>">
<span class="search-icon">
<i class="ti-search"></i>
</span>
</form>
</div>
</div>
<div class="clear"></div>
</div>
<div class="switch__filter button-row">
<a href="/admin/index.php" class="selector-button button-left <?php if(!$_GET['agent'] && !$_GET['developer'] && !$_GET['search'] && !$_GET['block'] && !$_GET['active']) echo 'selected'; ?>">
<span>Агентства</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(0, false); ?></i>
</a>
<a href="/admin/index.php?agent=1" class="selector-button button-center <?php if($_GET['agent'] && !$_GET['block'] && !$_GET['active']) echo 'selected'; ?>">
<span>Агенты</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(1, false); ?></i>
</a>
<a href="/admin/index.php?developer=1" class="selector-button button-center <?php if($_GET['developer'] && !$_GET['block'] && !$_GET['active']) echo 'selected'; ?>">
<span>Застройщики</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountDeveloper(false); ?></i>
</a>
<a href="/admin/index.php?block=1" class="selector-button button-center <?php if(!$_GET['agent'] && !$_GET['developer'] && $_GET['block']) echo 'selected'; ?>">
<span>ЧС агентства</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(0, true); ?></i>
</a>
<a href="/admin/index.php?agent=1&block=1" class="selector-button button-right <?php if($_GET['agent'] && $_GET['block']) echo 'selected'; ?>">
<span>ЧС агенты</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(1, true); ?></i>
</a>
<!--
<a href="/admin/index.php?developer=1&block=1" class="selector-button button-right <?php if($_GET['developer'] && $_GET['block']) echo 'selected'; ?>">
<span>ЧС застройщики</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountDeveloper(true); ?></i>
</a> -->
<a href="/admin/index.php?active=1" class="selector-button button-center <?php if(!$_GET['agent'] && !$_GET['developer'] && !$_GET['domclick'] && !$_GET['block'] && $_GET['active']) echo 'selected'; ?>">
<span>Актив. агентства</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(0, false, true); ?></i>
</a>
<a href="/admin/index.php?agent=1&active=1" class="selector-button button-right <?php if($_GET['agent'] && !$_GET['block'] && $_GET['active']) echo 'selected'; ?>">
<span>Актив. агенты</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountAgency(1, false, true); ?></i>
</a>
<a href="/admin/index.php?developer=1&active=1" class="selector-button button-right <?php if($_GET['developer'] && !$_GET['block'] && $_GET['active']) echo 'selected'; ?>">
<span>Актив. застройщики</span>
<i class="filter_counter" style="display: block;"><?php echo User::getCountDeveloper(false, true); ?></i>
</a>
<div class="clear"></div>
</div>
</div>
<?php
$num_on_page = 10;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$from = ($page - 1) * $num_on_page;
if ($_GET['search']) {
$count_users = User::countUsers($_GET['agent']);
$users = [];
if ($count_users > 0) {
$users = User::searchUsers($_GET['agent'], $from, $num_on_page);
}
}
else if (isset($_GET['developer']))
{
$count_users = User::getCountDeveloper($_GET['block'], $_GET['active']);
$users = [];
if ($count_users > 0)
{
$users = User::getAllDeveloper($_GET['block'], $_GET['active'], $from, $num_on_page);
}
}
else {
$count_users = User::countAllAgency($_GET['agent'], $_GET['block'], $_GET['active']);
$users = [];
if ($count_users > 0) {
$users = User::getAllAgency($_GET['agent'], $_GET['block'], $_GET['active'], $from, $num_on_page);
}
}
$all_pages = ceil($count_users / $num_on_page);
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul><div class="clear"></div></div>';
$getUsersTime = microtime(true);
foreach($users as $agent)
{
$agent['moderation_advert'] = 0;
$result_frame = mysql_query("SELECT users.id, users.presentation_frame pf FROM users WHERE presentation_frame = 1 AND users.id = $agent_id");
if(mysql_num_rows(mysql_query("SELECT id FROM advert_moderation_agency WHERE agency_id={$agent['id']}")) > 0){
$agent['moderation_advert'] = 1;
}
if (mysql_num_rows($result_frame) > 0) {
$agent['presentation_frame'] = 1;
}
if($agent['blocked'])
{
$style = "style='background:rgba(247, 220, 220, 0.6);' title='Заблокирован'";
$word_blocked = "Разблокировать";
$new_block = 0;
}
else
{
$style = "";
$word_blocked = "Заблокировать";
$new_block = 1;
}
$online = mysql_fetch_assoc(mysql_query("SELECT DATE_FORMAT(entry,'%d.%m.%Y %H:%i') AS entry FROM online WHERE id_user=$agent[id]"));
if ($online)
{
$onl = "<div class='status green' title='Время захода'><i>$online[entry]</i></div>";
}
else
{
$onl = "<div class='status red' title='Последняя авторизация'><i>$agent[last_auth]</i></div>";
}
$role_box = "";
if ($agent['role_developer'])
{
$role_box = "<div class='status border' title='Застройщик'><i>Застройщик</i></div>";
}
if($agent['id_tarif'])
{
$oplata = "Оплачено";
$tarif = new Tarif;
$tarif->get($agent['id_tarif']);
$date_end = $agent['date_tarif'] + $tarif->period * 3600 * 24;
$date_end_f = date("d.m.Y H:i",$date_end);
$dney = ceil(($date_end - time()) / 24 / 3600);
if($dney < 0) {
$dney = 0; $oplata = "Не оплачено";
}
if ($dney == -0) {
$dney = 0;
}
$dney = "<a title='$date_end_f' href='#' class='changeTarif' data-id='$agent[id]' data-tarif='$agent[id_tarif]'>$dney ".padezh_day($dney)."</a>";
$tarif = "<a title='$date_end_f' href='#' class='changeTarif' data-id='$agent[id]' data-tarif='$agent[id_tarif]'>$agent[tarif]</a>";
}
else
{
$dney = "";
}
list($d,$m,$y) = explode(".",$agent['date_reg']);
$date_reg = $d." ".getRusMonth($m)." ".$y;
if($agent[id_manager])
{
$mstr = mysql_fetch_assoc(mysql_query("SELECT agency, manager, agency_name, first_name, last_name, middle_name, id_manager FROM users WHERE id=$agent[id_manager]"));
if($mstr['id_manager']) $mstr2 = mysql_fetch_assoc(mysql_query("SELECT agency, manager, agency_name, first_name, last_name, middle_name, id_manager FROM users WHERE id=$mstr[id_manager]"));
if($mstr['agency'])
{
$master = "Агентство $mstr[agency_name]";
}
else if ($mstr['manager'])
{
$master = "Менеджер " . trim($mstr['last_name'] . ' ' . $mstr['first_name'] . ' ' . $mstr['middle_name']) . " (" . trim($mstr2['last_name'] . ' ' . $mstr2['first_name'] . ' ' . $mstr2['middle_name']) . ")";
}
else
{
$master = "Агент " . trim($mstr['last_name'] . ' ' . $mstr['first_name'] . ' ' . $mstr['middle_name']); // хозяином агент быть не может, ну да пускай будет
}
}
else
{
$master = 0;
}
?>
<div class="user" <?php echo $style; ?>>
<div class="top">
<div class="date-status">
<span>Регистрация: <?php echo $date_reg; ?></span>
<div class="status border"><i><?php echo $oplata; ?></i></div>
<?php echo $onl; ?>
<?= $role_box; ?>
<?php if($_GET['search'] and $master) echo '<div class="status border"><i><b class="ti-bookmark"></b>&nbsp;'.$master.'</i></div>'; ?>
</div>
<h2><?php
if ($agent['agency'] == 1 || $agent['role_developer'] == 1)
echo $agent['agency_name'];
else
echo trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']);
?></h2>
<?php if ($agent['agency'] == 0 && $agent['agent'] == 1 && $agent['id_manager'] == 0 && $agent['id'] != 6189 && $agent['id'] != 2683) {
$sqlCountZipalPackFeed = "SELECT count(objects.id) FROM objects objects WHERE objects.id in
(SELECT p.object_id FROM advertising_package_object_publish p WHERE p.active = 1 and
p.user_id in (SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id]))))";
$rezCountZipalPackFeed = mysql_query($sqlCountZipalPackFeed, $mdb);
$feedZipalPackCount = (int)mysql_result($rezCountZipalPackFeed, 0);
$sqlCountZipalFeed = "SELECT count(objects.id)
FROM objects objects WHERE objects.add_to_zipal = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountZipalFeed = mysql_query($sqlCountZipalFeed, $mdb);
$feedZipalCount = (int)mysql_result($rezCountZipalFeed, 0) + $feedZipalPackCount;
$objectsZipalUrl = "https://joywork.ru/objects-from-feed.php?zipal=1&id_agent=".$agent['id'];
?>
<div style="padding: 7px 35px 15px 35px;"><b>Размещение на Zipal.ru</b>: &nbsp;&nbsp;<a target="_blank" href="<?php echo $objectsZipalUrl;?>"><?php echo $feedZipalCount; ?></a></div>
<?php }?>
<?php if (($agent['agency'] == 1 && $agent['agent'] == 1) || ($agent['agency'] == 0 && $agent['id_manager'] == 0 && $agent['manager'] == 0 && $agent['agent'] == 1)) {
$sqlCountFeed = "SELECT count(objects.id) FROM objects objects WHERE objects.archive <> 1 and objects.id_add_user > 0 and objects.add_to_yandex_feed = 1
and objects.id_add_user in (SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountFeed = mysql_query($sqlCountFeed, $mdb);
$feedCount = mysql_result($rezCountFeed,0);
$sqlCountAvitoFeed = "SELECT count(objects.id)
FROM objects objects
WHERE objects.archive <> 1
and objects.add_to_avito_feed = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountAvitoFeed = mysql_query($sqlCountAvitoFeed, $mdb);
$feedAvitoCount = mysql_result($rezCountAvitoFeed,0);
$sqlCountCianFeed = "SELECT count(objects.id)
FROM objects objects
WHERE objects.archive <> 1
and objects.add_to_cian_feed = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountCianFeed = mysql_query($sqlCountCianFeed, $mdb);
$feedCianCount = mysql_result($rezCountCianFeed,0);
$sqlCountDomFeed = "SELECT count(objects.id)
FROM objects objects
WHERE objects.archive <> 1
and objects.add_to_domclick_feed = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountDomFeed = mysql_query($sqlCountDomFeed, $mdb);
$feedDomCount = mysql_result($rezCountDomFeed,0);
$sqlCountEmlsFeed = "SELECT count(objects.id)
FROM objects objects
WHERE objects.archive <> 1
and objects.add_to_emls_feed = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountEmlsFeed = mysql_query($sqlCountEmlsFeed, $mdb);
$feedEmlsCount = mysql_result($rezCountEmlsFeed,0);
$sqlCountBnFeed = "SELECT count(objects.id)
FROM objects objects
WHERE objects.archive <> 1
and objects.add_to_bn_feed = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountBnFeed = mysql_query($sqlCountBnFeed, $mdb);
$feedBnCount = mysql_result($rezCountBnFeed, 0);
$sqlCountZipalPackFeed = "SELECT count(objects.id) FROM objects objects WHERE objects.id in
(SELECT p.object_id FROM advertising_package_object_publish p WHERE p.active = 1 and
p.user_id in (SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id]))))";
$rezCountZipalPackFeed = mysql_query($sqlCountZipalPackFeed, $mdb);
$feedZipalPackCount = (int)mysql_result($rezCountZipalPackFeed, 0);
$sqlCountZipalFeed = "SELECT count(objects.id)
FROM objects objects WHERE objects.add_to_zipal = 1 and objects.id_add_user in
(SELECT id FROM `users` WHERE id=$agent[id] or id_manager=$agent[id] or id_manager in (select id from users where id_manager=$agent[id]) or id_manager in (select id from users where id_manager in (select id from users where id_manager=$agent[id])))";
$rezCountZipalFeed = mysql_query($sqlCountZipalFeed, $mdb);
$feedZipalCount = (int)mysql_result($rezCountZipalFeed, 0) + $feedZipalPackCount;
$yandexFeedName = $agent['id'];
if ($yandexFeedName == 177) {
$yandexFeedName = "1ght764cndh";
}
$feedUrl = "https://joywork.ru/feeds/".$yandexFeedName.".xml";
$avFeedUrl = "https://joywork.ru/av_feeds/".$agent['id'].".xml";
$cianFeed2Url = "https://joywork.ru/cian_feed_v2/".$agent['id'].".xml";
$emlsFeed = "https://joywork.ru/cian_feed_jcat/".$agent['id'].".xml";
$bnYandexFeedUrl = "https://joywork.ru/bn_ya_feeds/".$agent['id'].".xml";
$domFeedUrl = "https://joywork.ru/dom_feeds/".$agent['id'].".xml";
$objectsUrl = "https://joywork.ru/objects-from-feed.php?id_agent=".$agent['id'];
$objectsAvitoUrl = "https://joywork.ru/objects-from-feed.php?avito=1&id_agent=".$agent['id'];
$objectsCianUrl = "https://joywork.ru/objects-from-feed.php?cian=1&id_agent=".$agent['id'];
$objectsEmlsUrl = "https://joywork.ru/objects-from-feed.php?emls=1&id_agent=".$agent['id'];
$objectsBnUrl = "https://joywork.ru/objects-from-feed.php?bn=1&id_agent=".$agent['id'];
$objectsZipalUrl = "https://joywork.ru/objects-from-feed.php?zipal=1&id_agent=".$agent['id'];
$objectsDomUrl = "https://joywork.ru/objects-from-feed.php?dom=1&id_agent=".$agent['id'];
?>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Яндекс</b>: <a target="_blank" href="<?php echo $feedUrl; ?>"><?php echo $feedUrl; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsUrl;?>"><?php echo $feedCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Авито</b>: <a target="_blank" href="<?php echo $avFeedUrl; ?>"><?php echo $avFeedUrl; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsAvitoUrl;?>"><?php echo $feedAvitoCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид ЦИАН v2</b>: <a target="_blank" href="<?php echo $cianFeed2Url; ?>"><?php echo $cianFeed2Url; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsCianUrl;?>"><?php echo $feedCianCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Циан Jcat</b>: <a target="_blank" href="<?php echo $emlsFeed; ?>"><?php echo $emlsFeed; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsEmlsUrl;?>"><?php echo $feedEmlsCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид яндекс для BN.ru</b>: <a target="_blank" href="<?php echo $bnYandexFeedUrl; ?>"><?php echo $bnYandexFeedUrl; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsBnUrl;?>"><?php echo $feedBnCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Домклик</b>: <a target="_blank" href="<?php echo $domFeedUrl; ?>"><?php echo $domFeedUrl; ?></a>&nbsp;&nbsp;(<a target="_blank" href="<?php echo $objectsDomUrl;?>"><?php echo $feedDomCount; ?></a>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Размещение на Zipal.ru</b>: &nbsp;&nbsp;<a target="_blank" href="<?php echo $objectsZipalUrl;?>"><?php echo $feedZipalCount; ?></a></div>
<?php } ?>
<?php if (($agent['role_developer'] == 1)) {
$sqlCountCianComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_cian_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountCianComplexFeed = mysql_query($sqlCountCianComplexFeed, $mdb);
$feedCianComplexCount = (int)mysql_result($rezCountCianComplexFeed, 0);
$sqlCountDomComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_domclick_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountDomComplexFeed = mysql_query($sqlCountDomComplexFeed, $mdb);
$feedDomComplexCount = (int)mysql_result($rezCountDomComplexFeed, 0);
$sqlCountYaComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_yandex_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountYaComplexFeed = mysql_query($sqlCountYaComplexFeed, $mdb);
$feedYaComplexCount = (int)mysql_result($rezCountYaComplexFeed, 0);
$sqlCountAvitoComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_avito_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountAvitoComplexFeed = mysql_query($sqlCountAvitoComplexFeed, $mdb);
$feedAvitoComplexCount = (int)mysql_result($rezCountAvitoComplexFeed, 0);
$sqlCountDomRfComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_domrf_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountDomRfComplexFeed = mysql_query($sqlCountDomRfComplexFeed, $mdb);
$feedDomRfComplexCount = (int)mysql_result($rezCountDomRfComplexFeed, 0);
$sqlCountSiteComplexFeed = "SELECT count(complex_rooms.id) FROM complex_rooms
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
JOIN complex_list ON complex_list.id = complex_houses.complex_id
LEFT JOIN complex_room_advert complex_room_advert ON complex_room_advert.complex_room_id = complex_rooms.id
WHERE complex_houses.is_archive = 0 and complex_room_advert.add_to_site_feed = 1 AND complex_list.agency_id={$agent['id']}";
$rezCountSiteComplexFeed = mysql_query($sqlCountSiteComplexFeed, $mdb);
$feedSiteComplexCount = (int)mysql_result($rezCountSiteComplexFeed, 0);
$avComplexFeedUrl = "https://joywork.ru/av_feeds_complex/".$agent['id'].".xml";
$domComplexFeedUrl = "https://joywork.ru/dom_feeds_complex/".$agent['id'].".xml";
$bnYandexComplexFeedUrl = "https://joywork.ru/bn_ya_feeds_complex/".$agent['id'].".xml";
$cianComplexFeedUrl = "https://joywork.ru/cian_feed_v2_complex/".$agent['id'].".xml";
$domRfComplexFeedUrl = "https://joywork.ru/dom_rf_feeds_complex/".$agent['id'].".xml";
$siteComplexFeedUrl = "https://joywork.ru/bn_ya_feeds_complex/".$agent['id']."_site.xml";
?>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Яндекс</b>: <a target="_blank" href="<?php echo $bnYandexComplexFeedUrl; ?>"><?php echo $bnYandexComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedYaComplexCount; ?>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Авито</b>: <a target="_blank" href="<?php echo $avComplexFeedUrl; ?>"><?php echo $avComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedAvitoComplexCount; ?>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид ЦИАН</b>: <a target="_blank" href="<?php echo $cianComplexFeedUrl; ?>"><?php echo $cianComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedCianComplexCount; ?>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Домклик</b>: <a target="_blank" href="<?php echo $domComplexFeedUrl; ?>"><?php echo $domComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedDomComplexCount; ?>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Дом.рф</b>: <a target="_blank" href="<?php echo $domRfComplexFeedUrl; ?>"><?php echo $domRfComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedDomRfComplexCount; ?>)</div>
<div style="padding: 7px 35px 15px 35px;"><b>Фид Сайт</b>: <a target="_blank" href="<?php echo $siteComplexFeedUrl; ?>"><?php echo $siteComplexFeedUrl; ?></a>&nbsp;&nbsp;(<?php echo $feedSiteComplexCount; ?>)</div>
<?php } ?>
</div>
<div class="center">
<div class="user_row row_line">
<div class="col tarif">
<p class="small">Тариф</p>
<p><b class="big pseudo"><?php echo $tarif; ?></b></p>
</div>
<div class="col days">
<p class="small">Осталось</p>
<p><b class="big"><?php echo $dney; ?></b></p>
</div>
<div class="clear"></div>
</div>
<div class="user_row">
<div class="col director">
<p class="small">Контактное лицо</p>
<p><b class="big"><?php echo trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']); ?></b></p>
</div>
<div class="col">
<p class="small">Телефон</p>
<p><b class="big"><?php echo $agent['phone']; ?></b></p>
</div>
<div class="col">
<p class="small">Эл.почта</p>
<p><b class="big"><?php echo $agent['email']; ?></b></p>
</div>
<div class="col">
<p class="small">Регион</p>
<p><b class="big"><?php echo $agent['name'] ?></b></p>
</div>
<div class="clear"></div>
</div>
<?php
if(!isset($_GET['agent']))
{
?>
<div class="user_row row_line employes">
<h3 class="employ">Сотрудники
<label class="fl-right hidden">
<span class="fr-btn edit-btn steel i-btn very-small tr_agency" data-id='<?php echo $agent['id']; ?>'>
Развернуть
</span>
</label>
</h3>
<div class="switch__filter filter-changer">
<ul>
<?php
$blockUsers = 0;
$managersCount = User::countAllManagers($agent['id']);
$usersCount = User::getAllAgents($agent['id']);
foreach ($usersCount as $key => $value) {
if($value["blocked"] == 1)
$blockUsers=$blockUsers+1;
}
?>
<li><a href="" class="pseudo show_managers" data-id='<?php echo $agent['id']; ?>'>Менеджеры <span style="color: #4CAF50; font-weight: bold;">(<?php echo $managersCount ?>)</span></a></li>
<li><a href="" class="pseudo show_agents" data-id='<?php echo $agent['id']; ?>'>Агенты <span style="color: #4CAF50; font-weight: bold;">(<?php echo count($usersCount); ?>)</span></a></li>
<li>Всего <span style="color: #4CAF50; font-weight: bold;"><?php echo (int)count($usersCount) + (int)$managersCount - (int)$blockUsers; ?></span></li>
</ul>
</div>
</div>
<div id='a<?php echo $agent['id']; ?>' class="hidden">
<div class="one-user user_row row_line row_head">
<div class="col">
<p class="small">Имя</p>
</div>
<div class="col">
<p class="small">Телефон</p>
</div>
<div class="col">
<p class="small">Эл.почта</p>
</div>
<div class="col">
<p class="small">Онлайн</p>
</div>
<div class="clear"></div>
</div>
<div id='b<?php echo $agent['id']; ?>'></div>
</div>
<?php
}
?>
</div>
<div class="bottom">
<?php if($_SESSION['id'] != $agent['id']) : ?>
<span><a href='<?php echo "?$url_params_with_page&blocked=$new_block&id_user=$agent[id]"; ?>' class="fr-btn edit-btn steel i-btn very-small"><?php echo $word_blocked; ?></a></span>
<?php endif; ?>
<?php if ($agent['agency'] == 1 && $agent['agent'] == 1) {?>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small switch-newbuildings" data-id="<?php echo $agent['id']; ?>"><?php if ($agent['newbuildings_access']) { echo "Выключить новостройки"; } else { echo "Включить новостройки"; }?></a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small switch-wazzap" data-id="<?php echo $agent['id']; ?>"><?php if ($agent['enable_wazzap']) { echo "Выключить Wazzup"; } else { echo "Включить Wazzup"; }?></a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small zipal-settings" data-id="<?php echo $agent['id']; ?>">Настройки Zipal - <?php if ($agent['zipal_login'] || $agent['zipal_password'] || $agent['zipal_balance']) { echo "Заполнено"; } else { echo "Пусто"; }?></a></span>
<?php } ?>
<?php if ($agent['agency'] == 0 && $agent['agent'] == 1) {?>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small zipal-settings" data-id="<?php echo $agent['id']; ?>">Настройки Zipal - <?php if ($agent['zipal_login'] || $agent['zipal_password'] || $agent['zipal_balance']) { echo "Заполнено"; } else { echo "Пусто"; }?></a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small switch-wazzap" data-id="<?php echo $agent['id']; ?>"><?php if ($agent['enable_wazzap']) { echo "Выключить Wazzup"; } else { echo "Включить Wazzup"; }?></a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small presentation-settings" data-id="<?php echo $agent['id']; ?>">Каталог новостроек</a></span>
<?php } ?>
<?php if ($agent['agency'] == 1 || $agent['role_developer'] == 1) {?>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small presentation-settings" data-id="<?php echo $agent['id']; ?>">Каталог новостроек</a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small switch-wazzap" data-id="<?php echo $agent['id']; ?>"><?php if ($agent['enable_wazzap']) { echo "Выключить Wazzup"; } else { echo "Включить Wazzup"; }?></a></span>
<span><a href="javascript:void(0);" class="fr-btn edit-btn steel i-btn very-small complex-iframe" data-id="<?php echo $agent['id']; ?>">Каталог комплексов</a></span>
<?php } ?>
<div class="admin-comment">
<div class="admin_comment_modal" id="admin_comment_<?php echo $agent['id']; ?>" style="display: none">
<textarea id="admin_comment_text_<?php echo $agent['id']; ?>"><?php echo $agent['comment']; ?></textarea>
<button class="fr-btn edit-btn steel close_admin_comment" data-id="<?php echo $agent['id']; ?>">Сохранить</button>
</div>
<span class="new_comment_btn"><a class="open_admin_comment fr-btn edit-btn steel i-btn very-small" data-id="<?php echo $agent['id']; ?>">Комментарий</a></span>
</div>
<div class="agent-new-password" style="display: inline-block;">
<div class="agent_pass_change_" id="agent_new_pass_for_<?php echo $agent['id']; ?>">
<input class="new_password_inp" style="margin-right: 15px; padding: 4px 10px; font-size: 12px;" autocomplete="new-password" placeholder="Введите новый пароль" type="password" id="new_password_for_<?php echo $agent['id']; ?>">
<button style="margin-right: 20px;" class="fr-btn edit-btn steel close_new_password very-small" data-id="<?php echo $agent['id']; ?>">Сохранить</button>
</div>
<span class="new_password_btn">
<a class="open_agent_new_password fr-btn edit-btn steel i-btn very-small" data-id="<?php echo $agent['id']; ?>">Изменить пароль</a>
</span>
</div>
<?php if ($agent['agency'] == 1 && $agent['agent'] == 1) {?>
<div class="checkbox small" style="margin-bottom: 10px; display: inline; width: 196px;">
<input id="is_moderation_advert_objetcs_<?=$agent['id']?>" class="advert_moderation" type="checkbox" value="1" data-id="<?php echo $agent['id']; ?>" <?=($agent['moderation_advert'] == 1) ? 'checked':''?>>
<label for="is_moderation_advert_objetcs_<?=$agent['id']?>">Модерация рекламы</label>
</div>
<!-- PRESENTATION FRAME -->
<div class="checkbox small" style="margin-bottom: 10px; display: inline; width: 196px; margin-left: 15px;">
<input id="presentation_frame_checkbox<?=$agent['id']?>" class="presentation_frame" type="checkbox" value="1" data-id="<?php echo $agent['id']; ?>" <?=($agent['presentation_frame'] == 1) ? 'checked':''?>>
<label for="presentation_frame_checkbox<?=$agent['id']?>">Презентация по региону</label>
</div>
<?php } ?>
</div>
</div>
<?php
}
echo '<div class="f-system_pagination" style="padding: 20px 20px 0 20px;"><ul class="pagination">';
if($all_pages > 1) {
num_of_pages($page, $all_pages, $url_params);
}
echo '</ul><div class="clear"></div></div>';
$cycleTime = microtime(true);
?>
</div>
<div class="full_modal-bg" id="changeTarif_bg" style="display: none;">
<span class="pseudo-link closer" onclick="hidechangeTarif(); return false;"><i class="ti-close"></i></span>
<div class="full_modal" id="changeTarif" style="display: none;">
<form>
<div class="modal-form">
<div class="modal-inner">
<h2>Тариф</h2>
<div class="form-block">
<div class="label">Тариф</div>
<div class="inputs">
<select name="id_tarif">
<?php
$trfs = Tarif::getAll();
foreach ($trfs as $i => $trf) {
if($trf['status'] == 1) $st = "style='background:rgba(234, 140, 140, 0.5);'"; else $st = "";
echo "<option value='$trf[id]' $st>$trf[nazv]</option>";
}
?>
</select>
</div>
<div class="clear"></div>
</div>
</div>
<div class="modal-submit">
<input type="hidden" name="id_user" value="0">
<?php
if (isset($_GET['page'])) {
?>
<input type="hidden" name="page" value="<?php echo $_GET['page']?>">
<?php
}
?>
<?php
if (isset($_GET['search'])) {
?>
<input type="hidden" name="search" value="<?php echo $_GET['search']?>">
<?php
}
?>
<?php if (isset($_GET['agent'])) {
?>
<input type="hidden" name="agent" value="<?php echo $_GET['agent']?>">
<?php
}
?>
<button type="submit" name="ok_tarif" value="1">Сохранить</button>
</div>
</div>
</form>
</div>
</div>
<script src="/js/admin-edit.js?t=<?php echo ceil(microtime(true)); ?>"></script>
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/templates/footer-admin.php");
$endtime = microtime(true);
//printf("Users get in %f seconds", $getUsersTime - $starttime );
//echo '<br/>';
//printf("Users cycle in %f seconds", $cycleTime - $starttime );
//echo '<br/>';
//printf("Page loaded in %f seconds", $endtime - $starttime );
?>

104
admin/loadBlockFiles.php Normal file
View File

@ -0,0 +1,104 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockProgressImageFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/BlockPlusFacade.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/TargetFactory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/DocNotFoundException.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/exception/TargetNotFoundException.php';
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
$result = "";
$updateContent = false;
$markupId = "";
for ($i = 0; $i < count($_FILES['docFiles']['name']); $i++) {
if ($_FILES['docFiles']['error'][$i] == 0) {
$ext = strtolower(pathinfo($_FILES['docFiles']['name'][$i], PATHINFO_EXTENSION));
$name = substr(md5($_POST['fold_id'] . '_' . $_POST['target_type'] . '_' . $_POST['target_id']), 0, 5) . time() . $i . '.' . strtolower($ext);
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/documents")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/documents");
}
$one = mb_substr($name, 0, 1);
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one");
}
$two = mb_substr($name, 1, 1);
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one/$two")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one/$two");
}
$three = mb_substr($name, 3, 1);
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one/$two/$three")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/documents/$one/$two/$three");
}
$new_path = "$one/$two/$three/$name";
$document = "/documents/" . $new_path;
move_uploaded_file($_FILES['docFiles']['tmp_name'][$i], $_SERVER['DOCUMENT_ROOT'] . $document);
$manager = new DocumentManager((new TargetFactory())->getTarget($_POST['target_id'], $_POST['target_type']));
$manager->saveFileTo(
// хак 70lvl
trim(pathinfo(' ' . $_FILES['docFiles']['name'][$i], PATHINFO_FILENAME)),
$document,
$_POST['fold_id']
);
$dirObject = $manager->getDir($_POST['fold_id']);
$path = $manager->getParents($dirObject->getId());
$collection = $manager->getChildren($dirObject->getId());
$updateContent = true;
$markupId = "documentsContent" . $_POST['target_type'];
} else {
$result .= "Превышен размер файла " . $_FILES['docFiles']['name'][$i];
}
}
?>
<script type="text/javascript">
if (parent.document.getElementById('doc-loader')) {
parent.document.getElementById('doc-loader').style.backgroundImage = '';
}
if (parent.document.getElementById('doc-progress-loader')) {
parent.document.getElementById('doc-progress-loader').style.backgroundImage = '';
}
if (parent.document.getElementById('doc-plus-loader')) {
parent.document.getElementById('doc-plus-loader').style.backgroundImage = '';
}
<?php if ($updateContent) { ?>
parent.document.getElementById('<?php echo $markupId; ?>').innerHTML = '<?php include($_SERVER['DOCUMENT_ROOT']."/admin/documentsWidget.php"); ?>';
<?php } ?>
parent.document.getElementById('upload-docs-form').target = '';
parent.document.getElementById('upload-docs-form').action = '';
parent.document.getElementById('upload-docs-button').disabled = false;
parent.document.getElementById('upload-progress-form').target = '';
parent.document.getElementById('upload-progress-form').action = '';
parent.document.getElementById('upload-progress-button').disabled = false;
parent.document.getElementById('upload-plus-form').target = '';
parent.document.getElementById('upload-plus-form').action = '';
parent.document.getElementById('upload-plus-button').disabled = false;
</script>

205
admin/migrate-articles.php Normal file
View File

@ -0,0 +1,205 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
if (!$_SESSION['superadmin']) { die('Доступ запрещён'); }
// Карта id → slug (из существующих PHP-заглушек)
$slugMap = [
1 => 'poisk-obektov-nedvizhimosti-scanner',
2 => 'multilistingovaya-sistema-partnerskikh-sdelok',
3 => 'voronki-prodazh-v-crm',
4 => 'avtopublikaciya-obyavlenij-na-200-sajtov',
5 => 'ip-telefoniya-i-kolltraking-v-crm',
6 => 'dokumentooborot-v-crm-dlja-rieltorov',
7 => 'baza-kommercheskoj-nedvizhimosti',
8 => 'kabinet-klienta-v-crm',
9 => 'odobrjaem-ipoteku-onlajn-broker',
10 => 'skvoznaja-analitika-v-nedvizhimosti',
11 => 'reklama-kvartiry-v-socsetyah',
12 => 'crm-dlja-agenta-reklama-200-sajtov',
13 => 'poisk-obektov-na-tematicheskih-sajtah',
14 => 'smart-voronka-prodazh-v-crm',
15 => 'integraciya-crm-s-ip-telefoniej',
16 => 'zakaz-svedenij-egrn-iz-crm',
17 => 'nakoplenie-klientskoj-bazy-targetirovannaya-reklama',
18 => 'dokumentooborot-rieltora-v-crm',
19 => 'avtomaticheskij-poisk-v-crm',
20 => 'upravlenie-tipami-razmeshchenij-obektov',
21 => 'internet-marketing-v-nedvizhimosti',
22 => 'kak-reklamirovat-nedvizhimost-na-ploshchadkah',
23 => 'strategii-prodvizheniya-agentstva-2023',
24 => 'analiz-rynka-rijeltorskih-uslug',
25 => 'servisy-po-poisku-nedvizhimosti',
26 => 'marketing-dlja-zastrojshhikov',
27 => 'analiz-obektov-nedvizhimosti',
28 => 'prezentacija-obektov-nedvizhimosti',
29 => 'parser-nedvizhimosti',
30 => 'poisk-obektov-nedvizhimosti-v-rezhime-online',
31 => 'kak-uvelichit-prodazhi-nedvizhimosti',
32 => 'na-kakih-sajtah-prodavat-nedvizhimost',
33 => 'avtomatizacija-prodazh-nedvizhimosti',
34 => 'instrumenty-rijeltora-nedvizhimosti',
35 => 'lidy-dlja-agentstva-nedvizhimosti',
36 => 'cel-vnedrenija-crm',
37 => 'rijeltor-nedvizhimosti-s-nulja',
38 => 'houmstejdzhing-kvartiry',
39 => 'prognoz-rynka-nedvizhimosti-2024',
40 => 'otchet-rijeltora-o-rabote',
41 => 'baza-novostroek-ot-zastrojshhika',
42 => 'klienty-na-nedvizhimost',
43 => 'opredelit-rynochnuju-stoimost-obekta',
44 => 'avtovygruzka-nedvizhimosti-na-avito',
45 => 'kak-otkryt-agentstvo-nedvizhimosti',
46 => 'flipping-v-nedvizhimosti',
47 => 'cifrovye-tehnologii-v-nedvizhimosti',
48 => 'cenoobrazovanie-na-rynke-nedvizhimosti',
49 => 'crm-sdelki-s-nedvizhimostju',
50 => 'upravlenie-reklamnymi-kampanijami',
51 => 'marketing-dlja-zastrojshhikov-vazhnost',
52 => 'srm-dlja-stroitelnoj-kompanii',
53 => 'kak-rijeltoru-najti-klientov',
54 => 'sajt-dlja-agentstva-nedvizhimosti',
55 => 'brend-agentstva-nedvizhimosti',
56 => 'reklama-dlja-rijeltora',
57 => 'franshiza-agentstva-nedvizhimosti',
58 => 'skript-holodnogo-zvonka',
59 => 'biznes-plan-agentstva-nedvizhimosti',
60 => 'struktura-agentstva-nedvizhimosti',
61 => 'oshibki-pri-vnedrenii-crm',
62 => 'cifrovizacija-nedvizhimosti',
63 => 'segmentacija-klientov-srm',
64 => 'utp-dlja-nedvizhimosti',
65 => 'avtomatizacija-raboty-rieltora',
66 => 'avtomatizaciya-otdela-prodazh-nedvizhimosti',
67 => 'otsenka-kvartiry-brokerom',
68 => 'servis-dlya-analiza-nedvizhimosti',
];
$src = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/article.php');
// Извлекаем скалярные поля метаданных через regex (без eval)
function extractArtField($src, $id, $field) {
if (preg_match('/\$art' . $id . '\[\'' . $field . '\'\]\s*=\s*"([^"]*?)"/u', $src, $m)) return $m[1];
if (preg_match("/\\\$art{$id}\\['{$field}'\\]\\s*=\\s*'([^']*?)'/u", $src, $m)) return $m[1];
return '';
}
function extractArtAuthorField($src, $id, $field) {
if (preg_match('/\$art' . $id . '\[\'author\'\]\s*=\s*\[.*?\'' . $field . '\'\s*=>\s*\'([^\']*?)\'/su', $src, $m)) return $m[1];
if (preg_match('/\$art' . $id . '\[\'author\'\]\s*=\s*\[.*?\'' . $field . '\'\s*=>\s*"([^"]*?)"/su', $src, $m)) return $m[1];
return '';
}
// Извлекаем HTML-контент из блоков if ($id == X) { ... }
function extractArtContent($src, $id) {
if (preg_match('/\$id == ' . $id . '\) \{ \?>(.*?)(?=<\?php \})/su', $src, $m)) {
return trim($m[1]);
}
return '';
}
function convertDate($d) {
$parts = explode('.', $d);
if (count($parts) === 3) return $parts[2] . '-' . $parts[1] . '-' . $parts[0];
return date('Y-m-d');
}
// Генерируем description из первого абзаца статьи (для SEO и карточек блога)
function generateDescription($content) {
if (!$content) return '';
// Берём первый <p> в статье
if (preg_match('/<p[^>]*>(.*?)<\/p>/s', $content, $m)) {
$text = strip_tags($m[1]);
$text = preg_replace('/\s+/u', ' ', $text);
$text = trim(html_entity_decode($text, ENT_QUOTES, 'UTF-8'));
// Обрезаем до ~160 символов (стандарт meta description), не разрезая слова
if (mb_strlen($text, 'UTF-8') > 160) {
$text = mb_substr($text, 0, 160, 'UTF-8');
$lastSpace = mb_strrpos($text, ' ', 0, 'UTF-8');
if ($lastSpace !== false) $text = mb_substr($text, 0, $lastSpace, 'UTF-8');
$text .= '…';
}
return $text;
}
return '';
}
// Считаем количество <script> блоков в контенте (для отчёта в dry-run)
function countScripts($content) {
return preg_match_all('/<script[\s\S]*?<\/script>/i', $content);
}
$dryRun = isset($_GET['dry']) && $_GET['dry'] == '1';
$results = [];
$errors = [];
for ($i = 1; $i <= 68; $i++) {
$title = extractArtField($src, $i, 'title');
if (!$title) {
$errors[] = "Нет title для статьи #$i";
continue;
}
$slug = isset($slugMap[$i]) ? $slugMap[$i] : Article::makeSlug($title);
$content = extractArtContent($src, $i);
$dateRaw = extractArtField($src, $i, 'date');
$updateRaw = extractArtField($src, $i, 'update');
$data = [
'slug' => $slug,
'title' => $title,
'page_title' => extractArtField($src, $i, 'pageTitle') ?: $title,
'description' => generateDescription($content),
'content' => $content,
'date_created' => $dateRaw ? convertDate($dateRaw) : date('Y-m-d'),
'date_updated' => $updateRaw ? convertDate($updateRaw) : date('Y-m-d'),
'reading_time' => max(1, (int)extractArtField($src, $i, 'time')),
'image' => extractArtField($src, $i, 'image'),
'author_name' => extractArtAuthorField($src, $i, 'name') ?: 'Станислав Дмитриев',
'author_img' => extractArtAuthorField($src, $i, 'img') ?: '/images/articles/rukofodJW.png',
'author_job' => extractArtAuthorField($src, $i, 'job') ?: 'руководитель JoyWork',
'published' => 1,
'sort_order' => $i,
];
$scriptsCount = countScripts($content);
if (!$dryRun) {
if (!Article::slugExists($slug)) {
Article::create($data);
$scriptsNote = $scriptsCount > 0 ? " | scripts: {$scriptsCount}" : '';
$results[] = "✓ #{$i}: {$title}{$scriptsNote}";
} else {
$results[] = "— #{$i}: пропущена (slug уже есть): {$slug}";
}
} else {
$contentInfo = strlen($content) ? strlen($content) . " симв." : '❌ пусто';
$scriptsInfo = $scriptsCount > 0 ? " | scripts: {$scriptsCount}" : '';
$descrInfo = $data['description'] ? ' | descr: ✓' : ' | descr: ❌';
$results[] = "[DRY] #{$i}: {$title}{$slug} | контент: {$contentInfo}{$scriptsInfo}{$descrInfo}";
}
}
?><!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Миграция статей</title>
<style>body{font-family:Arial;padding:20px;max-width:900px;} .ok{color:green;} .err{color:red;} pre{background:#f5f5f5;padding:15px;border-radius:4px;font-size:13px;line-height:1.6;white-space:pre-wrap;}</style>
</head><body>
<h2>Миграция статей из PHP в БД</h2>
<?php if ($dryRun): ?>
<p style="background:#fff3cd;padding:10px;border-radius:4px;">⚠️ Режим dry-run данные <strong>не записаны</strong>. Проверьте результаты и <a href="?">запустите реально</a>.</p>
<?php else: ?>
<p><a href="?dry=1">Dry-run (без записи)</a> | <a href="/admin/articles.php"> К списку статей</a></p>
<?php endif; ?>
<h3>Результат (<?= count($results) ?> / 68):</h3>
<pre><?php foreach ($results as $r) echo htmlspecialchars($r) . "\n"; ?></pre>
<?php if ($errors): ?>
<h3 class="err">Ошибки (<?= count($errors) ?>):</h3>
<pre class="err"><?php foreach ($errors as $e) echo htmlspecialchars($e) . "\n"; ?></pre>
<?php endif; ?>
<?php if (!$dryRun && empty($errors) && count($results) > 0): ?>
<p class="ok" style="font-size:16px;"><strong> Готово! <a href="/admin/articles.php">Перейти к статьям </a></strong></p>
<?php endif; ?>
</body></html>

Some files were not shown because too many files have changed in this diff Show More