diff --git a/Flexexport.class.php b/Flexexport.class.php index 3d23c67762594466ae7735a04f1ab76546a24d5e..512bcbe59201e7842803aec15f8c149b05bf3c81 100644 --- a/Flexexport.class.php +++ b/Flexexport.class.php @@ -62,17 +62,7 @@ class Flexexport extends StudIPPlugin implements SystemPlugin public function loadJavascript() { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - PageLayout::addHeadElement( - 'script', - [ - 'type' => 'text/javascript', - 'src' => $this->getPluginUrl() . '/assets/Flexexport.js' - ] - ); - } else { - $this->addScript('assets/Flexexport.js'); - } + $this->addScript('assets/Flexexport.js'); } diff --git a/classes/decorators/CourseDateDecorator.class.php b/classes/decorators/CourseDateDecorator.class.php index 0d617a9c8ddf6bedf877008ebd86c41bda1fbcee..7caadbe738ac58795fcebcde08ce3cf86d8a3a59 100644 --- a/classes/decorators/CourseDateDecorator.class.php +++ b/classes/decorators/CourseDateDecorator.class.php @@ -213,19 +213,10 @@ class CourseDateDecorator extends Decorator } if ($this->fields['room_name']->isEnabled()) { $room_name = ''; - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //RRV1 - $room = $course_date->room_assignment->resource; - if ($room) { - $room_name = $room->getName(); - } - } else { - //RRV2 - if ($course_date->room_booking->resource) { - $room = $course_date->room_booking->resource->getDerivedClassInstance(); - if ($room instanceof \Room) { - $room_name = $room->name; - } + if ($course_date->room_booking->resource) { + $room = $course_date->room_booking->resource->getDerivedClassInstance(); + if ($room instanceof \Room) { + $room_name = $room->name; } } $result[$this->fields['room_name']->getDisplayName()] = $room_name; diff --git a/classes/exporters/CourseDateAndRoomBookingExporter.class.php b/classes/exporters/CourseDateAndRoomBookingExporter.class.php index 3c3a3b2892a9169fe60a16e420b9c41f922c684d..05a8ae159ebd5016e8c526a962741bbae056f41c 100644 --- a/classes/exporters/CourseDateAndRoomBookingExporter.class.php +++ b/classes/exporters/CourseDateAndRoomBookingExporter.class.php @@ -70,44 +70,20 @@ class CourseDateAndRoomBookingExporter extends Exporter $template->set_attribute('hide_past_events', $this->config->getParameter('hide_past_events')); $template->set_attribute('hide_exdates_without_comment', $this->config->getParameter('hide_exdates_without_comment')); - $building_search = null; - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //The old resource management system. - $building_category_name = \Config::get()->FLEXEXPORT_RRV1_BUILDING_CATEGORY_NAME; - $db = \DBManager::get(); - $building_search = new \QuickSearch( - 'selected_building_id', - new \SQLSearch( - sprintf( - "SELECT resources_objects.resource_id AS id, resources_objects.name AS name - FROM resources_objects - INNER JOIN resources_categories rc - ON resources_objects.category_id = rc.category_id - WHERE - rc.name = %s - AND - resources_objects.name LIKE :input - ORDER BY resources_objects.name", - $db->quote($building_category_name) - ) - ) - ); - } else { - $building_search = new \QuickSearch( - 'selected_building_id', - new \SQLSearch( - "SELECT resources.id, resources.name - FROM resources - INNER JOIN resource_categories rc - ON resources.category_id = rc.id - WHERE - rc.class_name = 'Building' - AND - resources.name LIKE :input - ORDER BY resources.name" - ) - ); - } + $building_search = new \QuickSearch( + 'selected_building_id', + new \SQLSearch( + "SELECT resources.id, resources.name + FROM resources + INNER JOIN resource_categories rc + ON resources.category_id = rc.id + WHERE + rc.class_name = 'Building' + AND + resources.name LIKE :input + ORDER BY resources.name" + ) + ); $building_search->fireJSFunctionOnSelect('STUDIP.Flexexport.selectItem'); $building_search->setAttributes( [ @@ -118,41 +94,18 @@ class CourseDateAndRoomBookingExporter extends Exporter $selected_buildings = []; if ($this->config->getParameter('building_ids')) { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //The old resource management system. - $building_category_name = \Config::get()->FLEXEXPORT_RRV1_BUILDING_CATEGORY_NAME; - $get_buildings_stmt = $db->prepare( - "SELECT `resource_id` AS id, ro.`name` AS name - FROM resources_objects ro - INNER JOIN resources_categories rc - ON ro.category_id = rc.category_id - WHERE - rc.name = :building_category_name - AND - ro.resource_id IN ( :building_ids ) - ORDER BY ro.name ASC" - ); - $get_buildings_stmt->execute( - [ - 'building_category_name' => $building_category_name, - 'building_ids' => $this->config->getParameter('building_ids') - ] - ); - $selected_buildings = $get_buildings_stmt->fetchAll(\PDO::FETCH_OBJ); - } else { - $selected_buildings = \Building::findBySql( - "INNER JOIN resource_categories rc - ON resources.category_id = rc.id - WHERE - rc.class_name = 'Building' - AND - resources.id IN ( :building_ids ) - ORDER BY resources.name ASC", - [ - 'building_ids' => $this->config->getParameter('building_ids') - ] - ); - } + $selected_buildings = \Building::findBySql( + "INNER JOIN resource_categories rc + ON resources.category_id = rc.id + WHERE + rc.class_name = 'Building' + AND + resources.id IN ( :building_ids ) + ORDER BY resources.name ASC", + [ + 'building_ids' => $this->config->getParameter('building_ids') + ] + ); } $template->set_attribute('selected_buildings', $selected_buildings); @@ -348,86 +301,23 @@ class CourseDateAndRoomBookingExporter extends Exporter $room_ids = []; if ($building_ids) { //Get all IDs of relevant rooms. - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //The old resource management system. - $building_category_name = \Config::get()->FLEXEXPORT_RRV1_BUILDING_CATEGORY_NAME; - - $get_room_ids_stmt = $db->prepare( - "SELECT DISTINCT `resource_id` FROM `resources_objects` - INNER JOIN `resources_categories` rc - ON rc.category_id = `resources_objects`.category_id - WHERE - rc.`is_room` > '0' - AND - `parent_id` IN ( - SELECT `resource_id` FROM `resources_objects` - INNER JOIN `resources_categories` rc - ON rc.category_id = `resources_objects`.category_id - WHERE rc.`name` = :building_category_name - AND `resource_id` IN ( :building_ids ) - )" - ); - $get_room_ids_stmt->execute( - [ - 'building_category_name' => $building_category_name, - 'building_ids' => $building_ids - ] - ); - $room_ids = $get_room_ids_stmt->fetchAll(\PDO::FETCH_COLUMN, 0); - //Now run another statement to get all room resources that may - //lie on layer below the already retrieved rooms. This is useful - //in case there are resource labels between the rooms and the - //buildings. - $get_2nd_room_ids_stmt = $db->prepare( - "SELECT DISTINCT `resource_id` FROM `resources_objects` - INNER JOIN `resources_categories` rc - ON rc.`category_id` = `resources_objects`.`category_id` - WHERE - rc.`is_room` > '0' - AND - `parent_id` IN ( - SELECT `resource_id` FROM `resources_objects` - WHERE `parent_id` IN ( :building_ids ) - )" - ); - $get_2nd_room_ids_stmt->execute(['building_ids' => $building_ids]); - $second_layer_room_ids = $get_2nd_room_ids_stmt->fetchAll(\PDO::FETCH_COLUMN, 0); - $room_ids = array_merge( - $room_ids, - $second_layer_room_ids - ); - } else { - //The new room management system. - $buildings = \Building::findMany($building_ids); - if ($buildings) { - foreach ($buildings as $building) { - $rooms = $building->findChildrenByClassName('Room'); - if (!$rooms) { - continue; - } - foreach ($rooms as $room) { - $room_ids[$room->id] = $room->id; - } + $buildings = \Building::findMany($building_ids); + if ($buildings) { + foreach ($buildings as $building) { + $rooms = $building->findChildrenByClassName('Room'); + if (!$rooms) { + continue; + } + foreach ($rooms as $room) { + $room_ids[$room->id] = $room->id; } } } } else { //Get all IDs of all rooms. - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //Old resource management system. - $room_ids = $db->query( - "SELECT DISTINCT `resource_id` FROM `resources_objects` - INNER JOIN `resources_categories` rc - ON rc.category_id = `resources_objects`.category_id - WHERE - rc.`is_room` > '0'" - )->fetchAll(\PDO::FETCH_COLUMN, 0); - } else { - //New room management system. - $rooms = \Room::findAll(); - foreach ($rooms as $room) { - $room_ids[] = $room->id; - } + $rooms = \Room::findAll(); + foreach ($rooms as $room) { + $room_ids[] = $room->id; } } $with_room_name = array_key_exists('room_name', $this->enabled_field_config); @@ -474,11 +364,7 @@ class CourseDateAndRoomBookingExporter extends Exporter $fields_sql[] = "IF (r.`name` IS NOT NULL AND r.`name` <> '', r.`name`, `termine`.`raum`) AS room_name"; } if ($with_booking_description) { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - $fields_sql[] = "rb.`user_free_name` AS booking_description"; - } else { - $fields_sql[] = "rb.`description` AS booking_description"; - } + $fields_sql[] = "rb.`description` AS booking_description"; } $course_dates_stmt_sql .= implode(', ', $fields_sql) . ' '; $course_dates_stmt_sql .= "FROM `termine` "; @@ -488,40 +374,23 @@ class CourseDateAndRoomBookingExporter extends Exporter } else { $course_dates_stmt_sql .= "LEFT JOIN "; } - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - $course_dates_stmt_sql .= "`resources_assign` rb - ON `termine`.`termin_id` = rb.`assign_user_id` "; - if ($building_ids) { - $course_dates_stmt_sql .= "INNER JOIN "; - } else { - $course_dates_stmt_sql .= "LEFT JOIN "; - } - $course_dates_stmt_sql .= "`resources_objects` r - ON rb.`resource_id` = r.`resource_id` "; + $course_dates_stmt_sql .= "`resource_bookings` rb + ON `termine`.`termin_id` = rb.`range_id` "; + if ($building_ids) { + $course_dates_stmt_sql .= "INNER JOIN "; } else { - $course_dates_stmt_sql .= "`resource_bookings` rb - ON `termine`.`termin_id` = rb.`range_id` "; - if ($building_ids) { - $course_dates_stmt_sql .= "INNER JOIN "; - } else { - $course_dates_stmt_sql .= "LEFT JOIN "; - } - $course_dates_stmt_sql .= "`resources` r - ON rb.`resource_id` = r.`id` "; + $course_dates_stmt_sql .= "LEFT JOIN "; } + $course_dates_stmt_sql .= "`resources` r + ON rb.`resource_id` = r.`id` "; } if ($institute_ids) { $course_dates_stmt_sql .= "INNER JOIN `seminare` ON `termine`.`range_id` = `seminare`.`seminar_id` "; } else if ($building_ids && !$with_room_name && !$with_booking_description) { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - $course_dates_stmt_sql .= "INNER JOIN `resources_assign` rb - ON `termine`.`termin_id` = rb.`assign_user_id` "; - } else { - $course_dates_stmt_sql .= "INNER JOIN `resource_bookings` rb - ON `termine`.`termin_id` = rb.`range_id` "; - } + $course_dates_stmt_sql .= "INNER JOIN `resource_bookings` rb + ON `termine`.`termin_id` = rb.`range_id` "; } if (!$institute_ids && $with_course_name) { $course_dates_stmt_sql .= "LEFT JOIN `seminare` @@ -649,306 +518,207 @@ class CourseDateAndRoomBookingExporter extends Exporter $result = []; - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - //The old resource management system. - //use lib/resources/lib/AssignEventList.class.php - - $room_name_stmt = $db->prepare( - 'SELECT `name` FROM `resources_objects` - WHERE `resource_id` = :id' - ); - - //Extra performance penalty for the old room management system: - //After retrieving all relevant resource bookings, we have to filter - //out those that are already retrieved via course dates. - //To do that, we need to get all course date IDs into an array. - $course_date_ids = []; - foreach ($course_dates as $course_date) { - $course_date_ids[] = $course_date['course_date_id']; - } - $booking_data = []; - foreach ($room_ids as $room_id) { - $booking_data_object = new \AssignEventList( - $bookings_stmt_params['begin'], - $bookings_stmt_params['end'], - $room_id - ); - while ($event = $booking_data_object->nextEvent()) { - if (in_array($event->assign_user_id, $course_date_ids)) { - //The booking belongs to a course date that has already - //been retrieved. - continue; - } - if ($hide_past_events) { - //Extra check, maybe a bug in AssignEventlist: - if ($event->end < $begin->getTimestamp()) { - continue; - } - } - $course_date_id = ''; - $course_id = ''; - if (\CourseDate::exists($event->assign_user_id)) { - $course_date_id = $event->assign_user_id; - } - if (\Course::exists($event->assign_user_id)) { - $course_id = $event->assign_user_id; - } - $now = time(); - $data = []; - if ($with_begin) { - $data['begin'] = $event->begin; - } - if ($with_end) { - $data['end'] = $event->end; - } - if ($with_course_name) { - if ($course_id) { - $course = \Course::find($course_id); - $data['course_name'] = $course->name; - } else { - //No such course. - $data['course_name'] = ''; - } - } - if ($with_course_date_id) { - $data['course_date_id'] = $course_date_id; - } - if ($with_course_id) { - $data['course_id'] = $course_id; - } - if ($with_status) { - $data['status'] = - ($event->begin > $now) && ($event->begin <= ($now + 600)) - ? 'upcoming' - : ( - ($event->begin <= $now) && ($event->end >= $now) - ? 'running' - : (($event->end < $now) ? 'past' : 'takes_place') - ); - } - if ($with_today) { - $data['today'] = (date('dmY', $event->begin) == date('dmY', $now) - || date('dmY', $event->end) == date('dmY', $now)); - } - if ($with_room_name) { - $room_name_stmt->execute(['id' => $event->resource_id]); - $data['room_name'] = $room_name_stmt->fetchColumn(); - } - if ($with_booking_description) { - $data['booking_description'] = $event->user_free_name; - } - $booking_data[] = $data; - } + if ($building_ids) { + $bookings_stmt_sql = "SELECT "; + $fields_sql = []; + if ($with_begin) { + $fields_sql[] = "rbi.`begin` AS begin"; } - $result = array_merge( - $course_dates, - $booking_data - ); - } else { - //New room management system. - if ($building_ids) { - $bookings_stmt_sql = "SELECT "; - $fields_sql = []; - if ($with_begin) { - $fields_sql[] = "rbi.`begin` AS begin"; - } - if ($with_end) { - $fields_sql[] = "rbi.`end` AS end"; - } - if ($with_course_name) { - $fields_sql[] = '`seminare`.`name` AS course_name'; - } - if ($with_course_date_id || $with_course_id) { - $fields_sql[] = "rb.`range_id` AS range_id"; - } - if ($with_status) { - $fields_sql[] = "IF ( - rbi.`begin` > UNIX_TIMESTAMP() AND rbi.`begin` <= UNIX_TIMESTAMP() + 600, - 'upcoming', - IF ( - rbi.`begin` <= UNIX_TIMESTAMP() AND rbi.`end` >= UNIX_TIMESTAMP(), - 'running', - IF (rbi.`end` < UNIX_TIMESTAMP(), 'past', 'takes_place') - ) - ) AS status"; - } - if ($with_today) { - $fields_sql[] = "IF ( - ( - FROM_UNIXTIME(rbi.`begin`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() - OR - FROM_UNIXTIME(rbi.`end`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() - ), - '1', - '0' - ) AS today"; - } - if ($with_room_name) { - $fields_sql[] = "r.name AS room_name"; - } - if ($with_booking_description) { - $fields_sql[] = "rb.`description` AS booking_description"; - } - $bookings_stmt_sql .= ' ' . implode(', ', $fields_sql) . ' '; - $bookings_stmt_sql .= "FROM - `resource_booking_intervals` rbi - INNER JOIN `resource_bookings` rb - ON rbi.`booking_id` = rb.`id` "; - if ($with_room_name) { - $bookings_stmt_sql .= "INNER JOIN `resources` r - ON r.`id` = rbi.`resource_id` "; - } - $bookings_stmt_sql .= " - WHERE - rbi.`resource_id` IN ( :room_ids ) - AND - ( - rbi.`begin` BETWEEN :begin AND :end - OR - rbi.`end` BETWEEN :begin AND :end + if ($with_end) { + $fields_sql[] = "rbi.`end` AS end"; + } + if ($with_course_name) { + $fields_sql[] = '`seminare`.`name` AS course_name'; + } + if ($with_course_date_id || $with_course_id) { + $fields_sql[] = "rb.`range_id` AS range_id"; + } + if ($with_status) { + $fields_sql[] = "IF ( + rbi.`begin` > UNIX_TIMESTAMP() AND rbi.`begin` <= UNIX_TIMESTAMP() + 600, + 'upcoming', + IF ( + rbi.`begin` <= UNIX_TIMESTAMP() AND rbi.`end` >= UNIX_TIMESTAMP(), + 'running', + IF (rbi.`end` < UNIX_TIMESTAMP(), 'past', 'takes_place') ) - AND rb.`range_id` NOT IN ( - SELECT `termin_id` FROM `termine` - WHERE - `date` BETWEEN :begin AND :end - OR - `end_time` BETWEEN :begin AND :end - )"; - - $bookings_stmt = $db->prepare($bookings_stmt_sql); - //Get all buildings and then store all room-IDs of the rooms - //that lie in the selected buildings. - $buildings = \Building::findMany($this->building_ids); - if (!$buildings) { - //No data can be generated. - return []; - } - $bookings_stmt_params['room_ids'] = $room_ids; - } else { - $bookings_stmt_sql = "SELECT "; - $fields_sql = []; - if ($with_begin) { - $fields_sql[] = "rbi.`begin` AS begin"; - } - if ($with_end) { - $fields_sql[] = "rbi.`end` AS end"; - } - if ($with_course_name) { - $fields_sql[] = '`seminare`.`name` AS course_name'; - } - if ($with_course_date_id || $with_course_id) { - $fields_sql[] = "rb.`range_id` AS range_id"; - } - if ($with_status) { - $fields_sql[] = "IF ( - rbi.`begin` > UNIX_TIMESTAMP() AND rbi.`begin` <= UNIX_TIMESTAMP() + 600, - 'upcoming', - IF ( - rbi.`begin` <= UNIX_TIMESTAMP() AND rbi.`end` >= UNIX_TIMESTAMP(), - 'running', - IF (rbi.`end` < UNIX_TIMESTAMP(), 'past', 'takes_place') - ) - ) AS status"; - } - if ($with_today) { - $fields_sql[] = "IF ( - ( - FROM_UNIXTIME(rbi.`begin`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() - OR - FROM_UNIXTIME(rbi.`end`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() - ), - '1', - '0' - ) AS today"; - } - if ($with_room_name) { - $fields_sql[] = "r.name AS room_name"; - } - if ($with_booking_description) { - $fields_sql[] = "rb.`description` AS booking_description"; - } - $bookings_stmt_sql .= ' ' . implode(', ', $fields_sql) . ' '; - $bookings_stmt_sql .= "FROM - `resource_booking_intervals` rbi - INNER JOIN `resource_bookings` rb - ON rbi.`booking_id` = rb.`id` "; - if ($with_course_name) { - $bookings_stmt_sql .= "LEFT JOIN `seminare` - ON rb.`range_id` = `seminare`.`seminar_id` "; - } - if ($with_room_name) { - $bookings_stmt_sql .= "INNER JOIN `resources` r - ON r.`id` = rbi.`resource_id` "; - } - $bookings_stmt_sql .= " - WHERE + ) AS status"; + } + if ($with_today) { + $fields_sql[] = "IF ( ( - rbi.`begin` BETWEEN :begin AND :end + FROM_UNIXTIME(rbi.`begin`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() OR - rbi.`end` BETWEEN :begin AND :end + FROM_UNIXTIME(rbi.`end`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() + ), + '1', + '0' + ) AS today"; + } + if ($with_room_name) { + $fields_sql[] = "r.name AS room_name"; + } + if ($with_booking_description) { + $fields_sql[] = "rb.`description` AS booking_description"; + } + $bookings_stmt_sql .= ' ' . implode(', ', $fields_sql) . ' '; + $bookings_stmt_sql .= "FROM + `resource_booking_intervals` rbi + INNER JOIN `resource_bookings` rb + ON rbi.`booking_id` = rb.`id` "; + if ($with_room_name) { + $bookings_stmt_sql .= "INNER JOIN `resources` r + ON r.`id` = rbi.`resource_id` "; + } + $bookings_stmt_sql .= " + WHERE + rbi.`resource_id` IN ( :room_ids ) + AND + ( + rbi.`begin` BETWEEN :begin AND :end + OR + rbi.`end` BETWEEN :begin AND :end + ) + AND rb.`range_id` NOT IN ( + SELECT `termin_id` FROM `termine` + WHERE + `date` BETWEEN :begin AND :end + OR + `end_time` BETWEEN :begin AND :end + )"; + $bookings_stmt = $db->prepare($bookings_stmt_sql); + //Get all buildings and then store all room-IDs of the rooms + //that lie in the selected buildings. + $buildings = \Building::findMany($this->building_ids); + if (!$buildings) { + //No data can be generated. + return []; + } + $bookings_stmt_params['room_ids'] = $room_ids; + } else { + $bookings_stmt_sql = "SELECT "; + $fields_sql = []; + if ($with_begin) { + $fields_sql[] = "rbi.`begin` AS begin"; + } + if ($with_end) { + $fields_sql[] = "rbi.`end` AS end"; + } + if ($with_course_name) { + $fields_sql[] = '`seminare`.`name` AS course_name'; + } + if ($with_course_date_id || $with_course_id) { + $fields_sql[] = "rb.`range_id` AS range_id"; + } + if ($with_status) { + $fields_sql[] = "IF ( + rbi.`begin` > UNIX_TIMESTAMP() AND rbi.`begin` <= UNIX_TIMESTAMP() + 600, + 'upcoming', + IF ( + rbi.`begin` <= UNIX_TIMESTAMP() AND rbi.`end` >= UNIX_TIMESTAMP(), + 'running', + IF (rbi.`end` < UNIX_TIMESTAMP(), 'past', 'takes_place') ) - AND rb.`range_id` NOT IN ( - SELECT `termin_id` FROM `termine` - WHERE - `date` BETWEEN :begin AND :end + ) AS status"; + } + if ($with_today) { + $fields_sql[] = "IF ( + ( + FROM_UNIXTIME(rbi.`begin`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() OR - `end_time` BETWEEN :begin AND :end - )"; - - $bookings_stmt = $db->prepare($bookings_stmt_sql); + FROM_UNIXTIME(rbi.`end`, GET_FORMAT(DATE, 'ISO')) = CURRENT_DATE() + ), + '1', + '0' + ) AS today"; + } + if ($with_room_name) { + $fields_sql[] = "r.name AS room_name"; + } + if ($with_booking_description) { + $fields_sql[] = "rb.`description` AS booking_description"; } + $bookings_stmt_sql .= ' ' . implode(', ', $fields_sql) . ' '; + $bookings_stmt_sql .= "FROM + `resource_booking_intervals` rbi + INNER JOIN `resource_bookings` rb + ON rbi.`booking_id` = rb.`id` "; + if ($with_course_name) { + $bookings_stmt_sql .= "LEFT JOIN `seminare` + ON rb.`range_id` = `seminare`.`seminar_id` "; + } + if ($with_room_name) { + $bookings_stmt_sql .= "INNER JOIN `resources` r + ON r.`id` = rbi.`resource_id` "; + } + $bookings_stmt_sql .= " + WHERE + ( + rbi.`begin` BETWEEN :begin AND :end + OR + rbi.`end` BETWEEN :begin AND :end + ) + AND rb.`range_id` NOT IN ( + SELECT `termin_id` FROM `termine` + WHERE + `date` BETWEEN :begin AND :end + OR + `end_time` BETWEEN :begin AND :end + )"; - $bookings_stmt->execute($bookings_stmt_params); - $result = $course_dates; - foreach ($bookings_stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) { - //We must keep the key order or the CSV output formatter will - //ruin the output: - $result_row = []; - if ($with_begin) { - $result_row['begin'] = $row['begin']; - } - if ($with_end) { - $result_row['end'] = $row['end']; - } - if ($with_course_name) { - $result_row['course_name'] = $row['course_name']; - } - if ($with_course_date_id) { - $result_row['course_date_id'] = ''; - } - if ($with_course_id) { - $result_row['course_id'] = ''; - } - if ($with_status) { - $result_row['status'] = $row['status']; - } - if ($with_today) { - $result_row['today'] = $row['today']; - } - if ($with_room_name) { - $result_row['room_name'] = $row['room_name']; - } - if ($with_booking_description) { - $result_row['booking_description'] = $row['booking_description']; - } - if (isset($row['range_id'])) { - if ($row['range_id']) { - //We must check whethet the range-ID represents a course-ID - //or a course date ID. - if ($with_course_date_id) { - if (\CourseDate::exists($row['range_id'])) { - $result_row['course_date_id'] = $row['range_id']; - } + $bookings_stmt = $db->prepare($bookings_stmt_sql); + } + + $bookings_stmt->execute($bookings_stmt_params); + $result = $course_dates; + foreach ($bookings_stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) { + //We must keep the key order or the CSV output formatter will + //ruin the output: + $result_row = []; + if ($with_begin) { + $result_row['begin'] = $row['begin']; + } + if ($with_end) { + $result_row['end'] = $row['end']; + } + if ($with_course_name) { + $result_row['course_name'] = $row['course_name']; + } + if ($with_course_date_id) { + $result_row['course_date_id'] = ''; + } + if ($with_course_id) { + $result_row['course_id'] = ''; + } + if ($with_status) { + $result_row['status'] = $row['status']; + } + if ($with_today) { + $result_row['today'] = $row['today']; + } + if ($with_room_name) { + $result_row['room_name'] = $row['room_name']; + } + if ($with_booking_description) { + $result_row['booking_description'] = $row['booking_description']; + } + if (isset($row['range_id'])) { + if ($row['range_id']) { + //We must check whethet the range-ID represents a course-ID + //or a course date ID. + if ($with_course_date_id) { + if (\CourseDate::exists($row['range_id'])) { + $result_row['course_date_id'] = $row['range_id']; } - if ($with_course_id) { - if (\Course::exists($row['range_id'])) { - $result_row['course_id'] = $row['range_id']; - } + } + if ($with_course_id) { + if (\Course::exists($row['range_id'])) { + $result_row['course_id'] = $row['range_id']; } } } - $result[] = $result_row; } + $result[] = $result_row; } uasort( diff --git a/classes/exporters/CourseDateExporter.class.php b/classes/exporters/CourseDateExporter.class.php index 9276b70bcdc8c113f33d62af2a72e788c65a4c65..efeb7404c10da4705356497a1d624271ec5e9925 100644 --- a/classes/exporters/CourseDateExporter.class.php +++ b/classes/exporters/CourseDateExporter.class.php @@ -290,11 +290,7 @@ class CourseDateExporter extends Exporter $fields_sql[] = "IF (r.`name` IS NOT NULL AND r.`name` <> '', r.`name`, `termine`.`raum`) AS room_name"; } if ($with_booking_description) { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - $fields_sql[] = "rb.`user_free_name` AS booking_description"; - } else { - $fields_sql[] = "rb.`description` AS booking_description"; - } + $fields_sql[] = "rb.`description` AS booking_description"; } if ($with_course_name) { $fields_sql[] = "`seminare`.`name` AS course_name"; @@ -303,17 +299,10 @@ class CourseDateExporter extends Exporter $course_dates_stmt_sql .= "FROM `termine` "; if ($with_room_name || $with_booking_description) { - if (version_compare($GLOBALS['SOFTWARE_VERSION'], '4.5', '<')) { - $course_dates_stmt_sql .= "LEFT JOIN `resources_assign` rb - ON `termine`.`termin_id` = rb.`assign_user_id` - LEFT JOIN `resources_objects` r - ON rb.`resource_id` = r.`resource_id` "; - } else { - $course_dates_stmt_sql .= "LEFT JOIN `resource_bookings` rb - ON `termine`.`termin_id` = rb.`range_id` - LEFT JOIN `resources` r - ON rb.`resource_id` = r.`id` "; - } + $course_dates_stmt_sql .= "LEFT JOIN `resource_bookings` rb + ON `termine`.`termin_id` = rb.`range_id` + LEFT JOIN `resources` r + ON rb.`resource_id` = r.`id` "; } if ($institute_ids || $course_type || $with_course_name) { diff --git a/migrations/03_remove_rrv1_compat.php b/migrations/03_remove_rrv1_compat.php new file mode 100644 index 0000000000000000000000000000000000000000..630df85b7a7e3fdca458e2a5c7d1337cdc5f51f8 --- /dev/null +++ b/migrations/03_remove_rrv1_compat.php @@ -0,0 +1,26 @@ +<?php + + +class RemoveRRV1Compat extends Migration +{ + protected function up() + { + $c = Config::get(); + $c->delete('FLEXEXPORT_RRV1_BUILDING_CATEGORY_NAME'); + } + + + protected function down() + { + $c = Config::get(); + $c->create( + 'FLEXEXPORT_RRV1_BUILDING_CATEGORY_NAME', + [ + 'type' => 'string', + 'section' => 'Flexexport', + 'value' => 'Gebäude', + 'comment' => 'Name der Ressourcenkategorie für Gebäude. Diese Eigenschaft ist ab Stud.IP 4.5 irrelevant!' + ] + ); + } +} diff --git a/plugin.manifest b/plugin.manifest index fa6a0227ca8375d267639ea9f6bbe1657c9d5c63..6f9e7489589b951944e0d2456e93809cf702427b 100644 --- a/plugin.manifest +++ b/plugin.manifest @@ -1,7 +1,7 @@ pluginname=Flexexport pluginclassname=Flexexport origin=data-quest -version=0.7.2 -studipMinVersion=4.3 +version=0.7.3 +studipMinVersion=4.5 studipMaxVersion=5.2.99 description=Das Flexexport-Plugin erlaubt den Export von Stud.IP-Inhalten in verschiedenen Formaten.