function usermaps() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inUser = cmsUser::getInstance(); $inCore->loadModel('usermaps'); $model = new cms_model_usermaps(); $do = $inCore->request('do', 'str', 'poi_list'); $cfg = $inCore->loadComponentConfig('usermaps'); if ($do == 'mainmap') { $inPage->setTitle("Карта пользователей"); $cfg['maps_engine'] = strtolower($cfg['maps_engine']); if ($cfg['maps_engine'] == "pmap") { $cfg['maps_engine'] = "publicMap"; } if ($cfg['maps_engine'] == "phybrid") { $cfg['maps_engine'] = "publicMapHybrid"; } ////Центр карты $new_center = explode(",", $cfg['maps_center']); $cfg['maps_center'] = $new_center['1'] . " ," . $new_center['0']; // Настройки конкретного пользователя if ($inUser->id != 0) { if ($place = $model->getUserPlace($inUser->id)) { //print_r($place); $cfg['maps_center'] = $place['y'] . " ," . $place['x']; $cfg['main_zoom'] = $cfg['main_zoom'] + 1; $have_userplace = 1; } } //Загружаем структуру точек // $structure = $model->StructureOfPoints(); $smarty = $inCore->initSmarty('modules', 'mod_usermaps_mapview.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('user_id', $inUser->id); $smarty->assign('structure', $structure); $smarty->assign('have_userplace', $have_userplace); $smarty->display('mod_usermaps_mapview.tpl'); } if ($do == 'imagemap') { $inPage->setTitle("Фото на карте"); $cfg['maps_engine'] = strtolower($cfg['maps_engine']); if ($cfg['maps_engine'] == "pmap") { $cfg['maps_engine'] = "publicMap"; } if ($cfg['maps_engine'] == "phybrid") { $cfg['maps_engine'] = "publicMapHybrid"; } ////Центр карты $new_center = explode(",", $cfg['maps_center']); $cfg['maps_center'] = $new_center['1'] . " ," . $new_center['0']; $photos = $model->ImagesOnMap(); $smarty = $inCore->initSmarty('modules', 'mod_usermaps_imagesview.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('photos', $photos); $smarty->display('mod_usermaps_imagesview.tpl'); } if ($do == 'add') { $inPage->setTitle("Добавить себя"); $is_send = $inCore->inRequest('coord'); $user_id = $inUser->id; if ($user_id == 0) { $inCore->redirect('/'); return; } $place = $model->getUserPlace($user_id); if ($place) { $inCore->redirect('/usermaps/edit' . $place['id'] . '.html'); return; } if (!$is_send) { $smarty = $inCore->initSmarty('components', 'com_places_add.tpl'); $smarty->assign('cfg', $cfg); $smarty->display('com_places_add.tpl'); return; } if ($is_send) { $coord_raw = $inCore->request('coord', 'str'); $cat_id = $inCore->request('type', 'int'); $coord = explode(",", $coord_raw); $x = $coord[0]; $y = $coord[1]; if ($cat_id == "") { $cat_id = 1; } $place_id = $model->addPlace($user_id, $x, $y, $cat_id); if ($place_id) { if ($cat_id == "1") { cmsActions::log('add_place', array('object' => 'себя на карту', 'object_url' => '/usermaps/view' . $place_id . '.html', 'object_id' => $place_id, 'target' => '', 'target_url' => '/usermaps/view' . $place_id . '.html', 'target_id' => 0, 'description' => '')); } cmsCore::addSessionMessage('Ваше местоположение добавлено!', 'success'); $inCore->redirect('/usermaps/edit' . $place_id . '.html'); return; } else { cmsCore::addSessionMessage('Ошибка добавления! ' . $place_id . ' ', 'error'); } $inCore->redirect('/usermaps/edit' . $place['id'] . '.html'); exit; } } if ($do == 'edit') { $user_id = $inUser->id; $place_id = $inCore->request('id', 'int', 0); $is_send = $inCore->inRequest('coord'); if (!$place_id) { cmsCore::addSessionMessage('Ошибка запроса! ' . $place_id . ' ', 'error'); } else { $place = $model->getPlace($place_id); } if ($inUser->id == 0) { cmsCore::addSessionMessage('Ошибка запроса! ' . $place_id . ' ', 'error'); $inCore->redirect('/'); } if (!$place || $inUser->id != $place['user_id']) { if (!$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка запроса! ' . $place_id . ' ', 'error'); $inCore->redirectBack(); exit; } } //Если редактирующий админ и это не его точка сохраняем автора точки if ($inUser->is_admin and $user_id != $place['user_id']) { $user_id = $place['user_id']; } if ($is_send) { $coord_raw = $inCore->request('coord', 'str'); $title = $inCore->request('title', 'str'); $body = $inCore->request('body', 'str'); $cat_id = $inCore->request('cat_id', 'str'); if ($cat_id == "") { $cat_id = 1; } $coord = explode(",", $coord_raw); $x = $coord[0]; $y = $coord[1]; $point = $model->updatePlace($place['id'], $user_id, $x, $y, $cat_id, $title, $body); if ($point) { if ($place['type_id'] == "1" and mysql_result(mysql_query("SELECT target_url FROM cms_actions_log ORDER BY id DESC LIMIT 1"), 0) != '/usermaps/view' . $place['id'] . '.html') { cmsActions::log('edit_place', array('object' => 'своего местоположения', 'object_url' => '/usermaps/view' . $place['id'] . '.html', 'object_id' => $place['id'], 'target' => '', 'target_url' => '/usermaps/view' . $place['id'] . '.html', 'target_id' => 0, 'description' => '')); } cmsCore::addSessionMessage('Местоположение вашей точки изменено!', 'success'); } else { cmsCore::addSessionMessage('Ошибка добавления! ' . $place['id'] . ' ', 'error'); } $inCore->redirect('/usermaps/edit' . $place['id'] . '.html'); exit; } if (!$is_send) { $poi = $model->getPoi($place['type_id']); if (!$poi) { $icon = "unknow"; } else { $icon = $poi['name'] . "_big"; } $inPage->setTitle("Редактирование"); $categores = $model->getCategores(NULL); $smarty = $inCore->initSmarty('components', 'com_places_edit.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('place', $place); $smarty->assign('categores', $categores); $smarty->assign('icon', $icon); $smarty->display('com_places_edit.tpl'); return; } } if ($do == "delete") { $id = $inCore->request('id', 'int', 0); $place = $model->getPlace($id); if (!$place) { $inCore->redirectBack(); return; } if ($place['user_id'] == $inUser->id or $inUser->is_admin) { $delete = $model->deletePlace($place['id']); if ($delete) { cmsCore::addSessionMessage('Точка удалена', 'success'); $inCore->redirect('/usermaps/poi.html'); return; } else { cmsCore::addSessionMessage('Ошибка при удалении', 'success'); $inCore->redirectBack(); return; } } else { $inCore->redirectBack(); return; } } if ($do == "view") { $id = $inCore->request('id', 'int', 0); $user_id = $inUser->id; $place = $model->getPlace($id); //Если точки нет отправляем назад if (!$place) { $inCore->redirectBack(); return; } //Получаем описание категории и стиль иконки $poi = $model->getPoi($place['type_id']); if (!$poi) { $icon = "unknow"; } else { $icon = $poi['name'] . "_big"; } //Если нужно чертить треки ищем пользовательскую точку if ($place['type_id'] != "1" and $user_id != 0) { $userplace = $model->getUserPlace($user_id); } //Если пользовательская точка то заголовком делаем имя пользователя if ($place['type_id'] == "1") { $user = $model->getUser($place['user_id']); $title = $user['nickname']; } else { $title = $place['title']; } //Назначаем переменные $author = $model->getUser($place['user_id']); $category = $model->getCategory($place['type_id']); $arround = $model->getArround($place["id"]); //Если валаделец или админ говорим что автор и может редактировать if ($place['user_id'] == $user_id or $inUser->is_admin) { $is_author = TRUE; } //Проверяем чекины if ($cfg['maps_chekin']) { $checkin = $model->getChekin($place['id']); $usercheck = $model->getUserChekin($place['id'], $inUser->id); } /*FOTOLIB*/ include 'fotolib.class.php'; $foto = new FotoLib(); //Проверяем можем ли добавлять фото $allow_add_foto = $foto->addAcces("usermaps"); if ($_FILES) { $foto->uploadFoto($_FILES, "usermaps", $place['id']); } //Для совместимости с YandexMap API v2 $cfg['maps_engine'] = strtolower($cfg['maps_engine']); if ($cfg['maps_engine'] == "pmap") { $cfg['maps_engine'] = "publicMap"; } if ($cfg['maps_engine'] == "phybrid") { $cfg['maps_engine'] = "publicMapHybrid"; } //END $images = $foto->loadImages("usermaps", $place['id']); $inPage->setTitle($title); $smarty = $inCore->initSmarty('components', 'com_places_view.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('place', $place); $smarty->assign('userplace', $userplace); $smarty->assign('checkin', $checkin); $smarty->assign('usercheck', $usercheck); $smarty->assign('icon', $icon); $smarty->assign('title', $title); $smarty->assign('author', $author); $smarty->assign('category', $category); $smarty->assign('is_author', $is_author); $smarty->assign('images', $images); //fotolib $smarty->assign('allow_add_foto', $allow_add_foto); //fotolib $smarty->assign('user', $model->getUser($inUser->id)); $smarty->assign('arround', $arround); $smarty->display('com_places_view.tpl'); $inCore->includeComments(); comments('point', $id); return; } if ($do == "userpoint") { $user_id = $inUser->id; if ($user_id == 0) { $inCore->redirectBack(); return; } $uid = $inCore->request('uid', 'int', 0); $userplace = $model->getUserPlace($uid); if (!$userplace) { $inCore->redirectBack(); return; } $inCore->redirect("/usermaps/view" . $userplace['id'] . ".html"); return; } // РАБОТА С POI if ($do == "poi_list") { $inPage->setTitle("Последние добавленные точки интересов"); $poi = $model->getAllPoi(NULL); $smarty = $inCore->initSmarty('components', 'com_places_add.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('poi', $poi); $smarty->display('com_places_view_poi.tpl'); return; } if ($do == "poi_add") { $is_send = $inCore->inRequest('coord'); $user_id = $inUser->id; if ($user_id == 0) { $inCore->redirect("/"); return; } if (!$is_send) { $categores = $model->getCategores(NULL); $inPage->setTitle("Добавить POI"); $smarty = $inCore->initSmarty('components', 'com_places_add_poi.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('categores', $categores); $smarty->display('com_places_add_poi.tpl'); return; } if ($is_send) { $coord_raw = $inCore->request('coord', 'str'); $cat_id = $inCore->request('cat_id', 'int'); $coord = explode(",", $coord_raw); $x = $coord[0]; $y = $coord[1]; $title = $inCore->request('title', 'str'); $body = $inCore->request('body', 'str'); if ($cat_id == "" or $x == "" or $y == "" or $title == "") { $inCore->redirectBack(); } $place_id = $model->addPoi($user_id, $x, $y, $cat_id, $title, $body); if ($place_id) { if ($place['type_id'] == "1" and mysql_result(mysql_query("SELECT target_url FROM cms_actions_log ORDER BY id DESC LIMIT 1"), 0) != '/usermaps/view' . $place['id'] . '.html') { cmsActions::log('add_place', array('object' => 'себя на карту', 'object_url' => '/usermaps/view' . $place_id . '.html', 'object_id' => $place_id, 'target' => '', 'target_url' => '/usermaps/view' . $place_id . '.html', 'target_id' => 0, 'description' => '')); } cmsCore::addSessionMessage('Ваша точка добавлена!', 'success'); } else { cmsCore::addSessionMessage('Ошибка добавления! ' . $place_id . ' ', 'error'); } $inCore->redirect('/usermaps/poi.html'); exit; } } if ($do == "ajax_checkin") { //INSERT INTO `cms_actions` (`component`, `name`, `title`, `message`, `is_tracked`, `is_visible`) VALUES //('usermaps', 'chekin', 'Добавление отметки', 'отметился в %s', 1, 1); $user_id = $inUser->id; $place_id = $inCore->request('place_id', 'int', 0); $place = $model->getPlace($place_id); if ($user_id != 0 and $place and $place['type_id'] != 1) { if ($model->addChekin($place_id, $user_id, time())) { //INSERT INTO `cms_actions` (`component` ,`name` ,`title` ,`message` ,`is_tracked` ,`is_visible`) //VALUES ('usermaps', 'add_checkin', 'Новая отметка', 'отметился в точке %s|', '1', '1'); $category = $model->getCategory($place['type_id']); cmsActions::log('add_checkin', array('object' => str_replace('""', '"', $category['title'] . ' "' . $place['title'] . '"'), 'object_url' => '/usermaps/view' . $place_id . '.html', 'object_id' => $place_id, 'target' => '', 'target_url' => '/usermaps/view' . $place_id . '.html', 'target_id' => 0, 'description' => '')); echo 'ok'; } else { echo 'Ошибка базы данных'; } } exit; } //Настройки пользователей if ($do == "usersettings") { if ($inUser->id == 0) { $inCore->redirectBack(); return; } $maps_user_del = $inCore->request('maps_user_del', 'str'); $maps_chekin_del = $inCore->request('maps_chekin_del', 'str'); if ($maps_user_del == "on") { $place = $model->getUserPlace($inUser->id); $model->deletePlace($place['id']); cmsCore::addSessionMessage('Ваша точка удалена с карты!', 'success'); } if ($maps_chekin_del == "on") { $model->deleteUserChekin($inUser->id); cmsCore::addSessionMessage('Ваши отметки о посещении удалены с карты!', 'success'); } $inPage->setTitle("Настройки"); $smarty = $inCore->initSmarty('components', 'com_places_usersettings.tpl'); $smarty->assign('cfg', $cfg); $smarty->display('com_places_usersettings.tpl'); } //РАБОТА С КАТЕГОРИЯМИ if ($do == "category_view") { // $cfg['maps_engine'] = strtolower($cfg['maps_engine']); // $cfg['maps_center'] = '['.$cfg['maps_center'].']'; $id = $inCore->request('id', 'int', 0); $category = $model->getCategory($id); if (!$category and $category != 0) { $inCore->redirectBack(); } //Обработка POST if ($inUser->is_admin) { $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $name = $inCore->request('name', 'str'); if (!$title || !$name) { cmsCore::addSessionMessage('Что то было не заполнено!', 'error'); } else { if ($id == "0") { $is_root = 1; } $root_id = $id; $add = $model->addCategory($name, $title, $is_root, $root_id); if ($add) { cmsCore::addSessionMessage('Категория добавлена!', 'success'); } else { cmsCore::addSessionMessage('Что то пошло не так!', 'error'); } } } } if ($category['is_root'] == 0 and $category['root_id'] != 0 or $category['id'] == 1) { $inPage->setTitle("Точки в категории " . $category['title']); $categores = $model->getAllCategores(); $pois = $model->getPois($id); $smarty = $inCore->initSmarty('components', 'com_places_mainmap.tpl'); $smarty->assign('cfg', $cfg); $smarty->assign('user_id', "-1"); // $smarty->assign('userplace', $userplace); $smarty->assign('categores', $categores); $smarty->assign('pois', $pois); $smarty->display('com_places_mainmap.tpl'); } elseif ($category['id'] != 0) { $inPage->setTitle("Раздел " . $category['title']); $subcat = $model->getCategores($category['id']); $smarty = $inCore->initSmarty('components', 'com_places_view_category.tpl'); $smarty->assign('root', $category); $smarty->assign('subcat', $subcat); $smarty->assign('is_admin', $inUser->is_admin); $smarty->display('com_places_view_category.tpl'); } else { $inPage->setTitle("Категории"); $subcat = $model->getCategores("0"); $smarty = $inCore->initSmarty('components', 'com_places_view_root.tpl'); $smarty->assign('subcat', $subcat); $smarty->assign('user_id', $inUser->id); $smarty->assign('is_admin', $inUser->is_admin); $smarty->display('com_places_view_root.tpl'); } return; } if ($do == "ajax_eventpoint") { $id = $inCore->request('event_id', 'int', 0); $type = $inCore->request('event_type', 'str'); $coord_raw = explode(",", $inCore->request('new_coord', 'str')); $x = $coord_raw[0]; $y = $coord_raw[1]; if ($type == "photo") { $photo = mysql_fetch_assoc(mysql_query("SELECT * FROM cms_photo_files WHERE id = {$id}")); if ($photo['user_id'] == $inUser->id or $inUser->is_admin) { if (mysql_num_rows(mysql_query("SELECT * FROM cms_places_events WHERE object_id = {$id} AND `object_type` = '{$type}'")) != 0) { $sql = mysql_query("UPDATE cms_places_events SET x = {$x} , y = {$y} WHERE object_id = {$id} AND `object_type` = '{$type}' LIMIT 1"); } else { $sql = mysql_query("INSERT INTO cms_places_events (`object_id`, `object_type`, `x`, `y`) VALUES ('{$id}', '{$type}', '{$x}', '{$y}')"); } if ($sql) { echo "ok"; } else { print mysql_error(); } } else { echo 'Ошибка доступа'; } } exit; } if ($do == "geolocation") { $inPage->setTitle("Геолокация"); $smarty = $inCore->initSmarty('components', 'com_places_geolocation.tpl'); $smarty->assign('cfg', $cfg); $smarty->display('com_places_geolocation.tpl'); } if ($do == "ajax_arround") { $coord_raw = explode(",", $inCore->request('coord', 'str')); $group = $inCore->request('group', 'int'); $objects = $inCore->request('objects', 'int'); $distance = $inCore->request('distance', 'int'); $x = $coord_raw[0]; $y = $coord_raw[1]; $points = $model->getGeoArround($x, $y, $group, $objects, $distance); if ($points) { ob_start(); $smarty = $inCore->initSmarty('components', 'com_places_geo_arround.tpl'); $smarty->assign('points', $points); $smarty->display('com_places_geo_arround.tpl'); $html = ob_get_clean(); } else { $html = "ничего не найдено"; } print $html; exit; } if ($do == "ajax_structure") { $bound = $coord_raw = explode(",", $inCore->request('bound', 'str')); $y_max = $bound[0]; $x_max = $bound[1]; $y_min = $bound[2]; $x_min = $bound[3]; print json_encode($model->StructureOfPoints($y_min, $x_min, $y_max, $x_max)); //print_r($bound); exit; } // FOTOLIB if ($do == "imagerotate") { $side = $md5 = $inCore->request('side', 'str'); $image_id = $inCore->request('image_id', 'int'); include 'fotolib.class.php'; $foto = new FotoLib(); $foto->Rotate($side, $image_id); $inCore->redirectBack(); exit; } }
function calendar() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inUser = cmsUser::getInstance(); $inCore->loadModel('calendar'); $model = new cms_model_calendar(); $do = $inCore->request('do', 'str', 'view'); $cfg = $inCore->loadComponentConfig('calendar'); if ($do == 'view') { $inPage->setTitle("Календарь событий"); $smarty = $inCore->initSmarty('components', 'com_calendar_view.tpl'); $guest = TRUE; if ($inUser->id == 0 and $cfg['calendar_access'] == "all") { $guest = FALSE; } if ($inUser->id != 0 and $cfg['calendar_access'] == "users") { $guest = FALSE; } if ($inUser->is_admin) { $guest = FALSE; } $catigories = $model->getAllCategories(); $smarty->assign('guest', $guest); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('category', "all"); $smarty->display('com_calendar_view.tpl'); return; } if ($do == "category_view") { $category_id = $inCore->request('category_id', 'int', 0); $smarty = $inCore->initSmarty('components', 'com_calendar_view.tpl'); $guest = TRUE; if ($inUser->id == 0 and $cfg['calendar_access'] == "all") { $guest = FALSE; } if ($inUser->id != 0 and $cfg['calendar_access'] == "users") { $guest = FALSE; } if ($inUser->is_admin) { $guest = FALSE; } $category = $model->getCategory($category_id); $catigories = $model->getAllCategories(); if (!$category) { //$inCore->redirect("/calendar"); print mysql_error(); } $inPage->setTitle("Календарь событий:" . $category['title']); $smarty->assign('guest', $guest); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('category', $category_id); $smarty->display('com_calendar_view.tpl'); return; } if ($do == 'add') { $guest = TRUE; if ($inUser->id == 0 and $cfg['calendar_access'] == "all") { $guest = FALSE; } if ($inUser->id != 0 and $cfg['calendar_access'] == "users") { $guest = FALSE; } if ($inUser->is_admin) { $guest = FALSE; } if ($guest) { $inCore->redirect('/'); exit; } $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $type_raw = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); if (!$title || !$type_raw || !$date_start || !$hour_start || !$hour_end || !$min_start || !$min_end) { cmsCore::addSessionMessage('Ой, что то не было заполнено...', 'error'); $inCore->redirectBack(); exit; } else { $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if ($data_end == "" or $date_end < $date_start) { $data_end = $data_start; } $type_data = explode("_", $type_raw); $type = $type_data[0]; $apx = $type_data[1]; $event_id = $model->addEvent($inUser->id, $type, $apx, $start_time, $end_time, $title, $content); if ($event_id) { if ($type != "private") { cmsActions::log('add_event', array('object' => 'событие', 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => $title, 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => $title)); } cmsCore::addSessionMessage('Ваше мероприятие добавлено!', 'success'); } else { cmsCore::addSessionMessage('Ошибка добавления!', 'error'); } $inCore->redirect('/calendar'); exit; } } if ($event['start_time'] == "") { $event['start_time'] = time(); } if ($event['end_time'] == "") { $event['end_time'] = time(); } $bb_toolbar = cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum'); $smilies = cmsPage::getSmilesPanel('message'); $inPage->setTitle("Добавить событие"); $smarty = $inCore->initSmarty('components', 'com_calendar_add.tpl'); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('title', $event['title']); $smarty->assign('content', $event['content']); $smarty->assign('type', $event['type']); $smarty->assign('start_date', date("d.m.Y", $event['start_time'])); $smarty->assign('start_hour', date("H", $event['start_time'])); $smarty->assign('start_min', date("i", $event['start_time'])); $smarty->assign('end_date', date("d.m.Y", $event['end_time'])); $smarty->assign('end_hour', date("H", $event['end_time'])); $smarty->assign('end_min', date("i", $event['end_time'])); $smarty->display('com_calendar_add.tpl'); return; } if ($do == "view_event") { $event_id = $inCore->request('event_id', 'int', 0); /*FOTOLIB*/ include 'fotolib.class.php'; $foto = new FotoLib(); //Проверяем можем ли добавлять фото $allow_add_foto = $foto->addAcces("calendar"); if ($_FILES) { $foto->uploadFoto($_FILES, "calendar", $event_id); } $images = $foto->loadImages("calendar", $event_id); /*FOTOLIB*/ $event = $model->getEvent($event_id); if (!$event) { cmsCore::addSessionMessage('Ошибка запроса' . mysql_error(), 'error'); $inCore->redirect('/calendar'); exit; } else { if ($event['type'] == 'private' and $event['author_id'] != $inUser->id) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } $msg = $inCore->parseSmiles($event['content'], true); if (count($event['parent']) != 0) { $delta = $event['end_time'] - $event['start_time']; $day = date("d", $event['start_time']); $month = date("n", $event['start_time']) - 1; //Яваскриптики считают с 0 $year = date("Y", $event['start_time']); if ($delta < 24 * 60 * 60) { $calendar_view = "agendaDay"; if (date("d", $event['start_time']) != date("d", $event['end_time'])) { //Если меньше 24 часов но всё же в разные дни включаем недельный вид $calendar_view = "agendaWeek"; } } elseif ($delta < 7 * 24 * 60 * 60) { $calendar_view = "agendaWeek"; } else { $calendar_view = "month"; } $events_string = ""; foreach ($event['parent'] as $parent) { $events_string .= "{\n\t id : '" . $parent['id'] . "',\n\t title : '" . str_replace("'", '"', $parent['title']) . "',\n\t start : '" . date("Y-m-d H:i:s", $parent['start_time']) . "',\n\t end : '" . date("Y-m-d H:i:s", $parent['end_time']) . "',\n\t url : '/calendar/event" . $parent['id'] . ".html',"; if ($parent['end_time'] - $parent['start_time'] > 60 * 60 * 8) { $events_string .= "allDay: true,"; } else { $events_string .= "allDay: false,"; } switch ($parent['type']) { case "public": if ($parent['author_id'] == $inUser->id) { $events_string .= "color: '#B9C3BC',\n"; } else { $events_string .= "color: '#C3BCB9',\n"; } $events_string .= "textColor: '#000000',\n"; break; case "private": $events_string .= "color: '#3366CC'\n"; } $events_string .= "},"; } } $issignup = $model->isSignup($event_id); $singups_user = $model->getSingupsUsers($event_id); $inPage->setTitle('Просмотр события "' . $event['title'] . '"'); $smarty = $inCore->initSmarty('components', 'com_calendar_event_view.tpl'); $smarty->assign('event', $event); $smarty->assign('content', $msg); $smarty->assign('parent', $event['parent']); $smarty->assign('calendar_view', $calendar_view); $smarty->assign('events_string', $events_string); $smarty->assign('year', $year); $smarty->assign('month', $month); $smarty->assign('day', $day); $smarty->assign('start_time', date("d.m.Y H:i", $event['start_time'])); $smarty->assign('end_time', date("d.m.Y H:i", $event['end_time'])); $smarty->assign('issngnup', $issignup); $smarty->assign('singups_user', $singups_user); $smarty->assign('images', $images); //fotolib $smarty->assign('allow_add_foto', $allow_add_foto); //fotolib if ($event['start_time'] - time() < 0) { $status = "Прошедшее событие"; } else { if ($event['start_time'] - time() > 86400) { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 86400), array("день", "дня", "дней")); } else { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 3600), array("час", "часа", "часов")); } } $smarty->assign('status', $status); if ($inUser->id == $event['author_id'] or $inUser->is_admin) { $smarty->assign('admin', TRUE); } $smarty->display('com_calendar_event_view.tpl'); $inCore->includeComments(); comments('calendar', $event_id); return; } } if ($do == "delete_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $deleted = $model->deleteEvent($event_id); if ($deleted) { cmsCore::addSessionMessage('Ваше мероприятие удалено!', 'success'); $inCore->redirect('/calendar'); exit; } else { cmsCore::addSessionMessage('Ошибка', 'error'); $inCore->redirect('/calendar'); exit; } } if ($do == "edit_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); if ($event["author_id"] != $inUser->id and !$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка доступа', 'error'); $inCore->redirectBack(); exit; } $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); if (!$title || !$type || !$date_start || !$hour_start || !$hour_end || !$min_start || !$min_end) { cmsCore::addSessionMessage('Ой, что то не было заполнено...', 'error'); $inCore->redirectBack(); exit; } else { $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); if ($data_end == "" or $data_end < $data_start) { $data_end = $data_start; } $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if (!is_numeric($type)) { $category_id = "0"; } else { $category_id = $type; $type = "public"; } $update = $model->updateEvent($event_id, $type, $category_id, $start_time, $end_time, $title, $content); if ($update) { cmsCore::addSessionMessage('Ваше мероприятие изменено!', 'success'); $inCore->redirect('/calendar/event' . $event_id . '.html'); exit; } else { cmsCore::addSessionMessage('Ошибка добавления!', 'error'); $inCore->redirect('/calendar/edit' . $event_id . '.html'); exit; } } } else { $event = $model->getEvent($event_id); if (!$event) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } if ($event['category_id']) { $event['type'] = $event['category_id']; } $bb_toolbar = cmsPage::getBBCodeToolbar('calendar', 1, 'forum'); $smilies = cmsPage::getSmilesPanel('calendar'); //Проверяем присоедиялся ли пользователь ко встрече $catigories = $model->getAllCategories(); $inPage->setTitle("Редактировать событие"); $smarty = $inCore->initSmarty('components', 'com_calendar_add.tpl'); $smarty->assign('event', $event); $smarty->assign('edit', 1); $smarty->assign('catigories', $catigories); $smarty->assign('title', $event['title']); $smarty->assign('content', $event['content']); $smarty->assign('type', $event['type']); $smarty->assign('start_date', date("d.m.Y", $event['start_time'])); $smarty->assign('start_hour', date("H", $event['start_time'])); $smarty->assign('start_min', date("i", $event['start_time'])); $smarty->assign('end_date', date("d.m.Y", $event['end_time'])); $smarty->assign('end_hour', date("H", $event['end_time'])); $smarty->assign('end_min', date("i", $event['end_time'])); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->display('com_calendar_add.tpl'); return; } } if ($do == "add_parent") { if ($inUser->id == 0) { $inCore->redirectBack(); return; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); if (!$event) { $inCore->redirectBack(); return; } $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); if (!$title || !$date_start || !$hour_start || !$hour_end || !$min_start || !$min_end) { cmsCore::addSessionMessage('Ой, что то не было заполнено...', 'error'); $inCore->redirectBack(); exit; } else { $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if ($data_end == "" or $date_end < $date_start) { $data_end = $data_start; } $type = $event['type']; $model->addEvent($inUser->id, $type, $apx, $start_time, $end_time, $title, $content, $event['id']); $inCore->redirect('/calendar/event' . $event['id'] . ".html"); exit; } } $bb_toolbar = cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum'); $smilies = cmsPage::getSmilesPanel('message'); $inPage->setTitle("Добавить вложеное событие"); $smarty = $inCore->initSmarty('components', 'com_calendar_add.tpl'); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('parent', "1"); $smarty->assign('parent_title', $event['title']); $smarty->assign('title', ""); $smarty->assign('content', ""); $smarty->assign('type', $event['type']); $smarty->assign('start_date', date("d.m.Y", $event['start_time'])); $smarty->assign('start_hour', date("H", $event['start_time'])); $smarty->assign('start_min', date("i", $event['start_time'])); $smarty->assign('end_date', date("d.m.Y", $event['end_time'])); $smarty->assign('end_hour', date("H", $event['end_time'])); $smarty->assign('end_min', date("i", $event['end_time'])); $smarty->display('com_calendar_add.tpl'); return; } if ($do == "event_signup") { //Если не залогинились то возвращаем обратно if ($inUser->id == 0) { $inCore->redirectBack(); return; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); //Если приватное событие то отправляем обратно if ($event["type"] == "private") { $inCore->redirectBack(); return; } //Если мероприятие уже прошло говорим ай-яй-яй if ($event['start_time'] - time() < 0) { cmsCore::addSessionMessage('Присоединиться к мероприятию уже невозможно', 'error'); $inCore->redirectBack(); exit; } //Проверяем статус присоединения ко встрече if ($model->isSignup($event_id)) { //Если уже присоединялись то удаляем и выводим статус $model->deleteSignup($event_id); cmsCore::addSessionMessage('Вы отказались от участия в мероприятии ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('del_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } else { //Если не присоединялись то добавляем в базу и выводим статус //Если уже присоединялись то удаляем и выводим статус $model->addSignup($event["id"]); cmsCore::addSessionMessage('Вы присоединились к событию ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('add_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event["id"], 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } return; } //AJAX if ($do == "ajax_add") { $guest = TRUE; if ($inUser->id == 0 and $cfg['calendar_access'] == "all") { $guest = FALSE; } if ($inUser->id != 0 and $cfg['calendar_access'] == "users") { $guest = FALSE; } if ($inUser->is_admin) { $guest = FALSE; } if (!$guest) { $title = iconv("utf8", "cp1251", $inCore->request('title', 'str')); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = iconv("utf8", "cp1251", $inCore->request('content', 'str')); $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if ($type == "prvate") { $category_id = 0; $type = "private"; } else { if (is_numeric($type)) { $category_id = $type; } else { $category_id = 0; } $type = "public"; } $event_id = $model->addEvent($inUser->id, $type, $category_id, $start_time, $end_time, $title, $content); $output = array(); if (!$event_id) { $output['error'] = TRUE; $output['errortext'] = iconv("CP1251", "UTF-8", "Ошибка БД"); } else { $output['error'] = FALSE; $event = $model->getEvent($event_id); $output['event_id'] = $event_id; $output['start'] = $event['start_time']; $output['end_time'] = $event['end_time']; if ($event['end_time'] - $event['start_time'] > 60 * 60 * 8) { $output['allDay'] = TRUE; } else { $output['allDay'] = FALSE; } $output['bg'] = $event['bg']; $output['tx'] = $event['tx']; if ($type != "private") { cmsActions::log('add_event', array('object' => 'событие', 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => $title, 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => $title)); } } } else { $output['error'] = TRUE; $output['errortext'] = iconv("CP1251", "UTF-8", "Ошибка доступа"); } print json_encode($output); exit; } if ($do == "ajax_edit") { $type_act = $inCore->request('type', 'str'); $id = $inCore->request('id', 'int'); $dayDelta = $inCore->request('dayDelta', 'str'); $minuteDelta = $inCore->request('minuteDelta', 'str'); $event = $model->getEvent($id); if ($event['author_id'] == $inUser->id) { $type = $event['type']; $apx = ""; $start_time = $event['start_time']; $end_time = $event['end_time']; $title = $event['title']; $content = $event['content']; $delta = $dayDelta * 24 * 60 * 60 + $minuteDelta * 60; if ($type_act == "drop") { $start_time = $start_time + $delta; $end_time = $end_time + $delta; } if ($type_act == "resize") { $end_time = $end_time + $delta; } $model->updateEvent($id, $type, $apx, $start_time, $end_time, $title, $content); } else { print "Ошибка доступа"; } exit; } if ($do == "ajax_get_event") { $starttime = $inCore->request('start', 'int'); $endtime = $inCore->request('end', 'int'); $parent_id = $inCore->request('parent_id', 'parent_id'); $category = $inCore->request('category', 'str'); if ($category == "all" or !is_numeric($category)) { $category = FALSE; } if (!$parent_id) { $parent_id = 0; } $events = $model->getCalendar($starttime, $endtime, $category, $parent_id); $output = array(); foreach ($events as $data) { $data['title'] = iconv("cp1251", "utf8", $data["title"]); $data['start'] = date("Y-m-d H:i:s", $data["start_time"]); $data['end'] = date("Y-m-d H:i:s", $data["end_time"]); $data['url'] = "/calendar/event" . $data['id'] . ".html"; if ($data["author_id"] == $inUser->id) { $data['editable'] = true; } else { $data['editable'] = false; } if ($data["end_time"] - $data["start_time"] > 60 * 60 * 8) { $data['allDay'] = "true"; } if (!$data['category_id']) { switch ($data["type"]) { case "public": $data['color'] = $cfg['public_bg_color']; $data['textColor'] = $cfg['public_tx_color']; break; case "private": $data['color'] = $cfg['private_bg_color']; $data['textColor'] = $cfg['private_tx_color']; break; } } else { $data['color'] = $data['bg']; $data['textColor'] = $data['tx']; } if ($data["type"] == "private" and $data['author_id'] != $inUser->id) { } else { $output[] = $data; } } print json_encode($output); exit; } if ($do == "isc_calendar") { header('Content-type: text/calendar; charset=utf-8'); header('Content-Disposition: inline; filename=calendar.ics'); echo "BEGIN:VCALENDAR\n"; echo "VERSION:2.0\n"; echo "PRODID:-//hacksw/handcal//NONSGML v1.0//EN'\n"; $events = $model->getCalendar(time() - 60 * 60 * 24 * 30, time() + 60 * 60 * 24 * 30, 0); foreach ($events as $event) { if ($event['type'] == "public") { $title = iconv("cp1251", "utf8", $event["title"]); //$content = iconv("cp1251","utf8",str_replace("\n",'',$event["content"])); $dtstart = date("Ymd", $event["start_time"]) . "T" . date("His", $event["start_time"]) . "Z"; $dtend = date("Ymd", $event["end_time"]) . "T" . date("His", $event["end_time"]) . "Z"; echo "BEGIN:VEVENT\n"; echo "DTSTART:{$dtstart}\n"; echo "DTEND:{$dtend}\n"; echo "SUMMARY:{$title}\n"; //echo "DESCRIPTION:$content\n"; echo "END:VEVENT\n"; } } echo "END:VCALENDAR\n"; exit; } if ($do == "ajax_add_form") { $start = strtotime($inCore->request('start', 'str')); $end = strtotime($inCore->request('end', 'str')); if (!$inUser->id) { print "Ошибка доступа."; exit; } $catigories = $model->getAllCategories(); $bb_toolbar = cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum'); $smilies = cmsPage::getSmilesPanel('message'); $smarty = $inCore->initSmarty('components', 'com_calendar_add.tpl'); $smarty->assign('catigories', $catigories); $smarty->assign('start_date', date("d.m.Y", $start)); $smarty->assign('start_hour', date("H", $start)); $smarty->assign('start_min', date("i", $start)); $smarty->assign('end_date', date("d.m.Y", $end)); $smarty->assign('end_hour', date("H", $end)); $smarty->assign('end_min', date("i", $end)); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->display('com_calendar_add.tpl'); exit; } // FOTOLIB if ($do == "imagerotate") { $side = $md5 = $inCore->request('side', 'str'); $image_id = $inCore->request('image_id', 'int'); include 'fotolib.class.php'; $foto = new FotoLib(); $foto->Rotate($side, $image_id); $inCore->redirectBack(); exit; } if ($do == "imagedelete") { include 'fotolib.class.php'; $image_id = $inCore->request('image_id', 'int'); $foto = new FotoLib(); $foto->Delete($image_id); $inCore->redirectBack(); exit; } }
function calendar() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inUser = cmsUser::getInstance(); $inCore->loadModel('calendar'); $model = new cms_model_calendar(); $do = $inCore->request('do', 'str', 'view'); $cfg = $inCore->loadComponentConfig('calendar'); if ($do == 'view') { $inPage->setTitle("Календарь событий"); $inPage->addPathway("Календарь", "/calendar"); $smarty = $inPage->initTemplate('components', 'com_calendar_view.tpl'); $category_id = $inCore->request('category_id', 'int', 0); $can_add = FALSE; $moderated = TRUE; if ($cfg['group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = FALSE; } elseif ($cfg['m_group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = TRUE; } if ($inUser->is_admin) { $can_add = TRUE; } $catigories = $model->getAllCategories(); if ($category_id) { $category = $category_id; $cat = $model->getCategory($category); $inPage->addPathway($cat['name']); } else { $category = "all"; } if ($cfg['calendar_view'] == 'afisha') { $inCore->redirect('/calendar/list.html'); } $smarty->assign('can_add', $can_add); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('category', $category); $smarty->display('com_calendar_view.tpl'); return; } if ($do == "list") { $inPage->addPathway("Календарь", "/calendar"); $inPage->addPathway("Афиша"); $per_day = 10; //Количество сообытий в дне максимум $display_days = 5; //количество дней которые показывается на странице $dayt = 60 * 60 * 24; //Продолжительность дня в секундах $start_time = strtotime(date('Y-m-d', time()) . " 00:00:00") - $dayt; //Определяем утро сегодняшнего дня $output = array(); for ($i = 0; $i < $display_days; $i++) { $start = strtotime(date('Y-m-d', $start_time + $dayt * $i)); $n = date("N", $start + 1); //Определяем заголовок блока дня if ($i == 0) { $day['title'] = "Сегодня"; } elseif ($i == 1) { $day['title'] = "Завтра"; } else { $day['title'] = $inCore->dateFormat(date('Y-m-d H:i:s', $start_time + $dayt * ($i + 1))); } $day['events'] = $model->getCalendar($start, $start + 86400); //Определяем активные встречи за временной период $output[] = $day; } $inPage->setTitle("Календарь событий"); $smarty = $inPage->initTemplate('components', 'com_calendar_list.tpl'); $smarty->assign('events', $output); $smarty->assign('cfg', $cfg); $smarty->display('com_calendar_list.tpl'); } if ($do == "view_event") { $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); /*FOTOLIB*/ include 'fotolib.class.php'; $foto = new FotoLib(); //Проверяем можем ли добавлять фото $allow_add_foto = $foto->addAcces("calendar", $event); if ($_FILES) { $foto->uploadFoto($_FILES, "calendar", $event_id); } $images = $foto->loadImages("calendar", $event_id); /*FOTOLIB*/ if (!$event) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } elseif ($event['hide'] == 1 and !$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка доступа', 'error'); $inCore->redirect('/calendar'); exit; } else { if ($event['type'] == 'private' and $event['author_id'] != $inUser->id) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } $msg = $inCore->parseSmiles($event['content'], true); if (count($event['parent']) != 0) { $delta = $event['end_time'] - $event['start_time']; $day = date("d", $event['start_time']); $month = date("n", $event['start_time']) - 1; //Яваскриптики считают с 0 $year = date("Y", $event['start_time']); if ($delta < 24 * 60 * 60) { $calendar_view = "agendaDay"; if (date("d", $event['start_time']) != date("d", $event['end_time'])) { //Если меньше 24 часов но всё же в разные дни включаем недельный вид $calendar_view = "agendaWeek"; } } elseif ($delta < 7 * 24 * 60 * 60) { $calendar_view = "agendaWeek"; } else { $calendar_view = "month"; } $events_string = ""; foreach ($event['parent'] as $parent) { $events_string .= "{\n\t id : '" . $parent['id'] . "',\n\t title : '" . str_replace("'", '"', $parent['title']) . "',\n\t start : '" . date("Y-m-d H:i:s", $parent['start_time']) . "',\n\t end : '" . date("Y-m-d H:i:s", $parent['end_time']) . "',\n\t url : '/calendar/event" . $parent['id'] . ".html',"; if ($parent['end_time'] - $parent['start_time'] > 60 * 60 * 8) { $events_string .= "allDay: true,"; } else { $events_string .= "allDay: false,"; } switch ($parent['type']) { case "public": if ($parent['author_id'] == $inUser->id) { $events_string .= "color: '#B9C3BC',\n"; } else { $events_string .= "color: '#C3BCB9',\n"; } $events_string .= "textColor: '#000000',\n"; break; case "private": $events_string .= "color: '#3366CC'\n"; } $events_string .= "},"; } } $issignup = $model->isSignup($event_id); $singups_user = $model->getSingupsUsers($event_id); $inPage->setTitle('Просмотр события "' . $event['title'] . '"'); $inPage->addPathway("Календарь", "/calendar"); if ($event['parent_id']) { $parent = $model->getEvent($event['parent_id']); $inPage->addPathway($parent['title'], "/calendar/event" . $parent['id'] . ".html"); } $inPage->addPathway($event['title'], "/calendar/event" . $event_id . ".html"); $smarty = $inPage->initTemplate('components', 'com_calendar_event_view.tpl'); $smarty->assign('user_id', $inUser->id); $smarty->assign('event', $event); $smarty->assign('content', $msg); $smarty->assign('parent', $event['parent']); $smarty->assign('calendar_view', $calendar_view); $smarty->assign('events_string', $events_string); $smarty->assign('year', $year); $smarty->assign('month', $month); $smarty->assign('day', $day); $smarty->assign('start_time', date("d.m.Y H:i", $event['start_time'])); $smarty->assign('end_time', date("d.m.Y H:i", $event['end_time'])); $smarty->assign('issngnup', $issignup); $smarty->assign('singups_user', $singups_user); $smarty->assign('images', $images); //fotolib $smarty->assign('allow_add_foto', $allow_add_foto); //fotolib if ($event['start_time'] - time() < 0) { $status = "Прошедшее событие"; } else { if ($event['start_time'] - time() > 86400) { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 86400), array("день", "дня", "дней")); } else { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 3600), array("час", "часа", "часов")); } } $smarty->assign('status', $status); if ($inUser->id == $event['author_id'] or $inUser->is_admin) { $smarty->assign('admin', TRUE); } $smarty->display('com_calendar_event_view.tpl'); $inCore->includeComments(); comments('calendar', $event_id); return; } } if ($do == "delete_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $deleted = $model->deleteEvent($event_id); if ($deleted) { cmsCore::addSessionMessage('Ваше мероприятие удалено!', 'success'); $inCore->redirect('/calendar'); exit; } else { cmsCore::addSessionMessage('Ошибка', 'error'); $inCore->redirect('/calendar'); exit; } } if ($do == "edit_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); if ($event["author_id"] != $inUser->id and !$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка доступа', 'error'); $inCore->redirectBack(); exit; } if ($inUser->is_admin) { $can_moderate = true; } $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); if ($can_moderate) { $m_hide = $inCore->request('hide', 'str'); if ($m_hide == "on") { $hide = 1; } else { $hide = 0; } } if (!$title || !$type || !$date_start || !$hour_start || !$hour_end || !$min_start || !$min_end) { cmsCore::addSessionMessage('Ой, что то не было заполнено...', 'error'); $inCore->redirectBack(); exit; } else { $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); if ($data_end == "" or $data_end < $data_start) { $data_end = $data_start; } $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if (!is_numeric($type)) { $category_id = "0"; } else { $category_id = $type; $type = "public"; } $update = $model->updateEvent($event_id, $type, $category_id, $start_time, $end_time, $title, $content, $hide); if ($update) { cmsCore::addSessionMessage('Ваше мероприятие изменено!', 'success'); $inCore->redirect('/calendar/event' . $event_id . '.html'); exit; } else { cmsCore::addSessionMessage('Ошибка добавления!', 'error'); $inCore->redirect('/calendar/edit' . $event_id . '.html'); exit; } } } else { $event = $model->getEvent($event_id); if (!$event) { cmsCore::addSessionMessage('Ошибка запроса тут', 'error'); $inCore->redirect('/calendar'); exit; } if ($event['category_id']) { $event['type'] = $event['category_id']; } $bb_toolbar = cmsPage::getBBCodeToolbar('calendar', 1, 'forum'); $smilies = cmsPage::getSmilesPanel('calendar'); //Проверяем присоедиялся ли пользователь ко встрече $catigories = $model->getAllCategories(); $inPage->setTitle("Редактировать событие"); $smarty = $inPage->initTemplate('components', 'com_calendar_add.tpl'); $smarty->assign('event', $event); $smarty->assign('edit', 1); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('title', $event['title']); $smarty->assign('content', $event['content']); $smarty->assign('type', $event['type']); $smarty->assign('start_date', date("d.m.Y", $event['start_time'])); $smarty->assign('start_hour', date("H", $event['start_time'])); $smarty->assign('start_min', date("i", $event['start_time'])); $smarty->assign('end_date', date("d.m.Y", $event['end_time'])); $smarty->assign('end_hour', date("H", $event['end_time'])); $smarty->assign('end_min', date("i", $event['end_time'])); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('can_moderate', $can_moderate); $smarty->display('com_calendar_add.tpl'); return; } } if ($do == "event_signup") { //Если не залогинились то возвращаем обратно if ($inUser->id == 0) { $inCore->redirectBack(); return; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); //Если приватное событие то отправляем обратно if ($event["type"] == "private") { $inCore->redirectBack(); return; } //Если мероприятие уже прошло говорим ай-яй-яй if ($event['start_time'] - time() < 0) { cmsCore::addSessionMessage('Присоединиться к мероприятию уже невозможно', 'error'); $inCore->redirectBack(); exit; } //Проверяем статус присоединения ко встрече if ($model->isSignup($event_id)) { //Если уже присоединялись то удаляем и выводим статус $model->deleteSignup($event_id); cmsCore::addSessionMessage('Вы отказались от участия в мероприятии ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('del_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } else { //Если не присоединялись то добавляем в базу и выводим статус //Если уже присоединялись то удаляем и выводим статус $model->addSignup($event["id"]); cmsCore::addSessionMessage('Вы присоединились к событию ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('add_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event["id"], 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } return; } //AJAX if ($do == "ajax_add") { $can_add = FALSE; $moderated = TRUE; if ($cfg['group_' . $inUser->group_id] or $inUser->is_admin) { $can_add = TRUE; $moderated = FALSE; } elseif ($cfg['m_group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = TRUE; } if ($can_add) { $title = $inCore->request('title', 'str'); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); $parent_id = $inCore->request('parent_id', 'int'); $m_hide = $inCore->request('hide', 'str'); if ($m_hide == "on" or $moderated) { $hide = 1; } else { $hide = 0; } $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if ($start_hour < $cfg['calendar_minTime']) { $output['error'] = TRUE; $output['errortext'] = "Событие начинается слишком рано"; } if ($end_hour > $cfg['calendar_maxTime']) { $output['error'] = TRUE; $output['errortext'] = "Событие заканчивается слишком поздно"; } if ($end_hour == $cfg['calendar_maxTime'] and $end_min != 0) { $output['error'] = TRUE; $output['errortext'] = "Событие заканчивается слишком поздно"; } if ($type == "private") { $category_id = 0; $type = "private"; } else { if (is_numeric($type)) { $category_id = $type; } else { $category_id = 0; } $type = "public"; } if ($parent_id) { $parent = $model->getEvent($parent_id); if (!$parent) { $output['error'] = TRUE; $output['errortext'] = "Родительское событие не найдено"; } elseif ($parent['user_id'] != $inUser->id or !$inUser->is_admin) { $output['error'] = TRUE; $output['errortext'] = "Ошибка прав доступа"; } elseif ($parent['hide'] == 1) { $output['error'] = TRUE; $output['errortext'] = "Нельзя добавлять события в скрытое событие"; } } if (!$output['error']) { $event_id = $model->addEvent($inUser->id, $type, $category_id, $start_time, $end_time, $title, $content, $parent_id, $hide); } $output = array(); if (!$event_id) { $output['error'] = TRUE; $output['errortext'] = "Ошибка БД"; } else { $output['error'] = FALSE; $event = $model->getEvent($event_id); $output['event_id'] = $event_id; $output['start'] = $event['start_time']; $output['end'] = $event['end_time']; $output['hide'] = $hide; if ($event['end_time'] - $event['start_time'] > 60 * 60 * 8) { $output['allDay'] = TRUE; } else { $output['allDay'] = FALSE; } $output['bg'] = $event['bg']; $output['tx'] = $event['tx']; if ($type != "private" and $hide != 1) { cmsActions::log('add_event', array('object' => 'событие', 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => $title, 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => $title)); } } } else { $output['error'] = TRUE; $output['errortext'] = "Ошибка доступа"; } print json_encode($output); exit; } if ($do == "ajax_edit") { $type_act = $inCore->request('type', 'str'); $id = $inCore->request('id', 'int'); $dayDelta = $inCore->request('dayDelta', 'str'); $minuteDelta = $inCore->request('minuteDelta', 'str'); $event = $model->getEvent($id); if ($event['author_id'] == $inUser->id or $inUser->is_admin) { $type = $event['type']; $category_id = $event['category_id']; $start_time = $event['start_time']; $end_time = $event['end_time']; $title = $event['title']; $content = $event['content']; $delta = $dayDelta * 24 * 60 * 60 + $minuteDelta * 60; if ($type_act == "drop") { $start_time = $start_time + $delta; $end_time = $end_time + $delta; } if ($type_act == "resize") { if ($end_time - $start_time > 0) { $end_time = $end_time + $delta; } else { print "Ошибка смещения"; } } $model->updateEvent($id, $type, $category_id, $start_time, $end_time, $title, $content); } else { print "Ошибка доступа"; } exit; } if ($do == "ajax_get_event") { $starttime = $inCore->request('start', 'int'); $endtime = $inCore->request('end', 'int'); $parent_id = $inCore->request('parent_id', 'parent_id'); $category = $inCore->request('category', 'int'); if ($category == "all" and !is_numeric($category)) { $category = FALSE; } if (!$parent_id) { $parent_id = 0; } if ($inUser->is_admin) { $show_hidden = true; } $events = $model->getCalendar($starttime, $endtime, $category, $parent_id, $show_hidden); $output = array(); foreach ($events as $data) { $data['start'] = date("Y-m-d H:i:s", $data["start_time"]); $data['end'] = date("Y-m-d H:i:s", $data["end_time"]); $data['url'] = "/calendar/event" . $data['id'] . ".html"; // $data['image'] = "/components/calendar/images/no_image.png"; if ($data["author_id"] == $inUser->id or $inUser->is_admin) { $data['editable'] = true; } else { $data['editable'] = false; } if ($data["end_time"] - $data["start_time"] > 60 * 60 * 8) { $data['allDay'] = "true"; } if (!$data['category_id']) { switch ($data["type"]) { case "public": $data['color'] = $cfg['public_bg_color']; $data['textColor'] = $cfg['public_tx_color']; break; case "private": $data['color'] = $cfg['private_bg_color']; $data['textColor'] = $cfg['private_tx_color']; break; } } else { $data['color'] = $data['bg']; $data['textColor'] = $data['tx']; } if ($data["type"] == "private" and $data['author_id'] != $inUser->id) { } else { $output[] = $data; } } print json_encode($output); exit; } if ($do == "isc_calendar") { header('Content-type: text/calendar; charset=utf-8'); header('Content-Disposition: inline; filename=calendar.ics'); echo "BEGIN:VCALENDAR\n"; echo "VERSION:2.0\n"; echo "PRODID:-//hacksw/handcal//NONSGML v1.0//EN'\n"; $events = $model->getCalendar(time() - 60 * 60 * 24 * 30, time() + 60 * 60 * 24 * 30, 0); foreach ($events as $event) { if ($event['type'] == "public") { $title = $event["title"]; $dtstart = date("Ymd", $event["start_time"] - 60 * 60 * 4) . "T" . date("His", $event["start_time"] - 60 * 60 * 4); $dtend = date("Ymd", $event["end_time"] - 60 * 60 * 4) . "T" . date("His", $event["end_time"] - 60 * 60 * 4); echo "BEGIN:VEVENT\n"; echo "DTSTART:{$dtstart}\n"; echo "DTEND:{$dtend}\n"; echo "SUMMARY:{$title}\n"; echo "END:VEVENT\n"; } } echo "END:VCALENDAR\n"; exit; } if ($do == "ajax_add_form") { $start = strtotime($inCore->request('start', 'str')); $end = strtotime($inCore->request('end', 'str')); if ($start < strtotime('now 00:00:00')) { echo 'error'; exit; } if (!$cfg['group_' . $inUser->group_id] and !$inUser->is_admin and !$cfg['m_group_' . $inUser->group_id]) { echo 'error'; exit; } //Коректность времени добавления $start_hour = date("H", $start); if ($start_hour < $cfg['calendar_minTime']) { $start_hour = $cfg['calendar_minTime']; } $end_hour = date("H", $end); $end_min = date("i", $end); if ($end_hour > $cfg['calendar_maxTime']) { $end_hour = $cfg['calendar_maxTime']; $end_min = "00"; } if ($inUser->is_admin) { $can_moderate = true; } $catigories = $model->getAllCategories(); $bb_toolbar = cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum'); $smilies = cmsPage::getSmilesPanel('message'); $smarty = $inPage->initTemplate('components', 'com_calendar_add.tpl'); $smarty->assign('catigories', $catigories); $smarty->assign('start_date', date("d.m.Y", $start)); $smarty->assign('start_hour', $start_hour); $smarty->assign('start_min', date("i", $start)); $smarty->assign('end_date', date("d.m.Y", $end)); $smarty->assign('end_hour', $end_hour); $smarty->assign('end_min', $end_min); $smarty->assign('can_moderate', $can_moderate); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('cfg', $cfg); //print_r($cfg); $smarty->display('com_calendar_add.tpl'); exit; } if ($do == "ajax_get_config") { print json_encode($cfg); exit; } // FOTOLIB if ($do == "imagerotate") { $side = $md5 = $inCore->request('side', 'str'); $image_id = $inCore->request('image_id', 'int'); include 'fotolib.class.php'; $foto = new FotoLib(); $foto->Rotate($side, $image_id); $inCore->redirectBack(); exit; } if ($do == "imagedelete") { include 'fotolib.class.php'; $image_id = $inCore->request('image_id', 'int'); $foto = new FotoLib(); $foto->Delete($image_id); $inCore->redirectBack(); exit; } if ($do == "ajax_format_date") { print cmsCore::dateFormat(date('Y-m-d H:i:s', $inCore->request('time', 'int')), 0, 0, 0); exit; } }