317 lines
8.4 KiB
PHP
317 lines
8.4 KiB
PHP
<?php
|
|
|
|
namespace App\Bundle\Bitrix;
|
|
|
|
use Doctrine\DBAL\DriverManager;
|
|
use App\Bundle\Infoclinica\Region;
|
|
|
|
class Request
|
|
{
|
|
private $connect = null;
|
|
private $regionId = NULL;
|
|
|
|
public static $instance = NULL;
|
|
|
|
private function __construct() {}
|
|
|
|
public static function init($regionId = NULL)
|
|
{
|
|
if (self::$instance === null) {
|
|
self::$instance = new self();
|
|
self::$instance->connect = DriverManager::getConnection([
|
|
'url' => $_ENV['DATABASE_BITRIX_URL']
|
|
]);
|
|
|
|
self::$instance->connect->executeQuery("SET NAMES utf8");
|
|
|
|
if ($regionId == NULL) {
|
|
self::$instance->regionId = Region::getId();
|
|
} else {
|
|
self::$instance->regionId = $regionId;
|
|
}
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
public function setRegionId($id)
|
|
{
|
|
$this->regionId = $id;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getPropPriceId($param = 'value')
|
|
{
|
|
$props = [
|
|
'91' => [
|
|
'value' => 2980,
|
|
'name' => 'Саратов'
|
|
],
|
|
'comfort' => [
|
|
'value' => 2980,
|
|
'name' => 'Саратов Comfort'
|
|
],
|
|
'93' => [
|
|
'value' => 2985,
|
|
'name' => 'Воронеж'
|
|
],
|
|
'92' => [
|
|
'value' => 2990,
|
|
'name' => 'Волгоград'
|
|
],
|
|
'94' => [
|
|
'value' => 4477,
|
|
'name' => 'Краснодар'
|
|
],
|
|
|
|
];
|
|
|
|
return $props[$this->regionId][$param];
|
|
}
|
|
|
|
public function getBlockId($param = 'value')
|
|
{
|
|
$iblock_ids = [
|
|
'sovenok' => [
|
|
'value' => 174,
|
|
'uslugi' => 175,
|
|
'name' => 'Саратов Совенок'
|
|
],
|
|
'comfort' => [
|
|
'value' => 145,
|
|
'uslugi' => 146,
|
|
'name' => 'Саратов Comfort'
|
|
],
|
|
'91' => [
|
|
'value' => 91,
|
|
'uslugi' => 165,
|
|
'name' => 'Саратов'
|
|
],
|
|
'92' => [
|
|
'value' => 92,
|
|
'uslugi' => 167,
|
|
'name' => 'Волгоград'
|
|
],
|
|
'93' => [
|
|
'value' => 93,
|
|
'uslugi' => 166,
|
|
'name' => 'Воронеж'
|
|
],
|
|
'94' => [
|
|
'value' => 219,
|
|
'uslugi' => 229,
|
|
'name' => 'Краснодар'
|
|
],
|
|
];
|
|
|
|
return $iblock_ids[$this->regionId][$param];
|
|
}
|
|
|
|
public function getDoctors($isActive = false)
|
|
{
|
|
$specialist = $this->connect->createQueryBuilder()
|
|
->select('*')
|
|
->from('`b_iblock_element`', 'el')
|
|
->where('el.IBLOCK_ID = :IBLOCK_ID')
|
|
->andWhere('el.WF_PARENT_ELEMENT_ID IS NULL')
|
|
->andWhere('el.PREVIEW_PICTURE IS NOT NULL')
|
|
->setParameter('IBLOCK_ID', $this->getBlockId());
|
|
|
|
if ($isActive) {
|
|
$specialist
|
|
->andWhere('el.ACTIVE = :ACTIVE')
|
|
->setParameter('ACTIVE', 'Y');
|
|
}
|
|
|
|
$specialist = $specialist
|
|
->execute()
|
|
->fetchAll()
|
|
;
|
|
|
|
return $specialist;
|
|
}
|
|
|
|
public function getSpecialist($sid, $infoclinica = false)
|
|
{
|
|
$specialist = $this->connect->createQueryBuilder()
|
|
->select('*')
|
|
->from('`b_iblock_element`', 'el');
|
|
|
|
if ($infoclinica) {
|
|
$specialist
|
|
->where('el.XML_ID = :XML_ID')
|
|
->setParameter('XML_ID', $sid);
|
|
} else {
|
|
$specialist
|
|
->where('el.ID = :ID')
|
|
->setParameter('ID', $sid);
|
|
}
|
|
|
|
$specialist = $specialist
|
|
->execute()
|
|
->fetch()
|
|
;
|
|
|
|
if ($specialist) {
|
|
$specialist['NAME'] = explode(' ', trim($specialist['NAME']));
|
|
}
|
|
|
|
return $specialist;
|
|
}
|
|
|
|
|
|
// SELECT biep.IBLOCK_ELEMENT_ID as DOCTOR_ID FROM b_iblock_element_property biep LEFT JOIN b_iblock_property bip ON biep.IBLOCK_PROPERTY_ID = bip.ID WHERE biep.VALUE = $doctorId AND bip.CODE REGEXP 'MEDIC' AND bip.ACTIVE = 'Y'
|
|
|
|
// SELECT biep.VALUE, bip.NAME, bip.CODE FROM b_iblock_element bie INNER JOIN b_iblock_element_property biep ON biep.IBLOCK_ELEMENT_ID = bie.ID LEFT JOIN b_iblock_property bip ON biep.IBLOCK_PROPERTY_ID = bip.ID WHERE bie.ID = $itemID;
|
|
public function getReviews($doctorId, $infoclinica)
|
|
{
|
|
$specialist = $this->getSpecialist($doctorId, $infoclinica);
|
|
|
|
if (! $specialist) {
|
|
return [];
|
|
}
|
|
|
|
$items = $this->connect->createQueryBuilder()
|
|
->select('biep.IBLOCK_ELEMENT_ID as REVIEW_ID')
|
|
->from('b_iblock_element_property', 'biep')
|
|
->leftJoin('biep', 'b_iblock_property', 'bip', 'biep.IBLOCK_PROPERTY_ID = bip.ID')
|
|
->where('biep.VALUE = :VALUE')
|
|
->andWhere('bip.CODE REGEXP :CODE')
|
|
->setParameter('VALUE', $specialist['ID'])
|
|
->setParameter('CODE', 'MEDIC')
|
|
->execute()
|
|
->fetchAll()
|
|
;
|
|
|
|
foreach ($this->docPropsCode($specialist['ID'], 'LINK_REVIEWS') as $item) {
|
|
$items[]['REVIEW_ID'] = $item['VALUE'];
|
|
}
|
|
|
|
if (! empty($items)) {
|
|
foreach ($items as $key => $item) {
|
|
$items[$key]['DATA'] = $this->docPropsCode($item['REVIEW_ID']);
|
|
|
|
foreach ($items[$key]['DATA'] as $i => $props) {
|
|
if ($props['CODE'] == 'MESSAGE') {
|
|
$data = preg_replace_callback('!s:(\d+):"(.*?)";!s', function($m) {
|
|
$len = strlen($m[2]);
|
|
$result = "s:$len:\"{$m[2]}\";";
|
|
return $result;
|
|
}, $props['VALUE']);
|
|
|
|
if (@unserialize($data) !== false) {
|
|
$items[$key]['DATA'][$i]['VALUE'] = unserialize($data)['TEXT'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $items;
|
|
}
|
|
|
|
// select biep.ID, bie.ACTIVE, bie.IBLOCK_SECTION_ID, bie.DATE_CREATE, biep.VALUE, bip.NAME, bip.CODE
|
|
// from b_iblock_element bie
|
|
// inner join b_iblock_element_property biep on biep.IBLOCK_ELEMENT_ID = bie.ID
|
|
// left join b_iblock_property bip on biep.IBLOCK_PROPERTY_ID = bip.ID
|
|
// where bie.ID = :ID
|
|
public function docPropsCode($elementId, $code = NULL, $all = true)
|
|
{
|
|
$qb = $this->connect->createQueryBuilder()
|
|
->select('bie.NAME as BIE_NAME, biep.ID, bie.ACTIVE, bie.IBLOCK_SECTION_ID, bie.DATE_CREATE, biep.VALUE, bip.NAME, bip.CODE')
|
|
->from('b_iblock_element', 'bie')
|
|
->innerJoin('bie', 'b_iblock_element_property', 'biep', 'biep.IBLOCK_ELEMENT_ID = bie.ID')
|
|
->leftJoin('biep', 'b_iblock_property', 'bip', 'biep.IBLOCK_PROPERTY_ID = bip.ID')
|
|
->where('bie.ID = :ID')
|
|
->setParameter('ID', $elementId);
|
|
|
|
if ($code) {
|
|
$qb->andWhere('bip.CODE = :CODE')
|
|
->setParameter('CODE', $code);
|
|
}
|
|
|
|
if ($all) {
|
|
return $qb->execute()->fetchAll();
|
|
}
|
|
|
|
return $qb->execute()->fetch();
|
|
}
|
|
|
|
public function getImage($id)
|
|
{
|
|
$data = $this->connect->createQueryBuilder()
|
|
->select('*')
|
|
->from('b_file', 'f')
|
|
->where('f.ID = :ID')
|
|
->setParameter('ID', $id)
|
|
->execute()
|
|
->fetch()
|
|
;
|
|
|
|
if (empty($data['FILE_NAME'])) {
|
|
$response = '/images/no_img.png';
|
|
} else {
|
|
$response = 'https://sovamed.ru/upload/'. $data['SUBDIR'];
|
|
$response .= '/'. $data['FILE_NAME'];
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
// SELECT * FROM `b_iblock_section` WHERE ACTIVE = 'Y' AND IBLOCK_SECTION_ID IS NULL AND (IBLOCK_ID = 165 OR IBLOCK_ID = 166 OR IBLOCK_ID = 167);
|
|
public function getFilials()
|
|
{
|
|
return $this->connect->createQueryBuilder()
|
|
->select('ID, NAME, IBLOCK_ID, IBLOCK_SECTION_ID, ACTIVE')
|
|
->from('`b_iblock_section`', 'el')
|
|
->where('el.ACTIVE = :ACTIVE')
|
|
->andWhere('el.IBLOCK_ID = :IBLOCK_ID')
|
|
->andWhere('el.IBLOCK_SECTION_ID IS NULL')
|
|
->setParameter('ACTIVE', 'Y')
|
|
->setParameter('IBLOCK_ID', $this->getBlockId('uslugi'))
|
|
->execute()
|
|
->fetchAll()
|
|
;
|
|
}
|
|
|
|
public function getDepartments($sectionId)
|
|
{
|
|
try {
|
|
return $this->connect->createQueryBuilder()
|
|
->select('ID, NAME, IBLOCK_ID, IBLOCK_SECTION_ID, ACTIVE')
|
|
->from('`b_iblock_section`', 'el')
|
|
->where('el.ACTIVE = :ACTIVE')
|
|
->andWhere('el.IBLOCK_ID = :IBLOCK_ID')
|
|
->andWhere('el.IBLOCK_SECTION_ID = :IBLOCK_SECTION_ID')
|
|
->setParameter('ACTIVE', 'Y')
|
|
->setParameter('IBLOCK_SECTION_ID', $sectionId)
|
|
->setParameter('IBLOCK_ID', $this->getBlockId('uslugi'))
|
|
->execute()
|
|
->fetchAll()
|
|
;
|
|
} catch (Exception $e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function getServices($sectionId)
|
|
{
|
|
return $this->connect->createQueryBuilder()
|
|
->select('el.ID, el.NAME, el.IBLOCK_ID, el.IBLOCK_SECTION_ID, el.ACTIVE, prop.VALUE')
|
|
->from('`b_iblock_element`', 'el')
|
|
->leftJoin('el', 'b_iblock_element_property', 'prop',
|
|
'prop.IBLOCK_ELEMENT_ID = el.ID AND prop.IBLOCK_PROPERTY_ID = IBLOCK_PROPERTY_ID'
|
|
)
|
|
->where('el.ACTIVE = :ACTIVE')
|
|
->andWhere('el.IBLOCK_ID = :IBLOCK_ID')
|
|
->andWhere('el.IBLOCK_SECTION_ID = :IBLOCK_SECTION_ID')
|
|
->setParameter('ACTIVE', 'Y')
|
|
->setParameter('IBLOCK_SECTION_ID', $sectionId)
|
|
->setParameter('IBLOCK_PROPERTY_ID', $this->getPropPriceId())
|
|
->setParameter('IBLOCK_ID', $this->getBlockId('uslugi'))
|
|
->execute()
|
|
->fetchAll()
|
|
;
|
|
}
|
|
} |