//add option page
if(function_exists('acf_add_options_page')) {
acf_add_options_page(array(
'page_title' => 'Все настройки',
'menu_title' => 'Все настройки',
'menu_slug' => 'theme-general-settings',
'capability' => 'edit_posts',
'redirect' => false
));
acf_add_options_sub_page(array(
'page_title' => 'Настройки',
'menu_title' => 'Настройки',
'parent_slug' => 'edit.php?post_type=cities',
'capability' => 'edit_posts',
'redirect' => false
));
}
?>
#добавляем кастомные типы записей
function registerCustomPostType() {
#Города
$labels = array(
'name' => 'Города',
'singular_name' => 'Город',
'add_new' => 'Добавить город',
'add_new_item' => 'Добавить новый город',
'edit_item' => 'Редактировать город',
'new_item' => 'Новый город',
'all_items' => 'Все города',
'view_item' => 'Просмотр города',
'search_items' => 'Поиск городов',
'not_found' => 'Города не найдены',
'not_found_in_trash' => 'В корзине нет городов',
'menu_name' => 'Города'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-building',
'supports' => array(
'title'
)
);
register_post_type('cities', $args);
#Коворкинги
$labels = array(
'name' => 'Коворкинги',
'singular_name' => 'Коворкинги',
'add_new' => 'Добавить коворкинг',
'add_new_item' => 'Добавить новый коворкинг',
'edit_item' => 'Редактировать коворкинг',
'new_item' => 'Новый коворкинг',
'all_items' => 'Все коворкинги',
'view_item' => 'Просмотр коворкинга',
'search_items' => 'Поиск коворкингов',
'not_found' => 'Коворкинги не найдены',
'not_found_in_trash' => 'В корзине нет коворкингов',
'menu_name' => 'Коворкинги'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => true,
'menu_position' => -1,
'menu_icon' => 'dashicons-location-alt',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('coworking', $args);
#Уведомления клиенту
$labels = array(
'name' => 'Уведомления клиенту [EMAIL / SMS]',
'singular_name' => 'Уведомления клиенту',
'add_new' => 'Добавить уведомление',
'add_new_item' => 'Добавить новое уведомление',
'edit_item' => 'Редактировать уведомление',
'new_item' => 'Новое уведомление',
'all_items' => 'Все уведомления',
'view_item' => 'Просмотр уведомления',
'search_items' => 'Поиск уведомлений',
'not_found' => 'Уведомления не найдены',
'not_found_in_trash' => 'В корзине нет уведомлений',
'menu_name' => 'Уведомления клиенту'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-airplane',
'supports' => array(
'title'
)
);
register_post_type('client-notifications', $args);
#Помещения коворкингов
$labels = array(
'name' => 'Помещения коворкингов',
'singular_name' => 'Помещения коворкингов',
'add_new' => 'Добавить помещение коворкингов',
'add_new_item' => 'Добавить новое помещение коворкингов',
'edit_item' => 'Редактировать помещение коворкингов',
'new_item' => 'Новое помещение коворкингов',
'all_items' => 'Все помещения коворкингов',
'view_item' => 'Просмотр помещения коворкингов',
'search_items' => 'Поиск помещений коворкингов',
'not_found' => 'Помещения коворкингов не найдены',
'not_found_in_trash' => 'В корзине нет помещений коворкингов',
'menu_name' => 'Помещения коворкингов'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => false,
'menu_position' => -1,
'taxonomies' => array('coworking-spaces-types', 'coworking-spaces-categories', 'coworking-spaces-services'),
'menu_icon' => 'dashicons-admin-multisite',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('coworking-spaces', $args);
//home page: post_types
#ТопБлок (ГЛ)
$labels = array(
'name' => 'ТопБлок (ГЛ)',
'singular_name' => 'ТопБлок (ГЛ)',
'add_new' => 'Добавить топБлок',
'add_new_item' => 'Добавить новый топБлок',
'edit_item' => 'Редактировать топБлок',
'new_item' => 'Новый топБлок',
'all_items' => 'Все топБлоки',
'view_item' => 'Просмотр топБлоков',
'search_items' => 'Поиск топБлоков',
'not_found' => 'ТопБлоки не найдены',
'not_found_in_trash' => 'В корзине нет топБлоков',
'menu_name' => 'ТопБлок (ГЛ)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-welcome-view-site',
'supports' => array(
'title'
)
);
register_post_type('top-block-home', $args);
#О компании
$labels = array(
'name' => 'О компании',
'singular_name' => 'О компании',
'add_new' => 'Добавить описание о компании',
'add_new_item' => 'Добавить новое описание о компании',
'edit_item' => 'Редактировать описание о компании',
'new_item' => 'Новое описание о компании',
'all_items' => 'Все описания о компании',
'view_item' => 'Просмотр описаний о компании',
'search_items' => 'Поиск описаний о компании',
'not_found' => 'Описания о компании не найдены',
'not_found_in_trash' => 'В корзине нет описаний о компании',
'menu_name' => 'О компании'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-share-alt',
'supports' => array(
'title'
)
);
register_post_type('about-company', $args);
#Стандарты сети
$labels = array(
'name' => 'Стандарты сети',
'singular_name' => 'Стандарты сети',
'add_new' => 'Добавить стандарты сети',
'add_new_item' => 'Добавить новые стандарты сети',
'edit_item' => 'Редактировать стандарты сети',
'new_item' => 'Новые стандарты сети',
'all_items' => 'Все стандарты сети',
'view_item' => 'Просмотр стандартов сети',
'search_items' => 'Поиск стандартов сети',
'not_found' => 'Стандарты сети не найдены',
'not_found_in_trash' => 'В корзине нет стандартов сети',
'menu_name' => 'Стандарты сети'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-rest-api',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('company-standards', $args);
#Комьюнити
$labels = array(
'name' => 'Комьюнити',
'singular_name' => 'Комьюнити',
'add_new' => 'Добавить комьюнити',
'add_new_item' => 'Добавить новые комьюнити',
'edit_item' => 'Редактировать комьюнити',
'new_item' => 'Новые комьюнити',
'all_items' => 'Все комьюнити',
'view_item' => 'Просмотр комьюнити',
'search_items' => 'Поиск комьюнити',
'not_found' => 'Комьюнити не найдены',
'not_found_in_trash' => 'В корзине нет комьюнити',
'menu_name' => 'Комьюнити'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-universal-access-alt',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('community', $args);
#Партнеры
$labels = array(
'name' => 'Партнеры',
'singular_name' => 'Партнеры',
'add_new' => 'Добавить партнера',
'add_new_item' => 'Добавить нового партнера',
'edit_item' => 'Редактировать партнера',
'new_item' => 'Новый партнер',
'all_items' => 'Все партнеры',
'view_item' => 'Просмотр партнера',
'search_items' => 'Поиск партнеров',
'not_found' => 'Партнеры не найдены',
'not_found_in_trash' => 'В корзине нет партнеров',
'menu_name' => 'Партнеры'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-businessman',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('partners', $args);
#Фотогалерея
$labels = array(
'name' => 'Фотогалерея',
'singular_name' => 'Фотогалерея',
'add_new' => 'Добавить фотогалерею',
'add_new_item' => 'Добавить новую фотогалерею',
'edit_item' => 'Редактировать фотогалерею',
'new_item' => 'Новая фотогалерея',
'all_items' => 'Все фотогалерии',
'view_item' => 'Просмотр фотогалерии',
'search_items' => 'Поиск фотогалерей',
'not_found' => 'Фотогалереи не найдены',
'not_found_in_trash' => 'В корзине нет фотогалерей',
'menu_name' => 'Фотогалерея'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-format-gallery',
'supports' => array(
'title'
)
);
register_post_type('photogallery', $args);
#СМИ
$labels = array(
'name' => 'СМИ',
'singular_name' => 'СМИ',
'add_new' => 'Добавить СМИ',
'add_new_item' => 'Добавить новых СМИ',
'edit_item' => 'Редактировать СМИ',
'new_item' => 'Новое СМИ',
'all_items' => 'Все СМИ',
'view_item' => 'Просмотр СМИ',
'search_items' => 'Поиск СМИ',
'not_found' => 'СМИ не найдены',
'not_found_in_trash' => 'В корзине нет СМИ',
'menu_name' => 'СМИ'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-megaphone',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('mass-media', $args);
#Премии
$labels = array(
'name' => 'Премии',
'singular_name' => 'Премии',
'add_new' => 'Добавить премию',
'add_new_item' => 'Добавить новую премию',
'edit_item' => 'Редактировать премию',
'new_item' => 'Новая премия',
'all_items' => 'Все премии',
'view_item' => 'Просмотр премии',
'search_items' => 'Поиск премий',
'not_found' => 'Премии не найдены',
'not_found_in_trash' => 'В корзине нет премий',
'menu_name' => 'Премии'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-awards',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('awards', $args);
#БЕСТЪ: Достижения
$labels = array(
'name' => 'БЕСТЪ: Достижения',
'singular_name' => 'БЕСТЪ: Достижения',
'add_new' => 'Добавить достижение',
'add_new_item' => 'Добавить новое достижение',
'edit_item' => 'Редактировать достижение',
'new_item' => 'Новое достижение',
'all_items' => 'Все достижения',
'view_item' => 'Просмотр достижений',
'search_items' => 'Поиск достижений',
'not_found' => 'Достижения не найдены',
'not_found_in_trash' => 'В корзине нет достижений',
'menu_name' => 'Достижения'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-thumbs-up',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('best-brand', $args);
#БЕСТЪ: Другие проекты
$labels = array(
'name' => 'БЕСТЪ: Другие проекты',
'singular_name' => 'БЕСТЪ: Другие проекты',
'add_new' => 'Добавить проект',
'add_new_item' => 'Добавить новый проект',
'edit_item' => 'Редактировать проект',
'new_item' => 'Новые проект',
'all_items' => 'Все проекты',
'view_item' => 'Просмотр проектов',
'search_items' => 'Поиск проектов',
'not_found' => 'Проекты не найдены',
'not_found_in_trash' => 'В корзине нет проектов',
'menu_name' => 'Другие проекты'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-networking',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('best-other-projects', $args);
#Мероприятия
$labels = array(
'name' => 'Мероприятия',
'singular_name' => 'Мероприятия',
'add_new' => 'Добавить мероприятие',
'add_new_item' => 'Добавить новое мероприятие',
'edit_item' => 'Редактировать мероприятие',
'new_item' => 'Новое мероприятие',
'all_items' => 'Все мероприятия',
'view_item' => 'Просмотр мероприятий',
'search_items' => 'Поиск мероприятий',
'not_found' => 'Мероприятия не найдены',
'not_found_in_trash' => 'В корзине нет мероприятий',
'menu_name' => 'Мероприятия'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => true,
'menu_position' => -1,
'taxonomies' => array('events-categories'),
'menu_icon' => 'dashicons-calendar-alt',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('events', $args);
#Кейсы
$labels = array(
'name' => 'Кейсы',
'singular_name' => 'Кейсы',
'add_new' => 'Добавить кейс',
'add_new_item' => 'Добавить новый кейс',
'edit_item' => 'Редактировать кейс',
'new_item' => 'Новый кейс',
'all_items' => 'Все кейсы',
'view_item' => 'Просмотр кейсов',
'search_items' => 'Поиск кейсов',
'not_found' => 'Кейсы не найдены',
'not_found_in_trash' => 'В корзине нет кейсов',
'menu_name' => 'Кейсы'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => true,
'menu_position' => -1,
'menu_icon' => 'dashicons-superhero',
'supports' => array(
'title'
)
);
register_post_type('cases', $args);
//coworking: post_types
#ТопБлок (ГЛ)
$labels = array(
'name' => 'ТопБлок (КВ)',
'singular_name' => 'ТопБлок (КВ)',
'add_new' => 'Добавить топБлок',
'add_new_item' => 'Добавить новый топБлок',
'edit_item' => 'Редактировать топБлок',
'new_item' => 'Новый топБлок',
'all_items' => 'Все топБлоки',
'view_item' => 'Просмотр топБлоков',
'search_items' => 'Поиск топБлоков',
'not_found' => 'ТопБлоки не найдены',
'not_found_in_trash' => 'В корзине нет топБлоков',
'menu_name' => 'ТопБлок (КВ)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-welcome-view-site',
'supports' => array(
'title'
)
);
register_post_type('top-block-coworking', $args);
#Атмосфера
$labels = array(
'name' => 'Атмосфера',
'singular_name' => 'Атмосфера',
'add_new' => 'Добавить атмосферу',
'add_new_item' => 'Добавить новую атмосферу',
'edit_item' => 'Редактировать атмосферу',
'new_item' => 'Новая атмосферу',
'all_items' => 'Все атмосферы',
'view_item' => 'Просмотр атмосферы',
'search_items' => 'Поиск атмосфер',
'not_found' => 'Атмосферы не найдены',
'not_found_in_trash' => 'В корзине нет атмосфер',
'menu_name' => 'Атмосфера'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-buddicons-activity',
'supports' => array(
'title'
)
);
register_post_type('atmosphere', $args);
#Пространство
$labels = array(
'name' => 'Пространство',
'singular_name' => 'Пространство',
'add_new' => 'Добавить пространство',
'add_new_item' => 'Добавить новое пространство',
'edit_item' => 'Редактировать пространство',
'new_item' => 'Новое пространство',
'all_items' => 'Все пространства',
'view_item' => 'Просмотр пространства',
'search_items' => 'Поиск пространств',
'not_found' => 'Пространства не найдены',
'not_found_in_trash' => 'В корзине нет пространств',
'menu_name' => 'Пространство'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-tide',
'supports' => array(
'title'
)
);
register_post_type('space', $args);
#Услуги (табы)
$labels = array(
'name' => 'Услуги (табы)',
'singular_name' => 'Услуги (табы)',
'add_new' => 'Добавить услугу',
'add_new_item' => 'Добавить новую услугу',
'edit_item' => 'Редактировать услугу',
'new_item' => 'Новая услуга',
'all_items' => 'Все услуги',
'view_item' => 'Просмотр услуги',
'search_items' => 'Поиск услуг',
'not_found' => 'Услуги не найдены',
'not_found_in_trash' => 'В корзине нет услуг',
'menu_name' => 'Услуги (табы)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-portfolio',
'supports' => array(
'title'
)
);
register_post_type('services-tabs', $args);
#Тарифы
$labels = array(
'name' => 'Тарифы',
'singular_name' => 'Тарифы',
'add_new' => 'Добавить тариф',
'add_new_item' => 'Добавить новый тариф',
'edit_item' => 'Редактировать тариф',
'new_item' => 'Новый тариф',
'all_items' => 'Все тарифы',
'view_item' => 'Просмотр тарифа',
'search_items' => 'Поиск тарифов',
'not_found' => 'Тарифы не найдены',
'not_found_in_trash' => 'В корзине нет тарифов',
'menu_name' => 'Тарифы'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-tickets-alt',
'supports' => array(
'title'
)
);
register_post_type('rates-coworking', $args);
#Услуги (список)
$labels = array(
'name' => 'Услуги (список)',
'singular_name' => 'Услуги (список)',
'add_new' => 'Добавить услугу',
'add_new_item' => 'Добавить новую услугу',
'edit_item' => 'Редактировать услугу',
'new_item' => 'Новая услуга',
'all_items' => 'Все услуги',
'view_item' => 'Просмотр услуги',
'search_items' => 'Поиск услуг',
'not_found' => 'Услуги не найдены',
'not_found_in_trash' => 'В корзине нет услуг',
'menu_name' => 'Услуги (список)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-schedule',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('services-list', $args);
//bs: post_types
#ТопБлок (БС)
$labels = array(
'name' => 'ТопБлок (БС)',
'singular_name' => 'ТопБлок (БС)',
'add_new' => 'Добавить топБлок',
'add_new_item' => 'Добавить новый топБлок',
'edit_item' => 'Редактировать топБлок',
'new_item' => 'Новый топБлок',
'all_items' => 'Все топБлоки',
'view_item' => 'Просмотр топБлоков',
'search_items' => 'Поиск топБлоков',
'not_found' => 'ТопБлоки не найдены',
'not_found_in_trash' => 'В корзине нет топБлоков',
'menu_name' => 'ТопБлок (БС)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-welcome-view-site',
'supports' => array(
'title'
)
);
register_post_type('top-block-bs', $args);
#Ресурсы (БС)
$labels = array(
'name' => 'Ресурсы',
'singular_name' => 'Ресурсы',
'add_new' => 'Добавить ресурсы',
'add_new_item' => 'Добавить новые ресурсы',
'edit_item' => 'Редактировать ресурсы',
'new_item' => 'Новые ресурсы',
'all_items' => 'Все ресурсы',
'view_item' => 'Просмотр ресурсов',
'search_items' => 'Поиск ресурсов',
'not_found' => 'Ресурсы не найдены',
'not_found_in_trash' => 'В корзине нет ресурсов',
'menu_name' => 'Ресурсы'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-art',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('business-tasks-bs', $args);
#Для работы (БС)
$labels = array(
'name' => 'Для работы',
'singular_name' => 'Для работы',
'add_new' => 'Добавить данные',
'add_new_item' => 'Добавить новые данные',
'edit_item' => 'Редактировать данные',
'new_item' => 'Новые данные',
'all_items' => 'Все данные',
'view_item' => 'Просмотр данных',
'search_items' => 'Поиск данных',
'not_found' => 'Данные не найдена',
'not_found_in_trash' => 'В корзине нет данных',
'menu_name' => 'Для работы'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-image-filter',
'supports' => array(
'title'
)
);
register_post_type('work-environment-bs', $args);
#Для жизни (БС)
// $labels = array(
// 'name' => 'Для жизни',
// 'singular_name' => 'Для жизни',
// 'add_new' => 'Добавить данные',
// 'add_new_item' => 'Добавить новые данные',
// 'edit_item' => 'Редактировать данные',
// 'new_item' => 'Новые данные',
// 'all_items' => 'Все данные',
// 'view_item' => 'Просмотр данных',
// 'search_items' => 'Поиск данных',
// 'not_found' => 'Данные не найдена',
// 'not_found_in_trash' => 'В корзине нет данных',
// 'menu_name' => 'Для жизни'
// );
// $args = array(
// 'labels' => $labels,
// 'public' => true,
// 'show_ui' => true,
// 'has_archive' => false,
// 'publicly_queryable' => false,
// 'menu_position' => -1,
// 'menu_icon' => 'dashicons-cloud',
// 'supports' => array(
// 'title'
// )
// );
// register_post_type('life-environment-bs', $args);
#Для обучения (БС)
$labels = array(
'name' => 'Для обучения',
'singular_name' => 'Для обучения',
'add_new' => 'Добавить данные',
'add_new_item' => 'Добавить новые данные',
'edit_item' => 'Редактировать данные',
'new_item' => 'Новые данные',
'all_items' => 'Все данные',
'view_item' => 'Просмотр данных',
'search_items' => 'Поиск данных',
'not_found' => 'Данные не найдена',
'not_found_in_trash' => 'В корзине нет данных',
'menu_name' => 'Для обучения'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-buddicons-community',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('tch-environment-bs', $args);
#Спикеры (БС)
$labels = array(
'name' => 'Спикеры',
'singular_name' => 'Спикеры',
'add_new' => 'Добавить спикера',
'add_new_item' => 'Добавить нового спикера',
'edit_item' => 'Редактировать спикера',
'new_item' => 'Новый спикер',
'all_items' => 'Все спикеры',
'view_item' => 'Просмотр спикеров',
'search_items' => 'Поиск спикеров',
'not_found' => 'Спикеры не найдена',
'not_found_in_trash' => 'В корзине нет спикеров',
'menu_name' => 'Спикеры'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-sos',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('speakers-bs', $args);
#Карта клуба (БС)
$labels = array(
'name' => 'Карта клуба',
'singular_name' => 'Карта клуба',
'add_new' => 'Добавить карту клуба',
'add_new_item' => 'Добавить новую карту клуба',
'edit_item' => 'Редактировать карту клуба',
'new_item' => 'Новая карта клуба',
'all_items' => 'Все карты клуба',
'view_item' => 'Просмотр карт клуба',
'search_items' => 'Поиск карт клуба',
'not_found' => 'Карты клуба не найдена',
'not_found_in_trash' => 'В корзине нет карт клуба',
'menu_name' => 'Карта клуба'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-buddicons-replies',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('cb-form-bs', $args);
#Привилегии (БС)
$labels = array(
'name' => 'Привилегии',
'singular_name' => 'Привилегии',
'add_new' => 'Добавить привилегию',
'add_new_item' => 'Добавить новую привилегию',
'edit_item' => 'Редактировать привилегию',
'new_item' => 'Новая привилегия',
'all_items' => 'Все привилегии',
'view_item' => 'Просмотр привилегий',
'search_items' => 'Поиск привилегий',
'not_found' => 'Привилегии не найдена',
'not_found_in_trash' => 'В корзине нет привилегий',
'menu_name' => 'Привилегии'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-buddicons-groups',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('privilege-bs', $args);
#ТопБлок (ПК)
$labels = array(
'name' => 'ТопБлок (ПК)',
'singular_name' => 'ТопБлок (ПК)',
'add_new' => 'Добавить топБлок',
'add_new_item' => 'Добавить новый топБлок',
'edit_item' => 'Редактировать топБлок',
'new_item' => 'Новый топБлок',
'all_items' => 'Все топБлоки',
'view_item' => 'Просмотр топБлоков',
'search_items' => 'Поиск топБлоков',
'not_found' => 'ТопБлоки не найдены',
'not_found_in_trash' => 'В корзине нет топБлоков',
'menu_name' => 'ТопБлок (ПК)'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-welcome-view-site',
'supports' => array(
'title'
)
);
register_post_type('top-block-pk', $args);
#Типы помещений (ПК)
$labels = array(
'name' => 'Типы помещений (ПК)',
'singular_name' => 'Типы помещений (ПК)',
'add_new' => 'Добавить тип помещения',
'add_new_item' => 'Добавить новый тип помещения',
'edit_item' => 'Редактировать тип помещения',
'new_item' => 'Новый тип помещения',
'all_items' => 'Все типы помещений',
'view_item' => 'Просмотр типа помещения',
'search_items' => 'Поиск типов помещений',
'not_found' => 'Типы помещений не найдены',
'not_found_in_trash' => 'В корзине нет типов помещений',
'menu_name' => 'Типы помещений'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-block-default',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('rooms-pk', $args);
#Помещения (ПК)
$labels = array(
'name' => 'Помещения (ПК)',
'singular_name' => 'Помещения (ПК)',
'add_new' => 'Добавить помещение',
'add_new_item' => 'Добавить новое помещение',
'edit_item' => 'Редактировать помещение',
'new_item' => 'Новое помещение',
'all_items' => 'Все помещения',
'view_item' => 'Просмотр помещения',
'search_items' => 'Поиск помещений',
'not_found' => 'Помещения не найдены',
'not_found_in_trash' => 'В корзине нет помещений',
'menu_name' => 'Помещения'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-open-folder',
'supports' => array(
'title'
)
);
register_post_type('rent-pk', $args);
#Инфраструктура (ПК)
$labels = array(
'name' => 'Инфраструктура (ПК)',
'singular_name' => 'Инфраструктура (ПК)',
'add_new' => 'Добавить инфраструктуру',
'add_new_item' => 'Добавить новую инфраструктуру',
'edit_item' => 'Редактировать инфраструктуру',
'new_item' => 'Новая инфраструктура',
'all_items' => 'Все инфраструктуры',
'view_item' => 'Просмотр инфраструктуры',
'search_items' => 'Поиск инфраструктур',
'not_found' => 'Инфраструктура не найдены',
'not_found_in_trash' => 'В корзине нет инфраструктур',
'menu_name' => 'Инфраструкт.'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => false,
'publicly_queryable' => false,
'menu_position' => -1,
'menu_icon' => 'dashicons-food',
'supports' => array(
'title',
'thumbnail'
)
);
register_post_type('infrastructure-pk', $args);
}
add_action('init', 'registerCustomPostType');
#добавляем кастомные таксономии
function registerCustomTaxonomies() {
#Категории для раздела: "Мероприятия"
$labels = array(
'name' => 'Категории',
'singular_name' => 'Категории',
'search_items' => 'Искать категории',
'all_items' => 'Все категории',
'parent_item' => 'Родительская категория',
'parent_item_colon' => 'Родительская категория',
'edit_item' => 'Редактировать категорию',
'update_item' => 'Обновить категорию',
'add_new_item' => 'Добавить новую категорию',
'new_item_name' => 'Имя новой категории',
'menu_name' => 'Категории',
);
register_taxonomy('events-categories', array('events'), array(
'labels' => $labels,
'public' => false,
'hierarchical' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'_builtin' => true
));
#Типы помещений для раздела: "Помещения коворкингов"
$labels = array(
'name' => 'Типы помещений',
'singular_name' => 'Типы помещений',
'search_items' => 'Искать типы помещений',
'all_items' => 'Все типы помещений',
'parent_item' => 'Родительский тип помещения',
'parent_item_colon' => 'Родительский тип помещения',
'edit_item' => 'Редактировать тип помещения',
'update_item' => 'Обновить тип помещения',
'add_new_item' => 'Добавить новый тип помещения',
'new_item_name' => 'Имя нового типа помещения',
'menu_name' => 'Типы помещений',
);
register_taxonomy('coworking-spaces-types', array('coworking-spaces'), array(
'labels' => $labels,
'public' => false,
'hierarchical' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'_builtin' => true
));
#Категории для раздела: "Помещения коворкингов"
$labels = array(
'name' => 'Категории',
'singular_name' => 'Категории',
'search_items' => 'Искать категории',
'all_items' => 'Все категории',
'parent_item' => 'Родительская категория',
'parent_item_colon' => 'Родительская категория',
'edit_item' => 'Редактировать категорию',
'update_item' => 'Обновить категорию',
'add_new_item' => 'Добавить новую категорию',
'new_item_name' => 'Имя новой категории',
'menu_name' => 'Категории',
);
register_taxonomy('coworking-spaces-categories', array('coworking-spaces'), array(
'labels' => $labels,
'public' => false,
'hierarchical' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'_builtin' => true
));
#Услуги для раздела: "Помещения коворкингов"
$labels = array(
'name' => 'Услуги',
'singular_name' => 'Услуги',
'search_items' => 'Искать услуги',
'all_items' => 'Все услуги',
'parent_item' => 'Родительская услуга',
'parent_item_colon' => 'Родительская услуга',
'edit_item' => 'Редактировать услугу',
'update_item' => 'Обновить услугу',
'add_new_item' => 'Добавить новую услугу',
'new_item_name' => 'Имя новой услуги',
'menu_name' => 'Услуги',
);
register_taxonomy('coworking-spaces-services', array('coworking-spaces'), array(
'labels' => $labels,
'public' => false,
'hierarchical' => true,
'show_in_nav_menus' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'_builtin' => true
));
}
add_action('init', 'registerCustomTaxonomies', 0);
?>
// add_filter('redirect_canonical', 'wpse51530_redirect_canonical', 10, 2);
//
// function wpse51530_redirect_canonical($redirect_url, $requested_url) {
// // if ($requested_url == 'https://avenue.pageclub.ru/') {
// //
// // } else {
// // return $redirect_url;
// // }
// return $redirect_url;
// }
function getCoworkingSubdomainRules($post) {
$rules = [];
$rules["trackback/?$"] = "index.php?pagename=".$post->post_name."&tb=1";
$rules["feed/(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?pagename='.$post->post_name.'&feed=$matches[1]';
$rules["(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?pagename='.$post->post_name.'&feed=$matches[1]';
$rules["coworking/?([0-9]{1,})/?$"] = 'index.php?pagename='.$post->post_name.'&paged=$matches[1]';
$rules["comment-page-([0-9]{1,})/?$"] = 'index.php?pagename='.$post->post_name.'&cpage=$matches[1]';
$rules["wc-api(/(.*))?/?$"] = 'index.php?pagename='.$post->post_name.'&wc-api=$matches[2]';
$rules["$"] = "index.php?pagename=".$post->post_name;
$rules['([^/]+)/?$'] = 'index.php?pagename='.$post->post_name.'/$matches[1]';
return $rules;
}
#coworkings as subdomain
add_filter('coworking_rewrite_rules', function($rules) {
$url = getenv('HTTP_HOST');
$domain = explode(".", $url);
$pageslug = $domain[0];
$coworkings = get_posts([
'post_type' => 'coworking',
'posts_per_page' => '-1'
]);
foreach ($coworkings as $coworking) {
if (($pageslug == $coworking->post_name) || ($pageslug == $coworking->subdomain)) {
$newrules = getCoworkingSubdomainRules($coworking);
$rules = $newrules + $rules;
}
}
return $rules;
});
function is_fr() {
return (is_page('franchise') || is_page('management')) ? true : false;
}
function is_coworking_subDomain() {
$url = getenv('HTTP_HOST');
$domain = explode(".", $url);
return ($domain[0] == 'avenue' || $domain[0] == 'benua' || $domain[0] == 'rodelen' || $domain[0] == 'instrumentalnaya' || $domain[0] == 'kazanskaya' || $domain[0] == 'ugol' || $domain[0] == 'docklands' || $domain[0] == 'smolninsky' || $domain[0] == 'vyatka' || $domain[0] == 'ratusha') ? true : false;
}
class multiCities {
public $allCities = array();
public $defaultSubdomain;
public $currentSubDomain;
public $currentCityId;
public $currentCityTitle;
public $currentCityTitleCase;
#сохраняем данные в переменные
public function __construct() {
$this->defaultSubdomain = $this->getDefaultSubdomain();
$this->currentSubDomain = $this->getCurrentSubDomain();
$this->allCities = $this->getAllCities();
$this->currentCityId = ($val = $this->getCurrentCityData()) ? $val->ID : '';
$this->currentCityTitle = ($val = $this->getCurrentCityData()) ? $val->post_title : '';
$this->currentCityTitleCase = ($val = $this->getCurrentCityData()->title_case) ? $val : $this->currentCityTitle;
add_action('rest_api_init', function () {
register_rest_route('wp/v2', '/coworking/get-by-city-id', array(
'methods' => 'GET',
'callback' => array($this, 'coworkingListByCity'),
'args' => array(
'id' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric($param);
}
))));
});
add_action('rest_api_init', function () {
register_rest_route('wp/v2', '/coworking/get-city-coworking', array(
'methods' => 'GET',
'callback' => array($this, 'cityCoworkingList')
));
});
}
#получаем домен по умолчанию
public function getDefaultSubdomain() {
if ($defaultCity = get_field('default_city', 'option')) {
return $defaultCity->subdomain;
}
}
#проверяем валидный (существует) ли поддомен
public function checkIfSubDomainExist($subdomain) {
return (get_posts(array(
'numberposts' => 1,
'post_type' => 'cities',
'fields' => array('ID'),
'meta_key' => 'subdomain',
'meta_value' => $subdomain
))) ? true : false;
}
#получаем поддомен текущего города (в случае если поддомена нет - делаем редирект)
public function getCurrentSubDomain() {
if (preg_match('/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/i', $_SERVER['HTTP_HOST'], $matcher)) {
if ($this->checkIfSubDomainExist($matcher[1])) {
return $matcher[1];
} else {
if ($matcher[1] == 'franchise' || $matcher[1] == 'management' || $matcher[1] == 'avenue' || $matcher[1] == 'benua' || $matcher[1] == 'rodelen' || $matcher[1] == 'instrumentalnaya' || $matcher[1] == 'kazanskaya' || $matcher[1] == 'ugol' || $matcher[1] == 'docklands' || $matcher[1] == 'smolninsky' || $matcher[1] == 'vyatka' || $matcher[1] == 'ratusha') {
return $this->defaultSubdomain;
} else {
header('Location: https://'.$this->defaultSubdomain.'.'.explode($matcher[1].'.', $_SERVER['HTTP_HOST'])[1].'/');
exit();
}
}
} else {
header('Location: https://'.$this->defaultSubdomain.'.'.$_SERVER['HTTP_HOST'].'/');
exit();
}
}
#получаем список всех городов
public function getAllCities() {
$items = get_posts(array(
'numberposts' => -1,
'post_type' => 'cities'
));
return $items;
}
#получаем данные текущего города
public function getCurrentCityData() {
foreach ($this->allCities as $item) {
if ($item->subdomain == $this->currentSubDomain) {
return $item;
}
}
}
#получаем данные acf repeater текущего города
public function getCurrentCityRepeaterData($items) {
foreach ($items as $item) {
if ($item['city'] == $this->currentCityId) {
return $item;
}
}
}
#добавляем свой rest-api метод для получения списка коворкингов по ID города
public function coworkingListByCity($request) {
$id = $request->get_param('id');
$data = array();
$mapData = array();
$images = array();
if (!isset($id)) {
return new WP_Error('error', 'Missing required parameters', array('status' => 200));
}
$args = array(
'numberposts' => -1,
'post_type' => 'coworking'
);
if (isset($id) && $id != 0) {
$args['meta_key'] = 'city';
$args['meta_value'] = $id;
}
$items = get_posts($args);
if ($items) {
#ID коворкинга который по-умолчанию открыт на карте (активен)
$data['item_default_active'] = (get_field('default_active_coworking_on_map_type', $this->currentCityId) == 'specified') ? get_field('default_active_coworking_on_map', $this->currentCityId) : $items[array_rand($items, 1)]->ID;
foreach ($items as $item) {
$mapData = ($v = get_field('contacts_map_position', $item->ID)) ? json_decode($v) : '';
//$images = array(getImageSrcByPostId($item->ID, '760x530'));
$images = array();
if ($v = get_field('images_location_map', $item->ID)) {
foreach ($v as $vItem) {
$images[] = getImageSrcByThumbId($vItem['id'], '760x530');
}
} else {
$images = array(getImageSrcByPostId($item->ID, '760x530'));
}
$data['items'][] = array(
'id' => $item->ID,
'url' => get_permalink($item->ID),
'info' => array(
'post_title' => $item->post_title,
'title' => get_field('location_map_block_sub_title', $item->ID),
'seats_number' => get_field('seats_number', $item->ID),
'price' => get_field('price', $item->ID),
'desc' => get_field('desc_short', $item->ID),
'images' => $images,
'cb_email' => get_field('cb_email', $item->ID),
'isNew' => get_field('is_new', $item->ID),
'isOpen' => get_field('is_open', $item->ID),
),
'modalCallBackData' => array(
'mcbd1' => modalLink(get_field('cbform_modal1', multiCities()->currentCityId), $item->ID, $item->ID),
'mcbd2' => modalLink(get_field('cbform_modal2', multiCities()->currentCityId), $item->ID, $item->ID),
'mcbd3' => modalLink(get_field('cbform_modal3', multiCities()->currentCityId), $item->ID, $item->ID),
'mcbd2_link_title' => get_field('cbmodal1_link_title', $item->ID),
'mcbd3_link_title' => get_field('cbmodal2_link_title', $item->ID)
),
'contacts' => array(
'phone' => strip_tags(get_field('contacts_phone', $item->ID)),
'email' => get_field('contacts_email', $item->ID),
'address' => get_field('contacts_address', $item->ID),
'worktime' => get_field('contacts_worktime', $item->ID),
'worktime_holidays' => get_field('contacts_worktime_holidays', $item->ID),
'routes_title' => get_field('contacts_routes_title', $item->ID),
'routes_title_color' => get_field('contacts_routes_title_color', $item->ID),
'routes_desc' => get_field('contacts_routes_desc', $item->ID),
'routes_desc2' => get_field('contacts_routes_desc2', $item->ID),
'routes_desc3' => get_field('contacts_routes_desc3', $item->ID),
'social' => get_field('contacts_social', $item->ID),
'messengers' => get_field('contacts_social_messengers', $item->ID)
),
'geo' => array(
'lat' => ($mapData) ? $mapData->marks[0]->coords[0] : '',
'lng' => ($mapData) ? $mapData->marks[0]->coords[1] : '',
'icon' => get_field('contacts_map_icon', $item->ID),
'icon_active' => get_field('contacts_map_icon_active', $item->ID),
'icon_width' => 67,
'icon_height' => 90
)
);
}
return ($data['items']) ? new WP_REST_Response($data, 200) : false;
} else {
return false;
}
}
#добавляем свой rest-api метод для получения списка всех городов и коворкингов
public function cityCoworkingList($request) {
$data = array();
if ($items = get_posts(array(
'numberposts' => -1,
'post_type' => 'cities'
))) {
foreach ($items as $item) {
$data[] = array(
'id' => $item->ID,
'title' => $item->post_title,
'url' => ((preg_match('/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/i', $_SERVER['HTTP_HOST'], $matcher)) ? 'https://'.$item->subdomain.'.'.explode($matcher[1].'.', $_SERVER['HTTP_HOST'])[1] : 'https://'.$item->subdomain.'.'.$_SERVER['HTTP_HOST']),
'items' => array_map(function($e) {
$coworkingTitle = (($e->title_alternate2) ? $e->title_alternate2 : (($e->title_alternate) ? $e->title_alternate : $e->post_title));
return array(
'id' => $e->ID,
'title' => str_replace('', '', $coworkingTitle),
'url' => 'https://'.get_field('city', $e)->subdomain.'.'.((preg_match('/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/i', $_SERVER['HTTP_HOST'], $matcher)) ? explode($matcher[1].'.', $_SERVER['HTTP_HOST'])[1] : $_SERVER['HTTP_HOST']).'/coworking/'.$e->post_name.'/',
'colorMetro' => get_field('contacts_routes_title_color', $e->ID),
);
}, get_posts(array(
'numberposts' => -1,
'post_type' => 'coworking',
'meta_key' => 'city',
'meta_value' => $item->ID
)))
);
}
} else {
return new WP_Error('error', 'Not found cities', array('status' => 200));
}
return ($data) ? new WP_REST_Response($data, 200) : false;
}
#получаем список коворкингов всех или в конкретном горооде
public function getCityCoworkingItems($by = '') {
$args = array(
'numberposts' => -1,
'post_type' => 'coworking'
);
if ($by != 'all') {
$args['meta_key'] = 'city';
$args['meta_value'] = $this->currentCityId;
}
return ($items = get_posts($args)) ? $items : false;
}
}
if (!is_admin()) {
global $multiCities;
$multiCities = new multiCities();
function multiCities() {
global $multiCities;
return $multiCities;
}
}
?>
require_once(dirname(__DIR__, 2) . '/handlers/bitrix24.php');
require_once('api/printing.php');
require_once('api/check-if-time-available.php');
require_once('api/get-active-coworking-data.php');
#user
function profile_user() {
$user = (is_user_logged_in() && ($v = wp_get_current_user())) ? $v : false;
#add data to user object
if ($user) {
$user->btx24_id = ($v = get_user_meta($user->ID, 'btx24_id', true)) ? $v : '';
$user->patronymic = ($v = get_user_meta($user->ID, 'patronymic', true)) ? $v : '';
$user->phone = ($v = get_user_meta($user->ID, 'phone', true)) ? $v : '';
$user->btx24_id = ($v = get_user_meta($user->ID, 'btx24_id', true)) ? $v : '';
}
return $user;
}
#синхронизируемся с битрикс24 / СКУД
if (is_user_logged_in() && $user = profile_user()) {
syncUserDataBtx24($user->ID, false);
syncUserDataSKUD($user->ID);
}
#отключаем wp-admin для обычных пользователей
add_action('admin_init', function() {
$role = get_role('subscriber');
$role->remove_cap('read');
});
#отключаем wp-admin-bar для обычных пользователей
add_action('wp_head', function() {
if (current_user_can('subscriber')) {
add_filter('show_admin_bar','__return_false');
}
});
#делаем обычным пользователям редирект с wp-admin
add_filter('login_redirect', function($redirect_to, $request, $user) {
if (isset($user->roles) && is_array( $user->roles)) {
if (in_array('subscriber', $user->roles)) {
return home_url();
}
}
return $redirect_to;
}, 10, 3);
#добавляем свои методы API
add_action('rest_api_init', function () {
#получение данных о стоимости коворкинга по его ID (рабочие места / тарифы / доп. услуги)
register_rest_route('wp/v2', '/api/coworking/prices', array(
'methods' => 'GET',
'callback' => function($request) {
$id = ($v = $request->get_param('id')) ? $v : '';
$response = array(
'workplacesTariffs' => get_field('workplaces_tariffs', $id),
'additionalServices' => get_field('additional_services', $id),
'requisites' => (get_field('requisites_title', $id) || get_field('requisites_desc', $id)) ? [
'title' => get_field('requisites_title', $id),
'desc' => get_field('requisites_desc', $id)
] : [],
'userAgreementLink' => ($v = get_field('user_agreement_link', $id)) ? $v : ''
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#регистрация
register_rest_route('wp/v2', '/api/profile/registration/', array(
'methods' => 'GET, POST',
'callback' => function($request) {
$step = $request->get_param('step');
$phone = ($v = $request->get_param('phone')) ? '+' . str_replace(' ', '', $v) : '';
$code = $request->get_param('code');
$sessionId = $request->get_param('sessionId');
$response = array();
if (!$step) {
$response = array(
'success' => false,
'errorCode' => 1,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
);
} else {
switch ($step) {
case 1: #генерация смс-кода / сохранение временно сессии: шаг #1
if (!$phone) {
$response = array(
'success' => false,
'errorCode' => 2,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
);
} else {
session_start();
$secretCode = rand(10, 99).'-'.rand(10, 99);
$_SESSION['reg_'.substr(md5($phone), 0, 8)] = array(
'code' => $secretCode,
'phone' => $phone
);
#отправка смс-кода, сообщением пользователю на телефон
$sendSms = smsSender(array('phone' => $phone, 'secretCode' => $secretCode));
if (!$sendSms['success']) {
return new WP_REST_Response($sendSms);
}
$response = array(
'success' => true,
'sessionId' => session_id()
);
}
break;
case 2: #проверка введенного смс-кода / доступ к следующему шагу регистрации
if (!$phone || !$code || !$sessionId) {
$response = array(
'success' => false,
'errorCode' => 3,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
);
} else {
session_id($sessionId);
session_start();
$userSession = $_SESSION['reg_'.substr(md5($phone), 0, 8)];
if (!$userSession || !$userSession['code']) {
$response = array(
'success' => false,
'errorCode' => 4,
'errorText' => 'Ошибка! Сессия истекла, повторите процедуру регистрации заново'
);
} else {
if ($userSession['code'] != $code) {
// if ($code != '77-77') {
$response = array(
'success' => false,
'errorCode' => 5,
'errorText' => 'Ошибка! Вы ввели неверный код из смс сообщения. Пожалуйста, введите корректное значение'
);
} else {
$coworking = [];
if ($items = multiCities()->getCityCoworkingItems()) {
foreach ($items as $item) {
$coworking[] = (($item->title_alternate2) ? $item->title_alternate2 : (($item->title_alternate) ? $item->title_alternate : $item->post_title)). ' | ID: '.$item->ID;
}
}
$response = array(
'success' => true,
'coworkings' => $coworking
);
}
}
}
break;
case 3: #все данные пользователя / процедура добавления юзера в базу
$data = (isset($_POST['data']) && $_POST['data']) ? json_decode(stripslashes($_POST['data']), true) : array();
if (!isset($data) || !$data || !$data['coworking'] || !$data['firstname'] || !$data['lastname'] || !$data['patronymic'] || !$data['email'] || !$data['phone'] || !$data['password'] || !$data['password2']) {
$response = array(
'success' => false,
'errorCode' => 6,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
);
} else {
#проверка паролей
if ($data['password'] != $data['password2']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 7,
'errorText' => 'Ошибка! Введённые пароли не совпадают между собой. Попробуйте ещё раз'
));
}
#проверка пользователя на существование в базе
if (username_exists($data['email']) || email_exists($data['email'])) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 8,
'errorText' => 'Ошибка! Пользователь с данной электронной почтой уже зарегистрирован'
));
}
$coworkingId = explode(' | ID: ', $data['coworking'])[1];
$coworkingTitle = get_the_title($coworkingId);
$coworkingBtx24Id = get_post($coworkingId)->btx24_id;
#добавляем нового пользователя в базу сайта
if (!$userId = wp_create_user($data['email'], sanitize_text_field($data['password']), $data['email'])) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 9,
'errorText' => 'Ошибка! Невозможно добавить пользователя в базу сайта. Повторите попытку немного позже'
));
}
#чистим телефон от лишних знаков
$data['phone'] = '+' . str_replace(['+', '-', ' ', '(', ')', '_'], '', $data['phone']);
#почта в нижний регистр
$data['email'] = strtolower($data['email']);
#обновляем данные нового пользователя
wp_update_user(array(
'ID' => $userId,
'first_name' => $data['firstname'],
'last_name' => $data['lastname'],
'rich_editing' => false,
'show_admin_bar_front' => 'false',
'role' => 'subscriber',
'display_name' => $data['firstname'].' '.$data['lastname']
));
#обновляем дополнительные данные нового пользователя
update_user_meta($userId, 'patronymic', $data['patronymic']);
update_user_meta($userId, 'phone', $data['phone']);
#проверяем (ищем) пользователя в bitrix24, если есть - получаем ID BTX24 + обновляем поле с WP ID / если нет - добавляем + добавляем новый лид
$btx24Data = btx24Helpers([
'action' => 'check-add-contact',
'data' => [
'firstname' => $data['firstname'],
'lastname' => $data['lastname'],
'patronymic' => $data['patronymic'],
'phone' => $data['phone'],
'email' => $data['email'],
'userId' => $userId,
'responsibleUserId' => getBtx24ResponsibleUserIdByPostId($coworkingId, 'option'),
'coworkingId' => $coworkingId,
'coworkingBtx24Id' => $coworkingBtx24Id,
'coworkingTitle' => $coworkingTitle,
'currentUrl' => $_SERVER['HTTP_REFERER']
]
]);
if (!$btx24Data['success']) {
return new WP_REST_Response($btx24Data);
}
#записываем btx24ID пользователя
update_user_meta($userId, 'btx24_id', $btx24Data['clientId']);
if ($btx24Data['clientId']) {
#синхронизируемся с битрикс24
syncUserDataBtx24($userId, false);
}
#синхронизируемся с СКУД
syncUserDataSKUD($userId, false);
#уведомление админу на почту
wp_new_user_notification($userId, null, 'admin');
#уведомление пользователю на почту
mailSender(array(
'to' => $data['email'],
'type' => 'user-registration',
'data' => array(
'name' => $data['firstname'].' '.$data['lastname'],
'email' => $data['email'],
'password' => $data['password']
)
));
#авторизуем пользователя
nocache_headers();
wp_clear_auth_cookie();
$user = wp_signon(array(
'user_login' => $data['email'],
'user_password' => $data['password'],
'remember' => true
), true);
if (is_wp_error($user)) {
if (isset($user->errors['incorrect_password']) && $user->errors['incorrect_password']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 26,
'errorText' => 'Ошибка! Вы ввели неверный логин или пароль. Проверьте данные и повторите попытку еще раз'
));
}
if (isset($user->errors['invalid_email']) && $user->errors['invalid_email']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 27,
'errorText' => 'Ошибка! Пользователя с данным логином не существует. Проверьте данные и повторите попытку еще раз'
));
}
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 28,
'errorText' => 'Ошибка! Не удалось авторизоваться, повторите попытку немного позже'
));
}
$response = array(
'success' => true,
'userId' => $userId
);
}
break;
}
}
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#авторизация
register_rest_route('wp/v2', '/api/profile/authorization/', array(
'methods' => 'POST',
'callback' => function() {
$response = array();
$data = (isset($_POST['data']) && $_POST['data']) ?
json_decode(stripslashes($_POST['data']), true) :
array();
if (!isset($data) || !$data || !$data['login'] || !$data['password']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 10,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
));
}
nocache_headers();
wp_clear_auth_cookie();
$user = wp_signon(array(
'user_login' => $data['login'],
'user_password' => $data['password'],
'remember' => (isset($data['remember']) && $data['remember']) ? $data['remember'] : false
), true);
if (is_wp_error($user)) {
if (isset($user->errors['incorrect_password']) && $user->errors['incorrect_password']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 11,
'errorText' => 'Ошибка! Вы ввели неверный логин или пароль. Проверьте данные и повторите попытку еще раз'
));
}
if (isset($user->errors['invalid_email']) && $user->errors['invalid_email']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 12,
'errorText' => 'Ошибка! Пользователя с данным логином не существует. Проверьте данные и повторите попытку еще раз'
));
}
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 13,
'errorText' => 'Ошибка! Не удалось авторизоваться, повторите попытку немного позже'
));
}
#синхронизируемся с битрикс24
syncUserDataBtx24($user->ID, false);
#синхронизируемся с СКУД
syncUserDataSKUD($user->ID, false);
$response = array(
'success' => true
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#восстановление (сброс) пароля
register_rest_route('wp/v2', '/api/profile/recovery-password/', array(
'methods' => 'GET',
'callback' => function($request) {
$login = sanitize_text_field($request->get_param('login'));
$response = array();
if (!$login) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 19,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
));
}
if (!$user = get_user_by('email', $login)) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 20,
'errorText' => 'Ошибка! Пользователя с данным логином не существует'
));
}
$new_password = wp_generate_password();
wp_set_password($new_password, $user->ID);
#уведомление пользователю на почту
mailSender(array(
'to' => $user->user_email,
'type' => 'user-recovery-password',
'data' => array(
'name' => $user->data->display_name,
'email' => $user->user_email,
'password' => $new_password
)
));
$response = array(
'success' => true
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#смена пароля
register_rest_route('wp/v2', '/api/profile/change-password/', array(
'methods' => 'POST',
'callback' => function($request) {
$response = array();
$data = (isset($_POST['data']) && $_POST['data']) ?
json_decode(stripslashes($_POST['data']), true) :
array();
if (!isset($data) || !$data || !$data['userId'] || !$data['currentPassword'] || !$data['password1'] || !$data['password2']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 21,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
));
}
if (!$user = get_userdata($data['userId'])) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 22,
'errorText' => 'Ошибка! Нет данных о авторизованном пользователе. Войдите на сайт заново и повторите попытку еще раз'
));
}
if (!$user->data->user_pass) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 23,
'errorText' => 'Ошибка! Нет данных о текущем пароле авторизованого пользователя'
));
}
if (!wp_check_password($data['currentPassword'], $user->data->user_pass)) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 24,
'errorText' => 'Ошибка! Введённый текущий пароль не соответствует действующему паролю авторизованого пользователя'
));
}
#проверка паролей
if ($data['password1'] != $data['password2']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 25,
'errorText' => 'Ошибка! Введённые новые пароли не совпадают между собой. Попробуйте ещё раз'
));
}
#смена пароля
wp_set_password($data['password1'], $user->ID);
nocache_headers();
wp_clear_auth_cookie();
wp_set_auth_cookie($user->ID);
#уведомление пользователю на почту
mailSender(array(
'to' => $user->user_email,
'type' => 'user-change-password',
'data' => array(
'name' => $user->display_name,
'email' => $user->user_login,
'password' => $data['password1']
)
));
$response = array(
'success' => true
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#удаление сотрудника из активной услуги
register_rest_route('wp/v2', '/api/profile/remove-employee/', array(
'methods' => 'GET',
'callback' => function($request) {
$dealId = sanitize_text_field($request->get_param('dealId'));
$contactId = sanitize_text_field($request->get_param('contactId'));
$response = array(
'success' => false
);
if (!$dealId || !$contactId) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 32,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
));
}
$webhook_url = get_field('bitrix24_webhook_url', 'option');
$deal = getBitrix24DealByDealId($webhook_url, $dealId);
if (!$deal || !$deal['result']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 33,
'errorText' => 'Ошибка! Нет данных о сделке'
));
}
if ($deal['result']['CONTACT_ID'] == $contactId) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 34,
'errorText' => 'Ошибка! Нельзя удалять данный контакт с текущей сделки'
));
}
$removeContactFromDeal = removeBitrix24ContactFromDeal($webhook_url, $dealId, $contactId);
if (!$removeContactFromDeal || !$removeContactFromDeal['result']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 35,
'errorText' => 'Ошибка! Невозможно удалить данный контакт с текущей сделки'
));
}
$response = array(
'success' => true
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#добавление сотрудника для активной услуги
register_rest_route('wp/v2', '/api/profile/add-employee/', array(
'methods' => 'POST',
'callback' => function() {
$response = array(
'success' => false
);
$data = (isset($_POST['data']) && $_POST['data']) ?
json_decode(stripslashes($_POST['data']), true) :
array();
if (!isset($data) || !$data || !$data['dealId'] || !$data['last_name'] || !$data['first_name'] || !$data['second_name'] || !$data['email'] || !$data['phone']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 36,
'errorText' => 'Ошибка! Отсутствует одно или несколько необходимых значений'
));
}
$webhook_url = get_field('bitrix24_webhook_url', 'option');
$deal = getBitrix24DealByDealId($webhook_url, $data['dealId']);
if (!$deal || !$deal['result']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 37,
'errorText' => 'Ошибка! Нет данных о сделке'
));
}
$newContactData = array(
'LAST_NAME' => $data['last_name'],
'NAME' => $data['first_name'],
'SECOND_NAME' => $data['second_name'],
'ASSIGNED_BY_ID' => getBtx24ResponsibleUserIdByPostId(url_to_postid($_SERVER['HTTP_REFERER']), 'option'), #ответственный для нового контакта в bitrix24
'PHONE' => array(
array(
'VALUE' => str_replace(array('+', '-', ' ', '(', ')'), '', $data['phone']),
'VALUE_TYPE' => 'MOBILE'
)
),
'EMAIL' => array(
array(
'VALUE' => $data['email'],
'VALUE_TYPE' => checkIfEmailIsPrivate($data['email']) ? 'HOME' : 'WORK'
)
)
);
$contact = addBitrix24Contact($webhook_url, $newContactData);
if (!$contact) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 38,
'errorText' => 'Ошибка! Невозможно добавить новый контакт или получить информацию о существующем'
));
}
if ($deal['result']['CONTACT_ID'] == $contact) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 39,
'errorText' => 'Ошибка! Нельзя присвоить данный контакт для текущей сделки'
));
}
$addBitrix24ContactToDeal = addBitrix24ContactToDeal($webhook_url, $data['dealId'], $contact);
if (!$addBitrix24ContactToDeal || !$addBitrix24ContactToDeal['result']) {
return new WP_REST_Response($response = array(
'success' => false,
'errorCode' => 40,
'errorText' => 'Ошибка! Невозможно присвоить данный контакт для текущей сделки'
));
}
$response = array(
'success' => true,
'contactId' => $contact
);
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#генерация qr кода
register_rest_route('wp/v2', '/api/profile/gen-qr/', array(
'methods' => 'GET',
'callback' => function($request) {
$string = ($v = $request->get_param('s')) ? sanitize_text_field($v) : '';
if (!$string) {
return false;
}
require_once(dirname(__DIR__, 2) . '/lib/phpqrcode/qrlib.php');
QRcode::png($string, false, 'H', '8px', 0);
}
));
#получение списка помещений коворкинга
register_rest_route('wp/v2', '/api/coworking/spaces', array(
'methods' => 'GET',
'callback' => function($request) {
$type = $request->get_param('type');
$date = $request->get_param('date');
$dateFrom = $request->get_param('dateFrom');
$dateTo = $request->get_param('dateTo');
$numberPeople = $request->get_param('numberPeople');
$services = $request->get_param('services');
$coworking = $request->get_param('coworkingId');
$totalCount = 0;
$response = array(
'success' => false,
'totalCount' => $totalCount,
'items' => array()
);
$taxQuery = array('relation' => 'AND');
$metaQuery = array('relation' => 'AND');
#фильтрация
#--- коворкинг
if ($coworking) {
$metaQuery[] = array(
'key' => 'coworking',
'value' => $coworking
);
}
#--- тип помещения
if ($type) {
$taxQuery[] = array(
'taxonomy' => 'coworking-spaces-types',
'field' => 'term_id',
'terms' => $type
);
}
#--- услуги (дополнительно)
if ($services) {
$taxQuery[] = array(
'taxonomy' => 'coworking-spaces-services',
'field' => 'term_id',
'terms' => $services
);
}
#--- кол-во людей
if ($numberPeople) {
$metaQuery[] = array(
'key' => 'capacity',
'value' => (int)$numberPeople,
'compare' => '>=',
'type' => 'NUMERIC'
);
}
if ($spaces = get_posts(array(
'post_type' => 'coworking-spaces',
'posts_per_page' => -1,
'tax_query' => $taxQuery,
'meta_query' => $metaQuery
))) {
$btx24CalendarEvents = getBtx24CalendarEvents(); #события календаря Bitrix24
foreach ($spaces as $space) {
$type = '';
$category = '';
$services = array();
if (!$space->coworking) continue;
#забронированные даты / время
$bookedDates = [];
foreach ($btx24CalendarEvents as $btx24CalendarEvent) {
if ($btx24CalendarEvent['id'] == $space->btx24_id) {
$bookedDates[] = $btx24CalendarEvent;
}
}
#проверяем нет ли забронированных событий в календаре bitrix24 при фильтрации по времени
$isBooking = false;
if (($dateFrom || $dateTo) && $bookedDates) {
foreach ($bookedDates as $bookedDate) {
$filterTimeFrom = ($v = $dateFrom) ? DateTime::createFromFormat('H:i', $v) : '';
$filterTimeTo = ($v = $dateTo) ? DateTime::createFromFormat('H:i', $v) : '';
$bDateFrom = ($v = $bookedDate['date_from']) ? new DateTime($v) : '';
$bDateTo = ($v = $bookedDate['date_to']) ? new DateTime($v) : '';
#если в фильтре выбрана конкретная дата (день) и эта дата равна дате брони
if ($date) {
if ($date == $bDateFrom->format('d.m.Y')) {
$isBooking = checkIfTimeBooking($dateFrom, $dateTo, $bookedDate['date_from'], $bookedDate['date_to']);
}
} else {
#в фильтре выбрано только время, без конкретной даты (без дня)
$isBooking = checkIfTimeBooking($dateFrom, $dateTo, $bookedDate['date_from'], $bookedDate['date_to']);
}
}
}
if ($isBooking) continue;
$mapData = ($v = get_field('contacts_map_position', $space->coworking)) ? json_decode($v) : '';
if (!$response['items'][$space->coworking]) {
$priceFrom = array();
$response['items'][$space->coworking] = array(
'coworking' => array(
'id' => (int)$space->coworking,
'title' => ($v = get_field('title_alternate3', $space->coworking)) ? $v : (($v = get_field('title_alternate2', $space->coworking)) ? $v : get_the_title($space->coworking)),
'url' => get_permalink($space->coworking),
'phone' => get_field('contacts_phone', $space->coworking),
'worktime' => get_field('contacts_worktime', $space->coworking),
'address' => get_field('contacts_address', $space->coworking),
'subway_station' => strip_tags(get_field('contacts_routes_title', $space->coworking)),
'subway_station_color' => get_field('contacts_routes_title_color', $space->coworking),
'subItemsCount' => 0,
'priceFrom' => 0,
'hasOnlinePayment' => (get_field('yk_shop_id', $space->coworking) && get_field('yk_secret_key', $space->coworking)) ? true : false,
'geo' => array(
'lat' => ($mapData) ? $mapData->marks[0]->coords[0] : '',
'lng' => ($mapData) ? $mapData->marks[0]->coords[1] : '',
'icon' => get_field('contacts_map_icon', $space->coworking),
'icon_width' => 67,
'icon_height' => 90
)
),
'subItems' => array()
);
}
if ($types = wp_get_post_terms($space->ID, 'coworking-spaces-types')) {
$type = $types[0]->name;
}
if ($categories = wp_get_post_terms($space->ID, 'coworking-spaces-categories')) {
$category = $categories[0]->name;
}
if ($servicesItems = wp_get_post_terms($space->ID, 'coworking-spaces-services')) {
foreach ($servicesItems as $service) {
$services[] = array(
'title' => $service->name,
'icon' => get_field('icon', "coworking-spaces-services_{$service->term_id}")
);
}
}
$discount = ($v = $space->discount) ? (float)$v : 0;
$price_weekdays = (int)$space->price_weekdays;
$price_weekend = (int)$space->price_weekend;
$price_weekdays_with_discount = (int)round(($discount) ? $price_weekdays-($price_weekdays*($discount/100)) : 0);
$price_weekend_with_discount = (int)round(($discount) ? $price_weekend-($price_weekend*($discount/100)) : 0);
$price_weekdays_pagecoin = (int)$space->price_weekdays_pagecoin;
$price_weekend_pagecoin = (int)$space->price_weekend_pagecoin;
$price_weekdays_pagecoin_with_discount = (int)round(($discount) ? $price_weekdays_pagecoin-($price_weekdays_pagecoin*($discount/100)) : 0);
$price_weekend_pagecoin_with_discount = (int)round(($discount) ? $price_weekend_pagecoin-($price_weekend_pagecoin*($discount/100)) : 0);
#записываем все цены, чтобы потом найти минимальную
$priceFrom[] = ($price_weekdays_with_discount) ? $price_weekdays_with_discount : $price_weekdays;
$priceFrom[] = ($price_weekend_with_discount) ? $price_weekend_with_discount : $price_weekend;
$response['items'][$space->coworking]['subItems'][] = array(
'id' => $space->ID,
'resourceId' => ($v = $space->btx24_id) ? (int)$v : '',
'title' => $space->post_title,
'type' => $type,
'category' => $category,
'worktime_from' => ($v = get_field('worktime_from', $space->ID)) ? $v : '09:00',
'worktime_to' => ($v = get_field('worktime_to', $space->ID)) ? $v : '21:00',
'capacity' => (int)$space->capacity,
'price_weekdays' => $price_weekdays,
'price_weekend' => $price_weekend,
'price_weekdays_with_discount' => $price_weekdays_with_discount,
'price_weekend_with_discount' => $price_weekend_with_discount,
'price_weekdays_pagecoin' => $price_weekdays_pagecoin,
'price_weekend_pagecoin' => $price_weekend_pagecoin,
'price_weekdays_pagecoin_with_discount' => $price_weekdays_pagecoin_with_discount,
'price_weekend_pagecoin_with_discount' => $price_weekend_pagecoin_with_discount,
'discount' => $discount,
'bookedDates' => $bookedDates,
'price_desc' => (($v = $space->price_desc) ? $v . '
' : '') . '1 час в будние (пн-пт): ' . (($v = $price_weekdays_with_discount) ? number_format($v*2, 0, ',', ' ') . ' (-'.$discount.'%)' : number_format($price_weekdays*2, 0, ',', ' ')) . ' руб.
1 час в выходные (сб-вс): ' . (($v = $price_weekend_with_discount) ? number_format($v*2, 0, ',', ' ') . ' (-'.$discount.'%)' : number_format($price_weekend*2, 0, ',', ' ')) . ' руб.',
'desc' => $space->desc,
'services' => $services,
'images' => ($v = $space->images) ? array_map(function($e) {
return getImageSrcByThumbId($e, '760x530');
}, $v) : array()
);
$response['items'][$space->coworking]['coworking']['subItemsCount']++;
$response['items'][$space->coworking]['coworking']['priceFrom'] = min($priceFrom);
$totalCount++;
}
}
if ($response['items']) {
$response['success'] = true;
$response['totalCount'] = $totalCount;
$response['items'] = array_values($response['items']);
}
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#сохранение временных данных бронирования помещений коворкингов при переходе в онлайн-оплату
register_rest_route('wp/v2', '/api/coworking/spaces/add-tmp-order', array(
'methods' => 'POST',
'callback' => function($request) {
$spaceId = sanitize_text_field(($v = $request->get_param('cs_spaceId')) ? $v : '');
$orderData = $request->get_param('cs_order');
$response = [];
$error = new WP_Error();
if (empty($spaceId)) {
$error->add('spaceId-is-required', 'Space ID field is required', ['status' => 400]);
return $error;
}
if (empty($orderData)) {
$error->add('orderData-is-required', 'Order data is required', ['status' => 400]);
return $error;
}
$coworkingId = ($v = get_field('coworking', $spaceId)) ? $v : '';
if (empty($coworkingId)) {
$error->add('coworkingId-not-found', 'Coworking ID not found', ['status' => 400]);
return $error;
}
global $wpdb;
$wpdb->insert('wp_mrb_orders', [
'coworkingId' => $coworkingId,
'spaceId' => $spaceId,
'orderData' => $orderData
]);
$orderId = $wpdb->insert_id;
if (empty($orderId)) {
$error->add('orderId-is-empty', 'Order ID is empty', ['status' => 400]);
return $error;
}
$response = [
'orderId' => $orderId,
'coworkingId' => $coworkingId
];
return new WP_REST_Response($response, 200);
}
));
#получение данных о забронированном помещении на админской странице
register_rest_route('wp/v2', '/api/coworking/spaces/get-booking-item-data', array(
'methods' => 'GET',
'callback' => function($request) {
$title = ($v = $request->get_param('title')) ? $v : '';
$dateCreated = ($v = $request->get_param('dateCreated')) ? $v : '';
$response = [];
$error = new WP_Error();
$webhook_url = get_field('bitrix24_webhook_url', 'option');
$findBy = '';
$leadId = '';
$dealId = '';
if (empty($dateCreated)) {
$error->add('date-created-is-required', 'Date created field is required', ['status' => 400]);
return $error;
}
if (empty($webhook_url)) {
$error->add('webhook-is-required', 'Webhook field is required', ['status' => 400]);
return $error;
}
if ($title) {
#проверяем есть ли в заголовке ID лида
if ($v = explode('[L-', $title)) {
if ($v[1] && ($v2 = explode(']', $v[1]))) {
if ($v2[0]) {
$leadId = $v2[0];
}
}
}
#проверяем есть ли в заголовке ID сделки
if ($v = explode('[D-', $title)) {
if ($v[1] && ($v2 = explode(']', $v[1]))) {
if ($v2[0]) {
$dealId = $v2[0];
}
}
}
}
if ($leadId || $dealId) {
$findBy = 'titleId';
if ($leadId) {
$lead = getBitrix24LeadByLeadId($webhook_url, $leadId);
$lead['result'][0] = $lead['result'];
}
if ($dealId) {
$deal = getBitrix24DealByDealId($webhook_url, $dealId);
$deal['result'][0] = $deal['result'];
}
} else {
$lead = getBitrix24Lead($webhook_url, [
'filter' => [
'DATE_CREATE' => $dateCreated
],
'select' => array("*", "UF_*", "PHONE", "EMAIL")
]);
$deal = getBitrix24Deal($webhook_url, [
'filter' => [
'DATE_CREATE' => $dateCreated
],
'select' => array("*", "UF_*", "PHONE", "EMAIL")
]);
$findBy = 'dateCreated';
}
#lead
if ($lead['result'] && ($lead = $lead['result'][0])) {
$contact = getBitrix24Contact($webhook_url, $lead['CONTACT_ID']);
$contactData = [];
if ($contact && $contact['result']) {
$contactData = [
'firstName' => ($v = $contact['result']['NAME']) ? str_replace(' ', '', $v) : '',
'secondName' => ($v = $contact['result']['SECOND_NAME']) ? str_replace(' ', '', $v) : '',
'lastName' => ($v = $contact['result']['LAST_NAME']) ? str_replace(' ', '', $v) : '',
'phone' => ($v = $contact['result']['PHONE'][0]['VALUE']) ? $v : '',
'email' => ($v = $contact['result']['EMAIL'][0]['VALUE']) ? $v : ''
];
} else {
$contactData = [
'firstName' => ($v = $lead['NAME']) ? str_replace(' ', '', $v) : '',
'secondName' => ($v = $lead['SECOND_NAME']) ? str_replace(' ', '', $v) : '',
'lastName' => ($v = $lead['LAST_NAME']) ? str_replace(' ', '', $v) : '',
'phone' => ($v = $lead['PHONE'][0]['VALUE']) ? $v : '',
'email' => ($v = $lead['EMAIL'][0]['VALUE']) ? $v : ''
];
}
$response[] = [
'id' => (int)$lead['ID'],
'findBy' => $findBy,
'type' => 'lead',
'url' => "https://page.bitrix24.ru/crm/lead/details/{$lead['ID']}/",
'paymentStatus' => ($lead['UF_CRM_1602594511'] == 406 || $lead['STATUS_ID'] == 26) ? true : false,
'price' => ($v = $lead['UF_CRM_1629385174639']) ? (int)$v : 0,
'comment' => ($v = $lead['COMMENTS']) ? $v : '',
'contact' => $contactData
];
}
#deal
if ($deal['result'] && ($deal = $deal['result'][0])) {
$contact = getBitrix24Contact($webhook_url, $deal['CONTACT_ID']);
$contactData = [];
if ($contact && $contact['result']) {
$contactData = [
'firstName' => ($v = $contact['result']['NAME']) ? str_replace(' ', '', $v) : '',
'secondName' => ($v = $contact['result']['SECOND_NAME']) ? str_replace(' ', '', $v) : '',
'lastName' => ($v = $contact['result']['LAST_NAME']) ? str_replace(' ', '', $v) : '',
'phone' => ($v = $contact['result']['PHONE'][0]['VALUE']) ? $v : '',
'email' => ($v = $contact['result']['EMAIL'][0]['VALUE']) ? $v : ''
];
} else {
$contactData = [
'firstName' => ($v = $deal['NAME']) ? str_replace(' ', '', $v) : '',
'secondName' => ($v = $deal['SECOND_NAME']) ? str_replace(' ', '', $v) : '',
'lastName' => ($v = $deal['LAST_NAME']) ? str_replace(' ', '', $v) : '',
'phone' => ($v = $deal['PHONE'][0]['VALUE']) ? $v : '',
'email' => ($v = $deal['EMAIL'][0]['VALUE']) ? $v : ''
];
}
$response[] = [
'id' => (int)$deal['ID'],
'findBy' => $findBy,
'type' => 'deal',
'url' => "https://page.bitrix24.ru/crm/deal/details/{$deal['ID']}/",
'paymentStatus' => ($deal['UF_CRM_5F85AA083CC81'] == 406 || $deal['STAGE_ID'] == 10 || $deal['STAGE_ID'] == 'WON') ? true : false,
'price' => ($v = $deal['UF_CRM_611E791ED7742']) ? (int)$v : 0,
'comment' => ($v = $deal['COMMENTS']) ? $v : '',
'contact' => $contactData
];
}
return ($response) ? new WP_REST_Response($response, 200) : false;
}
));
#получаем список мессенжеров по id коворкинга
register_rest_route('wp/v2', '/api/coworking/messengers/', array(
'methods' => 'GET',
'callback' => function($request) {
$id = sanitize_text_field($request->get_param('id'));
$error = new WP_Error();
$response = [];
if (!$id) {
$error->add('id-is-required', 'ID field is required', ['status' => 400]);
return $error;
}
$response = [
'items' => ($v = get_field('contacts_social_messengers', $id))
? $v
: []
];
return new WP_REST_Response($response, 200);
}
));
});
function smsSender($args) {
$phoneClear = str_replace(array('(', ')', ' ', '-', '+'), '', $args['phone']);
$smsApiId = 'E6F91ECA-25F2-E921-B74C-3A13248CA7A2';
$smsText = urlencode('Проверочный код для регистрации на сайте: '.$args['secretCode']);
$sendSms = file_get_contents("https://sms.ru/sms/send?api_id={$smsApiId}&to={$phoneClear}&msg={$smsText}&json=1");
if (!$sendSms) {
return array(
'success' => false,
'errorCode' => 14,
'errorText' => 'Ошибка! При попытке отправки смс-сообщения произошла ошибка. Повторите попытку немного позже'
);
}
if (!$sendSms = json_decode($sendSms)) {
return array(
'success' => false,
'errorCode' => 15,
'errorText' => 'Ошибка! При попытке отправки смс-сообщения произошла ошибка. Повторите попытку немного позже'
);
}
if ($sendSms->status != 'OK') {
return array(
'success' => false,
'errorCode' => 16,
'errorText' => 'Ошибка! При попытке отправки смс-сообщения произошла ошибка. Повторите попытку немного позже'
);
}
return array(
'success' => true
);
}
function mailSender($args) {
$subject = 'PAGECLUB.RU | ';
$message = '';
switch ($args['type']) {
case 'user-registration':
$subject .= 'Добро пожаловать на сайт. Ваши данные для входа на сайт';
$message = "
Здравствуйте, {$args['data']['name']}!
Спасибо, что присоединились к PAGECLUB.RU!
Данные для доступа в личный кабинет:
Логин (электронная почта): {$args['data']['email']}
Пароль: {$args['data']['password']}
Надеемся вам у нас понравится!
"; break; case 'user-recovery-password': $subject .= 'Сброс пароля от аккаунта на сайте: pageclub.ru'; $message = "Здравствуйте, {$args['data']['name']}!
На вашем аккаунте произошел сброс (восстановление) пароля
Новые данные для доступа в личный кабинет:
Логин (электронная почта): {$args['data']['email']}
Пароль: {$args['data']['password']}
Если вам не нравится сгенерированный пароль, вы его можете сменить самостоятельно в личном кабинете
В случае если сброс пароля выполнили не вы - сообщите нам об этом!
Здравствуйте, {$args['data']['name']}!
На вашем аккаунте произошла смена пароля
Новые данные для доступа в личный кабинет:
Логин (электронная почта): {$args['data']['email']}
Пароль: {$args['data']['password']}
В случае если смену пароля выполнили не вы - сообщите нам об этом!
"; break; } $headers = array( 'From: '.$_SERVER['SERVER_NAME'].'